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
  • 相关阅读:
    3.Appium运行时出现:Original error: Android devices must be of API level 17 or higher. Please change your device to Selendroid or upgrade Android on your device
    3.Python连接数据库PyMySQL
    2.Python输入pip命令出现Unknown or unsupported command 'install'问题解决
    2.Linux下安装Jenkins
    5.JMeter测试mysql数据库
    Android 4学习(7):用户界面
    Android 4学习(6):概述
    Android 4学习(5):概述
    Android 4学习(4):概述
    Android 4学习(3):概述
  • 原文地址:https://www.cnblogs.com/jinwenyi/p/14079536.html
Copyright © 2011-2022 走看看