使用 JDK 1.6 从 .mp3 读取数据的最佳插件 [关闭]
Posted
技术标签:
【中文标题】使用 JDK 1.6 从 .mp3 读取数据的最佳插件 [关闭]【英文标题】:Best addon for reading data from .mp3 with JDK 1.6 [closed] 【发布时间】:2012-04-03 11:32:35 【问题描述】:我正在尝试编写音乐可视化工具。我已经研究过了,sound.sampled 看起来像是一个很好的读取数据的库。但是,jdk 只能加载 .wav 文件。所以我正在寻找一个灵活的插件,可以让我加载 .mp3。
我将使用的类在这里: http://uk.answers.yahoo.com/question/index?qid=20100125081723AAdnYzf
附:让我知道你以前是否尝试过音乐可视化工具。
【问题讨论】:
【参考方案1】:然而,jdk..
重要的不是 JDK,而是 JRE。
..只能加载 .wav 文件。 ..
它可以加载Audiosystem.getAudioFileTypes()
返回的类型(子集)。如果您查看 Java 7 中 AudioFileFormat.Type
的文档,您将看到 5 种类型的列表,但最终检查是 JRE 返回的内容。
.. 所以我正在寻找一个灵活的插件,可以让我加载 .mp3。
可以将 JMF 的 mp3plugin.jar
添加到运行时类路径中,以向 JavaSound 添加对 MP3 解码的支持。
让我知道您之前是否尝试过音乐可视化工具。
Yup ;)
我制作了这个美妙的星空背景,并认为星星应该根据音乐闪烁和发光。你认为有可能检测到正在演奏的奇怪乐器吗?喜欢鼓还是弦?
我最近弄坏了自己的播放器并忙于其他事情,因此我正在使用 WinAmp 播放我最喜欢的曲目并观看 WinAmp 提供的一些 (300+) 可视化。我提到的原因是我的痕迹有两种类型,“示波器”风格和“李萨如”风格。查看上面链接的 YouYube 网站以获取每个示例。
WinAmp OTOH 提供了大量看似完全不同的风格,其中一些在视觉上与音乐密切相关,而另一些则完全不相关(它们本身就是漂亮的动画)。我认为那些与音乐有联系的人(除了代表轨迹本身 - 就像我的软件一样),是根据信号的音量来制作图形的,这有时可以代表一个节拍。
计算音量的正确方法是以分贝 (dB) 为单位的数字,但在我的软件中,我实现了一个更简单的算法来检测每个通道的 RMS。您可以在 Rasputina Track 中看到这些音量条。
它们在该图像(左下/右下角)中并不是特别清晰,但请观看 the video,我想您会发现它们更容易看到并为“脉动星”类型提供了良好的基础你所追求的效果(一个乘以基本亮度的数字)。要让星星根据频率(例如低音 - 低,小提琴 - 高)以不同的方式闪烁,您需要查看频谱分析之类的东西 - 快速傅立叶变换是一种方法。
【讨论】:
我有运动障碍,所以告诉我这是 JRE 无济于事:P...非常感谢您提供的链接。我制作了这个美妙的星空背景,并认为星星应该根据音乐闪烁和发光。你认为有可能检测到正在演奏的奇怪乐器吗?喜欢鼓还是弦乐? 是的,我已经研究了快速傅立叶,我很兴奋 :D .. 现在对我来说困难的一点是要找到时间来真正让它工作。 我一直在尝试使用您提到的那个 mp3plugin,但进展并不顺利。我尝试了许多来自不同来源的 mp3 文件,但它们都收到此错误:javax.sound.sampled.LineUnavailableException: line with format MPEG1L3 48000.0 Hz, unknown bits per sample, stereo, unknown frame size, unknown frame rate ,不支持。 试一试here显示的一些MP3。 同样的问题,我认为这是我使用它的方式。我找不到任何使用该插件的示例代码,所以我根据猜测编写了代码。我应该将我的代码作为一个新问题发布在 *** 上吗?【参考方案2】:Javazoom 有一个 mp3 格式的库。
http://www.javazoom.net/javalayer/javalayer.html
我自己没用过。但我知道其他人已经成功地做到了。
从混音中提取乐器的工具已成为现实,但我不知道它们是否已在 Java 中实现。我猜这是可能的,但目前只有相当大的努力和有限的成功。必须应对 Java 的某些方面,这些方面使得这类事情比在“C”家族语言中更棘手(缺乏实时保证:垃圾收集时间的变化、线程切换)。
【讨论】:
现在在 java 中计算或多或少是即时的。一直占着时间的是这幅画。这就是我将使用 open-gl 的原因。在垃圾回收方面,我可以先创建所有需要的对象,然后继续使用它们,而不是创建新对象。如果我让它尽可能高效,它应该没有任何问题。 :D 酷!期待看到你想出什么。顺便说一句,你看过Processing(又名Proce$$ing)吗?我见过一些用它构建的令人兴奋的可视化器,它是建立在 Java 之上的。 (例如:flight404vimeo.com/2120027的工作) 您所说的 Proce$$ing 究竟是什么?看起来很有希望。 糟糕。我应该写Proce55ing。但直接拼写也有效:processing.org 我只在演示页面和朋友链接到我的各种 flight404 的作品中看到过东西——所有这些看起来都非常令人印象深刻。它也在***中。 看起来很有希望,但是......我不知道,我发现当你达到如此高的水平时,即使使用专业语言,它也会限制你的能力......即使只是轻微的下降效率。以上是关于使用 JDK 1.6 从 .mp3 读取数据的最佳插件 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Idea 不断将 Kotlin 的编译目标从 1.8 切换到 1.6
使用 JavaFX MediaPlayer 从 MP3 读取 ID3v2 标签