$ chuck 1. Simple Sine Wave.ck
척에는 소음을 만드는 유닛 게이너 컬렉션이 있습니다. 우리가 탐색 할 첫 번째 유닛 발전기를 SINOSC라고합니다. 이것은 단순한 사인파로, 440 Hertz에서 절반 볼륨에서 단일 기본 주파수를 방출합니다. sinosc는 => 연산자를 사용하여 DAC 객체에 '척'됩니다. DAC 객체 또는 디지털 오디오 변환기는 컴퓨터가 외부 스피커 또는 사운드 카드와 연결됩니다. => 연산자를 사인파의 오디오 출력을 스피커에 연결하는 패치 케이블 또는 플러그로 생각하십시오.
SinOsc s => dac;
s.gain(0.5);
s.freq(440);
이 코드만으로는 사운드를 생성하지 않습니다. 사운드를 만들려면 프로그램에 소리가 얼마나 오래 지속되는지 알려야합니다. 척은 시간 단위를 지금 객체에 적용합니다. 이제 현재 시간과 지금까지 '척'을 추가로 나타냅니다. 이 예에서는 사운드를 1 초만 처리하려고합니다. 그러므로 우리는 지금까지 1 초입니다.
1::second => now;
전체 프로그램을 실행하면 1 초 동안 440Hz, 반 볼륨에서 부드러운 톤을 생성합니다. 설정을 가지고 놀아보십시오. 소리의 새로운 변형을 만들기 위해 톤, 볼륨 또는 타이밍을 변경하십시오. 척 문서에 문의하고 사인파를 톱니 또는 사각형으로 변경하십시오. 이 소리는 어떻게 다릅니 까?
지금 음악을 만들자! 이 수업을 위해 우리는 기본 기초 양식 1 장을 취하고 간단한 멜로디를 만들기 위해 일련의 음표를 정리할 것입니다.
가장 기본적인 형태의 음악은 다른 색조, 지속 시간 및 간격으로 연주되는 일련의 사운드 이벤트입니다. 이 예에서는 단순히 1/4 초의 간격으로 동일한 지속 시간을 재생합니다. 각 이벤트마다 간단한 톤을 재생합니다.
이것을 달성하는 것은 어렵지 않습니다. 우리가해야 할 일은 1 장에서 코드를 복사하여 붙여 넣고 4 개의 노트 시퀀스를 구성하는 것입니다. 이 시점에서 각 노트 이벤트의 주파수를 변경하고 거의 음악적으로 건전한 이벤트 패턴을 만들 수 있습니다. 여기서 우리는 단순히 두 번째 음표를 반으로 나누고 세 번째 노트에 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;
프로그램을 몇 번 실행하고 선호하는 시퀀스로 시퀀스를 변경할 수 있는지 확인하십시오. 좋아하는 노래 중 하나를 복제 할 수 있습니까? Hertz를 어떻게 음악 노트로 변환 하시겠습니까? 이와 같은 시퀀싱 음악이 어색하다고 느끼나요? 이것을 더 쉽게 만드는 것은 무엇입니까?
2 장에서 우리는 첫 번째 멜로디를 성공적으로 만들었습니다. 이것은 작은 위업이 아니었다! 컴퓨터는 일련의 지침을 기반으로 조치를 취하는 데 매우 능숙합니다. 우리가 이미 알고있는 것을 감안할 때, 멜로디 나 노래는 복사 및 붙여 넣기를 통해 메모로 메모를 재현 할 수 있습니다. 잠시 후 이런 식으로 음악을 만드는 것은 지루하고 영감을 얻지 못합니다. 더 쉬운 방법이 있어야합니다.
뮤지컬 멜로디는 종종 문구로 알려진 노래를 통해 여러 번 반복됩니다. 문구는 본질적으로 루프입니다. 전자 및 힙합 음악 계층 루프는 루프가 서로 상호 작용하고 재생되는 다리 리듬 텍스처를 만듭니다. 다행스럽게도 우리에게는이 동작을 복제하기위한 프로그래밍에는 완벽한 제어 구조가 있습니다.
각 음표를 복사하고 붙여 넣는 대신 음악 문구를 만들기 위해 지침을 반복 할 수 있습니다. Chuck에서 while 루프는 while 키워드와 곱슬 괄호로 구성되어 반복 될 지침 시퀀스를 포함합니다. 이 예에서는 프로그램이 종료 될 때까지 무한히 지침을 반복합니다.
// Loop Repeats while true is true (aka forever!)
while(true) {
//instructions go here
}
일반적으로 우리는 무한 루프로 컴퓨터 프로그램을 작성하지 않을 것입니다! 이것은 프로그램이 프로그램을 걸고 프로그램이 다른 부품이나 코드를 실행하는 것을 방지하고 영원히 실행되기 때문에 프로그래밍에서 일반적으로 피하는 것입니다. 척에서는 곧 알게 될 바와 같이, 알고리즘 적으로 종료하고 프로그램을 시작하는 방법이 있습니다. 음악에서 우리는 즉흥 연주를하고 무한 루프가 일정 기간 동안 그루브를 만들도록하고 싶을 수도 있습니다.
루프를 더 흥미롭게 만들기 위해 STD와 MATH의 두 가지 새로운 라이브러리를 소개합니다. STD는 표준 라이브러리를 나타냅니다. 프로그램에서 사용할 수있는 유용한 유틸리티 방법의 모음입니다. STD에는 'MTOF'또는 'MIDI to Frequency'라는 메소드가 있습니다. 컴퓨터 음악에서 피아노의 12 개의 노트 척도는 0-127 사이의 오름차순 피치로 표시됩니다. 옥타브는 12 개의 음표이며 10 개의 옥타브가 있습니다. 피아노의 중간 C는 60으로 표시됩니다. 음악적 지식이없는 경우 걱정하지 마십시오! 0-127 사이의 값을 사용하면 자동으로 표준 웨스턴 튜닝이 제공됩니다. MIDI 노트는 확실히 작업하기가 훨씬 쉽고 이유가 있습니다.
MTOF는 입력을 취하고 값을 반환하는 메소드입니다. 예를 들어 MIDI 노트 값, 60을 입력하고 MTOF는 Hertz에서 해당 값을 반환합니다. 우리는 std.mtof (60)의 출력을 인쇄하는 작은 프로그램을 작성하여 이것을 관찰 할 수 있습니다. 척은 <<< >>> 기호를 사용하여 디버깅 목적으로 반환 값을 인쇄합니다.
<<< Std.mtof(60) >>>;
261.625565 :(float)
보시다시피, Hertz에서 노래를 작곡하는 것은 서양 음표를 멜로디에 통합하려고 할 때 까다로워지기 시작합니다. 일을 더 쉽게하기 위해 수학 라이브러리를 사용하여 임의의 음표를 생성 할 것입니다. 수학에는 2 숫자의 입력을 취하는 Random2라는 함수가 있습니다. 두 숫자는 첫 번째 숫자와 두 번째 숫자의 범위를 나타냅니다.
우리는 옥타브를 무작위로 무작위로 만들고, 12 개의 음표를 무작위로 숫자 세트 사이에 무작위로 만들고 12를 곱할 수 있습니다. 주파수를 주파수로 변환 할 때 Sinosc는 주파수를 입력으로 취하고 소리를 낼 수 있습니다!
Std.mtof(60 + (Math.random2(0,3) * 12)) => s.freq;
모든 것을 정리하면 알고리즘을 while 루프 내부에 랩핑 할 수 있습니다. 이것은 코드로 음악을 사용하는 것의 장점 중 하나입니다. 보다 복잡한 프로그램으로 진전함에 따라 컴퓨터 프로그래밍을 통해서만 달성 할 수있는 음악을 만들 수 있습니다. 이것을 알고리즘 조성이라고합니다.
// 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를 만료하고 CTRL-C를 쳤다!
곧 올 것입니다!
곧 올 것입니다!
곧 올 것입니다!
곧 올 것입니다!