Що це взагалі
Відкривається за посиланням і одразу грає. Немає файлів, немає збереження проєкту, немає таймлайну. Є стійка: одна основа (двигун, що виробляє і звук, і картинку — вони з одного джерела, не «візуалізація під музику») плюс три гнізда для ефектів. Плюс вісім ручок, полотно, по якому грають пальцем, і крихітна текстова мова, якщо захочеться керувати ручками формулами.
Все зберігається саме собою в браузері. Закрив вкладку — повернувся до того самого.
Панель управління
Полотно (воно ж інструмент)
Дотик будь-де: звучить нота, і крокова сітка починається заново з цього моменту. Висота ноти — це висота дотику на екрані, від низу до верху три октави, вкладені в обрану гаму.
Головне: не відпускай і веди пальцем. Ноти переходять одна в одну зі ковзанням висоти — кожна зі своєю атакою, але без стрибка. Веди туди-сюди, і воно грає як портаменто, а не як натиснуті клавіші.
Що видно на полотні: тьмяні горизонтальні лінії — усі ноти обраної гами. Яскрава смужка їде за пальцем, поки він притиснутий, — це та сама висота, яку чуєш. Найяскравіша з тьмяних лінія — нота, на якій ти зупинився.
І вона не одноразова: ця нота стає основною. Мелодійні основи (ґратка, пульсар, підкладка) переносять свій малюнок у цю тональність і лишаються там, поки не торкнешся знову. Тобто дотик перебудовує те, що вже грає, а не просто піпікає зверху.
Чотири плитки
Перша — основа. Три наступні — гнізда ефектів, у порядку обробки.
| Жест | На основі | На гнізді |
|---|---|---|
| дотик | наступна основа | наступний ефект |
| утримання | попередня основа | прибрати ефект |
Порядок гнізд має значення: drive перед space — це підсилений звук у залі; space перед drive — це підсилений зал.
Ручки
Два ряди по чотири. Колонка ручок належить плитці над нею. Верхня ручка завжди «наскільки» (на нулі ефекту наче й немає), нижня — «яким чином». Крутиться пальцем угору-вниз.
Третій ряд — спільні на все:
| Ручка | Що робить |
|---|---|
| ТЕМП | множник темпу основи, ×0.5…×2. Швидкий дотик по ній кілька разів у такт — темп підлаштується під твій палець |
| СВІНҐ | зсуває слабкі долі |
| ГУЧНІСТЬ | загальний рівень |
| НАХИЛ | одна ручка тембру: вліво — тепліше (низ угору, повітря вниз), вправо — яскравіше. Картинка теплішає і холоднішає разом зі звуком |
Смуга кольору
Завжди зверху екрана, поверх усього. Тягни в будь-якій точці — не тільки за кружечок. Крутить колір картинки й одночасно ганяє три резонансні піки по спектру звуку. Довге утримання скидає в нуль (нуль — це справжній обхід, а не «майже нічого»).
Пресети
Чотири комірки. Дотик — завантажити, утримання — записати туди поточний стан (стійка + всі спільні ручки). На чистому пристрої там уже лежать чотири зібрані стійки — щоб було з чого починати, а не з тиші.
Нижній ряд
| { } | консоль — див. наступний розділ |
| ◔ | гіроскоп: нахил телефона крутить дві ручки. З'являється, лише якщо датчик є; на iOS перший дотик питає дозвіл |
| ⠿ | схрещування: екран ділиться начетверо, у кожній чверті — варіація того, що грало. Обираєш одну — від неї народжуються наступні чотири. Спосіб знаходити те, що сам би не набрав |
| ● | запис: відео з полотна разом зі звуком, віддається в меню поділитися |
| ⛓ | спільна кімната: копіює посилання. Хто відкриє — крутить ті самі ручки в реальному часі |
| ⚙ | гама (лад, до якого прив'язані всі ноти) і довідка — жести й консоль, тими самими словами, що тут |
Гама — налаштування пристрою, а не стійки: у спільній кімнаті кожен може грати у своєму ладі, і це не конфліктує.
Консоль
Кнопка { } відкриває однорядкове поле. Це крихітна мова, яка крутить ручки замість тебе — наново кожен кадр. Не JavaScript: свого коду вона не виконує й вийти за межі ручок, гнізд і нот не може. Перезбирається через 300 мс після останньої літери, помилка — червоним під полем, і поки помилка не виправлена, працює попередній робочий варіант.
p0 = sin(t/2)*.5+.5
Ось і все, що потрібно, щоб почати: перша ручка тепер дихає з періодом близько тринадцяти секунд.
Писати можна в чотири види цілей: ручки стійки p0…p7, спільні g0…g4, гнізда s0…s2 і note — ступінь обраної гами, що спрацьовує раз на крок. Читати — час, позицію в сітці, гучність і чотири смуги спектра. Повний перелік — у вкладці «Довідка».
# картинка й звук реагують на власний низ і повітря p4 = b0 p5 = lerp(.2, .9, b3) g4 = fract(t/24)
Найцікавіше в цій мові — note, бо це єдиний спосіб отримати від sonargale послідовність, яку ти справді задав, а не яку видала основа:
# чотири ступені гами по колу note = mod(floor(s), 4)
# ступінь повзе вгору й падає назад раз на вісім тактів note = floor(saw(s/32) * 7)
Від'ємне значення — пауза. Тому будь-який вираз, що іноді йде нижче нуля, дає ритмічні дірки задарма.
Порожнє поле вимикає консоль і повертає ручки тобі. Поки консоль пише в ручку, крутити її пальцем марно — наступний кадр перезапише. Під час схрещування консоль мовчить: на екрані чотири стійки, а писати їй нема в яку.
Прийоми джему
Знайти звук, а не збудувати його
Швидший шлях, ніж підбирати ефекти по одному: візьми будь-який пресет, натисни ⠿, обери ту чверть, яка більше подобається, і ще раз, і ще. Через п'ять-шість поколінь опиняєшся там, куди свідомо не пішов би. Далі — вже руками ручки.
Грати мелодію поверх машини
Постав lattice або pad основою, дай їй іти, і веди пальцем по полотну повільно. Оскільки дотик переносить тональність усього, що грає, це не соло поверх бітів — це модуляція всієї фактури пальцем. Ковзання між нотами робить перехід тональності чутним, а не клацаючим.
Один ефект — це часто краще, ніж три
Три гнізда спокушають забити всі. Але верхні ручки перемножуються: echo+space+veil на середині — це вже каша, де нічого не розрізниш. Робочий підхід: один ефект на максимум, два на нулі, і крути нижню ручку — «яким чином» дає більший розкид, ніж «наскільки».
Темп ловити пальцем, а не ручкою
Якщо треба потрапити в щось зовнішнє (пластинка, метроном, інша людина) — не крути ТЕМП, а постукай по ній чотири рази в такт. Ручкою в чужий темп не потрапиш ніколи.
Записувати одразу
Найкращі тридцять секунд трапляються, коли запис вимкнено. Стан зберігається сам, але звучання — ні: та сама стійка з тими самими ручками звучить інакше залежно від того, де ти торкався полотна. Побачив, що пішло добре — тисни ● одразу.
Удвох
Кімната (⛓) синхронізує стійку й ручки, але не гаму й не дотики по полотну. Робочий поділ: один тримає стійку і ручки, другий грає полотном у своєму ладі. Двоє, що одночасно крутять ту саму ручку, — це просто боротьба, і чути її як смикання.
Швидка довідка по панелі
| Елемент | Дотик | Утримання / інше |
|---|---|---|
| Полотно | нота + рестарт долі | вести пальцем — ковзання по нотах |
| Плитка 1 (основа) | наступна | попередня |
| Плитки 2–4 (гнізда) | наступний ефект | прибрати |
| Ручки стійки | верхня — наскільки, нижня — яким чином | |
| ТЕМП | швидкий дотик ×4 = темп у такт | крутити = ×0.5…×2 |
| Смуга кольору | тягнути будь-де | довге утримання — скинути |
| Пресет | завантажити | зберегти |
Основи
| ID | Що це | BPM | Ручки |
|---|---|---|---|
lattice | ноти по сітці, фраза обирається ручкою | 116 | SPREAD · FIGURE |
pulsar | двигун, що крокує басом | 128 | DRIVE · BASS |
pad | акорд, що дихає | 96 | DRIFT · VOICE |
sonar | пінг у глибоку воду | 84 | RATE · DEPTH |
rust | корозія і звук корозії | 104 | GRIT · METAL |
gale | вітер, у якому щось рухається | 92 | WIND · GUST |
tide | повільна вода, без клоку | 60 | DRIFT · SWELL |
lattice, pulsar, pad — мелодійні: реагують на тональність, задану дотиком по полотну. Решта — ні.
Ефекти
| ID | Ідея | Верхня ручка | Нижня ручка |
|---|---|---|---|
echo | повторення | кількість повторів | довжина, 1–8 шістнадцятих |
space | відстань | скільки залу | розмір залу, 0.35–2.6 с |
drive | виштовхнути за межі | сила підсилення | м'яке насичення → жорсткий кліп |
edge | твердість | сила | де саме різко |
crush | квантування | сила | 17 → 2 сходинки, разом з пікселями |
comb | річ проти зсунутої копії себе | глибина | частота гребінця, 40 Гц – 1.1 кГц |
veil | щось між тобою й річчю | щільність | тонкий свист → глуха стіна |
swirl | обертання | глибина | швидкість, 0.05–2.45 Гц |
ripple | періодичний зсув | глибина | частота, 0.25–9 Гц |
kaleid | дзеркало: складка простору й спектра | глибина | 2–11 сегментів / несуча 30 Гц – 1.2 кГц |
pinch | стиснути в одній точці | сила | де саме, 120 Гц – 5.4 кГц |
shard | розбити безперервне | ймовірність випадання | розмір шматка, 4/2/1 кроки |
strobe | сама доля, зроблена видимою | глибина | кожні 1/2/4/8 кроків |
hue | колір як спектральний баланс | поворот | ширина / насиченість |
Консоль: куди писати
| Ціль | Що це | Межі |
|---|---|---|
p0…p7 | вісім ручок стійки, попарно по колонках | обрізається до 0…1 |
g0…g4 | темп, свінґ, гучність, нахил, колір | обрізається до 0…1 |
s0…s2 | три гнізда | "назва" або none |
note | ступінь гами, раз на крок | від'ємне — пауза |
Консоль: що читати
| Ім'я | Значення |
|---|---|
t | секунди від запуску |
step, s | позиція в кроковій сітці, дробова |
level | поточна гучність, 0…1 |
b0…b3 | низ · середина · верх-середина · повітря |
pi, tau | сталі |
Консоль: що рахувати
Один аргумент
sin cos tan abs floor ceil fract sign sqrt exp saw tri sq noise
Два і три
min max pow mod atan2 · clamp lerp
Дії: + - * / %, дужки, унарний мінус. Кути в радіанах. saw, tri, sq — форми з періодом 1: подаєш t/4, отримуєш цикл на чотири секунди. Один вислів на рядок або через ;. Все після # — примітка.
Не можна: своїх змінних, умов, циклів, будь-чого поза списком. Рядки — тільки в гніздах.
Стартові рецепти
# дихання і різкість від гучності p0 = sin(t/3)*.4+.5 p1 = tri(t/8) p3 = clamp(level*1.4, 0, 1)
# гнізда перемикаються текстом s0 = "kaleid" s1 = "echo" s2 = none
# арпеджіо по чотирьох ступенях note = mod(floor(s), 4)
# ступінь повзе вгору й падає раз на 8 тактів note = floor(saw(s/32) * 7)
# дві ручки в протифазі p6 = sin(t)*.5+.5; p7 = cos(t)*.5+.5
# колір повільно обертається, картинка ловить низ g4 = fract(t/24) p4 = b0
Типові проблеми
| Симптом | Причина |
|---|---|
| Ручка не крутиться пальцем | у неї пише консоль. Очисти поле { } |
| Каша, нічого не розрізниш | три ефекти на середині. Один на максимум, два на нулі |
| Дотик по полотну не міняє тональність | основа немелодійна (sonar, rust, gale, tide) — нота звучить, але переносити нема чого |
| Звук пропав після згортання застосунку | iOS присипляє звук; повернення у вкладку піднімає його саме, але дай секунду |
| Кнопки запису немає | браузер не вміє MediaRecorder |
| Гіроскопа немає в ряду | датчик відсутній; на iOS перший дотик має бути справжнім дотиком, інакше дозвіл не спитається |
| Консоль мовчить | увімкнено схрещування — там чотири стійки, писати нема в яку |