2016-11-27 12 views
0

特定の位置で.mp3ファイルのInputStreamを開始する場合、InputStream.skip()メソッドを使用してスキップするバイト数を計算するにはどうすればよいですか?(MP3)Javaのバイト位置を計算する方法

私は、次のデータへのアクセスがあります。 あなたは数秒でで開始したいポイント

  • mp3のサンプル・レート
  • mp3のサンプルサイズ
  • mp3のフレームレート
  • mp3のフレームサイズ

私はどのようにそれを計算するために私はそれを見つけることができませんでした。あなたの誰かがこれを行う方法を知っていますか?

-EDIT

私はフレームサイズ*フレームレート*の位置(秒)をやってみましたが、50秒にスキップされたときには、10で割るファクタ10でオフにした、まだ3秒でそれを持っていました曲、より多くのチャンクをスキップする場合はさらに。

+0

可能な複製を(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); 

一つのポイントは、フレームサイズが常に同じではないということです。特に、第1および第2のフレームは、他のフレームとは異なるサイズを有することがある。したがって、それらを別々に測定する方が良いです。

私は最初の2つのフレームを前提とは異なるサイズを持っていたし、あなたがそれらを計算し、その後、全体の計算は次のようになります。

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

は、それが安定したフレームサイズに到達するために要した総バイト数ですOFFSET。それはその後、2つのフレームを取った場合:[?MP3からオーディオデータを取得する方法]の

OFFSET = frameSize1 + frameSize2; 
関連する問題