Проигрывание WAV-файла более просто, чем это может показаться на первый взгляд, так как ОС делает большинство работы. В этом проекте класс CSoundPlayer осуществляет все необходимое для этого:

#include <mdaaudiosampleplayer.h>
class CSoundPlayer:public CBase,public MMdaAudioPlayerCallback
{
public:
static CSoundPlayer* NewL(const TDesC&amp; aFile);
static CSoundPlayer* NewLC(const TDesC&amp; aFile);
~CSoundPlayer();
void PlayL();
void StopL();
 
//
// from MMdaAudioPlayerCallback
//
void MapcInitComplete(TInt aError,const TTimeIntervalMicroSeconds&amp; aDuration);
void MapcPlayComplete(TInt aError);
 
private:
CSoundPlayer();
void ConstructL(const TDesC&amp; aFile);
 
private:
enum TState
{
ENotReady,
EReady,
EPlaying
};
 
TState iState;
CMdaAudioPlayerUtility* iMdaPlayer;
};
</mdaaudiosampleplayer.h>

Ключевые классы:
CMdaAudioPlayerUtilityкоторый осуществляет декодер. КлассCSoundPlayerимеет частный член, называемыйiMdaPlayer.
MMdaAudioPlayerCallback является своего рода обозревателем в iMdaPlayer. В основном этот смешанный класс требует выполнения MapcInitComplete() иMapcPlayComplete() (будут описаны ниже).

Инициализация проигрывателя

Проигрыватель инициализируется вызовомCSoundPlayer::NewL() или CSoundPlayer::NewLC(). Конструктор второй стадии объектаCSoundPlayerинициализирует объектiMdaPlayer, использующийCMdaAudioPlayerUtility::NewFilePlayerL():

void CSoundPlayer::ConstructL(const TDesC&amp; aFile)
{
//
// Create a file audio player utility instance
//
iMdaPlayer=CMdaAudioPlayerUtility::NewFilePlayerL(aFile,*this);
}
 


Второй тип конструктора,CMdaAudioPlayerUtility::NewDesPlayerL() доступен? если Ваш WAV-сэмпл уже загружен в  RAM.

Но проигрыватель пока не готов. Фактически, если вы попробуете вызвать iMdaPlayer->PlayL() сразу после вызоваNewFilePlayerL() , вы, вероятно ничего не услышите: вы должны дождаться, пока образец будет готов к проигрыванию. Это будет сообщено к Вам, когда метод повторного вызоваMapcInitComplete() вызовет структура. Два типичных примера выполнения этой функции показаны ниже:


//
// Implementation 1: set a iState flag to ready
// to reflect the fact that the player is ready
//
void CSoundPlayer::MapcInitComplete(TInt aError,const TTimeIntervalMicroSeconds&amp;/*aDuration*/)
{
iState= aError ? ENotReady: EReady;
}
 
 
//
// Implementation 2: play the file immediately
//
void CSoundPlayer::MapcInitComplete(TInt aError,const TTimeIntervalMicroSeconds&amp;/*aDuration*/)
{
if(!aError)
iMdaPlayer->PlayL();
}
 


Проигрывание файла

Как только инициализация закончена, как показано выше, воспроизведение файла делает запрос кCMdaAudioPlayerUtility:: PlayL (). В проектеSound1, это сделано  посредством вызоваCSoundPlayer:: PlayL():

void CSoundPlayer::Play()
{
if(iState==EReady)
{
iState=EPlaying;
iMdaPlayer->Play();
}
}

Система уведомит Вас об окночании воспроизведения вызовом MapcPlayComplete(). Это пример выполнения для Sound1:

void CSoundPlayer::MapcPlayComplete(TInt aError)
{
iState= aError ? ENotReady: EReady;
}
 

Чтобы выполнить этот пример, Вы должны поместить WAV-файл, названный play.wav в каталоге C:\System\Apps\Sound\ вашего устройства (C:\Symbian\6.1\Series60\Epoc32\Wins\c\system\apps\Sound для симулятора).




Наши соцсети

Подписаться Facebook Подписаться Вконтакте Подписаться Twitter Подписаться Google Подписаться Telegram

Популярное

Ссылки

Новости [1] [2] [3]... Android/ iOS/ J2ME[1] [2] [3]) Android / Архив

Рейтинг@Mail.ru Яндекс.Метрика
MobiLab.ru © 2005-2018
При использовании материалов сайта ссылка на www.mobilab.ru обязательна