3
  • サウンドカードが 1 つをキャプチャするたびに、話された DTMD 数字を聞く方法は?

目的は、ハンドヘルド トランシーバーを介して dtmf トーンをダイヤルする、私の PC とインターフェイス アクティビティを無線で制御することです。

multimon を使用して DTMF トーンを聞きました。 awk を使用して数字をフィルタリングし、それに応じて続行しようとしました。たとえば、無線からキー「0」を入力すると、システムを再起動する必要がありますが、最初に操作を確認します。「コンピュータが再起動します。# を送信して確認します」...

リモートラジオへの音声確認にespeakを使ってみました。PC サウンドカードに接続された無線がコマンドを受信し、応答を送信します。

multimon を espeak 内の awk 内にネストする方法がわかりません。

Multimon自体は、実行中のため、stdoutで何もできません(数字を聞いた後に終了しないでください。これは実際に正しいです)。

自然なマルチモン ループから抜け出さずに、各数字だけを話す方法を知っていれば、非常に役に立ちます。

たとえば、multimon -a DTMF | awk'{print}' espeak -stdin これが単に機能した場合!

することは可能ですか?どんな助けも歓迎します。

3 年が経過しましたが、Linux の DTMF デコードはまだ進歩していません。

Linux で DTMF Radio Controlling プロジェクトが表示されなくなったら、この問題を解決できれば、これを公開する予定です。

Thanks / マリオ/ サンパウロ ブラジル

4

3 に答える 3

2

私の答えは時代遅れであり、おそらくこれを解決する方法を見つけたと思います。

私は同じ問題に直面し、問題がマルチモンにあることがわかりました。multimon から別のプログラムに stdout をパイプすると、multimon は詳細出力を適切にフラッシュしません。

次のように、「fflush(stdout);」を追加して、multimon にパッチを適用して再コンパイルしてみてください。

(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);
    }

よろしくお願いします、

-エドゥアルド

于 2010-12-21T17:24:04.010 に答える
0

@OP、私はあなたの質問について明確ではありませんが、system() に興味があることを見て、awk で外部コマンドを呼び出す方法は次のとおりです。

multimon -a DTMF | awk '{
  cmd="espeak "$0 #$0 comes from the multimon output
  system(cmd)
}
'
于 2010-02-04T04:48:51.627 に答える
0

関数を使用して、スクリプトsystem()から起動できます。espeakawk

于 2010-02-04T04:27:57.347 に答える