前面分別實現了baresip android 語音、視頻 參考地址https://blog.csdn.net/Java_lilin/article/details/100039464
本文對接通後獲取雙方的語音用訊飛實時語音轉寫來識別
(如果覺得麻煩可以去https://item.taobao.com/item.htm?id=606696026272購買個維護好的)
1.獲取通話數據 參考sndfile模塊 錄音模塊
https://github.com/alfredh/baresip/tree/master/modules/sndfile
主要用到aufilt_register(baresip_aufiltl(), &sndfile); 我們不用編譯它 只需要其中一部分代碼
在原來註冊 vidsrc_register()和 baresip_vidispl();的地方加上這個
sndfile結構體也需要拷貝過來
struct sndfile_enc {
struct aufilt_enc_st af; /* base class */
enum aufmt fmt;
};
struct sndfile_dec {
struct aufilt_dec_st af; /* base class */
enum aufmt fmt;
FILE *file = NULL; //保存pcm文件
};
static struct aufilt sndfile = { LE_INIT, "sndfile", encodeaudio_update, encodeaudio, decodeaudio_update, decodeaudio };
上面的主要方法 編碼的一樣 主要現實現保存爲pcm的 我通話的編碼是pcmu的也就是16bit 8000hz 單聲道
static int decodeaudio_update(struct aufilt_dec_st **stp, void **ctx,
const struct aufilt *af, struct aufilt_prm *prm,
const struct audio *au)
{
//解碼初始化
struct sndfile_dec *st;
int err = 0;
(void)ctx;
(void)af;
(void)au;
if (!stp || !prm)
return EINVAL;
st = static_cast<sndfile_dec *>(mem_zalloc(sizeof(*st), dec_destructor));
if (!st)
return EINVAL;
st->file=fopen("/data/data/lilin.com/files/1.pcm","wb");
st->fmt = static_cast<aufmt>(prm->fmt);
if(st->fmt==AUFMT_S16LE ){
LOGE( "====ok 頻率和聲道=%d=%d",prm->srate , prm->ch);
}
*stp = (struct aufilt_dec_st *)st;
return err;
}
static int decodeaudio(struct aufilt_dec_st *st, void *sampv, size_t *sampc)
{
//解碼pcm數據
struct sndfile_dec *sf = (struct sndfile_dec *)st;
size_t num_bytes;
if (!st || !sampv || !sampc)
return EINVAL;
//num_bytes = *sampc * aufmt_sample_size(sf->fmt);
LOGE("解碼寫");
fwrite(sampv, *sampc, aufmt_sample_size(sf->fmt) ,sf->file); //寫入pcm的文件
//LOGE("decodeaudio=%d", num_bytes);
return 0;
}
static void dec_destructor(void *arg)
{
struct sndfile_dec *st = static_cast<sndfile_dec *>(arg);
fclose(st->file);LOGE("關閉文件");
list_unlink(&st->af.le);
}
好了撥打一個通話解碼的聲音就會在/data/data/lilin.com/files/1.pcm 保存了
2.導出pcm 用audacity-win-2.3.0播放下
播放聲音是對方的 很ok
3.使用訊飛的語音轉寫來識別 https://www.xfyun.cn/doc/asr/rtasr/API.html#接口說明
在後臺創建一個運用獲取appid和key 下載java的demo 例子導入eclipse
導入eclipse 修改項目的編碼爲utf-8後運行結果如下
好了聲音的識別就可以了 挺簡單的
接下來你你要吧它加到android項目裏就可以了 把編解碼的pcm數據通過jni傳到java層按照訊飛數據發送要求發送 結果就會輸出 你可以把它顯示到界面 一個實時通訊翻譯就可以了
後面我們在到視頻的幀上加上人臉識別 表請製作等等特效