3

キーまたはボタンを押したりクリックしたりしたときにwavファイルを再生する必要があるアプリがあります。SoundPlayerクラスを使用していますが、同時に別のwavファイルを再生しようとすると、再生中のファイルが停止します。

複数のwavファイルを同時に再生する方法はありますか?その1つがあれば、例やチュートリアルを教えていただけますか?

これが私がこれまでに得たものです:

private void pictureBox20_Click(object sender, EventArgs e)
{
    if (label30.Text == "Waiting 15.wav")
    {
        MessageBox.Show("No beat loaded");
        return;
    }
    using (SoundPlayer player = new SoundPlayer(label51.Text))
    {
        try
        {
            player.Play();
        }
        catch (FileNotFoundException)
        {
            MessageBox.Show("File has been moved." + "\n" + "Please relocate it now!");
        }
    }
}

ありがとう!

4

2 に答える 2

11

あなたはSystem.Windows.Media.MediaPlayerクラスでこれを行うことができます。WindowsBaseおよびへの参照を追加する必要があることに注意してくださいPresentationCore

private void pictureBox20_Click(object sender, EventArgs e)
{
    const bool loopPlayer = true;
    if (label30.Text == "Waiting 15.wav")
    {
        MessageBox.Show("No beat loaded");
        return;
    }
    var player = new System.Windows.Media.MediaPlayer();
    try
    {
        player.Open(new Uri(label51.Text));
        if(loopPlayer)
            player.MediaEnded += MediaPlayer_Loop;
        player.Play();
    }
    catch (FileNotFoundException)
    {
        MessageBox.Show("File has been moved." + "\n" + "Please relocate it now!");
    }
}

MediaEnded編集:イベントに登録することでサウンドをループさせることができます。

void MediaPlayer_Loop(object sender, EventArgs e)
{
    MediaPlayer player = sender as MediaPlayer;
    if (player == null)
        return;

    player.Position = new TimeSpan(0);
    player.Play();
}

あなたのコードに基づいて、あなたはある種の音楽制作ソフトウェアを書いていると思います。このメソッドが毎回完全にループするかどうかは正直わかりませんが、私が知る限り、MediaPlayerコントロールを使用してループする唯一の方法です。

于 2013-03-20T02:10:11.580 に答える
0

SoundPlayer を使用して 2 つのサウンドを同時に再生することはできません。

SoundPlayer は、PlaySound同じインスタンスでの複数のサウンドの再生をサポートしないネイティブ WINAPI を使用します。

より良いオプションは参照することですWindowsMediaPlayer

への参照を追加C:\Windows\System32\wmp.dll

var player1 = new WMPLib.WindowsMediaPlayer();
player1.URL = @"C:\audio_output\sample1.wav";

var player2 = new WMPLib.WindowsMediaPlayer();
player2.URL = @"C:\audio_output\sample2.wav";
于 2013-03-20T02:08:18.650 に答える