1

我想用闪光灯( 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 检测所需的所有数据......我认为它是音频的字节数组,不是吗?)

4

2 回答 2

4

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

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

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

于 2013-07-18T00:50:29.553 回答
3

而不是使用setLoopBack(),你只需SampleDataEvent要从Microphone. 请注意这篇 Adob​​e 文章中标题为“检测麦克风活动”的部分,特别是这篇关于您可以监听麦克风活动的方法的说明:

注意: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's 仅在麦克风检测到声音时才会发送,而不是您当前在每一帧上都有效的方法。

于 2013-07-18T02:57:58.280 回答