//////////////////////////////////////////////////////////////////////////////// // // NOTEFLIGHT LLC // Copyright 2009 Noteflight LLC // This filter was created from GainFilter.as by Momo the Monster of MMM Labs // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // //////////////////////////////////////////////////////////////////////////////// package com.noteflight.standingwave2.filters { import com.noteflight.standingwave2.elements.IAudioSource; /** * PanFilter applies a fixed pan factor to the underlying source. */ public class PanFilter extends AbstractFilter { /** The pan factor applied. */ public var pan:Number; /** Variables to hold per-channel transforms */ private var _leftFactor:Number; private var _rightFactor:Number; /** * Create a new PanFilter. * @param source the underlying audio source * @param pan the pan factor, between -1 for hard left and 1 for hard right */ public function PanFilter(source:IAudioSource, pan:Number) { super(source); this.pan = pan; } override protected function transformChannel(data:Vector., channel:Number, start:Number, numFrames:Number):void { if (pan > 0){ _rightFactor = pan; _leftFactor = 1-pan; } else { _rightFactor = 1-Math.abs(pan); _leftFactor = Math.abs(pan); }//end if for (var i:Number = 0; i < numFrames; i++) { switch(channel) { case 0: data[i] *= _leftFactor; break; case 1: data[i] *= _rightFactor; break; }//end case }//end for }//end function transformChannel override public function clone():IAudioSource { return new PanFilter(source.clone(), pan); } } }