2016-01-18 4 views
0

Я хочу добавить звуковые эффекты для каждого из моих игровых событий, например, при смерти. Должен ли я использовать soundpool или meidaplayer и как бы я об этом поработал? Для лучшего понимания следующего - мой класс, у меня есть основной класс активности «игра», откуда в качестве представления я называю свой класс «GamePanel», который расширяет surfaceView и рисует всю мою игру. Любая помощь будет принята с благодарностью! Игровой класс ниже.Звуковые эффекты Android

import android.app.Activity; 
import android.media.AudioManager; 
import android.media.MediaPlayer; 
import android.media.SoundPool; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.Window; 
import android.view.WindowManager; 

public class Game extends Activity { 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    View v1 = (new GamePanel(this)); 
    setContentView(v1); 


} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_game, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 

    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 


} 

}

и мой GamePanel, где я хотел бы иметь звук играл

player.resetDY(); 
     if (!reset) { 
      newGameCreated = false; 
      startReset = System.nanoTime(); 
      reset = true; 
      dissapear = true; 
      explosion = new 
      Explosion(BitmapFactory.decodeResource(getResources(), R.drawable.explosion), player.getX(), 
        player.getY() - 30, 100, 100, 25); 
      ///here 

ответ

1

За короткий звуковой эффект, как взрывы, монеты коллекции и т.д., то лучше использовать Soundpool.

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

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

В леденец, а позже:

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 в качестве потока звука.

Не забудьте также установить регулятор громкости в вашей деятельности, так что пользователь имеет возможность изменять громкость надлежащего потока:

setVolumeControlStream(AudioManager.STREAM_MUSIC); 

Чем, вам необходимо загрузить звуковые эффекты в бассейне и дать им их идентификаторы:

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

Проверить полный ответ здесь: source

+1

Спасибо вам большое! – Morphis1792

+0

Я построил soundpool под моим методом onCreate в своем классе игры, как связать его с моей игровой панелью, чтобы воспроизвести звуки? – Morphis1792

+0

, чтобы избежать редактирования моего ответа и многих комментариев, пожалуйста, любезно просмотрите все следующие ссылки: [Источник звука 2] (http://content.gpwiki.org/index.php/Android:Playing_Sound_Effects_With_SoundPool) 2. [GUI source1] (https : //dzone.com/articles/playing-sounds-android) 3. [Звук] (http://www.edu4java.com/en/game/game7.html) – Michael

Смежные вопросы