用C#播放音频文件

时间:2010-11-11 18:28:01

标签: c# audio mp3

我需要播放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();
    }
}

但是当我运行我的程序时,什么都没发生。 哪里出错?

4 个答案:

答案 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返回的错误代码,它可能会为您提供更多信息。

MSDN Reference

答案 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”希望它会有所帮助.. =]