用JS轻应用与HaaS 600实现语音播报音箱

简介: 聚焦设备端,干货讲述IoT JS轻应用和HaaS600硬件平台实现播报音箱方案

1、播报音箱介绍

播报音箱主要功能为语音播报,需要和云端保持连接,接收云端播报消息,设备端按照指定规则进行播报。常见的播报场景有支付到账信息、动态更新的定制化音频内容、用户操作回应和提醒等。播报音箱方案涉及云端、设备端的开发,属于端云一体化解决方案。本文聚焦于设备端,主要讲述基于IoT JS轻应用和HaaS600硬件平台实现播报音箱方案。

image.png

2、硬件

HaaS600是基于移远EC100Y-CN通信模组的LTE Cat 1开发板,专为M2M 和IoT应用而设计,可应用于共享控制、金融支付、智能语音、泛工业等场景的智能硬件产品开发(详情可参考HaaS600平台介绍)

3、软件框架

image.png

4、应用开发

4.1、连接云平台
使用JS轻应用的IoT API,传入三元组信息,即可快速建立和云端的连接,示例:

var iot = require('iot');

const productkey = '';

const devicename = '';

const devicesecret = '';

var iotdev = iot.device({

productKey: productkey,

deviceName: devicename,

deviceSecret: devicesecret,

success: function() {

console.log('success connect to aliyun iot server');

},

fail: function() {

console.log('fail to connect to aliyun iot server');

}

});
接收云端播报消息(类型为service),示例:

iotdev.on('service', function(serviceid, request) {

console.log('received cloud serviceid is ' + serviceid + '\r\n');

console.log('received cloud request is ' + request + '\r\n');

});

4.2、播报语音
IoT轻应用提供音频播放组件audioplayer,使用相关API可实现本地和在线音频文件的播放及控制。示例:

var audioplayer = require('audioplayer');

var source = "/test.mp3"

audioplayer.play(source);

var sourceList = ["/test1.mp3", "/test2.mp3", "/test3.mp3"];

audioplayer.listPlay(sourceList);
单个文件的播报,例如广告、TTS合成语音等,可通过audioplayer.play()接口,传入音频文件地址(支持本地文件以及http、https网络音频)
多个文件拼接组合播报,例如金额的拼接,将需要拼接播放的音频文件存放在数组中,通过audioplayer.listPlay()接口,将音频文件进行拼接和播放。

4.3、按键处理

var gpio = require('gpio');

var led_network = gpio.open({

id: 'led_network'

});

var key_function = gpio.open({

id: 'key_function'

});

var key_volumeup = gpio.open({

id: 'key_volumeup'

});

var key_volumedown = gpio.open({

id: 'key_volumedown'

});

key_function.onIRQ({

trigger: 'rising',

cb: function() {

console.log('key function pressed');

}

});

key_volumeup.onIRQ({

trigger: 'rising',

cb: function() {

console.log('key volumeup pressed');

}

});

key_volumedown.onIRQ({

trigger: 'rising',

cb: function() {

console.log('key volumedown pressed');

}

});

4.4、低功耗
当系统空闲时自动进入低功耗状态。

var pm = require('pm');

pm.setAutosleepMode(1)

5、物模型

5.1、播报金额
物模型:

{

speechs:["alipay","{$100}","yuan"], id:"123", timestamp:"1595765968612" } 定义: id: 消息id,用于判断是否是重复推送 timestamp:交易时间 speechs:表示需要拼接的内容,有3类 1. {$+数字}:表示按照金额进行播放

  1. {N+数字}或{n+数字}:表示按照数字进行播放
  2. 其它:表示需要播放的语料的标识 播放

5.2、播放音频链接
物模型:

{

url:"http://*****",

id:"123",

}
定义:
url:音频内容url,设备端收到后通过该url下载并播放
id: 编号,用于判断是否是重复推送

5.3、本地语料更新(SpeechPost)

{

speechs:[{"id":"test","url":"http://****"}],

jobcode:"123"

}

字段:
speechs:需要更新的语料列表,每个元素包括id和url,其中id表示语料标识、url是语料下载地址
jobcode:表示语料更新任务id,用于云端和设备同步语料更新任务执行状态

6、功能实现

6.1、连接云平台

var iot = require('iot');

var iotdev = iot.device({

productKey: productkey,

deviceName: devicename,

deviceSecret: devicesecret,

success: function() {

console.log('success connect to aliyun iot server');

},

fail: function() {

console.log('fail to connect to aliyun iot server');

}

});
执行完成后,和云端的连接通道建立。

6.2、物模型处理

iotdev.on('service', function(serviceid, request) {

console.log('received cloud serviceid is ' + serviceid + '\r\n');

console.log('received cloud request is ' + request + '\r\n');

if (serviceid.indexOf("AudioPlayback") != -1) {

voiceboxPlayContent(request);

} else if (serviceid.indexOf("SpeechBroadcast") != -1) {

voiceboxPlayReceipt(request);

} else if (serviceid.indexOf("SpeechPost") != -1) {

voiceboxResUpdate(request);

}

});

6.3、语音拼接
数字拼接
按照普通数字发音规则进行拼接,例如手机号。
按照金额类数字发音规则进行拼接,例如收款金额。
本地语音拼接
通过音频标识查找本地文件。
拼接结果:
例如,

{

speechs:["alipay","{$100}","yuan"],

id:123,

timestamp:"1595765968612"

}
拼接后:

图.png

6.4、语料更新
下载并更新本地语料文件

function voiceboxResUpdate(resource)

{

var resource = eval('(' + resource + ')');

var speechArray = resource.speechs;

for (var speechIndex = 0; speechIndex < speechArray.length; speechIndex++) {

var speech = speechArray[speechIndex];

console.log('update local speech id: ' + speech.id + ', url: ' + speech.url);

var resourcePath = toneDir + speech.id + tonenameSuffix;

http.download({

  url: speech.url,

  filepath: resourcePath,

  method: 'GET',

  headers: {

    'Accept':'*/*'

  },

  success: function (data) {

    if(data === defaultMessage) {

      console.log('http: [success] http.download');

    }

  }

});

}

}

7、开发者技术支持

如需更多技术支持,可加入钉钉开发者群,或者关注微信公众号20210115164252868.png

更多技术与解决方案介绍,请访问阿里云AIoT首页 (https://iot.aliyun.com/)

相关文章
|
2月前
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
606 2
|
29天前
|
监控 JavaScript 算法
如何使用内存监控工具来定位和解决Node.js应用中的性能问题?
总之,利用内存监控工具结合代码分析和业务理解,能够逐步定位和解决 Node.js 应用中的性能问题,提高应用的运行效率和稳定性。需要耐心和细致地进行排查和优化,不断提升应用的性能表现。
181 77
|
1月前
|
存储 缓存 JavaScript
如何优化Node.js应用的内存使用以提高性能?
通过以上多种方法的综合运用,可以有效地优化 Node.js 应用的内存使用,提高性能,提升用户体验。同时,不断关注内存管理的最新技术和最佳实践,持续改进应用的性能表现。
122 62
|
26天前
|
存储 缓存 监控
如何使用内存监控工具来优化 Node.js 应用的性能
需要注意的是,不同的内存监控工具可能具有不同的功能和特点,在使用时需要根据具体工具的要求和操作指南进行正确使用和分析。
67 31
|
27天前
|
JavaScript 前端开发 API
深入理解Node.js事件循环及其在后端开发中的应用
本文旨在揭示Node.js的核心特性之一——事件循环,并探讨其对后端开发实践的深远影响。通过剖析事件循环的工作原理和关键组件,我们不仅能够更好地理解Node.js的非阻塞I/O模型,还能学会如何优化我们的后端应用以提高性能和响应能力。文章将结合实例分析事件循环在处理大量并发请求时的优势,以及如何避免常见的编程陷阱,从而为读者提供从理论到实践的全面指导。
|
26天前
|
JavaScript
如何使用内存快照分析工具来分析Node.js应用的内存问题?
需要注意的是,不同的内存快照分析工具可能具有不同的功能和操作方式,在使用时需要根据具体工具的说明和特点进行灵活运用。
41 3
|
1月前
|
JavaScript 前端开发 安全
JavaScript与TypeScript的对比,分析了两者的特性及在实际项目中的应用选择
本文深入探讨了JavaScript与TypeScript的对比,分析了两者的特性及在实际项目中的应用选择。JavaScript以其灵活性和广泛的生态支持著称,而TypeScript通过引入静态类型系统,提高了代码的可靠性和可维护性,特别适合大型项目。文章还讨论了结合使用两种语言的优势,以及如何根据项目需求和技术背景做出最佳选择。
54 4
|
1月前
|
机器学习/深度学习 人工智能 JavaScript
JavaScript和TypeScript的未来发展趋势及其在Web开发中的应用前景
本文探讨了JavaScript和TypeScript的未来发展趋势及其在Web开发中的应用前景。JavaScript将注重性能优化、跨平台开发、AI融合及WebAssembly整合;TypeScript则强调与框架整合、强类型检查、前端工程化及WebAssembly的深度结合。两者结合发展,特别是在Vue 3.0中完全采用TypeScript编写,预示着未来的Web开发将更加高效、可靠。
42 4
|
1月前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
45 5
|
29天前
|
前端开发 JavaScript 关系型数据库
基于 Vue2.0 + Nest.js 全栈开发的后台应用
Vue2 Admin 是一个基于 Vue2 和 Ant Design Pro 开发的前端项目,配合 Nest.js 构建的后端,提供了一个完整的全栈后台应用解决方案。该项目支持动态国际化、用户权限管理、操作日志记录等功能,适合全栈开发者学习参考。线上预览地址:https://vue2.baiwumm.com/,用户名:Admin,密码:abc123456。