問題タブ [wasapi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - AUDCLNT_BUFFERFLAGS_DATA_DISCONTINUITY が設定される場合と設定されない場合があります
WASAPI を使用して Windows phone8 用のシンプルな VoIP アプリを作成しようとしています。
数分後、dwFlags は繰り返し 1 (AUDCLNT_BUFFERFLAGS_DATA_DISCONTINUITY) に設定され、返されたパケットはますます小さくなり、その間、吃音はますます大きくなりますが、プロジェクトの一部の実行では、すべてが正常で、音声は完全にクリアです。
誰でもそれについて助けることができますか?
コードは各呼び出しの間に多くの作業を行うことを知っています。GetBuffer
これはおそらく時間の不具合の主な問題ですが、私の質問は、なぜそれが発生する場合と発生しない場合があるのですか?
c++ - Windows Phone で libsamplerate を使用してオーディオをリサンプリングする
WASAPI を使用する Windows Phone プロジェクトで libsamplerate を使用して、キャプチャした 2 チャネル/48khz/32 ビット オーディオを 1 チャネル/8khz/32 ビットに再サンプリングしようとしています。
リサンプリングによって、960 個の元のフレームから 160 フレームを取得する必要があります。メソッドを使用してオーディオをキャプチャしGetBuffer
た後、キャプチャした 7680 バイトの BYTE 配列を以下のメソッドに送信します。
src_process メソッドはエラーを返さずsd->input_frames_used
、960 にsd->output_frames_gen
設定し、159 に設定しますが、レンダリング出力はノイズのみです。リアルタイム VoIP アプリでコードを使用します。問題の原因は何ですか?
windows - Windows で既知の出力レイテンシーを使用してオーディオを再生する方法
タイムスタンプ付きのオーディオ ストリームを受信し、指定されたタイムスタンプにできるだけ近いオーディオ サンプルを再生しようとする C++ アプリケーションがあります。そのためには、オーディオ サンプルを出力バッファーに配置してから実際にオーディオが聞こえるまでの遅延を (妥当な精度で) 知る必要があります。
オーディオ出力のレイテンシーについては多くの議論がありますが、私が見つけたのはレイテンシーを最小限に抑えることだけです。これは私には関係ありません。必要なのは (実行時の)既知のレイテンシだけです。
Linux ではこれを解決しsnd_pcm_delay()
て非常に良い結果を得ましたが、Windows ではまともな解決策を探しています。
私は以下を見てきました:
- OpenAL を使用して、原因不明の 80 ミリ秒の遅延を測定しました。これはハードコードされた値ではなく、レイテンシを読み取る API が見つからなかったと思います。これをサポートすると主張する OpenAL の拡張機能がいくつかありますが、Linux でのみ実装されていることがわかります。
- Wasapi には
GetStreamLatency()
本物のように聞こえるものがありますが、これは明らかにスレッドのポーリング間隔か何かにすぎないため、これも役に立ちません。私のマシンにはまだ 30 ミリ秒の原因不明の遅延があります。 - DirectSound にはレイテンシを取得するための API がありませんか? しかし、出力バッファを追跡するだけで十分に近づくことができるでしょうか?
ブラッドのコメントに応じて編集します。
- ASIO についての私の印象は、主にプロのオーディオ アプリケーションとオーディオ愛好家を対象としており、ユーザーは特別なサウンド カード ドライバーをインストールする必要があり、ライセンスに対処する必要があるということです。ただし、機能的には良いオプションのようです。
c++ - 異なる波形フォーマット間の変換 (WAVEFORMATEX)
排他モードでストリームを実行するリアルタイム オーディオ アプリケーションを作成しています。データをデバイスに適切に表示するには、自分で選択していない形式でデータを受信する必要があります。私のオーディオ処理はすべて、デバイスに送信される前に浮動小数点サンプルを使用して行われます。デバイスの波形形式は、に設定されていない可能性があります (おそらく設定されていませWAVE_FORMAT_IEEE_FLOAT
んWAVE_FORMAT_EXTENSIBLE
) WAVE_FORMAT_PCM
。
ある波形形式 (浮動小数点) と別の波形形式 (デバイスの形式) の間で簡単に変換できる API はありますか?