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: 328

Filed under:

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

Related posts about actionscript-3