В Symbian OS воспроизведение и управление звуком осуществляется с помощью медиа сервера (media server), который поддерживает различные аудио форматы (wav, au, wve). Он предоставляет разработчику API с помощью которого можно создавать собственный plug-in-ы и реализовать поддержку любого формата. Клиентский API для медиа сервера (в случае Series 60 Developer Platform 2.0 это Multi Media Framework) предоставляет в распоряжение программиста две полезные для игр функции:

  • CMdaAudioPlayerUtility; Методы для загрузки и воспроизведения сэмплов, установки громкости, баланса и т.д. Класс можно ассоциировать лишь с одним сэмплом, и поэтому нужно создавать столько экземпляров CmdaAudioPlayerUtility, сколько звуковых файлов Вы собираетесь использовать. Для работы с CmdaAudioPlayerUtility данные должны иметь формат WAV, AU или RAW. В Series 60 Developer Platform 2.0, можно использовать экземпляр CmdaAudioPlayerUtility повторно, то есть Вы можете загрузить данные из другого звукового файла после создания объекта.
  • CmdaAudioConvertUtility; Этот класс позволяет конвертировать данные из одного звукового формата в другой. Поддерживаемые форматы зависят от установленных в телефоне кодеков.

Для воспроизведения сэмплов необходимо воспользоваться методами класса MmdaAudioPlayerCallback.

  • MmdaAudioPlayerCallback:: MapcInitComplete; вызывается когда инициализация данных сэмпла завершена и файл загружен.
  • MmdaAudioPlayerCallback::MapcPlayComplete; вызывается когда воспроизведение сэмпла завершено.

Следующий пример демонстрирует использование класса 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




Наши соцсети

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

Популярное

Ссылки

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

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