Показать сообщение отдельно
Старый 02.09.2011, 17:15
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 5  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
extact нужен, потому как распарсить mp3 вручную врядли получиться
а если скормить его саунду, то у него через extact можно взяьт все что нужно:
Код AS3:
public class Main extends Sprite 
{
	private var sound:Sound;
 
	public function Main():void 
	{
		sound = new Sound();
		sound.load(new URLRequest("test.mp3"));
		sound.play();
		sound.addEventListener(Event.COMPLETE, sound_complete);
	}
 
	private function sound_complete(e:Event):void 
	{
		//ByteArray сэмплов
		var ba:ByteArray = new ByteArray();
		var soundLength:int = (sound.length / 1000) * 44100;
		sound.extract(ba, soundLength);
 
		// массивы всех сэмплов саунда в Namber'ах
		var samplesLength:int = ba.length / 8;
		var arrLeft:Array = [];
		var arrRight:Array = [];
		ba.position = 0;
		for (var i:int = 0; i < samplesLength; i++) 
		{
			arrLeft.push(ba.readFloat());
			arrRight.push(ba.readFloat());
		}
		// что с ними  такими здоровыми делать не ясно
		// например нарисуем левый канал через каждую 10000-ную точку
		// остальные 9999 - баласт, 
		// т.е. лучше видимо сразу из ByteArray брать только то что надо, не загоняя в массив
		var tY:Number = 200;
		var kY:Number = 100;
		graphics.lineStyle(1, 0xFF0000);
		graphics.moveTo(0, tY);
		var step:int = 1e4;
 
		for (var j:int = 0; j < arrLeft.length; j+=step) 
		{
			var dX:Number = j / step;
			var dY:Number = kY * arrLeft[j];
			graphics.lineTo(dX, tY + dY);
 
		}
	}
}