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:
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