Android播放短音的正确方法?

deu*_*on0 39 android

我正在创建一个应用程序,它将在屏幕上显示多个图像,这些图像将是按钮,当点击时将播放一个短的声音.我研究了这个并且只能找到我用来播放声音的当前方法,它根本没有响应.我希望声音能够快速播放并响应许多快速的声音.我不确定这在Android中是否可行.

我用来播放声音的代码是这样的:

    Button sound1;
MediaPlayer  firstSound;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    firstSound = MediaPlayer.create(SoundActivity.this, R.raw.click);


    sound1 = (Button) findViewById(R.id.Sound1);


    beaver.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {

            firstSound.start();

            }

    });



    }
Run Code Online (Sandbox Code Playgroud)

我的滞后问题也可能与我使用媒体播放器对象的方式有关?我觉得这应该在我的手机上更顺畅,任何有关如何在Android中播放声音的建议都表示赞赏.

谢谢.

自从发现Sound Pool以来,我编辑了我的代码以使用它并且它完美地运行,新代码如下所示:

SoundPool soundPool;
HashMap<Integer, Integer> soundPoolMap;
int soundID = 1;


Button sound1;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100);
    soundPoolMap = new HashMap<Integer, Integer>();
    soundPoolMap.put(soundID, soundPool.load(this, R.raw.click, 1));

    sound1 = (Button) findViewById(R.id.bBeaver);


    sound1.setOnClickListener(new View.OnClickListener() {

                public void onClick(View v) {

                    AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
              float curVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
              float maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
              float leftVolume = curVolume/maxVolume;
              float rightVolume = curVolume/maxVolume;
              int priority = 1;
              int no_loop = 0;
              float normal_playback_rate = 1f;
              soundPool.play(soundID, leftVolume, rightVolume, priority, no_loop, normal_playback_rate);

            }

    });


    }
Run Code Online (Sandbox Code Playgroud)

谢谢

Rik*_*tor 27

你可以用SoundPool.它符合你想要做的完美.

您只需要一种方法来存储与每个图像(或按钮)对应的声音效果ID.

也许扩展Button来存储相关的音效ID.并且当触摸按钮时,使用常用的SoundPool播放与id相关的声音效果.

您可以在此处阅读有关SoundPool的更多信息.


Qw4*_*4z1 5

@Rikonator 在 Soundpool 的正确轨道上。它更适合您所追求的功能类型。

但是,如果您决定使用媒体播放器,请不要忘记 prepareAsync() 方法以防止它挂起 UI 线程。您可以在此处阅读有关播放媒体的更多信息。