2013-05-24 1 views
3

Я разрабатываю приложение, которое переводят фразы с английского на другой язык. Я использую ExpandableListView и данные привязки через BaseExpandableListAdapter. Вкратце: когда вы нажимаете на элемент listitem, открывается подпункт, где вы можете видеть перевод, и в то же время говорит голос. Проблема в том, что время от времени звук не воспроизводится - особенно для более длинных фраз. И что я могу видеть в LogCat является следующее:Образец не готов звуковой пул

1) Когда звук не воспроизводится на всех ...

Образец не был загружен. Ожидание 30 мс. ОБРАЗЦА X НЕ ГОТОВ

2) когда звук ФАКТИЧЕСКИ ИГРАЛИ

* Образец не был загружен. Ожидание 30 мс.


Таким образом, если звук воспроизводится, логарифм сообщает, что «образец не был готов».

Хорошо, это информация, которую дает logcat. Другое дело, что вероятность сбоя больше для больших звуковых файлов. Малые звуковые файлы воспроизводятся в течение двух секунд (около 30 КБ) и больше около 4 секунд (около 60 КБ).

Прямо сейчас я не могу понять, как решить эту проблему. Я искал интернет для решений, особенно этот сайт. Я и пытался ....

1) использовать OnLoadCompleteListener()

и его не работает

2) делает какое-то время цикла.

Не работает либо

Что я мог сделать неправильно. Я даю код ниже. Может быть, что-то неловкое? Например, я использовал слушателя неправильно?

Cincerely

expList.setOnGroupExpandListener(new OnGroupExpandListener() { 
    public void onGroupExpand(int groupPosition) { 

     final int group_position = groupPosition; 
     loaded = false; 


     int nmbr_childs = adapter.getChildrenCount(groupPosition); 
     if (nmbr_childs == 1) { 


      myVoice = soundPool.load(PhraseActivity.this, sound[group_position][0], 2); 
      soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() { 
        @Override 
        public void onLoadComplete(SoundPool soundPool, int sampleId, 
         int status) { 
        loaded = true; 
        } 
      }); 

      if (loaded) { 
       soundPool.play(myVoice, 20, 20, 1, 0, 1f); 
      } 
      else { 
       System.out.println("something wrong with soundpool!"); 
      } 


     } 

     group = groupPosition; 
      int len = adapter.getGroupCount(); 
      for (int i = 0; i < len; i++) { 
       if (i != groupPosition) { 
        expList.collapseGroup(i); 
       } 
      } 
     } 
    }); 

ответ

7

Я думаю, вы должны изменить свой код следующим образом:

myVoice = soundPool.load(PhraseActivity.this, sound[group_position][0], 2); 
     soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() { 
       @Override 
       public void onLoadComplete(SoundPool soundPool, int sampleId, 
        int status) { 
        soundPool.play(myVoice, 20, 20, 1, 0, 1f); 
       } 
     }); 

Он работал для меня.

+0

Кажется, что все нормально. Попробуем больше сегодня, но теперь я могу сказать, что это намного лучше. МНОГО СПАСИБО ВАМ :-) :-) –

+0

Добро пожаловать. Я рад, что смогу вам помочь. – Panky90