Первые звуки 🌀 Bulka

Первые звуки

Это первая глава воркшопа Strudel, рады видеть вас на борту!

Поля с кодом

Воркшоп полон интерактивных полей с кодом. Давайте научимся ими пользоваться. Вот одно из них:

sound("casio")
  1. ⬆️ кликните в текстовое поле выше ⬆️
  2. нажмите ctrl+enter для воспроизведения
  3. измените casio на metal
  4. нажмите ctrl+enter для обновления
  5. нажмите ctrl+. для остановки

Поздравляем, теперь вы занимаетесь live coding!

Звуки

Мы только что воспроизвели звук с помощью sound вот так:

sound("casio")

casio — один из многих стандартных звуков.

Попробуйте несколько других звуков:

insect wind jazz metal east crow casio space numbers

Вы можете услышать небольшую паузу, пока звук загружается

Изменение номера sample с помощью :

Один звук может содержать несколько samples (аудиофайлов).

Вы можете выбрать sample, добавив : и число к имени:

sound("casio:1")

Попробуйте разные комбинации звуков и номеров samples.

Если не добавлять число, это равносильно :0

Теперь вы знаете, как использовать разные звуки. Пока мы остановимся на этой небольшой подборке звуков, но позже узнаем, как загружать собственные звуки.

Звуки ударных

По умолчанию Strudel поставляется с широким выбором звуков ударных:

sound("bd hh sd oh")

Эти буквенные комбинации обозначают разные части ударной установки:

original image by Pbroks13

  • bd = bass drum (бас-барабан)
  • sd = snare drum (малый барабан)
  • rim = rimshot (удар по ободу)
  • hh = hihat (хай-хэт)
  • oh = open hihat (открытый хай-хэт)
  • lt = low tom (низкий том)
  • mt = middle tom (средний том)
  • ht = high tom (высокий том)
  • rd = ride cymbal (райд-тарелка)
  • cr = crash cymbal (крэш-тарелка)

Попробуйте разные звуки ударных!

Чтобы изменить звучание ударных, мы можем использовать bank для смены драм-машины:

sound("bd hh sd oh").bank("RolandTR909")

В этом примере RolandTR909 — это название драм-машины, которую мы используем. Это знаменитая драм-машина для house и techno битов.

Попробуйте изменить RolandTR909 на одну из:

  • AkaiLinn
  • RhythmAce
  • RolandTR808
  • RolandTR707
  • ViscoSpaceDrum

Их гораздо больше, но пока давайте упростим

Профи-совет: Выделите название двойным кликом. Затем просто скопируйте и вставьте!

Последовательности

В последнем примере мы уже видели, что можно воспроизводить несколько звуков в последовательности, разделяя их пробелом:

sound("bd hh sd hh")

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

Попробуйте добавить больше звуков в последовательность!

Чем длиннее последовательность, тем быстрее она выполняется

sound("bd bd hh bd rim bd hh bd")

Содержимое последовательности будет сжато в то, что называется cycle. По умолчанию cycle длится 2 секунды.

Один на cycle с помощью < .. >

Вот та же последовательность, но на этот раз окруженная < .. > (угловыми скобками):

sound("<bd bd hh bd rim bd hh bd>")

Это будет воспроизводить только один звук за cycle. С этими скобками темп не меняется, когда мы добавляем или удаляем элементы!

Так как сейчас это очень медленно, мы можем снова ускорить это так:

sound("<bd bd hh bd rim bd hh bd>*8")

Здесь *8 означает, что мы делаем всё это в 8 раз быстрее.

Подождите минуту, разве это не то же самое, что без < ... >*8? Зачем тогда это нужно?

Это правда, особенность этой нотации в том, что темп не изменится, когда вы добавляете или удаляете элементы, попробуйте!

Попробуйте также изменить число в конце, чтобы изменить темп!

изменение темпа с помощью setcpm

setcpm(90/4)
sound("<bd hh rim hh>*8")

cpm = cycles per minute (циклов в минуту)

По умолчанию темп составляет 30 циклов в минуту = 120/4 = 1 cycle каждые 2 секунды

В терминах западной музыки можно сказать, что вышеприведенное — это восьмые ноты при 90bpm в размере 4/4. Но не волнуйтесь, если вы не знаете эти термины, они не требуются для создания музыки с Strudel.

Добавление пауз в последовательность с помощью ’-’ или ’~’

sound("bd hh - rim - bd hh rim")

Подпоследовательности с [квадратными скобками]

sound("bd [hh hh] sd [hh bd] bd - [hh sd] cp")

Попробуйте добавить больше звуков внутрь скобки!

Подобно всей последовательности, содержимое подпоследовательности будет сжато до собственной длины.

Умножение: Ускорение

sound("bd hh*2 rim hh*3 bd [- hh*2] rim hh*2")

Умножение: Ускорение подпоследовательностей

sound("bd [hh rim]*2 bd [hh rim]*1.5")

Умножение: Оооочень сильное ускорение

sound("bd hh*32 rim hh*16")

Высота звука = очень быстрый ритм

Подподпоследовательности с [[двойными скобками]]

sound("bd [[rim rim] hh] bd cp")

Вы можете углубляться настолько, насколько хотите!

Воспроизведение последовательностей параллельно с помощью запятой

sound("hh hh hh, bd casio")

Вы можете использовать столько запятых, сколько хотите:

sound("hh hh hh, bd bd, - casio")

Запятые также могут использоваться внутри подпоследовательностей:

sound("hh hh hh, bd [bd,casio]")

Заметили, что два примера выше одинаковые?

Довольно часто существует много способов выразить одну и ту же идею.

Несколько строк с обратными кавычками

sound(`bd*2, - cp,
- - - oh, hh*4,
[- casio]*2`)

выбор номеров samples отдельно

Вместо того чтобы выбирать номера samples по одному:

sound("jazz:0 jazz:1 [jazz:4 jazz:2] jazz:3*2")

Мы также можем использовать функцию n, чтобы сделать это короче и читабельнее:

n("0 1 [4 2] 3*2").sound("jazz")

Итоги

Теперь мы изучили основы так называемой Mini-Notation, ритмического языка Tidal. Вот что мы изучили к настоящему моменту:

КонцепцияСинтаксисПример
Последовательностьпробел
sound("bd bd sd hh")
Номер sample:x
sound("hh:0 hh:1 hh:2 hh:3")
Паузы- или ~
sound("metal - jazz jazz:1")
Чередование<>
sound("<bd hh rim oh bd rim>")
Подпоследовательности[]
sound("bd wind [metal jazz] hh")
Подподпоследовательности[[]]
sound("bd [metal [jazz [sd cp]]]")
Ускорение*
sound("bd sd*2 cp*3")
Параллельно,
sound("bd*2, hh*2 [hh oh]")

Mini-Notation обычно используется внутри какой-либо функции. Вот функции, которые мы видели к настоящему моменту:

НазваниеОписаниеПример
soundвоспроизводит звук с указанным именем
sound("bd sd [- bd] sd")
bankвыбирает sound bank
sound("bd sd [- bd] sd").bank("RolandTR909")
setcpmустанавливает темп в циклах в минуту
setcpm(45); sound("bd sd [- bd] sd")
nвыбрать номер sample
n("0 1 4 2 0 6 3 2").sound("jazz")

Примеры

Базовый рок-бит

setcpm(100/4)
sound("[bd sd]*2, hh*8").bank("RolandTR505")

Классический house

sound("bd*4, [- cp]*2, [- hh]*4").bank("RolandTR909")

Обратите внимание, что эти два паттерна очень похожи. Определенные барабанные паттерны используются в разных жанрах.

We Will Rock you

setcpm(81/2)
sound("bd*2 cp").bank("RolandTR707")

Yellow Magic Orchestra - Firecracker

setcpm(120/2)
sound("bd sd, - - - hh - hh - -, - perc - perc:1*2")
.bank("RolandCompurhythm1000")

Имитация 16-шагового секвенсора


setcpm(90/4)
sound(`
[-  -  oh - ] [-  -  -  - ] [-  -  -  - ] [-  -  -  - ],
[hh hh -  - ] [hh -  hh - ] [hh -  hh - ] [hh -  hh - ],
[-  -  -  - ] [cp -  -  - ] [-  -  -  - ] [cp -  -  - ],
[bd -  -  - ] [-  -  -  bd] [-  -  bd - ] [-  -  -  bd]
`)

Еще один

setcpm(88/4)
sound(`
[-  -  -  - ] [-  -  -  - ] [-  -  -  - ] [-  -  oh:1 - ],
[hh hh hh hh] [hh hh hh hh] [hh hh hh hh] [hh hh -  - ],
[-  -  -  - ] [cp -  -  - ] [-  -  -  - ] [~  cp -  - ],
[bd bd -  - ] [-  -  bd - ] [bd bd - bd ] [-  -  -  - ]
`).bank("RolandTR808")

Необычные ударные

setcpm(100/2)
s(`jazz*2,
insect [crow metal] - -,
- space:4 - space:1,
- wind`)

Теперь, когда мы знаем основы создания битов, давайте посмотрим, как можно воспроизводить ноты