我想用闪光灯监听麦克风音频输入(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不再要求麦克风提交,并且跟踪的activityLevel
保持“-1
”.....
那么我该怎么做才能禁用音频环回或只是监听麦克风的音频数据。 ?
(当我说“音频数据”时,我的意思是后来的BPM检测所需的所有数据......我认为它是音频的字节数组,不是吗?)
答案 0 :(得分:4)
作为静音麦克风的临时解决方案,您可以尝试:
var st:SoundTransform = new SoundTransform(0);
mic.soundTransform = st;
您仍应看到活动级别。
答案 1 :(得分:3)
您只需要从setLoopBack()
收听SampleDataEvent
,而不是使用Microphone
。请注意this Adobe article中标题为“检测麦克风活动”的部分,特别是此说明中介绍了可以侦听麦克风活动的方法:
注意:当您的应用程序监控麦克风时,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
仅在麦克风检测到声音时发送,而不是当前适用于每一帧的方法。