VC播放mp3的方法

1、使用msi库

    #include <mmsystem.h>  
    #pragma comment(lib,"winmm.lib") 

    .......

    //打开文件
    MCI_OPEN_PARMS mciOpen;  
    mciOpen.lpstrDeviceType = _T("mpegvideo");  
    mciOpen.lpstrElementName = _T("c://1.mp3");  
    MCIERROR mciError = mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT, (DWORD)&mciOpen);  
    if(mciError)  
    {  
        TCHAR buf[128]={0};  
        mciGetErrorString(mciError, buf, 128);  
        printf("%s/n",buf);  
    }  

    //播放(异步)
    UINT DeviceID = mciOpen.wDeviceID ;  
    MCI_PLAY_PARMS mciPlay;  
    mciError = mciSendCommand(DeviceID, MCI_PLAY, 0 , (DWORD)&mciPlay);
    if(mciError)  
    {  
        printf("send MCI_PLAY command failed/n");  
    }  

    //暂停
    //mciSendCommand(DeviceID, MCI_PAUSE, 0 , (DWORD)&mciPlay);

    //停止
    mciSendCommand(DeviceID, MCI_STOP, NULL , NULL);
    mciSendCommand(DeviceID, MCI_SEEK, MCI_SEEK_TO_START , NULL);

    //关闭
    //mciSendCommand(DeviceID, MCI_CLOSE, 0 , (DWORD)&mciPlay);
    
    //获得播放进度,仅为示例代码
     //MCI_STATUS_PARMS mciStatusParms;
     //mciStatusParms.dwItem=MCI_STATUS_POSITION;    
     //mciSendCommand(m_wDeviceID,MCI_STATUS,MCI_WAIT|MCI_STATUS_ITEM,(DWORD)(LPVOID)&mciStatusParms);//关键,取得位置
     //int m_dPosition=mciStatusParms.dwReturn;

     //获得整个音频的时间长度,仅为示例代码
     //UINT DeviceID = mciOpen.wDeviceID ;
     //mciStatusParms.dwItem=MCI_STATUS_LENGTH; 
     //mciSendCommand(DeviceID,MCI_STATUS,MCI_WAIT|MCI_STATUS_ITEM,(DWORD)(LPVOID)&mciStatusParms);//关键,取得长度
    // m_dLength=mciStatusParms.dwReturn;

     //在指定位置播放,仅为示例代码
     //MCI_PLAY_PARMS mciPlay;
     //mciPlay.dwFrom=m_dPosition;
     //mciError = mciSendCommand(m_wDeviceID,MCI_PLAY,MCI_FROM,(DWORD)&mciPlay);

     //控制音量,仅为示例代码
     //MCI_DGV_SETAUDIO_PARMS mciSetAudioPara; 
     //mciSetAudioPara.dwItem = MCI_DGV_SETAUDIO_VOLUME; 
     //mciSetAudioPara.dwValue = atoi(m_Volume.GetBuffer(m_Volume.GetLength()));//here is the value of the Volume(0--1000) 
     //mciSendCommand(m_wDeviceID, MCI_SETAUDIO, MCI_DGV_SETAUDIO_VALUE | MCI_DGV_SETAUDIO_ITEM, (DWORD)(LPVOID)&mciSetAudioPara); 

2、使用vfw库

#include <vfw.h>
    #pragma comment(lib,"vfw32.lib")

    .......

    //打开文件
    CString filename = _T("c://1.mp3");
    HWND hwnd = MCIWndCreate(m_hWnd,NULL,MCIWNDF_NOPLAYBAR,filename);
    ::ShowWindow(hwnd,SW_HIDE);

    //设置音量
    MCIWndSetVolume(hwnd,1000);

    //播放(异步)
    MCIWndPlay(hwnd);

    //关闭
    //MCIWndClose(hwnd);

3、使用DirectShow

    #include   <dshow.h>
    #pragma comment(lib,"strmiids.lib")

    .......

    IGraphBuilder*   pGBuilder;  
    IMediaControl*   pMControl;  
    IMediaPosition*   pMPos;  
    IMediaEvent*   pMEvent; 

    CoInitialize(NULL);   //初始化COM  
    CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder,(void**)&pGBuilder);  
    pGBuilder->QueryInterface(IID_IMediaControl,(void**)&pMControl);  
    pGBuilder->QueryInterface(IID_IMediaEvent,(void**)&pMEvent);  
    pGBuilder->QueryInterface(IID_IMediaPosition,(void**)&pMPos);

    pGBuilder->RenderFile(L"C://1.mp3",   NULL);   //调入文件 

    //播放MP3文件 
    pMPos->put_CurrentPosition(0);   //移动到文件头 
    pMControl->Run();   //播放(异步) 

    // 停止播放和释放对象 
    /*pMControl->Stop();   //停止播放 
    pMControl->Release();
    pMControl=NULL;
    pMEvent->Release();
    pMEvent=NULL;
    pMPos->Release();
    pMPos=NULL;
    pGBuilder->Release();
    pGBuilder=NULL;
    CoUninitialize();   //释放COM  */
原文地址:https://www.cnblogs.com/milanleon/p/5626829.html