2012-08-25 8 views
6

私はサウンドを持っているアプリケーションを持っています。私は音を消すためのグローバルなプロパティを持っています。問題は、サウンドを作ることができる非常に多くの異なるものがあることです。異なるクラスのタイプを繰り返し、サウンドをミュート/ミュート解除することは嫌です。代わりに、グローバルなアプリケーションレベルでサウンドをミュートする方法を探しています。私は、システム全体の音量をミュートしているわけではありません。アプリケーションのサウンドをミュートするにはどうすればよいですか?

1つのシナリオ:Windows 7では、ボリュームミキサーを開いて個々のアプリケーションの音量を調整できます。この特定の値を変更するつもりはありませんが(私はWindows 7固有のことを知っています)、アプリケーション内のすべてのボリュームを一度に変更したいと思います。私のアプリケーションでは、すべてのサウンドを完全にミュートする機能も必要です。私はこの能力がWindows XP以上と互換性があることが必要です。私はそれがWindows API呼び出しを含むと仮定していますが、私は何を作るために呼び出すか分かりません。

+0

はこの質問を見ている:私は覚えている何のため http://stackoverflow.com/questions/1092466/windows-xp-mute-unmute-audio-in-programmatically-in-python – Sebi

+3

を、XPはありませんでしたアプリケーションごとのサウンドレベル。あなたはいくつかの中心的なサウンド出力APIをあなたのアプリケーションに持っていて、それをWindows APIに渡すか無視するだけでトグルします。 –

+1

WinXPにはアプリケーションごとのサウンドコントロール機能がありません。これはVistaで追加されたもので、完全に別の(新しい)APIを使用してサポートしています。 Larry Osterman(MSの老人の一人)は、彼のブログに新しいサウンドAPIに関するシリーズを持っていました。このマシンにはリンクがありませんが、グーグルで彼を見つけることができます。 C/C++のこれに関する記事があります。私はあなたがそれらを見つけるのに使うための検索語を見つけることができるかどうかを見ます。 –

答えて

3

あなたが求めているのはXPでは不可能です。 OSは単にアプリケーションごとのボリュームレベルをサポートしていません。

SoundActive: BooleanPlaySounds: Booleanなどのようなものを保持する設定クラスを作成することで、目的を達成できます。それ自身のユニットに配置し、インスタンスを作成する初期化セクションと、それを解放するファイナライゼーションセクション(事実上グローバル値のコレクションにする)を持っています。

これらの設定にアクセスする必要がある各ユニットは、それらを含むユニットを使用して、それに応じて動作を調整します。だからあなたの子クラスまたはフォームまたはちょうどチェックが追加必要となるものは何でもの各:

if CurrentSettings.PlaySounds then 
    // Code that makes sounds, plays music, whatever. 

設定クラスは、(XP上で、システム全体のレベル)現在の音量レベルを追跡する方法をも含むことができ、ボリューム機能を使用してボリュームを増減する方法(ここでは数多くの例がありますが、これを実行する方法についてはGoogleを参照してください)。アプリはOnActivateイベントとOnDeactivateイベントを使用して、アプリがフォーカスを取得したときに音量レベルを設定し、アプリがフォーカスを失ったときに適切な音量に戻すことができます。

Vistaでは

と高い、あなたは、システム全体のボリューム(私は適切なMMDevAPIインタフェース定義とともに、これを行うの一例を持っている)、またはデバイスレベルを制御するために、私は前に述べたIAudioEndPointVolumeインターフェイスのいずれかGetMasterVolumeLevelまたはSetMasterVolumeLevelメソッドを使用することができます(適切なデバイスを最初に選択するためにIMMDevioce.Activateを使用し、ppInterfaceパラメータのIMMDevice.Activateから受信したデバイスインターフェイス上の上記のIAudioEndPointVolumeメソッド)を使用します。あなたが現在ミュートフラグの値を取得または設定できるようにするために、アプリケーションのオーディオセッションの音量レベルを制御GetMasterVolumeSetMasterVolume、そしてGetMuteSetMute

は、個々のアプリケーションでは、4つの方法がありますISimpleAudioVolumeインタフェースを使用しますそれはそれぞれ。 (VistaとWin7の新しいオーディオサポートに携わった開発者の1人であったMSのLarry Osterman氏は、新しいAPIのオーディオの種類とそれぞれの使い方についてブログにstarting point articleという素晴らしい名前を付けている。)

それはあなたが使用している、そしてプログラムでXPおよびそれ以前のMMSystem機能、およびMMDevAPI Vistaで機能性と高いを使用して切り替えるには、どのオペレーティングシステム実行時に決定するために、概念的には可能です。しかし、これを行うためのコードを提供するためにここに誰かを期待することは少し不合理です。私が提供したリンクは、あなたが正しい道を歩み始めるはずであり、道に沿って遭遇したときに、その傷つきを解決するための具体的な助けが素晴らしい質問になるでしょう。

4

XPはアプリケーションごとの音量コントロールをサポートしていません。その機能はVistaで追加されました。それで、あなたがしようとしていることは、公正な手段でXPで行うことはできません。

IndieVolumeと呼ばれるソフトウェアがあります。これは、アプリごとの音量調整をXPに合わせることができます。私はそれが低レベルのハッキング、DLLの注入などによって実現するとしか想像できません。私はそれが本当にあなたのための選択肢であるとは思わない。

関連する問題