サウンドの繰返し再生について

タグの編集
投稿者 takusan  (社会人) 投稿日時 2011/1/27 16:34:28
サウンドの繰返し再生についてご教えください。

再生は、以下のとおりで出来ました。
     Dim FileName As String = "C:\test.wav"
     Call mciSendString(String.Format("open ""{0}"" alias MySound", FileName), "", 0, 0)
     Call mciSendString("play MySound", "", 0, 0)

繰返し再生をやりたくて、サンプル集のとおり
     Dim FileName As String = "C:\test.wav"
     Call mciSendString(String.Format("open ""{0}"" alias MySound", FileName), "", 0, 0)
     Call mciSendString("play MySound repeat", "", 0, 0)
としたところ(repeatを追加)、サウンドが再生できません。
どうしてでしょうか。よろしくお願いいたします。

          (Windows XP、  VB2010 Express使用)

投稿者 るきお  (社会人) 投稿日時 2011/1/27 22:30:44
やってみましたが、確かに再生されなくなりました。
mp3だとOKなようです。
MCIはどうもメディアの種類によって癖がある割りに情報が少なく扱いにくいです。(←言い訳)

幸い、を使用されているということですので、このようにVBの機能だけで簡単にループ再生させることができます。この方法で代わりになるでしょうか?

 
Dim player As New Media.SoundPlayer("C:\test\StarSE_PowerUp.wav")
player.PlayLooping()

投稿者 takusan  (社会人) 投稿日時 2011/1/28 11:13:58
早速のご回答ありがとう御座いました。

やりたい事は、ゲームでプレー中、BGMを再生しながらアイテムをクリックした時、擬音を発生さす
という、サウンドの同時再生です。

擬音(短い音)は My.Computer.Audio.Play( "C:\test1.wav", AudioPlayMode.Background)で再生。
BGM(音楽)は、Dim FileName As String = "C:\test2.wav"
                    Call mciSendString(String.Format("open ""{0}"" alias MySound", FileName), "", 0, 0)
                    Call mciSendString("play MySound", "", 0, 0)
で再生するとうまく、同時再生が出来ました。

BGMは、停止操作をするまで流し続けたいので繰返し再生を行いたいのですが、ご指導いただきま
した方法では、繰返し再生中に擬音を発生さすとBGMが消えてしまいます。BGMが消えない方法は
無いのでしょうか。また、上記方法はやりかた自体がおかしいのでしょうか。
お教えいただければ幸いです。




投稿者 魔界の仮面弁士  (社会人) 投稿日時 2011/1/28 12:56:26
BGM を、WAV ではなく MIDI にしてみては如何でしょう。
これならば、WAVE での効果音と併用できます。

どうしても WAV 同士で処理したいのであれば、DirectSound を利用するか、
両者を実行時に合成し、自前で和音化して再生することになるかと思います。

http://sapporo.cool.ne.jp/phrazemania/winsound_01.html
http://hpcgi1.nifty.com/MADIA/VBBBS2/wwwlng.cgi?print+200712/07120029.txt
投稿者 るきお  (社会人) 投稿日時 2011/1/28 13:02:54
擬音(短い音)は My.Computer.Audio.Play
BGM(音楽)はmciSendString
で再生しているということですが、逆にすると両方同時に再生できるようになります。

つまり、ループが必要なものはVBの機能(My.Computer.Audio.Playなど)で、
単発で1回ごとに鳴らせばいいものはmciSendStringを使います。
投稿者 takusan  (社会人) 投稿日時 2011/1/28 16:02:19
 魔界の仮面弁士 様
 るきお               様

  ご回答有難うこざいました。

魔界の仮面弁士様ご指導の方法については、私の知識では敷居が高すぎ、理解不能の状態です。
これを機会にもっと勉強したいと思います。有難う御座いました。

るきお様ご指摘のとおり、My.Computer.Audio.PlayとmciSendStringを入れ替えをしたところ、両方
同時に再生することが出来ました。
まことに有難うございました。