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