2012-02-23 14 views
3

私は息子のためにアプリケーションを作成しようとしています(私は最初のタイマーです)、自閉症です。上半分にビデオプレーヤーがあり、下にテキスト入力エリアがあります。文字が入力されると、ビデオ内の単語を模倣するためのサウンドが生成されます。キー押下時の待ち時間が短い音

gstreamerをシステムコールとして使用して、キープレスで音を鳴らすことに関するこのサイトに関する記事があります。私もlibcanberraを試しましたが、両方とも音の間にかなりの遅延があるようです。私はPythonやCでアプリを書くことができますが、おそらくCでそれを行うでしょう。

また、ビデオ部分がgstreamerによって再生されていることを言及したいと思います。私は高価なシステムコールを避けるためにgstreamerの2つのインスタンスを作成しようとしましたが、オーディオインスタンスは呼び出されたときにアプリケーションを終了させるように見えました。

誰かが応答の速いサウンドを作成するためのヒントがあれば、本当に感謝します。キャンベラから次の関数を使って、そこにはデコードしないと(おそらく保存)余分なスイッチになるので、あなたはPulseAudioはに直接、生の音声サンプルをアップロードすることができ

+0

閉じられた別の質問に答える簡単なコメント:端末は文字を送受信します。 通常、端末は受信した文字を表示します。ロール紙に印刷された端末は、実際にはすべて可能でした。制御文字と呼ばれる特殊文字は表示されませんでした。その代わりに、端末のプリンタキャリッジが行の先頭に戻ったり、用紙を給紙したり、バックスペースにしたりしました。 ディスプレイターミナルは、通常「Esc」文字で始まるため、「エスケープシーケンス」と呼ばれる特殊な文字シーケンスを定義します。 – antlersoft

+0

エスケープシーケンスを受け取ると、端末はカーソルを画面上の特定の位置に移動するか、または画面の一部に表示されているテキストを反転させるなど、他の機能のコマンドとして解釈します。 各端末ブランドは独自のエスケープシーケンスのセットを定義します。 – antlersoft

答えて

4

http://developer.gnome.org/libcanberra/unstable/libcanberra-canberra.html#ca-context-cache

次ca_context_play()しますこれを使って。

しかし、このシナリオで(ビデオの同時再生で)遭遇する最大の問題は、オーディオデバイスがPulseAudioで大きなレイテンシを持つように構成されていることです(通常の再生では最大1/2秒以上)。 libganberraにLOW_LATENCYフラグをサポートするためのバグを報告するのは合理的かもしれません。なぜなら現在、afaikのサウンドイベントの遅延を最小化しようとしていないからです。それは持っていることが素晴らしいでしょう。

GStreamer pulsesはおそらく低レイテンシになる可能性があります(それにはいくつかのプロパティがあります)が、libcanberraほど軽くはないので、サンプルをキャッシュすることはできません。理想的には、GStreamerは、サンプルをキャッシュするか、PulseAudioを事前に入力することも学ぶことができます。

+0

ありがとう!私はそれに試してみてください:) – Patrick

+1

私はちょうど誰かがこのスレッドでこのスレッドでつまずく場合には、いくつか言及したいと思います。まず、gstreamerの2つのインスタンスを持つことができます。私のコードには大きなエラーがありました。第2に、低レイテンシーのサウンドを1つのレコーディングで録音してから、それぞれのサウンドの後に一時停止するようにgstreamerを設定することで、低レイテンシーのサウンドを作り出すことができました。 elmarcoに投稿してくれてありがとう。 – Patrick

関連する問題