Audio 是否可以在Flash中应用声音过滤器?

Audio 是否可以在Flash中应用声音过滤器?,audio,actionscript,filter,actionscript-2,flash-cs6,Audio,Actionscript,Filter,Actionscript 2,Flash Cs6,所以基本上我有一个用FlashCS5制作的音板,有没有可能只用FlashCS5替换图书馆音频文件的声音?比如让剪辑听起来更深或更快,这就是重点。但是如果它不是pisbile您就不能在AS2中完成它。但是,您可以在AS3中更改声音的音调和播放速度。事实上,您可以做更多的事情(搜索Audiotool),但这说明了如何做到这一点: 如果我的博客出了问题,这里有一个改变音高的相关课程: package sound { import flash.events.Event; imp

所以基本上我有一个用FlashCS5制作的音板,有没有可能只用FlashCS5替换图书馆音频文件的声音?比如让剪辑听起来更深或更快,这就是重点。但是如果它不是pisbile

您就不能在AS2中完成它。但是,您可以在AS3中更改声音的音调和播放速度。事实上,您可以做更多的事情(搜索Audiotool),但这说明了如何做到这一点:

如果我的博客出了问题,这里有一个改变音高的相关课程:

    package sound
{
    import flash.events.Event;
    import flash.events.SampleDataEvent;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.media.SoundTransform;
    import flash.net.URLRequest;
    import flash.utils.ByteArray;

/**
 * @author Andre Michelle (andr...@gmail.com)
     * Modified by Zach Foley aka The Plastic Sturgeon
 */
public class MP3Pitch
{
    private const BLOCK_SIZE: int = 3072;

    private var _mp3: Sound;
    private var _sound: Sound;

    private var _target: ByteArray;

    private var _position: Number;
    private var _rate: Number;
    private var repeat:SoundChannel;
    private var _volume:Number = 1;
    private var byteArray:ByteArray;

            // Pass in your looped Sound
    public function MP3Pitch( pitchedSound: Sound)
    {
        _target = new ByteArray();
        _mp3 =  pitchedSound;

        _position = 0.0;
        _rate = 0.0;

        _sound = new Sound();
        _sound.addEventListener( SampleDataEvent.SAMPLE_DATA, sampleData );
        repeat = _sound.play();
    }

    public function get rate(): Number
    {
        return _rate;
    }

            // Also added a handy volume setter
    public function set volume( value: Number ): void
    {
        _volume = value;
        repeat.soundTransform = new SoundTransform(_volume);
    }

            // use this to set the pitch of your sound
    public function set rate( value: Number ): void
    {
        if( value < 0.0 )
            value = 0;

        _rate =  value;
    }

    private function sampleData( event: SampleDataEvent ): void
    {
        //-- REUSE INSTEAD OF RECREATION
        _target.position = 0;

        //-- SHORTCUT
        var data: ByteArray = event.data;

        var scaledBlockSize: Number = BLOCK_SIZE * _rate;
        var positionInt: int = _position;
        var alpha: Number = _position - positionInt;

        var positionTargetNum: Number = alpha;
        var positionTargetInt: int = -1;

        //-- COMPUTE NUMBER OF SAMPLES NEED TO PROCESS BLOCK (+2 FOR INTERPOLATION)
        var need: int = Math.ceil( scaledBlockSize ) + 2;

        //-- EXTRACT SAMPLES
        var read: int = _mp3.extract( _target, need, positionInt );

        var n: int = read == need ? BLOCK_SIZE : read / _rate;

        var l0: Number;
        var r0: Number;
        var l1: Number;
        var r1: Number;

        for( var i: int = 0 ; i < n ; ++i )
        {
            //-- AVOID READING EQUAL SAMPLES, IF RATE < 1.0
            if( int( positionTargetNum ) != positionTargetInt )
            {
                positionTargetInt = positionTargetNum;

                //-- SET TARGET READ POSITION
                _target.position = positionTargetInt << 3;                      //-- READ TWO STEREO SAMPLES FOR LINEAR INTERPOLATION                   l0 = _target.readFloat();                   r0 = _target.readFloat();                   l1 = _target.readFloat();                   r1 = _target.readFloat();               }                               //-- WRITE INTERPOLATED AMPLITUDES INTO STREAM              data.writeFloat( l0 + alpha * ( l1 - l0 ) );                data.writeFloat( r0 + alpha * ( r1 - r0 ) );                                //-- INCREASE TARGET POSITION               positionTargetNum += _rate;                                 //-- INCREASE FRACTION AND CLAMP BETWEEN 0 AND 1                alpha += _rate;                 while( alpha &gt;= 1.0 ) --alpha;
        }

        //-- FILL REST OF STREAM WITH ZEROs
        if( i < BLOCK_SIZE )
        {
            while( i < BLOCK_SIZE )                 {                   data.writeFloat( 0.0 );                     data.writeFloat( 0.0 );                                         ++i;                }           }           //-- INCREASE SOUND POSITION            _position += scaledBlockSize;                        // My little addition here:            if (_position &gt; _mp3.length * 44.1) {
            _position = 0;
            _target.position = 0;
        }
    }
}
}
套装音响
{
导入flash.events.Event;
导入flash.events.SampleDataEvent;
导入flash.media.Sound;
导入flash.media.SoundChannel;
导入flash.media.SoundTransform;
导入flash.net.URLRequest;
导入flash.utils.ByteArray;
/**
*@author Andre Michelle(andr..。@gmail.com)
*由Zach Foley(又名塑料鲟鱼)改良
*/
公共类MP3Pitch
{
私有常量块大小:int=3072;
私人变音mp3:声音;
私人音箱:音箱;
私有var_目标:ByteArray;
私有变量位置:编号;
私人var_比率:数字;
私人频道:声音频道;
私有变量(volume):Number=1 ;;
私人var byteArray:byteArray;
//把你的声音传过来
公共功能MP3Pitch(PitchdSound:Sound)
{
_target=new ByteArray();
_mp3=音调声;
_位置=0.0;
_比率=0.0;
_声音=新声音();
_sound.addEventListener(SampleDataEvent.SAMPLE_数据,sampleData);
重复=_sound.play();
}
公共函数get rate():Number
{
回报率;
}
//还添加了一个方便的音量设置器
公共功能集卷(值:编号):作废
{
_体积=价值;
repeat.soundTransform=新的soundTransform(_volume);
}
//用这个来设置你声音的音调
公共功能设置率(值:编号):无效
{
如果(值<0.0)
数值=0;
_比率=价值;
}
私有函数sampleData(事件:SampleDataEvent):void
{
//--重复使用而不是娱乐
_target.position=0;
//--捷径
var数据:ByteArray=event.data;
var scaledBlockSize:Number=块大小*\u比率;
变量位置int:int=\u位置;
变量alpha:Number=_position-positionInt;
var positionTargetNum:Number=alpha;
变量positionTargetInt:int=-1;
//--计算需要处理块的样本数(+2用于插值)
需要变量:int=Math.ceil(scaledBlockSize)+2;
//--提取样品
var read:int=\u mp3.extract(\u target,need,positionInt);
var n:int=read==need?块大小:读取速率;
变量l0:数字;
var r0:数字;
变量l1:数字;
变量r1:数量;
对于(变量i:int=0;i_target.position=positiontarget你的意思是你想通过ActionScript 3编程来实现你的目标吗?我是说ActionScript 2,但我想带它的标签被删除了。但是如果在AS2中不可能,它在AS3中可以吗?它可以工作。检查你的代码是否有错误。我在几个项目中使用过它。例如,我在这个游戏中使用它o随着气垫车加速,改变发动机的螺距。我最终还是让它工作了。我不记得问题是什么,可能是声音格式。但不管怎样,我还是设法让它工作了。干杯!(另外,你可能想编辑源代码格式为“谢谢-我修复了转义字符。现在它说”好的,我重现了这个类的问题。如果我渲染一个不是320KBPs的mp3,mp3会过早循环。我需要调整块大小吗?我通过修改类来修复它。我将_position=_skip_bytes_at_start;移动到这个位置,如果我