zoukankan      html  css  js  c++  java
  • 用JS轻应用与HaaS600实现语音播报音箱

    播报音箱主要功能为语音播报,需要和云端保持连接,接收云端播报消息,设备端按照指定规则进行播报。常见的播报场景有支付到账信息、动态更新的定制化音频内容、用户操作回应和提醒等。播报音箱方案涉及云端、设备端的开发,属于端云一体化解决方案。本文聚焦于设备端,主要讲述基于IoT JS轻应用和HaaS600硬件平台实现播报音箱方案。
     
     
    2、硬件
    HaaS600是基于移远EC100Y-CN通信模组的LTE Cat 1开发板,专为M2M 和IoT应用而设计,可应用于共享控制、金融支付、智能语音、泛工业等场景的智能硬件产品开发(详情可参考HaaS600平台介绍
     
     
    3、软件框架
     
     
     
    4、应用开发
    4.1、连接云平台
    使用JS轻应用的IoT API,传入三元组信息,即可快速建立和云端的连接,示例:
     
    1. var iot = require('iot');
    2. const productkey = '<product-key>';
    3. const devicename = '<device-name>';
    4. const devicesecret = '<device-secret>';
    5. var iotdev = iot.device({
    6. productKey: productkey,
    7. deviceName: devicename,
    8. deviceSecret: devicesecret,
    9. success: function() {
    10. console.log('success connect to aliyun iot server');
    11. },
    12. fail: function() {
    13. console.log('fail to connect to aliyun iot server');
    14. }
    15. });
     
    接收云端播报消息(类型为service),示例:
     
    1. iotdev.on('service', function(serviceid, request) {
    2. console.log('received cloud serviceid is ' + serviceid + ' ');
    3. console.log('received cloud request is ' + request + ' ');
    4. });
     
    4.2、播报语音
    IoT轻应用提供音频播放组件audioplayer,使用相关API可实现本地和在线音频文件的播放及控制。示例:
     
    1. var audioplayer = require('audioplayer');
    2. var source = "/test.mp3"
    3. audioplayer.play(source);
    4. var sourceList = ["/test1.mp3", "/test2.mp3", "/test3.mp3"];
    5. audioplayer.listPlay(sourceList);
     
    1. 单个文件的播报,例如广告、TTS合成语音等,可通过audioplayer.play()接口,传入音频文件地址(支持本地文件以及http、https网络音频)
    2. 多个文件拼接组合播报,例如金额的拼接,将需要拼接播放的音频文件存放在数组中,通过audioplayer.listPlay()接口,将音频文件进行拼接和播放。
    4.3、按键处理
     
    1. var gpio = require('gpio');
    2.  
    3. var led_network = gpio.open({
    4. id: 'led_network'
    5. });
    6.  
    7. var key_function = gpio.open({
    8. id: 'key_function'
    9. });
    10.  
    11. var key_volumeup = gpio.open({
    12. id: 'key_volumeup'
    13. });
    14.  
    15. var key_volumedown = gpio.open({
    16. id: 'key_volumedown'
    17. });
    18.  
    19. key_function.onIRQ({
    20. trigger: 'rising',
    21. cb: function() {
    22. console.log('key function pressed');
    23. }
    24. });
    25.  
    26. key_volumeup.onIRQ({
    27. trigger: 'rising',
    28. cb: function() {
    29. console.log('key volumeup pressed');
    30. }
    31. });
    32.  
    33. key_volumedown.onIRQ({
    34. trigger: 'rising',
    35. cb: function() {
    36. console.log('key volumedown pressed');
    37. }
    38. });
     
    4.4、低功耗
    当系统空闲时自动进入低功耗状态。
     
    1. var pm = require('pm');
    2. pm.setAutosleepMode(1)
     
     
    5、物模型
    5.1、播报金额
    物模型:
     
    1. {
    2. speechs:["alipay","{$100}","yuan"],
    3. id:"123",
    4. timestamp:"1595765968612"
    5. }
     
    定义:
    id: 消息id,用于判断是否是重复推送
    timestamp:交易时间
    speechs:表示需要拼接的内容,有3类
    1. {$+数字}:表示按照金额进行播放
    2. {N+数字}或{n+数字}:表示按照数字进行播放
    3. 其它:表示需要播放的语料的标识 播放
     
    5.2、播放音频链接
    物模型:
     
    1. {
    2. url:"http://*********",
    3. id:"123",
    4. }
     
    定义:
    url:音频内容url,设备端收到后通过该url下载并播放
    id: 编号,用于判断是否是重复推送
    5.3、本地语料更新(SpeechPost)
     
    1. {
    2. speechs:[{"id":"test","url":"http://********"}],
    3. jobcode:"123"
    4.  
    5. }
     
    字段:
    speechs:需要更新的语料列表,每个元素包括id和url,其中id表示语料标识、url是语料下载地址
    jobcode:表示语料更新任务id,用于云端和设备同步语料更新任务执行状态
     
    6、功能实现
    6.1、连接云平台
     
    1. var iot = require('iot');
    2. var iotdev = iot.device({
    3. productKey: productkey,
    4. deviceName: devicename,
    5. deviceSecret: devicesecret,
    6. success: function() {
    7. console.log('success connect to aliyun iot server');
    8. },
    9. fail: function() {
    10. console.log('fail to connect to aliyun iot server');
    11. }
    12. });
     
    执行完成后,和云端的连接通道建立。
     
    6.2、物模型处理
     
    1. iotdev.on('service', function(serviceid, request) {
    2. console.log('received cloud serviceid is ' + serviceid + ' ');
    3. console.log('received cloud request is ' + request + ' ');
    4. if (serviceid.indexOf("AudioPlayback") != -1) {
    5. voiceboxPlayContent(request);
    6. } else if (serviceid.indexOf("SpeechBroadcast") != -1) {
    7. voiceboxPlayReceipt(request);
    8. } else if (serviceid.indexOf("SpeechPost") != -1) {
    9. voiceboxResUpdate(request);
    10. }
    11. });
     
     
    6.3、语音拼接
    • 数字拼接
    按照普通数字发音规则进行拼接,例如手机号。
    按照金额类数字发音规则进行拼接,例如收款金额。
    • 本地语音拼接
    通过音频标识查找本地文件。
    拼接结果:
    例如,
     
    1. {
    2. speechs:["alipay","{$100}","yuan"],
    3. id:123,
    4. timestamp:"1595765968612"
    5. }
     
    拼接后:
     
     
     
    6.4、语料更新
    下载并更新本地语料文件
     
    1. function voiceboxResUpdate(resource)
    2. {
    3. var resource = eval('(' + resource + ')');
    4. var speechArray = resource.speechs;
    5.  
    6. for (var speechIndex = 0; speechIndex < speechArray.length; speechIndex++) {
    7. var speech = speechArray[speechIndex];
    8. console.log('update local speech id: ' + speech.id + ', url: ' + speech.url);
    9. var resourcePath = toneDir + speech.id + tonenameSuffix;
    10. http.download({
    11. url: speech.url,
    12. filepath: resourcePath,
    13. method: 'GET',
    14. headers: {
    15. 'Accept':'*/*'
    16. },
    17. success: function (data) {
    18. if(data === defaultMessage) {
    19. console.log('http: [success] http.download');
    20. }
    21. }
    22. });
    23. }
    24. }
    资料自取,无偿
    资料自取,无偿
    js       http://www.makeru.com.cn/live/1396_805.html?s=143793 http://www.makeru.com.cn/live/1396_806.html?s=143793
  • 相关阅读:
    Android Studio使用笔记
    Android Material Design之在RecyclerView中嵌套CardView实现
    RR 和RC 幻读问题
    mysql rr和rc区别
    7.2 Database Backup Methods 数据备份方法:
    7.1 Backup and Recovery Types 备份和恢复类型
    Chapter 7 Backup and Recovery 备份和恢复:
    mysqldump 一些参数体验
    (?m) 可以让.去匹配换行
    perl 正则前导字符
  • 原文地址:https://www.cnblogs.com/jinwenyi/p/14079536.html
Copyright © 2011-2022 走看看