Всех с праздниками!
Прошу вас не воспринимать этот пост слишком серьезно :)
Недавно мне захотелось поиграть на каком-нибудь нестандартном музыкальном инструменте, чем-то совсем отличающимся от привычных мне харпа, сакса или пианино.
Сначала подумал о даксофоне или терменвоксе, но потом обнаружил "лайв кодинг".
Тем более, чтобы играть в энтот "лайв кодинг" ничего кроме компьютера и не нужно.
"Лайв кодинг" - это способ создания электронной музыки, только вместо нажатия на клавиши синтезатора или кручения блинов, нужно писать код.
А потом на ходу можно менять любые константы, переменные, добавлять новые структуры кода и слышать как музыка меняется.
Хотя конечно традиционная нотная запись мне кажется гораздо удобнее.
Ну код и код, фиг с ним, я не ханжа.
Тем более для предупреждения закостеневания ума врачи рекомендуют постоянно осваивать что-то новое.
Существует много программ для "лайв кодинга". Самой простой и удобной мне показалась - Sonic Pi.
По своему прямому назначению она используется для фоновой электронной музыки, т.е. разного рода dnb/edm-колбасы. Тут вы можете посмотреть примеры такой музыки.
Впрочем мне такое не очень интересно.
Давайте сегодня попробуем создать что-нибудь для нас более привычное…
Я выбрал произведение "Saint James Infirmary Blues".
Попробуем сделать декодирование мелодии в код, добавим ритм-секцию и импровизацию, причем так, чтобы каждый раз произведение звучало немного по-разному.
Пусть всякий раз произведение звучит немного с разным интонированием, атакой, вибрато, фразировкой, чтобы импровизация каждый раз получалась разной, но в разумных пределах.
Кстати на подобную наркоманию меня вдохновил сериал HBO Westworld, рекомендую :)
Код и пример в первом посте.
[ SonicPi ] Live Coding
[ SonicPi ] Live Coding
Последний раз редактировалось zOobRa Ср фев 22, 2017 6:56 pm, всего редактировалось 1 раз.
Re: [ SonicPi ] Live Coding
Итак получился такой код (вы можете вставить его к себе в SonicPi):
… или прослушать запись одного из возможных воспроизведений:
Не судите строго, это моя первая попытка.
Над тембром не заморачивался использовал синты по-умолчанию.
А вообще народ делает и по-интереснее. Например, "Бах с элементами джаза": код тут, послушать тут.
При создании музыки таким способом поражаешься как много мы, как музыканты, делаем подсознательно (атака, вибрато, ритм,..).
Здесь, к сожалению, все нюансы произведения нужно прописывать сознательно.
Да я догадываюсь что некоторые обо мне подумали, но я всеже считаю что у этого способа создания музыки определенно есть право на жизнь:
Код: Выделить всё
# St. James Infirmary Blues
#################################
# Let's initialize stuff first: #
#################################
use_bpm 110
offbeat = 0.2 # for simplicity (fifth part of the beat)
time = Time.new # to make it truly random
define :melody do |n, t=1| #n is the notes list, t is the duration between notes (default to 1 beat)
use_synth :prophet
n.each_index do |i|
if i.even? then
play n[i], cutoff: 80, amp: 5+t[i], sustain: t[i]-t[i]/4, release: t[i]/8, vibrato_rate: 4, vibrato_depth: 0.25, vibrato_onset: 0.1, vibrato_delay: 0
else
play n[i], cutoff: 85, amp: 7+t[i], sustain: t[i]-t[i]/4, release: t[i]/4, vibrato_rate: 4, vibrato_depth: 0.25, vibrato_onset: 0.1, vibrato_delay: 0
end
sleep t[i]
end
end
define :infirmary_melody do
with_fx :reverb do
# <---- NOTES ----> <---- DURATIONS ---->
melody [:D4, :F4, :A4, :A4, :G4, :A4, :G4, :F4, :D4], [1-offbeat,1+offbeat,2-offbeat,2+offbeat,3,0.5-offbeat/4,0.5+offbeat/4,1,1]
sleep 4
melody [:D4, :F4, :A4, :A4, :D5, :Bb4,:A4], [1-offbeat,1+offbeat,2-offbeat,2+offbeat,3-offbeat,1,2+offbeat]
sleep 4
melody [:D4, :F4, :A4, :G4, :A4, :G4, :A4, :G4, :F4, :D4], [1-offbeat,1+offbeat,0.5-offbeat,0.5+offbeat,3,3,0.5-offbeat,0.5+offbeat,1,1+1]
sleep 4
melody [:D4, :F4, :D4, :F4, :D4, :G4, :A4, :F4, :D4], [1-offbeat,1+offbeat,1-offbeat,1+offbeat,1-offbeat,1+offbeat,1-offbeat,1+offbeat,1+3]
sleep 4
end
end
define :percussion do
use_random_seed time.usec + rrand(0,150)
sleep 1
sample :drum_cymbal_soft, sustain: 0, release: 0.1, amp: 2 if not one_in(8)
sleep 1
sample :drum_cymbal_soft, sustain: 0, release: 0.1, amp: rrand(0.2,1.5) if not one_in(4)
sleep 1-offbeat
sample :drum_cymbal_soft, sustain: 0, release: 0.1, amp: rrand(0.4,1.5) if not one_in(4)
sleep 1+offbeat
end
define :chord_progression do
use_synth :chipbass
chords = [chord(:D3, :minor7),chord(:G3, :minor7),chord(:D3, :minor7),chord(:D3, :minor7),
chord(:D3, :minor7),chord(:G3, :minor7),chord(:D3, :minor7),chord(:D3, :minor7),
chord(:D3, :minor7),chord(:G3, :minor7),chord(:D3, :minor7),chord(:D3, :minor7),
chord(:D3, :minor7),chord(:G3, :dom7), chord(:A3, :dom7), chord(:D3, :minor7),]
chords.each_index do |i|
use_random_seed time.usec + rrand(0,50)
play chords[i], attack: rrand(0.5,1), amp: rrand(8,12), sustain: 0.5, release: 2.5 if not one_in(10)
sleep 4
end
end
define :kinda_improvisation do
use_synth :pluck
use_random_seed time.usec + rrand(-70,70)
play :D2, release: 0.1, amp: 18, cutoff: 60, amp: 15, sustain: 10, release: 6, vibrato_rate: 5, vibrato_depth: 0.25, vibrato_onset: 0.1, vibrato_delay: 0 if not one_in(8)
notes = (scale :D2, :minor_pentatonic, num_octaves: 2)
8.times do
sleep 1
play notes.choose, amp: rrand(10,18), cutoff: rrand(40,60), amp: rrand(10,20), sustain: rrand(1,1.5), release: rrand(0.5,7), vibrato_rate: 5, vibrato_depth: 0.25, vibrato_onset: 0.1, vibrato_delay: 0 if not one_in(5)
sleep 1
play notes.choose, amp: rrand(10,18), cutoff: rrand(40,60), amp: rrand(10,20), sustain: rrand(1,1.5), release: rrand(0.5,7), vibrato_rate: 5, vibrato_depth: 0.25, vibrato_onset: 0.1, vibrato_delay: 0 if not one_in(5)
sleep 1-offbeat
play notes.choose, amp: rrand(10,18), cutoff: rrand(40,60), amp: rrand(10,20), sustain: rrand(1,2.5), release: rrand(0.5,7), vibrato_rate: 5, vibrato_depth: 0.25, vibrato_onset: 0.1, vibrato_delay: 0 if not one_in(5)
sleep 1+offbeat
use_random_seed time.usec + rrand(0,100)
16.times do
play notes.choose, amp: rrand(14,28), cutoff: rrand(50,60), amp: rrand(10,20), sustain: rrand(0.25,1), release: rrand(0.0125,7), vibrato_rate: 3, vibrato_depth: 0.25, vibrato_onset: 0.1, vibrato_delay: 0 if not one_in(4)
sleep 0.25
end
end
play :D3, release: 0.1, amp: 25, cutoff: 60, amp: rrand(10,20), sustain: 1, release: 5, vibrato_rate: rrand(3,6), vibrato_depth: 0.25, vibrato_onset: 0.1, vibrato_delay: 0 #if not one_in(8)
sleep 2-offbeat
play :A3, release: 0.1, amp: 18, cutoff: rrand(40,70), amp: rrand(10,25), sustain: rrand(0.5,3) , release: rrand(3,6), vibrato_rate: 5, vibrato_depth: 0.25, vibrato_onset: 0.1, vibrato_delay: 0 #if not one_in(8)
sleep 2+offbeat
play :F3, release: 0.1, amp: 22, cutoff: rrand(40,70), amp: rrand(10,20), sustain: 1, release: 3, vibrato_rate: rrand(3,6), vibrato_depth: 0.25, vibrato_onset: 0.1, vibrato_delay: 0 #if not one_in(8)
sleep 2
play :D2, release: 0.1, amp: 30, cutoff: 60, amp: 20, sustain: 1, release: 4, vibrato_rate: 5, vibrato_depth: 0.25, vibrato_onset: 0.1, vibrato_delay: 0# if not one_in(8)
sleep 8
end
##############################
# Now let's play some music: #
##############################
in_thread do # basslines goes here
cue :tick
78.times {percussion}
end
in_thread do
sync :tick
sleep 32
4.times {chord_progression}
end
in_thread do # solo goes here
sync :tick
2.times do
use_synth :blade
sleep 2
bend = play :D3, release: 2, sustain: 10, cutoff: 50, amp: 40, vibrato_rate: 5, vibrato_depth: 0.3, vibrato_onset: 0.1, vibrato_delay: 0
sleep 4+offbeat
control bend, note: :Db3 # bend the note a half-step
sleep 4-offbeat
control bend, note: :D3, amp: 30
sleep 2+offbeat
sleep 4-offbeat
end
infirmary_melody
2.times {kinda_improvisation}
infirmary_melody
end
Над тембром не заморачивался использовал синты по-умолчанию.
А вообще народ делает и по-интереснее. Например, "Бах с элементами джаза": код тут, послушать тут.
При создании музыки таким способом поражаешься как много мы, как музыканты, делаем подсознательно (атака, вибрато, ритм,..).
Здесь, к сожалению, все нюансы произведения нужно прописывать сознательно.
Да я догадываюсь что некоторые обо мне подумали, но я всеже считаю что у этого способа создания музыки определенно есть право на жизнь:
- - Такая музыка ничего не весит (пара килобайт текста), что может найти свое применение в играх и программах;
- Ее удобно хранить, можно использовать системы контроля версий для коллективной работы;
- Лайв кодинг идеально подходит для создания музыки основанной на принципах рандомизации, повторяемости и шаблонизации;
- А еще, например, можно завязать переменные вашего произведения на значения каких-нибудь датчиков (температура? освещенность? задымление? вибрация?) и наблюдать как ваше произведение меняется под влиянием внешней среды.
Последний раз редактировалось zOobRa Ср фев 22, 2017 7:32 pm, всего редактировалось 2 раза.
Да, сейчас еще раз прослушал, кажется где-то слегка косякнул с гармонией.
Собственно то, о чем я и говорил выше.. сыграть просто, а разложить сложнее.
Вообщем ваши советы и предложения принимаются :) Тем более я не уверен что сделал все по фэншую.
Также было бы интересно узнать ваше мнение про такой (пока еще) экзотический способ создания музыки.
Собственно то, о чем я и говорил выше.. сыграть просто, а разложить сложнее.
Вообщем ваши советы и предложения принимаются :) Тем более я не уверен что сделал все по фэншую.
Также было бы интересно узнать ваше мнение про такой (пока еще) экзотический способ создания музыки.