通过 multimon、awk 和 espeak 进行 DTMF 监控

问题描述 投票:0回答:3
  • 如何在声卡每次捕获一个数字时收听口头DTMD数字?

目标是无线电控制我的电脑和接口活动,通过手持收发器拨打 dtmf 音调。

我使用 multimon 听到 DTMF 音 我尝试使用 awk 来过滤数字并进行相应操作。 例如,如果我从无线电中键入“0”,系统必须重新启动等,但首先要确认操作。 “计算机将重新启动,发送#进行确认”...

我尝试使用 espeak 对远程无线电进行语音确认。 连接到 PC 声卡的无线电接收命令并传输响应。

我不知道如何在 espeak 中的 awk 中嵌套 multimon。

Multimon 本身不允许我对其标准输出执行任何操作,因为它正在运行(听到数字后不要终止,这确实是正确的)。

如果我知道如何只说出每个数字而不退出自然的 multimon 循环,那将非常有帮助。

比如说,multimon -a DTMF | awk'{print}' espeak -stdin 如果这简单有效的话!

可以吗?欢迎任何帮助。

3年过去了,Linux DTMF解码仍然没有进步。

一旦我在 Linux 中没有看到任何 DTMF 无线电控制项目,我打算发布这个项目来解决这个问题。

linux bash telephony dtmf
3个回答
2
投票

我相信我的答案已经过时了,也许你已经找到了解决这个问题的方法。

我遇到了同样的问题,并发现问题出在 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);
    }

致以最诚挚的问候,

-爱德华多


0
投票

您可以使用

system()
函数从
espeak
脚本启动
awk


0
投票

@OP,我不清楚你的问题,但是看到 system() 令你感兴趣,这就是你如何在 awk 中调用外部命令

multimon -a DTMF | awk '{
  cmd="espeak "$0 #$0 comes from the multimon output
  system(cmd)
}
'
© www.soinside.com 2019 - 2024. All rights reserved.