| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- 'use strict';
- /**
- * 阿里云获取语音token接口
- *
- * @author CaiAoLin
- * @date 2018/1/25
- * @version
- */
- const Core = require('@alicloud/pop-core');
- const smsAli = require('../const/sms_alitemplate.js');
- const Nls = require('alibabacloud-nls');
- class NlsToken {
- constructor(ctx) {
- this.ctx = ctx;
- this.appkey = 'nE0d2Ue08rtPhb9e';
- this.shotUrl = 'wss://nls-gateway.cn-shanghai.aliyuncs.com/ws/v1';
- }
- async getToken() {
- const client = new Core({
- accessKeyId: smsAli.accessKey,
- accessKeySecret: smsAli.accessKeySecret,
- endpoint: 'https://nls-meta.cn-shanghai.aliyuncs.com', // 注意语音服务用这个endpoint
- apiVersion: '2019-02-28',
- });
- const params = {
- Action: 'CreateToken',
- };
- const requestOption = {
- method: 'POST',
- };
- try {
- const result = await client.request('CreateToken', params, requestOption);
- return result.Token.Id;
- } catch (err) {
- this.ctx.logger.error('获取语音识别Token失败', err);
- throw err;
- }
- }
- /**
- * audioBuffer: Buffer of wav (16k)
- */
- async oneShotRecognition(token, audioBuffer, url = this.shotUrl, appkey = this.appkey) {
- return new Promise(async (resolve, reject) => {
- let finalText = '';
- const sr = new Nls.SpeechRecognition({
- url,
- appkey,
- token,
- enable_punctuation_prediction: false,
- enable_inverse_text_normalization: true,
- });
- sr.on('started', (msg) => {
- try {
- const data = JSON.parse(msg);
- // console.log('Client recv started:', data);
- } catch (err) {
- console.log('started parse error:', err);
- }
- });
- sr.on('changed', (msg) => {
- try {
- const data = JSON.parse(msg);
- if (data.payload && data.payload.result) {
- finalText = data.payload.result;
- }
- console.log('changed finalText:', finalText);
- } catch (err) {
- console.log('changed parse error:', err);
- }
- });
- sr.on('completed', (msg) => {
- try {
- const data = JSON.parse(msg);
- if (data.payload && data.payload.result) {
- finalText = data.payload.result;
- }
- // console.log('completed finalText:', finalText);
- } catch (err) {
- console.log('completed parse error:', err);
- }
- });
- sr.on('closed', () => {
- // console.log('closed finalText:', finalText);
- resolve(finalText.trim());
- });
- sr.on('failed', (msg) => {
- try {
- const data = JSON.parse(msg);
- reject(new Error(JSON.stringify(data)));
- } catch (err) {
- reject(new Error(msg));
- }
- });
- try {
- // 启动识别
- await sr.start(sr.defaultStartParams(), true, 6000);
- if (!sr.sendAudio(audioBuffer)) {
- throw new Error('send audio failed');
- }
- await sr.close();
- } catch (err) {
- console.log('error on start:', err);
- return reject(err);
- }
- });
- }
- }
- module.exports = NlsToken;
|