java - 使用java提取音频增益
问题描述
我想知道 wav 音频文件的增益/分贝和其他可能的参数。但是 Clip.getLevel() 方法总是返回 -0.1 值的增益。
public void prepareAudio() {
try {
Line.Info linfo = new Line.Info(Clip.class);
Line line = AudioSystem.getLine(linfo);
clip = (Clip) line;
clip.addLineListener(this);
AudioInputStream ais = AudioSystem.getAudioInputStream(file);
clip.open(ais);
clip.start();
do {
Thread.sleep(300);
} while (clip.isActive());
clip.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public void update(LineEvent event) {
LineEvent.Type type = event.getType();
if (type == LineEvent.Type.OPEN) {
System.out.println("OPEN");
} else if (type == LineEvent.Type.CLOSE) {
System.out.println("CLOSE");
} else if (type == LineEvent.Type.START) {
System.out.println("START");
while (clip.isActive()) {
System.out.println(clip.getLevel()); // get gain
}
} else if (type == LineEvent.Type.STOP) {
System.out.println("STOP");
clip.close();
}
}
}
解决方案
getLevel()方法为您提供DataLine
用于播放的(线性)增益,而不是音频文件的某些属性。到目前为止,JavaSE 中没有内置方法来确定这样的事情。为了测量文件中的内容,请考虑研究ReplayGain或EBU R128。EBU R128 的一个免费且开放的实现是libebur128,但它不在 Java 中。
推荐阅读
- python - 如何将一个函数的输入值与另一个函数的返回值进行比较?
- postgresql - 尝试连接到 postgresql 时连接被拒绝
- c - 结构声明错误(错误:数组类型具有不完整的元素类型'struct entry')
- c# - ObservableCollection.Add() 影响完全不同的 ObservableCollection
- javascript - 在静态变量初始化之前获取 JSON
- flutter - Flutter - VS Code:缺少灯泡。按下“Ctrl + .”时“没有可用的操作代码”
- pyspark - PySpark - Coalesce(1) 是否保留范围分区的顺序?
- reactjs - 如何解决 npm 错误“npm ERR!code ELIFECYCLE”?
- angular - 从不同的组件调用函数并传递参数
- html - 边框动画所需的 CSS 帮助