2011-05-15 3 views
2

즉석에서 오디오를 생성해야합니다 (wav 또는 mp3 파일에서 생성하는 것은 옵션이 아닙니다). 다행히도 새로운 WebAudio API (FF4 및 Chrome 13)는이 기능을 제공합니다.HTML5 Web Audio API, javax.sound에서 이식 및 왜곡 받기

나는 다음과 같다 내가 자바 스크립트로 포팅하고있어 일부 자바 코드가 :이 웹 오디오 API 작업을 얻으려고

byte[] buffer = new byte[]{ 56, -27, 88, -29, 88, -29, 88, -29 ............ }; 
AudioFormat af = new AudioFormat(44100, 16, 1, true, false); 
SourceDataLine sdl = AudioSystem.getSourceDataLine(af); 
sdl.open(af, 1470 * 4); //create 4 frame audio buffer 
sdl.start(); 
sdl.write(buffer, 0, buffer.length); 

을하지만, 매우 왜곡이다. 여기

var buffer = [ 56, -27, 88, -29, 88, -29, 88, -29 ............ ]; 
var ctx = new webkitAudioContext(); 
var src = ctx.createBufferSource(); 
src.buffer = ctx.createBuffer(1, buffer.length, 44100); 
src.buffer.getChannelData(0).set(buffer); 
src.connect(ctx.destination); 
src.looping = false; 
src.noteOn(0); 

내가 함께 테스트 해요 된 .java 파일입니다 : 여기 http://gwt-nes-port.googlecode.com/svn/wiki/webAudioTests/Main.java

그리고 내가 함께 테스트있어의 .js 파일은 여기에 내가 JS에 사용하고 코드입니다 : http://gwt-nes-port.googlecode.com/svn/wiki/webAudioTests/Main.js

javax.sound 및 Web Audio의 작동 방식과 JS 코드의 왜곡의 원인에 대한 팁은 무엇입니까?

답변

4

매우 도움이되는 Google 크롬 팀 덕분에, 나는 이것을 알아 냈습니다.

안녕 브래드, 그것은 유효한 범위를 벗어 당신의 샘플 데이터 같다 : 여기에 그들이 말한 것입니다. 이 API의 경우, 본격적인 부동 소수점 PCM 오디오 데이터 범위 -1.0 내에 있어야합니다 ->

1.0은 아마도 데이터 값이 은 (-32768 -> 32767)을 확장 16 비트입니다.

따라서 바이트 배열을 만들 때 모든 것이 10 진수로 표시되는지 확인해야합니다. 그래서 대신의 : 난 정말이처럼 보였다 무언가를 필요로

byte[] buffer = new byte[]{ 56, -27, 88, -29, 88, ............ }; 

:

byte[] buffer = new byte[]{ 0.023, -0.1, 0.125, -0.045, ............ }; 

그래서 난 그냥 같은 적절한 범위로 16 비트를 조정 값을 변환하는 몇 가지 논리를 추가 내 코드에서 :

for(var i=0;i<buffer.length;i++) { 
    var b = buffer[i]; 
    b = (b>0)?b/32767:b/-32768; 
    buffer[i] = b; 
} 

이제 오디오는 10 진수로 표시되고 더 이상 왜곡 된 중금속 노래처럼 들리지 않습니다.

+0

, 다음 – razlebe