it-swarm.com.de

Spielen Sie zwei Sounds gleichzeitig 

Gibt es eine Möglichkeit, zwei Sounds gleichzeitig abzuspielen?

Ich weiß, dass SoundPlayer das nicht kann. Ich kann SoundEffect nicht verwenden, da ich glaube, dass es nur ein Teil von XNA ist.

Die beiden erforderlichen Sounds werden zu unbekannten und zufälligen Zeitpunkten aufgerufen. Der Sound muss nach der Wiedergabe kontrolliert werden. das heißt, der Ton muss gestoppt werden können, bevor er abgespielt wird.

26
AlanFoster

Verweisen Sie auf PresentationCore und WindowsBase und versuchen Sie Folgendes ...

var p1 = new System.Windows.Media.MediaPlayer();
p1.Open(new System.Uri(@"C:\windows\media\tada.wav"));
p1.Play();

// this sleep is here just so you can distinguish the two sounds playing simultaneously
System.Threading.Thread.Sleep(500);

var p2 = new System.Windows.Media.MediaPlayer();
p2.Open(new System.Uri(@"C:\windows\media\tada.wav"));
p2.Play();

EDIT Ich habe eine Downvote erhalten, weil dies auf den ersten Blick so aussieht, als würde es den zweiten Sound abspielen, nachdem der erste fertig ist. Ist dies nicht der Fall, werden sie asynchron von Fenstern abgespielt. Der Schlaf ist vorhanden. Wenn Sie diesen Code wörtlich testen, können Sie hören, wie die Sounds zusammen abgespielt werden. Ohne Verzögerung ist dies nicht zu bemerken, da sie den gleichen Sound haben.

Dieser Code demonstriert die beiden Sounds, die auf separaten Threads übereinander abgespielt werden, was ziemlich sinnlos ist, da die Wiedergabe sowieso nicht blockiert wird

new System.Threading.Thread(() => {
        var c = new System.Windows.Media.MediaPlayer();
        c.Open(new System.Uri(@"C:\windows\media\tada.wav"));
        c.Play();
    }).Start();

System.Threading.Thread.Sleep(500);

new System.Threading.Thread(() => {
        var c = new System.Windows.Media.MediaPlayer();
        c.Open(new System.Uri(@"C:\windows\media\tada.wav"));
        c.Play();
    }).Start();

http://msdn.Microsoft.com/de-de/library/system.windows.media.mediaplayer.stop.aspx Die Klasse hat auch die Kontrolle, die Sie zum Stoppen der Wiedergabe benötigen

29
JeremyWeir

Mit dem Objekt "MediaPlayer" können Sie nicht zwei Sounds gleichzeitig abspielen, auch wenn Sie zwei Instanzen erstellen. Sie müssen die native Windows-API "mciSendString" mitbringen.

    [DllImport("winmm.dll")]
    static extern Int32 mciSendString(string command, StringBuilder buffer, int bufferSize, IntPtr hwndCallback);

    public Form1()
    {
        InitializeComponent();

        mciSendString(@"open C:\Users\Jono\Desktop\applause.wav type waveaudio alias applause", null, 0, IntPtr.Zero);
        mciSendString(@"play applause", null, 0, IntPtr.Zero);

        mciSendString(@"open C:\Users\Jono\Desktop\foghorn.wav type waveaudio alias foghorn", null, 0, IntPtr.Zero);
        mciSendString(@"play foghorn", null, 0, IntPtr.Zero);

    }
6
feathj

Überprüfen Sie die PlaySound-Methode hier http://msdn.Microsoft.com/en-us/library/aa909766.aspx und das Flag SND_ASYNC.

1
Eugen

Von http://alvas.net/alvas.audio,samples.aspx#sample7 und http://alvas.net/alvas.audio,samples.aspx#sample6

Player pl = new Player();
byte[] arr = File.ReadAllBytes(@"in.wav");
pl.Play(arr);
Player pl2 = new Player();
pl2.FileName = "123.mp3";
pl2.Play();

oder mischen Sie Audiodaten vor der Wiedergabe So mischen Sie zwei Audiodateien ..

private void Mix(string outfile, string infile1, string infile2, int shiftSec)
{
    WaveReader wr1 = new WaveReader(File.OpenRead(infile1));
    WaveReader wr2 = new WaveReader(File.OpenRead(infile2));
    IntPtr format1 = wr1.ReadFormat();
    WaveFormat wf = AudioCompressionManager.GetWaveFormat(format1);
    WaveWriter ww = new WaveWriter(File.Create(outfile), AudioCompressionManager.FormatBytes(format1));
    byte[] data0 = wr1.ReadData(0, shiftSec);
    byte[] data1 = wr1.ReadData(shiftSec);
    byte[] data2 = wr2.ReadData();
    byte[] mixData = AudioCompressionManager.Mix(format1, data2, data1);
    ww.WriteData(data0);
    ww.WriteData(mixData);
    ww.Close();
    wr2.Close();
    wr1.Close();
}
0
Aleks

Lösung: Hallo, Ich habe eine WP8-App entwickelt und brauchte mehrere Sounds, um gleichzeitig zu spielen. Die oben genannten Lösungen funktionierten nicht für mich. Also habe ich den XNA-Rahmen verwendet. hier ist der Link 

http://msdn.Microsoft.com/de-de/library/ff842408.aspx

und spielen Sie dann Ihre Sounddateien ab ...

SoundEffect Sound = SoundEffect.FromStream(Application.GetResourceStream(new Uri("Assets/Sounds/wav/sound.wav", UriKind.Relative)).Stream);
Sound.Play();

Zum Looping ...

SoundEffectInstance Sound = SoundEffect.FromStream(Application.GetResourceStream(new Uri("Assets/Sounds/wav/sound.wav", UriKind.Relative)).Stream).CreateInstance();
Sound.IsLooped = true;
Sound.Play();

Hinweis: Die Dateien müssen im Format ".wav" (PCM, 8- oder 16-Bit-Format, 8 kHz bis 48 kHz, Mono oder Stereo) sein

0
Muhammad