C#调用mciSendString播放MP3文件,大家看看这样有啥不对的,我老是播放不出来

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#调用mciSendString播放MP3文件,大家看看这样有啥不对的,我老是播放不出来相关的知识,希望对你有一定的参考价值。

这个是我写的一个播放的类

public class MusicPlayer

[DllImport("winmm.dll")]
private static extern int mciSendString(string command, StringBuilder sb, int size, IntPtr callBack);//extern代表是由外部文件读取
public static bool playing=false;
public static void Play(string flyName)

string cmd = string.Format("Open 0 alias music", flyName);
mciSendString(cmd, null, 0, IntPtr.Zero);
mciSendString("Play music", null, 0, IntPtr.Zero);
playing=true;

这里是调用
protected override void OnLoad(EventArgs )



MusicPlayer.Play("Not Afraid.MP3");



然后这首歌曲复制成文件路径是这样的
"C:\Users\HHD\Documents\Visual Studio 2010\Projects\MineGame\MineGame\Not Afraid.mp3"
这个音乐文件和Form窗体,还有这个类在一个文件夹下,我觉得调用什么的都没问题但是却无法成功也不报错,就是不出声

参考技术A 文件调用错误追问

麻烦说详细点嘛,我可以加分的!

参考技术B 1 参考技术C 任务 参考技术D 完整路径 指定本回答被提问者采纳

C#调用mciSendString获取歌曲时长没反应

打开时我用了:
mciSendString("open " + filepath + " type MPEGVIDEO Alias song", null, 0, 0); //打开

播放时我用了:
mciSendString("play song", null, 0, 0); //播放

获取时我用了:
mciSendString("status song length", durLength, 255, 0);
获取的我放在了Timer里面,总是获取不到当前时间,歌曲在正常播放。
具体可以加QQ:277079270,正好交些会C#的朋友。

参考技术A
编辑词条mciSendString
mciSendString是用来播放多媒体文件的API指令,可以播放MPEG,AVI,WAV,MP3,等等,下面我们来介绍一
下它的使用方法:
一,打开多媒体文件。
首先在Dialog上面放一个Picture控件,MCISendString就在这个Picture控件的平面上播放多媒体文件,
设Picture控件的ID为IDC_STATIC1:
CStatic *pStatic=(CStatic*)GetDlgItem(IDC_STATIC1);HWND h=pStatic->GetSafeHwnd();
CString open1;
char buf[256];
open1.Format("open f:""mpeg""mpeg1.avi type MPEGVideo Alias movie parent %u Style %u notify", h,WS_CHILD);
mciSendString(open1.GetBuffer(open1.GetLength()),buf,sizeof(buf),NULL);
这样F盘下面的mpeg目录下的mpeg1.avi就打开了,其中的type MPEGVideo是指打开MPEG,AVI等类型,如果不加
type MPEGVideo这一句,就是打开WAV,MP3等,Alias movie定义了mpeg1.avi的别名为movie,以后可以通过操
做movie就可以操作mpeg1.avi。
二,播放多媒体文件。
上面我们已经打开了f:"mpeg"mpeg1.avi,现在我们来播放它:
mciSendString("play movie",buf,sizeof(buf),NULL);
如果想全屏播放:
mciSendString("play movie fullscreen",buf,sizeof(buf),NULL);
三,暂停播放。
mciSendString("pause movie",buf,sizeof(buf),NULL);
四,停止播放。
mciSendString("close movie",buf,sizeof(buf),NULL);
五,得到所播放文件的长度。
char sPosition[256];long lLength;
ciSendString("Status movie length", sPosition, 255,0);lLength=strtol(sPosition, NULL, 10);
其中lLength就是所播放文件的长度。
六,得到所播放文件的声音大小。
char chVolume[256];long lVolume;mciSendString("status movie volume",chVolume,255,0);lVolume=strtol(chVolume,NULL,10);其中lVolume就是所播放文件的声音大小。
七,到你指定的位置播放。
CString step1;long lPosition;
lPosition=100;
step1.Format("seek movie to %ld",lPosition);
mciSendString(step1.GetBuffer(step1.GetLength()),buf,sizeof(buf),0);
其中lPosition就是要到的播放位置,可以由你指定。
参考技术B mciSendString("status song length", durLength, 255, 0);

你用messagebox返回一下能否正确取到时间
messagebox.show(durlength);
如果是空白,证明没有取到时间,
mciSendString("status song length", durLength, 255, 0); 中对字符串的使用不对.

以上是关于C#调用mciSendString播放MP3文件,大家看看这样有啥不对的,我老是播放不出来的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法使用“等待”选项暂停/停止使用 mcisendstring 播放的 mp3 文件?

mcisendstring播放mp3

如何在 C# 中从内存流中播放 MP3?

C语言中mciSendString用法

C#调用mciSendString获取歌曲时长没反应

有没有比 mciSendString 更好的播放 Mp3 的方法?