在WinForm应用程序中播放MP3文件
本文关键字:MP3 文件 播放 WinForm 应用程序 | 更新日期: 2023-09-27 18:00:28
我正在开发一个WinForm
应用程序。我想在用户单击按钮时播放MP3文件。
MP3文件位于执行应用程序的计算机的文件系统中
我在谷歌上搜索了一段时间,发现了关于System.Media.SoundPlayer
类的信息。但我读到SoundPlayer
类只能用于播放.wav格式的文件。
哪些类可以用来播放.mp3格式的文件?
任何帮助都将不胜感激。
下面的链接提供了一个非常好的教程,关于用c#:从windows窗体播放mp3文件
http://www.daniweb.com/software-development/csharp/threads/292695/playing-mp3-in-c
此链接将引导您进入一个主题,其中包含许多关于如何使用Windows窗体播放mp3歌曲的信息。它还包含了许多其他项目,试图实现同样的目标:
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();
放球员。播放();在Button_Click事件中,它将工作。
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();
- 首先转到项目的属性
- 单击"添加引用"
-
在Windows媒体播放器的COM对象下添加库然后在你想要的地方键入你的代码
来源:WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer(); wplayer.URL = @"C:'Users'Adil M'Documents'Visual Studio 2012'adil.mp3"; wplayer.controls.play();
您可以使用mciSendString
API来播放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);
您可以使用旧的DirectShow功能。
这个答案教你如何创建QuartzTypeLib.dll
:
-
运行tlbimp工具(在您的情况下,路径会有所不同):
-
运行
TlbImp.exe %windir%'system32'quartz.dll /out:QuartzTypeLib.dll
或者,该项目包含库interop.QuartzTypeLib.dll
,它与步骤1.和2.基本相同。以下步骤教授如何使用该库:
-
将生成的QuartzTypeLib.dll添加为项目的COM引用(在"解决方案资源管理器"中的项目名称上单击鼠标右键,然后选择"添加"菜单项,再选择"引用")
-
在您的项目中,展开"引用",找到QuartzTypeLib引用。右键单击它并选择属性,然后将"嵌入互操作类型"更改为false。(否则,您将无法在项目中使用FilgraphManager类(可能还有其他几个))。
-
在"项目设置"中的"构建"选项卡中,我必须禁用Prefer 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"
重构:
new WindowsMediaPlayer() { URL = "MyMusic.mp3" }.controls.play();