0

入力シーケンスに基づいてオーディオストリーム(PCM)を生成するアプリケーションを開発しています。このサウンド(オーディオストリーム)は最初から最後まで再生されます。生成されたサウンドが再生されるときに、入力シーケンス内の位置に関する通知を受け取る必要があります。

例:

入力を「ABC」とすると、生成される音は文字Aで3秒、文字Bで2秒、文字Cで2秒に相当します--->合計7秒(3 + 2 + 2)。通知は、3秒後に「A送信済み」に関するイベントが送信され、2秒後に「B送信済み」に関するイベントが送信され、さらに2秒後に「C送信済み」イベントが送信されることを意味します。

これを行う古典的な方法はありますか、それともこれは各問題に固有ですか?(私はportaudioフレームワークでC / C ++を使用しています)

今のところ、これを行う唯一の方法は、プレーヤーがストリームに進むときに、各文字のオーディオデータをオンザフライで生成することです。

注:スレッド間およびスレッド間通信で非同期イベントを送信する方法を知っています。これを行う古典的な方法があるかどうかだけに興味があります。

ありがとう

4

1 に答える 1

1

Portaudioには、オーディオデバイスを介して特定のイベントが再生されたとき、または特定の時間が経過したときに通知するメカニズムがありません。特定の量のデータがデバイスを通過した時期を知る必要がある場合は、Pa_GetStreamTimeを使用してデバイスをポーリングする必要があります。

多くの場合、特に低レイテンシの設定では、データが書き込まれ、再生されることを知っていれば十分です。この場合、標準の(ロックフリーの)スレッド間通信で十分です。

于 2012-04-19T17:54:45.513 に答える