問題タブ [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.
audio - WASAPI - CoCreateInstance メソッドのトラブル
Windows コア オーディオ API を使用して、マイクからオーディオをキャプチャしようとしています。
関連するコード行は次のとおりです。
hr は次の値を返します。
0x800401f0 : CoInitialize が呼び出されていません。
msdn ページのサンプル プログラムを採用しました -オーディオ ストリームのキャプチャ
何が間違っている可能性がありますか?また、Google検索などから得た説明から、エラーの意味がわかりません。
Win7 Home Pro x64 で Visual Studio 2012 Express を使用しています。
windows - 別のプロセスからレンダリング オーディオ セッションをキャプチャすることは可能ですか?
私は Windows の WASAPI システムに初めて飛び込みますが、Windows API で自分が望むことが可能かどうかさえわかりません。
さまざまなプログラムからのサウンドを録音し、それぞれを個別の録音トラック/オーディオ ファイルに分割するプログラムを作成しようとしています。私が行った調査から、記録する必要がある単位は、エンドポイントにレンダリングされるさまざまなオーディオ セッションであることがわかっています。通常の記録方法は、レンダリング エンドポイントを取得してループバックを実行することです。ただし、MSDN でこれまでに読んだことから、できるセッションとのやり取りはIAudioSessionControlを介したものだけであり、セッションのストリームのコピーを取得する方法はありません。
WASAPI (または他の Windows API) を使用してこれを実行し、エンドポイントを形成するために混合される前に個々のセッション (または個々のストリーム) を取得できる何かが欠けているのでしょうか、それとも不可能な目標ですか?
windows - IAudioRenderClientインターフェイスが必要な理由
この質問は、WindowsオーディオセッションAPIに関するものです。Microsoftのサンプルコードを読んだ後、IAudioClientを取得した後、「GetService」メソッドが呼び出されてIAudioRenderClientを取得していることがわかりました。次に、IAudioRenderClientのGetBufferメソッドとReleaseBufferメソッドを呼び出して、再生するバッファーを追加します。
私の質問:
IAudioRenderClientが必要なのはなぜですか、GetBufferメソッドとReleaseBufferメソッドをIAudioClientに直接配置しないのはなぜですか?つまり、1つのIAudioClientに対して複数のIAudioRenderClientが必要なのはいつですか。
オーディオを再生するときは常にIAudioClientが必要であり、このIAudioClientではGetServiceを呼び出してIAudioRenderClientを取得するため、CoCreateInstance()を呼び出してIAudioRenderClientを作成する機会はありませんか?では、なぜIAudioRenderClientにIIDが必要なのですか?
================================================== ============================
もう少し読んだ後、IAudioClientはIAudioRenderClientまたはIAudioCaptureClientになると思います。しかし、別の質問が発生します。なぜGetServiceを呼び出してIAudioRenderClientを取得しますが、QueryInterfaceは取得しないのでしょうか。
windows - 生ストリームから正しい wav ファイルを生成できない
生のオーディオ データ ストリームをそのWAVEFORMATEXTENSIBLE構造体と共にキャプチャしました。 WAVEFORMATEXTENSIBLEは次の図に示されています。
wavファイルの基準に従って、rawビットをwavファイルに書き込んでみました。私がすることは:
「リフ」と書きます。
DWORD を書き込みます。(ファイルサイズ - sizeof("RIFF") - sizeof(DWORD))。
=== WaveFormat チャンク ===
「WAVEfmt」と書く
DWORD を書き込みます。(WAVEFORMATEXTENSIBLE 構造体のサイズ)
WAVEFORMATEXTENSIBLE 構造体を記述します。
=== ファクトチャンク ===
「事実」を書く
DWORD を書き込みます。( 4 )
DWORD を書き込みます。(ストリーム内のサンプル数。 sizeof(rawdata)*8/wBitsPerSample である必要があります)。
=== データチャンク ===
「データ」と書く
DWORD (生データのサイズ) を書き込む
生データを書き込みます。
上記の手順で wav ファイルを取得した後、wav ファイルをメディア プレーヤーで再生しました。音はありません。Audacity で再生すると歪んだ音が聞こえます。それが正しいオーディオであることがわかりますが、音はノイズで歪む。
生データはこちら
生成したwavファイルはこちら
同じ方法を使用してIEEE-floatデータをwavファイルに変換すると、問題なく動作するため、非常に混乱します。
windows - Windows 7 の個々のプログラムのピーク メーター
Windows 7 で個々のプログラムのピーク メーターの読み取り値を取得することは可能ですか。
WASAPI を使用すると、ループバック デバイスを介してシステム オーディオ全体をキャプチャできますが、これは異なるプログラムからの出力を区別しません。この質問は、指定された 1 つのアプリケーションのオーディオのキャプチャに関するものですが、オーディオを個別に再生しているすべてのプログラムをキャプチャする場合、答えは法外に思えます。下の画像に示すように、SndVol がそれを実行できるため、これは可能であるに違いありません。問題は、それがどのように達成されているかです。それは公開されていない API 呼び出しを介して行われているのでしょうか、それとも WASAPI を介してこのようなことを実際に達成することは可能でしょうか?
ありがとう。
windows-phone-8 - キャプチャされたオーディオ バッファーは、Windows Phone 8 ではすべて無音です
WASAPI を使用してオーディオをキャプチャしようとしています。私のコードは、主にChatterBox VoIP サンプル アプリに基づいています。オーディオ バッファを取得していますが、すべて無音です (フラグ AUDCLNT_BUFFERFLAGS_SILENT)。
Windows Phone 用の Visual Studio Express 2012 を使用しています。エミュレーター上で実行します。
c# - WasapiCapture NAudio
C# で記述された NAudio スタックを使用し、PCM 8kHZ およびサンプルあたり 16 ビットの排他モードでオーディオをキャプチャしようとしています。
次の関数では:
この関数を呼び出す前に、WaveFormat を (8000,1) に設定し、期間も 100 ミリ秒に設定しました。システムがバッファに 1600 バイトを割り当て、要求に応じて 100 ミリ秒の間隔が割り当てられると予想しました。
1. システムは audioClient.BufferSize を 4800 に割り当て、"this.recordBuffer" には 9600 バイトの配列を割り当てました (これは 100ms ではなく 600ms のバッファを意味します)。2. スレッドがスリープ状態になり、2400 サンプル (4800 バイト) を取得しますが、1600 バイトのフレームが期待どおりではありません。
そこに何が起こっているのか分かりますか?
portaudio - Win7のPortAudioでWASAPIを使用中にエラーが発生しました
PortAudioとlibsndfileを使用して、Windows 7マシンで排他モードで.wavファイルを再生しようとしていますが、
エラー番号-9984「互換性のないホストAPI固有のストリーム情報」。
次のようにPaWasapiStreamInfo構造体に入力しました。
次に、hostApiSpecificStreamInfoパラメーターを割り当て、Pa_OpenStreamを介して次のようにストリームを開きます。
私は一歩を逃したことがありますか?
ありがとう、タイラー