SoundPool хорошо играет, когда другие задачи выполняются в фоновом режиме, и прерывается, когда играет сама - PullRequest
1 голос
/ 27 октября 2011

Самое странное. Когда воспроизводится анимация, я слышу свой звуковой эффект, но когда анимация не воспроизводится, звуковой эффект прерывается. Вот код:

private void Feedback(boolean success)
{
    Log.d(TAG, "Feedback");
    if(success)
    {
        PlayCreatureSound();
        ShowAnimatedCreature();
    }
    else
    {
        PlayFailedSound();
    }
}

private void PlayCreatureSound()
{
    Log.d(TAG, "PlayCreatureSound");
    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;      
    spCreatureVoice.play(iCreatureVoicesId[lastCreature.ordinal()], leftVolume, rightVolume, 1, 0, 1);
}

private void PlayFailedSound()
{
    Log.d(TAG, "PlayFailedSound");
    spCreatureVoice.stop(iCreatureVoicesId[FeedbackCreature.FC_COUNT.ordinal()]);
    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;      
    spCreatureVoice.play(iCreatureVoicesId[FeedbackCreature.FC_COUNT.ordinal()], leftVolume, rightVolume, 1, 0, 1);
}

private void ShowAnimatedCreature()
{
    Log.d(TAG, "ShowAnimatedCreature");
    // show the creature
    ibtnShapes[lastTargetLocation].setImageBitmap(bmCreatures[lastCreature.ordinal()]); 
    // animate
    ibtnShapes[lastTargetLocation].startAnimation(rotate[0]);
}

Я уже пробовал: 1. переключение файлов 2. с помощью MediaPlayer 3. удаление "spCreatureVoice.stop (..." 4. изменение приоритета

Ответы [ 2 ]

0 голосов
/ 09 ноября 2011

Похоже, это проблема эмулятора.Не слышит никаких проблем на реальном устройстве.

0 голосов
/ 27 октября 2011

Это может быть из-за того, как вы обрабатываете структуру FeedbackCreature, или в методе stop.Вы пытаетесь воспроизвести два звуковых эффекта одновременно?

Поскольку эти два метода используют так много кода, я предлагаю вам объединить их, как показано ниже.Это может помочь вам сузить проблему.

private void Feedback(boolean success)
{
    Log.d(TAG, "Feedback");
    if(success)
    {
        int creatureOrdinal = lastCreature.ordinal();
        PlaySound(creatureOrdinal );
        ShowAnimatedCreature(creatureOrdinal );
    }
    else
    {
        int creatureOrdinal = FeedbackCreature.FC_COUNT.ordinal();
        spCreatureVoice.stop(iCreatureVoicesId[creatureOrdinal]);
        PlaySound(creatureOrdinal);
    }
}


private void PlaySound(int creatureOrdinal)
{
    Log.d(TAG, "PlayCreatureSound");
    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;      
    spCreatureVoice.play(iCreatureVoicesId[creatureOrdinal], leftVolume, rightVolume, 1, 0, 1);
}

private void ShowAnimatedCreature(int creatureOrdinal)
{
    Log.d(TAG, "ShowAnimatedCreature");
    // show the creature
    ibtnShapes[lastTargetLocation].setImageBitmap(bmCreatures[creatureOrdinal]); 
    // animate
    ibtnShapes[lastTargetLocation].startAnimation(rotate[0]);
}
...