Я пытаюсь сделать так, чтобы «робот» говорил на моем сайте. Рот должен синхронизироваться со звуком, и я думаю ... вспышка? - PullRequest
0 голосов
/ 05 января 2011

Я видел, что некоторые веб-сайты предлагают говорящих персонажей (очень человеческие аватары), но я не хочу платить ОГРОМНЫЕ деньги за них.Поэтому я начал думать о некоторых мультфильмах, которые раньше смотрел, и если бы был говорящий компьютер, их способ визуально изобразить речь был бы с помощью эквалайзера.

Для «робота» у меня было бы всего 2 точкидля глаз, носа и «рта», но этот рот был бы действительно эквалайзером, и я мог бы оживить это с помощью вспышки, чтобы при громком звуке рот открывался шире, чем при мягком звуке (если вы смотрите эквалайзер, полоски поднимаются вверх и становятся красными, когда музыка громкая, и остаются низкими и зелеными, когда звук тихий)

Единственная веб-технология, которая, как мне кажется, могла бы сделать такое, - это вспышкано я знаю очень-очень мало вспышки.Я искал, искал и искал, и все учебники по эквалайзеру, которые я нашел, - это просто полосы со случайными движениями, которые не синхронизируются со звуком.Можно ли синхронизировать звук и вспышку, чтобы сделать эквалайзер?

1 Ответ

0 голосов
/ 06 января 2011

Чтобы получить спектр звука, используйте SoundMixer.computeSpectrum (), это заполнит предоставленный массив 512 значениями (256 для каждого канала, левого и правого), в диапазоне от -1 до 1. Я использую это для рисования маленьких полос чтобы показать, что звук отправляется. Я создаю Таймер, поэтому он вызывается пару раз в секунду, и это дает отличный эффект.

Чтобы действительно легко получить то, что вам нужно, вы можете нарисовать горизонтальную линию размером 512 пикселей, каждый пиксель является значением из массива, а затем масштабировать по вертикали в зависимости от того, насколько большим должно быть приложение флэш-памяти (например, умножьте значение на 100 до получите фильм высотой 200px).

Вот пример, который я сделал несколько лет назад http://lakehousemusic.net/player/index.html?num=3

...