您好,登錄后才能下訂單哦!
今天小編給大家分享一下語音口令紅包小程序如何開發的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
錄音自然是調用小程序提供的原生接口,不過這里比較坑的是微信的錄音格式是 .silk。網上搜索的方法是先將.silk格式轉成wav或者MP3格式,然后再調用各大云服務平臺的接口實現語音識別功能。
這里使用了 https://github.com/kn007/silk... 提供的庫用來轉成wav格式,然后使用百度的語音識別開放接口 https://ai.baidu.com/tech/spe... 來識別語音結果。
業務實現步驟如下:
1.前端實現錄音功能
2.upload接口上傳.silk語音文件,入庫
3.觸發語音識別task,返回成功給前端(異步)
4.前端輪詢識別結果。
因為從上傳到識別到返回結果是一個耗時操作,所以識別過程最好是異步操作。(第三步)
upload語音接口部分代碼:
// ... 業務代碼略
$voice = $this->getCreatedVoiceByBody(); // 上傳并入庫
$this->identifyVoice($voice); // 觸發語音識別task
// ...
public function identifyVoice($voice)
{
WorkerUtil::sendTaskByRouteAndParams('task/detectvoice', ['voiceid' => $voice->id, 'type' =>'redpack']);
}
如上可見,將一條包含了語音文件地址的記錄id及類型發送到了后端task服務。
后端task服務處理如下:
class DetectVoice extends Action
{
public function run($voiceid, $type = 'redpack')
{
if ($type == 'redpack') {
$voice = Voices::findOne($voiceid);
$url = $voice->voice;
$saveName = '/runtime/redpack-'.$voiceid.'.silk';
$convertName = '/runtime/redpack-'.$voiceid.'.wav';
}
$this->saveToLocalByRemoteVoiceUrlAndLocalFileName($url, $saveName);
$cfg = [
'appKey' => 'xxx',
'appSecret' => 'xxx',
'appId' => 'xxx',
];
$util = new BaiduVoiceUtil($cfg);
$code = exec("bash /www/silk-v3-decoder/converter.sh {$saveName} wav");
if ($code == 0) {
$result = $util->asr($convertName);
if ($result['err_no'] == 0) {
$voicesResult = json_encode($result['result'], JSON_UNESCAPED_UNICODE);
$voice->result = $voicesResult;
$voice->save();
@unlink($saveName);
@unlink($convertName);
}
}
task服務的處理邏輯也很清晰:接收需要識別的voiceid,查找記錄,把語音文件下到本地某個tmp目錄,調用shell轉換格式,將轉換后的格式調用baidu的語音接口進行識別,再將結果入庫。
以上就是“語音口令紅包小程序如何開發”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。