使用MCI播放聲音

#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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章