6/24–3 часа спринт

Цель эксперимента 5:

Предварительный просмотр динамического альбома с музыкальным визуализатором

  • Визуализация и анимация музыкального визуализатора Bar-Wave, например: https://aframe.io/examples/showcase/audio-visualization/
  • Отображение нескольких кнопок альбома
  • On-Gaze ​​Изменить выбранную рамку альбома, среду альбома и дорожку альбома

Эксперимент 5 отправлен:

Предварительный просмотр динамического альбома с музыкальным визуализатором

Пример ниже работает, только если автовоспроизведение включено. Если вы используете Chrome, это маловероятно - я предлагаю использовать следующую ссылку в Firefox.

Https://musicworldtest4.neocities.org/

который…

  • Визуализирует и анимирует музыкальный визуализатор Bar-Wave, например: https://aframe.io/examples/showcase/audio-visualization/
  • Отображает несколько кнопок альбома
  • On-Gaze ​​Изменить окно выбранного альбома, среду альбома и дорожку альбома .

Резюме:

Это очень захватывающий спринт, поскольку мы пытаемся интегрировать сцену музыкальной дискографии, которую мы создали в эксперименте 1–3, с простым визуализатором музыки, созданным в спринте Эксперимент 4.

Обычно я бы не рекомендовал это, но если вы не читали предыдущие статьи из этой серии, вероятно, стоит потратить время, поскольку я использую эти практические результаты в качестве отправной точки этой статьи. Давай займемся этим!

API веб-аудио, часть 2

Мой первоначальный подход к этому спринту заключался в том, чтобы переместить логику из визуализатора (находится здесь: https://musicworldtest3.neocities.org/) в нашу дискографию альбома с одной сценой (находится здесь: https: //musicworldtest2.neocities .org / ). Идея заключалась в том, чтобы реорганизовать логику визуализатора музыки, поместив ее в тег скрипта в качестве последнего компонента, зарегистрированного в нашем index.html. Позже мы указали нашу логику визуализатора на собственный звуковой компонент A-Frame (через его идентификатор) для воспроизведения и анализа mp3-файла, прикрепленного в данный момент к этому компоненту - вспомните в наших предыдущих статьях, что щелчок / просмотр обновлял альбом атрибут src для нашего звукового компонента. Достаточно просто. Вместо того, чтобы создавать новый звуковой контекст, место назначения и источник звука, мы просто скопируем уже воспроизводимый.

Скорее всего, моя обнадеживающая наивность вышла из-под иронии в этом заключительном предложении, но на случай, если это не так, я объясню это: на этот раз мне очень не удалось использовать надежную сеть Аудио API эффективно.

В итоге я потратил здесь много драгоценного времени, вероятно, около 90 минут, запутывая себя, пытаясь напрямую сопоставить те небольшие знания, которые я получил в предыдущем спринте, с этим явно более сложным упражнением. Я считаю, что большая часть моей боли была связана с API веб-аудио с неизвестным уровнем функциональности, добавленным из компонента A-Frame ‹a-sound›. Как мне получить доступ к аудиоконтексту этого компонента? Можно ли было вообще управлять аудиоузлами с промежуточным слоем?

Потеряв здесь счет различных подходов, я бросил это полотенце, когда на одной итерации щелкнув разные альбомы, сделал переключение, воспроизведение и анализ соответствующей дорожки; однако предыдущий трек не останавливался, что приводило к тому, что несколько треков воспроизводились, все искажали сами себя, в то время как один бедный узел анализа отчаянно пытался проанализировать все входящие усиления. Как следствие, столбцы визуализатора пытались не отставать от результатов анализа - менее чем за 15 секунд тестирования этой сборки мой браузер завис, затем последовал сбой графического драйвера и принудительный перезапуск моего ноутбука ...

Маршрутизация нашей логики аудиовизуализатора через собственный компонент ‹a-sound› придется подождать. Вернуться к доске для рисования…

Link Traversals

Я застрял. Поэтому я решил обратиться к источнику всего этого, документации A-Frame, чтобы проверить, может ли какой-либо упущенный из виду компонент стимулировать творчество. Мое внимание привлек один любопытный компонент, которым я раньше не пользовался: нативный компонент ‹a-link›.

Моя первая мысль была связана с возможностью протолкнуть этот спринт с помощью, хотя и очень монотонного и повторяющегося решения: мы могли бы развернуть три отдельных, отдельных веб-сайта, которые функционируют одинаково и связаны друг с другом. Пользователи сначала посещают один сайт, а затем полностью перенаправляются на другой сайт, когда нажимают на другой альбом. Моей последующей мыслью было то, что это решение было не только очень посредственным, но и обеспечило совершенно невыносимое взаимодействие с пользователем. Создание ссылок на внешние html файлы было бесполезным ...

Но это привело к первой продуктивной альтернативе: можем ли мы каким-то образом связать несколько внутренних файлов html? Это потребует значительно меньше ручной работы и обеспечит лучший пользовательский интерфейс.

Примерно через 15 минут у нас было три разных набора файлов «index.html» и «visualizer.js», каждый из которых соответствует одному из трех состояний альбома. Просмотр альбома по-прежнему переносил пользователя на новую сцену с соответствующей средой и дорожкой. Потрясающе, воспроизведение трека подтверждает, что логика нашего веб-аудио API и визуализатора осталась безупречной. Все, что осталось сейчас, - это сгенерировать объекты, которые мы собираемся использовать для визуализации данных об усилении, проходящих через наш узел анализа… иначе говоря, построить фактический визуализатор.

Привет, тригонометрия, мой старый друг

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

К счастью, здесь используется внешняя логика для размещения каждого кольца столбцов с довольно простой геометрией. Мы хотим разместить столбцы в идеальном круге вокруг пользователя в точке (0,0,0). Для этого нам нужно убедиться, что все столбцы N находятся на одинаковом расстоянии R от пользователя. Хитрость заключается в том, чтобы помнить, что пара осей на уровне глаз - это не X и Y, а X и Z. Мы можем выбрать произвольное расстояние R, например 20 единиц ,, а затем использовать простые функции Sin () и Cos () для вычисления точных значений X и Z для кругового позиционирования. Пример приведен ниже:

var entityEl = document.createElement('a-entity');
    entityEl.setAttribute('position', {
       x: 20*Math.cos(degreeCounter*(Math.PI/180)), y: .5, 
       z: 20*Math.sin(degreeCounter*(Math.PI/180))});

Прохождение функции выше приводит к единственному кольцу столбцов, нам нужно три кольца. Итак, следующий шаг - повторить описанную выше функцию еще два раза, но с другим значением R оба раза.

За менее чем ~ 15 минут до конца мы сопоставили выходные данные узла анализатора с атрибутом высоты наших столбцов круга визуализатора и отправились в Neocities, чтобы развернуть следующее:

Как видно из приведенного выше GIF-изображения, мы успешно реализовали красивый визуализатор с тремя кольцами, который окружает исходную позицию пользователя. Аккуратный! Я думаю, что сейчас пора развернуть что-то вроде рисунка выше в личном домене.

Переходим к практике 6 WebVR!

Этот эксперимент можно найти здесь: https://musicworldtest4.neocities.org/

Используемые новые общедоступные компоненты и технологии:

Https://aframe.io/docs/0.8.0/primitives/a-link.html