2012-01-03 15 views
7

Ciao Sto lavorando su WebAudio API. Ho letto il collegamento HTML5 Web Audio API, porting from javax.sound and getting distortion ma non ho trovato una buona qualità come nell'API java. Ricevo i dati PCM dal server nei byte firmati. Quindi devo cambiarlo in formato a 16 bit. per cambiare sto usando (firstbyte < < 8 | secondbyte) ma non riesco a ottenere una buona qualità del suono. c'è qualche problema nella conversione o in qualsiasi altro modo per ottenere una buona qualità del suono?riprodurre dati pcm da webAudio API

+1

I frammenti di codice sono sempre utili. – ebidel

+0

qualcuno può dirmi come convertire la matrice di byte firmati in Float32Array? – user894554

+0

Non troppo orgoglioso di revocare questo, ma questa è una buona domanda, dato che la documentazione ufficiale salta la parte del gioco PCM, che sarebbe la funzione diretta, e si focalizza su decodeAudioData(), che è più un 'helper'. –

risposta

4

L'API Web Audio utilizza float con segno a 32 bit da -1 a 1, quindi è quello che visualizzerò (si spera) come fare, piuttosto che a 16 bit come menzionato nella domanda.

Assumendo la matrice di campioni si chiama samples e vengono memorizzati come complimento 2 di da -128 a 127, credo che questo dovrebbe funzionare:

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

allora si può fare qualcosa di simile:

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

Penso che manchi "bs.buffer = ab;" – CpnCrunch

Problemi correlati