『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 1370|回复: 10

[教程系列] 解决多条信息同时到达小爱,小爱播放混乱的问题

[复制链接]

12

主题

84

帖子

686

积分

高级会员

Rank: 4

积分
686
金钱
602
HASS币
10
发表于 2023-8-4 15:46:19 | 显示全部楼层 |阅读模式
最近一直没搞定多条消息同时到小爱的时候,小爱只播放最后一条消息的问题。今天终于搞定了,发出来分享给大家: 核心还是delay节点。

                               
登录/注册后可看大图


                               
登录/注册后可看大图

每一条到答小爱的语音信息,延迟10s, 10s播放完当前条后,下一条开始播放。  单条超过10s的,依然会冲突。 但已经好太多了。

节点信息

节点信息
download.png
回复

使用道具 举报

26

主题

2096

帖子

8512

积分

论坛元老

Rank: 8Rank: 8

积分
8512
金钱
6411
HASS币
30

论坛元老

发表于 2023-8-4 16:04:03 | 显示全部楼层
可以优化下逻辑,

用msg.delay复写延时参数,参数可以根据小爱语速和播报字数取值,比如1个字0.5s秒,

播报内容是msg.payload,然后根据字数附加一条msg.delay这样。
回复

使用道具 举报

12

主题

84

帖子

686

积分

高级会员

Rank: 4

积分
686
金钱
602
HASS币
10
 楼主| 发表于 2023-8-4 19:14:51 | 显示全部楼层
情非殇 发表于 2023-8-4 16:04
可以优化下逻辑,

用msg.delay复写延时参数,参数可以根据小爱语速和播报字数取值,比如1个字0.5s秒,

不明觉厉,可能我 水平还不够,大概能看懂,实现不出来。
回复

使用道具 举报

0

主题

38

帖子

425

积分

中级会员

Rank: 3Rank: 3

积分
425
金钱
387
HASS币
0
发表于 2023-8-4 22:17:59 | 显示全部楼层
我在论坛看到过相关的帖子,你可以找一下。delay 也能用,但是不好
回复

使用道具 举报

26

主题

2096

帖子

8512

积分

论坛元老

Rank: 8Rank: 8

积分
8512
金钱
6411
HASS币
30

论坛元老

发表于 2023-8-5 17:41:58 | 显示全部楼层
KevinYAN 发表于 2023-8-4 19:14
不明觉厉,可能我 水平还不够,大概能看懂,实现不出来。

flows.zip (1.59 KB, 下载次数: 27)

比如这样?!


讲道理,NR有直通小艾tts的节点。

评分

参与人数 1金钱 +20 收起 理由
dscao + 20 高手,这是高手!

查看全部评分

回复

使用道具 举报

12

主题

84

帖子

686

积分

高级会员

Rank: 4

积分
686
金钱
602
HASS币
10
 楼主| 发表于 2023-8-5 23:30:19 | 显示全部楼层

延迟控制精确控制了下

var current_message_spake_time = msg.spake_time * 1000;
var tts = msg.payload;
msg = {};


// get current time. unit: s
let d = new Date();
let new_time = d.getTime();

//msg.new_time_type= typeof(new_time);

// get before message end time.
var before_end = flow.get("before_end");

if (before_end) {
    var x = new_time - before_end
    //msg.x_type = typeof (x);
    msg.x = x;
    if (x >= 0) {
        msg.delay = 0;
        msg.start_time = new Date(new_time);
        //msg.start_time_type = typeof (msg.start_time);
    }else{
        msg.delay = Math.abs(x);
        msg.start_time = new Date(new_time + msg.delay);
        //msg.start_time_type = typeof (msg.start_time);
    }
}else{
    msg.delay = 0;
    msg.start_time = new Date(new_time);
}



msg.before_end = before_end;
msg.new_time = new_time;
msg.current_message_spake_time = current_message_spake_time;

msg.payload = tts

let start_time = msg.start_time.getTime();
let current_message_end_time = new Date(start_time + msg.current_message_spake_time);
flow.set("before_end", current_message_end_time);


return msg;
回复

使用道具 举报

3

主题

46

帖子

318

积分

中级会员

Rank: 3Rank: 3

积分
318
金钱
272
HASS币
0
发表于 2023-8-16 13:18:00 | 显示全部楼层
能不能完整分享下node流
回复

使用道具 举报

76

主题

1357

帖子

1万

积分

元老级技术达人

积分
18388
金钱
16991
HASS币
290
发表于 2023-8-16 17:48:26 | 显示全部楼层

这个流可以,有可能可以作为gpt的小爱音箱流式输出方法。
回复

使用道具 举报

26

主题

2096

帖子

8512

积分

论坛元老

Rank: 8Rank: 8

积分
8512
金钱
6411
HASS币
30

论坛元老

发表于 2023-8-17 15:01:05 | 显示全部楼层
dscao 发表于 2023-8-16 17:48
这个流可以,有可能可以作为gpt的小爱音箱流式输出方法。

谢谢大佬夸奖,gpt可用性没概念,随便乱写出来的
回复

使用道具 举报

12

主题

84

帖子

686

积分

高级会员

Rank: 4

积分
686
金钱
602
HASS币
10
 楼主| 发表于 2023-8-17 21:42:09 | 显示全部楼层
完整自动延迟控制流程,我的小爱测试语速是2.7。 自己的自行测试哈。流程分享如下。

[{"id":"d746ba0c8e810306","type":"link in","z":"4e296426d7d6e14e","g":"5689692658fb2d11","name":"Txa","links":["19e58efd13944be8","49a1705dbe7f83d1","e6a3c210b4e5209a","9f276073515b2efe","dca74ce884fffdf7","726e5530ec2ca56d"],"x":275,"y":1400,"wires":[["bc8ae7f1f2b64316"]]},{"id":"bc8ae7f1f2b64316","type":"function","z":"4e296426d7d6e14e","g":"5689692658fb2d11","name":"播放时间","func":"\nfunction countChsEng(str) {\n    // 匹配任意中文\n    const regChinese = /[\\u4E00-\\u9FA5]/g;\n    // 匹配任意英文字母\n    // const regEnglish = /[a-zA-Z]/g;\n    // 匹配任意英文单词\n    const regEnglish = /\\b[a-zA-Z]+\\b/g;\n\n    let chCount = str.match(regChinese);\n    let enCount = str.match(regEnglish);\n    let xCount\n\n    // match返回数组,length为出现次数\n    chCount = chCount === null ? 0 : chCount.length;\n    enCount = enCount === null ? 0 : enCount.length;\n    xCount = chCount + enCount\n\n    return {\n        chCount,\n        enCount,\n        xCount\n    };\n}\n\nvar tts = msg.payload.data.value;\n// 每秒3个字\nvar number = countChsEng(tts).xCount / 2.7;\n\nmsg = {};\nmsg.payload = tts;\nmsg.spake_time = number;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":400,"y":1400,"wires":[["9447cd1b8183cb4b"]]},{"id":"9447cd1b8183cb4b","type":"function","z":"4e296426d7d6e14e","g":"5689692658fb2d11","name":"延迟时间","func":"var current_message_spake_time = msg.spake_time * 1000;\nvar tts = msg.payload;\nmsg = {};\n\n\n// get current time. unit: s\nlet d = new Date();\nlet new_time = d.getTime();\n\n//msg.new_time_type= typeof(new_time);\n\n// get before message end time.\nvar before_end = flow.get(\"before_end\")||0;\n\nif (before_end>0) {\n    var x = new_time - before_end\n    msg.x_type = typeof (x);\n    msg.x = x;\n    if (x >= 0) {\n        msg.delay = 0;\n        msg.start_time = new Date(new_time);\n        msg.start_time_type = typeof (msg.start_time);\n    } else {\n        msg.delay = Math.abs(x);\n        msg.start_time = new Date(new_time + msg.delay);\n        msg.start_time_type = typeof (msg.start_time);\n    }\n} else {\n    msg.delay = 0;\n    msg.start_time = new Date(new_time);\n}\n\n\n\nmsg.before_end = before_end;\nmsg.new_time = new_time;\nmsg.current_message_spake_time = current_message_spake_time;\n\nmsg.payload = tts\n\nlet start_time = msg.start_time.getTime();\nlet current_message_end_time = new Date(start_time + msg.current_message_spake_time);\nflow.set(\"before_end\", current_message_end_time);\n\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":540,"y":1400,"wires":[["f2543d4939071f40"]]},{"id":"f2543d4939071f40","type":"delay","z":"4e296426d7d6e14e","g":"5689692658fb2d11","name":"智能延迟","pauseType":"delayv","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":680,"y":1400,"wires":[["b8d8987b1e4b518f"]]},{"id":"b8d8987b1e4b518f","type":"function","z":"4e296426d7d6e14e","g":"5689692658fb2d11","name":"tts","func":"let tts_text = msg.payload\nmsg.payload = {\n    \"data\": {\n        \"value\": tts_text\n    }\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":810,"y":1400,"wires":[["51b3ce1084762bd0"]]},{"id":"51b3ce1084762bd0","type":"api-call-service","z":"4e296426d7d6e14e","g":"5689692658fb2d11","name":"小爱播报","server":"39d63457.baaeac","version":5,"debugenabled":false,"domain":"text","service":"set_value","areaId":[],"deviceId":[],"entityId":["text.xiaomi_l05b_a8c7_play_text_2"],"data":"{\"value\":\"{{payload}}\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"all","x":940,"y":1400,"wires":[["b3924e7e7f1ce96c"]]},{"id":"39d63457.baaeac","type":"server","name":"Home Assistant","addon":true}]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-28 19:43 , Processed in 0.061634 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表