Программирование Android и iPhone
Вконтакте Twitter Google+ Facebook RSS
Главная Новости
Проигрывание WAV-файлов в Symbian



Проигрывание 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 для симулятора).


 

Добавить комментарий

Войти через социальную сеть: ВконтактеTwitterYandexGooglefacebookMail.ruLoginzaMyOpenIDOpenIDWebMoney


Защитный код
Обновить



ИНТЕРЕСНОЕ



Новости [1] [2] [3]... / Программинг ( Android/ iOS/ J2ME[1] [2] [3]) / Безопасность / Статьи / Софт ( Android / iOS) / Форум / Архив ( Symbian/ Статьи)
Рейтинг@Mail.ru

MobiLab.ru © 2005-2012
При использовании материалов сайта ссылка на www.mobilab.ru обязательна