(MP3)如何用Java计算字节位置

时间:2016-11-27 19:55:13

标签: java audio decoding

如果要在特定位置启动.mp3文件的InputStream,如何使用InputStream.skip()方法计算要跳过的字节数?

我可以访问以下数据: 你要在几秒钟内开始的那一点

  • mp3的采样率
  • mp3的样本量
  • mp3的帧率
  • mp3的帧大小

我试过搜索一个描述如何计算它的公式/算法,但我找不到它。你们中的任何人都知道怎么做吗?

- 编辑

我尝试做了frameize * framerate * position(秒),但是它被关闭了10倍。将它除以10仍然在歌曲中跳过50秒时将其关闭3秒,在跳过更大的块时甚至更多。

1 个答案:

答案 0 :(得分:0)

我在C ++中进行相同的计算。如果谷歌搜索到达此页面,我就是这样做的。到目前为止它工作正常。我假设用户想跳到时间var webView : UIWebView? override func viewDidLoad() { if let foo = self.foo { self.webView = UIWebView(frame: self.view.frame) scrollView.addSubView(self.webView!) } } override func viewDidAppear() { // How do I use my conditionally created webView here? func doSomething(webView: UIWebView) { // Do stuff } if let myWebView = self.webView{ doSomething(webView: myWebView) } } (以秒为单位):

var webView : UIWebView?
    override func viewDidLoad() {
        if let foo = self.foo {
            self.webView = UIWebView(frame: self.view.frame)
            scrollView.addSubView(self.webView!)
        }
    }

    override func viewDidAppear() {
        // How do I use my conditionally created webView here?

        if let myWebView = self.webView{

            self.doSomething(webView: myWebView)

        }

    }

    func doSomething(webView: UIWebView) {
        // Do stuff
    }

有一点是frameSize并不总是相同的。特别地,第一帧和第二帧可能具有与其他帧不同的尺寸。所以最好分别测量它们。

我假设前两帧有不同的尺寸,你计算它们,然后整个计算将如下所示:

skipToTime

OFFSET是达到稳定帧大小所需的总字节数。如果需要2帧,那么:

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