gpt4 book ai didi

java - 如何在 Java 中读/写高分辨率(24 位,8 channel ).wav 文件?

转载 作者:行者123 更新时间:2023-12-02 22:24:31 27 4
gpt4 key购买 nike

我正在尝试编写一个操作高分辨率 .wav 文件的 Java 应用程序。我在导入音频数据时遇到问题,即将 .wav 文件转换为 double 数组。

当我使用标准方法时,会抛出异常。

AudioFileFormat as = AudioSystem.getAudioFileFormat(new File("orig.wav"));
-->
javax.sound.sampled.UnsupportedAudioFileException: file is not a supported file type

这是根据soxi的文件格式信息:

dB$ soxi orig.wav
soxi WARN wav: wave header missing FmtExt chunk



Input File : 'orig.wav'
Channels : 8
Sample Rate : 96000
Precision : 24-bit
Duration : 00:00:03.16 = 303526 samples ~ 237.13 CDDA sectors
File Size : 9.71M
Bit Rate : 24.6M
Sample Encoding: 32-bit Floating Point PCM


任何人都可以建议将此音频导入Java的最简单方法吗?

我尝试过使用一些技巧。如上所述,我已经尝试过 Java AudioSystem(在 Mac 和 Windows 上)。我也试过使用 Andrew Greensted 的 WavFile class ,但这也会失败(WavFileException:不支持压缩代码 3)。一种解决方法是使用 sox(使用 -b 16 标志)将音频转换为 16 位,但这是次优的,因为它增加了本底噪声。

顺便说一句,我注意到 libsndfile 可以读取该文件。我最好的选择是围绕 libsndfile 编写一个 jni 包装器,还是您能提出更快的建议?

请注意,我不需要播放音频,我只需要对其进行分析、操作,然后将其写出到一个新的 .wav 文件中。

* 更新 *

我通过修改 Andrew Greensted 的 WavFile class 解决了这个问题.他的原始版本只读取编码为整数值的文件(“格式代码 1”);我的文件被编码为浮点数(“格式代码 3”),这就是导致问题的原因。

当我有机会时,我会发布 Greensted 代码的修改版本。同时,如果有人想要,请给我留言。

最佳答案

你可以自己读取wav数据,其实没那么难。只需搜索 WAV 文件格式信息即可。

关于java - 如何在 Java 中读/写高分辨率(24 位,8 channel ).wav 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6458377/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com