問題タブ [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.

0 投票する
1 に答える
1341 参照

c++ - USB/Firewire オーディオ インターフェイスのマスター ボリュームを IAudioEndpointVolume::SetMasterVolumeLevelScalar で設定できないのはなぜですか

portmixer に関連する Audacity のバグを修正しようとしています。出力/入力レベルは Mac バージョンの portmixer を使用して設定できますが、Windows では常にではありません。portmixer のウィンドウ コードをデバッグして、そこで動作するようにしています。

IAudioEndpointVolume::SetMasterVolumeLevelScalar を使用してマスター ボリュームを設定すると、オンボード サウンドには問題なく機能しますが、RME Fireface 400 のようなプロ用外部 USB または Firewire インターフェイスを使用すると、そのデバイスの Windows のサウンド コントロール パネルに反映されますが、出力ボリュームは変化しません。 、およびシステムミキサーでも。

また、プログラムの外では、システム ミキサーのマスター スライダー (タスクバー内) を変更しても効果はありません。システムが示すレベルに関係なく、サウンドカードは同じ (フル) レベルを出力します。出力レベルを変更する唯一の方法は、ハードウェア開発者がカードで提供するカスタム アプリを使用することです。

IAudioEndpointVolume::QueryHardwareSupport 関数は ENDPOINT_HARDWARE_SUPPORT_VOLUME を返すので、これを実行できるはずです。

この動作は、多くのデバイスの入力と出力の両方に存在します。

これはおそらくウィンドウのバグですか?

出力をエミュレート (スケーリング) することでこれを回避することは可能ですが、機能的に同一ではないため、これは好ましくありません。オーディオ インターフェイスにスケーリングを行わせることをお勧めします (特に入力にプリアンプが含まれる場合)。

0 投票する
1 に答える
4101 参照

winapi - オーディオ ストリームのレンダリング (WASAPI / WINAPI )

現在、MSDN のドキュメントを読んで、ストリームをオーディオ レンダラーにレンダリングしています。つまり、キャプチャしたデータをマイクから再生しています。

http://msdn.microsoft.com/en-us/library/dd316756%28v=vs.85%29.aspx

この例は例を提供します。

私の問題は、プロジェクトの流れを本当に理解できなかったことです。現在、キャプチャプロセスから取得した以下のパラメーターを格納する別のクラスがあります。これらのパラメーターは、プログラムがマイクからストリーミング オーディオ データをキャプチャするときに継続的に書き換えられます。

私の質問は、実際に loadData() 関数がどのように機能するかです。キャプチャプロセスから書き込んでいるパラメータを取得することになっていますか? プログラムはどのようにデータをオーディオ レンダラーに送信し、スピーカーで再生しますか。

0 投票する
1 に答える
3383 参照

windows - Windows Vista / 7:出力オーディオミックスをサンプリングする方法は?

現在のウェーブ出力サンプルストリームにアクセスするにはどうすればよいですか?

2006年12月のsocial.microsoft.comの質問(Vistaで「Wave」または「StereoMix」から録音する方法は?)yjslashは次のように質問しました。

Windows XP以前では、オーディオストリームをスピーカーにキャプチャできました。つまり、DirectSoundCaptureは、選択したソース行からキャプチャできました。また、録音ソースラインとして「WaveOutMix」や「StereoMix」などを選択した場合、DirectSoundCaptureはオーディオストリームをスピーカーに録音することができました。

Larry Osterman(MSFT)(オーディオチーム開発者およびStackOverflowユーザー)が応答したもの:

XPでこれにどのAPIを使用しましたか?彼らはVistaで引き続き動作するはずです。

WASAPIには、クライアントがミックス後のオーディオストリームをキャプチャできるようにする特別なループバックモードがあります。

Stackoverflowに関する質問(WindowsXPおよびWindows7でシステムオーディオ出力を読み取るにはどうすればよいですか?)には、WASAPIに出力ミックスをサンプリングする機能があり、WindowsVista以降で使用できることが記載されています。

2007年1月のWindowsチームのブログエントリには、オーディオ出力をサンプリングする機能が記載されています(エコーキャンセルの目的で、HDCPがそれにどのような影響を与えるか)。

プレミアムコンテンツのエコーキャンセルはうまく機能しませんか?

Windows Vistaは、高品質のエコーキャンセル機能を正常に構築するために十分な情報へのアクセスをアプリケーションに提供すると信じています。

オーディオ出力のサンプリングに使用されるAPIは何ですか?Vistaは、現在のオーディオ出力ストリームにアクセスするためのアプリケーションにどのようなアクセスを提供しますか?WASAPIのどの機能とその使用方法により、現在のオーディオ出力のサンプリング/キャプチャが可能になりますか?

も参照してください

0 投票する
1 に答える
2302 参照

windows - Windows Vista/7 でエコー キャンセルをサポートするための API

2007 年、Windows Vista に含まれる DRM に熱狂する中、多くの懸念に対応するためにWindows Vista チーム ブログが作成されました。質問の 1 つは、Windows Vista での実行時に VoIP ソフトウェアがエコー キャンセレーションを実行する機能に関するものでした。

これは、Nick White が FAQ として述べなければならなかったことです。

プレミアム コンテンツでは、エコー キャンセレーションの効果が低下しますか?

Windows Vista は、高品質のエコー キャンセル機能を正常に構築するのに十分な情報へのアクセスをアプリケーションに提供すると考えています。

アプリケーションが高品質のエコー キャンセレーション機能を構築できるようにするために、Windows Vista はどのような情報を提供しますか?

注:この声明を読むと、Windows Vista は、アプリケーションが高品質のエコー キャンセレーション機能を正常に構築できるようにするのに十分な情報を提供しているという印象を受けます。おそらく、Windows がこの情報を提供する方法は、API を使用することです。

エコー キャンセレーションは、再生中の出力をサンプリングし、録音されたマイク入力から「差し引く」ことによって機能します。

残念ながら、MSDN が指摘しているように、再生中の出力を常にサンプリングできるとは限りません。

Windows Vista は、デジタル著作権管理 (DRM) を提供します。コンテンツ プロバイダーは DRM を利用して、独自の音楽やその他のコンテンツを無許可のコピーやその他の違法な使用から保護しています。WASAPI は、DRM で保護されたコンテンツを含むデジタル ストリームのループバック レコーディングを許可しません。同様に、信頼できるオーディオ ドライバーは、ループバック デバイスが保護されたコンテンツを含むデジタル ストリームをキャプチャすることを許可しません。Windows Vista では、信頼できるドライバーのみが保護されたコンテンツを再生できます。信頼できるドライバーと DRM の詳細については、Windows DDK のドキュメントを参照してください。

おそらくこれは、WASAPI からループバック モードを使用することは、エコー キャンセレーション サービスを提供するための意図された方法ではないことを意味します。

高品質のエコー キャンセレーションの実装を可能にする API何ですか?

:これは、私が尋ねた別の質問に関連していますが、別の質問です:出力オーディオミックスをサンプリングする方法は?. この質問は、Windows でエコー キャンセレーションが可能であるという Window Vista チームによる回答の拡大を特に求めています。この質問はAPIを探しています。それは、それをどのように使用するかという別の問題になる可能性があります。

答えをグーグルで検索すると、(エコーキャンセルの実行中に)アプリケーションはDRMで保護されたコンテンツをサンプリングできますが、コンテンツは劣化します(つまり、 「十分な情報」)。これにより、エコーキャンセレーションが悪化しますが、それでも可能です。

それとも、Windows チームは「ほとんどの場合は十分ですが、ユーザーが曲を聴いているときや映画を再生しているときには十分ではありません」とほのめかし、実際には高品質のエコー キャンセレーション機能をうまく構築することはできないのでしょうか?


更新:エコー キャンセレーション API を探しているのではなく、再生中の出力をサンプリングする API を探していることに注意してください。これは、エコー キャンセレーションを実装するために必要なものです。もちろん、Windows Vista がエコー キャンセレーション API を提供している場合を除きます (プレミアム コンテンツを引き続き保護する方法です)。しかし、エコーキャンセル API も見たことがありません。

0 投票する
2 に答える
3815 参照

c++ - SndVolはどのようにして特定のオーディオセッションの音量レベルを変更できますか?

SndVolシステムユーティリティの機能の一部を実行するために、独自のAPIを作成しています。このAPIの一部として、特定のオーディオセッションの音量レベルを設定できるようにしたいと思います。

SndVolは、ユーザーがオーディオデバイスのマスター音量レベルを変更するために使用できる[デバイス]パネルにスライダーを表示し、セッションの音量レベルを変更する各オーディオセッション([アプリケーション]パネル)のスライダーを表示します。 :

SndVolボリュームミキサーのスクリーンショット

オーディオセッションの1つでスライダーハンドルをドラッグすると、SndVolはオーディオセッションの音量レベルを変更できます。それはどのようにそれをしますか?

WindowsVistaのCoreAudioAPIを使用して可能だと思いましたが、を使用してデバイスのオーディオセッションを繰り返すことはできますが、オブジェクトへのアクセスしか許可されないという問題が発生しましたIAudioSessionEnumeratorIAudioSessionEnumerator、オブジェクトを取得するにはオブジェクトIAudioSessionControlが必要ですオーディオセッションの音量レベルを設定するために使用できます。オブジェクトをオブジェクトに関連付けることは可能ですか?IAudioClientISimpleAudioVolumeIAudioClientIAudioSessionControl

0 投票する
2 に答える
7337 参照

c++ - Windows 7 で単一のアプリケーションのオーディオをキャプチャする

システム全体ではなく、単一のアプリケーションのみによって出力されたオーディオをキャプチャする方法はありますか? WASAPIを使用すると、システム全体のオーディオをキャプチャできます、1 つのアプリケーションからのオーディオのみをキャプチャしたいと考えています (多くのアプリケーションがあり、すべてが一度にオーディオを再生します)。

0 投票する
2 に答える
691 参照

c++ - オーディオ セッションの同等性をテストする方法

Windows オーディオ セッション API を使用して、現在のオーディオ セッションの列挙内で既定のオーディオ セッションを見つけようとしています。現在、ロールIAudioSessionControl内のオーディオ レンダー エンドポイントのデフォルト セッションと、このデフォルト エンドポイントのオーディオ セッションを列挙するオブジェクトへの参照を持っていますが、私が持っているオブジェクトと等しいかどうかを比較できるようにする必要があります。によって返されるオブジェクト。eConsoleIAudioSessionEnumeratorIAudioSessionControlIAudioSessionControlIAudioSessionEnumerator::GetSession

IAudioSessionControlポインターが等しいかどうかを比較することで、等しいかどうかをテストできることを望んでいました。これは、 をIAudioSessionControl使用してデフォルト セッションの を複数回取得した場合に機能しますIAudioClient::GetService。残念ながら、 によって返されるこのポインタは、 によるIAudioClient::GetServiceオーディオ セッションの列挙には表示されませんIAudioSessionEnumerator。また、同じオーディオ セッション GUID ( ) と値を使用している場合でも、ルートを介して既定のオーディオ セッションを複数回取得しても、同じポインターIAudioSessionManager::GetAudioSessionControlは得られません。IAudioSessionControlGUID_NULLCrossProcessSession

IAudioSessionControl2 つのポインタを指定してオーディオ セッションが等しいかどうかをテストするにはどうすればよいですか? 特定のオブジェクトのオーディオ セッション GUID とプロセス識別子を取得することはできIAudioSessionControlますか?

0 投票する
1 に答える
1518 参照

c++ - アプリケーションの再生デバイスをプログラムで設定する

Windows 7でオーディオ再生デバイスをプログラムで設定できるかどうか誰かが知っていますか?(私はこれについてかなりの数の投稿を見てきましたが、「良い」答えはありません)。デフォルトの再生デバイスを変更したくありません。たとえば、サウンドカードが2つあり、デフォルトをサウンドカード1にしたい場合、アプリでサウンドカード2を使用できるようにします。よろしくお願いします。

0 投票する
1 に答える
3048 参照

windows - WASAPI: IAudioClient->IsFormatSupported が同じフォーマットで失敗しても、IAudioClient->Initialize は成功する

排他モードの特定のオーディオ デバイスでサポートされている出力形式を調べようとしています。これを行うために、IAudioClient->IsFormatSupported() を使用しています。これは、ドキュメントによると、これに使用できるはずです。残念ながら、デフォルトの 2 チャンネル、44.1khz オーディオを除いて、渡そうとするほぼすべてのフォーマットに対して AUDCLNT_E_UNSUPPORTED_FORMAT を返します。

実際に audioclient を初期化しようとすると、成功しても IsFormatSupported() で失敗したフォーマットがあります。

すべてのフォーマットを初期化しようとするだけでは、他のアプリケーションからのオーディオが停止する可能性があるため、オプションではありません。

他の誰かがこの動作を見たことがありますか、または特定のオーディオ デバイスでサポートされている形式を見つける別の方法があるかどうかを知っていますか?

0 投票する
1 に答える
3632 参照

windows - Windows 7 でマイク ブーストを制御する方法

C/C++ アプリケーションで MIXER API を使用して、Windows 7 でマイク ブースト (レベル/ミュート解除) を制御しようとしていますが、同じものを制御できません。WASAPI を使用して実行できますか? Windows 7 でマイク ブーストを制御するための他の API を提案できますか?

これは私がこれまで書いてきたことです...