visual valido sólo studio soundplayer sonidos sonido reproducir reproducción poner onda con compatible como boton archivos archivo c# winforms audio playback simultaneous

c# - valido - reproducir sonidos en c



Toca dos sonidos al mismo tiempo (5)

¿Hay alguna manera de tocar dos sonidos al mismo tiempo?

Sé que SoundPlayer no puede hacer esto. No puedo usar SoundEffect porque creo que es solo parte de XNA.

Los dos sonidos requeridos se invocarán en momentos desconocidos y aleatorios. El sonido debe controlarse después de su reproducción. es decir, el sonido debe poder detenerse antes de que termine de reproducirse.


De http://alvas.net/alvas.audio,samples.aspx#sample7 y 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();

o mezclar datos de audio antes de jugar Cómo mezclar para mezclar dos archivos de audio ...

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(); }


El objeto "MediaPlayer" no te permitirá reproducir dos sonidos a la vez, incluso si creas dos instancias. Tendrá que traer la API nativa de windows "mciSendString".

[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); }


Referencia PresentationCore y WindowsBase y prueba esto ...

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();

EDITAR Recibí un voto negativo probablemente porque a primera vista parece que reproducirá el segundo sonido después de que termine el primero. No lo hace, son reproducidas por Windows de forma asincrónica. El sueño está allí, así que si pruebas este código textualmente, puedes escuchar los sonidos juntos, no se notará sin la demora ya que son el mismo sonido.

Este código demuestra los dos sonidos que se reproducen en hilos separados uno encima del otro, lo cual es un tanto inútil ya que la reproducción no bloquea de todos modos

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/en-us/library/system.windows.media.mediaplayer.stop.aspx La clase también tiene el control que necesita para detener la reproducción


Solución: Hola, estaba desarrollando una aplicación WP8 y necesitaba varios sonidos para jugar simultáneamente, las soluciones mencionadas anteriormente no me funcionaron, así que utilicé el framwork XNA. aqui esta el link

http://msdn.microsoft.com/en-us/library/ff842408.aspx

y luego reproduce tus archivos de sonido como este ...

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

Para bucles ...

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

Nota: los archivos deben estar en formato ".wav" (PCM, 8 o 16 bits, 8KHz a 48KHz, mono o estéreo)