C # Воспроизведение аудиофайлов MPEG

Я ищу способ воспроизводить аудиофайлы mpeg на C #. С mp3 дело просто:

    System.Windows.Media.MediaPlayer player = new System.Windows.Media.MediaPlayer();
    player.Open(new System.Uri(File));
    player.Play();

Я ищу способ воспроизвести с такой же простотой аудиофайлы m4a или webm. На данный момент я в отчаянии и пытаюсь найти обходной путь:

        String path = Path.GetFullPath("./x.m4a");
        Process process = new Process();
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;
        startInfo.FileName = "ffplay.exe";
        startInfo.Arguments = "-vn -showmode 0 " + path;
        process.StartInfo = startInfo;
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardOutput = true;
        process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        process.StartInfo.CreateNoWindow = true;
        process.Start();

На данный момент я могу воспроизвести x.m4a файл, но это не останавливается, когда я выхожу из файла. Также я боюсь, что у меня не будет особого контроля над движением трека. Есть ли другой метод (например, с пакетом NuGet) для воспроизведения файлов MPEG?


person Ch3shire    schedule 14.10.2017    source источник


Ответы (1)


Хорошо, я нашел способ. Очевидно, библиотека NAudio выполняет свою работу, но вам необходимо установить кодеки для слоя MPEG4. После этого все довольно просто:

NAudio.Wave.WaveOut wave = new NAudio.Wave.WaveOut();
wave.Init(fileName);
wave.Play();

РЕДАКТИРОВАТЬ: По иронии судьбы, месяц спустя я нашел свой собственный ответ на ту же проблему. Для более старых версий NAudio (например, для .NET 4.0) вам понадобится небольшой обходной путь:

        var wave = new WaveOut();
        var x = new AudioFileReader(filename);
        wave.Init(x);
        wave.Play();

        while(true)System.Threading.Thread.Sleep(100);

Последний цикл добавлен просто потому, что системе нужно дождаться завершения игры. Не стесняйтесь отредактировать это.

person Ch3shire    schedule 17.10.2017