Java - 将 WAV 文件读取为浮点数组

发布于 2024-09-16 05:23:07 字数 468 浏览 7 评论 0原文

我正在尝试读取 WAV 文件(将来还会 MP3Ogg) 文件作为 Java 中的浮点数组,类似于 libsndfile 在 C 中。

我正在查看 javax.sampled 包中的各种文档,但我找不到关于如何做到这一点的明确解释;如果可能的话,我想避免重复使用外部库。

有什么建议吗?

I'm trying to read a WAV file (and in the future also MP3 and Ogg) file as an array of floats in Java, much like libsndfile in C.

I'm looking at the various documentation in the javax.sampled packages, but I can't find a clear explanation on how to do that; I'd like to avoid recurring to external libraries if possible.

Any suggestion?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

失而复得 2024-09-23 05:23:07

JavaSound 只会让您“原始”访问嵌入到 WAV 文件中的声音数据,例如 8 位未签名 PCM 或 16 位签名 PCM 数据(如果您的 WAV 文件是 PCM 编码的)。无论哪种情况,每个样本的值都在 0 到 255 或 -32768 到 32767 的范围内,您只需移动范围以适应 -1f 到 1f 即可。

您应该使用适当的源(文件、InputStream 或 URL)从 AudioSystem.getAudioInputStream(...) 开始,检查格式以检查样本大小和通道数,然后您可以读取和相应地转换来自 AudioInputStream 的 PCM 编码数据。

JavaSound will only give you "raw" access to the sound data embedded in the WAV file, e.g. 8 bit unsigned PCM or 16 bit signed PCM data (if your WAV files are PCM encoded). In either case, the value of each sample is in the range 0 to 255 or -32768 to 32767 and you simply have to shift the range to fit in -1f to 1f.

You should start with AudioSystem.getAudioInputStream(...) using an appropriate source (File, InputStream or URL), examine the format to check the sample size and the number of channels and then you can read and convert the PCM encoded data from the AudioInputStream accordingly.

请叫√我孤独 2024-09-23 05:23:07

找到这个页面:

http://www.jsresources.org/faq_audio.html

特别参见9.4 :如何从字节数组重建样本值?

通过将 java 的输出与 c++ (libsndfile) 和 matlab (wavread) 进行比较,它按预期工作。
有时间我会把代码放在我的github账号上

found this page:

http://www.jsresources.org/faq_audio.html

see in particular 9.4: How can I reconstruct sample values from a byte array?

It works as expected, by comparing java's output with c++ (libsndfile) and matlab (wavread).
I'm going to put the code on m github account when I have time

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文