http://popforge.googlecode.com/svn/trunk/flash/Examples/src/PlayWavfile.as
把那6个例子都试验了一遍
package
{
import de.popforge.audio.output.Audio;
import de.popforge.audio.output.AudioBuffer;
import de.popforge.audio.output.Sample;
import de.popforge.audio.processor.effects.Distort;
import de.popforge.format.wav.WavFormat;
import de.popforge.interpolation.InterpolationCubic;
import de.popforge.parameter.MappingNumberLinear;
import de.popforge.parameter.Parameter;
import de.popforge.ui.procontroll.ProcontrollControl;
import de.popforge.ui.procontroll.ProcontrollDevice;
import de.popforge.ui.procontroll.ProcontrollStick;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.geom.Point;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
import de.popforge.audio.processor.effects.Flanger;
[SWF( backgroundColor='0xcccccc', frameRate='30', width='320', height='240')]
/**
* Example PlayWavfile
* Creates endless dynamic audio with the content of a wavefile
*
* @author Andre Michelle
*/
public class PlayWavfile extends Sprite
{
private var wav: WavFormat;
private var phase: Number;
private var pcc: ProcontrollControl;
private var filter: Flanger;
private var parameterPitch: Parameter;
public function PlayWavfile()
{
parameterPitch = new Parameter( new MappingNumberLinear( -1, 3 ), 1 );
filter = new Flanger();
/**
* You need to have the Java server running and
* a Joystick with 'analogue sticks'
* Otherwise it is simply ignored.
*/
pcc = new ProcontrollControl( 'localhost', 10002 );
//pcc.addEventListener( Event.INIT, onControlsInit );
loadWave();
}
private function onControlsInit( event: Event ): void
{
var device: ProcontrollDevice = pcc.getDeviceByName( 'Logitech Dual Action' );
if( device != null )
{
ProcontrollStick( device.sticks[0] ).setParameterX( parameterPitch );
//ProcontrollStick( device.sticks[1] ).setParameterX( filter.parameterX );
//ProcontrollStick( device.sticks[1] ).setParameterY( filter.parameterY );
}
}
private function loadWave(): void
{
var loader: URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.BINARY;
loader.addEventListener( Event.COMPLETE, onLoaderComplete );
loader.addEventListener( IOErrorEvent.IO_ERROR, onLoaderError );
loader.load( new URLRequest( 'highQ.wav' ) );//这加要播放的wav
}
private function onLoaderComplete( event: Event ): void
{
var loader: URLLoader = URLLoader( event.target );
wav = WavFormat.decode( loader.data );
initAudioEngine();
}
private function onLoaderError( event: IOErrorEvent ): void
{
trace( event );
}
private function initAudioEngine(): void
{
var buffer: AudioBuffer = new AudioBuffer( 4, Audio.STEREO, Audio.BIT16, Audio.RATE44100 );
buffer.onInit = onAudioBufferInit;
buffer.onComplete = onAudioBufferComplete;
phase = 0;
}
private function onAudioBufferInit( buffer: AudioBuffer ): void
{
buffer.start();
}
private function onAudioBufferComplete( buffer: AudioBuffer ): void
{
//-- get array to store samples
var samples: Array = buffer.getSamples();
//-- some locals
var output: Sample;
var input: Sample;
//-- compute speed
var speed: Number = wav.rate / buffer.getRate() * parameterPitch.getValue();
//-- CREATE ONE SECOND OF AUDIO (SINUS WAVE)
for( var i: int = 0 ; i < samples.length ; i++ )
{
//-- store local
output = samples[i];
input = wav.samples[ int( phase ) ];
//-- write to sample
output.left = input.left;
output.right = input.right;
//-- move pointer
phase += speed;
if( phase < 0 )
phase += wav.samples.length;
else if( phase >= wav.samples.length )
phase -= wav.samples.length;
}
filter.processAudio( samples );
//-- update audio buffer
buffer.update();
}
}
}
http://sunhaobo.com/blog/PermaLink.aspx?id=74
package
{
import de.popforge.audio.output.SoundFactory;
import de.popforge.audio.output.Audio;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.ErrorEvent;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
import flash.events.IOErrorEvent;
import flash.utils.ByteArray;
import flash.media.Sound;
import flash.media.SoundChannel;
public class Test extends Sprite
{
private var _wavLoader:URLLoader;
private var _wavRequest:URLRequest;
private var _wave:ByteArray;
private var _channel:SoundChannel;
public function Test()
{
_wavRequest = new URLRequest();
_wavRequest.url = "wav/1.wav";
_wavLoader = new URLLoader();
_wavLoader.dataFormat = URLLoaderDataFormat.BINARY;
_wavLoader.load(_wavRequest);
_wavLoader.addEventListener(Event.COMPLETE,onStartPlay);
_wavLoader.addEventListener(IOErrorEvent.IO_ERROR,onIoErr);
_channel = new SoundChannel();
}
private function onStartPlay(evt:Event):void
{
_wave = _wavLoader.data as ByteArray;
SoundFactory.fromByteArray(_wave,Audio.MONO,Audio.BIT16,Audio.RATE22050,onOk);
}
private function onIoErr(evt:IOErrorEvent):void
{
trace("文件不存在:"+evt.text);
}
private function onOk(evt:Sound):void
{
_wavLoader.close();
_wave = null;
_channel = evt.play();
_channel.addEventListener(Event.SOUND_COMPLETE,onSoundComplete);
}
private function onSoundComplete(evt:Event):void
{
trace("good");
}
}
}