|
分類:[.NET 全般]
研究でC#を使っているんですが、wavの同時再生がどうやってもできません・・・
教授にはスレッドを使えばできるとの助言をいただき自分なりに
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; // for DllImport using System.Threading; // for Thread
namespace tesut { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
[DllImport("winmm.dll")] extern static bool PlaySound(string s1, IntPtr i1, int i2) ; // 返り値 = true @正常終了, false @エラー // s1 = Sound File Name / Resource ID // i1 = Instance Handle @SND_RESOURCE // i2 = Flags(↓) const int SND_SYNC = 0x00000 ; // 同期再生 (再生終了後に制御を返す) const int SND_ASYNC = 0x00001 ; // 非同期再生(即座に制御を返す) const int SND_LOOP = 0x00008 ; // 繰り返し再生 const int SND_FILENAME = 0x20000 ; // s1 は Sound File Name const int SND_RESOURCE = 0x40004 ; // s1 は Resource ID
private void button1_Click(object sender, System.EventArgs e) // 再生の例 { // button1 が押されたら、再生する(非同期再生) PlaySound(@"C:\test\ele.wav", IntPtr.Zero, SND_FILENAME | SND_ASYNC);// スレッドの起動 Thread thread_1 = new Thread(new ThreadStart(func_1)); // スレッドの宣言 thread_1.Start();
}
private void func_1() { PlaySound(@"C:\test\test.wav", IntPtr.Zero, SND_FILENAME | SND_ASYNC); /* スレッドの本体(重い処理)*/ }
private void button2_Click_1(object sender, System.EventArgs e) { // button2 が押されたら、停止する PlaySound(null, IntPtr.Zero, 0) ; } }
}
このようなプログラムを作ってみたのですが、片方しか再生されません・・・
初心者なので根本から間違ってるかもしれませんが助言をいただけたら幸いです。
|