2014-03-12 29 views
3

使用Web Audio API,我想用一個信號來調製另一個信號。我發現調製不像預期的那樣。下面的示例代碼創建兩個振盪器,一個是440Hz,一個是1Hz,並使用1Hz的振盪器通過增益節點的增益AudioParam調製440Hz的增益。使用WebAudio API如何調製信號?

預期行爲:振盪器輸出值從-1到+1。因此,增益應該在-1和+1之間振盪,每秒一次,即增益應該爲每秒兩次零(無聲)。

實際行爲:相反,它只是每秒沉默一次。看來增益值被重新映射,所以範圍(-1,+1)被映射到(0,+1)。

問題:爲什麼重新映射發生?如果我將增益設置爲單個浮點值,則不會發生這種情況 - 其中,+1表示+1而0表示0。是否可以關閉此重新映射,以使調製信號中的零值產生零振幅聲音?爲了澄清,我的目標是使用其值在0和1之間變化的任意包絡E來調製載波的幅度C,使得輸出爲C * E,使得C E = 0時,E的振幅= 0,E = 1時的C * E的振幅= 1。

window.AudioContext = (window.AudioContext || window.webkitAudioContext); 
var context = new AudioContext(); 

var gain = context.createGain(); 
gain.connect(context.destination); 

var osc = context.createOscillator(); 
osc.connect(gain); 
osc.start(0); 

var mod = context.createOscillator(); 
mod.frequency.value = 1; 
mod.connect(gain.gain); 
mod.start(0); 
+0

」振盪器輸出的值從-1到+1,因此,增益應該在-1和+1之間振盪,每秒一次,即增益應爲零(無聲),每秒兩次。 ...嘗試想象如果將增益設置爲-1和0之間的值一半的時間會發生什麼。你最終會在半個時期內聽到沉默。 –

+1

凱文:增益是一個乘數,所以增益= -1對應於信號的反轉。因此,只有當增益通過零時,信號才應該保持沉默。 – user8539

+0

呵呵。只需再次檢查規格,你是絕對正確的。我沒有意識到你可以去負面和反轉階段。我很抱歉。 –

回答

3

這根本不是重映射。發生的情況是gain.value默認爲1,並且連接到增益的音頻信號與默認值進行SUMMED - 因此信號在(1 - 1)和(1 + 1)之間振盪:在0和2之間。

只需設置gain.gain.value = 0;在你上面的例子中,它應該像你期望的那樣工作。 「