2011-12-26 9 views
1

私は440Hzでサイン波を演奏しようとしています。 コンストラクターが呼び出され、エラーは表示されません。 生成するには、()サウンドデータのためのdoubleの配列を行い、なぜこのコードは何の音も出ませんか?

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); 
} 
} 

答えて

4

呼び出してみClip

感謝を介して取得しようとするbyteの配列が作るもの)(処理するために、それを送信しますClip.loop(int)(またはDataLine.start() - Clipによって実装されます)。

+0

ありがとう、それは今動作します! – milo

関連する問題