我需要即时生成音频(不能从 wav 或 mp3 文件生成)。幸运的是,新的 WebAudio API(FF4 和 Chrome 13)提供了这个功能。
我有一些要移植到 Javascript 的 Java 代码,如下所示:
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);
我试图让它与 Web Audio API 一起工作,但它非常失真。这是我在 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/svn/wiki/webAudioTests/Main.java
这是我正在测试的 .js 文件:http: //gwt-nes-port.googlecode.com/svn/wiki/webAudioTests/Main.js
关于 javax.sound 和 Web Audio 工作方式之间差异的任何提示,以及导致我的 JS 代码失真的原因是什么?