diff options
Diffstat (limited to 'webcam/media/NeaveMicrophone.as')
| -rw-r--r--[-rwxr-xr-x] | webcam/media/NeaveMicrophone.as | 206 |
1 files changed, 103 insertions, 103 deletions
diff --git a/webcam/media/NeaveMicrophone.as b/webcam/media/NeaveMicrophone.as index 6a46ee7..4f6e6c1 100755..100644 --- a/webcam/media/NeaveMicrophone.as +++ b/webcam/media/NeaveMicrophone.as @@ -1,104 +1,104 @@ -/**
- * Neave Microphone
- *
- * Copyright (C) 2008 Paul Neave
- * http://www.neave.com/
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation at http://www.gnu.org/licenses/gpl.html
- */
-
-package com.neave.media
-{
- import flash.events.*;
- import flash.media.*;
- import flash.system.*;
- import flash.utils.*;
-
- public class NeaveMicrophone
- {
- static private var mic:Microphone;
- static private var gainTimer:Timer;
-
- public function NeaveMicrophone() { }
-
- /**
- * Sets up and returns the microphone object
- *
- * @return A microphone object
- */
- static public function getMicrophone():Microphone
- {
- // Return the same microphone if it has been successfully requested before
- if (mic != null)
- {
- if (mic.muted) Security.showSettings(SecurityPanel.PRIVACY);
- else NeaveMicrophone.startAutoGain();
- return mic;
- }
-
- gainTimer = new Timer(100);
-
- // Get the microphone
- mic = Microphone.getMicrophone();
- if (mic != null)
- {
- // Set properties if a microphone was found
- mic.setLoopBack(true);
- mic.rate = 44;
- mic.gain = 25;
- mic.setSilenceLevel(0);
- mic.setUseEchoSuppression(true);
- mic.soundTransform = new SoundTransform(0); // Mute microphone from sounding on speakers
- mic.addEventListener(StatusEvent.STATUS, NeaveMicrophone.statusListener);
-
- return mic;
- }
- else
- {
- // No microphone found
- Security.showSettings(SecurityPanel.MICROPHONE);
- return new Microphone();
- }
- }
-
- /**
- * Microphone status response
- */
- static private function statusListener(e:StatusEvent):void
- {
- if (e.code == "Microphone.Unmuted") NeaveMicrophone.startAutoGain();
- else NeaveMicrophone.stopAutoGain();
- }
-
- /**
- * Set up gain control
- */
- static public function startAutoGain():void
- {
- gainTimer.start();
- if (!gainTimer.hasEventListener(TimerEvent.TIMER)) gainTimer.addEventListener(TimerEvent.TIMER, setGain);
- }
-
- /**
- * Stop gain control
- */
- static public function stopAutoGain():void
- {
- gainTimer.stop();
- gainTimer.reset();
- gainTimer.removeEventListener(TimerEvent.TIMER, setGain);
- }
-
- /**
- * Dynamically adjust the microphone's gain value
- */
- static private function setGain(e:TimerEvent):void
- {
- if (mic.activityLevel < 15) mic.gain = 30;
- else if (mic.activityLevel > 90) mic.gain = 20;
- else mic.gain = 25;
- }
- }
+/** + * Neave Microphone + * + * Copyright (C) 2008 Paul Neave + * http://www.neave.com/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation at http://www.gnu.org/licenses/gpl.html + */ + +package com.neave.media +{ + import flash.events.*; + import flash.media.*; + import flash.system.*; + import flash.utils.*; + + public class NeaveMicrophone + { + static private var mic:Microphone; + static private var gainTimer:Timer; + + public function NeaveMicrophone() { } + + /** + * Sets up and returns the microphone object + * + * @return A microphone object + */ + static public function getMicrophone():Microphone + { + // Return the same microphone if it has been successfully requested before + if (mic != null) + { + if (mic.muted) Security.showSettings(SecurityPanel.PRIVACY); + else NeaveMicrophone.startAutoGain(); + return mic; + } + + gainTimer = new Timer(100); + + // Get the microphone + mic = Microphone.getMicrophone(); + if (mic != null) + { + // Set properties if a microphone was found + mic.setLoopBack(true); + mic.rate = 44; + mic.gain = 25; + mic.setSilenceLevel(0); + mic.setUseEchoSuppression(true); + mic.soundTransform = new SoundTransform(0); // Mute microphone from sounding on speakers + mic.addEventListener(StatusEvent.STATUS, NeaveMicrophone.statusListener); + + return mic; + } + else + { + // No microphone found + Security.showSettings(SecurityPanel.MICROPHONE); + return new Microphone(); + } + } + + /** + * Microphone status response + */ + static private function statusListener(e:StatusEvent):void + { + if (e.code == "Microphone.Unmuted") NeaveMicrophone.startAutoGain(); + else NeaveMicrophone.stopAutoGain(); + } + + /** + * Set up gain control + */ + static public function startAutoGain():void + { + gainTimer.start(); + if (!gainTimer.hasEventListener(TimerEvent.TIMER)) gainTimer.addEventListener(TimerEvent.TIMER, setGain); + } + + /** + * Stop gain control + */ + static public function stopAutoGain():void + { + gainTimer.stop(); + gainTimer.reset(); + gainTimer.removeEventListener(TimerEvent.TIMER, setGain); + } + + /** + * Dynamically adjust the microphone's gain value + */ + static private function setGain(e:TimerEvent):void + { + if (mic.activityLevel < 15) mic.gain = 30; + else if (mic.activityLevel > 90) mic.gain = 20; + else mic.gain = 25; + } + } }
\ No newline at end of file |
