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

Регистрация: Dec 2007
Сообщений: 11
Конечно триал, раньше вроде она как 500 долларов стоила, сейчас не знаю
В общем - я в примерах кода когда в этом разделе форума искал звуковые, почему-то ни один не нашел. Ни по слову "soun" ни по слову "зву".
А тема нужная. Может мой запишем?

Суть - надо зациклить звук, у которого (особенно если он MP3) есть паузы в начале и конце, короче, чтобы интервал между началом воспроизведения был немного меньше длины звука.

Я воспользовался советом из статьи "Ди-джейский пульт от Антона Волкова (с изложением технологии создания)":

"Дело в том, что звуковой тайм-лайн как бы разбит на фреймы по 46.43 микросекунды. Поэтому, если мы пытаемся запустить звук между фреймами, то реально он запуститься только в следующем.

Кажется, не смертельно, но когда вы запускаете/выключаете лупы несколько раз, накапливается большая ошибка и начинается десинхронизация лупов (ударные сами по себе, а бас сам по себе).

Единственным правильным решением остаётся все лупы делать длиной кратной 46.43 мс, и осуществлять запуск в кратные 46.43 мс точки тайм-лайна.

Для реализации второго необходимо взять звук нулевой длины. Запустить его, прописав у него в onSoundComplete повторный запуск самого же себя, ну и сделать какую то засечку для основного кода."

Код:
var s=new Sound();
s.attachSound("music");

var pause=2;// in dt (dt=46.43 ms)
var interv=Math.ceil((s.duration)/46.43)-pause;
var left=0; // intervals left (intervals of 46.43)

var e=new Sound();
e.attachSound("empty");
e.onSoundComplete = function() {
	this.start();
	left=left-1;
	if (left<=0) {
		left=interv;
		s.start();
	};
};
e.start();
Хотя у меня звук один, я боялся, что через несколько повторений из-за ошибок округления начнут пробегать паузы между итерациями.

Тут встала еще одна тонкость - Flash MX 6 звук wav нулевой длины не импортирует, говорит, ошибка возникла при попытке чтения.

Пришлось сделать просто короткий звук (все укорачивая в программе Звукозапись записанный звук, и делая его все тише, ибо к сожалению звук нулевой громкости то ли не вызывает onSoundComplete, то ли еще что). Кстати мой Flash и звук просто короткий не импортирует, с той же ошибкой. Т.е. слишком укоротить тоже опасно. Я в hex-виде смотрел wav - там было несколько сэмплов (1-2 по 4 байта, ибо было stereo 16 bit) - и все равно не импортировалось. Зато если там байт 30, все ОК.

Звук если что могу приложить к примеру.
И описать для новичков, как правильно импортировать звук и приделать к нему alias.
Будет ли это полезно?

Переменная pause задает количество интервалов по 46,... мс, на которые укорачиваем звук. Правда, его начальная длина принимается округленной до ближайшего целого количества этих самых интервалов, так что даже при pause==0 звук может быть слегка удлинен или укорочен.
Конечно, надо будет и комментариев добавить


Последний раз редактировалось OVFlash; 30.12.2007 в 17:52.