mp3怎么播放
我知道playsound能播放mav文件,那mp3用什么播放啊,百度上说用mci可以实现,但是mci是什么啊,怎么用啊........ 本帖最后由 行客 于 2019-1-30 21:53 编辑使用函数前必须应该包含头文件:#include<mmsystem.h>
并导入库:#pragma comment<lib."winmm.lib">
mciSendString(TEXT("open C:/a.mp3 alias donglihuoche"),NULL,0,NULL);
mciSendString是用来播放多媒体文件的API指令。
该函数有四个参数:
第一个参数:要发送的命令字符串。对于程序员来说,可以把MCI理解为设备面板上的一排按键,通过选择不同的按键(发送不同的MCI命令)可以让设备完成各种功能,而不必关心设备内部实现。
TEXT("open C:/a.mp3 alias donglihuoche")是一个字符串,等同于"open C:/a.mp3 alias donglihuoche"(TEXT是一个宏定义,只是为了表示这是一个字符串,没有其他实质性意义)。
命令字符串:一般命令有 open、play 、close等。
open为打开命令。格式为:open device_name type device_type alias device_alias
device_name:设备名,一般使用文件名字。这里为C:/a.mp3
type device_type:设备类型,可省略。这里进行了省略
alias device_alias:设备别名,在以后操作时可以使用此名字,方便。alias是别名的意思。这里定义别名为donglihuoche,即alias donglihuoche。所以下面的play就可以使用别名donglihuoche了而不再需要使用文件路径。
第二个参数:接收返回信息的字符串,一般为NULL。这里设为NULL
第三个参数:接收返回信息字符串的大小,可设为0。这里设为0
第四个参数:回调窗口句柄,一般NULL。这里设为NULL
该函数返回值:函数执行成功返回零,否则返回错误代码
这是系统的一个库,你直接仿造别人的代码根据你的需求修改一下就行了
参考这篇:
https://blog.csdn.net/jackson35296/article/details/2479393?utm_source=blogxgwz5 BngThea 发表于 2019-1-30 08:56
这是系统的一个库,你直接仿造别人的代码根据你的需求修改一下就行了
参考这篇:
https://blog.csdn.net/ ...
{:10_266:}看不懂啊,好多函数跟结构都比知道啥意思啊{:10_266:},百度上面的乱糟糟的看不懂{:10_266:} BngThea 发表于 2019-1-30 08:56
这是系统的一个库,你直接仿造别人的代码根据你的需求修改一下就行了
参考这篇:
https://blog.csdn.net/ ...
MCI_OPEN_PARMS 这个打开设备结构是什么啊{:10_266:}mciOpen.lpstrDeviceType = "mpegvideo";这个赋值的字符串是什么啊,我百度它有四个成员怎么只赋值了两个{:10_266:},其他两个没用吗?{:10_266:}mciSendCommand函数命令消息有几种呀{:10_266:}MCI_PLAY_PARMS mciPlay这个播放用的结构是什么是,怎么赋值呀{:10_266:}{:10_266:}查百度太乱了,头都看晕了{:10_266:}求大佬指点{:10_245:}
本帖最后由 行客 于 2019-1-30 21:25 编辑
看你的帖子应该是想要命令行的。以下代码是非常简单、非常经济的在控制台下的MP3播放代码:
#include <windows.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib")
int main(int argc, char* argv[])
{
mciSendString(TEXT("open C:/a.mp3 alias donglihuoche"),NULL,0,NULL);
//mciSendString((LPCWSTR)("seek yeah to start"),0,0,0);
mciSendString(TEXT("play donglihuoche"),NULL,0,NULL);
//mciSendString((LPCWSTR)"close yeah",NULL,0,NULL);
Sleep(100000000);
return 0;
}
我刚刚进行了实际的编译并播放通过。如果有疑问,请继续跟帖。如果想要复杂的实现模式,再给你更为全面的方案。
附图:
帮助文档:
https://baike.baidu.com/item/mciSendString/2905255?fr=aladdin print(result)print(result)print(result)print(result)print(result)print(result)print(result)print(result)print(result) 5楼是控制台应用程序模式。这个是Windows应用程序的实现:
https://www.taodocs.com/p-84382723.html 行客 发表于 2019-1-30 17:27
看你的帖子应该是想要命令行的。以下代码是非常简单、非常经济的在控制台下的MP3播放代码:
不报错,但运行没声音呀 不会播放 wjp 发表于 2019-1-30 19:12
不报错,但运行没声音呀 不会播放
你的文件路径对吗?需要在C盘根目录下命名一个a.mp3文件。 C:/a.mp3 肯定是可以正常播放的,我已经测试过了。还需要注意,你的a.mp3这个文件,是不是是正常的.mp3文件,如果文件没问题,那播放就没问题 行客 发表于 2019-1-30 19:52
肯定是可以正常播放的,我已经测试过了。还需要注意,你的a.mp3这个文件,是不是是正常的.mp3文件,如果文 ...
只能在C盘吗?有什么办法放着其他盘吗 我刚实验下,好像文件名不能包含空格,有空格也不行 行客 发表于 2019-1-30 18:10
5楼是控制台应用程序模式。这个是Windows应用程序的实现:
https://www.taodocs.com/p-84382723.html
看不到,网速不好一直转圈圈{:10_266:} 行客 发表于 2019-1-30 17:27
看你的帖子应该是想要命令行的。以下代码是非常简单、非常经济的在控制台下的MP3播放代码:
大佬第一个参数能详细解释下吗,看不太懂{:10_266:} 本帖最后由 行客 于 2019-1-30 21:25 编辑
mciSendString(TEXT("open C:/a.mp3 alias donglihuoche"),NULL,0,NULL);
中的C:\a.mp3就是定义的播放的文件名,你也可以使用变量替代。
你说的第一行是指的这一行吗? 行客 发表于 2019-1-30 21:38
使用函数前必须应该包含头文件:#include
并导入库:#pragma comment
看懂了,谢谢大佬{:10_254:} 行客 发表于 2019-1-30 01:48
使用函数前必须应该包含头文件:#include
并导入库:#pragma comment
大佬能麻烦你在给我讲讲3楼我的问题吗{:10_266:} 本帖最后由 行客 于 2019-1-30 23:00 编辑
wjp 发表于 2019-1-30 22:30
大佬能麻烦你在给我讲讲3楼我的问题吗
如果你看完了上面的mciSendString的介绍,这里应该也比较好理解。如果有疑问可继续跟帖。
mciSendCommand播放mp3文件
该函数与mciSendString函数不同,该函数是基于命令消息(定义的常量)的,而mciSendString函数的命令是基于字符串的
函数原型如下:
MCIERROR mciSendCommand(
MCIDEVICEID IDDevice, //设备的ID,打开是不用此参数,一般设置为NULL。强调一下,打开命令不需要此参数。
UINT uMsg, //命令消息,如:MIC_OPEN(与上述open字符串是等价的)
DWORD fdwCommand, //额外的命令标记,如:指定 MCI_OPEN_ALIAS 则表明dwParam参数所指结构体中的lpOpen参数指向的为别名;若为MCI_OPEN_ELEMENT则表明lpOpen参数指向的为文件名
DWORD_PTR dwParam //为一结构指针,如:MCI_OPEN_PARMS(打开是所需的结构体)、MCI_PLAY_PARMS(播放是所需的结构体)、MCI_GENERIC_PARMS(结束时所需的结构体)
);
MCI_OPEN_PARMS open;//定义打开结构体变量
open.lpstrElementName = _T("res\\和兰花在一起.mp3");//填充参数
mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT,DWORD_PTR(&open));//打开
MCI_PLAY_PARMS play;//定义播放结构题变量
mciSendCommand(open.wDeviceID,MCI_PLAY,MCI_WAIT,DWORD_PTR(&play));//播放,此处是阻塞模式,播放完后才返回。也可以指定为0
//////////////////////////////////////////////当不需要播放时,关闭
MCI_GENERIC_PARMS close;
mciSendCommand(DeviceID,MCI_CLOSE,0,DWORD_PTR(&close));
DeviceID与打开时的ID一致
这种方式和上面的播放是一样的作用,但效率要高些。
我修改了以下代码,请你参考:
// mciSendString.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <windows.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib")
int main(int argc, char* argv[])
{
// mciSendString(TEXT("open C:/a.mp3 alias shanv"),NULL,0,NULL);
// //mciSendString((LPCWSTR)("seek yeah to start"),0,0,0);
// mciSendString(TEXT("play shanv"),NULL,0,NULL);
// //mciSendString((LPCWSTR)"close yeah",NULL,0,NULL);
//
// Sleep(100000000);
MCI_OPEN_PARMS op;
op.dwCallback=NULL;
op.lpstrAlias=NULL;
op.lpstrDeviceType=TEXT("MPEGAudio"); //设备类型,大多数文件可以这样设置
op.lpstrElementName=TEXT("C:\\a.mp3") ;//文件路径
op.wDeviceID=NULL; //打开设备成功以后保存这个设备号备用
UINT rs; //接受函数返回结果
rs=mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT ,(DWORD)&op);//发送命令打开设备,成功返回0,否则返回错误号,第三个参数这里必须MCI_OPEN_ELEMENT
if(rs==0) //设备打开成功就播放文件
{
MCI_PLAY_PARMS pp;
pp.dwCallback=NULL;
pp.dwFrom=0; //开始播放的位置
mciSendCommand(op.wDeviceID,MCI_PLAY,MCI_WAIT,(DWORD)&pp);//播放文件,如果第三个参数设为MCI_WAIT则程序窗口会被阻塞,为了避免这种情况可以设为MCI_NOTIFY ,这两个标志的详细区别请见MSDN,区别不小哦。
}
MCI_GENERIC_PARMS gp;
gp.dwCallback=NULL;
mciSendCommand(op.wDeviceID,MCI_CLOSE,MCI_WAIT,(DWORD)&gp);
return 0;
} 行客 发表于 2019-1-30 22:53
如果你看完了上面的mciSendString的介绍,这里应该也比较好理解。如果有疑问可继续跟帖。
mciSendCo ...
下面你写的看懂了{:10_266:},谢谢
页:
[1]