Strudel/jazz_improvisation.js
2026-07-17 15:29:44 +00:00

56 lines
3.5 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Скорость джазового свинга
setcpm(30)
// 1. Ударные (используют стандартные сэмплы 's')
const drums = stack(
s("bd [~ bd] bd ~"),
s("~ sd ~ sd"),
s("hh*4")
.degradeBy(0.2)
.fast(1.5)
.slow(1)
).gain(0.3)
// 2. Джазовые аккорды (используют генератор 'sound')
const piano = chord("<Dm7 G7 C^7 C^7>*6")
.voicing()
.scale("D:dorian") // Карта нот (Дорийский лад)
.scramble(4) // Случайно путает порядок нот в каждом цикле)
.sound("piano")
.speed("0.9 1.0 0.8 0.7")
.lpf(1100) // Мягкий фильтр, убирает резкость пилы
.attack(0.04)
.release(2.5)
.voice(4) // Разрешаем звучать одновременно только 6 нотам.
.gain(0.15)
// 3. Бас (низкий синусоидальный синтезатор)
const bass = chord("<Dm7 G7 C^7 C^7>")
.rootNotes(2) // Сразу извлекаем тонику во 2-й (низкой) октаве
.sound("sine") // Чистый бас
.gain(0.6)
// 4. Случайная джазовая импровизация
// Мы просто перечисляем ноты в джазовой сетке, а метод scramble перемешивает их на ходу!
const sax = note("[0 2 4 6 7 9 11 12]*2")
.scale("D:dorian") // Карта нот (Дорийский лад)
.scramble(4) // Случайно путает порядок нот в каждом цикле)
.slow("<1.2 0.9 0.7 1.8>") // Фирменный разгон и замедление фразы
.degradeBy(0.25) // Случайно пропускает 25% нот, создавая живые паузы
.s("<sax_stacc*3 sax_stacc*2 sax sax_vib>") // Стакатто играет на быстрых пассажах, вибрато — на длинных финалах
// --- НАСТРОЙКА ХАРАКТЕРА САКСОФОНА ---
.speed("0.3 0.4 0.2 0.3") // Замедляем сам аудиофайл/ Он звучит дольше, жирнее и глубже
.attack(0.02) // Fade-in: убирает резкий щелчок, звук плавно «раздувается»
.hold(0.2) // Удержание: пик громкости в середине ноты
.release(2.0) // Fade-out: хвост звука плавно затухает после окончания ноты
.legato("<0.6 0.8 1.1 2.0>") // Связность: ноты немного наслаиваются, как при игре на одном дыхании. Для стаккато — короткое, для вибрато — длинное
.lpf(2800) // Фильтр: слегка приглушает ядовитые высокие частоты MIDI-сэмпла
.velocity("<1 0.7 0.9 0.6>") // Акценты: сильная доля громкая, слабая — тише
.slide("<0 0.03 0 -0.03>") // Крошечный слайд для джазовой небрежности
.gain("[1 0.3 0.8 0.4]*2") // Динамическая волна громкости: проваливает звук между нотами до 0.3 и взрывает до 1.0 на старте
.room(0.3)
.delay(0.3).delaytime(0.25).delayfeedback(0.2) // Легкое эхо для джазовой атмосферы
// Финальный микс
//stack(drums, piano, bass, sax)
stack(piano, sax)