前缀为mci(Media Control Iterface):
//头文件mmsystem.h或windows.h
//需要添加静态库 (lib,"winmm.lib")
//支持MPEG,AVI,WAV,MP3,MID格式
int mciSendString(
LPCTSTR lpszCommand,//指向以null结尾的命令字符串:“命令 设备参数”
LPCTSTR lpszReturnString,//指向接收返回信息的缓冲区,为NULL时不返回信息
UINT cchReturn,//上述缓冲区大小
HANDLE hwndCallback//在命令串中含通知时,它指定一个回调窗口的句柄,一般为NULL
)
//失败,返回错误代码(非0值)
mciSendString()的参数
第一个参数常有的命令:
1、打开(open),格式:Open设备名【type设备型式】【alias别名】。
例如:
mciSendString(L"open musicName.wav type MPEGVideo alias musuc parent %u Style %u notify",NULL,0,NULL);
其中:
open 操作命令
mName 全路径文件名
type MPEGVideo 是指打开MPEG,AVI等类型,如果不加这一句,就是打开WAV,MP3等
Alias movie 定义了该操作的别名为movie,后续操作只要指明别名即可
parent %u 源
Style %u 样式
notify 通知
常有操作命令如下:
(1)open 打开 格式:Open设备名【type设备型式】【alias别名】。
(2)play 播放 格式:Play 设备名 [from 起点][to 终点]。起点和终点都是毫秒计算。
mciSendString (L"play movie", 0, 0, 0)
mciSendString (L"play movie fullscreen", 0, 0, 0 ) '全屏播放
(3)pause 停止 格式:mciSendString (L"pause movie", 0&, 0, 0)
(4)继续(Resume):
mciSendString “resume movie”, 0&, 0, 0
注意:暂停后发出Play命令也可以继续
(5)停止(Stop):
mciSendString “stop movie”, 0&, 0, 0
(6)关闭(Colse):
mciSendString “close movie”, 0&, 0, 0
(7)前进到下一个位置:
mciSendString “step movie”, 0&, 0, 0
(8)后退到上一个位置:
mciSendString “step movie reverse”, 0&, 0, 0
(9)前进或后退 N 個位置(其中 N<0 即表示后退)
mciSendString "step movie by " & str(N), 0&, 0, 0
(10)获取当前播放位置:
Dim ST As String64
mciSendString “status movie position”, st, len(st), 0
(11) 获取媒体的总长度:
mciSendString “status movie length”, st, len(st), 0
l=val(st) 'l就是所播放文件的长度
(12)获取播放当前状态:
Dim ST As String64
mciSendString “status movie mode”, ST, Len(ST), 0
If Left(ST, 7) = “stopped” Then (处理代码) '播放完毕
(13)循环播放:
mciSendString “play movie repeat”, 0&, 0, 0
(14)进度条相关
主要还是mciSendString得合理运用
wsprintf(cmd,TEXT(“play %s from %d”),szShortPath,iSchedule*1000);
mciSendString(cmd,NULL,0,0);
这个是实现快进的,其中szShortPath是歌曲的短路径,iSchedule是在进度条上的位置,单位是秒,当你鼠标点击进度条,可以得到进度条当前位置,然后用上面的函数从当前位置继续播放就可以了
第一参数表格:
设备类型:
#include<windows.h>
#include<iostream>
#include<conio.h>
#pragma comment(lib,"winmm.lib")
using namespace std;
char ch;
int main(int argc,char*argv[])
{
int num = 0;
TCHAR pos[1024] = { 0 };
TCHAR err[1024] = { 0 };
TCHAR name[] = TEXT("music");
TCHAR pname[1024] = { 0 };
wsprintf(pname, L"play %s from %d", name, 70*1000);
//打开一个音乐文件
cout<<mciSendString(L"open w.wav alias music", NULL, 0, NULL);
//播放音乐 从第10秒开始播放
cout << mciSendString(pname, NULL, 0, NULL);
while (1)
{
获取当前播放位置
//mciSendString(L"status music position", pos, 1024, 0);
//for each (TCHAR var in pos)
//{
// cout << var;
//}
//cout << endl;
ch = getch();
//暂停播放音乐
if (ch == 'q')
{
num=mciSendString(L"pause music", NULL, 0, NULL);
}
//继续播放
if (ch == 'k')
{
num = mciSendString(L"resume music", NULL, 0, NULL);
}
//停止播放 相关于不再读取文件
if (ch == 's')
{
num = mciSendString(L"stop music", NULL, 0, NULL);
}
//关闭播放
if (ch == 'c')
{
num = mciSendString(L"close music", NULL, 0, NULL);
}
前进一个位置
//if (ch == '+')
//{
// num = mciSendString(L"step music", NULL, 0, NULL);
//}
后退一个位置
//if (ch == '-')
//{
// num = mciSendString(L"step music reverse", NULL, 0, NULL);
//}
//向前n个位置 n>表示向前 n>0表示向后
if (ch == '+')
{
cout<<mciSendString(L"step music by "+100, NULL, 0, NULL);
}
//mciGetErrorString(num, err, 1024);
//cout << err;
}
system("pause");
return 0;
}
//快进功能还没解决