2017-12-08 9 views
0

정확하게 48000 샘플 속도, 24 비트 및 1 채널을 사용하는 마이크가 있습니다. 따라서이 데이터를 AudioSystem.isLineSupported()에 입력하고 false이 표시됩니다.Java 오디오가 올바른 인수로 TargetDataLine을 초기화하지 않습니다

24 개가 아닌 8 비트로 먹이를 먹는 것이 좋습니다. 하지만 오디오에 이상한 배경 잡음이있어, 내 생각이 아닌 것 같습니다.

질문 : 어떻게 진행되고 있는지 디버그 할 수 있습니까? 내가 먹이는 설정이 맞다는 사실을 알고 있습니다. 그래서 무엇이 될 수 있습니까? 내가 사용

코드 (예, 그것은 코 틀린이야) :

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() 
    } 
} 

답변

1

내가 무엇인지 완전히 확신하지 않다 정말 코드에서 후드 아래에 간다. 하지만 8 비트를 먹이면 오디오 앨리어싱 일 수 있습니다. 그래서이 쉿 소리가 예상됩니다.

8 비트 깊이는 오디오 해상도가 매우 낮습니다. 샘플 당 256 개의 가능한 값만 제공합니다. 사실 the bit depth은 신호 대 잡음비에 영향을 미칩니다. 8 비트 깊이의이 비율은 48.16dB와 같으며 히스 (hiss)처럼 눈에.니다.

결과 형식에 24 비트를 사용하면 8 비트 소스가 자동으로 향상되지 않습니다. 적어도 16 비트로 먹이를 주면 히스는 사라져야합니다.