Soundpool гуляе добра, калі іншыя задачы выконваюцца ў фонавым рэжыме і ламае, калі гуляе сам па сабе

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

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. Змена прыярытэту

1

2 адказы

Гэта можа быць з-за таго, як вы рэгулюеце структуру FeedbackCreature, ці быць у спосабе прыпынку. Вы спрабуеце гуляць два гукавых эфектаў, у той жа час?

Паколькі гэтыя два метаду падзяляюць столькі кода, я прапаную вам аб'яднаць іх, як у наступным. Гэта можа дапамагчы вам звузіць праблему.

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]);
}
0
дададзена
Такім чынам, то толькі адрозніваецца метад spCreatureVoice.stop, ці як называецца гэты метад. Калі ласка, пост метад прыпынку, а частка кода, які выклікае гэта на выпадак адмовы VRS нармальны выпадак.
дададзена аўтар Noah, крыніца
Гукі басейн згадвае: Звярніце ўвагу, што, паколькі патокі могуць быць спыненыя з-за недахопу рэсурсаў, то StreamID з'яўляецца спасылкай на пэўны асобнік патоку. няма Калі паток спыняецца, каб дазволіць больш высокі прыярытэт патоку гуляць, паток больш не сапраўдны. Аднак ужыванне дазволена выклікаць метады StreamID без памылак. Гэта можа дапамагчы спрасціць логіку праграмы, так як прыкладанне не павінна дакранацца сябе жыццёвага цыкла патоку. developer.android.com/reference/android/media/SoundPool.html
дададзена аўтар Noah, крыніца
Ваш код трохі чысцей, але мая праблема застаецца. Я толькі гуляць 1 струмень у той час, але толькі тады, калі анімацыя гуляе з ім гук чысты. Анімацыя з'яўляецца простым кручэннем.
дададзена аўтар Redrori, крыніца
Прыпынак з'яўляецца часткай АПА Soundpool, і я стараюся, каб выдаліць яго без паляпшэння. Зваротная сувязь (ісціна), працуе і зваротная сувязь (хлусня) гучыць зламаная. Адзінае, што я магу думаць пра тое, што альбо гэта адбываецца толькі на эмулятары або што АНДРОІД працуе рэчы ў фонавым рэжыме, калі я не заграбастаць ўсе працэсара з анімацыяй.
дададзена аўтар Redrori, крыніца
ОК, так што я спрабаваў павялічыць колькасць патокаў у канструктару Soundpool і змяніць тып патоку без паляпшэння. З вашай цытаты вышэй і здаровага сэнсу можна было б падумаць, што гук будзе ламацца, калі анімацыя гуляе, а не наадварот.
дададзена аўтар Redrori, крыніца
Я ў цяперашні час, гледзячы на ​​тое, што напісаў гэты чалавек:
дададзена аўтар Redrori, крыніца
дададзена аўтар Redrori, крыніца
Спробы ўзнавіць гук на іншую тэму ці служба ня вырашыць маю праблему
дададзена аўтар Redrori, крыніца

Падобна на тое, гэта праблема эмулятара. Ня чуючы ніякіх праблем на рэальным прыладзе.

0
дададзена
Гэта даволі добра вядома, што эмулятар для Android не з'яўляецца лепшым. Гэта добры інструмент, але вы павінны паспрабаваць зрабіць большую частку вашага тэставання на прыладзе. (Прынамсі, пакуль вы не павінны праверыць прылады, якія вы не можаце дазволіць сабе купіць кратныя;))
дададзена аўтар Codeman, крыніца