В Symbian OS воспроизведение и управление звуком осуществляется с помощью медиа сервера (media server), который поддерживает различные аудио форматы (wav, au, wve). Он предоставляет разработчику API с помощью которого можно создавать собственный plug-in-ы и реализовать поддержку любого формата. Клиентский API для медиа сервера (в случае Series 60 Developer Platform 2.0 это Multi Media Framework) предоставляет в распоряжение программиста две полезные для игр функции:
Для воспроизведения сэмплов необходимо воспользоваться методами класса MmdaAudioPlayerCallback.
Следующий пример демонстрирует использование класса CmdaAudioPlayerUtility:
// Вызывается после завершения инициализации, // то есть когда данные из файла сэмпла загружены. void CmySamplePlayer::MapcInitComplete(TInt aError,const TtimeIntervalMicroSeconds& aDuration) { } // Вызывается, когда воспроизведение сэмпла завершено. void CmySamplePlayer::MapcPlayComplete(TInt aError) { } void CmySamplePlayer::PlayMySampleL() { // Создаем проигрыватель и загружаем сэмпл из файла MyClip.wav _LIT(KmySampleName,”MyClip.wav”); TFileName sampleFileName(KmySampleName); CompleteWithAppPath(sampleFileName); delete iMySamplePlayer; iMySamplePlayer=NULL; iMySamplePlayer= CmdaAudioPlayerUtility::NewFilePlayerL( sampleFileName,*this); // Воспроизводим сэмпл iMySamplePlayer->Play(); }
В Series 60 каждой клавише присвоен определенный звук, который может различаться в зависимости от длительности и частоты нажатия. Класс пользовательского интерфейса CaknAppUi позволяет назначить звуки для клавиш. Делается это с помощью ресурсного файла:
RESOURCE AVKON_SKEY_LIST r_example_skey_list { list= { AVKON_SKEY_INFO { key=EstdKeyLeftArrow; sid=EAvkonSIDNoSound; }, AVKON_SKEY_INFO { key=EstdKeyLeftArrow; sid=EAvkonSIDNoSound; type=ESKeyTypeLong; }, AVKON_SKEY_INFO { key=EstdKeyLeftArrow; sid=EAvkonSIDNoSound; type=ESKeyTypeRepeat; } }; }
Идентификаторы sid задаются в заголовочном файле avkon.hrh. В игре, если клавиша удерживается долгое время, нужно запретить повторное воспроизведение ее звука. Для этого нудно передать EAvkonSIDNoSound sid клавиши. Частое повторное воспроизведение звука отъедает много системных ресурсов, поэтому предпочтительней использовать плеер аудио сэмплов.
Для воспроизведение фоновой музыки необходимо использовать библиотеки сторонних разработчиков или собственные наработки. Вы также можете загнать музыку в отдельный сэмпл и воспроизводить его, как было рассказано выше.
Перевод:aRix