该MP3文件位于执行应用程序的计算机的文件系统中。 我已经谷歌搜寻了一段时间,并找到了关于System.Media.SoundPlayer类的信息。 但我已经读到,SoundPlayer类只能用于播放.wav格式的文件。
哪些类可以用来播放.mp3格式的文件?
非常感谢您的帮助。
http://www.daniweb.com/software-development/csharp/threads/292695/playing-mp3-in-c
这个链接会带您进入一个主题,其中包含有关如何使用Windows表单播放mp3歌曲的大量信息。它还包含了许多其他项目,试图实现相同的目标:
例如,对于 .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();
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();
在“窗口媒体播放器”的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-bit标志,否则我会收到此异常: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();
}
}
注意: 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();