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

时间:2010-02-04 04:10:10

标签: linux bash radio telephony dtmf

  • 每次声卡捕获时,如何收听口述的DTMD数字?

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

我用multimon听DTMF音 我试图使用awk过滤数字并相应地继续。 例如,如果我从收音机键入“0”,系统必须重启等,但首先确认操作。 “计算机将重启,发送#确认”......

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

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

Multimon本身并不允许我对它的stdout做任何事情,因为它的运行(听到一个数字之后不会终止,这确实是正确的。)

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

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

有可能吗?任何帮助都很好。

3年过去了,linux DTMF解码仍然无法取得进展。

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

谢谢/ Mario / sao paulo巴西

3 个答案:

答案 0 :(得分:2)

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

我遇到了同样的问题,并发现问题出现在multimon中。当您将stdout从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);
    }

致以最诚挚的问候,

-Eduardo

答案 1 :(得分:0)

您可以使用system()功能从espeak脚本启动awk

答案 2 :(得分:0)

@OP,我不清楚你的问题,但看到那个系统()对你感兴趣,这就是你在awk中调用外部命令的方法

multimon -a DTMF | awk '{
  cmd="espeak "$0 #$0 comes from the multimon output
  system(cmd)
}
'