首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Windows Mobile >

Windows mobile5.0上的mp3播放器只能播放wav格式的·

2013-01-01 
Windows mobile5.0下的mp3播放器只能播放wav格式的···本帖最后由 mengfeiyulu 于 2012-06-05 15:57:17 编

Windows mobile5.0下的mp3播放器只能播放wav格式的···
本帖最后由 mengfeiyulu 于 2012-06-05 15:57:17 编辑 为什么我在Windows mobile 5.0下编写的MP3播放器只能播放wav格式的歌曲囧,怎么才能播放MP3文件呢?

"playControl.h"

#pragma once
#include <streams.h>
#pragma comment (lib,"Ole32.lib")
#pragma comment (lib,"Strmiids.lib")


#define HELPER_RELEASE(x) { if (x) x->Release(); x = NULL; }
#define WM_GRAPHNOTIFY  WM_USER+1

class CPlayControl
{
public:
CPlayControl(void);
public:
~CPlayControl(void);
public:
IGraphBuilder *pGB;//这是directshow的核心
IMediaControl *pMC;//帮我们连接filter(媒体文件,解码器等)          
//简单的说,它帮我们简单地打开和播放文件.
IMediaEventEx *pME;//处理过滤器图表的事件
IVideoWindow  *pVW;//用这个来控制directshow的视频窗口
IBasicAudio   *pBA;//用于控制音频流的音量和平衡
IBasicVideo   *pBV;     //用于设置视频特性,如视频显示的目的区域和源区域
IMediaSeeking *pMS;//提供搜索数据流位置和设置播放速率的方法,播放位置

enum PLAYSTATE { RUNING, PAUSED, STOPPED, INIT };

public:

PLAYSTATE playControlInfo;
HWND      ghApp;

public:

bool SetNotifyWindow(HWND inWindow);
bool Create();
bool RenderFile(WCHAR *szFile);
bool buttonPlay();
bool buttonPause();
void buttonStop();
void CloseInterfaces(void);
bool ListPlay(WCHAR *szFile);
float GetAlltime();
float GetCurrentPosition();
bool SetCurrentPosition(double inPosition) ;
bool Running();
void SetVol(int m_vol);

IMediaEventEx * GetEventHandle();
};


"playControl.cpp"


#include "StdAfx.h"
#include "PlayControl.h"

CPlayControl::CPlayControl(void)
{
IGraphBuilder *pGB = NULL;
IMediaControl *pMC = NULL;
IMediaEventEx *pME = NULL;
IVideoWindow  *pVW = NULL;
IBasicAudio   *pBA = NULL;
IBasicVideo   *pBV = NULL;
IMediaSeeking *pMS = NULL;
playControlInfo = STOPPED;
ghApp = 0;
}

CPlayControl::~CPlayControl(void)
{
CoUninitialize();
}

void CPlayControl::CloseInterfaces(void)
{
HELPER_RELEASE(pMC);
HELPER_RELEASE(pME);
HELPER_RELEASE(pMS);
HELPER_RELEASE(pBV);
HELPER_RELEASE(pBA);
HELPER_RELEASE(pVW);
HELPER_RELEASE(pGB);

// No current media state
playControlInfo = INIT;

}


bool CPlayControl::Create()
{
if(FAILED(CoInitialize(NULL)))
return false;

// Get the interface for DirectShow's GraphBuilder
if( SUCCEEDED( CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGB )))
{
HRESULT hr = NOERROR;
// QueryInterface for DirectShow interfaces
hr |= (pGB->QueryInterface(IID_IMediaControl, (void **)&pMC));
hr |= (pGB->QueryInterface(IID_IMediaEventEx, (void **)&pME));
hr |= (pGB->QueryInterface(IID_IMediaSeeking, (void **)&pMS));

// Query for video interfaces, which may not be relevant for audio files


hr |= (pGB->QueryInterface(IID_IVideoWindow, (void **)&pVW));
hr |= (pGB->QueryInterface(IID_IBasicVideo, (void **)&pBV));

// Query for audio interfaces, which may not be relevant for video-only files
hr |= (pGB->QueryInterface(IID_IBasicAudio, (void **)&pBA));

return true;
}
return false;
}

bool CPlayControl::RenderFile(WCHAR *szFile)
{

if ( pGB && SUCCEEDED( pGB->RenderFile(szFile, NULL)))
{
return true;
}
else
return false ;
}

bool CPlayControl::SetNotifyWindow(HWND inWindow)
{
if (pME)
{
pME->SetNotifyWindow((OAHWND)inWindow, WM_GRAPHNOTIFY, 0);
return true;
}
return false;
}

bool CPlayControl::Running()
{
if(playControlInfo == RUNING || playControlInfo == PAUSED)
return true;
else
return false;
}
bool CPlayControl::ListPlay(WCHAR *szFile)
{
if(pME)
{
pME->SetNotifyWindow(NULL,0,0);
CloseInterfaces();
}
if(playControlInfo == RUNING || playControlInfo == PAUSED)
{
playControlInfo = STOPPED;
}
if(Create() && RenderFile(szFile))
{
pMC->Run();
playControlInfo = RUNING ;
return true;
}
return false;
}


bool CPlayControl::buttonPlay()
{
if(playControlInfo == RUNING)
return FALSE;
else
{
pMC->Run();
playControlInfo = RUNING;
return TRUE;
}
}

bool CPlayControl::buttonPause()
{
if(playControlInfo == RUNING)
{
pMC->Pause();
playControlInfo = PAUSED;
return TRUE;
}
else
return FALSE;
}

void CPlayControl::buttonStop()
{
if((playControlInfo == PAUSED) || (playControlInfo == RUNING))
{
pMC->Stop();
}
playControlInfo = STOPPED;
pME->SetNotifyWindow(NULL,0,0);
CloseInterfaces();
}

IMediaEventEx * CPlayControl::GetEventHandle()
{
return pME;
}

bool CPlayControl::SetCurrentPosition(double inPosition)
{
if (pMS)
{
__int64 one = 10000000;
__int64 position = (__int64)(one * inPosition);
HRESULT hr = pMS->SetPositions(&position, AM_SEEKING_AbsolutePositioning | AM_SEEKING_SeekToKeyFrame, 
0, AM_SEEKING_NoPositioning);
return SUCCEEDED(hr);
}
return false;
}

void CPlayControl::SetVol(int m_vol)
{
pBA->put_Balance(0);
pBA->put_Volume( -m_vol * 100);
}

float CPlayControl::GetAlltime()
{
float time ;
if(pMS)
{
LONGLONG allTimes ;
if(SUCCEEDED(pMS->GetDuration(&allTimes)))
{
time = (float)allTimes / 10000000 ;
return time;
}
}
return 0 ;
}

float CPlayControl::GetCurrentPosition()
{
float time ;
if(pMS)
{
LONGLONG theTimes ;
if(SUCCEEDED(pMS->GetCurrentPosition(&theTimes)))
{
time = (float)theTimes / 10000000 ;


return time;
}
}
return 0 ;
}


[解决办法]
MP3解码不就是wav格式的么

热点排行