Android: Bagaimana cara menghentikan pemutaran media (mp3) dalam durasi tertentu? [duplikat]

Kemungkinan Duplikat:
Android: Bagaimana cara menghentikan pemutaran media (mp3) ketika milidetik tertentu tiba?

Saya mempunyai file mp3 dan saya ingin memutar kata tertentu di dalamnya. Saya memiliki waktu mulai (6889 mdtk) dan waktu berakhir (7254 mdtk) sehingga durasinya adalah 365 mdtk. Saya ingin memutar bagian 365 ms dari file mp3 saya.

Saat saya menjalankan kode ini, seharusnya kata "He" diputar, tetapi "He wan". Kata setelah "Dia" adalah "diinginkan". Saya hanya ingin memainkan kata "Dia". Apakah itu mungkin?

package com.example.playword;

import java.io.IOException;


import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;

public class PlayWord extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final Handler mHandler = new Handler();

        final TextView labelTxt = (TextView) findViewById(R.id.labelTxt);

        labelTxt.setText("Playing word...");

        final MediaPlayer mPlayer = MediaPlayer.create(this, R.raw.nicholas);

        try {
            mPlayer.prepare();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        mPlayer.seekTo(6889); //this is the start time of the word i want to play
        mPlayer.start();

        //how can I end it at 7254?

        mHandler.post(new Runnable(){

            public void run(){ 

                //7254 is the end time of the word i want to play
                //7410 is the start time of another word
                if(mPlayer.getCurrentPosition() > 7254 && mPlayer.getCurrentPosition() < 7410 ){ 
                    labelTxt.setText("Stop: " + mPlayer.getCurrentPosition() );
                    mPlayer.stop();
                }

                mHandler.postDelayed(this, 1);
            }    
        });


    }
}

person Kris    schedule 28.03.2011    source sumber
comment
Jangan ajukan pertanyaan (hampir) yang sama: stackoverflow.com/questions/5454452/   -  person Dante May Code    schedule 28.03.2011
comment
Terima kasih telah menghubungkannya ke pertanyaan saya yang lain :)   -  person Kris    schedule 29.03.2011


Jawaban (2)


Entah MediaPlayer tidak akan merespons permintaan secepat itu, sehingga tidak banyak yang dapat Anda lakukan, atau pengendali tertunda yang berulang kali tidak diproses dengan cukup cepat. Saya tidak tahu apakah ini akan membantu tetapi Anda dapat mencoba memposting satu Runnable ke handler Anda yang melakukan loop alih-alih memposting ulang dirinya sendiri. Mungkin akan lebih responsif.

    mHandler.post(new Runnable(){
        public void run(){ 
            while(mPlayer.isPlaying()) {
              if(mPlayer.getCurrentPosition() > 7254 && mPlayer.getCurrentPosition() < 7410 ){ 
                  labelTxt.setText("Stop: " + mPlayer.getCurrentPosition() );
                  mPlayer.stop();
                  break;
              }
            }
        }    
    });
person Nick    schedule 28.03.2011

Haha :) Jangan tersinggung, tapi pertanyaanmu sangat menyenangkan. Pokoknya ada cara mutlak dan lebih mudah untuk melakukan tugas seperti itu. Rekam audio yang hanya memutar "He" =)) dan masukkan sumber daya mentah sehingga MediaPlayer Anda hanya akan memutar satu karya he :>

person ForeverNights    schedule 28.03.2011
comment
Terima kasih atas idemu kawan! Hanya saja saya agak baru mengenal pengembang Android. :) - person Kris; 29.03.2011