我需要播放mp3文件。我想使用winmm.dll(Windows 7)
class Program
{
[DllImport("winmm.dll")]
private static extern long mciSendString(string Cmd, StringBuilder StrReturn, int ReturnLength, IntPtr HwndCallback);
static void Main(string[] args)
{
string FileName = @"F:\MUSIC\ROCK.mp3";
string CommandString = "open " + "\"" + FileName + "\"" + " type mpegvideo alias Mp3File";
mciSendString(CommandString, null, 0, IntPtr.Zero);
CommandString = "play Mp3File";
mciSendString(CommandString, null, 0, IntPtr.Zero);
Console.ReadKey();
}
}
但是当我运行我的程序时,什么都没发生。 哪里出错?
答案 0 :(得分:3)
接受的答案不适用于包含空格的文件路径。正确的方法是使用您在open命令中设置的别名:
string FileName = @"F:\MUSIC\ROCK.mp3";
mciSendString("open \"" + FileName + "\" type mpegvideo alias thisIsMyTag", null, 0, IntPtr.Zero);
mciSendString("play thisIsMyTag from 0", null, 0, IntPtr.Zero);
答案 1 :(得分:-1)
您的命令字符串似乎有不正确的类型。
您正在传递type mpegvideo
,但该文件不是视频文件。
音频的正确类型为{。1}用于* .wav文件,type waveaudio
用于* .mid文件,type sequencer
用于RedBook CD。我没有看到任何方式与MCI播放MP3。您可以尝试完全退出type cdaudio
子句,然后MCI将尝试检测它。
此外,您应该捕获type
返回的错误代码,它可能会为您提供更多信息。
答案 2 :(得分:-1)
string FileName = @"F:\MUSIC\ROCK.mp3";
mciSendString("open \"" + FileName + "\" type mpegvideo alias MediaFile", null, 0, IntPtr.Zero);
mciSendString("play " + FileName + " from 0", null, 0, IntPtr.Zero);
它正常工作。
答案 3 :(得分:-2)
<强>这里,强>
class Program
{
public string _command;
public bool isOpen;
[DllImport("winmm.dll")]
public static extern long mciSendString(string strCommand,StringBuilder strReturn,int iReturnLength, IntPtr hwndCallback);
static void Main(string[] args)
{
string FileName = @"F:\MUSIC\ROCK.mp3";
string _command = "open \"" + sFileName + "\" type mpegvideo alias MediaFile";
mciSendString(_command, null, 0, IntPtr.Zero);
isOpen = true;
if(isOpen)
{
_command = "play MediaFile";
if (loop)
_command += " REPEAT";
mciSendString(_command, null, 0, IntPtr.Zero);
}
/*For Close the audio
_command = "close MediaFile";
mciSendString(_command, null, 0, IntPtr.Zero);
isOpen = false; */
}
}
CommandString应该是“播放Mediafile”而不是“播放Mp3file”希望它会有所帮助.. =]