Банки звуків
що реально є в цьому Flok-рантаймі
Звідки цей список: ця збірка Flok на старті викликає registerSynthSounds(), registerSoundfonts(), registerZZFXSounds() і підтягує шість семпл-банків з strudel.b-cdn.net:
tidal-drum-machines, piano, Dirt-Samples, EmuSP12, vcsl, mridangam.
Голі імена (bd, sd, hh…) беруться з EmuSP12 — це дефолтний кіт.
Щоб взяти той самий звук з іншої машини — .bank("…").
Драм-машини · tidal-drum-machines · 71 банк, 683 семпли
| назва | що це | приклад |
| bd | bass drum / бочка | s("bd*4") |
| sd | snare drum / малий | s("bd sd") |
| rim | rimshot, сухий клац по ободу | s("bd rim sd rim") |
| cp | clap / плескіт | s("bd ~ cp ~") |
| hh | closed hi-hat / закритий хет | s("hh*8") |
| oh | open hi-hat / відкритий хет | s("hh oh hh oh") |
| lt / mt / ht | том low / mid / high | s("lt mt ht ~") |
| cr | crash-тарілка | s("cr ~ ~ ~").gain(.7) |
| rd | ride-тарілка | s("rd*8").gain(.5) |
| cb | cowbell / ковбел | s("~ cb ~ cb") |
| sh | shaker / шейкер | s("sh*16").gain(.4) |
| tb | tambourine / бубон | s("~ tb ~ tb") |
| perc | різна перкусія банку | s("perc*4").bank("RolandTR707") |
| misc | усе інше, що не влізло в категорії | s("misc:2") |
| fx | шумові вставки (є лише у кількох банках) | s("fx").bank("RolandTR727") |
Банки та їхні скорочення: повне ім’я — RolandTR808, RolandTR909, AkaiMPC60, LinnLM1, OberheimDMX, KorgMinipops, CasioRZ1, YamahaRX5…
Ця збірка додатково викликає aliasBank(), тому працюють і короткі аліаси без вендора:
.bank("TR808"), .bank("TR909"), .bank("MPC60"), .bank("LM1"), .bank("DMX"). Регістр не важливий.
Мелодика та синтез · registerSynthSounds()
| назва | що це | приклад |
| triangle / tri | трикутник — дефолт, якщо s() не задано | note("c e g").s("tri") |
| square / sqr | меандр, порожнистий і язикатий | note("c2 g2").s("square") |
| sawtooth / saw | пилка — база для ліда й баса | note("c2").s("saw").lpf(600) |
| sine / sin | синус — чистий тон, добрий саб | note("c1").s("sine") |
| supersaw | розстроєний стек пилок; .unison/.detune | note("c3").s("supersaw").detune(.4) |
| white | білий шум — рівний по всьому спектру | s("white").decay(.05) |
| pink | рожевий шум — м’якший, -3 дБ/окт | s("pink*8").gain(.4) |
| brown | коричневий шум — глухий, низовий | s("brown").lpf(400) |
| crackle | тріск вінілу; керується .density | s("crackle").density(20) |
Soundfonts · registerSoundfonts() · 129 GM-інструментів
Усі з префіксом gm_, граються через note(). Ключові родини:
| назва | що це | приклад |
| gm_piano · gm_epiano1 · gm_epiano2 | клавішні: акустика та електропіано | note("c4 e4 g4").s("gm_epiano1") |
| gm_acoustic_bass · gm_synth_bass_1 | баси — акустичний і синтетичний | note("c2 eb2 g2").s("gm_synth_bass_1") |
| gm_pad_warm · gm_pad_halo · gm_pad_sweep | пади для підкладки | note("c3 g3").s("gm_pad_warm").room(.8) |
| gm_lead_1_square · gm_lead_2_sawtooth | ліди GM | note("c4 g4").s("gm_lead_2_sawtooth") |
| gm_string_ensemble_1 · gm_violin · gm_cello | струнні | note("c3 e3 g3").s("gm_string_ensemble_1") |
| gm_flute · gm_clarinet · gm_alto_sax | дерев’яні духові | note("c5 d5 e5").s("gm_flute") |
| gm_trumpet · gm_trombone · gm_brass_section | мідні духові | note("c4 e4").s("gm_brass_section") |
| gm_marimba · gm_vibraphone · gm_kalimba | мелодична перкусія | note("c4 e4 g4 b4").s("gm_kalimba") |
| gm_church_organ · gm_drawbar_organ | органи | note("c3 g3 c4").s("gm_church_organ") |
| gm_fx_atmosphere · gm_fx_crystal · gm_fx_rain | FX-текстури GM | note("c4").s("gm_fx_crystal").slow(2) |
| gm_sitar · gm_koto · gm_banjo · gm_shakuhachi | етнічні | note("c4 d4 f4").s("gm_koto") |
ZZFX · registerZZFXSounds() · 8-бітний чарактер
| назва | що це | приклад |
| zzfx | ZZFX-двигун 8-біт саунд-ефектів | s("zzfx").note("c3") |
| z_sine | ZZFX-синус | note("c3 e3").s("z_sine") |
| z_sawtooth | ZZFX-пилка | note("c2").s("z_sawtooth") |
| z_triangle | ZZFX-трикутник | note("c3").s("z_triangle") |
| z_square | ZZFX-меандр | note("c3").s("z_square") |
| z_tan | тангенс — брудний, різкий | note("c2").s("z_tan") |
| z_noise | ZZFX-шум | s("z_noise").decay(.1) |
Додаткові банки, які вантажить саме ця збірка
| назва | що це | приклад |
| piano | мультисемпльоване акустичне піано (окремий банк) | note("c4 e4 g4").s("piano") |
| casio | Dirt-Samples: лоуфай Casio, 3 семпли | s("casio:0 casio:1") |
| crow | Dirt-Samples: крики ворон | s("crow:1") |
| east | Dirt-Samples: східна перкусія | s("east*4") |
| insect | Dirt-Samples: комахи | s("insect:0") |
| jazz | Dirt-Samples: джазовий кит | s("jazz:2 jazz:4") |
| metal | Dirt-Samples: металевий брязкіт | s("metal*8").gain(.4) |
| numbers | Dirt-Samples: озвучені цифри 0–8 | s("numbers:3") |
| space | Dirt-Samples: космічні текстури | s("space:5").slow(2) |
| wind | Dirt-Samples: вітер | s("wind").slow(4) |
| vcsl | Versilian CSL — 128 імен: agogo, bongo, cajon, cabasa, balafon, anvil, belltree… | s("bongo*4") |
| mridangam_* | 13 штрихів індійського барабана: _dhi _dhin _dhum _ka _ki _na _nam _ta _tha _thom _ardha _chaapu _gumki | s("mridangam_ta mridangam_dhi") |
Як подивитись список у рантаймі
без вгадувань
У Flok немає вкладки sounds, як на strudel.cc. Але soundMap є в скоупі Strudel-панелі — отже, список можна вивести в консоль браузера (F12) прямо з коду.
// усі імена звуків, алфавітно (дивись у консоль)
console.log(Object.keys(soundMap.get()).sort())
// скільки всього й тільки банки TR-серії
const all = Object.keys(soundMap.get())
console.log(all.length)
console.log(all.filter(n => n.startsWith("rolandtr")))
// чи є конкретний звук
console.log(!!soundMap.get()["gm_pad_warm"])
Свої семпли
samples() · github · strudel.json · власний CDN
// цілий репозиторій з GitHub (бере strudel.json у корені)
await samples('github:tidalcycles/dirt-samples')
$: s("bd*4, ~ cp")
// пряме посилання на strudel.json
await samples('https://mandrock-files.duckdns.org/flok/media/strudel.json')
// об’єкт + базовий URL другим аргументом
await samples({
kick: 'kick.wav',
snare: ['sn1.wav', 'sn2.wav']
}, 'https://mandrock-files.duckdns.org/flok/media/')
$: s("kick snare:1")
// свій кіт як банк — через префікс імені
await samples({
mandrock_bd: 'bd.wav',
mandrock_sd: 'sd.wav'
}, 'https://mandrock-files.duckdns.org/flok/media/')
$: s("bd sd").bank("mandrock")
Про свій хостинг: клади файли в
/root/cdn/flok/media/ на VPS — вони віддаються з
https://mandrock-files.duckdns.org/flok/media/….
Семпли — це
fetch +
decodeAudioData, тож для чужого орігіну (а Flok живе на
flok.mandrock-files.duckdns.org, це
інший орігін) потрібен заголовок
Access-Control-Allow-Origin.
Для
/flok/media/ він
уже налаштований — nginx віддає
Access-Control-Allow-Origin: *, тож семпли звідти підхоплюються без бубна.
Кластимеш деінде на
/root/cdn/ — заголовка не буде, і
decodeAudioData впаде: див.
hydra.html → Відео з YouTube / Vimeo, там той самий сюжет із боку відео.
strudel.cc/learn/samples →
flok.cc · Hydra ↔ Strudel
спільний livecoding-джем звук + візуал
flok.cc — браузерний спільний редактор із панелей-таргетів (strudel, hydra, p5, sclang, mercury…), до 8 слотів. Таргет міняється у лівому верхньому куті слота; Command → Add Pane / Configure (таргети через кому, напр. strudel, hydra). Нічого ставити не треба.
// Hydra ВСЕРЕДИНІ Strudel — initHydra() зверху
await initHydra()
osc(10, 0.1, 1.2).kaleid(4).out()
$: s("bd*4, ~ cp").bank("RolandTR909")
// аудіо-реактив з мікрофона (detectAudio)
await initHydra({ detectAudio: true })
osc(30)
.modulate(noise(3), ()=>a.fft[0])
.out()
// H() — патерн Strudel як вхід у Hydra (в такт)
await initHydra()
osc(20)
.rotate(H("<0 0.5 1>"))
.out()
// feedStrudel — піаноролл/scope як відео-джерело s0
await initHydra({ feedStrudel: true })
src(s0).kaleid(4).modulate(noise(2)).out()
$: note("c e g b").s("piano")
// flok: у hydra-панелі P() бере mini-патерн Strudel
// hydra-таргет у flok, синхронно з часом Strudel
shape(4)
.scale(() => P("<1 2 3>"))
.out()
// p5.js теж працює в hydra-таргеті flok
// hydra-таргет
p5.background(0)
p5.fill(255)
p5.circle(p5.width/2, p5.height/2, 200)
Нюанс fft у flok: через те, як налаштована analyze-нода, після того як Hydra почала брати a.fft, кожну Strudel-панель треба один раз переевалити вручну (Ctrl+Enter) — інакше дані спектра не підхопляться.
strudel.cc/learn/hydra →