gpt4 book ai didi

java - 如何将 .wav 文件转换为 float 组(编辑 float 组,例如添加两个信号)并返回到 .wav 文件而不使用白噪声

转载 作者:行者123 更新时间:2023-12-02 05:29:39 27 4
gpt4 key购买 nike

我正在尝试在处理过程中通过光线追踪对可听度进行编程。要根据光线追踪器中的信息编辑样本,我需要将 .wav 文件(文件格式:PCM 签名、16 位、立体声、2 字节/帧、小端)转换为 float 组。

我通过audioInputStream 和DataInputStream 转换了音频,并将音频加载到字节数组中。

然后我将字节数组转换为 float 组,如下所示。

byte[] samples;
float[] audio_data = float(samples);

当我将 float 组转换回 .wav 文件时,我得到了原始音频文件的声音。

但是当我向原始信号添加另一个 float 组并将其转换回 a.通过上述方法(即使我添加相同的信号)生成.wav文件,我得到一个白噪声信号而不是想要的信号(我可以听到白噪声调制下的原始信号,但非常非常安静)。

我之前读到过这个问题,从 float 组到字节数组的转换可能会出现问题。这是因为 float 是 32 位数据类型,而 byte(在 java 中)只有 16 位,不知何故,字节错误地混合在一起,所以结果是白噪声。在处理中,有一种带符号 16 位整数的数据类型(名为:“short”),但我无法再修改幅度,因为因此我需要浮点值,而我无法将其转换为短值。

我还尝试通过将信号从 16 位值 (-32768/32767) 调制到 -1/1 的值并在混合(添加)信号后再次返回来处理 float 组中的溢出(幅度)。结果给了我白噪音。当我添加超过 2 个信号时,它没有给我任何结果(什么也听不到)。

我想要解决的具体问题是以 float 组的形式添加许多信号(超过 1000 个,具有适当的延迟以创建一种混响)。然后我想将它们组合成一个 float 组,我想将其保存为没有白噪声的音频文件。

希望大家能够帮助我。

最佳答案

如果您有真正的 PCM 数据点,使用简单的加法应该没有问题。唯一的问题是,在极少数情况下(假设您的音频一开始不是太热)这些值会超出范围。这往往会产生刺耳的失真,而不是白噪声。您收到白噪声的事实表明,您可能没有将 PCM 总和正确地转换回您输出格式的字节。

这是我在 AudioCue 中使用的一些代码将 PCM 转换回字节。假定格式为 16 位、44100 fps、立体声、小端。我正在使用 PCM 作为标准化 float 。该算法一次对缓冲区的数据进行转换。

for (int i = 0, n = buffer.length; i < n; i++)
{
buffer[i] *= 32767;

audioBytes[i*2] = (byte) buffer[i];
audioBytes[i*2 + 1] = (byte)((int)buffer[i] >> 8 );
}

有时,像 Math.min(Math.max(audioval, -1), 1) 或 Math.min(Math.max(audioval, -32767), 32767) 这样的函数用于将值保持在范围内。更复杂的限制器或压缩器算法将缩放音量以适应。但如果不处理这个问题,结果应该是失真,而不是白噪声。

如果错误发生在其他阶段,我们将需要查看您的更多代码。

说了这么多,祝您在 1000 点回声阵列混响方面好运。我没有听说过这种方法有效。也许现在有处理器可以处理计算负载? (您是否尝试实时执行此操作?)我对实时混响进行编码的唯一成功是使用 Schroeder 方法,插入 CCMRA Freeberb 中的结构和值。 ,使用 Craig Lindley 现已古老(版权所有 2001)的书“Digital Audio with Java”中的代码进行工作。该书的大部分内容涉及过时的 GUI 代码(Swing 之前的版本!),但他为 AllPass 和 Comb 过滤器提供的代码仍然有效。

我记得当我从事这项工作时,我找到了更好的混响引用来尝试和编码,但我必须进行一些真正的挖掘才能尝试找到我的笔记。当时我感到头晕目眩,因为算法是通过框图呈现的,没有编码细节,甚至没有伪代码。不过我想再次研究这个问题,并获得比施罗德类型更好的混响。 Schoeder 对于不太具有冲击力的声音来说还算可以。

获得实时光线追踪解决方案将是一项有值(value)的成就。 AR/VR 和游戏中的许多应用。

关于java - 如何将 .wav 文件转换为 float 组(编辑 float 组,例如添加两个信号)并返回到 .wav 文件而不使用白噪声,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56207937/

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