問題タブ [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 - WASAPI でバッファ アンダーフローを検出する方法は?
Windows Audio Session APIを使用して、バッファ アンダーランとも呼ばれるバッファ アンダーフローをどのように検出しますか?
python - PythonスクリプトでWindowsマスターオーディオを制御する方法
Pythonの abarnert による提案から外れる: Windows 7 のマスター ボリュームを変更する
Windows 7 でマスター ボリュームを制御する Python スクリプトを作成しようとしています。
C ++では、これは次のように実行できることを理解しています:
pywin32を使用して python でその機能を取得しようとしていますが、行き詰まっています。私がこれまでに持っているコードは次のとおりです。
CoCreateInstance は MMDeviceEnumerator のクラス ID (CLSID) を必要としますが、クラス ID を取得するために使用する __uuidof() のような関数はないようです。(とにかく見つけたわけではありません。)
アイデアや提案はありますか?私は COM/OLE プログラミングと pywin32 の両方に不慣れで、少し戸惑っています。
c++ - WMP の音量レベルを設定する
私がやりたいことは、Windows Media Player の音量レベルを設定することです。デフォルトでは、例えば下または上メニュー項目をクリックすると (再生 -> 音量 -> アップ)、音量は 10% 減少しますが、私の意見では、これでは十分ではありません (特に、誰かとスカイプをしているときに)音楽を聴く)。
メディア プレーヤーは、独立したアプリケーションのままにする必要があります。
現在、Spy++ で見られるパラメータを使用して、SendMessage を介してアプリ コマンドをプレーヤーに送信する小さなツールを使用しています。
目標を達成するために、次の 3 つの方法を考えました。
- WASAPI を使用してメディア プレーヤーのオーディオ セッションを取得し、音量レベルを動的に設定する
- メディア プレーヤー ホスト コントロールのボリューム スライダーにマウス ダウン/アップ イベントをポイント単位で送信する
- IWMPlayer4 を介してメディア プレーヤー コントロールのインスタンスを取得する
- Windowsフォームホスト内のWPFアプリケーションにメディアプレーヤーコントロールを含める(独立性が失われるため、推奨されません)
ポイント 2 は、メディア プレーヤー コントロールが COM 要素であり、spy++ がハンドルを 1 つしか表示しないため、ボリューム スライダーの正確な位置を特定し、非常に正確なマウス イベントを送信する必要があるため、かなり見苦しく見えます。さらに、これがまったく機能するかどうかはわかりません。
ポイント 3 には、ハンドルによって COM 要素のインスタンスを取得できるという前提があります。私はまだ COM 要素を扱っていないので、これが可能かどうかはわかりません。
更新:インターフェイスを使用して、リモートのメディア プレーヤーのインスタンスを取得できIWMPPlayer4
ます。設定を変更できるかどうかを確認する必要がありますが。
ポイント1は、さほど苦労せずにできる印象です。次の問題に直面することになりますが、メディア プレーヤーのオーディオ セッションを識別することです。を使用してそれらを列挙し、使用IAudioSessionManager2
して名前を表示する
Mozilla Firefox とシステム サウンドを除いて、ほとんどの場合空の文字列を出力します (他のプロセス自体がセッション名を設定していない可能性があります => デフォルトの名前が選択されGetDisplayName
、空の文字列が返されます)。
更新 2:
Simon Mourier が指摘したように、プロセス ID を比較して適切なISimpleAudioVolume
インスタンスを取得することができ、WMP に関しては変更を適用することができます。上記のインスタンスは、次の方法で取得されます。
ISimpleAudioVolume
1 を介してインスタンスを取得する場合IAudioClient
、セッション ID を提供して、ボリュームの変更をイベント サブスクライバーに報告する必要があります。これは、このアプローチを使用して可能ですか?
アプリケーションにメディア プレーヤー コントロールを追加するのが最も簡単な方法であることはわかっていますが、可能であればこのオプションを使用したくありません。
windows - MMDevice からチャンネル数を取得するには?
私は Windows オーディオ アプリケーションを開発しており、MMDeviceEnumerator を使用して、利用可能なすべてのオーディオ インターフェイスを処理しています。これは、デバイス自体に関するいくつかの情報を提供する MMDevice を取得することになります。
デバイスが提供するチャネルの総数を取得したいと考えています。現在、プロパティ ストアを使用して現在の WAV 形式を返していますが、これは Windows が「共有」モードに指定した形式を返します。Focusrite 18i8 を使用すると、Windows はこのデバイスに 2 つのチャネルがあることを示します。これは、デバイスの詳細設定の「既定の形式」で指定されているものとまったく同じです。Windows 自体では、既定の形式で 2 つの入力チャネル以外を指定することはできません。
問題は、このデバイスには 18 の入力チャネルがあり、Wasapi を使用して排他モードで開き、すべてのチャネルにアクセスしたいということです。オーディオ デバイスが実際に持っている「実際の」チャンネルの数を調べる方法がわかりません。
これは MMDevice から見つけることができますか?
windows-8.1 - 解放されたバッファーへのポインターを使用する Windows ストアの WASAPI サンプル
Windows 8.1 ストアの Windows オーディオ セッション (WASAPI) サンプルのオーディオ キャプチャ部分を使用しています。最終更新日は 2015 年 3 月 24 日です。間違っている、または過度に複雑に見えるコードの例を見ることができるので、私は書いています。これは、私が WASAPI インターフェイスと Windows ランタイムのワーク キューを完全に理解していないためだと思います。スタック オーバーフロー コミュニティが、これがバグではない理由を教えてくれることを願っています。
それらはすべて WASAPICapture.cpp にあります。ここでは、最も単純な (そして最も深刻な) 例で水域をテストします: 解放されたバッファーへのポインターの使用。
以下は、問題の特定の行を強調するための疑似コードです。行番号は、さらに下にあるより完全なコードの抜粋に関連しています。
追伸 - 私のインターネットへのアクセスは散発的であり、私は初心者です - そのため、私の回答はしばらくお待ちください。
...そして、より完全なコードの抜粋は次のとおりです。
windows - 物理的な USB ポート接続で Windows USB サウンドデバイスを識別する
デフォルトのドライバーを使用して複数の USB オーディオ デバイスを接続すると、通常、「nn- USB オーディオ コーデック」などのわかりやすいデバイスの説明が表示されるため、現在、メーカーなどの特定のハードウェアを参照する固有のプロパティはありません。 ID。ハードウェアを再列挙または別のポートに再接続する場合に、このハードウェアにマップされる変更された Windows オーディオ デバイスをソフトウェアが自動的に識別できるようにしたいと思います。物理ハードウェアの特定に使用できる Windows オーディオ デバイス情報をさらに収集する可能性はありますか?
少し説明が必要かもしれません:
2 つ以上の USB オーディオ デバイスを持っていますが、必ずしも同じ製品またはメーカーとは限りません。オーディオ接続にはさまざまな目的があるため、ソフトウェアがさまざまなタスクに対して常に同じ物理オーディオ デバイスを使用するようにしたいと考えています。これは、再列挙が発生したときに失敗することがあります (物理的な USB ポート接続を変更しないと、Windows の問題になることがあります...)
理想的には、個々のシリアル番号でそれらを区別します。これは通常、ストレージ デバイスでのみ使用できます。しかし、取得できるのは、Nir Sofer の USBDeview などのツールを使用してデバイスを見ているときの「物理的な」USB トポロジです。「ハブ 3、ポート 1」のようなプロパティがあります。これを、サウンド コントロール パネルに表示される「nn- USB オーディオ コーデック」などのオーディオ オーディオ API から取得したサウンド デバイスにマップできれば、まったく問題ありません。
編集2:
この [1] 投稿がここで役立つかもしれませんが、USB ポート <-> Windwos Sounddevice マッピングを取得する方法をまだ理解しなければなりません。