簡體   English   中英

如何在C#中播放mp3文件?

[英]How to play mp3 files in C#?

我正在嘗試使用本指南在C#中播放MP3文件: http//www.crowsprogramming.com/archives/58

我正在列出所有內容,但我仍然無法在我的C#程序中播放任何音樂。 誰能告訴我我做錯了什么?

 static void Main(string[] args)
    {
        WMPLib.WindowsMediaPlayer a = new WMPLib.WindowsMediaPlayer();
        a.URL = "song.mp3";
        a.controls.play();
    }

音樂文件“Song”位於bin文件夾中。

我沒有使用Windows Media Player COM對象,但這里是一個替代方法的鏈接 (我不是作者。)它使用pinvoke調用winmm.dll來播放MP3。 我在Windows Server 2008上測試了它,它運行得很好。

這是一個使用鏈接代碼的示例類。

using System.Runtime.InteropServices;

public class MP3Player
{
      private string _command;
      private bool isOpen;
      [DllImport("winmm.dll")]

      private static extern long mciSendString(string strCommand,StringBuilder strReturn,int iReturnLength, IntPtr hwndCallback);

      public void Close()
      {
         _command = "close MediaFile";
         mciSendString(_command, null, 0, IntPtr.Zero);
         isOpen = false;
      }

      public void Open(string sFileName)
      {
         _command = "open \"" + sFileName + "\" type mpegvideo alias MediaFile";
         mciSendString(_command, null, 0, IntPtr.Zero);
         isOpen = true;
      }

      public void Play(bool loop)
      {
         if(isOpen)
         {
            _command = "play MediaFile";
            if (loop)
             _command += " REPEAT";
            mciSendString(_command, null, 0, IntPtr.Zero);
         }
      }
}

您需要做的就是添加對Window Media Player COM組件的引用。 您需要添加對文件wmp.dll的引用,您可以在System32目錄中找到該文件。

我不確定它是否仍然相關但是當我嘗試它時,它只在代碼不在主線程中運行時才起作用,即this.InvokeRequired == false

所以,我會建議你嘗試類似的東西:

ThreadPool.QueueUserWorkItem(
             delegate(object param)
             {
                 WMPLib.WindowsMediaPlayer player = new WMPLib.WindowsMediaPlayer();
                 player.URL = "song.mp3";                     
             });

由於播放器設置為自動播放,因此不需要player.controls.play()

我不確定為什么主線程無法正常播放但我希望這會有所幫助。

您可以嘗試從“主”事件中刪除您的代碼並將其放入“form_load”或“button_click”或類似的東西。 導致它的外觀,它應該工作。 也像Robert Seder建議的那樣,你可以嘗試編寫mp3文件的整個路徑。

我有同樣的問題,我通過將播放器設置為靜態來解決,例如:

public class MiClass(){
static WMPLib.WindowsMediaPlayer wplayer;
private void PlayMusic()
    {
        wplayer = new WMPLib.WindowsMediaPlayer();
        wplayer.URL = "c:\shoryuken.mp3";
        wplayer.controls.play();
    }
}

我會嘗試一些事情:

1)完全限定.mp3文件的路徑,以防萬一。 2)嘗試a.Ctlcontrols.play(); 代替。

此外,我幾乎可以肯定,您正在嘗試加載Windows(ActiveX控件)。 它可能需要一個Windows上下文才能加載和工作。 我確定還有另一種方法可以播放.mp3,因為我之前使用過它,但我找不到代碼。 它可能是DirectX SDK的一部分。 希望有所幫助。

簡單的方法,需要以下代碼:1。在第一個添加System.Runtime.InteropServices namespase。 2.在班級創建:

 static class Program
{
        [DllImport("winmm.dll")]
        private static extern long mciSendString(string strCommand,
                                                 StringBuilder strReturn,
                                                 int iReturnLength,
                                                 IntPtr hwndCallback);

        //some code

}

3.在main方法中添加屬性:

 [STAThread]
 static void Main(string[] args)
 {//some code}

然后創建播放器方法,所以:

public void player()
{
               mciSendString("open \"" + "mp3 file path" + "\" type mpegvideo alias MediaFile", null, 0, IntPtr.Zero);
        mciSendString("play MediaFile", null, 0, IntPtr.Zero);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM