【问题标题】:Two soundpool volume controls两个音池音量控制
【发布时间】:2017-04-27 11:17:49
【问题描述】:

我正在制作一个白噪声应用程序,我想独立控制每个声音的音量。这可能吗?

这是我现在的 onCreate。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mySound = new SoundPool(3, AudioManager.STREAM_MUSIC, 0);
    whiteNoiseId = mySound.load(this, R.raw.whitenoise, 1);
    rainId = mySound.load(this, R.raw.rain, 1);


    audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
    int curVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);

    SeekBar noiseVolumeControl = (SeekBar) findViewById(R.id.noiseSeekBar);
    noiseVolumeControl.setMax(maxVolume);
    noiseVolumeControl.setProgress(curVolume);
    SeekBar rainVolumeControl = (SeekBar) findViewById(R.id.rainSeekBar);
    rainVolumeControl.setMax(maxVolume);
    rainVolumeControl.setProgress(curVolume);

    noiseVolumeControl.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0);
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

        }
    });

    rainVolumeControl.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0);
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

        }
    });

}

这只是控制主音量,我希望能够降低一个并提高另一个。

谢谢!

【问题讨论】:

  • 它应该与SoundPool.setVolume() 方法一起使用。通过传递不同的streamId,它应该对两种声音产生不同的影响......

标签: android volume soundpool


【解决方案1】:

应该使用SoundPool.setVolume(int id,float leftVol,float rightVol); 方法。我没试过,但我猜应该是:

mySound.setVolume(whiteNoiseId,0.2,0.2);

mySoundPool.setVolume(rainId,0.8,0.8);

【讨论】:

  • 谢谢,这很有效,虽然当我停止并再次启动声音时,它会失去对搜索栏的控制。现在发布新问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多