• ベストアンサー

パソコン音声のミュートをVBAから制御するマクロ

パソコンの音声のミュートをエクセルVBAで制御する方法を教えてください。 設定した条件になるまでミュートし、条件に適ったらオンにしたいと思いますが、VBAの知識だけではどうしようも無いようです。 WAVEファイルを鳴らすことは出来ましたが種類が多くまとめて制御したいと思います。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#52504
noname#52504
回答No.3

ざっと調べてみましたが、どうも一筋縄ではいかないようですね。 私なら、いっそのこと音量を制御するソフトをShell関数で呼びます。 例えば、 ■Windows Volume Controller (WVC) http://www.vector.co.jp/soft/win95/art/se380707.html なんてソフトがありますが、 WVC.exe が C:\Program Files\Tools にあるとして、 '-----------------↓ ココカラ ↓--------------------- Sub Sample1()  'マスタ音量を0に  Shell "C:\Program Files\Tools\WVC.exe a0", vbHide End Sub Sub Sample2()  'マスタ音量を50に  Shell "C:\Program Files\Tools\WVC.exe a50", vbHide End Sub '-----------------↑ ココマデ ↑--------------------- (WinXP-Excel2003環境で動作確認済) もっとも、上記ソフトに関しては、 ミュートのON/OFF自体を切り替えるオプションがありませんし、 現在の音量を取得することもできないので、 「元の状態に戻す」ことはできません。 ■ボリュームリセット http://www.vector.co.jp/soft/winnt/art/se312770.html の方は、デバイス単位の制御はできませんが、 あらかじめミュート状態のデータファイルを用意しておけば、 現在の状態を記録⇒ミュート状態に移行⇒記録した状態に復帰 といった制御も可能だと思われます。 その他、より明示的にミュートのON/OFFを直接切り替えるソフトも 探せばあるのではないかと思います。 別のアプローチとしては、 sndvol32を開いてSendkeysで制御というのも考えましたが '-----------------↓ ココカラ ↓--------------------- Sub Sample3()  Shell "sndvol32", vbHide  SendKeys "%(M)", True  SendKeys " ", True  SendKeys "%{F4}", True End Sub '-----------------↑ ココマデ ↑--------------------- ウェイトをかけるなどしてうまく同期させないと、 きちんと動作しない場合がありますし、遅い印象です。 以上、ご参考まで。

その他の回答 (2)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

> 10数種類の音声である条件ではこれらを一斉に発音を止め、 > また復帰させるのが目的です。 サウンド再生の方法として sndPlaySound、mciSendString API などの API がありますが、ともに同時再生はできなかったように思います。恐らく ご希望のことを VB(A) でやろうと思えば DirectSound を使うしかないの ではないかと... > APIの詳細な説明にはついていけません。上記のような数行のコードで > できないものかと期待しています。 難しいです。VBA にない機能を使うのですから、そんな簡単にはできません。 多少は API に関する知識が必須ですし、少なくとも数行で実現できる内容 ではないと思います。 どうしても、、というのであれば、VECTOR などで比較的簡易なコードでも サウンド操作できるライブラリを探すというのもひとつの手ですよ。 http://www.vector.co.jp/soft/win95/prog/se050103.html http://tokyo.cool.ne.jp/kanain/APIHTM/DSGame.html

NazeTarou
質問者

お礼

deus ex machinaさんご丁寧な回答有難うございました。 参考にさせて頂ながらいろいろ試していました。 偶然引用したwavファイルがフォルダー違いで鳴らなかったので、これをヒントに10数個のファイルを傘下に入れているフォルダー名を変えてみました。 nameコマンドで存在しないフォルダー名に変えるとファイルが再生されずエラーも出ませんでした。復帰する時は正しいファイル名に変えます。 これで一挙に解決しました。 お手数かけましたが、苦闘しているうちの成果です。有難うございました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

>WAVEファイルを鳴らすことは なんというソフトを使いましたか。それを書かないで質問になりますか。 ーー 今までにも出たことのない高度な質問で、もしここに回答が付かなければ、もっと別の専門的なサイトに質問しては。 エクセルVBAやVBではそのソフトの実行時の初期のパラメータ指定で指定できる内容や停止、再開などだけで、進行中の状態で、制御をするのは、エクセルVBAやVB(初歩中級)の課題ではできないと思う。 http://www13.plala.or.jp/kymats/study/MULTIMEDIA/PlaySound_file_rsc.html など「WAVEファイル 再生」などでWEB照会したらどうですか。 他に「ミュート VBA」で照会。 http://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200704/07040022.txt  など。 APIの領域に踏み込んでますね。 基本的に、何でも実行中のソフトを他のプログラムから制御できるものでは無いですよ。

NazeTarou
質問者

補足

初歩的な質問で達人なら直ぐそんな簡単なこととアドバイスがいただけると即断しました。舌足らずだったようです。 Waveは変数を宣言し以下のコードで鳴らしています。   Public Declare Function 音 Lib "winmm.dll" Alias "sndPlaySoundA" _ (ByVal ファイルの場所 As String, ByVal 制御フラグ As Long) As Long Public a As Long 'aは音声を出す値を返すための変数 a = 音("C:\aaa\bbb.wav", 2) 10数種類の音声である条件ではこれらを一斉に発音を止め、また復帰させるのが目的です。 事前に文字通り「ミュート VBA」で照会しましたが、APIの詳細な説明にはついていけません。上記のような数行のコードでできないものかと期待しています。

関連するQ&A

  • 音声のミュートについて

    こんにちは。 パソコンのことで困っておりまして、相談をさせていただきます。 OSはWin7を使用しているのですが、時々、画面右下のスピーカーの ボリュームコントロールのアイコンがミュート(赤いマーク)になっているのもかかわらず、 音声が出ることがあります。 特に、ゲームを起動したときが多いです。 スピーカーのアイコンをクリックしてミュートを解除したり、ONにしたりすると 正常に戻ります。 どなたか、考えられる原因について、ご教授いただければ幸いです。 よろしくお願いいたします。

  • 自作のJAVAゲームにて、音量、左右のバランスの制御が出来ずに困っています。

     自作のJAVAゲームにて、音量、左右のバランスの制御が出来ずに困っています。  音声ファイルごと、もしくは音声ファイルの種類(mp3、wave、mid)ごとに音量の設定、制御が出来るようにしたいのですが、その方法等を御教授頂けないでしょうか? また、左右のバランスについてもお教えいただければ幸いです。

  • EXCEL VBAで制御できるアップロート゜ツールは?

    FFFTPを使用してファイルの転送をしていますが、 これをEXCEL VBAで制御しようとしたのですが FFFTPは自動化に向かないらしく、制御できません。 EXCEL VBA で制御できるフリーソフトは無いでしょうか。使用OSはWIN95です。

  • VBAの進行を止めずに音声ファイルを再生する方法

    Excel VBA VBAの進行を止めずに音声ファイルを再生する方法 現在VBAで以下のコードで音声を再生しています。しかしこの方法だとファイル再生中は プログラムの進行が停止します。進行を止めずに少なくとも10秒程度のファイルを再生する方法をご教示ください。 なお条件によって都度違う音声ファイルを1回だけ再生します。 Public Declare Function 音 Lib "winmm.dll" Alias "sndPlaySoundA" _ (ByVal ファイルの場所 As String, ByVal 制御フラグ As Long) As Long Public a As Long 'aは音声を出す値を返すための変数 a = 音("C:\短メロ\音声ファイル名.wav", 2)

  • vbaでミュートにしたい

    vbaでミュートにしたいのですが http://okwave.jp/qa/q3556093.html の回答No.3さんのご回答の Windows Volume Controller (WVC) のリンクが切れてたので、 -----------------↓ ココカラ ↓--------------------- Sub Sample3()  Shell "sndvol32", vbHide  SendKeys "%(M)", True  SendKeys " ", True  SendKeys "%{F4}", True End Sub '-----------------↑ ココマデ ↑--------------------- をやってみようとしたら、 Shell "sndvol32", vbHide でファイルが見つかりません。になりました。 sndvol32を実行するには、何をインストールすればいいのでしょうか? 当方エクセル2010、win7です。

  • VBAマクロを含んだEXCELファイルが開けません。

    どうも。 VBA初心者です。 VBAのマクロを含んだEXCELファイルを作成、保存したのですが、EXCELファイル自体が開けなくなってしまいました。 コードの内容は繰り返し制御の練習(WHILE LOOP)ですので、たいしたことはしていません。 原因がお分かりになる方は教えてください。

  • ホームページ上で、パソコン全体の音声のON・OFFを切り替える方法ありませんか?

    マニアックな質問で恐れ入ります(_ _)。 ●ホームページ上で、パソコン全体の音声のONとOFFを切り替える方法はありませんでしょうか? ・デスクトップ上右下の「音量」を変えられるアイコンがあります。 (スピーカーの形をした)(ボリュームコントロール)  それをを呼び出す機能でも、いいです。 ・ボリュームコントロール内の、WAVEだけを呼び出す。 ・また、ボリュームコントロールのミュートボタンをホームページに貼り付ける などが、考えられるかな?と思ったのですが できるのか?できないのか?自体よくわかりません。 よろしければ、ぜひ教えて頂きたいのですが・・。 どうぞ、よろしくお願いいたします(_ _)。

  • VBA IE制御 エレベーターバーの制御は?

    EXCEL VBA IE制御 IEを表示後エレベーターバーを下にズらしたい 方法をご存知の方がおられましたらご教授お願いします。

  • パソコン内の音声の録音

    WEB上に流れる音声や音楽をパソコン内で録音して音声ファイルにできますか。 現在、携帯電話でパソコンのマイクからの音声を録音保存(AMR)し、WAVEに変換してWMPで再生しています。音が明瞭でないので、困っています。 いい方法を教えてください。 手順を詳しく教えていただけると助かります。

  • Excel VBAでファイルの制御をしたい

    今、Excel VBAでファイル操作の制御スクリプトをくみたくて 悩んでおります。。 "test.xls"ファイルというエクセルの共有ファイルがあります。 そのファイルは日々様々なユーザーがデータを書き込みます。 この共有ファイルに対し、誰か一人がこのファイルを開いている際に 違う誰かがファイルを開こうとした場合に、警告メッセージを表示した後、強制的にファイルを閉じるというプログラムを組みたいのですが・・。 何せ、VBAでのプログラミングはまったくの初心者の為、 悪戦苦闘しております。 どなたか、良いアドバイスを頂けたら嬉しいです。 是非、宜しくお願い致します。

専門家に質問してみよう