Android обеспечивает два вида API для проигрывания звуков: SoundPool и MediaPlayer.
SoundPlayer может быть использован для проигрывания маленьких аудиоклипов. Он может повторять звуки и играть несколько звуков одновременно. Размер файла, который может проиграть SoundPool не должен превышать 1 мегабайта.
SoundPool может загружать файл асинхронно. В API8 окончание загрузки можно отследить в событии OnLoadCompleteListener.
Android поддерживает различные виды аудиопотоков, которые используются для разных целей. Кнопку управления громкостью телефона можно настроить для управления определенным аудиопотоком, например, во время вызова клавиша регулировки громкости позволяют увеличить или уменьшить громкость звонка. Для управления звуковым потоком в вашем приложении используется такой код:
context.setVolumeControlStream(AudioManager.STREAM_MUSIC);
MediaPlayer лучше подходит для проигрывания музыки и видео.
Мы будем создавать приложение, которое будет издавать звук при прикосновении к экрану.
Измените файл «main.xml» следующим образом:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:text="Click on the screen to start playing" android:id="@+id/textView1" android:layout_width="fill_parent" android:layout_height="fill_parent"></TextView> </LinearLayout>
Загрузите бесплатные звуковые файлы со страницы http://hamsterrepublic.com/ohrrpgce/Free_Sound_Effects.html и положите в каталог «res/raw» под именем «sound1.ogg».
Создайте такой код для вашего Activity.
package playsound.playsound.com; import android.app.Activity; import android.media.AudioManager; import android.media.SoundPool; import android.media.SoundPool.OnLoadCompleteListener; import android.os.Bundle; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; public class PlaySound extends Activity implements OnTouchListener { private SoundPool soundPool; private int soundID; boolean loaded = false; /** Вызывается в первую очередь когда активити создаётся */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); View view = findViewById(R.id.textView1); view.setOnTouchListener(this); // Установить аппаратные кнопки для управления аудиопотоком this.setVolumeControlStream(AudioManager.STREAM_MUSIC); // загружаем звук soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0); soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() { @Override public void onLoadComplete(SoundPool soundPool, int sampleId, int status) { loaded = true; } }); soundID = soundPool.load(this, R.raw.sound1, 1); } //обрабатываем касание экрана @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { // получаем пользовательские настройки AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE); float actualVolume = (float) audioManager .getStreamVolume(AudioManager.STREAM_MUSIC); float maxVolume = (float) audioManager .getStreamMaxVolume(AudioManager.STREAM_MUSIC); float volume = actualVolume / maxVolume; // Звук уже загружен? if (loaded) { soundPool.play(soundID, volume, volume, 1, 0, 1f); Log.e("Test", "Played sound"); } } return false; } }
Если вы нажмёте на кнопку, то файл будет проигран. Этот пример показывает то, что android программирование звуковых эффектов в вашем приложении не такая уж и тяжёлая задача.
Данный пост является вольным переводом статьи: http://www.vogella.de/articles/AndroidMedia/article.html