在学习Symbian的过程中,想到如何从文件中打开一个短的铃声并且让它播放。通过上网搜索,发现比较容易,只要抓住
关键类MMAudioPlayerCallback和CMAudioPlayerUtility就行了,通过从MMAudioPlayerCallback继承,当载入一个音频文件后,通过
CMAudioPlayerUtility的NewFilePlayerL()方法载入文件,当文件初始化完毕后,会调用MMAudioPlayerCallback的MapcInitComplete()方法,这时你可以调用play方法,让音频播放,结束后会调用MapcPlayComplete()方法,
以下是具体的程序:
/*******************************************************************************
* name: player.h
* desc: definite a sample player for wav,mp3 audio
* author: lql46211
* date: 2010-6-20
*******************************************************************************/
#ifndef PLAYER_H_
#define PLAYER_H_
#include <MdaAudioSamplePlayer.h> //for MMdaAudioPlayerCallback
class CSampleAudio : public CBase, public MMdaAudioPlayerCallback
{
public:
static CSampleAudio* NewL();
static CSampleAudio* NewLC();
~CSampleAudio();
CSampleAudio();
void ConstructL();
public:
void PlayingAudioL(const TDesC& aFileName);
public: //from MMdaAudioPlayerCallback
void MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds &aDuration);
void MapcPlayComplete(TInt aError);
private:
CMdaAudioPlayerUtility* iPlayer;
};
#endif /*PLAYER_H_*/
/*******************************************************************************
* name: player.cpp
* desc: implement for a sample audio player
* author: lql46211
* date: 2010-6-20
*******************************************************************************/
#include "player.h"
#include <AknUtils.h> //for CompleteWithAppPath
CSampleAudio* CSampleAudio::NewL()
{
CSampleAudio* audio = CSampleAudio::NewLC();
CleanupStack::Pop();
return audio;
}
CSampleAudio* CsampleAudio::NewL()
{
CSampleAudio* audio = new(ELeave)CSampleAudio();
CleanupStack::PushL(audio);
audio->ConstructL();
return audio;
}
CSampleAudio::~CSampleAudio()
{
if(iPlayer)
{
delete iPlayer;
iPlayer = NULL;
}
}
CSampleAudio::CSampleAudio()
{
}
void CSampleAudio::ConstructL()
{
}
void CSampleAudio::PlayingAudioL(const TDesC& aFileName)
{
TFileName filepath(CompleteWithAppPath(aFileName));
iPlayer = CMdaAudioPlayerUtility::NewFilePlayerL(filepath, *this);
}
void CSampleAudio::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds &aDuration)
{
if(aError == KErrNone)
{
iPlayer->SetVolume(iPlayer->MaxVolume());
iPlayer->Play();
}
else
{
// log error
}
}
void CSampleAudio::MapcPlayComplete(TInt aError)
{
if (aError == KErrNone)
{
// do something, if necessary
}
else
{
iPlayer->Stop();
}
}