0

我有一个使用 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()
    }
}
4

1 回答 1

1

我并不完全确信您的代码中真正发生了什么。但由于您输入 8 位,它可能只是音频混叠。所以这种嘶嘶声是意料之中的。

8 位深度是非常差的音频分辨率。它为每个样本仅提供 256 个可能的值。实际上位深度对信噪比有影响。而 8 位深度的这个比率等于 48.16 dB,这是非常明显的嘶嘶声。

使用 24 位生成格式不会自动改进您的 8 位源。尝试至少喂食 16 位,嘶嘶声应该消失。

于 2017-12-16T12:42:00.247 回答