C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: スレッドでの同時再生


(過去ログ 76 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■44824 / inTopicNo.1)  スレッドでの同時再生
  
□投稿者/ アスキー (1回)-(2009/12/18(Fri) 15:51:04)

分類:[.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) ;
}
}

}









このようなプログラムを作ってみたのですが、片方しか再生されません・・・

初心者なので根本から間違ってるかもしれませんが助言をいただけたら幸いです。

引用返信 編集キー/
■44830 / inTopicNo.2)  Re[1]: スレッドでの同時再生
□投稿者/ 魔界の仮面弁士 (1433回)-(2009/12/18(Fri) 17:01:56)
No44824 (アスキー さん) に返信
> 研究でC#を使っているんですが、wavの同時再生がどうやってもできません・・・
PlaySound は同時再生に対応していないため、この方法を使うのであれば、
それぞれをミックスした wav を動的に生成・再生するといった作業が
必要になるかと思います。

替わりに、DirectSound を利用してみては如何でしょうか。
これであれば、同時再生が可能です。
http://fe0r.at.infoseek.co.jp/Doc/wav.htm


> 教授にはスレッドを使えばできるとの助言をいただき自分なりに
別の EXE から呼び出せば再生できる可能性もあるようですが、
スレッドを分けても駄目だったという話がありますね。
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200707/07070042.txt
引用返信 編集キー/
■44839 / inTopicNo.3)  Re[2]: スレッドでの同時再生
□投稿者/ アスキー (2回)-(2009/12/19(Sat) 12:06:34)
返信ありがとうございます!

とってもわかりやすく、無事解決しました!


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -