Использование AsyncTask для воспроизведения PCM AudioTrack без зависания - PullRequest
0 голосов
/ 15 декабря 2010

Мне может понадобиться помощь с этим.вот проблема и то, что я сделал до сих пор.

проблема:

Я хочу воспроизвести файл PCM, который я записал ранее.так как этот файл может быть больше, я играю его с помощью аудиотрека.это работает довольно хорошо.но я не хочу, чтобы активность заморозилась.я уже пробовал нить и так далее, теперь я работаю над асинхронной задачей, но активность все еще не отвечает.

это то, что я получил:

в пользовательском интерфейсе, я создаю новый объект waveplayer и пытаюсь запустить его.

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    /**
     * Handles ShortClicks for ListView
     */
    OnItemClickListener itemlistener = new OnItemClickListener(){

        MediaPlayer mp=null;
        String currentlyplaying = null;

        @Override
        public void onItemClick(AdapterView<?> adaptview, View clickedview, int position,
                long id) {

            String pathtofile = (String) adaptview.getItemAtPosition(position);
            if(pathtofile.contains(".wav"))
            {
                //HQ!
                if(mp==null)
                {
                    clickedview.setSelected(true);
                    try
                    {

                        WavePlayer t = null;
                        //TODO: //add thread waveplayer to play file!
                        try {
                            t = new WavePlayer(pathtofile);
                            t.execute((Void)null);
                        } catch (Exception e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }

                        clickedview.postDelayed(new Deselector(clickedview, t), 1000);

                        currentlyplaying = pathtofile;


                    } catch (IllegalArgumentException e) {
                        e.printStackTrace();
                    } catch (IllegalStateException e) {
                        e.printStackTrace();
                    } 
                }
                else
                {

                }

            }
            else{
                //NO HQ
                //you dont need to know that :)


            }


        }
    };

деселектор класса:

/**
 * This Runnable tries to deselect the view after playing the audio file.
 * @author quant
 *
 */
class Deselector implements Runnable
{
    View view = null;
    AsyncTask thread;

    Deselector(View view, AsyncTask t)
    {
        this.view = view ; 
        this.thread = t;
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        try {
            view.setSelected(false);
            thread.cancel(true);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

все, что касается воспроизведения, работает хорошо, я слышу свой голос и само воспроизведениеработает нормально ... но все равно графический интерфейс пользователя в основной деятельности зависает / не отвечает.

надеюсь, что кто-то может помочь.

заранее спасибо

markus

1 Ответ

0 голосов
/ 22 декабря 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...