Как воспроизвести файл .mp3 из ресурсов на С#?

Я поместил music.mp3 в ресурсы, а затем добавил Windows Media Player в ссылки. Я написал этот код:

WindowsMediaPlayer wmp = new WindowsMediaPlayer();
            wmp.URL = "music.mp3";
            wmp.controls.play();

Это не работает. Как я могу воспроизвести файл .mp3 из ресурсов?


person carck3r    schedule 26.07.2010    source источник


Ответы (3)


Я это сделал:

WindowsMediaPlayer wmp = new WindowsMediaPlayer();
        Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("PostGen.Resources.Kalimba.mp3");
        using (Stream output = new FileStream ("C:\\temp.mp3", FileMode.Create))
        {
            byte[] buffer = new byte[32*1024];
            int read;

            while ( (read= stream.Read(buffer, 0, buffer.Length)) > 0)
            {
                output.Write(buffer, 0, read);
            }
        }
        wmp.URL = "C:\\temp.mp3";
        wmp.controls.play();

Мы должны удалить этот временный файл:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        File.Delete("C:\\temp.mp3");
    }
person carck3r    schedule 26.07.2010
comment
Создание такого временного файла не следует считать допустимым решением. Метод MediaPlayer.Play, к лучшему или к худшему (я бы сказал, к худшему), не принимает поток в качестве входных данных. Вам гораздо лучше развернуть MP3 с вашим exe и передать местоположение файла этой функции. - person Seanba; 29.07.2016

Я обернул библиотеку декодера mp3 и сделал ее доступной для разработчиков .net. Вы можете найти это здесь:

http://sourceforge.net/projects/mpg123net/

Включены примеры для преобразования файла mp3 в формат PCM и чтения тегов ID3.

Прочтите свой ресурс, преобразуйте его в формат PCM и выведите в класс waveOut, который доступен как компонент взаимодействия .NET. Нет необходимости создавать временные файлы.

Классы waveOut также доступны на sourceforge:

http://windowsmedianet.sourceforge.net/

person Daniel Mošmondor    schedule 24.08.2010

Или Тюр это;

        var file = $"{Path.GetTempPath()}temp.mp3";
            if (!File.Exists(file))
            {
                using (Stream output = new FileStream(file, FileMode.Create))
                {
                    output.Write(Properties.Resources.Kalimba, 0, Properties.Resources.Kalimba.Length);
                }
            }
            var wmp = new WindowsMediaPlayer { URL = file };
            wmp.controls.play();
person Valeh Mikayilzadeh    schedule 28.07.2017