1

Linuxではこのコードは機能しません:2行追加しました

// 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では機能します。

ありがとう、Martijn。

4

2 に答える 2

3

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 );
}
于 2009-12-01T22:38:08.500 に答える
1

JREのバージョンによって違うようです。

同様の問題があり、dataLine.getControls() をチェックすると、Oracle JDK 1.7 で「MASTER_GAIN」コントロールが取得され、OpenJDK 1.6 で「ボリューム」コントロールが取得されます。さらに悪いことに、「ボリューム」は 0 ~ 65536 の線形値ですが、MASTER_GAIN はデシベル設定になっているようです。

一度コードを実行すると、どこでも実行できます:-(

于 2013-10-23T18:44:04.453 に答える