2012-12-28 14 views
2

我使用時Clip.getControl()按照有錯誤: -AbstractLine不支持的控制類型:主增益的Java

import java.io.File; 
import java.io.IOException; 
import javax.sound.sampled.AudioInputStream; 
import javax.sound.sampled.AudioSystem; 
import javax.sound.sampled.Clip; 
import javax.sound.sampled.FloatControl; 
import javax.sound.sampled.LineUnavailableException; 
import javax.sound.sampled.UnsupportedAudioFileException; 

public class HitPlayer { 
private AudioInputStream ais; 
private Clip clip; 
private FloatControl gain; 

public HitPlayer(String fname){ 
    try { 
     ais = AudioSystem.getAudioInputStream(new File(fname)); 
     clip = AudioSystem.getClip(); 
     gain = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN); 
    } catch(UnsupportedAudioFileException e){ 
     System.err.println("File format not accepted"); 
    } catch(IOException e){ 
     System.err.println("IO error"); 
    } catch(LineUnavailableException e){ 
     System.err.println("Line unavailable"); 
    } 
} 

public void setGain(float db){ 
    gain.setValue(db); 
} 

public void reset(){ 
    try { 
     ais.reset(); 
    } catch (IOException e) { 
     System.err.println("IO error when resetting"); 
    } 
} 

public void play(){ 
    clip.start(); 
} 
} 

堆棧跟蹤如下: -

Exception in thread "main" java.lang.IllegalArgumentException: Unsupported control type: Master Gain 
at com.sun.media.sound.AbstractLine.getControl(AbstractLine.java:164) 
at beat.HitPlayer.<init>(HitPlayer.java:21) 
at beat.DrumMachine.<init>(DrumMachine.java:18) 
at beat.Main.main(Main.java:14) 

我一直在試圖追查通過檢查grepcode上的OpenJDK代碼來發現錯誤; AbstractLine grepcode.com和相關的類。

我想知道是否有人遇到了這個問題,我使用 java version "1.7.0_07" OpenJDK Runtime Environment (IcedTea7 2.3.2) (Slackware) OpenJDK 64-Bit Server VM (build 23.2-b09, mixed mode)如果這有所作爲。

我基本上試圖通過gain = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);訪問增益或音量控制。無論我是否使用MASTER_GAINVOLUME錯誤仍然存​​在

問候

+0

您在測試過程中使用了哪個平臺? – user390525

回答

2

我忘了開行。增加了以下內容: -

clip.open(ais);