用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/)

相关文章
|
28天前
|
监控 安全 中间件
Next.js 实战 (十):中间件的魅力,打造更快更安全的应用
这篇文章介绍了什么是Next.js中的中间件以及其应用场景。中间件可以用于处理每个传入请求,比如实现日志记录、身份验证、重定向、CORS配置等功能。文章还提供了一个身份验证中间件的示例代码,以及如何使用限流中间件来限制同一IP地址的请求次数。中间件相当于一个构建模块,能够简化HTTP请求的预处理和后处理,提高代码的可维护性,有助于创建快速、安全和用户友好的Web体验。
|
30天前
|
缓存 NoSQL JavaScript
Vue.js应用结合Redis数据库:实践与优化
将Vue.js应用与Redis结合,可以实现高效的数据管理和快速响应的用户体验。通过合理的实践步骤和优化策略,可以充分发挥两者的优势,提高应用的性能和可靠性。希望本文能为您在实际开发中提供有价值的参考。
56 11
|
1月前
|
人工智能 JavaScript 前端开发
一段 JavaScript 代码,集成网站AI语音助手
根据本教程,只需通过白屏化的界面操作,即可快速构建一个专属的AI智能体。
|
1月前
|
JavaScript 前端开发
【Vue.js】监听器功能(EventListener)的实际应用【合集】
而此次问题的核心就在于,Vue实例化的时机过早,在其所依赖的DOM结构尚未完整构建完成时就已启动挂载流程,从而导致无法找到对应的DOM元素,最终致使计算器功能出现异常,输出框错误地显示“{{current}}”,并且按钮的交互功能也完全丧失响应。为了让代码结构更为清晰,便于后续的维护与管理工作,我打算把HTML文件中标签内的JavaScript代码迁移到外部的JS文件里,随后在HTML文件中对其进行引用。
52 8
|
1月前
|
敏捷开发 人工智能 JavaScript
Figma-Low-Code:快速将Figma设计转换为Vue.js应用,支持低代码渲染、数据绑定
Figma-Low-Code 是一个开源项目,能够直接将 Figma 设计转换为 Vue.js 应用程序,减少设计师与开发者之间的交接时间,支持低代码渲染和数据绑定。
107 3
Figma-Low-Code:快速将Figma设计转换为Vue.js应用,支持低代码渲染、数据绑定
|
3月前
|
存储 缓存 监控
如何使用内存监控工具来优化 Node.js 应用的性能
需要注意的是,不同的内存监控工具可能具有不同的功能和特点,在使用时需要根据具体工具的要求和操作指南进行正确使用和分析。
91 31
|
3月前
|
JavaScript
如何使用内存快照分析工具来分析Node.js应用的内存问题?
需要注意的是,不同的内存快照分析工具可能具有不同的功能和操作方式,在使用时需要根据具体工具的说明和特点进行灵活运用。
76 3
|
3月前
|
JavaScript 前端开发 API
深入理解Node.js事件循环及其在后端开发中的应用
本文旨在揭示Node.js的核心特性之一——事件循环,并探讨其对后端开发实践的深远影响。通过剖析事件循环的工作原理和关键组件,我们不仅能够更好地理解Node.js的非阻塞I/O模型,还能学会如何优化我们的后端应用以提高性能和响应能力。文章将结合实例分析事件循环在处理大量并发请求时的优势,以及如何避免常见的编程陷阱,从而为读者提供从理论到实践的全面指导。
|
3月前
|
监控 JavaScript 算法
如何使用内存监控工具来定位和解决Node.js应用中的性能问题?
总之,利用内存监控工具结合代码分析和业务理解,能够逐步定位和解决 Node.js 应用中的性能问题,提高应用的运行效率和稳定性。需要耐心和细致地进行排查和优化,不断提升应用的性能表现。
224 77
|
3月前
|
前端开发 JavaScript 关系型数据库
基于 Vue2.0 + Nest.js 全栈开发的后台应用
Vue2 Admin 是一个基于 Vue2 和 Ant Design Pro 开发的前端项目,配合 Nest.js 构建的后端,提供了一个完整的全栈后台应用解决方案。该项目支持动态国际化、用户权限管理、操作日志记录等功能,适合全栈开发者学习参考。线上预览地址:https://vue2.baiwumm.com/,用户名:Admin,密码:abc123456。