Audio 是否可以在Flash中应用声音过滤器?
所以基本上我有一个用FlashCS5制作的音板,有没有可能只用FlashCS5替换图书馆音频文件的声音?比如让剪辑听起来更深或更快,这就是重点。但是如果它不是pisbile您就不能在AS2中完成它。但是,您可以在AS3中更改声音的音调和播放速度。事实上,您可以做更多的事情(搜索Audiotool),但这说明了如何做到这一点: 如果我的博客出了问题,这里有一个改变音高的相关课程: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
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 >= 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 > _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;移动到这个位置,如果我