我有一个麦克风,它完全使用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位,然后嘶嘶声消失。

10-08 16:50