tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトル第2スピーカーから音を出すには
記事No15082
投稿日: 2011/01/16(Sun) 20:14
投稿者WG
WindowsXP

VB6で、WindowsMediaPlayerコントロール(WMPC)を使って音楽ファイル(WMA)を再生するソフトを作っています。
再生する音楽の音を、パソコンが出す他の音(Beep音など)とは違う別のスピーカー(第2スピーカー)から出したいと考えております。
そのためにパソコンに第2サウンドカードと第2スピーカーを繋げました。
メディアプレーヤー(単体の方)で再生するときは、設定を変更することで、ちゃんと第2スピーカーから音が出たのですが、WMPCでは今まで通りの第1スピーカーから音が出ました。
どうやればWMPCでも第2スピーカーから音が出せるようになるでしょうか?
WMPC以外でのやり方でも構いません(MMControlなどでも)。第2スピーカーから音が出てくれさえすれば他の方法でもいいと思っております。

どうか教えて頂けないでしょうか?
よろしくお願いいたします。

[ツリー表示へ]
タイトルRe: 第2スピーカーから音を出すには
記事No15083
投稿日: 2011/01/16(Sun) 20:38
投稿者オショウ
> どうやればWMPCでも第2スピーカーから音が出せるようになるでしょうか?

  そういう使い方をしてはいないので、確認できませんが
  自プログラムで音楽を再生するのでは無い為、出力先を
  操作できないだろうと思われます。

  よって、デバイスの有効・無効を使って無理やり1デバ
  イスのみしか無い状態にしてやれば可能かと。

  因みに、VB6でデバイスの無効化有効化を行うことは不可
  能では無いですが、音楽再生より難易度高いと思います
  ので実質的には回避策にはならないかナ・・・

  DDKにあるツールで、「DEVCON」を使えば、デバイスの
  有効無効化ができたはず。

  http://support.microsoft.com/kb/311272/ja

  waveOutOpenとかのAPIで音楽再生させるならば、出力先
  はDeviceIDで選択できるので、問題無いのですが。

以上。参考まで

[ツリー表示へ]
タイトルRe: 第2スピーカーから音を出すには
記事No15084
投稿日: 2011/01/16(Sun) 23:49
投稿者YuO
とりあえず,残念なお知らせだけ。

まず,「それっぽいインターフェース」は存在します。
MSDN: IWMPAudioRenderConfig Interface (Windows)
http://msdn.microsoft.com/en-us/library/dd563077.aspx
ところが,
MSDN: What's New in Windows Media Player 12 (Windows)
http://msdn.microsoft.com/en-us/library/dd758068.aspx
に,IWMPAudioRenderConfigはWMP12の新機能として書かれています。

WMP12で出力先のオーディオインターフェースの取得および設定ができるようになった,
というのは,裏を返すとそれまでできなかった,ということになります。
で,WMP12はWindows 7の機能ですから,
WMPを使う限りWindows XPでは「できない」という結論になります。


その他の例で,例えばMCIを使うのであれば,
MSDN: MCI_WAVE_SET_PARMS Structure (Windows)
http://msdn.microsoft.com/en-us/library/dd798435.aspx
のwOutputで指定が出来そうに見えます (実際には試していないので,確実とは言いません)。

[ツリー表示へ]
タイトルRe: 第2スピーカーから音を出すには
記事No15085
投稿日: 2011/01/17(Mon) 16:28
投稿者WG
オショウさん、YuOさん、ご回答ありがとうございます。

実現はかなりレベルが高く難しいようですね。
ちょっとやり方を変えてみようかと思います。
WMP(単体の方)を直接VBから操作して再生してみようかと考えております。
IEやエクセルのようにWMPをVBから操作できるでしょうか?
やりたいことは次の2点だけです。
1.演奏の開始。
2.演奏終了の認識(次の曲に行くために)。

1の「演奏の開始」は、
    a = "C:\Program Files\Windows Media Player\wmplayer.exe"
    b = "C:\aaa.wma"
    Shell a & " " & b, 1
としてやったのですが、うまく行ときと行かないときがありました。
wmaファイルのファイル名に空白があるときだけうまく行かないようです(例えば、「a aa.wma」など)。
次のようなメッセージが出ました。

「選択されたファイルは、Windows Media Player で認識されない拡張子を持っていますが、再生できることがあります。ただし、Windows Media Player で確認できない拡張子であるため、このファイルが信頼できる提供元からのものであることを確認してください。」

どうか解決策を教えて頂きたいのですが。
よろしくお願いいたします。

[ツリー表示へ]
タイトルRe^2: 第2スピーカーから音を出すには
記事No15086
投稿日: 2011/01/17(Mon) 17:16
投稿者WG
失礼しました。
下のように、ダブルクォーテーションで囲めばいいということがわかりました。
b = """C:\a aa.wma"""

あとは、2の「演奏終了の認識」がわかればいいだけなのですが、
ご教授のほどよろしくお願いいたします。

[ツリー表示へ]
タイトルRe^3: 第2スピーカーから音を出すには
記事No15087
投稿日: 2011/01/17(Mon) 17:52
投稿者オショウ
> あとは、2の「演奏終了の認識」がわかればいいだけなのですが、
> ご教授のほどよろしくお願いいたします。

  外部アプリの動作を捕捉するのは、なかなかに困難かと。

  VB6なら、WindowsMediaPlayerを参照してコントロールを
  フォームに貼れば、同様に使えます。

  そこで、StatusChangeイベントの受信をしたら

  WindowsMediaPlayer1.playState = wmppsStopped

  を待てば、演奏の終了が検知できますが・・・

以上。参考まで

[ツリー表示へ]
タイトル第2スピーカーから音を出すには【解決】
記事No15088
投稿日: 2011/01/19(Wed) 18:36
投稿者WG
> 外部アプリの動作を捕捉するのは、なかなかに困難かと。
そうですか。
かなり難しいようなので、分配器でPC用のスピーカーと音楽専用のスピーカーに分ける方法にしようと思います。
どうもありがとうございました。

[ツリー表示へ]