小程序口令紅包開發源碼,語音口令紅包小程序開發
Hishop最新消息,日前小程序掀起了口令紅包熱,包你說,包你拼,開口紅,歡樂翻牌一系列語音口令小程序大火,那么口令紅包小程序要如何開發呢。
該功能的應用場景是:A用戶設置了一個中文的口令紅包,接收到該紅包的B用戶需要用語音說出該口令,完全匹配的話則獲取該紅包的某個比例金額。
錄音自然是調用小程序提供的原生接口,不過這里比較坑的是微信的錄音格式是 .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的語音接口進行識別,再將結果入庫。
voice表結構如下:
如此,便完成了語音識別功能。
企業可以在小程序中輸入自己的廣告語,這不僅讓眾多的粉絲幫助企業做品牌營銷,還能活躍舊粉,吸引新粉,從而轉變成潛在客戶。總之,包你說語音哄包小程序對企業品牌的推廣有著巨大的價值。