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

本文关键字:MP3 文件 播放 WinForm 应用程序 | 更新日期: 2023-09-27 18:00:28

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

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

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

任何帮助都将不胜感激。

在WinForm应用程序中播放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();
  1. 首先转到项目的属性
  2. 单击"添加引用"
  3. 在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:

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

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

或者,该项目包含库interop.QuartzTypeLib.dll,它与步骤1.2.基本相同。以下步骤教授如何使用该库:

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

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

  3. 在"项目设置"中的"构建"选项卡中,我必须禁用Prefer 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"

重构:

new WindowsMediaPlayer() { URL = "MyMusic.mp3" }.controls.play();