gpt4 book ai didi

java - 如何从 Java 中的 SourceDataLine 获取字节数组的体积

转载 作者:行者123 更新时间:2023-12-02 05:55:38 25 4
gpt4 key购买 nike

我已经编写了一个用于点对点语音聊天的Java程序,但为了使流量尽可能低,我想分析捕获的数据并使低音量部分完全静音。问题是,我不知道如何从字节数组中获取音量以及如何使部件静音。

最佳答案

您必须在数据上滑动一个时间窗口(例如 0.25 秒的数据)并计算均方根以查看该时间段是否静音。 0.25 秒到底有多少字节取决于您的样本的音频速率。

因此,假设您的数据位于 byte[] audioData 中,并且该音频数据是带符号的 8 位 PCM 数据,您将像下面一样计算 RMS...然后使用 1000 这样的值作为静音阈值。

/** Computes the RMS volume of a group of signal sizes */
public double volumeRMS(int start, int length) {
long sum = 0;
int end = start + length;
int len = length;
if (end > audioData.length) {
end = audioData.length;
len = end - start;
}
if (len == 0) {
return 0;
}
for (int i=start; i<end; i++) {
sum += audioData[i];
}
double average = (double)sum/len;

double sumMeanSquare = 0;;
for (int i=start; i<end; i++) {
double f = audioData[i] - average;
sumMeanSquare += f * f;
}
double averageMeanSquare = sumMeanSquare/len;
double rootMeanSquare = Math.sqrt(averageMeanSquare);

return rootMeanSquare;
}

关于java - 如何从 Java 中的 SourceDataLine 获取字节数组的体积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23116426/

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