Java Sound中支持的文件格式

时间:2018-06-08 02:45:54

标签: javasound

以下是我用来确定声音文件的代码是否可以Clip播放(用Kotlin编写)。
它在Windows上的24位文件上返回false但在Mac上返回true,结果不同。为什么它不会在每个系统上返回相同的结果?

    fun isValidFile(file: File): Boolean{

     try {
         val format = AudioSystem.getAudioFileFormat(file).format
         val info = DataLine.Info(Clip::class.java, format)
         val audioSystem = AudioSystem.getLine(info)

         return audioSystem is Clip
     }
     catch (e : Exception){
         return false
     }

    }

24位文件可在Mac上播放,但如果我尝试按FloatControl调整音量,则会出现Unsupported control type: Master Gain错误,而16位文件工作正常。

clip.getControl(FloatControl.Type.MASTER_GAIN) as FloatControl

1 个答案:

答案 0 :(得分:1)

“为什么不在每个系统上返回相同的结果?”

操作系统及其配置的各种计算机和卡都是Java外部的。它们使用的标准和它们提供的控制方式不同。缺少特定格式的音量控制很可能取决于特定操作系统的可用性。

出于我的目的,我发现音量控制和其他控制(平移,各种效果)是如此的昙花一现,对于我想要做的事情,我咬了一下子弹并在Java中编写了这些函数。这可以通过使用SourceDataLine而不是Clip来完成,因为SourceDataLine会在播放时将数据公开给编码器。

我也满足于标准的“CD质量”格式:16位,立体声,44100 fps,因为这是目前我遇到的所有Java系统上实现的最高标准。 (我对Raspberry PI没有任何经验 - 如果IDK在那里工作的话也是如此。)

图书馆可以提供帮助,并可以检查代码的示例。