У меня есть требование генерировать аудио на лету (генерация из файлов wav или mp3 не возможна). К счастью, новый API WebAudio (FF4 и Chrome 13) предоставляет эту функциональность.
У меня есть код Java, который я портирую на Javascript, который выглядит следующим образом:
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);
Я пытаюсь заставить это работать с API Web Audio, но оно чрезвычайно искажено. Вот код, который я использую в JS:
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 / СВН / вики / webAudioTests / Main.java
А вот и файл .js, с которым я тестирую:
http://gwt -nes-port.googlecode.com / СВН / вики / webAudioTests / Main.js
Какие-нибудь советы о различиях между работой javax.sound и Web Audio и причинах искажения в моем коде JS?