Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javazoom BasicLayer:使用inputstreams进行搜索_Java_Mp3_Inputstream_Jlayer - Fatal编程技术网

Javazoom BasicLayer:使用inputstreams进行搜索

Javazoom BasicLayer:使用inputstreams进行搜索,java,mp3,inputstream,jlayer,Java,Mp3,Inputstream,Jlayer,我正在开发一个从互联网上传音乐的程序。当我播放歌曲时,我无法访问它的URL。我只得到一个输入流和一些信息,比如字节长度等等。我想实现一个seekbar,类似于youtube上的seekbar等。到目前为止,我一直设法将seekbar显示为一个JSlider,最大值是流的长度(以字节为单位),值根据歌曲中的当前位置(以字节为单位)而变化 现在BasicLayer有一个名为seek(long bytesToSkip)的函数,当用户输入移动并释放滑块时,我尝试调用该函数。但是seek()不会做任何事情

我正在开发一个从互联网上传音乐的程序。当我播放歌曲时,我无法访问它的URL。我只得到一个输入流和一些信息,比如字节长度等等。我想实现一个seekbar,类似于youtube上的seekbar等。到目前为止,我一直设法将seekbar显示为一个JSlider,最大值是流的长度(以字节为单位),值根据歌曲中的当前位置(以字节为单位)而变化

现在BasicLayer有一个名为seek(long bytesToSkip)的函数,当用户输入移动并释放滑块时,我尝试调用该函数。但是seek()不会做任何事情。没有日志消息,什么都没有。所以我下载了BasicLayer的源代码,发现seek(long-bytesToSkip)调用skipBytes(long-bytesToSkip),它检查要播放的数据是否是文件。如果不是的话,它什么也做不了

所以我删除了if子句,看看它会把我带到哪里。现在我在排队时遇到了一个例外

initAudioInputStream();
这将检查它所处理的数据类型,并为该类型的数据调用适当的方法。就我而言

initAudioInputStream(InputStream inputStream) {
    m_audioInputStream = AudioSystem.getAudioInputStream(inputStream);
    m_audioFileFormat = AudioSystem.getAudioFileFormat(inputStream);
}
在这两行中的第一行我得到了我的例外。这是一个EOFEException,所以我认为流没有足够的“缓冲”来获取audioInputStream。如果这个方法需要整个文件,我想我运气不好


我真的希望有人能帮我完成这项工作。我在这方面已经做了很长时间了。

好吧,你基本上不能跳到你还没有下载的部分音频。而且,如果不对MPEG流进行解码,也不能跳到MPEG流的特定百分比,因为编码数据和原始数据之间的关系是非恒定的(在当前的VBR流中,非常非恒定)。Youtube可以提供跳过,因为他们已经知道整个数据,可以预先计算大致的跳过目标,但你也不能这样做。那么你到底希望做什么呢?啊。。好吧,这是有道理的。太糟糕了。我正在编写一个从GrooveShark流式处理的程序。有了LastFM Api,我认为它甚至比从他们的网站上下载流媒体还要好。(他们没有类似的艺术家功能或艺术家简介)但因为我不是GrooveShark,所以无法实现跳过,因为我还不知道整个数据,对吗?该死我想我读过一些关于mp3frames被编码的东西,人们可以从任何帧开始,它仍然可以播放,这样你就不必知道其余的帧..是的,但首先你必须达到帧边界!我想你可以通过尝试相邻偏移来寻找帧边界,平均来说,误差可能不是太大,但这比你一开始预计的要多一些。你在那里失去了我……)我怎么会注意到我碰到了帧边界?基本上,当你重新开始MPEG解码时,你不会得到格式异常。。。