C/C++笔记之播放音乐的函数

前缀为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 String
64
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;
}

//快进功能还没解决

  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搬砖的码蚁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值