在WinForm应用程序中播放MP3文件

时间:2013-02-22 13:44:27

标签: c# .net winforms mp3

我正在开发一个WinForm应用程序。我想在用户点击按钮时播放MP3文件。

MP3文件位于执行应用程序的计算机的文件系统中 我用谷歌搜索了一段时间,我找到了有关System.Media.SoundPlayer课程的信息。但我已经读过SoundPlayer类只能用于播放.wav格式的文件。

可以使用哪些类来播放.mp3格式的文件?

非常感谢任何帮助。

6 个答案:

答案 0 :(得分:39)

下面的链接提供了一个非常好的教程,关于使用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();

把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)

  1. 首先转到项目的属性
  2. 点击添加参考
  3. 在窗口媒体播放器的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

  1. 运行tlbimp工具(您的情况下路径会有所不同):

  2. 运行TlbImp.exe %windir%\system32\quartz.dll /out:QuartzTypeLib.dll

或者,this project包含库interop.QuartzTypeLib.dll,它与步骤 1。 2。基本相同。如何使用该库:

  1. 将生成的QuartzTypeLib.dll作为COM引用添加到您的项目(在“解决方案资源管理器”中,在项目名称上单击鼠标右键,然后选择“添加”菜单项,然后选择“参考”)

  2. 在您的项目中,展开“参考”,找到QuartzTypeLib参考。右键单击它并选择属性,然后将“嵌入互操作类型”更改为false。 (否则,您将无法在项目中(可能还有其他几个项目中)使用FilgraphManager类。)

  3. 在“项目设置”的“构建”选项卡中,我必须禁用“首选32位”标志,否则会出现以下异常:System.Runtime.InteropServices.COMException: Exception from HRESULT: 0x80040266

  4. 使用此类播放您喜欢的 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();