我有一个麦克风,它完全使用48000个采样率,24位和1个通道。所以我将这些数据输入AudioSystem.isLineSupported()
并获得false
。
我尝试输入8位而不是24位,并且它起作用。但是音频中有一个奇怪的背景嘶嘶声,所以我想那不是我的事。
问题:如何调试正在发生的事情?我知道我要提供的设置是正确的,那会是什么呢?
我正在使用的代码(是,是Kotlin):
fun main(args : Array<String>) {
var line: TargetDataLine? = null
val thread = Thread(Runnable
{
val format = AudioFormat(48000f, 24, 1,
false, false)
val info = DataLine.Info(TargetDataLine::class.java, format)
if (!AudioSystem.isLineSupported(info)) {
System.out.println("Failed")
} else {
line = AudioSystem.getLine(info) as TargetDataLine
line?.open(format)
line?.start()
val ais = AudioInputStream(line)
AudioSystem.write(ais, AudioFileFormat.Type.WAVE, File("c:/temp/temp.wav"))
}
})
if (line != null) {
thread.start()
readLine()
line?.stop()
line?.close()
}
}
最佳答案
我不完全相信您的代码中到底发生了什么。但是由于您输入的是8位,所以它可能只是音频混叠。因此,这嘶嘶声是可以预期的。
8位深度是非常差的音频分辨率。每个样本仅提供256个可能的值。
实际上the bit depth对信噪比有影响。而且这个比率对于8位深度等于48.16 dB,这在嘶嘶声中非常明显。
对结果格式使用24位不会自动改善8位源。尝试至少喂入16位,然后嘶嘶声消失。