商城系統(tǒng) 注冊

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

2018-01-19|HiShop
導讀:Hishop最新消息,日前小程序掀起了口令紅包熱,包你說,包你拼,開口紅,歡樂翻牌一系列語音口令小程序大火,那么口令紅包小程序要如何開發(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)如下:

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

  如此,便完成了語音識別功能。

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

電話咨詢 預約演示 0元開店