小程序口令紅包開發(fā)源碼,語音口令紅包小程序開發(fā)
Hishop最新消息,日前小程序掀起了口令紅包熱,包你說,包你拼,開口紅,歡樂翻牌一系列語音口令小程序大火,那么口令紅包小程序要如何開發(fā)呢。
該功能的應用場景是:A用戶設(shè)置了一個中文的口令紅包,接收到該紅包的B用戶需要用語音說出該口令,完全匹配的話則獲取該紅包的某個比例金額。
錄音自然是調(diào)用小程序提供的原生接口,不過這里比較坑的是微信的錄音格式是 .silk。網(wǎng)上搜索的方法是先將.silk格式轉(zhuǎn)成wav或者MP3格式,然后再調(diào)用各大云服務平臺的接口實現(xiàn)語音識別功能。
這里使用了 https://github.com/kn007/silk... 提供的庫用來轉(zhuǎn)成wav格式,然后使用百度的語音識別開放接口 https://ai.baidu.com/tech/spe... 來識別語音結(jié)果。
業(yè)務實現(xiàn)步驟如下:
1.前端實現(xiàn)錄音功能
2.upload接口上傳.silk語音文件,入庫
3.觸發(fā)語音識別task,返回成功給前端(異步)
4.前端輪詢識別結(jié)果。
因為從上傳到識別到返回結(jié)果是一個耗時操作,所以識別過程最好是異步操作。(第三步)
upload語音接口部分代碼:
// ... 業(yè)務代碼略
$voice = $this->getCreatedVoiceByBody(); // 上傳并入庫
$this->identifyVoice($voice); // 觸發(fā)語音識別task
// ...
public function identifyVoice($voice)
{
WorkerUtil::sendTaskByRouteAndParams('task/detectvoice', ['voiceid' => $voice->id, 'type' =>'redpack']);
}
如上可見,將一條包含了語音文件地址的記錄id及類型發(fā)送到了后端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目錄,調(diào)用shell轉(zhuǎn)換格式,將轉(zhuǎn)換后的格式調(diào)用baidu的語音接口進行識別,再將結(jié)果入庫。
voice表結(jié)構(gòu)如下:
如此,便完成了語音識別功能。
企業(yè)可以在小程序中輸入自己的廣告語,這不僅讓眾多的粉絲幫助企業(yè)做品牌營銷,還能活躍舊粉,吸引新粉,從而轉(zhuǎn)變成潛在客戶??傊?,包你說語音哄包小程序?qū)ζ髽I(yè)品牌的推廣有著巨大的價值。