2016-11-27 42 views
0

如果您想要在特定位置及時啓動.mp3文件的InputStream,如何計算要使用InputStream.skip()方法跳過的字節數量?(MP3)如何計算Java中的字節位置

我有機會獲得以下數據: 要在秒

  • 的mp3音樂的採樣率
  • 的MP3的樣本大小
  • 的MP3的幀率
  • 的啓動點MP3的幀大小

我試過尋找一個公式/算法,描述如何來計算它,但我找不到它。你們有沒有人知道如何做到這一點?

-Edit

我試圖做框架尺寸*幀率*位置(秒),但通過一個因子10除以10,它是斷仍然有其關閉3秒在跳過50秒時歌曲,甚至更多時跳過更大的塊。

+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++中做了相同的計算。如果Google員工訪問了此頁面,我就是這樣做的。到目前爲止它工作正常。我認爲用戶想要跳到時間skipToTime(秒):

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

的一點是,該框架尺寸並不總是相同的。特別地,第一幀和第二幀可能具有與其他幀不同的大小。所以最好分別測量它們。

我認爲前兩幀有不同的尺寸和你計算出它們,那麼整個計算將是這樣的:

int numberOfFrames = (skipToTime * sampleRate)/1152; 
numberOfFrames -= 2; // Or whatever it took to reach a stable frame size 
int skipPositionInBytes = (numberOfFrames * frameSize) + OFFSET; 

OFFSET是它採取達到穩定的幀大小的總字節數。如果花了2幀,則:

OFFSET = frameSize1 + frameSize2;