ページ 1 / 1
C# 音楽ファイル 二重再生
Posted: 2010年11月08日(月) 19:46
by 2³
こんばんは。
いきなりですが、音楽ファイルを重ねて再生する方法を教えていただけますか?
環境はVisual C# 2010です。
SoundPlayer se = new SoundPlayer(@"C:¥***.wav");
private void button1_Click(object sender, EventArgs e)
{
se.Play();
}
として、再生している間にもう一度buttonを押すと、最初からの再生になってしまいます。
シューティングなどで効果音を鳴らす時や、
ピアノのアプリで和音を出すときなどは重ねて再生されていますよね。
その方法をどなたか教えていただけませんでしょうか?
よろしくお願いします。
Re:C# 音楽ファイル 二重再生
Posted: 2010年11月09日(火) 21:06
by うしお
おそらくSystem.Media.SoundPlayerのことだとは思いますが、
どうやら同時再生はサポートされていないようです。
なので素直に他のAPIをお探しになったほうがよさそうです。
ウィンドウズしかわかりませんが、同時再生をサポートしているものは、
DirectSound(しかしmicrosoftはXAudio2をこれからのサウンドAPIの中心にしたいようです)
や
XAudio2
などが有名どころでしょうか
こちらはネイティブC、C++用なので、
C#などの.net環境では、slimDXなどのラッパーライブラリから呼び出すのが良いかと思います
しかし、これらのAPIはすこしばかり敷居が高いため、プログラミング学び始めということでしたら、
同時再生を一時的に見送るのも選択の1つかと思います。
DXLibの.net用ラッパもあるかもしれませんのでそちらを利用することも可能かもしれません。
蛇足ですが、
注意点としてMDX(managed DirectX)はほとんど廃れてしまったようでして、
使用はあまり推奨されていません
Re:C# 音楽ファイル 二重再生
Posted: 2010年11月10日(水) 06:48
by 2³
>同時再生を一時的に見送るのも選択の1つかと思います。
そうですね。では、今はいろいろなことを一度にたくさんやっているので、それが終わった時に
教えてくださったライブラリのことで質問させていただきたいと思います。
その時は、なにとぞよろしくお願いします。
今回は解決にさせていただきます。
<追記>
解決マークはずしました。

Re:C# 音楽ファイル 二重再生
Posted: 2010年11月10日(水) 08:52
by バグ
保存形式の違うファイルでしたら、WINAPIを利用すれば再生可能です。
基本的にSoundPlayerクラスはWav形式のみしか再生できなかったかと思いますが、MP3はOggなど別の形式で保存しておき、mciSendStringなんかで再生してやれば同時再生可能です。
かなり前に作成したので、多少不具合があるまま放置していますが、私のサイトからC#でMP3の音楽ファイルを再生するクラスを公開してますので、よければどうぞ。
Re:C# 音楽ファイル 二重再生
Posted: 2010年11月10日(水) 17:57
by 2³
ありがとうございます。URL見させていただきました。
おかげでmp3とoggのファイルを再生できましたが、WinAPIが全然わからないので
どこを書き換えれば同時再生できるのかが分かりません...
Re:C# 音楽ファイル 二重再生
Posted: 2010年11月10日(水) 18:59
by バグ
例えば、効果音は容量の大きくなりがちなWAV形式のファイルをそのままSoundPlayerクラスで再生して、BGMなどの長くて容量が大きくなりがちなものはMP3なんかの圧縮された比較的容量が小さくなるもので再生してやれば同時再生できると思いますが?(^_^;)
Re:C# 音楽ファイル 二重再生
Posted: 2010年11月10日(水) 19:42
by 2³
ピアノのアプリケーションで和音を出すときのように2つ以上のファイルを同時再生できますか?
Re:C# 音楽ファイル 二重再生
Posted: 2010年11月10日(水) 21:33
by バグ
前にも書きましたが、形式の違うファイルならば同時に出せますから、やろうと思えばできますよ。
Re:C# 音楽ファイル 二重再生
Posted: 2010年11月11日(木) 07:25
by 2³
すみません。お返事遅くなりました。
>形式の違うファイルならば同時に出せますから
そういうことですか。分かりました。
では形式を変えて再生しようと思います。
バグさん、うしおさん、ありがとうございました。