Android,在soundpool播放声音

时间:2011-10-03 15:10:04

标签: android soundpool audio soundmanager2

我下载了一些代码,而不是在我的本地课堂上播放我的声音,调用另一个类来播放声音,我遇到的唯一问题是它不允许我在手机上使用音量键来调节音量我本地课程中的旧代码允许我这样做。

以旧的方式,本地类有这个代码:

    AudioManager mgr = (AudioManager) GameScreen_bugfix.this.getSystemService(Context.AUDIO_SERVICE);
    float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);
    float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
    float volume = streamVolumeCurrent / streamVolumeMax;
soundPool.play(soundPoolMap.get(sound), volume, volume, 1, 0,1f);

新代码如下所示:

public static void playSound(int index,float speed) 
    { 
             float streamVolume;
            try {
                streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
                streamVolume = streamVolume / mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
                mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 1, 0, speed);
            } catch (Exception e) {
                e.printStackTrace();
                //Log.v("THE ERROR",  mSoundPoolMap+" "+index);
            } 


    }

所以我试着改变它:

        AudioManager mgr = (AudioManager) SoundManager.getSystemService(Context.AUDIO_SERVICE);
float streamVolumeCurrent = mgr
        .getStreamVolume(AudioManager.STREAM_MUSIC);
float streamVolumeMax = mgr
        .getStreamMaxVolume(AudioManager.STREAM_MUSIC);
float volume = streamVolumeCurrent / streamVolumeMax;

getSystemService 会以红色突出显示,当我鼠标悬停时会显示:

  

该类型的方法getSystemService(String)未定义   SoundManager类

怎么办? 谢谢!

2 个答案:

答案 0 :(得分:5)

如果您想在系统定义的声级播放声音,请更改:

mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 1, 0, speed);

到此:

mSoundPool.play(mSoundPoolMap.get(index), 1, 1, 1, 0, speed);

传递给play的音量级别在0和1之间。它表示播放声音的系统音量的百分比。因此.5的值将以系统音量的50%发挥。

答案 1 :(得分:5)

实际上,如果你想要的是硬件音量键来调整媒体流而不是铃声流,你需要使用http://developer.android.com/reference/android/app/来请求它。 Activity.html#setVolumeControlStream(INT):

@Override
public void onStart() {
    super.onStart();
    setVolumeControlStream(AudioManager.STREAM_MUSIC);
}