如何检测新麦克风是否可用?

时间:2011-06-01 13:51:15

标签: flash flex actionscript-3 microphone

如果有一个可用的麦克风,那么可以为StatusEvent添加一个事件监听器。但是,这只会告诉您麦克风是被允许还是被禁止。

我真正想做的是检测静态Microphone.names属性是否发生变化。我原以为这个属性是可绑定的。

如果我在插入麦克风后立即右键单击并选择“设置”,我可以看到闪存已更新其可用麦克风列表。但是,在代码中似乎没有办法让我接收相同的更新。

文档说“调用Microphone.names需要对硬件进行全面检查,构建阵列可能需要几秒钟。”所以我认为每隔几秒轮询一次就不是一个可行的选择。

3 个答案:

答案 0 :(得分:0)

我不确定你是否可以在Microphone的'names'数组上设置一个实际可行的更改观察器,因为只有每次更新数组的引用(新数组)时才会调用观察器。所以这是未经测试的,但需要尝试:

var watcher:ChangeWatcher = ChangeWatcher.watch(Microphone, ['names'], onNameChange);

只需要创建onNameChange处理程序以查看它是否实际被调用。如果这不起作用,那么你需要每隔x个时间进行某种名称的“轮询”。

答案 1 :(得分:0)

我运行了一个小测试脚本:

var ta:TextArea = new TextArea();
    ta.width = ta.height = 500;
    addChild(ta);
    var t:Timer = new Timer(5000);
    t.addEventListener(TimerEvent.TIMER, function(e:Event):void{
        var t0:uint = getTimer();

        var m:* = Microphone.getMicrophone();

        ta.text += "mic found: "+(m?true:false)+" "+(getTimer()-t0);

        t0 = getTimer();
        var o:* = Microphone.names;
        ta.text += "\t\ttime to get names: "+(getTimer()-t0)+"\n";

    });
    t.start();

结果总是少于10毫秒(getMicrophone是0-3ms,名字是2-9ms),这对我来说似乎相当快。我不知道,也许这是我的电脑,但它似乎并不太强烈。因为getMicrophone就是我所需要的,所以没有关于它的使用的官方警告,并且它的速度稍微快一些,我将每隔几秒左右轮询一次getMicrophone来处理这个问题。

如果此处有人关心运行此脚本并对您的结果提供一些反馈,这可能会帮助我和其他人做出更好的选择。

答案 2 :(得分:-1)

正如你所说,没有任何事件暴露在这个问题上。 该属性不可绑定,因为Microphone是Flash播放器功能,而不是Flex麦克风包装器(因为今天的绑定只是Flex)。

我建议你每隔几秒轮询一次Microphone.getMicrophone()并声明它不是null。这个电话远没有那么严格的考试#34;比Microphone.names。