微信小程序和百度的語(yǔ)音識(shí)別接口詳解
介紹
因?yàn)轫?xiàng)目需要,使用到了微信小程序和百度的語(yǔ)音接口 現(xiàn)在將項(xiàng)目中的一個(gè)小模塊拿出來(lái)單獨(dú)分享.
技術(shù)關(guān)鍵字
- 微微信小程序
- 百度語(yǔ)音接口
- nodejs,express
- fluent-ffmegp
環(huán)境
- windows 10
- vs code 1.20.1
- 微信小程序開(kāi)發(fā)工具 1.02.1802270
- 花生殼-提供域名和內(nèi)容穿透-用于方便本地遠(yuǎn)程調(diào)試微信小程序
考慮到業(yè)務(wù)并不復(fù)雜,所以就將所有的代碼都放在一個(gè)頁(yè)面就可以了(wxml,wxss,js統(tǒng)稱為一個(gè)頁(yè)面)
文件目錄
頁(yè)面
index.wxml
<button type='default' bindtouchstart='startrecorderHandel' bindtouchend="sendrecorderHandel">開(kāi)始8錄音</button> <view> 你說(shuō)的話是: <view> {{msg}} </view> </view>
index.js
// 錄音對(duì)象 const recorderManager = wx.getRecorderManager(); function sendRecord(src) { var obj = { // 已經(jīng)在花生殼中映射到本地端口-3001 url: "http://xxx:34306/post", filePath: src, name: "fffile", header: { 'Content-Type': 'application/json' }, success: function (result) { var data = JSON.parse(result.data); // msg 為最終語(yǔ)音識(shí)別的字符串 var msg = data.result; // 獲取當(dāng)前頁(yè)面對(duì)象 var page = getCurrentPages()[0]; page.setData({ msg: msg }); }, fail: function (err) { console.log(err); } }; wx.uploadFile(obj) } // 結(jié)束錄音的時(shí)候觸發(fā) recorderManager.onStop((res) => { // 獲取文件路徑-提交到后臺(tái)-后臺(tái)發(fā)送到百度 sendRecord(res.tempFilePath); }) recorderManager.onError((res) => { console.log("error", res); }); Page({ /** * 頁(yè)面的初始數(shù)據(jù) */ data: { msg: "" }, // 按下按鈕的時(shí)候觸發(fā) startrecorderHandel() { // 開(kāi)始錄音 recorderManager.start({ }); }, // 松開(kāi)按鈕的時(shí)候觸發(fā)-發(fā)送錄音 sendrecorderHandel() { // 結(jié)束錄音 recorderManager.stop(); }, /** * 生命周期函數(shù)--監(jiān)聽(tīng)頁(yè)面加載 */ onLoad: function (options) { wx.authorize({ scope: 'record' }) } })
后臺(tái)nodejs接口文件目錄
index.js
var express = require('express'); var app = express(); var fs = require('fs'); var Multiparty = require('multiparty'); // 轉(zhuǎn)碼工具 var ffmpeg = require('fluent-ffmpeg'); var AipSpeechClient = require("baidu-aip-sdk").speech; // #region 創(chuàng)建百度授權(quán) // 設(shè)置APPID/AK/SK var APP_ID = "xxx"; var API_KEY = "xxx"; var SECRET_KEY = "xxx"; // 百度請(qǐng)求對(duì)象 var client = new AipSpeechClient(APP_ID, API_KEY, SECRET_KEY); // 新建一個(gè)對(duì)象,建議只保存一個(gè)對(duì)象調(diào)用服務(wù)接口 app.post('/post', function (req, res, next) { //生成multiparty對(duì)象,并配置上傳目標(biāo)路徑 var form = new Multiparty.Form({ uploadDir: 'uploads/' }); //上傳完成后處理 form.parse(req, function (err, fields, files) { var filesTemp = JSON.stringify(files, null, 2); var inputFile = files.fffile[0]; var uploadedPath = inputFile.path; var command = ffmpeg(); command.addInput(uploadedPath) // 將1.aac 變?yōu)?.wav .save(uploadedPath.slice(0, -3) + "wav") .on('error', function (err) { console.log(err); }) .on('end', function () { // 將錄音文件轉(zhuǎn)為buffer var voice = fs.readFileSync(uploadedPath.slice(0, -3) + "wav"); var voiceBuffer = new Buffer(voice); // 發(fā)送buffer到百度接口 返回語(yǔ)音對(duì)應(yīng)的字符串 client.recognize(voiceBuffer, 'wav', 16000).then(function (result) { console.log('<recognize>: ' + JSON.stringify(result)); res.end(JSON.stringify(result)); }, function (err) { console.log(err); }); }); }); }); var server = app.listen(3001, function () { var host = server.address().address; var port = server.address().port; console.log('Example app listening at http://%s:%s', host, port); });
啟動(dòng)
下載項(xiàng)目
git clone https://github.com/itcastWsy/wx_baidu.git
使用微信小程序打開(kāi) 微信前臺(tái) 目錄
配置 后臺(tái)的接口地址
打開(kāi) 微信nodejs后臺(tái) 后臺(tái)文件夾
輸入 npm i
安裝依賴
輸入 命令 啟動(dòng)項(xiàng)目 npm run start
手機(jī)微信掃一掃小程序 - 語(yǔ)音輸入 “大吉大利”
注意事項(xiàng)
當(dāng)使用微信開(kāi)發(fā)工具 發(fā)送的語(yǔ)音文件的格式是 aac,但是使用手機(jī)微信發(fā)送的格式是 m4a 這里直接處理的是m4a 轉(zhuǎn)碼工具是ffmpeg
關(guān)于花生殼,如果不使用也可以,只不過(guò)需要自己代碼提交到有外網(wǎng)域名的服務(wù)器上接口,注意 開(kāi)發(fā)階段需要打開(kāi)小程序開(kāi)發(fā)工具內(nèi)的 不校驗(yàn)安全域名….的選項(xiàng)
當(dāng)調(diào)用百度接口的時(shí)候,需要填寫(xiě)上自己的相關(guān)信息
以上所述是小編給大家介紹的微信小程序和百度的語(yǔ)音識(shí)別接口詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
javascript正則表達(dá)式中的replace方法詳解
replace方法的語(yǔ)法是:stringObj.replace(rgExp, replaceText) 其中stringObj是字符串(string),reExp可以是正則表達(dá)式對(duì)象(RegExp)也可以是字符串(string),replaceText是替代查找到的字符串。。2015-04-04解決layui數(shù)據(jù)表格排序圖標(biāo)被超出的表頭擠出去的問(wèn)題
今天小編就為大家分享一篇解決layui數(shù)據(jù)表格排序圖標(biāo)被超出的表頭擠出去的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09JS+CSS實(shí)現(xiàn)電子商務(wù)網(wǎng)站導(dǎo)航模板效果代碼
這篇文章主要介紹了JS+CSS實(shí)現(xiàn)電子商務(wù)網(wǎng)站導(dǎo)航模板效果代碼,涉及JavaScript結(jié)合css動(dòng)態(tài)操作頁(yè)面元素屬性的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-09-09使用Microsoft Ajax Minifier減小JavaScript文件大小的方法
大家用來(lái)減小JavaScript文件下載大小的常見(jiàn)的方式有2種: 壓縮(compression)和縮?。╩inification)。2010-04-04JavaScript圖片上傳并預(yù)覽的完整實(shí)例
上傳是個(gè)老生常談的話題了,多數(shù)情況下各位想必用的是uplodify,webUploader之類的插件,這篇文章主要給大家介紹了關(guān)于JavaScript圖片上傳并預(yù)覽的相關(guān)資料,需要的朋友可以參考下2022-01-01JS日期和時(shí)間選擇控件升級(jí)版(自寫(xiě))
鑒于網(wǎng)上找到的幾個(gè)日期選擇程序有些問(wèn)題,遂著手重寫(xiě)一個(gè)程序,添加了時(shí)間選擇功能,截圖及源碼如下,有需要的朋友可以參考下2013-08-08js實(shí)現(xiàn)根據(jù)身份證號(hào)自動(dòng)生成出生日期
這篇文章主要介紹了js實(shí)現(xiàn)根據(jù)身份證號(hào)自動(dòng)生成出生日期,需要的朋友可以參考下2015-12-12