本文介紹如何使用智能語音交互一句話識別的Node.js SDK,包括SDK的安裝方法及SDK代碼示例等。
前提條件
在使用SDK前,請先閱讀接口說明,詳情請參見接口說明。
請確認已經安裝nodejs&npm環境,并完成基本配置。
SDK支持nodev14及以上版本。
下載安裝
下載并安裝SDK。
通過以下命令完成SDK下載和安裝。
npm install alibabacloud-nls
導入SDK。
在代碼中使用require或者import導入SDK。
const Nls = require('alibabacloud-nls') //Nls內部含SpeechRecognition, SpeechTranscription, SpeechSynthesizer //以下為使用import導入SDK //import { SpeechRecognition } from "alibabacloud-nls" //import { SpeechTranscription } from "alibabacloud-nls" //import { SpeechSynthesizer } from "alibabacloud-nls"
一句話識別
Class: SpeechRecognition
SpeechRecognition類用于進行一句話識別。
defaultStartParams()
返回一個默認的推薦參數,其中Format為PCM,采樣率為16000 Hz,中間結果、標點預測和ITN均為打開狀態。您在拿到默認對象后可以根據自身需求,結合接口說明中的參數列表來添加和修改參數。
參數說明:無。
返回值:
object類型對象,字段如下:
{ "format": "pcm", "sample_rate": 16000, "enable_intermediate_result": true, "enable_punctuation_predition": true, "enable_inverse_text_normalization": true }
on(which, handler)
設置事件回調。
參數說明:
參數
類型
參數說明
which
String
事件名稱。
handler
Function
回調函數。
支持的回調事件如下:
事件名稱
事件說明
回調函數參數個數
回調函數參數說明
started
一句話識別開始。
1
String類型,開始信息。
changed
一句話識別中間結果。
1
String類型,中間結果信息。
completed
一句話識別完成。
1
String類型,完成信息。
closed
連接關閉。
0
無。
failed
錯誤。
1
String類型,錯誤信息。
返回值:無。
async start(param, enablePing, pingInterval)
根據param發起一次一句話識別,param可以參考defaultStartParams方法的返回,具體參數見接口說明。
參數說明:
參數
類型
參數說明
param
Object
一句話識別參數。
enablePing
Boolean
是否自動向云端發送ping請求,默認false。
true:發送。
false:不發送。
pingInterval
Number
發ping請求間隔時間,默認6000,單位為毫秒。
返回值: Promise對象,當started事件發生后觸發resolve,并攜帶started信息;當任何錯誤發生后觸發reject,并攜帶異常信息。
async close(param)
停止一句話識別。
參數說明:
參數
類型
參數說明
param
Object
一句話識別結束參數。
返回值:
Promise對象,當completed事件發生后觸發resolve,并攜帶completed信息;當任何錯誤發生后觸發reject,并攜帶異常信息。
shutdown()
強制斷開連接。
參數說明:無。
返回值:無。
sendAudio(data)
發送音頻,音頻格式必須和參數中一致。
參數說明:
參數
類型
參數說明
data
Buffer
二進制音頻數據。
返回值:無。
代碼示例
"use strict"
const Nls = require("alibabacloud-nls")
const fs = require("fs")
const sleep = (waitTimeInMs) => new Promise(resolve => setTimeout(resolve, waitTimeInMs))
const URL = "wss://nls-gateway.cn-shanghai.aliyuncs.com/ws/v1"
const APPKEY = "Your Appkey" //獲取Appkey請前往控制臺:https://nls-portal.console.aliyun.com/applist
const TOKEN = "Your Token" //獲取Token具體操作,請參見:http://bestwisewords.com/document_detail/450514.html
let audioStream = fs.createReadStream("test1.pcm", {
encoding: "binary",
highWaterMark: 1024
})
let b1 = []
audioStream.on("data", (chunk) => {
let b = Buffer.from(chunk, "binary")
b1.push(b)
})
audioStream.on("close", async ()=>{
while (true) {
let sr = new Nls.SpeechRecognition({
url: URL,
appkey:APPKEY,
token:TOKEN
})
sr.on("started", (msg)=>{
console.log("Client recv started:", msg)
})
sr.on("changed", (msg)=>{
console.log("Client recv changed:", msg)
})
sr.on("completed", (msg)=>{
console.log("Client recv completed:", msg)
})
sr.on("closed", () => {
console.log("Client recv closed")
})
sr.on("failed", (msg)=>{
console.log("Client recv failed:", msg)
})
try {
await sr.start(sr.defaultStartParams(), true, 6000)
} catch(error) {
console.log("error on start:", error)
continue
}
try {
for (let b of b1) {
if (!sr.sendAudio(b)) {
throw new Error("send audio failed")
}
await sleep(20)
}
} catch(error) {
console.log("sendAudio failed:", error)
continue
}
try {
console.log("close...")
await sr.close()
} catch(error) {
console.log("error on close:", error)
}
await sleep(2000)
}
})