2017-12-08 5 views
0

私は正確に48000サンプルレート、24ビット、および1チャンネルを使用するマイクを持っています。だから、私はAudioSystem.isLineSupported()にこのデータを送り、falseを得る。Javaオーディオは正しい引数でTargetDataLineを初期化しません

私は24ビットの代わりに8ビットを入力してみてください。しかし、オーディオに奇妙な背景のヒスがあるので、私はそれが私のものではないと推測しています。

質問:何が起こっているのかをどのようにデバッグできますか?私は実際に給餌している設定が正しいことを知っています。それで何ができますか?私が使用している

コード(はい、それは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() 
    } 
} 

答えて

1

私が何であるかを完全に自信を持っていないですが、本当にあなたのコード内のフードの下に行きます。しかし、あなたは8ビットで摂食しているので、それはちょうどオーディオエイリアシングかもしれません。だからこのヒスは期待される。

8ビットの深度は、オーディオ解像度が非常に低いです。 1つのサンプルにつき256の可能な値しか得られません。 実際にはthe bit depthは信号対雑音比に影響します。そしてこの8ビット深度の比率は48.16dBに等しく、ヒスとしてかなり目立つ。

結果のフォーマットに24ビットを使用しても、自動的に8ビットソースが改善されることはありません。少なくとも16ビットで餌を与えてみて、ヒスは消されるはずです。

関連する問題