2012-01-03 2 views
7

안녕하세요 저는 WebAudio API를 연구 중입니다. HTML5 Web Audio API, porting from javax.sound and getting distortion 링크를 읽었지만 Java API에서와 같이 좋은 품질을 얻지 못했습니다. 서버에서 PCM 데이터를 부호있는 바이트로 가져옵니다. 그런 다음 이것을 16 비트 형식으로 변경해야합니다. 변화를 위해 (firstbyte < < 8 | secondbyte) 그러나 나는 좋은 음질을 얻을 수 없다. 양질의 사운드를 얻기 위해 변환이나 다른 방법으로 문제가 있습니까?webAudio API로 pcm 데이터 재생

+1

코드 스 니펫은 항상 유용합니다. – ebidel

+0

누구나 서명 된 바이트 배열을 Float32Array로 변환하는 방법을 말해 줄 수 있습니까? – user894554

+0

이것 역시 upvote에 자랑스럽지 않지만 공식 문서가 직접 PCM 부분을 건너 뛰고 더 많은 '도우미'인 decodeAudioData()에 초점을 맞추기 때문에 좋은 질문입니다. –

답변

4

웹 오디오 API는 -1에서 1까지의 32 비트 부호있는 부동 소수점을 사용하므로, 질문에서 언급 한 것처럼 (잘하면) 어떻게해야하는지 보여줄 것입니다. 샘플의 배열을 가정

samples라고하며, -128 ~ 127 2의 칭찬으로 저장됩니다, 나는이 일을해야한다고 생각 :

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

이 그럼 당신은 같은 것을 할 수 있습니다

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

"bs.buffer = ab;가 누락 된 것 같습니다." – CpnCrunch