商城系統(tǒng) 注冊(cè)

小程序口令紅包開發(fā)源碼,語(yǔ)音口令紅包小程序開發(fā)

2018-01-19|HiShop
導(dǎo)讀:Hishop最新消息,日前小程序掀起了口令紅包熱,包你說(shuō),包你拼,開口紅,歡樂翻牌一系列語(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)如下:

小程序口令紅包開發(fā)源碼,語(yǔ)音口令紅包小程序開發(fā)

  如此,便完成了語(yǔ)音識(shí)別功能。

  企業(yè)可以在小程序中輸入自己的廣告語(yǔ),這不僅讓眾多的粉絲幫助企業(yè)做品牌營(yíng)銷,還能活躍舊粉,吸引新粉,從而轉(zhuǎn)變成潛在客戶。總之,包你說(shuō)語(yǔ)音哄包小程序?qū)ζ髽I(yè)品牌的推廣有著巨大的價(jià)值。

電話咨詢 預(yù)約演示 0元開店