2016-11-25 3 views
-2

フォルマントのf1とf2(周波数)パラメータを渡すと、Math.sinなどを使ってサウンドを作成するようなサウンドを生成するJavaプログラムがありますか?Javaでフォルマント合成を使用してサウンドをゼロから作成する方法は?

+0

はい、私はGoogleで、まだ –

+0

はここを見てどのように...理解カント:http://stackoverflow.com/questions/1932490/java-generating-sound – aleb2000

+0

私がもしあれば知りたいです私はフォルマントの2つの周波数f1とf2を渡して、どのように音が生成されるのですか? –

答えて

-1

出典:here

/** Generates a tone. 
    @param hz Base frequency (neglecting harmonic) of the tone in cycles per second 
    @param msecs The number of milliseconds to play the tone. 
    @param volume Volume, form 0 (mute) to 100 (max). 
    @param addHarmonic Whether to add an harmonic, one octave up. */ 
    public static void generateTone(int hz,int msecs, int volume, boolean addHarmonic) throws LineUnavailableException { 

    float frequency = 44100; 
    byte[] buf; 
    AudioFormat af; 
    if (addHarmonic) { 
     buf = new byte[2]; 
     af = new AudioFormat(frequency,8,2,true,false); 
    } else { 
     buf = new byte[1]; 
     af = new AudioFormat(frequency,8,1,true,false); 
    } 
    SourceDataLine sdl = AudioSystem.getSourceDataLine(af); 
    sdl = AudioSystem.getSourceDataLine(af); 
    sdl.open(af); 
    sdl.start(); 
    for(int i=0; i<msecs*frequency/1000; i++){ 
     double angle = i/(frequency/hz)*2.0*Math.PI; 
     buf[0]=(byte)(Math.sin(angle)*volume); 

     if(addHarmonic) { 
     double angle2 = (i)/(frequency/hz)*2.0*Math.PI; 
     buf[1]=(byte)(Math.sin(2*angle2)*volume*0.6); 
     sdl.write(buf,0,2); 
     } else { 
     sdl.write(buf,0,1); 
     } 
    } 
    sdl.drain(); 
    sdl.stop(); 
    sdl.close(); 
    } 
+0

これは私がこの行 'Math.sin(2 * angle2)* volume * 0.6'を理解できれば助けになるでしょうか? –

関連する問題