flex播放wav的声音

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");
  }
 }
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值