MediaPlayer: проигрывание звука |
![]() |
Добавил(а) microsin |
При создании приложения 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. |