2012-01-03 22 views
7

Merhaba WebAudio API'sı üzerinde çalışıyorum. Java API'da olduğu gibi HTML5 Web Audio API, porting from javax.sound and getting distortion bağlantısını okudum ama iyi kalitede olmadım. İmzalı baytta sunucudan PCM verisi alıyorum. Sonra bunu 16 bit biçiminde değiştirdim. değiştirmek için kullanıyorum (< < 8 | secondbyte) kullanıyorum, ancak iyi bir ses kalitesi elde edemiyorum. iyi kalitede ses elde etmek için dönüştürme ya da başka herhangi bir şekilde herhangi bir sorun var mı?pcm verilerini webAudio API'sine göre çal

+1

Kod parçacıkları her zaman yararlıdır. – ebidel

+0

İmzalı bayt dizisini Float32Array'a nasıl dönüştürdüğümü söyleyebilir misiniz? – user894554

+0

Bunu öne çıkarmaktan gurur duymakla yetinmeyiz, ancak bu durum resmi bir belgenin doğrudan işlevi olan PCM parçasını atladığından ve daha fazla 'yardımcı' olan decodeAudioData() üzerinde odaklandığından, bu iyi bir sorudur. –

cevap

4

Web Audio API'sı, -1'den 1'e 32 bit işaretli şamandıralar kullanır, bu yüzden (umarım) bu soruda bahsettiğiniz 16 bit yerine nasıl yapacağınızı gösterir. Numunelerin dizinizi varsayarsak

samples denir ve -128 127 ila 2'nin iltifat olarak depolanır, bu çalışması gerekir düşünüyorum:

var floats = new Float32Array(samples.length); 
samples.forEach(function(sample, i) { 
    floats[i] = sample < 0 ? sample/0x80 : sample/0x7F; 
}); 

Sonra böyle bir şey yapabilirsiniz:

var ac = new webkitAudioContext() 
    , ab = ac.createBuffer(1, floats.length, ac.sampleRate) 
    , bs = ac.createBufferSource(); 
ab.getChannelData(0).set(floats); 
bs.buffer = ab; 
bs.connect(ac.destination); 
bs.start(0); 
+0

Sanırım eksiksiniz "bs.buffer = ab;" – CpnCrunch

İlgili konular