サウンドの同時再生 への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 zakiYoshi  (高校生) 投稿日時 2013/5/6 15:26:56
>>My.Compuper.Audio.Play("パス", AudioPlayMode.Background) こうすることで、...

私個人としては、思わぬ動作を防ぐために、そのように書くのがよいと思います。

ちなみに、msdnライブラリで調べたところ、第2引数(AudioPlayMode.Background)を省略するのと、
第2引数に AudioPlayMode.Background を指定するのは同じことになるそうです。

リンク先 : http://msdn.microsoft.com/ja-jp/library/cf1shcah(v=vs.90).aspx

--------------------------------------------------------------------------------------
<< 前回の投稿の補足 >>
 
 前回の投稿で掲載したコードサンプルでは、2つのファイルしか同時に再生していませんが、
3つ以上のファイルを同時に再生することもできます。
投稿者 Suzuran  (社会人) 投稿日時 2013/5/6 10:54:48
My.Computer.Audio.Play("パス",AudioPlayMode.Background)
                                                           ↑
こうすることで、二つ再生できるのでは・・・
投稿者 zakiYoshi  (高校生) 投稿日時 2013/5/4 17:38:13
はじめまして。

最近、mcisendstring について調べている中で、役に立ちそうなことがいくつか見つかったので、
ここで投稿しておきます。

(1)mcisendstring で同時再生ができる。

 そもそも、mcisendstring は同時再生ができるようです。
 方法としては単に、別のエイリアスを使うだけです。
 

Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _
        (ByVal LpstrCommand As StringByVal LpstrReturnString As String, _
         ByVal uReturnLength As IntegerByVal HWndCallback As IntegerAs Integer

Public Sub Play()

    ' 再生するファイルを「sound1」「sound2」というエイリアス(別名)で開く。 
         mciSendString("open " & "(再生するファイルのパス)" & " alias sound1"Nothing , 0 , 0 )
         mciSendString("open " & "(再生するファイルのパス)" & " alias sound2"Nothing , 0 , 0 )

         mciSendString("play sound1"Nothing , 0 , 0 )
         mciSendString("play sound2"Nothing , 0 , 0 )

End Sub
 (VB2010, .wav ファイルでテスト済み。)

(2)再生などの終了時にコールバック(終了通知)を受け取れる。

 これは、NativeWindow クラスの継承を活用して実現できます。ここでは、紹介にとどめておきます。
投稿者 ugonight  (中学生) 投稿日時 2011/9/1 18:11:10
…どこ調べてもわからない……
DirectSoundってどうやって使うか知っている方はいませんか…?
投稿者 ugonight  (中学生) 投稿日時 2011/9/1 18:05:26
いや…最初の質問からリストボックスのことは書いておきましたけど…

ありがとうございます。

リストボックスは解決しました
DirectSoundというのを使ってみます!
投稿者 るきお  (社会人) 投稿日時 2011/9/1 12:55:35
>リストボックスで指定したインデックスの項目を取得するにはどうしたらいいですか?
話題が違う質問は別投稿にしてください。

リストボックスで指定したインデックスの項目を取得するには、Itemsプロパティを使用します。
http://homepage1.nifty.com/rucio/main/dotnet/Samples/Sample106ListBoxGetItem.htm

>は一つしかならせませんよね…どうしたらいいでしょうか… 
なので、My.Computer.Audio.Playを使うと2つは同時にならせます。

※3つ以上は、前にも書きましたがDirectSoundを使うとできるようですが、私は経験がありません。
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=9995
投稿者 ugonight  (中学生) 投稿日時 2011/8/31 15:13:32
あれ?でも…
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As StringByVal lpstrReturnString As StringByVal uReturnLength As IntegerByVal hwndCallback As IntegerAs Integer

は一つしかならせませんよね…どうしたらいいでしょうか…
投稿者 ugonight  (中学生) 投稿日時 2011/8/31 15:08:41
リストボックスで指定したインデックスの項目を取得するにはどうしたらいいですか?

例)
ListBox1





コード
0の項目は?

戻り値
投稿者 ugonight  (中学生) 投稿日時 2011/8/31 14:20:11
ありがとうございます。

サンプルというのはこれ☟のことです
http://homepage1.nifty.com/rucio/main/dotnet/Samples/SmpleCnt.htm

これのサウンドを鳴らすっていうやつでリストボックスに入っているファイル名のファイルを同時に再生させたいのですが…
投稿者 るきお  (社会人) 投稿日時 2011/8/31 13:03:03
こんにちは。

2つ同時再生であれば、
My.Computer.Audio.PlayとWindows APIのmciSendStringを使うことで比較的簡単に同時再生できます。
これはサンプルで公開しているシューティングゲーム「スターエース」で実際にやっています。
http://homepage1.nifty.com/rucio/main/DownLoad/Index_dl.htm#StarAce


もっとたくさんあったり複雑なのであればDirectSoundを使うとできるようですが、私は経験がありません。
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=9995

>サンプルのやつをみると変数をいくつも用意しなければならないように思われますが… 
スターエースのことでしょうか?
逆に変数をいくつか用意すれば実現できるということならばなかなか有望な解決策だと思います。
投稿者 ugonight  (中学生) 投稿日時 2011/8/31 11:32:42
久しぶりにやったんでいろいろ忘れてますort

ListBoxのコレクションに登録されている音楽ファイルを再生したいのですが、一度にそれを全部再生するのにいい方法はありませんか?

サンプルのやつをみると変数をいくつも用意しなければならないように思われますが…