我正在开发一个WinForm
应用程序。我想在用户点击按钮时播放MP3文件。
MP3文件位于执行应用程序的计算机的文件系统中
我用谷歌搜索了一段时间,我找到了有关System.Media.SoundPlayer
课程的信息。但我已经读过SoundPlayer
类只能用于播放.wav格式的文件。
可以使用哪些类来播放.mp3格式的文件?
非常感谢任何帮助。
答案 0 :(得分:39)
下面的链接提供了一个非常好的教程,关于使用c#:
从Windows窗体播放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();
把player.Play();在Button_Click事件中,它将工作。
答案 1 :(得分:25)
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();
答案 2 :(得分:7)
在窗口媒体播放器的COM对象下添加库 然后在您想要的地方键入您的代码
来源:
WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer();
wplayer.URL = @"C:\Users\Adil M\Documents\Visual Studio 2012\adil.mp3";
wplayer.controls.play();
答案 3 :(得分:1)
你可以使用mciSendString API来播放这样的mp3或wav文件
rotateY(Xdeg)
答案 4 :(得分:0)
您可以使用旧的DirectShow功能来做到这一点。
此answer教您如何创建QuartzTypeLib.dll
:
运行tlbimp工具(您的情况下路径会有所不同):
运行TlbImp.exe %windir%\system32\quartz.dll /out:QuartzTypeLib.dll
或者,this project包含库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"
答案 5 :(得分:-2)
重构:
new WindowsMediaPlayer() { URL = "MyMusic.mp3" }.controls.play();