簡體   English   中英

Web 音頻 API 緩沖區回調?

[英]Web Audio API Buffer Callback?

所以我正在制作一個游戲機模擬器,我現在在音頻部分。 如果重要的話,基本上我將樣本推送到 mono 音頻緩沖區(1 通道,2048 長度,22000 采樣率)。 所以我推到這個緩沖區,每次它滿了,我就玩它。 但這會導致雙倍生銹的爆裂聲。 這太糟糕了。

我聽說最佳方法是在緩沖區滿時排隊,等待“內部緩沖區”完成播放然后播放該緩沖區。 但是,我在 api 中找不到類似的東西。 我在想可能是完成后的回調或其他任何事情,但沒有。

有誰知道是否有這樣的事情? 或者是否有與 go 不同的方法? 謝謝大家 !

當 AudioBufferSoruce 完成播放時,會有一個onended事件。 但是,這可能會在緩沖區結束和您開始播放新緩沖區之間存在間隙。 之所以會出現這種差距,是因為音頻線程需要時間通知主線程緩沖區已結束,並且您接收事件並啟動新緩沖區也需要時間。

正如您所提到的,權利是緩沖數據,然后安排緩沖源開始播放,就像前一個緩沖區結束一樣。 類似於以下內容:

s0 = new AudioBufferSourceNode(context, {buffer: buffer0});
// delta is a small amount of time, about 3 ms or so to allow for the fact that 
// by the time you call start(), the audio thread may have already incremented
// currentTime.  If it has, the calculations of when the buffer ends will be
// wrong.
startTime = context.currentTime + delta;
s0.start(startTime);

// Create second buffer in buffer1.  Then
s1 = new AudioBufferSourceNode(context, {buffer: buffer1});
startTime += buffer0.duration;
s1.start(startTime);

s1應該在s0結束時開始播放。 它們之間不應有間隙。 (但是,如果 buffer0 中的最后一個值不接近 buffer1 中的第一個值,則可能會出現點擊或故障。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM