日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

Node.js SDK

本文介紹如何使用阿里云智能語音服務(wù)提供的Node.js SDK,包括SDK的安裝方法及SDK代碼示例。

前提條件

在使用SDK前,請先閱讀接口說明,詳情請參見接口說明

下載安裝

說明
  • SDK支持nodev14及以上版本。

  • 請確認已經(jīng)安裝nodejs&npm環(huán)境,并完成基本配置。

  1. 下載并安裝SDK。

    通過以下命令完成SDK下載和安裝。

    npm install alibabacloud-nls
  2. 導(dǎo)入SDK。

    在代碼中使用require或者import導(dǎo)入SDK。

    const Nls = require('alibabacloud-nls')
    //Nls內(nèi)部含SpeechRecognition, SpeechTranscription, SpeechSynthesizer
    //以下為使用import導(dǎo)入SDK
    //import { SpeechRecognition } from "alibabacloud-nls"
    //import { SpeechTranscription } from "alibabacloud-nls"
    //import { SpeechSynthesizer } from "alibabacloud-nls"

語音合成

Class: SpeechSynthesizer

SpeechSynthesizer類用于進行語音合成。

  • 構(gòu)造函數(shù)參數(shù)說明:

參數(shù)

類型

參數(shù)說明

config

Object

連接配置對象。

  • config object說明:

參數(shù)

類型

參數(shù)說明

url

String

服務(wù)URL地址。

token

String

訪問Token,詳情可參見獲取Token概述

appkey

String

對應(yīng)項目Appkey。

defaultStartParams(voice)

返回一個默認的推薦參數(shù),其中voice為您自行提供,采樣率為16000 Hz,格式為WAV,音量50,語速語調(diào)皆為0,不開啟字幕。您在拿到默認對象后可以根據(jù)自身需求,結(jié)合接口說明中的參數(shù)列表來添加和修改參數(shù)。

  • 參數(shù)說明:

    參數(shù)

    類型

    參數(shù)說明

    voice

    String

    發(fā)音人。

  • 返回值:

    object類型對象,字段如下:

    {
        "voice": voice, 
        "format": "wav",
        "sample_rate": 16000,
        "volume": 50,
        "speech_rate": 0,
        "pitch_rate": 0,
        "enable_subtitle": false
    }

on(which, handler)

設(shè)置事件回調(diào)。

  • 參數(shù)說明:

參數(shù)

類型

參數(shù)說明

which

String

事件名稱。

handler

Function

回調(diào)函數(shù)。

支持的回調(diào)事件如下:

事件名稱

事件說明

回調(diào)函數(shù)參數(shù)個數(shù)

回調(diào)函數(shù)參數(shù)說明

meta

字幕回調(diào)。

1

String類型,字幕信息。

data

合成音頻回調(diào)。

1

Buffer類型,合成音頻數(shù)據(jù)。

completed

語音合成完成。

1

String類型,完成信息。

closed

連接關(guān)閉。

0

無。

failed

錯誤。

1

String類型,錯誤信息。

  • 返回值:無。

async start(param, enablePing, pingInterval)

根據(jù)param發(fā)起一次一句話識別,param可以參考defaultStartParams方法的返回,具體參數(shù)見接口說明

  • 參數(shù)說明:

參數(shù)

類型

參數(shù)說明

param

Object

語音合成參數(shù)。

enablePing

Boolean

是否自動向云端發(fā)送ping請求,默認false。

  • true:發(fā)送。

  • false:不發(fā)送。

pingInterval

Number

發(fā)ping請求間隔時間,默認6000,單位為毫秒。

  • 返回值: Promise對象,當started事件發(fā)生后觸發(fā)resolve,并攜帶started信息;當任何錯誤發(fā)生后觸發(fā)reject,并攜帶異常信息。

代碼示例

"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具體操作,請參見:http://m.bestwisewords.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"
  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()