При создании приложения Android часто необходимо проигрывать звук при наступлении разных событий. Это можно сделать несколькими способами: с помощью классов MediaPlayer [2], AudioTrack [3] или SoundPool [4]. В этой статье рассмотрено использование класса MediaPlayer для проигрывания звука, сохраненного в ресурсах приложения (среда разработки Eclipse).
1. Раскройте в Package Explorer дерево проекта, и добавьте в папку res подпапку raw. Эта папка предназначена для хранения различных ресурсов, в том числе и аудио.
2. Перетаскиванием положите в папку raw аудиофайл (формата wav или mp3). На запрос "копировать или создать ярлык?" выберите копирование. После копирования сделайте операцию очистки Project -> Clean... (при этом в файле R.java автоматически создастся цифровой идентификатор ресурса, привязанный к аудиофайлу).
Внимание: имя файла не должно содержать заглавные буквы и пробелы, и должно начинаться с буквы.
3. Добавьте код, который будет запускать проигрывание файла в нужный момент времени. Это может быть код события клика на кнопке.
public void ButtonClick(View v)
{
//Объект проигрывателя, который будет проигрывать звук на кнопке.
MediaPlayer mp = MediaPlayer.create(this, R.raw.girlfart01);
//Звук будет проигрываться только 1 раз:
mp.setLooping(false);
//Установка обработчика события на момент готовности проигрывателя:
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener()
{
public void onPrepared(MediaPlayer mp)
{
//При готовности к проигрыванию запуск вывода звука:
mp.start();
}
});
}
Это еще не все. После окончания проигрывания нужно освободить ресурс медиаплеера, иначе через десяток-другой проигрывания звук перестанет воспроизводиться, и объект медиаплеера начнет возвращать ошибку:
...
04-18 21:12:17.043: V/MediaPlayer(9815): start
04-18 21:12:17.058: V/MediaPlayer(9815): message received msg=100, ext1=-19, ext2=0
04-18 21:12:17.058: E/MediaPlayer(9815): error (-19, 0)
04-18 21:12:17.058: V/MediaPlayer(9815): callback application
04-18 21:12:17.058: V/MediaPlayer(9815): back from callback
04-18 21:12:17.063: E/MediaPlayer(9815): Error (-19,0)
04-18 21:12:17.098: V/MediaPlayer(9815): message received msg=2, ext1=0, ext2=0
04-18 21:12:17.098: V/MediaPlayer(9815): playback complete
04-18 21:12:17.098: V/MediaPlayer(9815): callback application
04-18 21:12:17.098: V/MediaPlayer(9815): back from callback
...
Чтобы этого не произошло, нужно добавить обработчик события медиаплеера, срабатывающее при завершении проигрывания. В этом обработчике нужно освобождать ресурс медиаплеера:
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener()
{
public void onCompletion(MediaPlayer mp)
{
mp.release();
}
});
Полностью проект с примером воспроизведения звука можно скачать по ссылке [5].
[Ссылки]
1. Media Playback site:developer.android.com. 2. MediaPlayer site:developer.android.com. 3. AudioTrack site:developer.android.com. 4. SoundPool site:developer.android.com. 5. 140324animbutton-android-MediaPlayer.zip - проект Eclipse, демонстрирующий воспроизведение звука с помощью класса MediaPlayer. |
Комментарии
RSS лента комментариев этой записи