Звуковой файл Android не воспроизводится полностью, резко прерывается

Сценарий

У меня проблема, которая начинает сводить меня с ума. В одном действии у меня есть следующий сценарий. При создании: - создайте список GPS - создайте прослушиватель местоположения - запустите список GPS и прослушиватель местоположения - запустите asyncTask, который загружает карту из Интернета / или загружает ее из кеша - воспроизводить файл wav, который является необработанным ресурсом, очень маленьким (около 63 кг), который короткий, в основном он говорит: «Давайте направимся к начальной точке», и он делает видимым текстовое представление в течение 10 секунд.

Проблема

Редко звук воспроизводится полностью. Иногда я слышу только «Поехали», иногда «Поехали к звезде», иногда вообще никакой игры. Как будто что-то блокирует звук. Я переместил звук в отдельный поток, но все равно безуспешно:

Код

private void ShowTextPlayVoice(String message, int soundResId)
    {
        txtProceed.setText(message);
        txtProceed.setVisibility(View.VISIBLE);
        final int soundId = soundResId;

        Handler splashHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                    switch (msg.what) {
                    case 0:
                            txtProceed.setVisibility(View.INVISIBLE);
                            break;
                    }
                    super.handleMessage(msg);
            }
        };

            Message msg = new Message();
            msg.what = 0;
            splashHandler.sendMessageDelayed(msg, 10000);

            Thread thread = new Thread() {
                public void run() {
                    MediaPlayer mp = MediaPlayer.create(ctx, soundId);
                    mp.start();
                    mp.setOnCompletionListener(new OnCompletionListener() {
                                    public void onCompletion(MediaPlayer mp) {
                                        mp.release();
                                    }
                                });
                }
            };
            thread.start();
    }

Спасибо всем за помощь.


person Alin    schedule 29.11.2010    source источник


Ответы (1)


После некоторых попыток вот рабочее решение

private MediaPlayer mediaPlayer = new MediaPlayer();

private void ShowTextPlayVoice(String message, int soundResId)
    {
        txtProceed.setText(message);
        txtProceed.setVisibility(View.VISIBLE);

        Handler splashHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                    switch (msg.what) {
                    case 0:
                            txtProceed.setVisibility(View.INVISIBLE);
                            break;
                    }
                    super.handleMessage(msg);
            }
        };

            Message msg = new Message();
            msg.what = 0;
            splashHandler.sendMessageDelayed(msg, 10000);

           new SoundTask().execute(soundResId);
    }

    protected class SoundTask extends AsyncTask<Integer, Void, Void>
    {
        @Override
        protected Void doInBackground(Integer... params) 
        {
            AssetFileDescriptor afd = ctx.getResources().openRawResourceFd(params[0]);

            try
            {   
                //final MediaPlayer mediaPlayer = new MediaPlayer();
                mediaPlayer.reset();
                mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength());
                mediaPlayer.prepare();
                mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
                    public void onPrepared(MediaPlayer arg0) {
                         mediaPlayer.seekTo(0);
                         mediaPlayer.start();
                                                });
                    }
                });
                afd.close();
            }
            catch (Exception e) {
            }

            return null;
        }
    }
person Alin    schedule 01.12.2010
comment
Привет, Алин, спасибо за публикацию решения. Это действительно хорошо работает для меня. - person axcdnt; 20.04.2011