[英]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.