Actionscript 3 as3中的GetMirror()仅在使用setLoopBack()时有效

Actionscript 3 as3中的GetMirror()仅在使用setLoopBack()时有效,actionscript-3,flash,audio,microphone,Actionscript 3,Flash,Audio,Microphone,我想用闪光灯(as3)监控麦克风音频输入 这只是我代码的一小部分,但实际上问题就在这里 var mic:Microphone = Microphone.getMicrophone(); mic.setLoopBack(true); addEventListener( Event.ENTER_FRAME, loop ); function loop( event:Event ):void { trace( mic.activityLevel ); } 如果我按原样使用代码,我可以跟踪

我想用闪光灯(as3)监控麦克风音频输入

这只是我代码的一小部分,但实际上问题就在这里

var mic:Microphone = Microphone.getMicrophone();
mic.setLoopBack(true);

addEventListener( Event.ENTER_FRAME, loop );

function loop( event:Event ):void {
    trace( mic.activityLevel );
}
如果我按原样使用代码,我可以跟踪
activityLevel
,并且实际上可以看到一些值。。(我想是音量的问题?)

好吧,唯一的问题是,音频也被输出到扬声器,这是我不想要的。。。(
mic.setLoopBack(true);

但是当我尝试
mic.setLoopBack(false)时,flash不再要求麦克风前置任务,跟踪的
活动级别保持“
-1

那么,我可以做些什么来禁用音频环回,或者只监视来自麦克风的音频数据呢


(当我说“音频数据”时,我指的是后期BPM检测所需的所有数据……我认为这是音频的字节数组,不是吗?

作为使麦克风静音的临时解决方案,您可以尝试:

var st:SoundTransform = new SoundTransform(0);
mic.soundTransform = st;

您仍然可以看到活动级别。

作为使麦克风静音的临时解决方案,您可以尝试:

var st:SoundTransform = new SoundTransform(0);
mic.soundTransform = st;

您应该仍然可以看到活动级别。

不使用
setLoopBack()
,您只需要从
麦克风收听
SampleDataEvent
。请注意中标题为“检测麦克风活动”的部分,特别是本说明,其中介绍了如何收听麦克风活动:

注意:麦克风对象仅在应用程序监视麦克风时发送活动事件。因此,如果不调用setLoopBack(true)、为示例数据事件添加侦听器或将麦克风连接到NetStream对象,则不会调度任何活动事件


这应该是一个更为优化的解决方案,因为只有当麦克风检测到声音时才会发送
SampleDataEvent
,而不是当前在每一帧上工作的方法。

而不是使用
setLoopBack()
,您只需要从
麦克风中收听
SampleDataEvent
。请注意中标题为“检测麦克风活动”的部分,特别是本说明,其中介绍了如何收听麦克风活动:

注意:麦克风对象仅在应用程序监视麦克风时发送活动事件。因此,如果不调用setLoopBack(true)、为示例数据事件添加侦听器或将麦克风连接到NetStream对象,则不会调度任何活动事件

这应该是一个更为优化的解决方案,因为只有当麦克风检测到声音时,
SampleDataEvent
才会被调度,而不是当前在每一帧上工作的方法