Показать сообщение отдельно
Старый 08.12.2011, 20:41
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 9  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
битрейт в каждой секунде получать незачем, ведь если использовать SampleDataEvent.SAMPLE_DATA, то он сам посебе получается. Пример: загружается файл 350КБ звука и можно вырезать из него каждую десятую часть.
Код AS3:
package  
{
	import flash.display.*;
	import flash.events.*;
	import flash.system.*;
	import flash.text.*;
	import flash.ui.*;
	import flash.utils.*;
	import flash.sampler.*;
	import flash.media.*;
	import flash.net.*;
	import flash.external.*;
	/**
	 * ...
	 * @author Lexcuk
	 * http://murmadillo.tut.su/m/bmw.swf
	 */
	public class DocMp3 extends Sprite
	{
		private var sound:Sound;
		private var soundChanel:SoundChannel;
		private var navTxt:TextField;
		private var mp3Samples:Vector.<Number>;
		private var samples:Vector.<Number>;
		private var pos:uint;
		private var i:uint = 0;
		public function DocMp3() 
		{
			navTxt = new TextField();
			sound = new Sound();
			sound.addEventListener(Event.COMPLETE, soundCompleteHandler);
			sound.load(new URLRequest('bmw.mp3'));
			samples = new Vector.<Number>();
		}
 
		public function soundCompleteHandler(e:Event):void {
			trace('load done');
			var ba:ByteArray = new ByteArray();
			sound.extract(ba, sound.bytesLoaded);
			var n:Number;
			mp3Samples = new Vector.<Number>();
			ba.position = 0;
			while (ba.bytesAvailable > 0) {
				samples.push(n = ba.readFloat());
				mp3Samples.push(n);
			}
			sound = new Sound();
			sound.addEventListener(SampleDataEvent.SAMPLE_DATA, soundSampleDataHandler);
			soundChanel = sound.play();
			createProcentTxt();
		}
 
		private function createProcentTxt():void {
			var str:String = '';
			for (i=0; i<100; i+=10) str = str + "<a href=\'event:"+i+"\'><u>[procent "+i+"]</a>\n";
			navTxt = new TextField();
			navTxt.autoSize = TextFieldAutoSize.LEFT;
			addChild(navTxt);//добавить на рабочее поле
			navTxt.htmlText = str;
			navTxt.addEventListener(TextEvent.LINK, txtLinkHandler);
		}
 
		private function txtLinkHandler(param1:TextEvent):void {
			var procent:Number = Number(param1.text);
			if (procent != 0) procent = procent / 100;
			samples.length = 0;
			for (i = procent*mp3Samples.length; i < procent*mp3Samples.length+mp3Samples.length/10; i++) {
				if (i >= mp3Samples.length) break;
				samples.push(mp3Samples[i]);
			}
		}
 
		private function soundSampleDataHandler(event:SampleDataEvent):void {
			var n:Number = 0;
			pos += 8192/2;
			for (i = pos; i < pos + 8192/2; i++) {
				if (i >= samples.length) { 
					pos = 0; 
					if (soundChanel != null) soundChanel.stop();
					soundChanel = sound.play(); 
					break; 
				}
				event.data.writeFloat(n = samples[i]);
				//event.data.writeFloat(n);//замедлние
			}
		}
 
 
	}
 
}
http://murmadillo.tut.su/m/bmw.swf
ПС: Уменьшите громкость колонок, РОК... Кнопки стоп НЕТУ.
__________________
Гоночка