目标是无线电控制我的电脑和接口活动,通过手持收发器拨打 dtmf 音调。
我使用 multimon 听到 DTMF 音 我尝试使用 awk 来过滤数字并进行相应操作。 例如,如果我从无线电中键入“0”,系统必须重新启动等,但首先要确认操作。 “计算机将重新启动,发送#进行确认”...
我尝试使用 espeak 对远程无线电进行语音确认。 连接到 PC 声卡的无线电接收命令并传输响应。
我不知道如何在 espeak 中的 awk 中嵌套 multimon。
Multimon 本身不允许我对其标准输出执行任何操作,因为它正在运行(听到数字后不要终止,这确实是正确的)。
如果我知道如何只说出每个数字而不退出自然的 multimon 循环,那将非常有帮助。
比如说,multimon -a DTMF | awk'{print}' espeak -stdin 如果这简单有效的话!
可以吗?欢迎任何帮助。
3年过去了,Linux DTMF解码仍然没有进步。
一旦我在 Linux 中没有看到任何 DTMF 无线电控制项目,我打算发布这个项目来解决这个问题。
我相信我的答案已经过时了,也许你已经找到了解决这个问题的方法。
我遇到了同样的问题,并发现问题出在 multimon 中。当您将标准输出从 multimon 传输到另一个程序时,multimon 不会正确刷新详细输出。
尝试修补并重新编译 multimon,添加“fflush(stdout);”,如下所示:
(unixinput.c,第 71 行附近)
void verbprintf(int verb_level, const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
if (verb_level <= verbose_level) {
vfprintf(stdout, fmt, args);
fflush(stdout); //ADD THIS LINE!!!!!!!!!!!!!!!
}
va_end(args);
}
致以最诚挚的问候,
-爱德华多
您可以使用
system()
函数从 espeak
脚本启动 awk
。
@OP,我不清楚你的问题,但是看到 system() 令你感兴趣,这就是你如何在 awk 中调用外部命令
multimon -a DTMF | awk '{
cmd="espeak "$0 #$0 comes from the multimon output
system(cmd)
}
'