2015-06-17 13 views
19

Web tabanlı bir müzik sıralama/izleyici üzerinde çalışıyorum ve örnek çalma rutinimde, ses bağlamlarının yalnızca ses Örneğin, bir örneklemi kaydırdığımda Web Audio API'sının oynatma süresini ayarlayamadığı görülüyor. Örneğin, bir notu oktav aşağı kaydırırsam, rutin kesilmeden önce yalnızca sesin ilk yarısını çalar. Daha yoğun aralıklı vites küçültmeleri ses çalma işleminin daha da azalmasına neden olur ve bunu doğrulayabildiğimden emin olmadığımdan, sesin arabelleğe çıkmadan önce sesin hızının nispeten uzun süreler içinde sessiz kaldığını sanırım.HTML5 Web Sesi - Yavaşlatılmış ses çalma işlemi erken kesiliyor

İşte ses çalma rutinim şu an. Şimdiye kadar, diğer işlevlerin, bu rutinin işlevselliğini genişletmekten ziyade, doğru verileri göndermesini sağlamak için çok daha fazla çalışma yapılmıştır. Numuneler tam olursa olsun uygulandığı ne kadar zift değişen oynatmak ve gerekirse izin şiftinglerde sahanın miktarını sınırlamak için

function playSound(buffer, pitch, dspEffect, dspValue, volume) { 

    var source = audioEngine.createBufferSource(); 
    source.buffer = buffer; 
    source.playbackRate.value = pitch; 

    // Volume adjustment is handled before other DSP effects are added. 
    var volumeAdjustment = audioEngine.createGain(); 
    source.connect(volumeAdjustment); 
    // Very basic error trapping in case of bad volume input. 
    if(volume >= 0 && volume <= 1) { 
    volumeAdjustment.gain.value = volume; 
    } else { 
    volumeAdjustment.gain.value = 0.6; 
    } 

    switch(dspEffect){ 
    case 'lowpass': 
     var createLowPass = audioEngine.createBiquadFilter(); 
     volumeAdjustment.connect(createLowPass); 
     createLowPass.connect(audioEngine.destination); 
     createLowPass.type = 'lowpass'; 
     createLowPass.frequency.value = dspValue; 
     break; 
    // There are a couple of other optional DSP effects, 
    // but so far they all operate in about the same fashion. 
    } 
    source.start(); 
} 

Benim niyet olduğunu. Bu konuyla ilgili bir ses çalışmasına birkaç saniye sessizlik eklemenin mümkün olduğunu buldum, ancak işlenmesi gereken çok miktarda ses nedeniyle çok hantal ve kod tabanlı bir çözümü tercih ediyorum.

DÜZENLEME: Tarayıcılarda bunu test edebilirim, bu yalnızca Google Chrome'da bir sorun gibi görünüyor. Örnekler tamamen Firefox'ta oynatılır, Internet Explorer henüz Web Audio API'sini desteklemez ve Safari'ye veya Opera'ya hazır erişimim yoktur. Bu kesinlikle aradığım yardımın doğasını değiştiriyor.

+0

Bunun için barındırılan bir örnek var mı? Değişen oynatımın, sesin tamamlanmaya kadar değişmemesi gerektiği doğrudur, ancak eylemde görmeden, hata ayıklayamam. – cwilso

+0

Bu yordam, http://gabekagan.github.io/Tracker2D/ adresinde bulunan Tracker2D adlı bir programın bir parçasıdır. Son zamanlarda, hatanın Firefox'ta gerçekleşmediğini fark ettim. Görünüşe göre bunu kaçırdım çünkü çoğunlukla Chrome'da geliştirmekteyim ve bunu belirtmek için orijinal soruyu düzenleyeceğim. –

+0

En son Chromium'da bu durumun her gece görüntülenip görüntülenmediğini iki kez kontrol etmenizi ve ardından Chromium issue tracker'da bir hata oluşturmanızı öneririz. Https://code.google.com/p/chromium/issues/list –

cevap

1

Bir ses sessizlik birkaç saniye ekleyerek bu soruna çalıştığını tespit ettik, ancak bunun nedeni ben işlenmesi gerektiği için seslerin büyük miktarda hantal, ve ben bir kod tabanlı bir çözümü tercih ediyorum .

Birkaç saniyelik sessizlik içeren bir ses dosyası yükleyebilir ve gerçek ses dosyasına ekleyebilirsiniz. Here, bunun nasıl yapılacağını gösteren bir SO cevabıdır ...