Actionscript 3: Monitoring the activity level for multiple Microphones doesn't seem to work.
        Posted  
        
            by Dave
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Dave
        
        
        
        Published on 2009-08-10T04:28:18Z
        Indexed on 
            2010/04/05
            23:43 UTC
        
        
        Read the original article
        Hit count: 377
        
actionscript-3
For a project I want to show all available webcams and microphones, so that the user can easily select whichever webcam/microphone combination they prefer. I run into an issue with the microphones listing though.
Each microphone is listed with an activity animation and it's name. I am able to list all Microphones just fine (using the Microphone.names Array), but it seems like I can only get the activity viewer to work for one microphone. The other microphones show up with '-1' activity, which (as far as I know) is Flex for 'present, but not in use'. When unplugging the microphone that does show activity, the next one (in my case, the mic-in line on my motherboard) shows up with '0' activity (it's not connected, so that makes sense).
During my testing I have a total of 3 microphones available, the not-connected onboard mic-in port, and two connected microphones.
For testing purposes I use a timer that traces the current microphone activity each 100ms and the graph is also shown.
It does not seem to matter what default microphone I set via flash' settings panel.
The code
I've only attached the revelant code snippets below to make it easier for you to read through them. Please let me know if you prefer the entire code.
Main application.mxml
Note: cont is a VBox. i is defined before this code snippet.
var mics:Array = Microphone.names;
for(i=0; i < mics.length; i++){
   var mic:settingsMicEntry = new assets.settingsMicEntry;
   mic.d = {name: mics[i], index: i};
   cont.addChild(mic);
}
assets/settingsMicEntry.mxml
timer is defined before this code snippet. the SoundTransform is added to silence local microphone playback. Excluding this code does not solve the problem, sadly (I've tried). display is an MXML Canvas object.
mic = Microphone.getMicrophone(d.index);
if(mic){
    // Temporary: The Microphones' visualizer
   var bar:Box = new Box();
   bar.y = 50;
   bar.height = 0;
   bar.width = 66;
   bar.setStyle("backgroundColor", 0x003300);
   display.addChild(bar);
   var tf:SoundTransform = new SoundTransform(0);
   mic.setLoopBack(true);
   mic.soundTransform = tf;
   timer = new Timer(100);
   timer.addEventListener(TimerEvent.TIMER, function(e:TimerEvent):void{
      var h:int = Math.floor((display.height/100)*mic.activityLevel);
      bar.height = (h>-1) ? h : 0;
      bar.y = (h>-1) ? display.height-h : display.height;
      trace('TIMER: '+h+' from '+d.name);
   });
   timer.start();
}
I'm pulling my hear out here, so any help is much appreciated!
Thanks,
-Dave
Ps.: Pardon the messiness of the code!
© Stack Overflow or respective owner