2016-10-12 8 views
0

ゲインをフェードアウトさせることで、アプリケーションのクリックを取り除こうとしています。以下のコードでは、音の変化を聞くことができますが、フェードアウトしません。ここでWeb Audio API - クリックを避けるためのランプゲイン

var oscillator = audioContext.createOscillator(); 
oscillator.connect(gainNode); 
oscillator.type = 'sine'; // sine, triangle, sawtooth 
console.log(self.currentPitch); 
if(isFinite(self.currentPitch)==true){ 
    oscillator.frequency.value = self.currentPitch; 
    // connect it to the output 
    oscillator.connect(audioContext.destination); 
    // start the note 
    oscillator.start(0); 

setTimeout(function(){ 
    var now = audioContext.currentTime; 
    //gainNode.gain.value=0; 
    gainNode.gain.linearRampToValueAtTime(0,now+.05); 
    oscillator.stop(now+.05); 
}, self.duration*1000); 

は完全なコードです:

var Musical = function(){ 

    var self=this; 

    self.basePitch= 420; 
    self.currentPitch=420; 
    self.baseLineLength=$("#guidecircles circle").first().attr("r"); 
    self.currentLineLength=100; 
    self.duration=.2; //time in seconds 
    self.playPosition=0; 
    self.playTimer=false;  

    try { 
      if (! window.AudioContext) { 
       if (! window.webkitAudioContext) { 
        self.bad_browser(); 
        return; 
       } 
       window.AudioContext = window.webkitAudioContext; 
      } 

      var audioContext = new AudioContext(); 
     } 
     catch(e) { 
      console.log('Web Audio API is not supported in this browser'); 
    } 

    var gainNode = audioContext.createGain(); 
    gainNode.connect(audioContext.destination); 


    /* Playing a tone */ 
    self.playTone=function(){ 

     self.setCurrentPitch(); 

     // create the oscillator 
     var oscillator = audioContext.createOscillator(); 
     oscillator.connect(gainNode); 
     oscillator.type = 'sine'; // sine, triangle, sawtooth 
     console.log(self.currentPitch); 
     if(isFinite(self.currentPitch)==true){ 
      oscillator.frequency.value = self.currentPitch; 
      // connect it to the output 
      oscillator.connect(audioContext.destination); 
      // start the note 
      oscillator.start(0); 

      setTimeout(function(){ 
       var now = audioContext.currentTime; 
       //gainNode.gain.value=0; 
       gainNode.gain.linearRampToValueAtTime(0,now+.05); 
       oscillator.stop(now+.05); 
      }, self.duration*1000); 
     } 

     /* if(typeof oscillator !="undefined"){ 

     }*/ 

     return self; 

    }  

    /* Get current pitch */ 
    self.setCurrentPitch=function(){ 
     /* find ratio of current line length to base line length */ 
     var ratio=parseFloat(self.baseLineLength/self.currentLineLength); 
     /* apply ratio to base pitch and set the current pitch */ 
     self.currentPitch=self.basePitch*ratio; 
     console.log(self.baseLineLength,self.currentLineLength,"ratio:"+ratio); 
    } 

    /* play music */ 
    self.play=function(){ 

     self.playTimer=setInterval(function(){ playNext() }, self.duration*1000); 

     return self; 
    } 

    var playNext=function(){ 

     var toneLine=$("#musicallines line").eq(self.playPosition); 
     $("#musicallines line").removeClass('playing'); 
     toneLine.addClass('playing'); 
     if(self.playPosition>($("#musicallines line").length-1)){ 
      clearInterval(self.playTimer); 
      self.playPosition=0; 
     } else { 

     self.playPosition++; 
     self.currentLineLength=toneLine.LineEquation().getMagnitude(); 
     self.playTone(); 

     } 
    }  


    self.bad_browser=function(){ 
     alert("Your browser does not support web audio"); 
    }  

    return self; 
} 

それを実行しているバージョンは、このサイトにアクセスしてくださいを参照するには、次の

RulerandCompass.net

ライブサイト上のmusical.jsファイルゲイン調整の更新はありません。このサイトは、ルーラーとコンパスのパターンを作成するための描画ツールです。

Ruler and compass drawing

円ツールは一点、別のをクリックして使用して、描画するには。交点は互いに幾何学的関係にある。下の中から選んだ楽譜ツールで楽譜を作成します。ピッチは、ベースピッチ(220hz)を新しいラインに対する最初の半径の比で割って決定されます。

キーボードで "p"と入力して構図を再生します。

enter image description here

答えて

0

あなたは他のオートメーション機能を使用する前に、setValueAtTimeする必要があります。

フェードアウトするには、gainNode.gain.setTargetAtTime(0, audioContext.currentTime, 0.1)が必要です.0.1は1次フィルタの時定数です。https://en.wikipedia.org/wiki/Time_constant#Exponential_decayを参照してください。

関連する問題