$ chuck 1. Simple Sine Wave.ck
Chuck memiliki koleksi unitgenerator yang membuat kebisingan. Unitgenerator pertama yang akan kami jelajahi disebut Sinosc. Ini adalah gelombang sinus sederhana yang memancarkan frekuensi fundamental tunggal pada 440 Hertz pada setengah volume. Sinosc 'dibuang' ke objek DAC menggunakan operator =>. Objek DAC atau konverter audio digital adalah koneksi komputer ke speaker eksternal atau kartu suara Anda. Pikirkan operator => sebagai kabel patch atau steker yang menghubungkan output audio dari Sinceave ke dalam speaker.
SinOsc s => dac;
s.gain(0.5);
s.freq(440);
Kode ini saja tidak akan menghasilkan suara. Untuk menghasilkan suara, kita harus memberi tahu program berapa lama suara akan bertahan. Chuck menerapkan unit waktu untuk objek sekarang. Sekarang mewakili waktu saat ini ditambah waktu tambahan 'dibuang' untuk sekarang. Dalam contoh ini kami hanya ingin memproses suara selama satu detik. Karena itu kami 'chuck' 1 detik hingga sekarang.
1::second => now;
Menjalankan program lengkap menghasilkan nada halus pada 440Hz, setengah volume, selama 1 detik. Cobalah bermain -main dengan pengaturan. Ubah nada, volume, atau waktu untuk membuat variasi baru dari suara. Konsultasikan dengan dokumentasi Chuck dan ubah gelombang sinus ke gigi gergaji atau gelombang persegi. Bagaimana terdengar berbeda?
Mari kita buat musik sekarang! Untuk pelajaran ini kita akan mengambil Formulir Fundamental Dasar Bab 1 dan cukup mengatur urutan catatan untuk membuat melodi sederhana.
Musik, dalam bentuknya yang paling mendasar, adalah urutan peristiwa suara yang dimainkan dengan nada, durasi, dan interval yang berbeda. Dalam contoh ini kita hanya akan memainkan durasi yang sama pada interval 1/4 detik. Untuk setiap acara kami akan memainkan nada sederhana.
Mencapai ini tidak sulit. Yang perlu kita lakukan adalah menyalin dan menempelkan kode kita dari Bab 1 dan menyusun urutan 4 Catatan dari Catatan. Pada titik ini kita dapat mengubah frekuensi untuk setiap acara not dan membuat pola peristiwa yang hampir terdengar musikal. Di sini kami hanya membagi nada kedua menjadi dua, melipatgandakan nada ketiga dengan 2, dan kemudian melipatgandakan nada akhir dengan 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;
Jalankan program beberapa kali dan lihat apakah Anda dapat mengubah urutan ke urutan yang Anda sukai. Bisakah Anda mereplikasi salah satu lagu favorit Anda? Bagaimana Anda mengubah Hertz menjadi catatan musik? Apakah mengurutkan musik seperti ini terasa canggung? Apa yang akan membuat ini lebih mudah?
Dalam Bab 2 kita berhasil menciptakan melodi pertama kita. Ini bukan prestasi kecil! Komputer sangat baik dalam mengambil tindakan berdasarkan urutan instruksi. Mengingat apa yang sudah kita ketahui, melodi atau lagu apa pun dapat direproduksi dengan catatan melalui salinan dan tempel. Setelah beberapa saat menciptakan musik dengan cara ini menjadi membosankan dan tidak menarik. Harus ada cara yang lebih mudah.
Melodi musik sering diulang berkali -kali di atas lagu dalam apa yang dikenal sebagai frasa. Frasa pada dasarnya adalah loop. Loop lapisan musik elektronik dan hip hop untuk membuat tekstur polyrhythmic di mana loop berinteraksi dan bermain satu sama lain. Untungnya bagi kita ada struktur kontrol yang sempurna dalam pemrograman untuk mereplikasi perilaku ini - loop while.
Alih -alih menyalin dan menempel setiap nada, instruksi dapat diulang untuk membuat frasa musik. Di Chuck, while loop dibangun dengan kata kunci sementara dan kurung keriting untuk berisi urutan instruksi yang akan diulang. Dalam contoh ini kita akan mengulangi instruksi tanpa batas atau sampai program diakhiri.
// Loop Repeats while true is true (aka forever!)
while(true) {
//instructions go here
}
Biasanya kami tidak akan menulis program komputer dengan loop tak terbatas! Ini adalah sesuatu yang biasanya dihindari dalam pemrograman karena akan menggantung program dan mencegah program dari menjalankan bagian lain atau kode dan akan berjalan selamanya. Di Chuck, karena kami akan segera mengetahuinya, ada cara untuk mengakhiri dan memulai program secara algoritma. Dalam musik kita mungkin ingin berimprovisasi dan membiarkan loop tak terbatas membangun alur selama periode waktu tertentu.
Untuk membuat loop lebih menarik, kami akan memperkenalkan dua perpustakaan baru - STD dan matematika. STD adalah singkatan dari Standard Library dan merupakan kumpulan metode utilitas yang berguna yang dapat digunakan dalam program kami. STD menampilkan metode yang disebut 'mtof' atau 'midi to frekuensi'. Dalam musik komputer, skala 12 note pada piano direpresentasikan sebagai nada naik antara 0 - 127. Satu oktaf adalah 12 not dan ada 10 oktaf yang tersedia. C Middle C pada piano diwakili pada usia 60. Jangan khawatir jika Anda tidak memiliki pengetahuan musik yang terbatas! Menggunakan nilai salah satu antara 0 - 127 akan secara otomatis memberi kita tuning barat standar. Catatan MIDI tentu saja jauh lebih mudah untuk dikerjakan dan bernalar.
MTOF adalah metode yang mengambil input dan mengembalikan nilai. Kami akan memasukkan nilai catatan MIDI, 60 misalnya, dan MTOF akan mengembalikan nilai yang sesuai di Hertz. Kita dapat mengamati ini dengan menulis program kecil yang mencetak output std.mtof (60). Chuck menggunakan simbol <<< >>> untuk mencetak nilai pengembalian untuk tujuan debugging.
<<< Std.mtof(60) >>>;
261.625565 :(float)
Seperti yang Anda lihat, menyusun lagu -lagu di Hertz mulai menjadi lebih rumit ketika kami mencoba memasukkan catatan musik Barat ke dalam melodi kami. Untuk membuat segalanya lebih mudah, kita akan menghasilkan beberapa catatan acak menggunakan perpustakaan matematika. Matematika memiliki fungsi yang disebut acak2 yang mengambil input 2 angka. 2 angka mewakili kisaran antara angka pertama dan kedua.
Kita dapat mengacak oktaf, catatan yang terjadi pernah 12 catatan, dengan mengacak antara satu set angka dan mengalikan dengan 12. Ketika kita mengonversi catatan menjadi frekuensi, Sinosc dapat mengambil frekuensi sebagai input dan membuat suara!
Std.mtof(60 + (Math.random2(0,3) * 12)) => s.freq;
Menyatukan semuanya, kita dapat membungkus algoritma kita di dalam loop while. Ini adalah salah satu keuntungan bekerja dengan musik dengan kode. Saat kami maju menuju program yang lebih kompleks, kami dapat mulai membuat musik yang hanya dapat dicapai dengan pemrograman komputer. Ini dikenal sebagai komposisi algoritmik.
// 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;
}
Coba ubah kecepatan urutan. Apa yang terjadi ketika Anda mengubah catatan C tengah ke catatan lain? Bagaimana kedengarannya 12 atau 24 catatan turun? Apakah lagu menjadi lebih atau kurang musikal jika Anda mengubah nilai ganda? Kedaluwarsa dan tekan Ctrl-C pada keyboard Anda saat Anda cukup mendengar!
Segera hadir!
Segera hadir!
Segera hadir!
Segera hadir!