2012-12-22 2 views
0

MediaPlayer를 사용하면 휴대폰이 멈출 때마다 MediaPlayer가 결함을 일으킨 다음 글리치가있는 오디오의 위치에서 계속 재생된다는 사실을 발견했습니다.
특정 시간에 오디오를 재생하기 때문에 구현에 좋지 않습니다. 나는 1000 밀리 초 길이의 노래가있는 경우

, 내가 원하는 어떤 특정 시간에 t 재생을 시작 MediaPlayer를 설정하는 기능입니다, 그리고 정확히 시간에 t + 1000에서 중지합니다.

이것은 실제로 두 가지가 필요하다는 것을 의미합니다.
1) 아주 작은 지연으로 특정 시간에 MediaPlayer를 시작하십시오.
2) MediaPlayer 글리치를 사용하면 글리치가있는 오디오를 무시하고 정시에 노래를 끝내기 위해 계속 재생할 수 있습니다.특정 시간에 재생할 MediaPlayer 바인딩

기능의 지연은 나에게 매우 중요하며 재생해야 할 시점에 정확하게 (~) 재생할 오디오가 필요합니다.

감사합니다.

답변

0

"정확히 재생할 오디오를 재생해야한다고 생각합니다. 당신을 얻을해야이 같은

뭔가 시작 :

int a = (mp.getCurrentPosition() + b); 
0

감사 대답 마이크에 대한. 그러나 불행하게도 이것은 나를 도와주지 않을 것이다.

MediaPlayer에 길이가 3:45 인 노래를 00:00에 재생하도록 요청했다고 가정 해 보겠습니다.
01:00에 나는 휴대 전화 자원을 사용하기 시작했습니다. 사용량이 많아서 전화가 흘러서 MediaPlayer가 2 초 동안 일시 중지되었습니다.

시간 :

00 : 00 ~ 01 : 00 -
01 : : : 00 ~ 01 00 나는 00에서 오디오를 들어 00-01을 : 02 - 전화가 glitched 때문에 침묵을 듣고
01 : 02-03 : - 나는 MediaPlayer를이 문제 도메인에 대한 사용의 나쁜 선택을 이해 무엇 때문에, 지금부터

왜곡 이초 시간 45 : 00-03 47 나는 01에서 오디오를 듣고 MediaPlayer은 높은 수준의 API를 제공합니다.

//Creating a new audio track 
AudioTrack audioTrack = new AudioTrack(...) 

//Get start time 
long start = System.currentTimeMillis(); 

// loop until finished 
for (...) { 
    // Get time in song 
    long now = System.currentTimeMillis(); 
    long nowInSong = now - start; 
    // get a buffer from the song at time nowInSong with a length of 1 second 
    byte[] b = getAudioBuffer(nowInSong); 
    // play 1 second of music 
    audioTrack.write(b, 0, b.length); 
    // remove any unplayed data 
    audioTrack.flush(); 
} 

을 지금은 1 초 동안 나는에게 단지 결함을있는 결함 후 나는 적절한시기에 적절한 오디오를 재생하여 자신을 수정하는 경우 :
나는 현재 내가 필요로 날을 제공해야되는 AudioTrack 클래스 실험하고 !

참고

이 코드를 테스트하지 않은 있지만, 그것을 할 수있는 올바른 방법처럼 보인다. 실제로 작동한다면이 게시물을 다시 업데이트 할 것입니다.

P.MediaPlayer에서 찾기 : 1. 내 음악을 확실히 지연시키는 무거운 작업 (여기는 매 밀리 초가 계산 됨) 2. 스레드가 안전하지 않으며 여러 스레드에서 사용할 수 없습니다 (검색, 시작 등 ...)