2016-11-27 3 views
0

특정 위치에서 .mp3 파일의 InputStream을 시작하려면 InputStream.skip() 메서드를 사용하여 건너 뛸 바이트 수를 어떻게 계산합니까?(MP3) Java에서 바이트 위치를 계산하는 방법

나는 다음과 같은 데이터에 액세스 할 수 있습니다 당신이 초

  • MP3 파일의 샘플 속도
  • MP3 파일의 샘플 크기
  • MP3 파일의 프레임 속도
  • 에서 시작하고자하는 지점을 mp3의 프레임 크기

나는 방법을 설명하는 수식/알고리즘을 찾으려고 노력했다. 그것을 계산하지만 그것을 찾을 수 없습니다. 이 작업을하는 방법을 아는 사람이 있습니까? 50 초 스킵 때

-Edit

I가 FRAMESIZE의 * 프레임 속도 * 위치 (초)를 수행하려했지만 그 (10)을 분할하는 요소 (10)에 의해 오프 여전히 3초하여 떨어져 있었다 노래, 더 큰 덩어리를 건너 뛰더라도.

+0

가능한 복제 [?를 MP3에서 오디오 데이터를 얻을 방법] (http://stackoverflow.com/questions/938304/how-to-get-audio-data- from-a-mp3) – teppic

+0

@teppic 아니오, JLayer를 사용하고 있습니다 – ImJustACowLol

+0

링크 된 답변은 Jlayer의 사용법을 설명합니다. – teppic

답변

0

저는 C++에서 같은 계산을하고 있습니다. googler가이 페이지에 도달하는 경우, 여기 내가 어떻게하는지 설명합니다. 지금까지 잘 작동합니다. 나는 사용자가 시간 (초) skipToTime로 이동하고자하는 가정

int numberOfFrames = (skipToTime * sampleRate)/1152; 
int skipPositionInBytes = (numberOfFrames * frameSize); 

한 점은 FRAMESIZE이 항상 동일되지 않는 것입니다. 특히 첫 번째와 두 번째 프레임은 다른 프레임과 크기가 다를 수 있습니다. 따라서 개별적으로 측정하는 것이 좋습니다.

내가 처음 두 프레임은 서로 다른 크기를 가지고 가정하고 당신이 그들을 계산 한 다음 전체 계산은 다음과 같이 표시됩니다
int numberOfFrames = (skipToTime * sampleRate)/1152; 
numberOfFrames -= 2; // Or whatever it took to reach a stable frame size 
int skipPositionInBytes = (numberOfFrames * frameSize) + OFFSET; 

이 안정적인 프레임 크기에 도달하는 데 걸린 총 바이트 수는 OFFSET. 그 다음이 개 프레임을했다 경우

OFFSET = frameSize1 + frameSize2;