我面临使用ActionScript实现音频捕获的一些性能问题。
我创建了一个flash.media.Microphone实例,采样率为22100Hz,我想填充2048个样本的缓冲区。
我在这里是怎么做到的:
var samples = new Array<Float>();
static var start:Float = Date.now().getTime();
public static function initMic(index = -1) {
mic = flash.media.Microphone.getMicrophone(index);
if (mic == null) {
getMicFailed();
return;
}
mic.setLoopBack(false);
mic.rate = Std.int(22);
mic.setSilenceLevel(0);
mic.setUseEchoSuppression(false);
mic.addEventListener(flash.events.SampleDataEvent.SAMPLE_DATA, micSampleDataHandler);
}
public static function micSampleDataHandler(e) {
var buffersize = 2048;
var data = e.data;
if (samples.length < buffersize) {
while(data.bytesAvailable && samples.length < buffersize) {
var sample:Float = data.readFloat();
samples.push(sample);
}
if (samples.length < buffersize) {
return;
}
}
flash.external.ExternalInterface.call("javascriptCallback", samples);
samples = new Array<Float>();
trace(Date.now().getTime() - start);
start = Date.now().getTime();
}
填充缓冲区需要120/140毫秒! 根据您的经验,这是一个很好的性能价值?我能做些什么来加快速度?
编辑:&#34; Javascript回调&#34;正在调用一个空的javascript函数。