Java:不支持主增益异常

Posted

技术标签:

【中文标题】Java:不支持主增益异常【英文标题】:Java: Master Gain not supported exception 【发布时间】:2009-12-01 17:13:43 【问题描述】:

在 linux 中这段代码不起作用:我添加了两行

// Added two lines.
DataLine.Info info = new DataLine.Info( SourceDataLine.class, audioFormat );
SourceDataLine dataLine = (SourceDataLine) Audiosystem.getLine( info );
// Adjust the volume on the output line.
if( dataLine.isControlSupported( FloatControl.Type.MASTER_GAIN)) 
    // If inside this if, the Master_Gain must be supported. Yes?
    FloatControl volume = (FloatControl) dataLine.getControl(FloatControl.Type.MASTER_GAIN);
    // This line throws an exception. "Master_Gain not supported"
    volume.setValue( 100.0F );

这正常吗?我该怎么做才能解决这个问题?在 Windows 中它可以工作。

谢谢,马丁。

【问题讨论】:

这似乎是您正在使用的“dataLine”实现的问题。数据线的类型是什么?我希望 getControl() 仅在 isControlSupported 返回 false 时抛出此异常... 有可能你的dataLine不是windows和linux中同类型的dataline。通过调试此代码,您可以在 Linux 和 Windows 中调查 dataLine 的类型(它是 SourceDataLine 的子类型)。 是的,是同一种线。 【参考方案1】:

在尝试对其使用控件之前,您能否尝试open() 该行。像这样的:

// Added two lines.
DataLine.Info info = new DataLine.Info( SourceDataLine.class, audioFormat );
SourceDataLine dataLine = (SourceDataLine) AudioSystem.getLine( info );
dataLine.open();
// Adjust the volume on the output line.
if( dataLine.isControlSupported( FloatControl.Type.MASTER_GAIN)) 
    // If inside this if, the Master_Gain must be supported. Yes?
    FloatControl volume = (FloatControl) dataLine.getControl(FloatControl.Type.MASTER_GAIN);
    // This line throws an exception. "Master_Gain not supported"
    volume.setValue( 100.0F );

【讨论】:

【参考方案2】:

它似乎因 JRE 版本而异。

我遇到了类似的问题,当我检查 dataLine.getControls() 时,我在 Oracle JDK 1.7 上得到一个“MASTER_GAIN”控件,在 OpenJDK 1.6 上得到一个“音量”控件。更糟糕的是……“音量”的线性值是 0...65536,而 MASTER_GAIN 似乎有分贝设置。

这么多代码一次,到处运行:-(

【讨论】:

以上是关于Java:不支持主增益异常的主要内容,如果未能解决你的问题,请参考以下文章

Java - 不支持的音频文件异常 [重复]

获取异常 java.sql.SQLException: ORA-03115: 不支持的网络数据类型或表示

为啥 collections.sort 在 Java 中按比较器排序时会抛出不支持的操作异常?

Java 分发不工作

用于读取记录数组的 BigQuery Java API:“不支持按名称检索字段值”异常

使用 "java -jar"命令启动jar包时报不支持的jdk版本异常