0

Androidでmp3を再生するときに問題が発生します。遅延やラグのようなものです。例:

「こんにちは、お元気ですか?」を再現する必要がある場合、「お元気ですか?」のみが再生されます。または非常に低い「こんにちは」と言います。

ViewSonic V220 の 22 インチ タブレットで発生し、他のほとんどのデバイスでは正常に動作しますが、失敗しているように見えます。

他のアプリ (YouTube やメディア プレーヤーなど) が正常に動作するため、それは奇妙です。

これは私のコードです、多分私は何か間違ったことをしています:

public class SoundManager implements MediaPlayer.OnPreparedListener, MediaPlayer.OnCompletionListener {
private Parent mParent;
private MediaPlayer mediaPlayer;

String[] mp3_array;
int counter = 0;

public SoundManager(Parent parent) {
    mParent = parent;
}

public void playSound(String[] url) throws IllegalArgumentException,
        IllegalStateException, IOException {
    mp3_array = url;
    mediaPlayer = new MediaPlayer();
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    if (mediaPlayer.isPlaying()) {
        mediaPlayer.reset();
    }

    mediaPlayer.setDataSource(url[0]);
    mediaPlayer.setOnCompletionListener(this);
    mediaPlayer.setOnPreparedListener(this);

    mediaPlayer.prepareAsync();
}

public void stopMediaPlayer() {
    if (mediaPlayer != null) {
        mediaPlayer.release();
        mediaPlayer = null;
        mp3_array = null;
        counter = 0;
    }
}

@Override
public void onCompletion(MediaPlayer mp) {
    try {

        Integer c = counter;

        if (mp3_array != null && counter + 1 < mp3_array.length) {
            mp.reset(); 
            mp.setOnCompletionListener(this);
            mp.setOnPreparedListener(this);
            counter += 1;
            mp.setDataSource(mp3_array[counter]);
            mediaPlayer.prepareAsync();
        } else {
            if (mParent != null)
                mParent.invokeJs("playSoundEnded()");
            mp.release();
            mp = null;
            mp3_array = null;
            counter = 0;
        }

    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SecurityException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

@Override
public void onPrepared(MediaPlayer mp) {
    if (mParent != null)
        mParent.invokeJs("playSoundStarted()");
    mp.start();

}

}

4

0 に答える 0