$ chuck 1. Simple Sine Wave.ck
У Чака есть коллекция единичных генераторов, которые издают шум. Первый Unit Generator, который мы рассмотрим, называется Sinosc. Это простая синусоидальная волна, которая издает одну фундаментальную частоту при 440 герц на половине объема. Sinosc «брошен» на объект DAC с использованием оператора =>. Объект DAC или цифровой аудио преобразователь - это соединение компьютера с вашими внешними динамиками или звуковой картой. Подумайте об операторе => как о патч -кабеле или подключении, который соединяет аудио выходной сигнал синусоидальной волны в динамик.
SinOsc s => dac;
s.gain(0.5);
s.freq(440);
Один этот код не будет производить звук. Чтобы создать звук, мы должны сказать программе, как долго продлится звук. Чак применяет единицы времени к объекту. Теперь представляет собой текущее время плюс дополнительное время «заброшено». В этом примере мы хотим обработать звук только на одну секунду. Поэтому мы «бросьте» с 1 секунды до сейчас.
1::second => now;
Запуск полной программы генерирует гладкий тон при 440 Гц, половину громкости, на 1 секунду. Попробуйте поиграть с настройками. Измените тон, громкость или время, чтобы создать новые вариации звука. Проконсультируйтесь с документацией CHACE и измените синусоидальную волну на пилообразную или квадратную волну. Чем они отличаются?
Давайте сейчас сделаем музыку! Для этого урока мы возьмем основные основы из главы 1 и просто организуем последовательность заметок, чтобы сделать простую мелодию.
Музыка, в его самой основной форме, представляет собой последовательность звуковых событий, воспроизводимых в разных тонах, продолжительности и интервале. В этом примере мы просто будем играть ту же продолжительность с интервалом 1/4 секунды. Для каждого события мы будем играть простой тон.
Достижение этого не сложно. Все, что нам нужно сделать, это скопировать и вставить наш код из главы 1 и структурировать 4 -й последовательность заметок событий. На этом этапе мы можем изменить частоту для каждого события Note и создать шаблон событий, которые почти звучат музыкально. Здесь мы просто разделили вторую ноту пополам, умножили третью ноту на 2, а затем умножили окончательную ноту на 2,5.
// Set frequency (hertz) and volume of Sine Wave
s.gain(0.5);
s.freq(440);
// Process program for a duration of 1/4 second
0.25::second => now;
// Set frequency (hertz) and volume of Sine Wave
s.gain(0.5);
s.freq(220);
// Process program for a duration of 1/4 second
0.25::second => now;
// Set frequency (hertz) and volume of Sine Wave
s.gain(0.5);
s.freq(880);
// Process program for a duration of 1/4 second
0.25::second => now;
// Set frequency (hertz) and volume of Sine Wave
s.gain(0.5);
s.freq(1100);
// Process program for a duration of 1/4 second
0.25::second => now;
Запустите программу несколько раз и посмотрите, сможете ли вы изменить последовательность на предпочитаемую последовательность. Можете ли вы повторить одну из ваших любимых песен? Как бы вы превратили Герца в музыкальные ноты? Чувствует ли подобную музыку секвенировать такую музыку? Что облегчит это?
В главе 2 мы успешно создали нашу первую мелодию. Это был немалый подвиг! Компьютеры очень хороши в принятии мер на основе последовательности инструкций. Учитывая то, что мы уже знаем, любая мелодия или песня можно воспроизвести примечание с помощью примечания с помощью копирования и вставки. Через некоторое время создание музыки таким образом становится утомительным и скучным. Там должен быть более простой способ.
Музыкальные мелодии часто повторяются много раз по песне в так называемой фразе. Фразы по сути петля. Электронные и хип -хоп музыкальных петлей для создания полиритмических текстур, где петли взаимодействуют и играют друг с другом. К счастью для нас, в программировании существует идеальная структура управления, чтобы воспроизвести это поведение - цикл while.
Вместо копирования и вставки каждой ноты можно повторить инструкции для создания музыкальных фраз. В Чаке цикл while построен с ключевым словом и вьющимися скобками, чтобы содержать последовательность инструкций, которые будут повторены. В этом примере мы будем повторять инструкции бесконечно или пока программа не будет прекращена.
// Loop Repeats while true is true (aka forever!)
while(true) {
//instructions go here
}
Обычно мы не будем писать компьютерные программы с бесконечными петлями! Это то, чего обычно избегают в программировании, потому что она будет вешать программу и не допустить, чтобы программа выполняла другие части или код и будет работать навсегда. В Чаке, как мы скоро узнаем, есть способы алгоритмически прекратить и начать программы. В музыке мы могли бы захотеть импровизировать и позволить бесконечному петлю создать канавку в течение определенного периода времени.
Чтобы сделать петлю более интересной, мы представим две новые библиотеки - Std и Math. STD означает стандартную библиотеку и представляет собой набор полезных полезных методов, которые можно использовать в наших программах. STD имеет метод, называемый «MTOF» или «MIDI до частоты». В компьютерной музыке шкала 12 нот на фортепиано представлена как восходящие шаги от 0 до 127. Октава составляет 12 нот, а есть 10 октав. Средний C на фортепиано представлен в 60. Не волнуйтесь, если вы ограничены музыкальными знаниями! Использование любого из значений от 0 до 127 автоматически даст нам стандартную западную настройку. Миди заметки, безусловно, намного легче работать и разумно.
MTOF - это метод, который принимает вход и возвращает значение. Мы введем значение MIDI Note, например, 60, и MTOF вернет соответствующее значение в Герце. Мы можем наблюдать это, написав небольшую программу, которая печатает вывод STD.MTOF (60). Чак использует символы << >>> для печати возвращаемых значений для отладки.
<<< Std.mtof(60) >>>;
261.625565 :(float)
Как вы можете видеть, сочинение песен в Герце начинает становиться сложнее, когда мы пытаемся включить западные музыкальные ноты в наши мелодии. Чтобы сделать вещи еще проще, мы собираемся генерировать некоторые случайные ноты, используя математическую библиотеку. Математика имеет функцию, называемую случайным2, которая берет вход 2 чисел. 2 числа представляют собой диапазон между первым и вторым числами.
Мы можем рандомизировать октавы, примечания, возникающие в течение 12 примечаний, рандомизируя между набором чисел и умножая на 12. Когда мы конвертируем ноты в частоту, Sinosc может воспринимать частоту в качестве входного и издавать звук!
Std.mtof(60 + (Math.random2(0,3) * 12)) => s.freq;
Собрав все вместе, мы можем обернуть наш алгоритм внутри петли. Это одно из преимуществ работы с музыкой с кодом. Поскольку мы продвигаемся к более сложным программам, мы можем начать создавать музыку, которой можно достичь только с помощью компьютерного программирования. Это известно как алгоритмическая композиция.
// Sine Wave connected to audio out
SinOsc s => dac;
while(true) {
// Set midi musical note
// with randomly selected octaves
Std.mtof(60 + (Math.random2(0,3) * 12)) => s.freq;
// Play for 1/4 of a second
0.25::second => now;
}
Попробуйте изменить скорость последовательности. Что происходит, когда вы меняете среднюю ноту C на другую ноту? Как это звучит 12 или 24 заметок? Становится ли песня более или менее музыкальной, если вы измените многочисленную ценность? Срок действия и нажмите CTRL-C на клавиатуре, когда вы слышали достаточно!
Вскоре!
Вскоре!
Вскоре!
Вскоре!