2009-08-16 17 views
6

Estoy intentando escribir un programa SAMPLER, donde cada tecla tiene un sonido diferente (un archivo WAV).Reproducción de un archivo .WAV en .NET

¿Puede alguien explicarme o darme un enlace a una explicación donde puedo aprender a reproducir los archivos WAV?

Si es importante, estoy trabajando con Microsoft Visual C# y el uso de WinForms.

+0

Poco relacionado: * http://stackoverflow.com/questions/4429513/play-wav-file-async-multiple-times-with-net * http://stackoverflow.com/questions/1087763/play-pcm-data-in- net-framework-2 – Pat

Respuesta

21
SoundPlayer simpleSound = new SoundPlayer(strAudioFilePath); 
simpleSound.Play(); 
+0

puede pausar y reanudar funciones que se hacen para ello? – Rick2047

+0

No sé ser honesto, pero échale un vistazo a este jugador de bajo nivel ... http://www.codeproject.com/KB/audio-video/cswavplay.aspx, y si estás usando .net 3.5, puede usar MediaElement que admite pausa y reanudar. –

+2

usando System.Media; –

4

uso HOQF, que es simplemente la mejor biblioteca de sonido en todo el universo

afortunadamente, parecen proporcionar un C# envoltorio para la mejor API de audio que podría tratar de imaginar, y no se le tiene que cambiar una sola línea de código para hacer que su código funcione en playstation o xbox o lo que sea los desarrolladores son bastante reactivos (usted informa un error por la noche, se va a la cama, y ​​la versión corregida está disponible cuando se despierta) documentación es legible, comprensible y GRANDE muchos ejemplos en el SDK, lo que hace inútil proporcionar un tutorial ya que la documentación es bastante m uch perfecto

jugar un wav con FMOD es solo 5 líneas de código, y con solo 4 líneas más puede aplicar efectos mientras enlaza el balance y el volumen de la reproducción a un motor 3d (para manejar intersecciones entre el punto de conciencia y la fuente de audio, 4 líneas ....

si desea (use C# para) hacer sonido, -> FMOD.

+0

Encontré este envoltorio útil http://stackoverflow.com/a/8470050/74585 –

1
SoundPlayer simpleSound = new SoundPlayer(strAudioFilePath); 
simpleSound.PlaySync(); 

porque el sonido se reproduce de forma asincrónica.

+1

esto es más bien un comentario a la respuesta aceptada. – jgauffin

0

Esta solución basada en consola utiliza LINQPad (por lo tanto, las llamadas al método de extensión .Dump()) y NAudio (notará que utilizo el espacio de nombre completo en un par de clases solo para aclarar). Para configurarlo correctamente, puede descargar el fragmento desde http://share.linqpad.net/d7tli8.linq (agregué NAudio desde NuGet).

Para ejecutar, abra en linqpad, establezca el valor de wavFilePath en una ruta de archivo de onda local, y presione F5. Play es asíncrono, por lo que hacemos un Console.ReadLine para esperar hasta que esté hecho.

string wavFilePath = @"TODO"; 
var reader = new NAudio.Wave.AudioFileReader(wavFilePath); 
reader.Dump("AudioFileReader"); 
var sampleProvider = reader.ToSampleProvider().Dump("sample provider"); 

NAudio.Wave.WaveOut.DeviceCount.Dump("num waveout on comp"); 
var outputDeviceInfo = WaveOut.GetCapabilities(0).Dump(); 
var outputter = new WaveOut() { 
    DesiredLatency = 5000 //arbitrary but <1k is choppy and >1e5 errors 
    , NumberOfBuffers = 1 // 1,2,4 all work... 
    , DeviceNumber = 0 
}.Dump(); 
outputter.Init(reader); 
outputter.Play(); // async 
Console.Read(); 
outputter.Stop(); 

Y esto es lo que la salida de toda llama al .dump se parece en mi máquina, en caso de que se esté preguntando:

audiofilereader contents

sampleprovider and waveout info

Cuestiones relacionadas