Звуковые эффекты игры в Android

Я разрабатываю простую игру на Android. Я хочу добавить звуковые эффекты для каждого из событий касания. Однако я добавляю фоновый звуковой эффект, который работает в течение всей игры. Но как добавить крошечный звуковой эффект для прикосновения к любому персонажу игры. Для лучшего понимания следующий – это мой класс: у меня есть основное действие, из которого в качестве представления я вызываю свой класс GameView, который расширяет поверхность. Для звука bacground я просто создал звук в mainActivity, а затем назвал класс GameView следующим:

public class MainActivity extends Activity { MediaPlayer backgroundMusic; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); backgroundMusic = MediaPlayer.create(MainActivity.this, R.raw.bg); backgroundMusic.setLooping(true); backgroundMusic.setVolume(10.0f, 3.0f); backgroundMusic.start(); setContentView(new GameView(this)); } } 

И вот мой класс GameView. Я хочу добавить звуковой эффект в этом классе onTouchEvent:

 public class GameView extends SurfaceView { @Override public boolean onTouchEvent(MotionEvent event) { //checking condition I want to give different sound here. } } 

Я пытался сделать это как mainActivity (используя MediaPlayer.creat ()), но он показывает ошибку. Кто-нибудь знает, как добавить такой звуковой эффект на основе моего класса?

Solutions Collecting From Web of "Звуковые эффекты игры в Android"

Для короткого звукового эффекта, такого как взрывы, коллекции монет и т. Д., Лучше использовать SoundPool .

Вам просто нужно создать звуковой пул:

 SoundPool sp = new SoundPool(10, AudioManager.STREAM_MUSIC, 0); 

В Lollipop и позже:

 AudioAttributes attrs = new AudioAttributes.Builder() .setUsage(AudioAttributes.USAGE_GAME) .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) .build(); SoundPool sp = new SoundPool.Builder() .setMaxStreams(10) .setAudioAttributes(attrs) .build(); 

Это создает звуковой пул для макс. Из 10 звуковых потоков (т. AudioManager.STREAM_MUSIC Сколько одновременных звуковых эффектов можно воспроизводить в любой момент времени) и использует AudioManager.STREAM_MUSIC качестве потока звука.

Обязательно также настройте регулятор громкости в своей Activity , чтобы пользователь мог изменить громкость соответствующего потока:

 setVolumeControlStream(AudioManager.STREAM_MUSIC); 

Затем вам необходимо загрузить звуковые эффекты в пул и дать им свои идентификаторы:

 int soundIds[] = new int[10]; soundIds[0] = sp.load(context, R.raw.your_sound, 1); //rest of sounds goes here 

Вам нужно передать контекст для загрузки метода, так что либо вы делаете это внутри своей деятельности, либо получаете от где-то еще.

И последний шаг для воспроизведения звука – это вызов метода play :

 sp.play(soundIds[0], 1, 1, 1, 0, 1.0); 

Параметры:

  • SoundID звуковой сигнал, возвращаемый функцией load ()

  • LeftVolume left volume value (диапазон от 0.0 до 1.0)

  • RightВнутреннее правое значение объема (диапазон от 0.0 до 1.0)

  • Приоритет приоритетного потока (0 = самый низкий приоритет)

  • (0 = нет цикла, -1 = цикл навсегда)

  • (1.0 = нормальное воспроизведение, диапазон от 0,5 до 2,0)

Вы должны помнить, что SoundPool не должен использовать мультимедийные файлы более 1 МБ, тем меньше файлы, лучший эффект и производительность у вас есть.

Обязательно отпустите SoundPool когда закончите, или в Activity.onDestroy .

 sp.release(); 

Надеюсь это поможет

GameView не является подклассом Context. Передайте Activity или ApplicationContext в Mediaplayer

Просто сделайте следующее …

 MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.combo); mp.start(); 

Я нашел его как играть в звуковой эффект в Android