SoundPool не работает?

У меня есть 2 экземпляра SoundPool, и если я запускаю свое приложение, soundPool2 воспроизводит тот же звук, что и soundPool1, я не знаю, почему этот звук воспроизводится одинаково. Может ли кто-нибудь помочь мне найти проблему?

public class MainActivity extends Activity implements OnTouchListener {
private SoundPool soundPool;
private SoundPool soundPool2;
private int soundID;
private int soundID2;
boolean loaded = true;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    View view = findViewById(R.id.button1);
    view.setOnTouchListener(this);

    // Set the hardware buttons to control the music
    this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
    // Load the sound
    soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
    soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener()
    {
        @Override
        public void onLoadComplete(SoundPool soundPool, int sampleId,
                int status) {
            loaded = true;
        }
    });

    soundID = soundPool.load(this, R.raw.sound1, 1);

    View view2 = findViewById(R.id.button2);
    view2.setOnTouchListener(this);
    this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
    soundPool2 = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
    soundPool2.setOnLoadCompleteListener(new OnLoadCompleteListener()
    {
        @Override
        public void onLoadComplete(SoundPool soundPool2, int sampleId,
                int status) {
            loaded = true;


        }
    });


    soundID2 = soundPool.load(this, R.raw.bird, 1);

}

public boolean onTouch( View v, MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        // Getting the user sound settings
        AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
        float actualVolume = (float) audioManager
                .getStreamVolume(AudioManager.STREAM_MUSIC);
        float maxVolume = (float) audioManager
                .getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        float volume = actualVolume / maxVolume;
        // Is the sound loaded already?
        if (loaded) {
            soundPool.play(soundID, volume, volume, 1, 0, 1f);
            Log.e("Test", "Played ");
        }
    }
    return false;
}

public boolean onTouch2( View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
    // Getting the user sound settings
    AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
    float actualVolume = (float) audioManager
            .getStreamVolume(AudioManager.STREAM_MUSIC);
    float maxVolume = (float) audioManager
            .getStreamMaxVolume(AudioManager.STREAM_MUSIC);
    float volume = actualVolume / maxVolume;
    // Is the sound loaded already?
    if (loaded) {
        soundPool2.play(soundID2, volume, volume, 1, 0, 1f);
        Log.e("Test", "Played sound");
    }
}
return false;
}}

person Always Newbie    schedule 11.01.2014    source источник


Ответы (1)


Во-первых, вам нужен только один экземпляр SoundPool, а не два.

Кроме того, ваши onTouch и onTouch2 не имеют для меня особого смысла, там тоже может быть проблема, поэтому я переписал и эту часть.

Вместо этого попробуйте следующий код.

public class MainActivity extends Activity implements OnTouchListener {
    private SoundPool mSoundPool;
    private int mSoundID;
    private int mSoundID2;
    private boolean mSoundLoaded = false;
    private float mVolume = 0f;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        View view = findViewById(R.id.button1);
        view.setOnTouchListener(this);
        View view2 = findViewById(R.id.button2);
        view2.setOnTouchListener(this);

        // Set the hardware buttons to control the music
        this.setVolumeControlStream(AudioManager.STREAM_MUSIC);

        // Load the sound
        mSoundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
        mSoundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
            @Override
            public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
                if (sampleId == R.raw.bird) {
                    mSoundLoaded = true;
                }
            }
        });

        mSoundID = mSoundPool.load(this, R.raw.sound1, 1);
        mSoundID2 = mSoundPool.load(this, R.raw.bird, 1);

        // Getting the user sound settings
        AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
        float actualVolume = (float) audioManager
                .getStreamVolume(AudioManager.STREAM_MUSIC);
        float maxVolume = (float) audioManager
                .getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        mVolume = actualVolume / maxVolume;
    }

    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            // Is the sound loaded already?
            if (mSoundLoaded) {
                if (v.getId() == R.id.button1) {
                    playSound(mSoundID);
                    Log.e("Test", "Played mSoundID");
                } else if (v.getId() == R.id.button2) {
                    playSound(mSoundID2);
                    Log.e("Test", "Played mSoundID2");
                }
            }
        }
        return false;
    }

    private void playSound(int soundId) {
        mSoundPool.play(soundId, mVolume, mVolume, 1, 0, 1f);
    }
}

ПРИМЕЧАНИЕ. Могут быть ошибки, это непроверенный код.

person Tigger    schedule 11.01.2014
comment
Большое спасибо учителю, все работает, я проверил, все отлично!!! :), и бегом искать .. еще раз спасибо, я новичок, я должен узнать еще много.хехе @Tigger - person Always Newbie; 12.01.2014
comment
Рад, что помог. - person Tigger; 12.01.2014
comment
@Tigger, эй, триггер, мне нужна твоя помощь с звуковым пулом. это простой код, пожалуйста, пригласите меня в чат. Благодарность! - person JRE.exe; 02.09.2014