#pragma once
#define _CRT_SECURE_NO_WARNINGS
//Windows头文件
#include<Windows.h>
#include<mmsystem.h>
#include<tchar.h>
#include<string>
#include<iostream>
#pragma comment(lib,"winmm.lib")
void playmp3(std::wstring mp3file);
void Testplaymp3();
void playmp3(std::wstring mp3file)
{
std::wstring wstr = L"open ./Baidu-Tts.mp3 alias mp3";
/*std::wcout << wstr << std::endl;
std::wcout << mp3file << std::endl;*/
wstr.append(mp3file);
/*std::wcout << wstr << std::endl;*/
wstr.append(L" alias mp3");
/*std::wcout << wstr << std::endl;*/
mciSendString((LPCSTR)wstr.c_str(), nullptr, 0, nullptr);
mciSendString(_T("play mp3"), nullptr, 0, nullptr);
}
void Testplaymp3()
{
mciSendString("open ./Baidu-Tts.mp3 alias mp3", nullptr, 0, nullptr);
mciSendString("play mp3", nullptr, 0, nullptr);
char cPosition[256];
long mp3Length = 0;
mciSendString("Status mp3 length", cPosition, 255, NULL);
mp3Length = strtol(cPosition, NULL, 10);
std::cout << "声音时长:"<< mp3Length << "ms" << std::endl;
}
//参考https://blog.csdn.net/aijia1857/article/details/101134620
void testmcicmd()
{
//打开MCI设备
MCI_OPEN_PARMS mciOP;
DWORD opReturn;
MCIDEVICEID wIDDevioce; //保存设备ID
mciOP.lpstrDeviceType = NULL;
mciOP.lpstrElementName = (LPCSTR)"./Baidu-Tts.mp3"; //设置打开的文件的名称
opReturn = mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT, (DWORD)(LPVOID)&mciOP);
if (opReturn == 0)
{
wIDDevioce = mciOP.wDeviceID;//播放设备Id
//设置设备信息
MCI_SET_PARMS mciSet;
mciSet.dwTimeFormat = MCI_FORMAT_MILLISECONDS; //设置时间单位为毫秒
mciSendCommand(wIDDevioce, MCI_SET, MCI_SET_TIME_FORMAT, (DWORD)(LPVOID)&mciSet);
//音频播放
MCI_PLAY_PARMS mciPP;
DWORD opReturn;
opReturn = mciSendCommand(wIDDevioce, MCI_PLAY, MCI_NOTIFY, (DWORD)&mciPP);
MCI_STATUS_PARMS mciSP;
DWORD dwLength = 0;
mciSP.dwItem = MCI_STATUS_LENGTH;
DWORD dwReturn = mciSendCommand(wIDDevioce, MCI_STATUS, MCI_STATUS_ITEM,
(DWORD)(LPVOID)&mciSP);
if (dwReturn == 0)
dwLength = mciSP.dwReturn / 1000;
std::cout << "声音时长:" << dwLength << "s" << std::endl;
MCI_STATUS_PARMS mciStatus;
mciStatus.dwItem = MCI_STATUS_TIME_FORMAT;
DWORD sta2Return = mciSendCommand(wIDDevioce, MCI_STATUS, MCI_STATUS_ITEM, (DWORD)(LPVOID)&mciStatus);
DWORD music_timestyle = mciStatus.dwReturn; //获得当前的时间格式
mciStatus.dwItem = MCI_STATUS_MODE;
DWORD sta3Return = mciSendCommand(wIDDevioce, MCI_STATUS, MCI_STATUS_ITEM, (DWORD)(LPVOID)&mciStatus);
DWORD music_playstyle = mciStatus.dwReturn; //获得当前播放工作模式 播放 526 暂停525
}
else
{
wIDDevioce = NULL;
LPTSTR lptstr = (LPTSTR)malloc(sizeof(CHAR) * 255);
UINT len = 255;
if (mciGetErrorString(opReturn,lptstr,len) == TRUE)
{
std::cout << lptstr << std::endl;
}
free(lptstr);
}
}
#include<conio.h>
#include"mciplayer.h"
int main(int argc, char* argv[])
{
/*Testplaymp3();*/
testmcicmd();
_getch();
return 0;
}