[英]getMicrophone() in as3 only works when using setLoopBack()
我想用闪光灯(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);
,闪光灯不再要求麦克风允许,并且所跟踪的activityLevel
保持为“ -1
” .....
因此,我该怎么做才能禁用音频回送或仅监视麦克风中的音频数据。 ?
(当我说“音频数据”时,我的意思是稍后BPM检测所需的所有数据...我认为这是音频的字节数组,对吗?)
作为使麦克风静音的临时解决方案,您可以尝试:
var st:SoundTransform = new SoundTransform(0);
mic.soundTransform = st;
您仍然应该看到活动级别。
无需使用setLoopBack()
,您只需要从Microphone
监听SampleDataEvent
。 请注意此Adobe文章中标题为“检测麦克风活动”的部分,尤其是此笔记,它讨论了如何侦听麦克风活动:
注意:Microphone对象仅在您的应用程序正在监视麦克风时调度Activity事件。 因此,如果不调用setLoopBack(true),添加示例数据事件的侦听器或将麦克风附加到NetStream对象,则不会调度任何活动事件。
var mic:Microhpone = Microphone.getMicrophone;
mic.addEventListener(SampleDataEvent.SAMPLE_DATA, onSampleData);
function onSampleData(event:SampleDataEvent):void
{
trace("activity from: " + mic.name + " level: " + mic.activityLevel);
}
这应该是一个更好的解决方案,因为SampleDataEvent
仅在麦克风检测到声音时才分派,这与当前的方法适用于每一帧相反。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.