gpt4 book ai didi

java - 从音频缓冲区制作 VU 表

转载 作者:太空宇宙 更新时间:2023-11-04 08:23:18 25 4
gpt4 key购买 nike

所以我正在开发这个处理音频的应用程序,并且我有一个包含要发送到声卡的所有数据的缓冲区。我想知道是否有人对将其绘制为 VU 表的最佳方法有任何建议?如果有什么区别的话,我正在使用 Java。我见过的大多数示例都是针对物理 VU 表的。

编辑:我需要弄清楚如何在任何给定点获取音频缓冲区的音量

最佳答案

我的答案所做的是非常粗略地计算缓冲区绝对值的泄漏积分。一般来说,50% 的值是“关闭”的,因为数字音频需要再现正声压和负声压。如果您不明白,请参阅有关数字音频的维基百科文章。

真正的 VU 测量器是信号幅度的泄漏积分器。 (如果检流计或电子VU计芯片具有足够高的输入电阻,则简单的缓冲器和电容器就足够了)

所以对于 16 位示例,代码可能看起来像......(超出我的想象)

//set up
long total=0;
const long half = 32768; //2^(n-1)
const long decayInMilliseconds=30; // 30ms for the needle to fall back to zero.
// leak rate is enough to get the reported signal to decay to zero decayMilliseconds after
// the actual amplitude goes to zero.
int leakRate = (sample_rate*1000 /decayInMilliseconds) * half;


// goes in a loop to do the work
// can be executed on buffer-loads of data at less than the sampling rate, but the net number of calls to it persecond needs to equal the sampling rate.

int amplitude = buffer[i]-half;
total = total + abs(amplitude);
total = total - leakRate;
if( total > half) {
total = half;
}
//total is the current "vu level".

total 的值通常以对数刻度显示。

关于java - 从音频缓冲区制作 VU 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9104896/

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