My real-time spectrum analyzer code would be a good place to start.  
http://www.audiostretch.com/spectrum/

It grabs audio from the mic, applies a Hanning analysis window, does an FFT, 
converts to a log-magnitude (dB scale) spectrum, and plots the spectrum at 
regular time intervals.  It doesn't go quite so far as extracting the 
pitch/note, but that's mostly a matter of finding the first big peak in the 
spectrum, and doing a bit of interpolation around the peak to get sub-FFT-bin 
accuracy.  

Code can be found here:
http://gerrybeauregard.wordpress.com/2010/08/06/real-time-spectrum-analysis/

It relies on my FFT which can be found here:
http://gerrybeauregard.wordpress.com/2010/08/03/an-even-faster-as3-fft/

-Gerry



On 2011-11-23  , at 22:11 , allandt bik-elliott wrote:

> hey guys
> 
> does anyone have any references / links to help me understand how to
> extract the note / tone / pitch from a sound captured from a mic
> 
> i have a view to deal with the mic and i am capturing the output correctly
> but i need to understand how to check it for specific pitch ranges
> 
> here is my class so far - i'd like the controller to be able to apply some
> logic to decide how the app should respond from there (using
> controller.updateAudioSample(audioChunk);)
> 
> [CODE]
> package uk.co.publicis.toothbrushdetectorapp.views
> {
> // imports
>        ...
> public class MicView extends View implements IView
> {
> private var _mic : Microphone;
> public function MicView(model:Model, controller:Controller=null)
> {
> super(model, controller);
> init();
> }
> private function init():void
> {
> if (Microphone.isSupported)
> {
> _mic = Microphone.getMicrophone();
> _mic.enableVAD = true;
> _mic.encodeQuality = 0;
> _mic.rate = 8;
> }
> }
> /* INTERFACE uk.co.publicis.toothbrushdetectorapp.views.IView */
> public function destroy():Boolean
> {
> disable();
> _mic = null;
> return true;
> }
> public function enable():Boolean
> {
> if (Microphone.isSupported)
> {
> _mic.addEventListener(ActivityEvent.ACTIVITY, handleActivity);
> // odd behaviour - if this is not added here, no ActivityEvent.ACTIVITY
> will be captured either.
> // makes it impossible to start / stop capturing the SAMPLE_DATA on
> ACTIVITY events
> _mic.addEventListener(SampleDataEvent.SAMPLE_DATA, handleSampleData);
> }
> return true;
> }
> public function disable():Boolean
> {
> if (Microphone.isSupported)
> {
> _mic.removeEventListener(ActivityEvent.ACTIVITY, handleActivity);
> _mic.removeEventListener(SampleDataEvent.SAMPLE_DATA, handleSampleData);
> }
> return true;
> }
> private function handleActivity(e:ActivityEvent):void
> {
> if (e.activating)
> {
> controller.activate();
> }
> else
> {
> controller.deactivate();
> }
> }
> private function handleSampleData(e:SampleDataEvent):void
> {
> var audioChunk:ByteArray = e.data as ByteArray;
> controller.updateAudioSample(audioChunk);
> }
> public function get model():TBDModel
> {
> return _model as TBDModel;
> }
> public function get controller():TBDController
> {
> return _controller as TBDController;
> }
> }
> }
> [/CODE]
> 
> thanks in advance
> a
> _______________________________________________
> Flashcoders mailing list
> [email protected]
> http://chattyfig.figleaf.com/mailman/listinfo/flashcoders


_______________________________________________
Flashcoders mailing list
[email protected]
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Reply via email to