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.sql.SQLException: ORA-03115: 不支持的网络数据类型或表示
为啥 collections.sort 在 Java 中按比较器排序时会抛出不支持的操作异常?