[C#] Пишем музыкальный воспроизводитель музыки в формате .wav

A

Antlion

Пользователь
Регистрация
24 Сен 2018
Сообщения
15
Реакции
2
Баллы
75
В этом уроке я покажу как можно легко и просто воспроизвести музыкальный файл программно.
Конечно лучше всего использовать библиотеку но мы сделает простой велосипед )

Для начала подключаем зависимости
C#:
using Properties;
using System;
using System.IO;
using System.Media;
using System.Threading;
Закинем в ресурсы волновой файл формата .wav

P.S: Есть много конвертеров которые конвертируют любые форматы в .wav
На примере можно взять : и конвертировать таким скриптом:
ffmpeg - i вашфайл.mp3 вашфайл.wav

P.P.S: Есть один минус из этого что файл на выходе будет прилично весить под 50 - 100 МБ.

Создадим класс MusicEdition.cs

Вопрос
:
Как это работает?

Ответ:
Сначала мы проверяем файл на существование, если программа его находит что идём дальше, если нет то пишем уведомление пользователю что файл не найден.

После загружаем файл из нужного нам пути:
( Предварительно нужно обвернуть функцию SoundPlayer в using - чтобы освободить ресурсы проигрывателя )
Внутри функции мы загружаем музыкальный файл, после делаем проверку что файл был загружен успешно, и начинаем проигрывание )

С загрузкой из ресурсов те же самые манипуляции =)

C#:
namespace MusicPlay
{
    using Properties;
    using System;
    using System.IO;
    using System.Media;
    using System.Threading;

    public class MusicEdition
    {
        public static void PlayFrom(string path_wav)
        {
            if (File.Exists(path_wav))
            {
                try
                {
                    Console.WriteLine("Файл найден... Загружаем...");
                    using (var player = new SoundPlayer())
                    {
                        player.SoundLocation = path_wav;
                        player.Load();
                        if (player.IsLoadCompleted)
                        {
                            Console.WriteLine("Загрузка завершена.");
                            Thread.Sleep(1000);
                            Console.WriteLine("Запускаем проигрывание.");
                            player.Play();
                        }
                        else
                        {
                            Console.WriteLine("Загрузка не успешна");
                        }
                    }
                }
                catch (InvalidOperationException ioe) { Console.WriteLine(ioe.Message); }
            }
            else
            {
                Console.WriteLine("Музыкальный файл не обнаружен.");
            }
        }

        public static void PlayFromResource()
        {
            using (UnmanagedMemoryStream str = Resources.Music) // Resources.Music - ваш музыкальный файл.
            {
                try
                {
                    using (var snd = new SoundPlayer(str))
                    {
                        snd.Load();
                        if (snd.IsLoadCompleted)
                        {
                            Console.WriteLine("Загрузка завершена.");
                            Thread.Sleep(1000);
                            Console.WriteLine("Запускаем проигрывание.");
                            snd.Play();
                        }
                        else
                        {
                            Console.WriteLine("Загрузка не успешна");
                        }
                    }
                }
                catch (InvalidOperationException ioe) { Console.WriteLine(ioe.Message); }
            }
        }
    }
}
Вызывается просто:

C#:
namespace MusicPlay
{
    using System;

    internal static class Program
    {
        private static readonly string Desktop = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);

        [STAThread]
        public static void Main()
        {
            //MusicEdition.PlayFrom(Path.Combine(Desktop, "1.wav"));
            MusicEdition.PlayFromResource();
            Console.ReadKey();
        }
    }
}
На выходе всё прекрасно играется =)
 
Последнее редактирование:
U

Uniel

Пользователь
Регистрация
12 Окт 2017
Сообщения
11
Реакции
4
Баллы
45
А зачем ты такой велосипед собрал?)