1 00:00:00,000 --> 00:00:05,180 2 00:00:05,180 --> 00:00:05,930 CONNOR HARRIS: Hi. 3 00:00:05,930 --> 00:00:06,820 Saya Connor Harris. 4 00:00:06,820 --> 00:00:09,729 Saya adalah seorang CA CS50 di Harvard. 5 00:00:09,729 --> 00:00:11,270 STEPHEN KREWSON: Saya Stephen Krewson. 6 00:00:11,270 --> 00:00:12,582 Saya adalah seorang TF untuk CS50 di Yale. 7 00:00:12,582 --> 00:00:15,790 CONNOR HARRIS: Dan kita akan bercakap tentang beberapa teknologi yang anda mungkin 8 00:00:15,790 --> 00:00:18,880 mahu menggunakan jika anda berminat dalam melakukan projek akhir atau benar-benar 9 00:00:18,880 --> 00:00:20,920 apa-apa dengan muzik. 10 00:00:20,920 --> 00:00:24,400 Kami akan memberi tumpuan kepada yang pertama bahasa pengaturcaraan yang dikenali sebagai Haskell. 11 00:00:24,400 --> 00:00:26,280 Ia berfungsi bahasa, jadi paradigma 12 00:00:26,280 --> 00:00:29,620 adalah sangat berbeza daripada C atau PHP atau lain-lain bahasa penting 13 00:00:29,620 --> 00:00:33,450 yang anda telah digunakan sudah, dan terutamanya pada perpustakaan ditulis dalam Haskell 14 00:00:33,450 --> 00:00:40,240 dipanggil Euterpea, yang boleh membantu orang dengan menulis muzik fungsi, 15 00:00:40,240 --> 00:00:40,780 pada asasnya. 16 00:00:40,780 --> 00:00:43,400 Dan Stephen akan berjalan anda melalui satu contoh yang hebat itu. 17 00:00:43,400 --> 00:00:46,423 >> Selepas ini, saya akan memperkenalkan anda kepada sesuatu yang dinamakan LillyPond, yang 18 00:00:46,423 --> 00:00:48,370 adalah teknologi untuk muzik atur huruf. 19 00:00:48,370 --> 00:00:50,830 Ia adalah jenis seperti LaTeX untuk muzik sesiapa di antara kamu 20 00:00:50,830 --> 00:00:57,530 telah menggunakan LaTeX untuk kelas matematik atau lain kelas P set atau golongan berada. 21 00:00:57,530 --> 00:01:00,440 Oleh itu, saya akan memberikan anda, sekali lagi, beberapa contoh mudah yang 22 00:01:00,440 --> 00:01:03,640 dan menunjukkan anda ke umum arah beberapa sumber yang lebih baik. 23 00:01:03,640 --> 00:01:04,319 >> STEPHEN KREWSON: Dalam Selain itu, kita fikir ia 24 00:01:04,319 --> 00:01:06,720 akan menjadi sejuk untuk menubuhkan sedikit petua 25 00:01:06,720 --> 00:01:10,780 ke arah saluran paip antara Euterpea janaan fail MIDI 26 00:01:10,780 --> 00:01:13,910 dalam LillyPond, jadi kami menyediakan beberapa arahan mengenai skrip 27 00:01:13,910 --> 00:01:16,310 untuk berbuat demikian yang disediakan dengan LillyPond 28 00:01:16,310 --> 00:01:19,160 hanya untuk memastikan ia sumber terbuka dan mendapatkan saluran paip akan. 29 00:01:19,160 --> 00:01:20,910 CONNOR HARRIS: Sekali lagi, kita harus menekankan, 30 00:01:20,910 --> 00:01:23,100 kedua-dua teknologi, anda tidak perlu menggunakan mereka bersama-sama. 31 00:01:23,100 --> 00:01:25,370 Mereka tidak direka untuk bekerja bersama-sama, walaupun mereka sangat baik. 32 00:01:25,370 --> 00:01:26,362 >> STEPHEN KREWSON: Betul. 33 00:01:26,362 --> 00:01:30,116 Dan benar-benar percuma. 34 00:01:30,116 --> 00:01:32,240 CONNOR HARRIS: Jadi ucapan terimakasih, hanya membaca itu. 35 00:01:32,240 --> 00:01:33,406 STEPHEN KREWSON: diisi diperhatikan. 36 00:01:33,406 --> 00:01:36,360 Terima kasih kepada mereka orang. 37 00:01:36,360 --> 00:01:39,180 Ini saya akan berlama-lama di hanya untuk seketika. 38 00:01:39,180 --> 00:01:41,560 Proses pemasangan adalah sedikit rumit. 39 00:01:41,560 --> 00:01:45,420 Kami yang membaca saya pada GitHub bahawa anda boleh mengambil lihat. 40 00:01:45,420 --> 00:01:47,840 Hanya e-mel saya jika anda mempunyai sebarang pertanyaan. 41 00:01:47,840 --> 00:01:52,829 Tetapi kita akan menjalankan ini dengan andaian bahawa ini bekerja untuk semua orang. 42 00:01:52,829 --> 00:01:55,620 CONNOR HARRIS: Dan jika anda tidak boleh mendapatkan LillyPond untuk bekerja, tiada masalah besar. 43 00:01:55,620 --> 00:02:00,139 Tidak ada penyusunan hidup yang akan terlibat, sekurang-kurangnya pada akhir saya. 44 00:02:00,139 --> 00:02:02,930 STEPHEN KREWSON: Haskell dan LillyPond kedua-dua harus mempunyai pemasang. 45 00:02:02,930 --> 00:02:08,497 Euterpea dimuat turun sebagai pakej, sebagainya dan sebagainya. 46 00:02:08,497 --> 00:02:10,080 Oleh itu, kita bercakap tentang muzik komputer. 47 00:02:10,080 --> 00:02:12,990 Dan ini hanyalah sangat pandangan 50.000 kaki. 48 00:02:12,990 --> 00:02:15,700 Ada beberapa aspek yang lainnya. 49 00:02:15,700 --> 00:02:18,120 Dan ini adalah kasar dan akan mengaburi terperinci. 50 00:02:18,120 --> 00:02:22,090 Tetapi kita boleh memikirkan sesuatu seperti komposisi algoritma, 51 00:02:22,090 --> 00:02:24,920 menggunakan algoritma, menggunakan kod, untuk menjana 52 00:02:24,920 --> 00:02:30,280 beberapa jenis daripada- mungkin seorang diri sama urutan nota, atau mungkin nota 53 00:02:30,280 --> 00:02:33,330 di bawah beberapa kekangan. 54 00:02:33,330 --> 00:02:35,350 Dan kemudian mereka boleh jadi dilaksanakan atau ditafsirkan 55 00:02:35,350 --> 00:02:38,390 dengan alat-alat analog atau apa-apa seperti itu. 56 00:02:38,390 --> 00:02:42,010 Tetapi komposisi itu dilakukan algorithmically. 57 00:02:42,010 --> 00:02:45,120 >> Tetapi sudah tentu, mungkin bidang muzik komputer atau muzik digital 58 00:02:45,120 --> 00:02:48,870 kami lebih mengenali adalah digital sintesis bunyi atau pensampelan digital 59 00:02:48,870 --> 00:02:51,160 dan rakaman digital. 60 00:02:51,160 --> 00:02:55,650 Banyak alat-alat digital dilakukan melalui pensampelan digital. 61 00:02:55,650 --> 00:03:00,110 Malah, kami akan menggunakan salah satu daripada orang-orang di bentuk perpustakaan fon bunyi kemudian. 62 00:03:00,110 --> 00:03:02,850 >> Tetapi ada juga sesuatu yang dipanggil sintesis digital yang keluar 63 00:03:02,850 --> 00:03:08,650 daripada 70-an dan ke dalam 'lewat 80-an dengan Yamaha dan John Chowning di Stanford 64 00:03:08,650 --> 00:03:11,990 melakukan sintesis FM atau Sintesis Pemodulatan Frekuensi, 65 00:03:11,990 --> 00:03:15,100 di mana anda mempunyai pembawa isyarat dan isyarat modulasi 66 00:03:15,100 --> 00:03:18,270 kedua-dua dalam spektrum audio. 67 00:03:18,270 --> 00:03:22,570 Tetapi apa yang kita memberi tumpuan kepada hari ini adalah sesuatu yang dinamakan MIDI, 68 00:03:22,570 --> 00:03:25,040 dan sudah tentu, komposisi algoritma. 69 00:03:25,040 --> 00:03:30,940 >> Kita tidak akan membuat instrumen, tetapi kita sebaliknya akan membuat beberapa muzik, 70 00:03:30,940 --> 00:03:33,940 dan kemudian yang akan mendapat ditafsirkan oleh beberapa instrumen yang 71 00:03:33,940 --> 00:03:38,300 adalah conformant kepada standard umum MIDI. 72 00:03:38,300 --> 00:03:40,830 Jadi apa MIDI? 73 00:03:40,830 --> 00:03:45,550 Saya tidak akan untuk mendapatkan terlalu dalam ke dalamnya, tetapi MIDI adalah protokol pemindahan data. 74 00:03:45,550 --> 00:03:49,250 Ia adalah sejenis panduan seluruh syarikat yang berbeza dan industri 75 00:03:49,250 --> 00:03:52,250 kerana menganjurkan bunyi atau patch. 76 00:03:52,250 --> 00:03:54,170 Oleh itu, kita akan melihat bahawa ada standard MIDI 77 00:03:54,170 --> 00:03:57,500 untuk semua perkusi yang berbeza bunyi dan cadangan MIDI 78 00:03:57,500 --> 00:04:01,360 untuk semua jenis Synth atau jenis semua instrumen 79 00:04:01,360 --> 00:04:03,650 kumpulan orkestra, katakan. 80 00:04:03,650 --> 00:04:08,916 >> Anda mungkin biasa dengan 0 melalui 127 mesej MIDI. 81 00:04:08,916 --> 00:04:12,920 Satu isyarat MIDI biasanya satu bit yang menunjukkan 82 00:04:12,920 --> 00:04:16,130 sama ada ia adalah data atau status paket, dan kemudian ada 83 00:04:16,130 --> 00:04:18,589 tujuh bit isyarat. 84 00:04:18,589 --> 00:04:21,430 Dan ini boleh mengawal segala-galanya daripada jumlah 85 00:04:21,430 --> 00:04:25,330 kepada tindakan atau tekanan pada kekunci tertentu 86 00:04:25,330 --> 00:04:29,400 jika anda melaksanakan dengan MIDI yang pengawal dan, sudah tentu, 87 00:04:29,400 --> 00:04:31,250 nota. 88 00:04:31,250 --> 00:04:33,450 Dan sudah tentu, MIDI mempunyai menjadi sangat berguna, 89 00:04:33,450 --> 00:04:37,550 kerana ia adalah satu cara untuk wayar bersama-sama atau rantai daisy 90 00:04:37,550 --> 00:04:41,570 sekumpulan peranti perkakasan MIDI. 91 00:04:41,570 --> 00:04:44,050 Saya mempunyai tujuh atau lapan kembali di rumah saya. 92 00:04:44,050 --> 00:04:46,610 Ia akan benar-benar rumit, tetapi ia benar-benar kuat. 93 00:04:46,610 --> 00:04:47,460 Dan ia benar-benar lama. 94 00:04:47,460 --> 00:04:51,117 Ia dari awal 80-an, dan ia adalah benar-benar baik dan kecil. 95 00:04:51,117 --> 00:04:51,950 CONNOR HARRIS: Ya. 96 00:04:51,950 --> 00:04:54,230 Semua Nintendo klasik permainan video akan mungkin 97 00:04:54,230 --> 00:04:56,088 mempunyai fail MIDI untuk muzik, sebagai contoh. 98 00:04:56,088 --> 00:04:59,550 99 00:04:59,550 --> 00:05:01,740 >> STEPHEN KREWSON: Berikut adalah contoh MIDI umum, 100 00:05:01,740 --> 00:05:06,520 menunjukkan MIDI sebagai jenis yang protokol umum. 101 00:05:06,520 --> 00:05:13,280 Dan saya rasa kita boleh memikirkan Perbezaan antara spesifikasi 102 00:05:13,280 --> 00:05:17,830 bahawa perlu ada sesuatu seperti instrumen ini bunyi dan sebenar 103 00:05:17,830 --> 00:05:21,740 merealisasikan instrumen mereka bunyi dalam fon bunyi atau MIDI tertentu 104 00:05:21,740 --> 00:05:25,740 pensintesis sebagai perbezaan antara mungkin satu typeface-- yang mengatakan, 105 00:05:25,740 --> 00:05:30,350 secara umum, ini adalah reka bentuk cara ini tertentu untuk mewakili 106 00:05:30,350 --> 00:05:35,907 characters-- dan font tertentu yang mempunyai saiz tertentu dan timbre, 107 00:05:35,907 --> 00:05:37,240 dan ada merealisasikan the-- 108 00:05:37,240 --> 00:05:39,156 >> CONNOR HARRIS: Mungkin perbandingan yang lebih baik akan 109 00:05:39,156 --> 00:05:43,430 menjadi standard Unicode says-- ia memberi nombor kepada setiap watak, dan benar-benar 110 00:05:43,430 --> 00:05:46,830 setiap bahasa di dunia, atau satu set luas skrip bahasa 111 00:05:46,830 --> 00:05:51,310 di dunia, dan kemudian mereka adalah diberikan kepada sesuatu grafik 112 00:05:51,310 --> 00:05:53,710 oleh pelbagai pakej font. 113 00:05:53,710 --> 00:05:56,630 Dan jelas, yang boleh anda fikirkan MIDI sebagai Unicode bunyi. 114 00:05:56,630 --> 00:06:03,250 Dan ia hanya senarai daripada- aliran besar acara dan surat cara dan barang kecil, 115 00:06:03,250 --> 00:06:06,090 dan anda perlu mempunyai yang berasingan program, seperti muka taip, 116 00:06:06,090 --> 00:06:08,537 untuk menjadikan itu ke dalam sesuatu yang boleh didengar. 117 00:06:08,537 --> 00:06:12,360 118 00:06:12,360 --> 00:06:13,780 >> STEPHEN KREWSON: Jadi mengapa Haskell? 119 00:06:13,780 --> 00:06:19,110 Haskell adalah pengaturcaraan yang berfungsi bahasa, sangat maju, 120 00:06:19,110 --> 00:06:22,770 sangat berbeza daripada C, sangat berbeza dengan PHP. 121 00:06:22,770 --> 00:06:28,120 Dan kita akan melihat bahawa terdapat satu kemudahan komposisi majlis di Haskell 122 00:06:28,120 --> 00:06:37,640 yang akan membolehkan kita untuk angin melalui mengarang atau menaip up, menyalin, 123 00:06:37,640 --> 00:06:42,160 sesuatu seperti Frere Jacques, lagu ini mudah yang 124 00:06:42,160 --> 00:06:46,815 mempunyai banyak bahagian-bahagian di dalamnya yang adalah diri yang sama atau mengulangi. 125 00:06:46,815 --> 00:06:49,740 126 00:06:49,740 --> 00:06:53,250 Jadi ini akan menjadi sebahagian daripada motivasi mengapa 127 00:06:53,250 --> 00:06:59,400 kita menggunakan Haskell, di mana fungsi warganegara kelas pertama. 128 00:06:59,400 --> 00:07:01,120 >> Dan saya mahu melanjutkan ini sedikit. 129 00:07:01,120 --> 00:07:08,800 Ia adalah sedikit mudah untuk notate Frere Jacques di Haskell. 130 00:07:08,800 --> 00:07:12,100 Tetapi bagaimana jika kita mahu menambah bahagian drum kepadanya? 131 00:07:12,100 --> 00:07:17,320 Bagaimana jika kita mahu mencuba untuk membuat sesuatu seperti Roland 808 atau 909 drum 132 00:07:17,320 --> 00:07:20,970 mesin di mana anda perlu kira-kira 16 langkah-langkah yang berbeza? 133 00:07:20,970 --> 00:07:24,590 Biasanya ini adalah terfikir untuk nota yang ke-16. 134 00:07:24,590 --> 00:07:28,640 Dan anda boleh mengawal global tempo, dan anda boleh memilih 135 00:07:28,640 --> 00:07:34,620 sekumpulan alat perkusi yang berbeza dram bass, tepukan tangan yang, jerat yang berbeza, 136 00:07:34,620 --> 00:07:37,540 terbuka dan tertutup topi tinggi pada jenis ini saluran, 137 00:07:37,540 --> 00:07:41,600 dan kemudian anda boleh EQ atau menyesuaikan jumlah mereka. 138 00:07:41,600 --> 00:07:45,290 >> Dan kita akan melihat cara yang baik dalam Haskell mewakili langkah ini 139 00:07:45,290 --> 00:07:48,810 sequencer dengan semua pelbagai perkara yang sejuk di Haskell 140 00:07:48,810 --> 00:07:53,100 boleh kita lakukan dengan menjana senarai dan penapisan lebih senarai, 141 00:07:53,100 --> 00:07:56,060 pemetaan ke atas senarai, pemetaan fungsi lebih senarai. 142 00:07:56,060 --> 00:07:59,530 143 00:07:59,530 --> 00:08:00,760 Dan permohonan maaf secara cepat. 144 00:08:00,760 --> 00:08:05,300 Ini adalah sangat sepintas dan lakaran terlalu cepat 145 00:08:05,300 --> 00:08:07,620 beberapa aspek daripada Haskell dan Euterpea, 146 00:08:07,620 --> 00:08:11,760 yang merupakan domain khusus bahasa tertanam bertulis 147 00:08:11,760 --> 00:08:14,970 dalam Haskell untuk jenis muzik. 148 00:08:14,970 --> 00:08:17,350 Oleh itu, sila lihat kod di dalam talian. 149 00:08:17,350 --> 00:08:22,404 Api sehingga GHCI, yang merupakan Glasgow Haskell Compiler Interpreter. 150 00:08:22,404 --> 00:08:24,320 Dan saya akan melakukan beberapa ini dalam sedikit 151 00:08:24,320 --> 00:08:25,880 supaya anda boleh melihat bagaimana ia dilakukan. 152 00:08:25,880 --> 00:08:31,021 >> Dan ini membolehkan anda untuk memuatkan masuk dengan the-- sintaksis adalah kolon dan kemudian 153 00:08:31,021 --> 00:08:31,520 arahan. 154 00:08:31,520 --> 00:08:33,510 Anda boleh memuatkan dalam fail. 155 00:08:33,510 --> 00:08:36,840 Anda boleh menggunakan browse pada fail-fail untuk melihat semua fungsi-fungsi yang 156 00:08:36,840 --> 00:08:39,169 wujud di dalam modul tertentu. 157 00:08:39,169 --> 00:08:43,850 Dan kemudian seperti yang kita akan lihat, jenis dan jenis kelas-kelas adalah begitu penting dalam Haskell, 158 00:08:43,850 --> 00:08:48,850 supaya anda sentiasa boleh check-- terutamanya jika anda bekerja dalam DSCL baru 159 00:08:48,850 --> 00:08:51,600 seperti ini, apakah jenis muzik? 160 00:08:51,600 --> 00:08:55,114 Saya tahu mengenai cara numerik jenis bekerja di Haskell, 161 00:08:55,114 --> 00:08:56,530 tetapi saya tidak tahu banyak tentang muzik. 162 00:08:56,530 --> 00:09:01,280 Tetapi anda boleh menerokai cara mereka ditakrifkan dengan menggunakan t atau jenis arahan 163 00:09:01,280 --> 00:09:04,577 dan kemudian memanggil tertentu fungsi atau objek data. 164 00:09:04,577 --> 00:09:05,410 CONNOR HARRIS: Ya. 165 00:09:05,410 --> 00:09:09,820 Jika anda fikir C dan dilafaz adalah hardass tentang jenis, 166 00:09:09,820 --> 00:09:11,230 anda tidak tahu tentang Haskell. 167 00:09:11,230 --> 00:09:14,230 Perkara yang baik tentang Haskell adalah bahawa jika anda boleh mendapatkan kod anda untuk menyusun 168 00:09:14,230 --> 00:09:16,790 dan jika cek jenis Haskell, ia mungkin betul, 169 00:09:16,790 --> 00:09:18,675 kerana sistem jenis yang begitu ketat. 170 00:09:18,675 --> 00:09:20,090 >> STEPHEN KREWSON: Ya. 171 00:09:20,090 --> 00:09:21,980 Jadi saya hanya mahu pergi through-- dan sekali lagi, 172 00:09:21,980 --> 00:09:27,160 ini tidak melakukannya justice-- beberapa ciri-ciri Haskell itu, sekurang-kurangnya 173 00:09:27,160 --> 00:09:31,780 untuk creators-- dan ia dibuat di akhir 1980-an oleh sekumpulan orang, 174 00:09:31,780 --> 00:09:34,610 jawatankuasa kira-kira 20 dan kaum fikir adalah penting. 175 00:09:34,610 --> 00:09:36,850 Dan perkara pertama yang mereka disenaraikan dalam kertas kerja yang 176 00:09:36,850 --> 00:09:41,890 menyifatkan usul Haskell dalam tempoh 20 tahun pertama atau lebih 177 00:09:41,890 --> 00:09:43,390 adalah bahawa ia adalah malas. 178 00:09:43,390 --> 00:09:44,990 Jadi apa maknanya? 179 00:09:44,990 --> 00:09:49,860 >> Nah, ia bermakna apabila kita mempunyai beberapa jenis bersuara, kita perlu menilai. 180 00:09:49,860 --> 00:09:54,390 Dan Haskell melakukan ini dalam panggilan melalui keperluan atau cara yang tidak ketat. 181 00:09:54,390 --> 00:09:57,250 Iaitu, jika kita mempunyai sekumpulan komponen bersuara kami, 182 00:09:57,250 --> 00:10:00,660 kita cuba untuk melambatkan penilaian mereka komponen utama 183 00:10:00,660 --> 00:10:05,300 sehingga minute-- lalu mutlak iaitu sehingga kita benar-benar memerlukannya. 184 00:10:05,300 --> 00:10:08,480 >> Jadi ertinya- ini yang tidak benar-benar sejuk, terutamanya 185 00:10:08,480 --> 00:10:13,200 jika kita berfikir tentang abstraksi satu langkah sequencer muzik. 186 00:10:13,200 --> 00:10:16,740 Anda menghidupkannya, dan anda mula menjalankan sequence-- langkah 187 00:10:16,740 --> 00:10:20,010 jika anda pernah bekerja dengan gendang machine-- dan ia hanya pergi selama-lamanya. 188 00:10:20,010 --> 00:10:24,650 Jadi ia akan menjadi benar-benar baik jika kita boleh mencontohi bahawa dalam Haskell. 189 00:10:24,650 --> 00:10:31,040 Dan kita boleh melakukannya dengan tidak terhingga nilai, dalam senarai terhingga tertentu. 190 00:10:31,040 --> 00:10:35,860 Ia amat mudah untuk menaip senarai terbatas dalam Haskell. 191 00:10:35,860 --> 00:10:39,230 Anda hanya boleh menggunakan sintaks ke bawah di sini, di mana anda melihat 1 hingga 3, 192 00:10:39,230 --> 00:10:42,440 mengeluarkan 3 1 dot dot, dan bahawa senarai tidak terhad 193 00:10:42,440 --> 00:10:46,960 semua nombor asli melanjutkan pada sejauh yang anda boleh bayangkan. 194 00:10:46,960 --> 00:10:49,925 >> Saya ingin memperkenalkan satu konsep lipatan segera. 195 00:10:49,925 --> 00:10:51,800 Dan sekali lagi, tujuan seminar ini tidak 196 00:10:51,800 --> 00:10:55,770 untuk belajar tentang lipatan dalam Haskell atau fungsi aras tinggi. 197 00:10:55,770 --> 00:10:59,640 Tetapi saya hanya mahu memperkenalkannya kepada memberi pengertian yang tepat tentang bagaimana pelik 198 00:10:59,640 --> 00:11:03,700 Haskell dan bagaimana kuat ia adalah. 199 00:11:03,700 --> 00:11:08,000 Dan khususnya, kita akan adalah- apabila kita melakukan bahagian drum kami yang berbeza, 200 00:11:08,000 --> 00:11:12,790 kita akan dapat memanipulasi senarai nombor, lipatan mereka ke satu sama lain. 201 00:11:12,790 --> 00:11:17,290 Dan untuk berbuat demikian, kita akan menjadi menggunakan peta dan lipatan. 202 00:11:17,290 --> 00:11:21,770 >> Ada bersekutu hak kali ganda, yang betul-betul ini satu 203 00:11:21,770 --> 00:11:26,990 sini-- 1 tolak kuantiti, 2 tolak kuantiti, 3 tolak 0. 204 00:11:26,990 --> 00:11:29,170 Dan sintaks yang kali ganda, anda memberi kali ganda 205 00:11:29,170 --> 00:11:34,680 nilai asas dan kemudian operation-- yang dalam kes ini, penambahan atau penolakan. 206 00:11:34,680 --> 00:11:36,280 Saya telah menunjukkan kedua-dua kes. 207 00:11:36,280 --> 00:11:41,760 Dan kemudian ada penumpuk yang berkumpul atas seluruh senarai, 208 00:11:41,760 --> 00:11:46,330 memohon yang ditambah pengendali atau tolak, dan kemudian terkumpul itu. 209 00:11:46,330 --> 00:11:52,680 Jadi ini akan menjadi the-- jika ia dipanggil dengan kali ganda r ditambah 0, bermula dengan 0, 210 00:11:52,680 --> 00:11:54,720 kami sudah tentu jumlah semua nombor dalam senarai itu. 211 00:11:54,720 --> 00:11:57,134 Dan itu adalah satu senarai 1-3. 212 00:11:57,134 --> 00:12:00,050 CONNOR HARRIS: Jadi untuk meletakkan ia lain cara, kali ganda r mengambil masa tiga hujah. 213 00:12:00,050 --> 00:12:02,540 Ada fungsi yang sendiri mengambil dua hujah, 214 00:12:02,540 --> 00:12:05,400 kemudian ada nilai starter, dan ada senarai nilai. 215 00:12:05,400 --> 00:12:08,570 Dan apa yang anda lakukan adalah anda mengambil nilai starter, nilai pertama, 216 00:12:08,570 --> 00:12:09,850 meletakkan mereka ke dalam majlis itu. 217 00:12:09,850 --> 00:12:11,607 Apa yang anda keluar, mengambil bahawa, makanan yang 218 00:12:11,607 --> 00:12:13,940 ke dalam fungsi nilai kedua, apa yang anda keluar, 219 00:12:13,940 --> 00:12:16,690 mengambil bahawa, makanan itu ke dalam fungsi nilai ketiga. 220 00:12:16,690 --> 00:12:18,740 Dan kemudian jika anda turun senarai ini kepada seluruh perjalanan ini, 221 00:12:18,740 --> 00:12:22,970 anda akan mendapat akhirnya beberapa nilai tunggal itu 222 00:12:22,970 --> 00:12:25,720 daripada jenis yang sama apa yang anda bermula dengan dan daripada jenis yang sama 223 00:12:25,720 --> 00:12:29,147 sebagai perkara-perkara dalam senarai, dan kemudian itulah hasil pulangan lipat R. 224 00:12:29,147 --> 00:12:31,980 STEPHEN KREWSON: Jadi khususnya, ini adalah fungsi aras tinggi, 225 00:12:31,980 --> 00:12:34,460 kerana mereka mengambil satu lagi berfungsi sebagai salah satu daripada hujah-hujah. 226 00:12:34,460 --> 00:12:34,770 >> CONNOR HARRIS: Ya. 227 00:12:34,770 --> 00:12:37,820 Jika anda telah menggunakan lain yang tertentu languages-- saya tahu R, [didengar] 228 00:12:37,820 --> 00:12:41,510 bahasa mempunyai ini, yang dipanggil Mengurangkan. 229 00:12:41,510 --> 00:12:45,460 Anda mungkin mempunyai fungsi yang sama dalam bahasa lain, hanya dipanggil 230 00:12:45,460 --> 00:12:48,160 perkara yang berbeza. 231 00:12:48,160 --> 00:12:50,680 >> STEPHEN KREWSON: Dan apa yang baik tentang kali ganda R 232 00:12:50,680 --> 00:12:53,880 dalam hal ini adalah kali ganda yang R boleh bekerja dengan senarai terbatas. 233 00:12:53,880 --> 00:12:59,490 Jadi, dalam bahagian bawah ini, P5 ini menjana nota yang 234 00:12:59,490 --> 00:13:03,120 dihidupkan di sequencer langkah untuk beberapa bahagian drum, sebahagian drum kelima, 235 00:13:03,120 --> 00:13:05,480 dan mungkin ia conga yang drum atau sesuatu. 236 00:13:05,480 --> 00:13:09,719 Dan ini adalah sengaja cara bodoh penulisan ini, 237 00:13:09,719 --> 00:13:11,510 tetapi ia menyeronokkan, kerana ia menunjukkan banyak 238 00:13:11,510 --> 00:13:14,460 perkara tentang Haskell dan Euterpea. 239 00:13:14,460 --> 00:13:20,650 >> Jadi kali ganda R kolon colon-- ini hanya satu pengendali yang menolak perkara 240 00:13:20,650 --> 00:13:25,700 bersama-sama pada list-- yang menggesa kosong senarai, yang hanya kurungan kosong. 241 00:13:25,700 --> 00:13:28,250 Dan saya menyeru yang dalam senarai tidak terhingga ini. 242 00:13:28,250 --> 00:13:31,570 Ini sebenarnya adalah dua senarai ditambah bersama-sama di sini. 243 00:13:31,570 --> 00:13:37,150 Senarai 1 koma 6 dot dot adalah 1, 6, 11, 16. 244 00:13:37,150 --> 00:13:39,750 Jadi Haskell-- dalam hanya beberapa watak, anda 245 00:13:39,750 --> 00:13:42,420 boleh menjana keseluruhan urutan nombor 246 00:13:42,420 --> 00:13:46,240 yang lima nombor selain regangan ke infiniti. 247 00:13:46,240 --> 00:13:49,860 Dan saya Prepend itu list-- ini sedikit lebih pendek 248 00:13:49,860 --> 00:13:54,370 3, 8, 21-- hanya untuk menunjukkan kepada anda bagaimana anda boleh menyatukan senarai. 249 00:13:54,370 --> 00:13:55,790 >> Dan kemudian saya telah dilipat ke atas dirinya. 250 00:13:55,790 --> 00:14:01,510 Dan ini akhirnya hanya menjadi sejenis operasi pengenalan, tetapi ia terbatas. 251 00:14:01,510 --> 00:14:06,070 Dan lipat R boleh berbuat demikian, kerana ia malas menilai, seperti di atas. 252 00:14:06,070 --> 00:14:10,582 Jika kita mempunyai 1 dan 2 dan 3, kita boleh hanya braket off keseluruhan yang lain daripada itu. 253 00:14:10,582 --> 00:14:12,290 Yang tidak akan bekerja untuk tolak atau ditambah, tetapi ia 254 00:14:12,290 --> 00:14:17,760 akan bekerja untuk kolon ini operasi identiti dalam senarai. 255 00:14:17,760 --> 00:14:24,620 >> Jadi bagaimana kita boleh dikatakan menggunakan bahawa jika kita mempunyai senarai yang panjang tak terhingga perkara? 256 00:14:24,620 --> 00:14:26,500 Nah, Haskell menyediakan banyak functions-- 257 00:14:26,500 --> 00:14:29,450 dan kelihatan lebih ke dalam ini dalam time-- sendiri seperti mengambil 258 00:14:29,450 --> 00:14:32,200 yang mengatakan, OK, kami menjana senarai terhingga ini, 259 00:14:32,200 --> 00:14:35,950 tetapi kami hanya akan mengambil beberapa beberapa ia Dan dalam kes ini 260 00:14:35,950 --> 00:14:38,410 kita akan melihat ini kemudian dalam code-- mesin dram kami 261 00:14:38,410 --> 00:14:43,740 GM hanya beberapa jenis global berubah-ubah bagi bilangan langkah 262 00:14:43,740 --> 00:14:44,610 di sequencer. 263 00:14:44,610 --> 00:14:47,630 Pada mesin roll masuk saya menunjukkan anda, itu biasanya 16, 264 00:14:47,630 --> 00:14:51,475 tetapi saya telah melaksanakan dengan 32. 265 00:14:51,475 --> 00:14:54,470 Ia tidak benar-benar perkara itu. 266 00:14:54,470 --> 00:15:00,230 >> Haskell juga tulen, jadi ia mempunyai kuat menaip statik yang Connor dirujuk kepada. 267 00:15:00,230 --> 00:15:03,220 Jadi fungsi adalah matematik dalam sense-- 268 00:15:03,220 --> 00:15:06,600 mereka lebih matematik bahawa mereka dijamin 269 00:15:06,600 --> 00:15:11,530 untuk tidak mengakses atau mengubah apa-apa jenis berubah-ubah atau melaksanakan input atau output. 270 00:15:11,530 --> 00:15:14,420 Jadi jika anda mempunyai fungsi, ia ditentukan. 271 00:15:14,420 --> 00:15:17,400 Ia akan sentiasa kembali yang sama nilai di negeri program 272 00:15:17,400 --> 00:15:19,310 atau tetap sama. 273 00:15:19,310 --> 00:15:22,940 Terdapat, sudah tentu, pengecualian monadic ini, tetapi itu di luar skop. 274 00:15:22,940 --> 00:15:23,900 >> CONNOR HARRIS: Ya. 275 00:15:23,900 --> 00:15:26,946 Ini bermakna, walaupun, adalah terdapat adalah beberapa penting [didengar] 276 00:15:26,946 --> 00:15:27,820 hasil daripada ini. 277 00:15:27,820 --> 00:15:30,940 Satu adalah bahawa ia adalah sangat mudah untuk parallelize program Haskell. 278 00:15:30,940 --> 00:15:32,773 Kerana jika anda mempunyai, berkata, satu fungsi yang 279 00:15:32,773 --> 00:15:36,064 perlu untuk beroperasi pada satu juta nilai, jika anda tahu bahawa majlis itu akan sentiasa 280 00:15:36,064 --> 00:15:39,280 memberi nilai yang sama jika anda memberi makan pada value-- tertentu 281 00:15:39,280 --> 00:15:43,055 jika anda [didengar] f 1, f 2, maka f 3 atau f daripada 1 whatnot-- 282 00:15:43,055 --> 00:15:45,180 tidak akan menulis ke fail atau melakukan sesuatu 283 00:15:45,180 --> 00:15:46,850 yang akan mengubah nilai f2. 284 00:15:46,850 --> 00:15:50,220 Anda hanya boleh berpecah fungsi ini kepada juta mesin yang berlainan atau satu juta 285 00:15:50,220 --> 00:15:54,720 benang yang berbeza atau apa sahaja, mendapat semua jawapan kembali, 286 00:15:54,720 --> 00:15:56,900 mendapat semua nilai-nilai pulangan belakang, dan kemudian itu sahaja. 287 00:15:56,900 --> 00:15:59,780 Jadi sangat mudah untuk parallelize sesuatu. 288 00:15:59,780 --> 00:16:03,140 >> Kelemahan adalah input yang dan output terutamanya 289 00:16:03,140 --> 00:16:05,720 dimuatkan ke dalam sistem jenis dengan cara yang sangat rumit. 290 00:16:05,720 --> 00:16:09,010 Kami tidak akan pergi ke betul yang sekarang, tetapi saya menggalakkan anda untuk melihat beberapa sumber 291 00:16:09,010 --> 00:16:11,175 dalam talian jika anda mahu belajar tentang itu. 292 00:16:11,175 --> 00:16:13,960 293 00:16:13,960 --> 00:16:16,550 >> STEPHEN KREWSON: Jadi menaip classes-- dan ini 294 00:16:16,550 --> 00:16:21,610 kelas was-- jenis dicipta untuk menyelesaikan 295 00:16:21,610 --> 00:16:24,160 masalah pengendali muatan. 296 00:16:24,160 --> 00:16:27,590 Oleh itu, kita mahu mempunyai persamaan antara pelbagai jenis perkara. 297 00:16:27,590 --> 00:16:31,040 Sudah tentu, kita boleh berfikir daripada- persamaan antara jenis angka 298 00:16:31,040 --> 00:16:34,720 adalah sangat mudah untuk berfikir tentang, tetapi bagaimana pula kesamaan antara senarai? 299 00:16:34,720 --> 00:16:37,610 Bagaimana pula dengan kesaksamaan di antara pokok struktur data kaki? 300 00:16:37,610 --> 00:16:43,130 Dan ini semua mungkin dalam Haskell kerana kelas jenis. 301 00:16:43,130 --> 00:16:48,000 >> Jadi, jika anda menentukan type-- data tertentu dan di sini, ini adalah padang muzik. 302 00:16:48,000 --> 00:16:50,960 Kami akhirnya mendapat beberapa muzik komputer. 303 00:16:50,960 --> 00:16:57,420 Jadi kita mempunyai C, C tajam, dan sebagainya dan sebagainya. 304 00:16:57,420 --> 00:17:01,080 Mereka tergolong dalam sekumpulan jenis kelas yang berlainan. 305 00:17:01,080 --> 00:17:03,510 EQ-- mereka tergolong dalam golongan jenis EQ. 306 00:17:03,510 --> 00:17:06,780 Ini bermakna mereka menyokong operasi kesaksamaan. 307 00:17:06,780 --> 00:17:12,650 Jadi, anda boleh menilai sama ada seseorang urutan primitif muzik 308 00:17:12,650 --> 00:17:15,400 adalah sama seperti yang lain. 309 00:17:15,400 --> 00:17:17,280 >> Mereka tergolong dalam kelas ordinal. 310 00:17:17,280 --> 00:17:19,479 Ini bermakna ada pesanan kepada ini. 311 00:17:19,479 --> 00:17:27,670 D datang selepas C. C tajam datang selepas C juga. 312 00:17:27,670 --> 00:17:29,840 Mereka tergolong dalam kelas menunjukkan, yang bermakna mereka boleh 313 00:17:29,840 --> 00:17:33,000 dicetak untuk konsol atau terminal. 314 00:17:33,000 --> 00:17:36,090 Mereka tergolong dalam kelas yang disebut satu persatu, yang 315 00:17:36,090 --> 00:17:39,770 bermakna walaupun ini adalah watak-watak, 316 00:17:39,770 --> 00:17:45,340 mereka mempunyai angka yang mendasari perwakilan bermula pada 0 317 00:17:45,340 --> 00:17:48,960 dan terkeluar melalui bagaimanapun banyak perkara di sini, 20 atau lebih, 318 00:17:48,960 --> 00:17:51,770 atau 30 atau 40, mungkin. 319 00:17:51,770 --> 00:17:54,259 >> CONNOR HARRIS: Dan apabila kita mempunyai jenis data 320 00:17:54,259 --> 00:17:57,050 yang derives-- dengan kata kunci tersebut "deriving--" kelas jenis tertentu, 321 00:17:57,050 --> 00:18:01,160 ia bermakna bahawa pengkompil akan cuba untuk membina sesuatu yang automatik. 322 00:18:01,160 --> 00:18:05,120 Jadi mungkin anda akan mahu untuk menentukan kualiti yang berbeza. 323 00:18:05,120 --> 00:18:09,450 Anda akan mahu untuk menentukan C tajam sebagai sama dengan D rata, sebagai contoh. 324 00:18:09,450 --> 00:18:11,560 Dengan pembinaan ini di sini, saya tidak fikir C tajam 325 00:18:11,560 --> 00:18:14,940 dan D rata akan sama, kerana pengkompil akan secara automatik 326 00:18:14,940 --> 00:18:19,670 katakan setiap nilai yang berbeza mungkin adalah berbeza dari setiap yang lain. 327 00:18:19,670 --> 00:18:22,930 >> Oleh itu, ia adalah mungkin untuk mengatasi pelaksanaan yang lalai 328 00:18:22,930 --> 00:18:25,730 satu jenis kelas. 329 00:18:25,730 --> 00:18:28,640 Sekali lagi, melihat rujukan jika anda mahu belajar tentang itu. 330 00:18:28,640 --> 00:18:31,767 331 00:18:31,767 --> 00:18:33,600 STEPHEN KREWSON: Dan di sini, sebenarnya, akan mempunyai ini 332 00:18:33,600 --> 00:18:36,930 membantu apabila kita memberi kod kemudian. 333 00:18:36,930 --> 00:18:42,150 Kami melihat beberapa pengusaha memasang di antara untuk komposisi berurutan, 334 00:18:42,150 --> 00:18:46,570 komposisi yang sama, dan sebagainya sebagainya, ini plus dan tanda-tanda yang sama 335 00:18:46,570 --> 00:18:48,620 dikelilingi oleh titik bertindih. 336 00:18:48,620 --> 00:18:53,330 Ini bermakna kita boleh bermain ini berbeza primitif muzik satu demi satu. 337 00:18:53,330 --> 00:18:54,590 Itulah komposisi berjujukan. 338 00:18:54,590 --> 00:18:57,170 >> Atau kita boleh memainkan mereka dalam selari pada masa yang sama. 339 00:18:57,170 --> 00:19:05,100 Jadi saya boleh mempunyai nilai muzik, dan kemudian ini sama dan titik bertindih, 340 00:19:05,100 --> 00:19:09,669 memasang di antara pengendali komposisi yang sama, dan bermain mereka sebagai sejenis kord. 341 00:19:09,669 --> 00:19:11,460 Dan kita akan menggunakan apabila ini kita menggabungkan 342 00:19:11,460 --> 00:19:15,080 bahagian drum kami dengan kami sedikit lagu Frere Jacques 343 00:19:15,080 --> 00:19:19,460 untuk bermain kedua-dua urutan nilai-nilai muzik pada masa yang sama. 344 00:19:19,460 --> 00:19:24,520 345 00:19:24,520 --> 00:19:29,250 >> Currying Curry is-- kali terakhir menamakan daripada Haskell Curry, yang 346 00:19:29,250 --> 00:19:31,850 imej Haskell itu dinamakan selepas. 347 00:19:31,850 --> 00:19:34,330 Dan ini membolehkan kita keanggunan baik apabila kami 348 00:19:34,330 --> 00:19:36,880 menulis semua ini berbeza fungsi atau penapis yang kami 349 00:19:36,880 --> 00:19:39,330 akan menjadi pemetaan ke atas senarai kami. 350 00:19:39,330 --> 00:19:42,810 Fungsi dua arguments-- f x dan y-- 351 00:19:42,810 --> 00:19:46,630 boleh diwakili sebagai f x digunakan untuk y. 352 00:19:46,630 --> 00:19:49,800 Jadi ia adalah satu fungsi satu hujah yang mengembalikan 353 00:19:49,800 --> 00:19:51,240 satu lagi fungsi satu hujah. 354 00:19:51,240 --> 00:19:56,962 Jadi ini bermakna kita boleh memetakan fungsi f x lebih senarai y. 355 00:19:56,962 --> 00:19:58,920 CONNOR HARRIS: Mahu memberi satu contoh ini? 356 00:19:58,920 --> 00:19:59,836 STEPHEN KREWSON: Ya. 357 00:19:59,836 --> 00:20:05,390 Saya mempunyai contoh di sini dari beberapa perkara yang kami akan menulis. 358 00:20:05,390 --> 00:20:10,500 Jadi meniru 2-- baik, meniru akan mengambil 359 00:20:10,500 --> 00:20:13,040 satu nilai, iaitu bagaimana banyak kali untuk meniru sesuatu, 360 00:20:13,040 --> 00:20:16,690 dan kemudian ia akan mengambil masa yang value-- biasanya senarai atau sesuatu. 361 00:20:16,690 --> 00:20:23,450 Jadi di sini, kami pemetaan meniru 2 atas senarai lain. 362 00:20:23,450 --> 00:20:27,440 >> Jadi, jika kita memetakan meniru 2, jika kita meniru 2 terpakai 363 00:20:27,440 --> 00:20:31,890 kepada elemen pertama list-- ini dan ini adalah senarai phrases-- muzik 364 00:20:31,890 --> 00:20:37,650 akan menghasilkan dua daripada "anda sleeping--" supaya kamu tidur, kamu tidur. 365 00:20:37,650 --> 00:20:40,040 Jadi sekarang kita mempunyai dua. 366 00:20:40,040 --> 00:20:42,570 Tetapi meniru mengambil masa dua hujah, tetapi kerana kami 367 00:20:42,570 --> 00:20:47,100 currying dan kemudian pemetaan, kita boleh mewakili meniru 2 368 00:20:47,100 --> 00:20:52,310 sebagai telah kembali sebagai fungsi satu argument-- hanya mereplikasi dua kali. 369 00:20:52,310 --> 00:20:57,010 Dan kemudian kita memohon bahawa untuk setiap elemen ini senarai frasa. 370 00:20:57,010 --> 00:21:01,900 >> Dan concat adalah Haskell operasi untuk merobohkan senarai. 371 00:21:01,900 --> 00:21:04,400 Kerana meniru 2 kehendak menghasilkan satu senarai senarai. 372 00:21:04,400 --> 00:21:06,660 Dan ini adalah bentuk perantaraan ini di sini. 373 00:21:06,660 --> 00:21:10,365 Dan sebagainya maka kita boleh concat atau meleperkan bahawa daripada dua kali. 374 00:21:10,365 --> 00:21:12,240 CONNOR HARRIS: A lebih mudah contoh currying, 375 00:21:12,240 --> 00:21:15,323 jika anda mahu like-- bayangkan f hanya fungsi pendaraban yang mengambil masa dua 376 00:21:15,323 --> 00:21:16,840 hujah-hujah dan pulangan produk mereka. 377 00:21:16,840 --> 00:21:19,320 Jadi jika anda mempunyai f 4 5, ia adalah 20. 378 00:21:19,320 --> 00:21:22,670 Tetapi anda boleh berfikir ini sebagai also-- anda mempunyai fungsi f 4 379 00:21:22,670 --> 00:21:25,560 yang mengambil hujah dan pulangan empat kali ini argument-- hanya 380 00:21:25,560 --> 00:21:27,870 permohonan separa yang hanya satu hujah 4. 381 00:21:27,870 --> 00:21:31,182 Dan jika anda makan f daripada 4 5, yang akan memberi anda 20. 382 00:21:31,182 --> 00:21:32,890 Dan itulah yang lebih mudah contoh currying. 383 00:21:32,890 --> 00:21:34,473 Ia biasanya salah satu yang buku teks. 384 00:21:34,473 --> 00:21:38,860 385 00:21:38,860 --> 00:21:42,110 >> STEPHEN KREWSON: Lambda ungkapan atau fungsi tanpa nama 386 00:21:42,110 --> 00:21:47,330 adalah satu lagi ciri Haskell. 387 00:21:47,330 --> 00:21:51,242 Jadi, jika kita perlu menyiapkan satu sedikit fungsi meniru kehidupan, 388 00:21:51,242 --> 00:21:52,950 tetapi mengatakan ia bukan dalam perpustakaan standard, 389 00:21:52,950 --> 00:21:56,150 kita boleh menggunakan sintaks yang serupa dengan yang berikut. 390 00:21:56,150 --> 00:21:58,730 Dan kita akan angin lebih ini. 391 00:21:58,730 --> 00:22:02,160 Satu perkara yang anda akan lihat banyak daripada di mesin dram adalah kita membuat panggilan 392 00:22:02,160 --> 00:22:05,790 untuk sesuatu yang dinamakan menapis, yang seperti sebelum ini, 393 00:22:05,790 --> 00:22:08,185 adalah pemetaan bagi suatu fungsi atas senarai, tetapi ia 394 00:22:08,185 --> 00:22:10,260 pemetaan fungsi Boolean. 395 00:22:10,260 --> 00:22:13,390 >> Oleh itu, kita ada di contoh sesuatu yang tanpa nama 396 00:22:13,390 --> 00:22:19,150 fungsi Boolean yang ditakrifkan hanya mengambil masa beberapa nilai-nilai. 397 00:22:19,150 --> 00:22:22,990 Ini bukan tegasnya fungsi tanpa nama. 398 00:22:22,990 --> 00:22:25,850 Tetapi ia menentukan dengan bahawa sintaks untuk keringkasan, 399 00:22:25,850 --> 00:22:28,007 dan ini hanya mengambil masa x modul n-- 400 00:22:28,007 --> 00:22:28,840 CONNOR HARRIS: Ya. 401 00:22:28,840 --> 00:22:31,330 Jadi f adalah fungsi dua hujah n dan p 402 00:22:31,330 --> 00:22:35,440 yang mengembalikan fungsi yang ia sendiri fungsi satu hujah, iaitu x. 403 00:22:35,440 --> 00:22:38,815 404 00:22:38,815 --> 00:22:40,690 STEPHEN KREWSON: Saya pengendali infiks disebut itu. 405 00:22:40,690 --> 00:22:42,642 Apakah pengendali infiks? 406 00:22:42,642 --> 00:22:45,710 Nah, pengendali infiks adalah Cara biasa kami mewakili operasi, 407 00:22:45,710 --> 00:22:49,910 berkata, dalam mathematics-- 2 tambah 2 daripada pengendali ditambah 408 00:22:49,910 --> 00:22:51,202 dan kemudian dua hujah 2 dan 2. 409 00:22:51,202 --> 00:22:53,701 CONNOR HARRIS: Ia dipanggil berbalik notasi Poland, yang merupakan 410 00:22:53,701 --> 00:22:55,330 tempoh saya ragu-ragu mana-mana anda akan tahu. 411 00:22:55,330 --> 00:22:56,288 >> STEPHEN KREWSON: Betul. 412 00:22:56,288 --> 00:22:58,290 Songsang notasi menggilap atau awalan. 413 00:22:58,290 --> 00:23:01,412 Tetapi Haskell memutuskan untuk menggunakan operator infiks. 414 00:23:01,412 --> 00:23:03,120 Jadi ini adalah sebahagian daripada orang-orang adat yang 415 00:23:03,120 --> 00:23:07,770 ditakrifkan bagi Euterpea DSCL di Haskell. 416 00:23:07,770 --> 00:23:10,730 Jadi ini adalah komposisi berjujukan. 417 00:23:10,730 --> 00:23:16,340 Ini adalah komposisi yang sama, dan ini telah memendekkan komposisi selari. 418 00:23:16,340 --> 00:23:18,710 Dan kita perlu yang dengan mesin drum kami, 419 00:23:18,710 --> 00:23:22,640 kerana kita akan menggunakan yang terakhir operator yang tuple kecil di sana 420 00:23:22,640 --> 00:23:26,330 untuk bermain mesin dram bersama-sama dengan lagu Frere Jacques kami. 421 00:23:26,330 --> 00:23:28,650 Dan mesin drum kami adalah akan menjadi tak terhingga. 422 00:23:28,650 --> 00:23:30,920 Ia hanya bermain selama-lamanya. 423 00:23:30,920 --> 00:23:32,692 Tetapi lagu Frere Jacques tidak. 424 00:23:32,692 --> 00:23:33,510 Ia bukan yang panjang. 425 00:23:33,510 --> 00:23:36,610 Ia hanya beberapa bar. 426 00:23:36,610 --> 00:23:43,030 Oleh itu, kita perlu menghentikan mesin dram sebagai tidak lama lagi sebagai nilai muzik yang lebih pendek datang 427 00:23:43,030 --> 00:23:43,700 berakhir. 428 00:23:43,700 --> 00:23:46,980 Dan bahawa pengendali infixed adalah super membantu dengan itu. 429 00:23:46,980 --> 00:23:50,090 >> Dan notasi infiks seperti ini adalah jenis yang bagus, 430 00:23:50,090 --> 00:23:57,095 kerana mengatakan anda mempunyai fungsi seperti quote, yang memberikan bahagian integer 431 00:23:57,095 --> 00:24:01,010 x oleh sesuatu else-- maaf, yang perlu a dan b. 432 00:24:01,010 --> 00:24:04,740 Anda boleh menulis sebagai quote b. 433 00:24:04,740 --> 00:24:09,670 Jadi, jika anda adalah elemen put-- satu lagi contoh ini. 434 00:24:09,670 --> 00:24:14,730 x elemen dalam senarai beberapa, jika anda meletakkan dalam Backticks, anda boleh menggunakannya. 435 00:24:14,730 --> 00:24:20,400 Walaupun ia bukan simbol seperti tambah atau tolak atau masa, 436 00:24:20,400 --> 00:24:24,630 anda boleh menggunakan nama fungsi seperti itu dalam Backticks 437 00:24:24,630 --> 00:24:27,045 sebagai pengendali infiks, yang cukup sejuk. 438 00:24:27,045 --> 00:24:29,670 CONNOR HARRIS: Sekali lagi, ini adalah semua gula hanya sintaktik, benar-benar. 439 00:24:29,670 --> 00:24:32,310 Ia tidak menjejaskan teras bahasa. 440 00:24:32,310 --> 00:24:37,440 >> STEPHEN KREWSON: Oleh itu, kita lihat di sini untuk frasa terakhir lagu Frere Jacques kami, 441 00:24:37,440 --> 00:24:45,740 Saya bermain beberapa chords sedikit atau pertiga menggunakan komposisi selari 442 00:24:45,740 --> 00:24:46,240 operator. 443 00:24:46,240 --> 00:24:50,680 444 00:24:50,680 --> 00:24:54,950 Ini adalah cara lain untuk mengatakan beberapa daripada apa yang kita baru sahaja berkata. 445 00:24:54,950 --> 00:24:59,986 Jadi, anda boleh memetakan fungsi satu hujah ke atas senarai. 446 00:24:59,986 --> 00:25:02,860 CONNOR HARRIS: Sekali lagi, rujukan buku teks pengenalan Haskell-- 447 00:25:02,860 --> 00:25:04,680 akan mempunyai semua ini di dalamnya. 448 00:25:04,680 --> 00:25:07,790 >> STEPHEN KREWSON: Jadi di sini adalah yang cukup garis utama sequencer langkah 449 00:25:07,790 --> 00:25:12,820 kami akan mengambil lihat menggunakan kefahaman senarai. 450 00:25:12,820 --> 00:25:17,810 Dan kita lihat di sini adalah elemen yang dalam pengendali tetap dalam petikan belakang. 451 00:25:17,810 --> 00:25:23,030 Jadi, jika x ialah unsur senarai x, maka kita akan memanggil fungsi perc. 452 00:25:23,030 --> 00:25:25,100 Jadi perc hanya fungsi perkusi. 453 00:25:25,100 --> 00:25:30,200 Ia mengambil sedikit p nilai yang sebahagian daripada set terbatas sekali 454 00:25:30,200 --> 00:25:35,310 bunyi perkusi yang berbeza yang kita lihat dalam slaid sebelumnya, 455 00:25:35,310 --> 00:25:38,840 dan kemudian ia memberikan yang tempoh not suku. 456 00:25:38,840 --> 00:25:43,190 Jika tidak, ia memberikan QNR dan QNR hanya rehat komen suku. 457 00:25:43,190 --> 00:25:44,970 >> Jadi ini adalah membina sesuatu yang baik. 458 00:25:44,970 --> 00:25:52,110 Kami mempunyai senarai elemen, dan kami akan gelung ke atas beberapa senarai dari satu 459 00:25:52,110 --> 00:25:54,540 kepada nilai maksimum langkah sequencer kami. 460 00:25:54,540 --> 00:25:58,290 Dan apabila kita berada di i tertentu dalam bahawa senarai satu hingga nilai max, 461 00:25:58,290 --> 00:26:02,970 jika itu i adalah ahli ini set dicipta dalam fungsi ini, 462 00:26:02,970 --> 00:26:06,040 dengan baik, maka kita mengubahnya ke dalam nota perkusi. 463 00:26:06,040 --> 00:26:10,960 Jika tidak, kita hanya bermain rehat, yang Dengan kata lain, kita hanya berdiam diri. 464 00:26:10,960 --> 00:26:16,050 Dan kita boleh lihat di sini bahawa dalam senarai ini kefahaman sintaksis, 465 00:26:16,050 --> 00:26:20,030 x dihuni oleh ini senarai dibina satu 466 00:26:20,030 --> 00:26:22,462 dengan saiz global sequencer. 467 00:26:22,462 --> 00:26:23,295 CONNOR HARRIS: Ya. 468 00:26:23,295 --> 00:26:26,340 Sintaks asas untuk comprehensions senarai adalah 469 00:26:26,340 --> 00:26:30,810 kurungan, nilai yang melibatkan beberapa pembolehubah, bar, 470 00:26:30,810 --> 00:26:34,260 nilai yang mungkin bagi pembolehubah diri mereka sendiri, ditutup kurungan. 471 00:26:34,260 --> 00:26:38,545 Dan jika anda telah melakukan set notasi pembina dalam apa-apa jenis kelas matematik, 472 00:26:38,545 --> 00:26:45,999 anda mungkin telah menetapkan 2n seperti yang n di dalam atau di n di z. 473 00:26:45,999 --> 00:26:48,290 Sama thing-- tatatanda ini yang dimaksudkan untuk menjadi tidak senonoh 474 00:26:48,290 --> 00:26:49,630 itu notasi matematik. 475 00:26:49,630 --> 00:26:51,880 STEPHEN KREWSON: Dan anda boleh memohon pelbagai predikat 476 00:26:51,880 --> 00:26:56,250 dan pelbagai penapis dalam senarai kefahaman, yang agak bagus. 477 00:26:56,250 --> 00:27:01,800 Algebra kita types-- tidak akan berlama-lama di sini. 478 00:27:01,800 --> 00:27:04,840 Tidak ada satu tanggapan yang baik dalam Haskell atau baik, idea yang jelas 479 00:27:04,840 --> 00:27:10,720 bagaimana untuk mengambil, berkata, lalai parameter kepada fungsi atau sesuatu. 480 00:27:10,720 --> 00:27:13,370 Dalam Python, ini adalah agak mudah. 481 00:27:13,370 --> 00:27:18,460 Anda hanya boleh mengatakan dengan sama pada pengisytiharan majlis itu, 482 00:27:18,460 --> 00:27:21,420 nilai lalai dalam kes tidak dibekalkan. 483 00:27:21,420 --> 00:27:27,010 >> Dalam Haskell, anda boleh mungkin menggunakan maybe maybe menaip, 484 00:27:27,010 --> 00:27:32,190 yang mengambil sama ada apa-apa atau nilai jenis hanya. 485 00:27:32,190 --> 00:27:38,630 Oleh itu, kita mengeksploitasi ini dalam mesin dram untuk membolehkan kita untuk memberikan pengeluaran pilihan 486 00:27:38,630 --> 00:27:40,730 parameter untuk setiap bahagian drum. 487 00:27:40,730 --> 00:27:46,160 488 00:27:46,160 --> 00:27:54,680 Jadi yang memberikan kita satu cara untuk mempunyai EQ atau dagangan di saluran tertentu. 489 00:27:54,680 --> 00:27:56,440 >> CONNOR HARRIS: Dalam contoh Haskell lain, 490 00:27:56,440 --> 00:28:00,450 anda mungkin lihat mungkin digunakan untuk fungsi yang mungkin gagal. 491 00:28:00,450 --> 00:28:03,470 Ini adalah salah satu yang sama. 492 00:28:03,470 --> 00:28:07,010 >> STEPHEN KREWSON: Dan anda boleh membekalkan beberapa jenis mesej ralat sebagai lalai. 493 00:28:07,010 --> 00:28:11,020 Dan itu amat berguna apabila yang anda lakukan I / O dalam Haskell. 494 00:28:11,020 --> 00:28:12,044 Yang boleh menjadi helah. 495 00:28:12,044 --> 00:28:13,960 CONNOR HARRIS: Atau yang contoh yang serupa, berfikir 496 00:28:13,960 --> 00:28:17,460 sesuatu fungsi yang melibatkan pembahagian daripada parameter yang mungkin 0. 497 00:28:17,460 --> 00:28:20,020 Dan fungsi yang boleh kembali mungkin apa sahaja. 498 00:28:20,020 --> 00:28:22,802 Jadi, jika tidak ada pembahagian dengan 0, ia akan kembali hanya apa sahaja. 499 00:28:22,802 --> 00:28:25,010 Jika ada pembahagian dengan 0, ia akan kembali apa-apa 500 00:28:25,010 --> 00:28:26,910 sebagai cara untuk isyarat ralat. 501 00:28:26,910 --> 00:28:30,330 Kerana salah satu akibat daripada Menaip sangat ketat Haskell 502 00:28:30,330 --> 00:28:34,100 adalah bahawa tidak ada real-- Pengecualian adalah janggal, pada dasarnya, 503 00:28:34,100 --> 00:28:36,160 pengendalian ralat adalah janggal. 504 00:28:36,160 --> 00:28:39,440 Dan ini adalah satu yang sangat cara biasa melakukannya. 505 00:28:39,440 --> 00:28:42,990 >> STEPHEN KREWSON: Jadi sekarang kita mendapatkan kepada perkara minda-lentur lain 506 00:28:42,990 --> 00:28:49,160 tentang Haskell, yang merupakan corak yang hampir sama dan fungsi definisi. 507 00:28:49,160 --> 00:28:53,390 Aku membawa kepadamu dalam slaid terakhir pengisytiharan urutan langkah 508 00:28:53,390 --> 00:28:58,170 fungsi, yang mengambil nilai mungkin, kemudian int, maka senarai ints, 509 00:28:58,170 --> 00:29:03,850 kemudian kembali urutan nilai-nilai muzik di sana beranotasi 510 00:29:03,850 --> 00:29:05,375 dengan kedua-dua padang dan kelantangan. 511 00:29:05,375 --> 00:29:08,030 512 00:29:08,030 --> 00:29:11,820 >> Jadi mereka tiga hujah boleh menjadi corak dipadankan dengan cara yang berikut. 513 00:29:11,820 --> 00:29:16,660 Dan kita sentiasa mahu pastikan melakukan kes asas atau kes keluar pertama. 514 00:29:16,660 --> 00:29:19,690 Inilah garis bawah hanya boleh ditafsirkan 515 00:29:19,690 --> 00:29:22,340 bermaksud apa-apa nilai yang ada di sana. 516 00:29:22,340 --> 00:29:26,580 Jadi, jika kita mendapat panggilan untuk melangkah urutan dengan beberapa nilai, beberapa nilai lain, 517 00:29:26,580 --> 00:29:32,210 dan senarai tersebut kosong, apa yang kita mahu untuk kembali hanya berdiam diri, rehat 0. 518 00:29:32,210 --> 00:29:35,110 >> Dan bukannya yang sebagai senarai main kosong atau 0, 519 00:29:35,110 --> 00:29:38,150 ia rehat 0, kerana kami berurusan dengan jenis muzik, 520 00:29:38,150 --> 00:29:43,230 dan senarai kosong muzik Jenis hanya sepanjang tiada tempoh. 521 00:29:43,230 --> 00:29:45,680 Bukan muzik. 522 00:29:45,680 --> 00:29:51,460 Dan kemudian kita lihat jika kita mendapatkan langkah yang urutan dengan v bagi hujah jumlah, 523 00:29:51,460 --> 00:29:57,290 p untuk instrumen langkah berjaga-jaga hujah, dan kemudian senarai x. 524 00:29:57,290 --> 00:29:58,360 >> Kemudian kami melakukan beberapa perkara. 525 00:29:58,360 --> 00:30:01,290 Khususnya, kami memohon ini kefahaman senarai, 526 00:30:01,290 --> 00:30:05,700 dan kami melaksanakan beberapa operasi pada mungkin nilai 527 00:30:05,700 --> 00:30:10,050 untuk mengubahnya menjadi nilai angka supaya ia boleh kemudian disebut satu persatu dan digunakan 528 00:30:10,050 --> 00:30:12,300 untuk memilih cara itu. 529 00:30:12,300 --> 00:30:16,730 Sekali lagi, ini adalah sedikit sedikit sengaja inconcise 530 00:30:16,730 --> 00:30:20,580 hanya untuk menunjukkan semua perkara yang pelik yang boleh anda lakukan dalam Haskell anda 531 00:30:20,580 --> 00:30:23,170 kita lihat pada masa anda sendiri. 532 00:30:23,170 --> 00:30:23,802 >> Baiklah. 533 00:30:23,802 --> 00:30:26,010 Jadi, kita akhirnya sampai ke melakukan apa yang kita ingin lakukan, 534 00:30:26,010 --> 00:30:28,820 yang membuat beberapa muzik komputer. 535 00:30:28,820 --> 00:30:32,250 Jadi, kita akan cuba untuk membuat lagu Frere Jacques. 536 00:30:32,250 --> 00:30:35,220 Jadi ada berapa ramai frasa dalam Frere Jacques? 537 00:30:35,220 --> 00:30:38,790 538 00:30:38,790 --> 00:30:39,680 Empat. 539 00:30:39,680 --> 00:30:40,460 Yang besar. 540 00:30:40,460 --> 00:30:42,490 Dan apa yang baik adalah bahawa mereka semua berulang 541 00:30:42,490 --> 00:30:46,990 jumlah yang sama kali, yang dua. 542 00:30:46,990 --> 00:30:50,730 >> Oleh itu, kita mempunyai empat frasa setiap diulangi dua kali. 543 00:30:50,730 --> 00:30:53,590 Dan khususnya, mereka berada dalam satu pusingan. 544 00:30:53,590 --> 00:30:55,340 Dan terdapat banyak, banyak cara untuk melaksanakan 545 00:30:55,340 --> 00:30:57,520 pusingan yang boleh menjadi seronok untuk dilakukan. 546 00:30:57,520 --> 00:31:00,260 Saya telah melakukannya dalam cantik cara mudah di sini, 547 00:31:00,260 --> 00:31:05,760 yang hanya untuk construct-- barisan fungsi mengambil senarai nilai muzik 548 00:31:05,760 --> 00:31:10,390 dan bertukar ke dalam komposisi berurutan dengan menggunakan bahawa komposisi berurutan 549 00:31:10,390 --> 00:31:13,000 operator. 550 00:31:13,000 --> 00:31:19,540 >> Dan kemudian saya melambatkan bahagian yang berlainan dengan membuat mereka bermula dengan berehat. 551 00:31:19,540 --> 00:31:22,770 Jadi saya mulakan dengan rehat dua langkah, dan kemudian sepanjang empat langkah, 552 00:31:22,770 --> 00:31:26,160 dan kemudian rehat enam langkah-langkah, dan kemudian pusingan 553 00:31:26,160 --> 00:31:32,290 berfungsi, seperti yang kita semua tahu lagu ini. 554 00:31:32,290 --> 00:31:37,180 Kita melihat dua penjelasan atau pengubahsuaian nilai muzik 555 00:31:37,180 --> 00:31:43,150 yang terkandung dalam urutan ini susunan unsur-unsur muzik. 556 00:31:43,150 --> 00:31:44,810 Kami mempunyai jumlah add. 557 00:31:44,810 --> 00:31:48,960 Ini adalah satu fungsi untuk menganotasi muzik dengan jumlah tertentu. 558 00:31:48,960 --> 00:31:51,320 Ini adalah contoh yang baik daripada MIDI isyarat berjalan 559 00:31:51,320 --> 00:31:57,510 0-127, tujuh bit maklumat yang boleh dibawa. 560 00:31:57,510 --> 00:32:00,650 >> Dan then-- kita lihat sangat secara ringkas, tetapi MIDI umum 561 00:32:00,650 --> 00:32:02,310 senarai semua instrumen yang berbeza. 562 00:32:02,310 --> 00:32:04,450 Dan tidak ada yang banyak daripada mereka. 563 00:32:04,450 --> 00:32:11,230 Jika anda menggunakan stesen kerja audio digital, seperti Ableton Live atau Tools Pro, 564 00:32:11,230 --> 00:32:17,560 terdapat pelbagai yang amat luas pensintesis dan instrumen VST. 565 00:32:17,560 --> 00:32:21,510 Tetapi standard MIDI sahaja mempunyai beberapa dozen, atau beberapa. 566 00:32:21,510 --> 00:32:22,799 Dan sebahagian daripada mereka adalah lucu. 567 00:32:22,799 --> 00:32:25,840 Saya fikir ia akan menjadi seronok jika kami bermain instrumen instrumen MIDI 568 00:32:25,840 --> 00:32:30,550 helikopter, dan kemudian Cara seterusnya melalui pusingan, 569 00:32:30,550 --> 00:32:37,980 kami melakukan Synth pad, dan kemudian daripada ini membawa cetek Synth gelombang persegi, 570 00:32:37,980 --> 00:32:44,240 dan kemudian selut suara, yang merupakan sedikit kurang jelas pada MIDI buruk saya 571 00:32:44,240 --> 00:32:46,410 pensintesis, tetapi mereka OK. 572 00:32:46,410 --> 00:32:50,030 >> Dan kemudian kita melihat let ini dan dalam sintaks dari Haskell, 573 00:32:50,030 --> 00:32:54,030 dan kemudian kita bermain semua anggota-anggota ini 574 00:32:54,030 --> 00:32:56,265 dengan operator komposisi selari. 575 00:32:56,265 --> 00:33:00,260 576 00:33:00,260 --> 00:33:02,296 Dan kita mungkin boleh menunjukkan beberapa ini. 577 00:33:02,296 --> 00:33:07,674 578 00:33:07,674 --> 00:33:08,340 Berikut adalah kod. 579 00:33:08,340 --> 00:33:14,960 Dan anda boleh lihat dalam C, ada akan menjadi banyak penjelasan tekak dan tetapan 580 00:33:14,960 --> 00:33:19,760 kod meja itu di hadapan anda boleh membuat muzik seperti ini. 581 00:33:19,760 --> 00:33:22,080 Atau mana-mana program lain bahasa, anda akan mungkin 582 00:33:22,080 --> 00:33:27,210 perlu berinteraksi dengan beberapa jenis perpustakaan atau API dan menetapkan segala-galanya, 583 00:33:27,210 --> 00:33:28,725 dan kemudian anda akan mempunyai untuk membersihkan. 584 00:33:28,725 --> 00:33:33,810 Tetapi di sini di Haskell, saya rasa, sekali anda biasa itu, sangat 585 00:33:33,810 --> 00:33:35,770 boleh dibaca dan sangat ekspresif. 586 00:33:35,770 --> 00:33:38,930 587 00:33:38,930 --> 00:33:43,240 Jadi ada pelaksanaan daripada Frere Jacques. 588 00:33:43,240 --> 00:33:43,740 Baiklah. 589 00:33:43,740 --> 00:33:47,557 Sekarang kita ingin menambah perkusi, dan ini adalah Messier sedikit. 590 00:33:47,557 --> 00:33:49,015 Oleh itu, mari kita lihat pada slaid. 591 00:33:49,015 --> 00:33:56,880 592 00:33:56,880 --> 00:34:00,540 Jadi idea yang besar adalah untuk membuat sekumpulan senarai atau bahagian. 593 00:34:00,540 --> 00:34:04,140 Pada mereka mesin roll-in, terdapat lazimnya kira-kira mungkin lapan 594 00:34:04,140 --> 00:34:08,670 10 irama atau perkusi bahagian. 595 00:34:08,670 --> 00:34:10,159 Dan kemudian menggunakan sekumpulan teknik. 596 00:34:10,159 --> 00:34:14,889 Dan kita telah bercakap tentang these-- menggunakan lipatan, penapis, fungsi lambda, 597 00:34:14,889 --> 00:34:19,429 dipetakan ke atas senarai untuk menjana nilai-nilai dalam julat beberapa 1 hingga r, r ialah 16, 598 00:34:19,429 --> 00:34:20,699 atau 32 langkah-langkah dalam sequencer. 599 00:34:20,699 --> 00:34:23,810 600 00:34:23,810 --> 00:34:29,920 >> Dan kemudian jika ada nilai dalam senarai itu seperti yang kita berjalan melalui sequencer, 601 00:34:29,920 --> 00:34:34,190 mengalir melaluinya berulang- lebih, ternyata pada masa yang sama, 602 00:34:34,190 --> 00:34:36,060 dan sampel yang mendapat dicetuskan. 603 00:34:36,060 --> 00:34:42,810 604 00:34:42,810 --> 00:34:47,110 Berikut adalah semua cara yang pelik yang berbeza Saya datang dengan menjana nota. 605 00:34:47,110 --> 00:34:48,940 Cubalah atas jumlah semi anda sendiri. 606 00:34:48,940 --> 00:34:50,360 Ia akan berbunyi sejuk. 607 00:34:50,360 --> 00:34:53,066 608 00:34:53,066 --> 00:34:54,690 Masa mengizinkan, kami akan pergi melalui ini. 609 00:34:54,690 --> 00:34:59,200 Tetapi untuk sekarang, saya rasa kita patut demo apa yang kita ada. 610 00:34:59,200 --> 00:35:01,380 Mari kita berharap ini pergi OK. 611 00:35:01,380 --> 00:35:02,670 >> Jadi ini adalah GHCI. 612 00:35:02,670 --> 00:35:06,580 613 00:35:06,580 --> 00:35:09,121 Dan kita akan memuatkan fail Saya mempunyai dipanggil song.lhs, 614 00:35:09,121 --> 00:35:10,620 yang adalah fail yang saya hanya menunjukkan anda. 615 00:35:10,620 --> 00:35:11,470 OK, yang besar. 616 00:35:11,470 --> 00:35:15,010 Sebagai Connor katakan sebelum ini, disusun, ia menaip diperiksa, 617 00:35:15,010 --> 00:35:18,380 jadi saya boleh bernafas lebih mudah. 618 00:35:18,380 --> 00:35:20,010 Ia tidak akan meletupkan pada saya. 619 00:35:20,010 --> 00:35:22,720 >> Saya tidak mahu menunjukkan kepada anda sesuatu yang berguna. 620 00:35:22,720 --> 00:35:25,900 Anda boleh melihat bahawa modul dimuatkan dipanggil 50. 621 00:35:25,900 --> 00:35:28,240 Anda boleh menyemak imbas modul itu. 622 00:35:28,240 --> 00:35:32,092 Dan ini adalah begitu baik tentang doing-- mungkin apa 623 00:35:32,092 --> 00:35:34,550 yang anda lakukan dalam Haskell tidak dipanggil pembangunan perisian, 624 00:35:34,550 --> 00:35:36,980 tetapi anda boleh melakukan banyak perkara yang menyeronokkan pada anda sendiri. 625 00:35:36,980 --> 00:35:42,410 Dan aliran kerja yang benar-benar baik sebagai berbanding banyak bahasa yang lain, 626 00:35:42,410 --> 00:35:45,872 kerana anda boleh melihat dalam yang benar-benar cara yang boleh dibaca apa yang sedang berlaku. 627 00:35:45,872 --> 00:35:47,830 Oleh itu, kita melihat bahawa kita mempunyai semua frasa ini, yang 628 00:35:47,830 --> 00:35:53,760 merupakan senarai padang muzik, dan kemudian kita membina ini ke dalam sesuatu yang lebih besar, 629 00:35:53,760 --> 00:35:55,220 yang merupakan lagu muzik. 630 00:35:55,220 --> 00:35:58,450 Ia adalah satu unit muzik. 631 00:35:58,450 --> 00:36:05,545 Dan kemudian kita boleh bermain ini semua dengan fungsi dipanggil bermain muzik. 632 00:36:05,545 --> 00:36:09,040 Anda boleh melihat bahawa di sini. 633 00:36:09,040 --> 00:36:11,310 Yang hanya bermain. 634 00:36:11,310 --> 00:36:15,040 >> Saya perlu iaitu- saya tidak bercakap tentang tanda ini dolar yang mana-mana. 635 00:36:15,040 --> 00:36:17,980 Tanda dolar adalah satu lagi pengendali infiks. 636 00:36:17,980 --> 00:36:22,500 Tetapi ia mempunyai keutamaan yang paling rendah mana-mana pengendali, yang berkesan 637 00:36:22,500 --> 00:36:24,960 bermakna bahawa segala-galanya di sebelah kiri tanda dolar 638 00:36:24,960 --> 00:36:28,460 dan hak tanda dolar, kita akan untuk dinilai sebelum ia. 639 00:36:28,460 --> 00:36:31,430 Jadi ia adalah jenis seperti lain cara menambah kurungan. 640 00:36:31,430 --> 00:36:33,980 641 00:36:33,980 --> 00:36:36,220 >> CONNOR HARRIS: Ia pada dasarnya Komposisi Bidang Tugas. 642 00:36:36,220 --> 00:36:40,026 Dan ia memastikan bahawa anda tidak ada-- jika anda mempunyai fungsi sama ada di sebelah atau memasang di antara 643 00:36:40,026 --> 00:36:42,900 pengusaha-mana pihak, mereka tidak akan mengaitkan merentasinya dan memberi anda 644 00:36:42,900 --> 00:36:46,030 keputusan yang tidak dijangka. 645 00:36:46,030 --> 00:36:49,790 >> STEPHEN KREWSON: Oleh itu, kita can-- menggunakan itu, kita boleh memanggil. 646 00:36:49,790 --> 00:36:51,415 Pertama, kami akan bermain tanpa gendang. 647 00:36:51,415 --> 00:37:00,330 648 00:37:00,330 --> 00:37:03,170 Itulah helikopter, helikopter MIDI. 649 00:37:03,170 --> 00:37:05,495 >> [Bermain muzik] 650 00:37:05,495 --> 00:37:08,525 651 00:37:08,525 --> 00:37:09,525 Ada gelombang persegi. 652 00:37:09,525 --> 00:37:24,520 653 00:37:24,520 --> 00:37:25,490 Selut suara. 654 00:37:25,490 --> 00:37:27,630 Dan anda benar-benar boleh pergi liar dengan ini. 655 00:37:27,630 --> 00:37:30,872 Saya mengambil satu yang cukup mudah, kerana saya tahu saya tidak boleh menggigit 656 00:37:30,872 --> 00:37:31,830 lebih daripada saya boleh mengunyah. 657 00:37:31,830 --> 00:37:36,460 Hanya menyimpan ia agak mudah untuk menunjukkan idea-idea utama. 658 00:37:36,460 --> 00:37:39,952 Tetapi kemudian saya adalah seperti, kami telah perlu menambah beberapa gendang untuk ini. 659 00:37:39,952 --> 00:37:41,910 Hanya kerana ini adalah satu sedikit tidak dapat ditembusi, 660 00:37:41,910 --> 00:37:45,790 dan saya tidak menggunakan menamakan bahagian drum, 661 00:37:45,790 --> 00:37:49,490 Saya dipetakan mereka, kelak kerana mereka sebahagian daripada kelas yang disebut satu persatu, 662 00:37:49,490 --> 00:37:51,500 Saya dipetakan mereka untuk ints. 663 00:37:51,500 --> 00:37:53,120 Satu adalah seperti drum bass. 664 00:37:53,120 --> 00:37:54,370 Zero adalah juga. 665 00:37:54,370 --> 00:37:56,000 Tujuh adalah topi yang tinggi. 666 00:37:56,000 --> 00:38:00,920 Dan ke bawah di sini di mana Fungsi mendapatkan sedikit lebih rawak, 667 00:38:00,920 --> 00:38:02,100 ini adalah seperti gendang conga. 668 00:38:02,100 --> 00:38:08,360 >> Jadi, jika anda berfikir about-- mungkin satu Cara yang menyeronokkan untuk melaksanakan mesin dram 669 00:38:08,360 --> 00:38:12,830 adalah dengan menggunakan sangat teratur corak pada drum bass anda. 670 00:38:12,830 --> 00:38:17,640 Jadi misalnya, pada penapisan ke atas senarai dengan semua yang memberikan kembali 671 00:38:17,640 --> 00:38:20,590 1 apabila ia mengambil modul 04. 672 00:38:20,590 --> 00:38:27,190 Jadi saya dapat 1, 5, 9, 13, 17-- jadi ini adalah denyutan pertama setiap langkah. 673 00:38:27,190 --> 00:38:32,860 >> Dan maka ini adalah sama Perkara yang beralih dari dua langkah. 674 00:38:32,860 --> 00:38:33,850 Jadi itulah offbeat. 675 00:38:33,850 --> 00:38:37,480 Jadi ini akan menjadi sesuatu seperti topi yang tinggi. 676 00:38:37,480 --> 00:38:39,640 Dan sekali lagi, turun di sini, ia sedikit rawak, 677 00:38:39,640 --> 00:38:41,080 kerana kita lakukan drum conga. 678 00:38:41,080 --> 00:38:44,180 Dan saya mempunyai beberapa maracas turun di sini, juga. 679 00:38:44,180 --> 00:38:50,280 >> Jadi saya boleh memanggil bermain mesin drum, tetapi ia akan berterusan selama-lamanya, 680 00:38:50,280 --> 00:38:53,700 dan ia mungkin mula jarahan semua memori dalam sistem saya. 681 00:38:53,700 --> 00:38:57,090 Jadi saya akan memanggil fungsi ini bermain muzik, yang seperti yang kita akan lihat, 682 00:38:57,090 --> 00:39:02,020 menggunakan komposisi selari memendekkan untuk bermain sedikit lagu Frere Jacques kami 683 00:39:02,020 --> 00:39:04,200 bersama-sama dengan ini mesin dram pelik. 684 00:39:04,200 --> 00:39:06,190 Jadi mari kita lihat. 685 00:39:06,190 --> 00:39:10,920 Dan jangan memperbaiki saya susunan semua bahagian-bahagian drum. 686 00:39:10,920 --> 00:39:13,375 Tidak khusus saya, tetapi saya mempunyai banyak keseronokan melakukannya. 687 00:39:13,375 --> 00:39:17,678 688 00:39:17,678 --> 00:39:20,654 >> [Bermain muzik] 689 00:39:20,654 --> 00:39:52,260 690 00:39:52,260 --> 00:39:56,980 >> Jadi, sudah tentu, ini adalah semua sedikit tidak sebagai menyeronokkan 691 00:39:56,980 --> 00:40:01,100 jika kita tidak boleh menukar untuk skor yang jadi mungkin ia 692 00:40:01,100 --> 00:40:04,650 boleh ditafsirkan oleh pelaku manusia. 693 00:40:04,650 --> 00:40:06,535 Jadi saya tidak akan berjalan di sini. 694 00:40:06,535 --> 00:40:07,910 Saya telah dijana fail. 695 00:40:07,910 --> 00:40:10,280 Anda boleh melihat bahawa ada dot GNU LilyPond file-- dan ini 696 00:40:10,280 --> 00:40:14,500 akan Shalawat saya kepada Connor-- dan fail dot MIDI, 697 00:40:14,500 --> 00:40:18,610 dan fail dot PDF, yang adalah apa yang GNU LilyPond akhirnya akan menjana. 698 00:40:18,610 --> 00:40:23,770 >> Tetapi ini adalah mereka skrip, dan saya akan hanya menjalankan mereka dengan pilihan bantuan mereka. 699 00:40:23,770 --> 00:40:28,090 Jika anda mendapatkan ini dan berjalan dengan Euterpea, anda boleh menjana fail MIDI. 700 00:40:28,090 --> 00:40:31,160 Dan kemudian dari fail MIDI dengan program MIDI 2LY ini, 701 00:40:31,160 --> 00:40:34,930 anda boleh menjana Lily Fail Pond, dan kemudian anda 702 00:40:34,930 --> 00:40:37,974 boleh menjana fail PDF bagi skor. 703 00:40:37,974 --> 00:40:39,390 Dan kita perlu mengambil lihat di ini. 704 00:40:39,390 --> 00:40:52,599 705 00:40:52,599 --> 00:40:55,140 Jadi Connor mungkin akan menunjukkan anda bagaimana untuk menganotasi ini lebih baik, 706 00:40:55,140 --> 00:41:02,570 tetapi ini adalah Frere Jacques sebagai yang dihasilkan oleh saya di Euterpea. 707 00:41:02,570 --> 00:41:07,300 Ia hanya dalam C. Saya sepatutnya digambarkan apa hack ia sebenarnya masuk. 708 00:41:07,300 --> 00:41:11,090 Tetapi itu adalah perancangan untuk bagaimana anda melakukannya dengan itu. 709 00:41:11,090 --> 00:41:12,950 Mari kita bercakap lebih lanjut mengenai GNU LilyPond. 710 00:41:12,950 --> 00:41:15,780 >> CONNOR HARRIS: OK Mari kita lihat. 711 00:41:15,780 --> 00:41:19,480 712 00:41:19,480 --> 00:41:21,419 Adakah anda menyebut Belajar Anda Haskell? 713 00:41:21,419 --> 00:41:22,460 STEPHEN KREWSON: Oh yeah. 714 00:41:22,460 --> 00:41:23,480 Semak Belajar Anda Haskell. 715 00:41:23,480 --> 00:41:24,410 Ada dalam sumber. 716 00:41:24,410 --> 00:41:26,830 Itulah bagaimana saya mula pembelajaran, dan ia adalah besar. 717 00:41:26,830 --> 00:41:27,580 Pembelajaran tidak dalam keadaan sihat. 718 00:41:27,580 --> 00:41:28,829 >> CONNOR HARRIS: Jadi ia dalam talian. 719 00:41:28,829 --> 00:41:34,760 Jadi seorang lelaki bernama [didengar] learnyouahaskell.com, tiada ruang. 720 00:41:34,760 --> 00:41:37,065 Tatabahasa sakit. 721 00:41:37,065 --> 00:41:38,690 STEPHEN KREWSON: Ia digambarkan juga. 722 00:41:38,690 --> 00:41:39,440 CONNOR HARRIS: Jadi apa yang GNU LilyPond? 723 00:41:39,440 --> 00:41:42,480 Ia adalah satu program perisytiharan bahasa untuk muzik atur huruf. 724 00:41:42,480 --> 00:41:45,480 Jadi declarative-- anda boleh memikirkan perkara-perkara seperti HTML, 725 00:41:45,480 --> 00:41:50,900 di mana anda tidak saying-- HTML tidak mengatakan bagaimana pelayar web perlu 726 00:41:50,900 --> 00:41:52,180 memaparkan halaman langkah demi langkah. 727 00:41:52,180 --> 00:41:54,096 Ia hanya mengatakan ini adalah keterangan teks 728 00:41:54,096 --> 00:41:56,100 apa yang anda mahu halaman untuk kelihatan seperti. 729 00:41:56,100 --> 00:41:59,310 >> Dan kemudian ia juga program yang menghimpunkan bahasa ini, 730 00:41:59,310 --> 00:42:02,300 atau ia dibaca dan kemudian benar-benar tidak atur huruf untuk anda, 731 00:42:02,300 --> 00:42:05,570 dan ia memuntahkannya keluar ini indah skor PDF mencari. 732 00:42:05,570 --> 00:42:08,250 Anda juga boleh mendapatkan format PNG atau apa sahaja. 733 00:42:08,250 --> 00:42:10,300 Cara yang baik untuk berfikir ini adalah dengan analogi 734 00:42:10,300 --> 00:42:16,620 adalah bahawa LaTeX adalah jenis seperti LillyPond, tetapi hanya atur huruf biasa. 735 00:42:16,620 --> 00:42:20,360 Jadi, daripada daripada- ia bukan WYSIWYG, Apa yang Anda Lihat 736 00:42:20,360 --> 00:42:22,960 Itulah Yang Anda Dapat, seperti, katakan Finale, atau Sibelius, 737 00:42:22,960 --> 00:42:27,430 atau Microsoft Word, di mana anda boleh masuk ke dalam masa sebenar dan draf perkara dalam masa sebenar 738 00:42:27,430 --> 00:42:31,340 dan melihat perubahan serta-merta. 739 00:42:31,340 --> 00:42:32,140 >> Ia berasaskan teks. 740 00:42:32,140 --> 00:42:35,290 Anda perlu menyusun anda skor menggunakan program yang berasingan 741 00:42:35,290 --> 00:42:37,090 dan keluar PDF kemudian. 742 00:42:37,090 --> 00:42:43,320 Ini adalah sedikit kurang mudah untuk digunakan jika anda 743 00:42:43,320 --> 00:42:46,520 cuba untuk menulis terus ke dalam skor yang dan anda 744 00:42:46,520 --> 00:42:48,620 cuba untuk mengarang pada komputer. 745 00:42:48,620 --> 00:42:50,830 Tetapi ada banyak kelebihan untuk itu. 746 00:42:50,830 --> 00:42:56,110 Satu, ia kelihatan lebih bagus, kerana LillyPond boleh sebenarnya 747 00:42:56,110 --> 00:42:58,210 mengambil masa untuk melakukan keputusan susun atur dengan betul, 748 00:42:58,210 --> 00:43:02,380 tidak seperti Sibelius atau Finale, yang mempunyai untuk membuat algoritma dikompromi supaya 749 00:43:02,380 --> 00:43:05,020 bahawa mereka boleh memaparkan perkara-perkara dalam masa sebenar. 750 00:43:05,020 --> 00:43:07,660 >> Jadi mengapa LilyPond-- grafik komputer adalah sukar. 751 00:43:07,660 --> 00:43:10,535 Jika anda melakukan apa-apa dengan muzik dan anda ingin menulis skor, 752 00:43:10,535 --> 00:43:13,900 anda tidak mahu menulis segala-galanya sendiri 753 00:43:13,900 --> 00:43:19,040 bermula dengan bagaimana untuk menarik kakitangan dan bagaimana untuk menarik pad nota. 754 00:43:19,040 --> 00:43:21,020 Ia amat sukar. Ia telah dilakukan sebelum ini. 755 00:43:21,020 --> 00:43:22,170 Anda halus. 756 00:43:22,170 --> 00:43:26,200 >> Jika anda mahu menggunakan Finale atau Sibelius, format fail untuk perkara-perkara 757 00:43:26,200 --> 00:43:30,180 sangat rumit, dan anda tidak boleh benar-benar menggunakannya pengaturcaraan. 758 00:43:30,180 --> 00:43:35,020 Anda boleh membuka Sibelius dengan Finale dan pergi ke Fail, Eksport sebagai PDF diri sendiri, 759 00:43:35,020 --> 00:43:37,600 tetapi anda tidak boleh benar-benar memanggil bahawa dari skrip. 760 00:43:37,600 --> 00:43:40,440 LillyPond, anda boleh menghubungi dari orang-orang skrip. 761 00:43:40,440 --> 00:43:44,397 Anda boleh dengan mudah melelar LillyPond dengan LaTeX. 762 00:43:44,397 --> 00:43:47,230 Saya tidak akan mempunyai banyak masa untuk pergi ke dalam teknologi ini sekarang, 763 00:43:47,230 --> 00:43:48,321 tetapi mereka wujud. 764 00:43:48,321 --> 00:43:50,070 Jika anda mahu melihat dalam satu buku LillyPond, 765 00:43:50,070 --> 00:43:53,760 ia adalah satu program yang datang dengan pengedaran LillyPond anda, 766 00:43:53,760 --> 00:43:57,030 dan ia untuk iterating Serpihan LillyPond ke dalam LaTeX 767 00:43:57,030 --> 00:44:00,340 jika anda mahu melakukan sesuatu seperti dokumen ilmu musik besar 768 00:44:00,340 --> 00:44:02,289 dengan contoh-contoh, sebagai contoh. 769 00:44:02,289 --> 00:44:04,580 Dan ia adalah satu kemahiran yang baik untuk hidup jika anda melakukan apa-apa 770 00:44:04,580 --> 00:44:05,770 dengan muzik, bukan hanya CS50. 771 00:44:05,770 --> 00:44:09,320 Saya telah menggunakan LillyPond untuk semua projek komposisi saya 772 00:44:09,320 --> 00:44:11,880 kerana saya adalah pada dasarnya kanan di sekolah tinggi. 773 00:44:11,880 --> 00:44:13,455 >> Jadi di sini adalah beberapa contoh yang mudah. 774 00:44:13,455 --> 00:44:17,490 775 00:44:17,490 --> 00:44:21,060 Ini adalah pada dasarnya wakil tahap kesukaran 776 00:44:21,060 --> 00:44:23,481 bahawa kebanyakan orang akan hadapi itu mereka cuba 777 00:44:23,481 --> 00:44:24,980 menggunakan GNU LilyPond untuk projek-projek yang mudah. 778 00:44:24,980 --> 00:44:29,519 Ini pertama adalah mulanya untuk permulaan nyanyian untuk paduan suara oleh Bach. 779 00:44:29,519 --> 00:44:31,810 Ini salah satu bahagian bawah adalah petikan daripada salah satu daripada kerja-kerja saya sendiri, 780 00:44:31,810 --> 00:44:34,650 dan ia hanya di sana untuk menunjukkan kamu perkara-perkara seperti [didengar] 781 00:44:34,650 --> 00:44:38,550 meletakkan banyak baris dalam yang sama kakitangan, bagaimana lirik undersetting berfungsi. 782 00:44:38,550 --> 00:44:41,350 783 00:44:41,350 --> 00:44:46,110 Underlays Lyric adalah satu perkara yang amat mudah untuk digunakan GNU LilyPond untuk muzik paduan suara. 784 00:44:46,110 --> 00:44:48,814 >> Dan demikian maka ada beberapa lagi contoh rumit di sini. 785 00:44:48,814 --> 00:44:50,980 Semua ini dilakukan dalam GNU LilyPond dan mereka boleh dilaksanakan. 786 00:44:50,980 --> 00:44:55,280 Ini petikan pertama adalah dari [Didengar] oleh [didengar]. 787 00:44:55,280 --> 00:44:58,860 Dan ini [didengar] dari sekeping untuk bass solo 788 00:44:58,860 --> 00:45:03,550 seruling oleh [didengar], yang longtime-- yang yang 789 00:45:03,550 --> 00:45:07,101 adalah seorang ahli lama daripada jabatan muzik di sini, saya fikir. 790 00:45:07,101 --> 00:45:08,600 Saya tidak pasti di mana dia pergi ke luar. 791 00:45:08,600 --> 00:45:12,410 Tetapi dia adalah penasihat Harvard Persatuan Penggubah untuk masa yang lama. 792 00:45:12,410 --> 00:45:13,530 Lelaki yang baik. 793 00:45:13,530 --> 00:45:16,920 Dan dia menulis beberapa muzik yang mempunyai sangat notasi rumit yang LillyPond 794 00:45:16,920 --> 00:45:20,500 masih boleh mengendalikan sangat baik. 795 00:45:20,500 --> 00:45:26,030 >> Jadi hanya untuk memberi anda rasa apa keupayaan ini perkara ini ialah- supaya 796 00:45:26,030 --> 00:45:28,960 mengenai dalaman LillyPond sangat rumit. 797 00:45:28,960 --> 00:45:31,060 Dan anda boleh menggunakannya untuk masa yang lama, termasuk 798 00:45:31,060 --> 00:45:32,520 untuk beberapa agak rumit perkara, tanpa benar-benar 799 00:45:32,520 --> 00:45:34,060 perlu tahu banyak tentang mereka. 800 00:45:34,060 --> 00:45:38,720 Tetapi idea asas adalah bahawa pada tahap paling rendah, atom LillyPonds 801 00:45:38,720 --> 00:45:39,970 adalah nota. 802 00:45:39,970 --> 00:45:42,761 Nota-nota yang mengandungi konteks dipanggil suara. 803 00:45:42,761 --> 00:45:44,510 Jadi konteks suara pada dasarnya sepadan 804 00:45:44,510 --> 00:45:47,410 untuk satu baris terdiri dr. 805 00:45:47,410 --> 00:45:49,410 Dan kemudian konteks boleh terkandung hierarki 806 00:45:49,410 --> 00:45:53,590 dalam sekali di peringkat yang lebih tinggi yang mewakili kakitangan kepada skor 807 00:45:53,590 --> 00:45:56,750 atau kumpulan yang lebih besar seperti kakitangan piano atau kakitangan koir, 808 00:45:56,750 --> 00:45:58,990 dan kemudian akhirnya keseluruhan konteks skor. 809 00:45:58,990 --> 00:46:02,260 Dan anda sebenarnya boleh merangkumi pelbagai skor dalam buku. 810 00:46:02,260 --> 00:46:05,770 >> Dan setiap konteks mempunyai beberapa engravers dilampirkan. 811 00:46:05,770 --> 00:46:08,340 Jika anda melihat melalui kandungan konteks yang 812 00:46:08,340 --> 00:46:14,410 dan mencetak simbol tertentu atau kelas tertentu simbol seperti yang diperlukan. 813 00:46:14,410 --> 00:46:17,840 Jadi untuk setiap konteks suara, ada [didengar] nota 814 00:46:17,840 --> 00:46:24,270 pengukir yang pada dasarnya fungsi atau objek yang menulis semua nota 815 00:46:24,270 --> 00:46:26,290 kepala di bahagian kanan halaman. 816 00:46:26,290 --> 00:46:29,510 Kemudian ada seorang pengukir rekah, yang menulis di clefts pada kakitangan. 817 00:46:29,510 --> 00:46:31,517 Kemudian ada metronom tanda pengukir yang 818 00:46:31,517 --> 00:46:33,100 menulis daripada markah metronom dalam skor. 819 00:46:33,100 --> 00:46:36,410 Dan semua ini patut cantik baik ke dalam hierarki. 820 00:46:36,410 --> 00:46:39,500 Dan ia sangat, sangat, sangat disesuaikan, yang anda perlukan 821 00:46:39,500 --> 00:46:42,880 jika anda mahu untuk mendapatkan perkara yang seperti itu. 822 00:46:42,880 --> 00:46:45,730 >> Jadi semua konteks mempunyai banyak ciri-ciri yang berbeza 823 00:46:45,730 --> 00:46:52,410 bahawa anda boleh mengubah suai untuk segala-galanya dari jarak kepada pelbagai font 824 00:46:52,410 --> 00:46:54,942 pemilihan untuk saiz perkara. 825 00:46:54,942 --> 00:46:56,900 Jika anda ingin melakukan lebih perkara yang lebih rumit, 826 00:46:56,900 --> 00:46:59,210 terdapat satu bahasa skrip yang tertanam. 827 00:46:59,210 --> 00:47:01,820 Mereka menggunakan skim, yang adalah dialek LISP. 828 00:47:01,820 --> 00:47:04,960 Ini mungkin tidak bermakna apa-apa kepada anda. 829 00:47:04,960 --> 00:47:06,900 Tetapi pada dasarnya, skim lain berfungsi 830 00:47:06,900 --> 00:47:09,500 bahasa pengaturcaraan, lebih atau kurang. 831 00:47:09,500 --> 00:47:10,800 >> STEPHEN KREWSON: Kerjasama masuk. 832 00:47:10,800 --> 00:47:12,690 >> CONNOR HARRIS: Ya. 833 00:47:12,690 --> 00:47:15,390 Ia adalah kerjasama dalam yang baik, saya rasa. 834 00:47:15,390 --> 00:47:20,150 Dan ia digunakan sebagai bahasa pengajaran, sebenarnya, turun Mass Ave. Di MIT. 835 00:47:20,150 --> 00:47:26,590 Dan ia sangat berguna untuk LillyPond untuk pelbagai sebab-sebab teknikal. 836 00:47:26,590 --> 00:47:30,317 >> Dan jadi jika anda ingin mudah tweak bergantung kepada conditional, 837 00:47:30,317 --> 00:47:32,900 untuk example-- ada tertentu keadaan skor yang yang yang dipenuhi, 838 00:47:32,900 --> 00:47:36,495 membuat apa-apa perubahan kepada susun atur atau whatnot-- kemudian 839 00:47:36,495 --> 00:47:37,620 kemudahan orang berada di sana. 840 00:47:37,620 --> 00:47:38,667 Mereka rumit. 841 00:47:38,667 --> 00:47:40,250 Jadi di sini adalah sampel kod agak mudah. 842 00:47:40,250 --> 00:47:43,810 Ia adalah lima baris. 843 00:47:43,810 --> 00:47:46,120 Pada asasnya, saya mendefinisikan dua kakitangan. 844 00:47:46,120 --> 00:47:46,904 Ada dalam 3/4. 845 00:47:46,904 --> 00:47:48,695 Kakitangan pertama mempunyai dilampirkan tanda tempo, 846 00:47:48,695 --> 00:47:51,110 tetapi itu sebenarnya akan untuk pergi ke seluruh skor, 847 00:47:51,110 --> 00:47:54,960 kerana tanda tempo berada di tahap skor. 848 00:47:54,960 --> 00:47:59,044 Tanda metronom pengukir dilampirkan untuk menjaringkan konteks. 849 00:47:59,044 --> 00:48:01,460 Ada kunci yang berbeza, kerana [didengar] pengukir 850 00:48:01,460 --> 00:48:02,710 dilampirkan kakitangan. 851 00:48:02,710 --> 00:48:04,441 Anda sebenarnya boleh lakukan ialah. 852 00:48:04,441 --> 00:48:06,190 Sampel yang saya tulis adalah sebenarnya dalam C utama, 853 00:48:06,190 --> 00:48:07,990 tetapi ia hanya untuk menunjukkan anda boleh mempunyai 854 00:48:07,990 --> 00:48:09,570 kunci yang berbeza dalam kakitangan yang berbeza. 855 00:48:09,570 --> 00:48:15,710 Dan sintaks asas anda menulis ambil perhatian nama dengan E, F, G, apa sahaja. 856 00:48:15,710 --> 00:48:18,910 Jika anda mahu lakukan Terkadang, anda akhiran IS atau ES. 857 00:48:18,910 --> 00:48:22,640 Ini adalah dari Belanda konvensyen musicological. 858 00:48:22,640 --> 00:48:28,290 >> Dan untuk melakukan lompatan oktaf, anda perlu menggunakan ini semak markah, koma atau koma. 859 00:48:28,290 --> 00:48:30,580 Relatif hanya bermakna apa sahaja yang anda mempunyai nota, 860 00:48:30,580 --> 00:48:34,080 ia secara automatik akan plaec dalam oktaf yang paling dekat dengan yang sebelumnya. 861 00:48:34,080 --> 00:48:37,624 Dan jika anda mahu untuk melompat lebih daripada yang fifth-- mengatakan kelima atau more-- 862 00:48:37,624 --> 00:48:39,165 maka anda perlu menggunakan [didengar]. 863 00:48:39,165 --> 00:48:42,580 Tetapi jika tidak, anda tidak perlu menentukan oktaf setiap nota tunggal. 864 00:48:42,580 --> 00:48:46,130 >> Dan relatif C, perdana, dan C, anda hanya nyatakan pertengahan C 865 00:48:46,130 --> 00:48:48,630 dan asas C, nota terutamanya pertama. 866 00:48:48,630 --> 00:48:55,020 Kemudian anda mempunyai kakitangan ini yang menganjurkan kedua-dua suara atau sampel muzik, 867 00:48:55,020 --> 00:48:56,730 dan anda mempunyai skor. 868 00:48:56,730 --> 00:48:58,440 Dan yang kelihatan seperti ini. 869 00:48:58,440 --> 00:49:01,780 870 00:49:01,780 --> 00:49:05,380 >> Jika anda ingin mengambil masa untuk menyalin bahawa sampel LillyPond 871 00:49:05,380 --> 00:49:07,530 kod pada sebelumnya slaid ke bawah di sini, dan anda 872 00:49:07,530 --> 00:49:09,030 boleh menulis untuk LillyPond diri sendiri. 873 00:49:09,030 --> 00:49:11,280 Saya tahu bahawa kita telah mendapat sesuatu yang kelihatan banyak seperti ini. 874 00:49:11,280 --> 00:49:17,236 875 00:49:17,236 --> 00:49:19,610 Jadi ada teknologi lain dipanggil Muzik XML dikekalkan 876 00:49:19,610 --> 00:49:22,030 oleh orang yang sama sekali berbeza. 877 00:49:22,030 --> 00:49:28,150 XML adalah data teks structure-- Saya tidak boleh mengatakan data structure-- mengatakan 878 00:49:28,150 --> 00:49:29,580 peta jenis metafora. 879 00:49:29,580 --> 00:49:33,800 Dan ia direka untuk memegang data hierarki dengan baik. 880 00:49:33,800 --> 00:49:37,050 HTML, sebagai contoh, adalah sejenis XML. 881 00:49:37,050 --> 00:49:41,090 Dan anda boleh memberitahu XML kerana mereka mempunyai semua kurung sudut dan sudut 882 00:49:41,090 --> 00:49:44,700 tanda kurungan slash bahawa medan persembahan data. 883 00:49:44,700 --> 00:49:47,390 >> Saya tidak mempunyai kod contoh dari Muzik XML. 884 00:49:47,390 --> 00:49:50,450 Anda boleh mencari sendiri. 885 00:49:50,450 --> 00:49:53,735 Pada asasnya, sebab anda mungkin mahu menggunakan XML sebagai peringkat pertengahan 886 00:49:53,735 --> 00:49:55,980 adalah, pertama sekali, ia adalah format pertukaran 887 00:49:55,980 --> 00:50:02,301 untuk dasarnya every-- saya tidak perlu mengatakan setiap, tetapi banyak skor yang berbeza 888 00:50:02,301 --> 00:50:02,800 penulis. 889 00:50:02,800 --> 00:50:04,966 Jadi, jika anda menulis dalam Muzik XML, bukan sahaja boleh LillyPond 890 00:50:04,966 --> 00:50:08,080 membacanya dengan bantuan auxilary ini program dipanggil Muzik XML untuk LY, 891 00:50:08,080 --> 00:50:11,360 tetapi juga Finale boleh membaca ia, Sibelius boleh membacanya. 892 00:50:11,360 --> 00:50:14,770 Bergantung kepada bagaimana objek dalaman anda hierarki kerja-kerja untuk mewakili muzik, 893 00:50:14,770 --> 00:50:18,820 ia mungkin lebih mudah untuk menulis untuk Muzik XML daripada LillyPond 894 00:50:18,820 --> 00:50:22,410 dan hanya bergantung kepada Muzik XML untuk LY untuk membuat penukaran. 895 00:50:22,410 --> 00:50:24,282 >> Saya tidak fikir [didengar] mempunyai Muzik XML. 896 00:50:24,282 --> 00:50:25,490 STEPHEN KREWSON: Ia tidak. 897 00:50:25,490 --> 00:50:26,340 Seseorang sedang bekerja di atasnya, walaupun. 898 00:50:26,340 --> 00:50:27,090 >> CONNOR HARRIS: OK. 899 00:50:27,090 --> 00:50:31,040 Euterpea tidak mempunyai Muzik XML output fungsi lagi. 900 00:50:31,040 --> 00:50:35,340 Jika anda mahu idea projek akhir, mungkin berhubung dengan seorang lelaki 901 00:50:35,340 --> 00:50:38,620 Stephen yang tahu, dan mereka boleh menggunakan bantuan anda. 902 00:50:38,620 --> 00:50:40,992 >> STEPHEN KREWSON: Saya suka bahawa. 903 00:50:40,992 --> 00:50:43,450 CONNOR HARRIS: Juga, pada dasarnya, setiap bahasa pengaturcaraan 904 00:50:43,450 --> 00:50:46,610 yang bernilai garam sudah mempunyai perpustakaan XML, 905 00:50:46,610 --> 00:50:51,030 supaya anda secara dalaman boleh menukar semua muzik anda ke dalam beberapa objek 906 00:50:51,030 --> 00:50:54,120 perpustakaan XML boleh menulis keluar yang memerlukan lebih sedikit 907 00:50:54,120 --> 00:50:57,470 apa-apa perubahan kepada struktur dalaman anda untuk apa sahaja objek muzik anda 908 00:50:57,470 --> 00:51:00,310 mahu menulis daripada menulis ia secara langsung dalam LillyPond akan. 909 00:51:00,310 --> 00:51:04,380 Kemudian hanya mencetak dengan XML dengan perpustakaan XML dalam bahasa anda, 910 00:51:04,380 --> 00:51:07,260 yang akan menjamin bahawa itu sintaksis betul dan segala-galanya, 911 00:51:07,260 --> 00:51:08,720 dan kemudian menukar kepada LillyPond. 912 00:51:08,720 --> 00:51:11,060 Jadi teknologi anda mungkin mahu melihat ke dalam jika anda melakukan sesuatu 913 00:51:11,060 --> 00:51:11,650 macam ini. 914 00:51:11,650 --> 00:51:14,490 915 00:51:14,490 --> 00:51:16,370 >> [Didengar], satu lagi teknologi auxilarry. 916 00:51:16,370 --> 00:51:21,700 Ini adalah pada dasarnya Tech Works atau Tech Studio untuk LillyPond. 917 00:51:21,700 --> 00:51:25,380 Oleh itu, ia menawarkan bantuan dengan sintaksis, dengan template 918 00:51:25,380 --> 00:51:28,770 untuk pelbagai biasa kombinasi instrumen. 919 00:51:28,770 --> 00:51:32,780 Ia membolehkan skrin berpecah melihat supaya anda boleh mempunyai kod anda dalam satu tetingkap 920 00:51:32,780 --> 00:51:37,350 dan PDF di tetingkap lain dan klik pada tempat yang dalam bentuk PDF 921 00:51:37,350 --> 00:51:40,650 untuk melompat ke yang berkaitan tempat dalam kod sumber anda. 922 00:51:40,650 --> 00:51:45,330 Ini adalah lebih berguna jika anda benar-benar bertulis LillyPond fail diri 923 00:51:45,330 --> 00:51:47,400 daripada jika anda menjana mereka pengaturcaraan. 924 00:51:47,400 --> 00:51:51,230 Tetapi sekali lagi, ia sesuatu yang berguna untuk mempunyai. 925 00:51:51,230 --> 00:51:51,970 >> Yang besar. 926 00:51:51,970 --> 00:51:55,860 Satu lagi resources-- saya akan hanya pergi melalui ini dengan cepat. 927 00:51:55,860 --> 00:52:01,270 LillyPond manuals-- LillyPond mempunyai dokumentasi yang sangat baik di laman webnya. 928 00:52:01,270 --> 00:52:02,270 Mereka mempunyai tutorial. 929 00:52:02,270 --> 00:52:03,478 Mereka mempunyai rujukan sintaksis. 930 00:52:03,478 --> 00:52:07,010 Mereka mempunyai beratus-ratus coretan untuk pelbagai perkara-perkara kecil 931 00:52:07,010 --> 00:52:09,930 yo mungkin perlu lakukan untuk menunjukkan pelbagai keupayaan. 932 00:52:09,930 --> 00:52:12,250 Jika anda mahu menggunakan bahasa skrip yang 933 00:52:12,250 --> 00:52:14,740 atau membuat yang lebih luas penyesuaian, kemudian ada 934 00:52:14,740 --> 00:52:16,730 dalaman rujukan di URL itu. 935 00:52:16,730 --> 00:52:21,950 Jika anda mahu menggunakan Muzik XML, ada bahawa URL, musicxml.com/tutorial. 936 00:52:21,950 --> 00:52:27,960 >> Dan kemudian jika anda perlu belajar skim kerana anda benar-benar mahu menggunakan 937 00:52:27,960 --> 00:52:30,960 kemudahan skrip dalam LillyPond, kemudian ada yang [didengar] dipanggil 938 00:52:30,960 --> 00:52:32,918 Tafsiran Berstruktur Program komputer, 939 00:52:32,918 --> 00:52:35,820 yang bukan sahaja kedua pilihan CS buku teks pernah written-- 940 00:52:35,820 --> 00:52:39,770 mencari saya selepas itu jika anda ingin tahu apa yang saya fikir pilihan satu is-- yang 941 00:52:39,770 --> 00:52:43,580 tetapi ia juga yang sangat baik pengenalan kepada bahasa yang betul. 942 00:52:43,580 --> 00:52:46,630 Anda tidak akan memerlukan lebih daripada beberapa bahagian pertama. 943 00:52:46,630 --> 00:52:47,827 >> Dan itu sahaja. 944 00:52:47,827 --> 00:52:48,410 Ada soalan? 945 00:52:48,410 --> 00:52:54,068 946 00:52:54,068 --> 00:52:57,972 >> PELAJAR: Di mana saya boleh memuat turun anda Frere Jacques dihasilkan 947 00:52:57,972 --> 00:53:01,050 jadi saya boleh meletakkannya di iPod saya? 948 00:53:01,050 --> 00:53:07,574 >> STEPHEN KREWSON: Sebenarnya, anda boleh menulis ke suatu fail wav dalam Euterpea. 949 00:53:07,574 --> 00:53:08,490 Dan anda mempunyai kod. 950 00:53:08,490 --> 00:53:10,000 Ia pada GitHub. 951 00:53:10,000 --> 00:53:15,590 Membuat variasi anda sendiri Frere Jacques oleh CS50 minda sarang. 952 00:53:15,590 --> 00:53:17,095 Ia akan menjadi besar. 953 00:53:17,095 --> 00:53:18,220 CONNOR HARRIS: Sesiapa yang berlainan? 954 00:53:18,220 --> 00:53:20,261 STEPHEN KREWSON: Kita perlu bass drum yang lebih baik juga. 955 00:53:20,261 --> 00:53:21,935 Ia benar-benar buruk. 956 00:53:21,935 --> 00:53:26,565 >> PELAJAR: Euterpea mempunyai bukan sahaja sebelah komposisi, tetapi signal-- 957 00:53:26,565 --> 00:53:27,440 STEPHEN KREWSON: Ya. 958 00:53:27,440 --> 00:53:30,100 Malah, kerja-kerja saya lakukan pada Euterpea apabila saya 959 00:53:30,100 --> 00:53:33,450 mengambil this-- ada lulus kursus di Yale yang 960 00:53:33,450 --> 00:53:35,900 menggunakan kitab itu sedang dalam sintesis bunyi. 961 00:53:35,900 --> 00:53:39,810 Jadi ada yang benar-benar cara yang baik dengan menggunakan anak panah 962 00:53:39,810 --> 00:53:46,150 dan beberapa notasi yang kita lihat daripada mengarang bersama-sama fungsi isyarat. 963 00:53:46,150 --> 00:53:50,610 Khususnya, bass bagi kebanyakan daripada mereka adalah hanya gelombang sinus mudah. 964 00:53:50,610 --> 00:53:54,240 Tetapi jika anda mula mengarang mereka dengan cara perancangan pelik, 965 00:53:54,240 --> 00:54:00,010 anda boleh mendapatkan bunyi gila kesan, seperti lata pelik. 966 00:54:00,010 --> 00:54:04,640 Anda boleh membuat sangat cekal bunyi dengan banyak modulasi. 967 00:54:04,640 --> 00:54:07,730 >> Saya melakukan projek pada berbutir sintesis, iaitu 968 00:54:07,730 --> 00:54:12,290 suatu tempat di antara FM dan persampelan. 969 00:54:12,290 --> 00:54:15,230 Anda mengambil sangat kecil, sampel sedikit, dan kemudian 970 00:54:15,230 --> 00:54:20,440 menggabungkan mereka dengan sejenis modulator dan membina bunyi yang lebih kaya. 971 00:54:20,440 --> 00:54:24,900 Kami juga melakukan pemodelan fizikal, jadi cuba untuk berfikir tentang fizik 972 00:54:24,900 --> 00:54:29,410 dan psychoacoustics sesuatu seperti sangkakala, dan berfikir tentang cara 973 00:54:29,410 --> 00:54:32,320 bunyi itu memantul dari loceng sangkakala 974 00:54:32,320 --> 00:54:35,200 dan akustik bilik dan pemodelan 975 00:54:35,200 --> 00:54:40,195 bahawa dengan pengayun asas. 976 00:54:40,195 --> 00:54:47,690 977 00:54:47,690 --> 00:54:48,940 CONNOR HARRIS: Terima kasih banyak. 978 00:54:48,940 --> 00:54:50,140 Terima kasih kerana datang. 979 00:54:50,140 --> 00:54:52,400 Dan saya sentiasa bersedia untuk mengambil soalan oleh email-- 980 00:54:52,400 --> 00:54:55,020 connorharris@college.harvard.edu. 981 00:54:55,020 --> 00:54:57,020 >> STEPHEN KREWSON: Ya. stephen.krewson@yale.edu. 982 00:54:57,020 --> 00:54:58,810 983 00:54:58,810 --> 00:55:00,360 Sejuk. 984 00:55:00,360 --> 00:55:01,667