Как играть в MP3-файл с помощью NAudio
WaveStream waveStream = new Mp3FileReader(mp3FileToPlay);
var waveOut = new WaveOut();
waveOut.Init(waveStream);
waveOut.Play();
Это вызывает исключение:
WaveBadFormat вызов waveOutOpen
тип кодировки "MpegLayer3" как NAudio.
Как я могу играть в mp3-файл с NAudio?
2 ответов
попробуйте так:
class Program
{
static void Main()
{
using (var ms = File.OpenRead("test.mp3"))
using (var rdr = new Mp3FileReader(ms))
using (var wavStream = WaveFormatConversionStream.CreatePcmStream(rdr))
using (var baStream = new BlockAlignReductionStream(wavStream))
using (var waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback()))
{
waveOut.Init(baStream);
waveOut.Play();
while (waveOut.PlaybackState == PlaybackState.Playing)
{
Thread.Sleep(100);
}
}
}
}
редактировать этот код устарел (относится к NAudio 1.3). Не рекомендуется для более новых версий NAudio. См. альтернативный ответ.
для пользователей NAudio 1.6 и выше, пожалуйста, не используйте код в исходном принятом ответе. Вам не нужно добавлять WaveFormatConversionStream
или BlockAlignReductionStream
, и вы должны избегать использования WaveOut
с обратными вызовами функций (WaveOutEvent
предпочтительнее, если вы не находитесь в приложении WinForms или WPF). Кроме того, если вы не хотите блокировать воспроизведение, вы обычно не будете спать до окончания звука. Просто подпишитесь на WaveOut
' s PlaybackStopped
событие.
следующий код будет работать просто отлично, чтобы играть в MP3 в NAudio:
var reader = new Mp3FileReader("test.mp3");
var waveOut = new WaveOut(); // or WaveOutEvent()
waveOut.Init(reader);
waveOut.Play();