gpt4 book ai didi

java - Java 中与声音相关的分贝

转载 作者:行者123 更新时间:2023-12-01 15:02:47 26 4
gpt4 key购买 nike

我有一个使用变量 vol 在 Java 中播放声音的函数正如您在下面的代码中看到的。这个变量vol是 0 到 1 之间的小数。当我玩 0 时,声音基本上是尽可能低的音量,当我用1播放时,声音尽可能大。我怎样才能知道程序的声音发出了多少分贝?我想知道给定 vol 的分位数。

public static final AudioFormat DEFAULTAUDIOFORMAT = new AudioFormat(44100, 16, 2, true, true);

private void generateTone() {
int channels = DEFAULTAUDIOFORMAT.getChannels();
int sampleSizeInBytes = DEFAULTAUDIOFORMAT.getSampleSizeInBits() /8;
float sampleRate = DEFAULTAUDIOFORMAT.getSampleRate();
int timedSample = (int) (sampleRate * msecs / 1000f);
int len = timedSample * channels * sampleSizeInBytes;
int shapeLen = (int) (.05 * timedSample);
buf = new byte[len];
double scale;
for ( int i = 0, j = 0; i < timedSample; ++i )
{
int wave = (int)(vol * 32767.0 * Math.sin(2.0 * Math.PI * hz * i / sampleRate));
scale = 1.0;
if (i <= shapeLen) {
scale = i/(double)shapeLen;
}
else if (i >= timedSample - shapeLen) {
scale = 1.0-((i- timedSample + shapeLen)/(double)(shapeLen-1));
}
wave = (int)(scale * wave);
buf[j++] = (byte)(wave >>> 8);
buf[j++] = (byte) wave;
buf[j++] = (byte)(wave >>> 8);
buf[j++] = (byte) wave;
}
}

最佳答案

第 1 步:找到 SPL 计。如果您有任何类型的制造或实验室操作,安全人员应该拥有一个或知道是谁拥有。如果没有,你可以下类后在 parking 场闲逛,看看谁拥有一辆音响声音大得愚蠢的汽车,然后询问他们。

第 2 步:建立对用户有意义的引用。手机铃声?也许可以在距离设备一米的露天进行测量。 (也许也在牛仔裤的口袋里......:) .) 汽车设备?在车内测量从设备到驾驶员座椅的常见距离。制造业?在运算符(operator)坐的公共(public)距离处的水泥地板上进行测量。你明白了。

第 3 步:设置仪表并进行引用测量。由于这只是一个猜测,我可能会读取从最小值到最大值的大约十个读数,然后在点之间插入直线。如果您是数学极客,您可以拟合一条曲线。

第 4 步:在您的软件中放置一个查找表,使用之前的数据根据​​音量级别查找引用 SPL。

第 5 步:在“关于”框中的某个位置解释用于测量的引用环境。

第 6 步:在您的产品上添加巨大的免责声明,表明声音输出值仅供引用估计,并不证明输出水平符合任何职业安全准则。

与 java 没有任何关系,但是:

声压级分贝是特定地点空气中产生的压力相对于正常人可以听到的最安静声音的比率。

这不是您可以描述的声音系统的绝对数量,例如电压或功耗。说“这是一个 90 dB-SPL 信号”是没有意义的。供引用的声明必须更像是:

“这是在 3mx3m 隔音工作室中,在距离扬声器 2 米处测得的 90dB-SPL 信号。”

您需要在受控环境中测量整个系统,然后您将能够开发一个经验模型来预测源代码中的控制信号与系统输出压力的关系。

关于java - Java 中与声音相关的分贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13404547/

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