2015-04-23 18 views
7

Bir GainNode'un exponentialRampToValueAtTime biriminde bir birim değişiklik kayması yapılamıyor. 1 (% 100) ulaşan ve bütün bu süreç 2 sn almalı kadar benim anlayış bu sesi yavaş yavaş artırmalıdır yılındaaudioParam.exponentialRampToValueAtTime nasıl çalışır?

var context = new AudioContext(), 
    osc = context.createOscillator(), 
    gain = context.createGain(); 

osc.frequency.value = 440; // A note 
osc.start(0); 
osc.connect(gain); 

gain.gain.value = 0; 
gain.connect(context.destination); 

gain.gain.cancelScheduledValues(0); 
gain.gain.setValueAtTime(0, context.currentTime); 
gain.gain.exponentialRampToValueAtTime(1, context.currentTime + 2); 

: Burada

bir örnektir. Bu varsayım doğru mu?

Eğer öyleyse, neden 2 saniye boyunca 0'da kalıyor ve aniden tam birime geçer?

Zaman ve çaba için şimdiden teşekkür ederiz.

+0

'linearRampToValueAtTime''ü denediniz mi? –

+0

Elimde ve çalışıyor, fakat lineerlerin üssel rampa kadar iyi gelmediğini okudum, bu yüzden bunu denemek istedim. Bir zarf üreticisi yazıyorum ve bazı seçenekleri test etmek istiyorum. –

+0

Sanırım bu şekilde çalışması gerekiyor. Hızlı rampa. –

cevap

8

Bu işlevin 0 değerini sevmediği anlaşılıyor. FF "SyntaxError: Geçersiz veya yasa dışı bir dize belirtildi" atar. Aşağıdaki kod doğru şekilde rampa olacaktır. Bkz Plnkr.

var context = new AudioContext(), 
    osc = context.createOscillator(), 
    gain = context.createGain(); 

osc.frequency.value = 440.0; // A note 
osc.start(0); 
osc.connect(gain); 

gain.connect(context.destination); 

gain.gain.setValueAtTime(0.0001, context.currentTime); // <-- line of interest 

gain.gain.exponentialRampToValueAtTime(1, context.currentTime + 10); 

GÜNCELLEME:Web Audio specification göre "Bir NotSupportedError istisna bu değer 0'a eşit veya daha az, ya da önceki etkinliği sırasında değeri 0'a eşit veya daha az olması durumunda ise atılmalıdır" . @cwilso tarafından belirlendiği gibi (yorumlara bakınız). Değerin pozitif olması gerektiğini bildiren

+0

Kesinlikle haklısınız. Teşekkürler! Ama bu bir böcek değil mi? Sanırım, muhtemelen başlangıç ​​değeri ile başlayan bir miktar çarpma var ve bu yüzden son adım olana kadar 0. Ve işlev üssel olarak yavaşladığı için, muhtemelen, sadece yakınlaştırılmış olan değeri (kaydırmanın devam ettiği) marjinal olarak daha yakın olduğunda (algılanamaz) ayarlar. –

+0

Örnek değer <1/Math.pow (2, bitdepth) 0'dır. –

+2

Bence sorun şu: https://github.com/WebKit/webkit/blob/master/Source/WebCore/Modules/webaudio/AudioParamTimeline .Cpp # L232 ve bu: https://github.com/WebKit/webkit/blob/master/Source/WebCore/Modules/webaudio/AudioParamTimeline.cpp#L237 Bu Webkit içinde, ama aynı olduğunu Goz kirpmak. –

0
+0

Teşekkürler, ama bunun ayrı bir cevap olduğuna dair bir nokta yok. Ve bu, FF'nin uygulanması için değil, webkit ve Blink için geçerli. Ayrıca "geçersiz dize hatası" ... Bu, sağlanan bir çözümle "belgelenmiş bir hata" gibi görünüyor. :) –

+0

Bu bağlantı soruyu yanıtlayabilirken, cevabın temel kısımlarını buraya dahil etmek ve referans için bağlantı sağlamak daha iyidir. Bağlantılı sayfa değiştiğinde yalnızca bağlantı yanıtları geçersiz olabilir. – MZaragoza

+1

@MZaragoza: Ama burada önemli olan kısmı da eklediler. – BoltClock