WindowsXP VB2005
SoundPlayerクラスのメソッドを利用してWAVファイルを再生させる
のですが、条件により2つのWAVを再生させたくて、以下のような
関数を作成しました。
Public Sub PlaySoundLoop(ByVal waveFile As String, ByRef player As SoundPlayer)
' 再生されているときは止める
If Not (player Is Nothing) Then
StopSound(player)
End If
' 読み込む
player = New System.Media.SoundPlayer(waveFile)
' ループ再生
player.PlayLooping()
End Sub
player As SoundPlayer を呼び出し元で2個作成し、それぞれがこの関数
に来るのですが、
player.PlayLooping()
手前の' 再生されているときは止める 処理では止まらないのですが、
ここで、先に流れている音が消えてしまいます。
PlayLoopingでは同時再生は不可能なのでしょうか?
それとも何か同時再生させる手段はありますでしょうか?
試してはいませんが、おそらくその方法だと、同時再生はできないと思います。
Windows Audio は、同時再生に対応していなかったと思いますので、
無理にやるならば、2 曲をミックスさせた wav を動的に生成して、
擬似再生することになりそうです。手間はかかるでしょうけれども。
今回の場合は、DirectSound を利用してみては如何でしょうか。
これならば、同時再生などにも対応しているかと思います。
http://sorceryforce.com/programing/mdx/
http://www.atelier-blue.com/program/mdirectx/index.htm
魔界の仮面弁士様
教えていただいた
http://sorceryforce.com/programing/mdx/
のサイトから同時再生のプログラムを作成することが
できました。
bufferを2つ用意し、
' WAV LOOP再生
Public Sub PlaySoundLoopDX(ByVal buffer As SecondaryBuffer)
' 再生位置を一番最初に設定
buffer.SetCurrentPosition(0)
' LOOP再生
buffer.Play(0, BufferPlayFlags.Looping)
End Sub
この関数を通すことで同時に再生する事ができました。
初期設定、その他も教えていただいたページのサンプルを利用しました。
音が2つ同時に鳴った時は感動しましたし、プログラムボリュームが
かなり小さいのにも驚きました。
まだまだ初心者です・・・。
ご教授ありがとうございました。