如何在程序中实现MP3音乐文件的播放呀?急!

解决方案 »

  1.   

    你可以用VC的WINDOWS MEDIA PLAYER控件!
      

  2.   

    use dshow!
    IGraphBuilder * pGraph;
    IMediaControl *pMediaControl;
    IMediaPosition *pMediaPos;
    IMediaEvent   *pEvent;
    IVideoWindow    *pVW = NULL;
        REFTIME length;
    WCHAR  path[MAX_PATH]; TCHAR filepath[MAX_PATH];
    strcpy(filepath,szFilename);
        MultiByteToWideChar(CP_ACP, 0, filepath, -1, path, MAX_PATH); CoInitialize(NULL);
    HRESULT hr = CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC_SERVER,IID_IGraphBuilder,(void **)&pGraph);

    if(FAILED(hr))
    {
    AfxMessageBox("DirectShow initialize failed!");
    return;
    }
    else 
    {
    pGraph->QueryInterface(IID_IVideoWindow, (void **)&pVW);

    pGraph->QueryInterface(IID_IMediaControl, (void **)&pMediaControl);

    pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);

    pGraph->QueryInterface(IID_IMediaPosition,(void **)&pMediaPos);    pGraph->RenderFile(path, NULL);

    pMediaPos->get_Duration(&length); pVW->put_Owner((OAHWND)m_hWnd);
    hr = pVW->put_MessageDrain((OAHWND)m_hWnd);

    pVW->put_WindowStyle(WS_CHILD|WS_CLIPSIBLINGS); pVW->SetWindowPosition(0,0,472,320); pMediaControl->Run();

    }
    pGraph->Release();
             CoUninitialize();
      

  3.   

    直接用Media Play Control控件,挺方便的,我就是用它
    m_media.SetFileName("C:\\01.mp3");
    m_media.Start();
      

  4.   

    //-----------------------------------------------------------------------------
    // Purpose: Play Mp3 File
    // Input  : sFileName - Mp3 File Name
    // Output : void WINAPI
    //-----------------------------------------------------------------------------
    void WINAPI PlayMp3File(CString sFileName)
    {
    MCI_OPEN_PARMS mciopenparms;
    MCI_PLAY_PARMS mciplayparms;
    mciopenparms.lpstrElementName= sFileName;
    mciopenparms.lpstrDeviceType=NULL;
    mciopenparms.dwCallback=NULL;
    MCIERROR e = mciSendCommand(0,MCI_OPEN,MCI_DEVTYPE_WAVEFORM_AUDIO,(DWORD)(LPVOID)&mciopenparms);
    DWORD m_count=mciopenparms.wDeviceID;
    mciplayparms.dwCallback= NULL;//(DWORD)GetSafeHwnd();
    DWORD cdlen=getinfo(MCI_STATUS_LENGTH,m_count);                                                                                                                                                                                                                                         
    DWORD cdto=MCI_MAKE_HMS(MCI_HMS_HOUR(cdlen),MCI_HMS_MINUTE(cdlen),MCI_HMS_SECOND(cdlen));  
    mciplayparms.dwFrom=0;
    mciplayparms.dwTo=cdto;
    e = mciSendCommand(mciopenparms.wDeviceID,MCI_PLAY,MCI_TO|MCI_FROM,(DWORD)(LPVOID)& mciplayparms);     

    }
    //-----------------------------------------------------------------------------
    // Purpose: Get The Play Item's Status
    //-----------------------------------------------------------------------------
    DWORD WINAPI getinfo(DWORD item,DWORD& m_count)
    {
    MCI_STATUS_PARMS mcistatusparms;
    mcistatusparms.dwCallback=NULL;//(DWORD)GetSafeHwnd();
    mcistatusparms.dwItem=item;
    mcistatusparms.dwReturn=0;
    mciSendCommand(m_count,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)&mcistatusparms);
    return mcistatusparms.dwReturn;
    }但是这样做只能处理mp3后缀的文件,否则不行(就算文件内容为mp3,但是后缀不对的话也不行)