Показать сообщение отдельно
Старый 01.04.2011, 21:27
Likoniko вне форума Посмотреть профиль Отправить личное сообщение для Likoniko Найти все сообщения от Likoniko
  № 5  
Ответить с цитированием
Likoniko

Регистрация: Dec 2010
Сообщений: 81
Код AS3:
function onvolumePlay(event:MouseEvent):void
{
	offmark = true;
	volumeP = soundTrans.volume;
	offvolume_mc.visible = true;
	onvolume_mc.visible = false;
	volume_mc.volumefill_mc.width = 0;
	soundTrans.volume = 0;
	soundCha.soundTransform = soundTrans;
}//основная ПУСК функция
function PlaySound():void
{// основная функция которая воспроизводит звук
	reqUrl.url = arrayUrl[track];// получаем адрес трека
	var nextTitle:Sound = new Sound(reqUrl);// т.к. в один объект два звука не загрузить то мы создаем промежуточный объект загружаем в него а потом просто приравниваем основной к нему загружаем его
	soundObj = nextTitle;
 
 
	name_txt.text = (track+1)+"/"+arrayUrl.length+" Не удалось прочитать ID3 тэги";// делаем стандартную строку (она станется если функция чтения тэгов ее не обновит)
	soundObj.addEventListener(ProgressEvent.PROGRESS, LoadProgress);
	// создаем слушатель прогреса загрузки
	soundObj.addEventListener(Event.ID3, id3Handler); // и получения тэгов
	addEventListener(Event.ENTER_FRAME, renderSpectrum); ;// создаем событие ENTER_FRAME которое будет запускать функцию прорисовки аналайзера
	addEventListener(Event.ENTER_FRAME, Progress);// и ENTER_FRAME для програсса воспроизведения
 
 
	soundCha = soundObj.play(setPosition);// запускаем звук в нужном нам канале с определенной позиции
 
 
	soundTrans.volume = volumeS;// устанавливаем кромкость 
	soundCha.soundTransform = soundTrans;// и присваиваем ее каналу нужному
	soundCha.addEventListener(Event.SOUND_COMPLETE, fullTrack);
	// запустит функцию меняющую трэк при достижении конца трэка текущего
 
	if(offmark){;// обработка уровня громкости если включено MUTE
	soundTrans.volume = 0;
	soundCha.soundTransform = soundTrans;
}
else
{
	soundTrans.volume = volumeS;
	soundCha.soundTransform = soundTrans;
}
}//отображение прогреса воспроизведения
function Progress(event:Event):void
{
loaded = soundObj.bytesTotal / soundObj.bytesLoaded;// просчитываем какую часть мы загрузили это нужно для поправики в отображения прогресса
progress_mc.progressfill_mc.x = Math.round(200*(soundCha.position/(soundObj.length*loaded)))-200;// двигаем полосу прокресса
var allsec:int = Math.floor(soundCha.position / 1000);// и считаем секунды воспроизведения
var min:int = Math.floor(allsec / 60);//
var sec:int = allsec-(Math.floor(allsec/60)*60);//
if (sec < 10)
{
	time_txt.text = String(min) + ".0" + String(sec);//формируем текстовую строку с итогами посдчетов
}
else
{
	time_txt.text = String(min) + "." + String(sec);//формируем текстовую строку с итогами посдчетов
}
}//визуализатор
function renderSpectrum(event:Event):void
{// здесь мы заставляем аналайзер показывать нам правду
SoundMixer.computeSpectrum(soundBytes, false, 0);
// получаем инфу о звуке
array = byteToReal(soundBytes); ;// преобразование
array = FFT(array,256);// тоже
array = complexToReal(array);// и это тоже
//и теперь уже удобоваримые данные мы используем для прорисовки уровней
for (var i:int = 1; i<17; i++)
{
	var spektr = this.getChildByName("spektr" + i + "_mc");
	spektr.mask0_mc.scaleY = array[i * 7] / 4;
}
}//битовый массив в реальный
function byteToReal(arr:ByteArray):Array
{
var realArr:Array = new Array();// Создаем массив для результата расшифровки
for (var i:int = 0; i<256; i++)
{// Расшифровываем первые 256 значений - левый канал
	realArr[i] = arr.readFloat();
}
for (var k:int=0; k<256; k++)
{// Расшифровываем остальные 256 значений - правый
	realArr[k] = (arr.readFloat()+realArr[k])/2;// Здесь значения для левого и правого канала
	// складываются и делятся на 2 (среднее арифметическое)
}
return realArr;//Возвращаем результат
}// преобразования фурье
function FFT(a:Array, tnn:int):Array
{
if (a[1] + a[128] == 0)
{
	return a;
}
var twr:Number;
var twi:Number;
var twpr:Number;
var twpi:Number;
var twtemp:Number;
var ttheta:Number;
var i:int;
var i1:int;
var i2:int;
var i3:int;
var i4:int;
var c1:Number;
var c2:Number;
var h1r:Number;
var h1i:Number;
var h2r:Number;
var h2i:Number;
var wrs:Number;
var wis:Number;
var nn:int;
var ii:int;
var jj:int;
var n:int;
var mmax:int;
var m:int;
var j:int;
var istep:int;
var isign:int;
var wtemp:Number;
var wr:Number;
var wpr:Number;
var wpi:Number;
var wi:Number;
var theta:Number;
var tempr:Number;
var tempi:Number;
var tmp:Number;
ttheta = 2 * Math.PI / tnn;
c1 = 0.5;
c2 = -0.5;
isign = 1;
n = tnn;
nn = tnn / 2;
j = 1;
ii = 1;
while (ii<=nn)
{
	i = 2 * ii - 1;
	if (j > i)
	{
		tempr = a[j - 1];
		tempi = a[j];
		a[j - 1] = a[i - 1];
		a[j] = a[i];
		a[i - 1] = tempr;
		a[i] = tempi;
	}
	m = nn;
	while (m>=2 && j>m)
	{
		j = j - m;
		m = m / 2;
	}
	j = j + m;
	ii++;
}
mmax = 2;
while (n>mmax)
{
	istep = 2 * mmax;
	theta = 2*Math.PI/(isign*mmax);
	tmp = Math.sin(0.5 * theta);
	wpr = -2.0 * tmp * tmp;
	wpi = Math.sin(theta);
	wr = 1.0;
	wi = 0.0;
	ii = 1;
	while (ii<=mmax / 2)
	{
		m = 2 * ii - 1;
		jj = 0;
		while (jj<=(n-m) / istep)
		{
			i = m + jj * istep;
			j = i + mmax;
			tempr = wr * a[j - 1] - wi * a[j];
			tempi = wr * a[j] + wi * a[j - 1];
			a[j - 1] = a[i - 1] - tempr;
			a[j] = a[i] - tempi;
			a[i - 1] = a[i - 1] + tempr;
			a[i] = a[i] + tempi;
			jj++;
		}
		wtemp = wr;
		wr = wr * wpr - wi * wpi + wr;
		wi = wi * wpr + wtemp * wpi + wi;
		ii++;
	}
	mmax = istep;
}
tmp = Math.sin(0.5 * ttheta);
twpr = -2.0 * tmp * tmp;
twpi = Math.sin(ttheta);
twr = 1.0 + twpr;
twi = twpi;
i = 2;
while (i<=tnn / 4+1)
{
	i1 = i + i - 2;
	i2 = i1 + 1;
	i3 = tnn + 1 - i2;
	i4 = i3 + 1;
	wrs = twr;
	wis = twi;
	h1r = c1*(a[i1]+a[i3]);
	h1i = c1*(a[i2]-a[i4]);
	h2r = -c2*(a[i2]+a[i4]);
	h2i = c2*(a[i1]-a[i3]);
	a[i1] = h1r + wrs * h2r - wis * h2i;
	a[i2] = h1i + wrs * h2i + wis * h2r;
	a[i3] = h1r - wrs * h2r + wis * h2i;
	a[i4] =  -  h1i + wrs * h2i + wis * h2r;
	twtemp = twr;
	twr = twr * twpr - twi * twpi + twr;
	twi = twi * twpr + twtemp * twpi + twi;
	i++;
}
h1r = a[0];
a[0] = h1r + a[1];
a[1] = h1r - a[1];
return a;
}//Преобразование комплексных в реальные числа
function complexToReal(arr:Array):Array
{
for (var i:int = 1; i<=128; i++)
{// i = 1 т.к 0 и 1 ячейки массива - служебные
	arr[i - 1] = Math.sqrt(arr[i * 2] * arr[i * 2] + arr[i * 2 + 1] * arr[i * 2 + 1]);//Находим модуль комплексного числа
}
arr.splice(127);// Отрезаем от массива лишние элементы, начиная от 127
return arr;// Возвращаем 127 элементов (0 - 126)
}// типа запуск // типа нет
//initPlayMp3();