本文介绍如何使用阿里云智能语音服务提供的Node.js SDK,包括SDK的安装方法及SDK代码示例。
前提条件
在使用SDK前,请先阅读接口说明,详情请参见接口说明。
下载安装
说明
SDK支持nodev14及以上版本。
请确认已经安装nodejs&npm环境,并完成基本配置。
下载并安装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"
关键接口和参数描述
Node.js中,实现语音合成的功能,围绕SpeechSynthesizer
类进行,一般按照如下步骤编写代码(步骤2和步骤3顺序可互换):
创建
SpeechSynthesizer
实例,此时会传入语音合成服务地址和认证信息。设置语音合成的发音人、采样率、音频格式等属性:创建属性对象或者修改
SpeechSynthesizer
实例的defaultStartParams
方法返回的默认属性对象。补充
SpeechSynthesizer
实例的回调函数on
的细节(观察者模式——当连接成功建立、合成语音、发生异常等时,服务器会通过回调on
函数通知客户端)。调用
SpeechSynthesizer
实例的start
函数开始语音合成。
代码示例
"use strict"
require('log-timestamp')(`${process.pid}`)
const fs = require("fs")
const Nls = require("alibabacloud-nls")
const sleep = (waitTimeInMs) => new Promise(resolve => setTimeout(resolve, waitTimeInMs))
const util = require("util")
const readline = require("readline")
const args = process.argv.slice(2)
//const Memwatch = require("node-memwatch-new")
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具体操作,请参见:https://help.aliyun.com/document_detail/450514.html
let b1 = []
let loadIndex = 0
//let hd = new Memwatch.HeapDiff()
let needDump = true
async function runOnce(line) {
console.log(`speak: ${line}`)
loadIndex++
//let dumpFile = fs.createWriteStream(`${process.pid}.wav`, {flags:"w"})
let tts = new Nls.SpeechSynthesizer({
url: URL,
appkey:APPKEY,
token:TOKEN
})
tts.on("meta", (msg)=>{
console.log("Client recv metainfo:", msg)
})
tts.on("data", (msg)=>{
console.log(`recv size: ${msg.length}`)
//console.log(dumpFile.write(msg, "binary"))
})
tts.on("completed", (msg)=>{
console.log("Client recv completed:", msg)
})
tts.on("closed", () => {
console.log("Client recv closed")
})
tts.on("failed", (msg)=>{
console.log("Client recv failed:", msg)
})
let param = tts.defaultStartParams()
// 待合成文本
param.text = line
// 发音人
param.voice = "aixia"
// 语调,范围是-500~500,可选,默认是0
// param.pitch_rate = 100
// 语速,范围是-500~500,默认是0
// param.speech_rate = 100
// 设置返回音频的编码格式
// param.format = "wav"
// 设置返回音频的采样率
// param.sample_rate = 16000
// 是否开启字级别时间戳
// param.enable_subtitle = true
try {
await tts.start(param, true, 6000)
} catch(error) {
console.log("error on start:", error)
return
} finally {
//dumpFile.end()
}
console.log("synthesis done")
await sleep(2000)
}
async function test() {
console.log("load test case:", args[0])
const fileStream = fs.createReadStream(args[0])
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity
})
for await (const line of rl) {
b1.push(line)
}
while (true) {
for (let text of b1) {
await runOnce(text)
}
}
}
test()
该文章对您有帮助吗?