Продвинутые интеграции
Эта страница описывает продвинутые техники интеграции Bulka с внешними инструментами и системами.
Hydra — продвинутые техники
Синхронизация паттернов с визуалами
Функция H() позволяет использовать музыкальные паттерны как входные данные для Hydra:
Трансформация встроенных визуализаций
С feedStrudel можно применять эффекты Hydra к pianoroll, scope и другим:
Реакция на аудио
С detectAudio Hydra реагирует на звук через FFT анализ:
MIDI — продвинутые техники
Паттернирование Control Change
Модулируйте параметры внешних синтезаторов с помощью CC:
// CC 74 часто управляет фильтром
// Синус модулирует cutoff
note("c2 e2 g2 a2")
.ccn(74)
.ccv(sine.slow(8).range(0, 1))
.midi()Мультиканальный MIDI
Отправляйте разные паттерны на разные MIDI каналы:
stack(
// Канал 1 - бас
note("c2 e2 g2").midichan(1),
// Канал 2 - лид
note("c4 e4 g4 b4").midichan(2),
// Канал 10 - ударные (стандарт GM)
note("c1 d1 c1 [c1 d1]").midichan(10)
).midi()Pitch Bend и модуляция
// Плавный pitch bend
note("c3 e3 g3 c4")
.midibend(sine.slow(4).range(-0.2, 0.2))
.midi()MIDI Input — использование контроллеров
// Подключение к MIDI входу
let cc = await midin('Your MIDI Device')
// Используем CC контроллеры для управления
note("c3 e3 g3 b3")
.lpf(cc(74).range(100, 5000)) // CC 74 → фильтр
.lpq(cc(71).range(0, 20)) // CC 71 → резонанс
.gain(cc(7).range(0, 1)) // CC 7 → громкость
.s("sawtooth")
OSC и SuperCollider
Настройка подключения
# Установите и запустите OSC мост
npx @strudel/osc
# С отладкой для проверки сообщений
npx @strudel/osc --debug
Отправка в SuperDirt
// Все события идут через OSC в SuperCollider
$: s("bd*4, hh*8, ~ sd")
all(osc)Орбиты для раздельной обработки
В SuperDirt разные орбиты имеют независимые эффекты:
stack(
s("bd*4").orbit(0), // Сухой сигнал
s("hh*8").orbit(1).room(0.5), // С реверберацией
s("~ sd").orbit(2).delay(0.3) // С делеем
).osc()Геймпад
Управляйте паттернами с помощью геймпада:
// gp = gamepad(0) - первый геймпад
// gp.a, gp.b, gp.x, gp.y - кнопки
// gp.lstick.x/y - левый стик
// gp.rstick.x/y - правый стик
// Пример (требует подключённый геймпад):
// note("c3 e3 g3 b3")
// .mask(gp.a) // Играет когда нажата A
// .lpf(gp.lstick.x.range(200, 5000))
// .s("sawtooth")Flok — совместный live coding
Flok позволяет нескольким людям кодить вместе:
- Откройте flok.cc
- Создайте сессию
- Поделитесь ссылкой с другими
- Один кодит звук (Strudel), другой — визуалы (Hydra)
// Участник 1 — звук
$: s("bd*4, hh*8")
$: note("[c3,e3,g3]").s("sawtooth").lpf(800)
// Участник 2 — визуалы
osc(10).rotate(0.1).out()
Hydra-Strudel расширение
Внешнее расширение для ещё более тесной интеграции:
// Загрузка расширения
await loadScript("https://cdn.jsdelivr.net/gh/atfornes/Hydra-strudel-extension@latest/hydra-strudel.js")
await initHydraStrudel()
// Один паттерн для звука и визуализации
myPattern = '0 10 [2 5]*4'.slow(2)
note(myPattern).play() // Аудио
osc(P(myPattern)).out() // Визуализация с функцией P()
Практические советы
Производительность интеграций
- Hydra: Сложные шейдеры нагружают GPU. Начинайте с простого.
- MIDI: Web MIDI имеет небольшую задержку. Для критичных применений используйте desktop версию.
- OSC: Требует запущенного SuperCollider. Убедитесь, что SuperDirt загружен.
Отладка
// Для OSC — запустите с --debug
// npx @strudel/osc --debug
// Для MIDI — проверьте доступные устройства
// В консоли браузера: navigator.requestMIDIAccess()
Комбинирование интеграций
Можно использовать несколько интеграций одновременно:
Для более детальной информации о каждой интеграции смотрите соответствующие страницы документации.