2017-04-23 64 views
7

türünde mevcut değil codoCircle üzerinde çalışıyorum. Sesi kısın.TypeError: 'AudioBufferSourceNode' üzerinde 'buffer' özelliği ayarlanamadı: Sağlanan değer 'AudioBuffer

Beklendiği gibi çalışıyor.

Şimdi ben codepen burada aynı kodu kullanmak istiyorum ve ben bu hatayı

TypeError olsun: 'AudioBufferSourceNode' açık 'tampon' özelliğini ayarlamak için başarısız oldu: sağlanan değer türde olmadığı 'AudioBuffer

Biraz araştırma yaptım ve first answer'u faydalı buldum.

cevap yük geri arama ateş etmediğinden tampon hala tanımsız i playSoundplayer.buffer = buffer yılında atamak zamanda

söylüyor.

Bu bana mantıklı, böylece sonra ben setTimeout gibi yapmaya çalıştık:

setTimeout(playSound, 9000); 

O iş vermedi.

Bunun için herhangi bir geçici çözüm biliyor musunuz? Ve neden CodeCircle'da çalışır ve Codepen'de değil?

+1

Pixi-audio.js kütüphane ile aynı hatayı alıyorum verdiği ihtiyacın olduğunu düşünüyorum emin değilim, yerel tüm beklendiği gibi çalıştı, ama yüklerken sunucuya, bir mp3 dosyası, tek bir yerde bana bu hatayı verir (ve sunucudan doğru indirir). Neden olduğunu bilmiyoruz, bulursanız lütfen cevap gönderin. –

cevap

6

his makes sense to me, so then i have tried to do a setTimeout like ..

daha bir Quickfix var

, ama her şey yüklenir olmadığından emin değiliz olarak zor.

Çözüm, her örnek yüklenene kadar beklemektir. Bunun için en iyi yol Promises kullanmaktır, ancak bir (büyük) refactor ve isn't compatible with all the current browsers (yani Babel veya Typescript vb.) Gerekir. Sonra (geri arama işlevi olarak) yükleme bittiğinde true ayarlanacak bir boolean değişken oluşturduk her numune için

var loadedHat = false; 
var loadedSnare = false; 
var loadedBd = false; 

loadSample('cl_hat_3001.wav', function (buffer) { 
    hat = buffer; 
    loadedHat = true; 
    startWhenAllLoaded(); 
}); 
loadSample('brp_snrim1.wav', function (buffer) { 
    snare = buffer; 
    loadedSnare = true; 
    startWhenAllLoaded(); 

}); 
loadSample('bd08.wav', function (buffer) { 
    bd = buffer; 
    loadedBd = true; 
    startWhenAllLoaded(); 
}); 

Ben başlamak için kodunuzu sarılmış:

Bu yüzden bir daha kolay yaklasti ve start fonksiyonu tüm ağaç Boolean düzenlenmiş codepen here olan true

function startWhenAllLoaded() 
{ 
    if(!started && loadedHat && loadedSnare && loadedBd){ 
     started = true; 
     start(); 
    } 
} 

olduğunda başladığı bir startWhenAllLoaded yapılan

Not: her şey, hata gitti şimdi Tamam çalışır ancak kod bazı

+0

TypeScript harika. Tavsiye edebilir. Ayrıca arka uç JavaScript'i için endüstri standardı haline geliyor. – NobleUplift