Воспроизведение файла MP3 в приложении WinForm
Я разрабатываю приложение WinForm
. Я хочу играть в MP3 файл, когда пользователь нажимает кнопку.
Файл MP3 находится в файловой системе компьютера, на котором выполняется приложение.
У меня есть Googled на некоторое время, и я нашел информацию о классе System.Media.SoundPlayer
. Но я читал, что класс SoundPlayer
может использоваться только для воспроизведения файлов в формате .wav.
Какие классы можно использовать для воспроизведения файлов в формате .mp3?
Любая помощь будет принята с благодарностью.
Ответы
Ответ 1
В приведенной ниже ссылке дается очень хороший урок о воспроизведении mp3 файлов из формы Windows с помощью С#:
http://www.daniweb.com/software-development/csharp/threads/292695/playing-mp3-in-c
Эта ссылка приведет вас к теме, которая содержит много информации о том, как играть в mp3-песню, используя формы Windows. Он также содержит много других проектов, пытаясь добиться того же:
http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/3dbfb9a3-4e14-41d1-afbb-1790420706fe
Например, используйте этот код для .mp3:
WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer();
wplayer.URL = "My MP3 file.mp3";
wplayer.Controls.Play();
Затем добавьте только wplayer.Controls.Play(); в событии Button_Click.
Например, используйте этот код для .wav:
System.Media.SoundPlayer player = new System.Media.SoundPlayer();
player.SoundLocation = "Sound.wav";
player.Play();
Поместите плеер .Play(); в событии Button_Click, и он будет работать.
Ответ 2
1) Самый простой способ - использовать WMPLib
WMPLib.WindowsMediaPlayer Player;
private void PlayFile(String url)
{
Player = new WMPLib.WindowsMediaPlayer();
Player.PlayStateChange += Player_PlayStateChange;
Player.URL = url;
Player.controls.play();
}
private void Player_PlayStateChange(int NewState)
{
if ((WMPLib.WMPPlayState)NewState == WMPLib.WMPPlayState.wmppsStopped)
{
//Actions on stop
}
}
2) В качестве альтернативы вы можете использовать библиотеку с открытым исходным кодом NAudio. Он может воспроизводить mp3 файлы с использованием разных методов и фактически предлагает гораздо больше, чем просто воспроизведение файла.
Это так же просто, как
using NAudio;
using NAudio.Wave;
IWavePlayer waveOutDevice = new WaveOut();
AudioFileReader audioFileReader = new AudioFileReader("Hadouken! - Ugly.mp3");
waveOutDevice.Init(audioFileReader);
waveOutDevice.Play();
Не забывайте утилизировать после остановки
waveOutDevice.Stop();
audioFileReader.Dispose();
waveOutDevice.Dispose();
Ответ 3
- сначала перейдите к свойствам вашего проекта.
- нажмите, чтобы добавить ссылки
-
добавить библиотеку под COM-объектом для оконного медиаплеера
затем введите код, в котором вы хотите
Источник:
WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer();
wplayer.URL = @"C:\Users\Adil M\Documents\Visual Studio 2012\adil.mp3";
wplayer.controls.play();
Ответ 4
Вы можете использовать API mciSendString
для воспроизведения файлов MP3 или WAV:
[DllImport("winmm.dll")]
public static extern uint mciSendString(
string lpstrCommand,
StringBuilder lpstrReturnString,
int uReturnLength,
IntPtr hWndCallback
);
mciSendString(@"close temp_alias", null, 0, IntPtr.Zero);
mciSendString(@"open ""music.mp3"" alias temp_alias", null, 0, IntPtr.Zero);
mciSendString("play temp_alias repeat", null, 0, IntPtr.Zero);
Ответ 5
Вы можете сделать это, используя старые функции DirectShow.
Этот ответ учит вас, как создать QuartzTypeLib.dll
:
Запустите инструмент tlbimp (в вашем случае путь будет другим):
Запустите TlbImp.exe %windir%\system32\quartz.dll /out:QuartzTypeLib.dll
В качестве альтернативы, этот проект содержит библиотеку interop.QuartzTypeLib.dll
, которая в основном аналогична шагам 1. и 2.. библиотека:
Добавьте сгенерированный QuartzTypeLib.dll в качестве COM-ссылки на ваш проект (щелкните правой кнопкой мыши на имени проекта в "Обозревателе решений", затем выберите пункт меню "Добавить" и затем "Ссылка")
В вашем проекте разверните "Ссылки", найдите ссылку QuartzTypeLib. Щелкните правой кнопкой мыши по нему и выберите свойства, и измените "Вставить типы взаимодействия" на false. (В противном случае вы не сможете использовать класс FilgraphManager в своем проекте (и, возможно, несколько других)).
В настройках проекта на вкладке "Сборка" мне пришлось отключить 32-битный флаг "Предпочитать", в противном случае я получил бы это исключение: System.Runtime.InteropServices.COMException: Exception from HRESULT: 0x80040266
Используйте этот класс для воспроизведения вашего любимого файла MP3 :
using QuartzTypeLib;
public sealed class DirectShowPlayer
{
private FilgraphManager FilterGraph;
public void Play(string path)
{
FilgraphManager = new FilgraphManager();
FilterGraph.RenderFile(path);
FilterGraph.Run();
}
public void Stop()
{
FilterGraph?.Stop();
}
}
PS: TlbImp.exe
можно найти здесь:
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin"
или в
"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools"
Ответ 6
Рефакторинг:
new WindowsMediaPlayer() { URL = "MyMusic.mp3" }.controls.play();