Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.01.2011, 14:28
TWETTI вне форума Посмотреть профиль Отправить личное сообщение для TWETTI Найти все сообщения от TWETTI
  № 11  
Ответить с цитированием
TWETTI
 
Аватар для TWETTI

Регистрация: Dec 2007
Адрес: Россия, Москва
Сообщений: 541
Отправить сообщение для TWETTI с помощью Skype™
Пожалуйста скажите как сделать extract по таймеру, чтобы флеш не зависал и я мог поставить прелоадер.

Добавлено через 1 минуту
Вот мой класс визуализации звука
Код AS3:
package src
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.geom.Rectangle;
	import flash.media.Sound;
	import flash.media.SoundChannel;
	import flash.net.URLRequest;
	import flash.utils.ByteArray;
 
	public class Visualizator extends Sprite 
	{
		var samples:ByteArray = new ByteArray();
		var buffer:BitmapData = new BitmapData(1024,256,true,0x00FFFFFF);
		var screen:Bitmap = new Bitmap(buffer);
		var rect:Rectangle = new Rectangle(0,0,1,0);
		var playingTime:int;
		var ratio:Number;
		var step:int;
		var sound:Sound;
		public function Visualizator(_sound:Sound):void 
		{
			sound = _sound;
		}
 
		public function show():void
		{
			addChild(screen);
 
			buffer.fillRect( buffer.rect, 0 );
			var extract:Number = Math.floor ((sound.length/1000)*44100);
			playingTime = sound.length;
			ratio = playingTime / buffer.width;
			var lng:Number = sound.extract(samples,extract);
			samples.position = 0;
			step = samples.length / 4096;
			do
			{
				step--;
			}
			while ( step % 4 );
 
			var left:Number;
			var right:Number;
			var mono:Number;
 
			for (var c:int = 0; c < 4096; c++)
			{
				rect.x = c / 4;
				left = samples.readFloat() * 128;
				right = samples.readFloat() * 128;
				mono = Math.abs(Math.max(left, right)) + Math.abs(Math.min(left, right));
 
				samples.position = c * step;
 
				if (left > 0)
				{
					rect.y = 128 - left;
					rect.height = left;
				}
				else
				{
					rect.y = 128;
					rect.height =  -  left;
				}
 
				buffer.fillRect( rect, 0xFF5d96da );
 
				if (right > 0)
				{
					rect.y = 128 - right;
					rect.height = right;
				}
				else
				{
					rect.y = 128;
					rect.height =  -  right;
				}
 
				buffer.fillRect( rect, 0xFF5d96da );
			}
			screen.width = 930;
			screen.height = 90;
			dispatchEvent(new Event(Event.COMPLETE));
		}
	}
}
Добавлено через 1 час 11 минут
Ну, что никто не знает как сделать? Срочно надо. Готов заплатить.


Последний раз редактировалось TWETTI; 20.01.2011 в 14:30.
Старый 20.01.2011, 16:55
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 12  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.media.Sound;
	import flash.net.URLRequest;
	import flash.utils.ByteArray;
 
	public class Main extends Sprite 
	{
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private var _sound:Sound;
		private var _bytes:ByteArray = new ByteArray();
		private var _soundLenght:Number;
		private var _sample:Number = 32768;
		private var _startPosition:Number = 0;
 
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
 
			var req:URLRequest = new URLRequest("Sunglasses.mp3");
 
			_sound = new Sound();
			_sound.addEventListener(Event.COMPLETE, sound_CompleteHandler);
			_sound.load(req);
		}
 
		private function sound_CompleteHandler(event:Event):void
		{
			_soundLenght = _sound.length * 44.1;
 
			addEventListener(Event.ENTER_FRAME, extractPart);
		}
 
		private function extractPart(event:Event):void
		{
			if (_startPosition < (_soundLenght - _sample))
			{
				_startPosition += _sound.extract(_bytes, _sample);
			}
			else
			{
				_startPosition += _sound.extract(_bytes, _soundLenght - _startPosition);
				removeEventListener(Event.ENTER_FRAME, extractPart);
			}
			trace("soundLenght: " + _soundLenght);
			trace("extraxted: " + int(_startPosition / _soundLenght * 100) + '%');
			trace(_startPosition);
		}
	}
}


Последний раз редактировалось alatar; 20.01.2011 в 18:25.
Создать новую тему Ответ Часовой пояс GMT +4, время: 01:52.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 01:52.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.