2011-12-26 98 views
1

我試圖讓這個在440赫茲發揮正弦波。 構造函數被調用,並且不出現錯誤。 產生()使得double S爲聲音數據的數組,並將其發送到處理(),這使得其嘗試通過Clip爲什麼這段代碼不能播放任何聲音?

由於得到

public class Synth { 

AudioFormat format; 

public Synth(){ 
    format=new AudioFormat(44100, 1, 1, true, false); 
    try{ 
    generate(0.5); 
    }catch(Exception e){e.printStackTrace();} 
} 

public void process(double[] data) throws Exception{ //range -1 to +1 
    Clip clip=AudioSystem.getClip(); 

    byte[] bdata=new byte[data.length]; 
    for(int i=0; i<data.length; i++){ 
     bdata[i]=(byte)(data[i]*127); 
    } 

    AudioInputStream a=new AudioInputStream(new ByteArrayInputStream(bdata), format,bdata.length); 

    clip.open(a); 
} 

public void generate(double seconds)throws Exception{ 
    float samplerate=format.getSampleRate(); 

    double[] data=new double[(int)(seconds*samplerate)]; 
    int f=440; 

    for(int i=0; i<data.length; i++){ 
     data[i]=Math.sin(f*((double)(i)/samplerate)*2*Math.PI); 
    } 

    process(data); 
} 
} 

回答

相關問題