WAVの同時再生

解決


タメ子  2007-12-12 01:35:46  No: 138380

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では同時再生は不可能なのでしょうか?
それとも何か同時再生させる手段はありますでしょうか?


魔界の仮面弁士  2007-12-12 02:21:06  No: 138381

試してはいませんが、おそらくその方法だと、同時再生はできないと思います。

Windows Audio は、同時再生に対応していなかったと思いますので、
無理にやるならば、2 曲をミックスさせた wav を動的に生成して、
擬似再生することになりそうです。手間はかかるでしょうけれども。

今回の場合は、DirectSound を利用してみては如何でしょうか。
これならば、同時再生などにも対応しているかと思います。
http://sorceryforce.com/programing/mdx/
http://www.atelier-blue.com/program/mdirectx/index.htm


タメ子  2007-12-12 04:57:21  No: 138382

魔界の仮面弁士様

教えていただいた
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つ同時に鳴った時は感動しましたし、プログラムボリュームが
かなり小さいのにも驚きました。

まだまだ初心者です・・・。

ご教授ありがとうございました。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加