动作脚本缓慢捕获麦克风音频

时间:2015-03-08 22:36:09

标签: actionscript-3 flash signal-processing

我面临使用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函数。

0 个答案:

没有答案