gpt4 book ai didi

java - Java 声音缩放

转载 作者:行者123 更新时间:2023-12-01 08:51:39 26 4
gpt4 key购买 nike

我正在尝试对音频输入执行线性缩放,每个 channel 上的缩放比例相同。

总体效果是输入流的幅度逐渐减小,直到静音。因此,我的第一个样本将保持不变,而我的最后一个样本的幅度将为 0。我想知道你是如何实现这个的。

到目前为止,这就是我所拥有的缩放代码,并且想知道您是否仍然需要缩放示例,以便它位于 16 位二进制补码范围之间。

 for (int i=0; i<data.length; ++i){ // data[i] is sample in intger form
data[i] = (int) (data[i]*(something/something));
}

如果可以解释缩放到特定因素的情况会很有帮助吗?

谢谢!

最佳答案

我假设您正在使用音频数据的短值(例如,[-32768..32767]),并且字节之间的转换在其他地方处理。

在分数“某物/某物”中,分子的范围从等于分母的值一直到零,而分母保持固定值。

例如,如果您将音量范围分为 128 级,则最大音量将为 128/128,最安静音量将为 0/128。

为了避免除法,您可以预先计算等于 1/128 的系数,然后将其乘以 [0..128](含)范围内的值。

然后你就会得到“一些* precalculatedFactor”,它可能运行得更快一点。

但是,线性体积缩放会带来一些问题。实际感知的音量不是线性跟踪的。因此,X 的音量间隔可能几乎不会在高端产生音量差异,但会很大以致于在低端造成不连续性和咔嗒声。

我认为人们经常使用指数函数来更好地将音量映射到线性输入。对于哪一个最好存在分歧。但假设您的音量旋钮从 [0..1] 开始。如果在应用该值之前对其进行立方,例如,输入 0.5 试图创建 1/2 响度,则变为 (0.5 * 0.5 * 0.5) => 0.125,这将比 0.5 更接近 1/2 响度。

因此,“某事 * 某事 * 某事 * precalculatedFactorCubed”可能效果更好。

关于java - Java 声音缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42356762/

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