CONNOR HARRIS: Hi. Saya Connor Harris. Saya adalah seorang CA CS50 di Harvard. STEPHEN KREWSON: Saya Stephen Krewson. Saya adalah seorang TF untuk CS50 di Yale. CONNOR HARRIS: Dan kita akan bercakap tentang beberapa teknologi yang anda mungkin mahu menggunakan jika anda berminat dalam melakukan projek akhir atau benar-benar apa-apa dengan muzik. Kami akan memberi tumpuan kepada yang pertama bahasa pengaturcaraan yang dikenali sebagai Haskell. Ia berfungsi bahasa, jadi paradigma adalah sangat berbeza daripada C atau PHP atau lain-lain bahasa penting yang anda telah digunakan sudah, dan terutamanya pada perpustakaan ditulis dalam Haskell dipanggil Euterpea, yang boleh membantu orang dengan menulis muzik fungsi, pada asasnya. Dan Stephen akan berjalan anda melalui satu contoh yang hebat itu. Selepas ini, saya akan memperkenalkan anda kepada sesuatu yang dinamakan LillyPond, yang adalah teknologi untuk muzik atur huruf. Ia adalah jenis seperti LaTeX untuk muzik sesiapa di antara kamu telah menggunakan LaTeX untuk kelas matematik atau lain kelas P set atau golongan berada. Oleh itu, saya akan memberikan anda, sekali lagi, beberapa contoh mudah yang dan menunjukkan anda ke umum arah beberapa sumber yang lebih baik. STEPHEN KREWSON: Dalam Selain itu, kita fikir ia akan menjadi sejuk untuk menubuhkan sedikit petua ke arah saluran paip antara Euterpea janaan fail MIDI dalam LillyPond, jadi kami menyediakan beberapa arahan mengenai skrip untuk berbuat demikian yang disediakan dengan LillyPond hanya untuk memastikan ia sumber terbuka dan mendapatkan saluran paip akan. CONNOR HARRIS: Sekali lagi, kita harus menekankan, kedua-dua teknologi, anda tidak perlu menggunakan mereka bersama-sama. Mereka tidak direka untuk bekerja bersama-sama, walaupun mereka sangat baik. STEPHEN KREWSON: Betul. Dan benar-benar percuma. CONNOR HARRIS: Jadi ucapan terimakasih, hanya membaca itu. STEPHEN KREWSON: diisi diperhatikan. Terima kasih kepada mereka orang. Ini saya akan berlama-lama di hanya untuk seketika. Proses pemasangan adalah sedikit rumit. Kami yang membaca saya pada GitHub bahawa anda boleh mengambil lihat. Hanya e-mel saya jika anda mempunyai sebarang pertanyaan. Tetapi kita akan menjalankan ini dengan andaian bahawa ini bekerja untuk semua orang. CONNOR HARRIS: Dan jika anda tidak boleh mendapatkan LillyPond untuk bekerja, tiada masalah besar. Tidak ada penyusunan hidup yang akan terlibat, sekurang-kurangnya pada akhir saya. STEPHEN KREWSON: Haskell dan LillyPond kedua-dua harus mempunyai pemasang. Euterpea dimuat turun sebagai pakej, sebagainya dan sebagainya. Oleh itu, kita bercakap tentang muzik komputer. Dan ini hanyalah sangat pandangan 50.000 kaki. Ada beberapa aspek yang lainnya. Dan ini adalah kasar dan akan mengaburi terperinci. Tetapi kita boleh memikirkan sesuatu seperti komposisi algoritma, menggunakan algoritma, menggunakan kod, untuk menjana beberapa jenis daripada- mungkin seorang diri sama urutan nota, atau mungkin nota di bawah beberapa kekangan. Dan kemudian mereka boleh jadi dilaksanakan atau ditafsirkan dengan alat-alat analog atau apa-apa seperti itu. Tetapi komposisi itu dilakukan algorithmically. Tetapi sudah tentu, mungkin bidang muzik komputer atau muzik digital kami lebih mengenali adalah digital sintesis bunyi atau pensampelan digital dan rakaman digital. Banyak alat-alat digital dilakukan melalui pensampelan digital. Malah, kami akan menggunakan salah satu daripada orang-orang di bentuk perpustakaan fon bunyi kemudian. Tetapi ada juga sesuatu yang dipanggil sintesis digital yang keluar daripada 70-an dan ke dalam 'lewat 80-an dengan Yamaha dan John Chowning di Stanford melakukan sintesis FM atau Sintesis Pemodulatan Frekuensi, di mana anda mempunyai pembawa isyarat dan isyarat modulasi kedua-dua dalam spektrum audio. Tetapi apa yang kita memberi tumpuan kepada hari ini adalah sesuatu yang dinamakan MIDI, dan sudah tentu, komposisi algoritma. Kita tidak akan membuat instrumen, tetapi kita sebaliknya akan membuat beberapa muzik, dan kemudian yang akan mendapat ditafsirkan oleh beberapa instrumen yang adalah conformant kepada standard umum MIDI. Jadi apa MIDI? Saya tidak akan untuk mendapatkan terlalu dalam ke dalamnya, tetapi MIDI adalah protokol pemindahan data. Ia adalah sejenis panduan seluruh syarikat yang berbeza dan industri kerana menganjurkan bunyi atau patch. Oleh itu, kita akan melihat bahawa ada standard MIDI untuk semua perkusi yang berbeza bunyi dan cadangan MIDI untuk semua jenis Synth atau jenis semua instrumen kumpulan orkestra, katakan. Anda mungkin biasa dengan 0 melalui 127 mesej MIDI. Satu isyarat MIDI biasanya satu bit yang menunjukkan sama ada ia adalah data atau status paket, dan kemudian ada tujuh bit isyarat. Dan ini boleh mengawal segala-galanya daripada jumlah kepada tindakan atau tekanan pada kekunci tertentu jika anda melaksanakan dengan MIDI yang pengawal dan, sudah tentu, nota. Dan sudah tentu, MIDI mempunyai menjadi sangat berguna, kerana ia adalah satu cara untuk wayar bersama-sama atau rantai daisy sekumpulan peranti perkakasan MIDI. Saya mempunyai tujuh atau lapan kembali di rumah saya. Ia akan benar-benar rumit, tetapi ia benar-benar kuat. Dan ia benar-benar lama. Ia dari awal 80-an, dan ia adalah benar-benar baik dan kecil. CONNOR HARRIS: Ya. Semua Nintendo klasik permainan video akan mungkin mempunyai fail MIDI untuk muzik, sebagai contoh. STEPHEN KREWSON: Berikut adalah contoh MIDI umum, menunjukkan MIDI sebagai jenis yang protokol umum. Dan saya rasa kita boleh memikirkan Perbezaan antara spesifikasi bahawa perlu ada sesuatu seperti instrumen ini bunyi dan sebenar merealisasikan instrumen mereka bunyi dalam fon bunyi atau MIDI tertentu pensintesis sebagai perbezaan antara mungkin satu typeface-- yang mengatakan, secara umum, ini adalah reka bentuk cara ini tertentu untuk mewakili characters-- dan font tertentu yang mempunyai saiz tertentu dan timbre, dan ada merealisasikan the-- CONNOR HARRIS: Mungkin perbandingan yang lebih baik akan menjadi standard Unicode says-- ia memberi nombor kepada setiap watak, dan benar-benar setiap bahasa di dunia, atau satu set luas skrip bahasa di dunia, dan kemudian mereka adalah diberikan kepada sesuatu grafik oleh pelbagai pakej font. Dan jelas, yang boleh anda fikirkan MIDI sebagai Unicode bunyi. Dan ia hanya senarai daripada- aliran besar acara dan surat cara dan barang kecil, dan anda perlu mempunyai yang berasingan program, seperti muka taip, untuk menjadikan itu ke dalam sesuatu yang boleh didengar. STEPHEN KREWSON: Jadi mengapa Haskell? Haskell adalah pengaturcaraan yang berfungsi bahasa, sangat maju, sangat berbeza daripada C, sangat berbeza dengan PHP. Dan kita akan melihat bahawa terdapat satu kemudahan komposisi majlis di Haskell yang akan membolehkan kita untuk angin melalui mengarang atau menaip up, menyalin, sesuatu seperti Frere Jacques, lagu ini mudah yang mempunyai banyak bahagian-bahagian di dalamnya yang adalah diri yang sama atau mengulangi. Jadi ini akan menjadi sebahagian daripada motivasi mengapa kita menggunakan Haskell, di mana fungsi warganegara kelas pertama. Dan saya mahu melanjutkan ini sedikit. Ia adalah sedikit mudah untuk notate Frere Jacques di Haskell. Tetapi bagaimana jika kita mahu menambah bahagian drum kepadanya? Bagaimana jika kita mahu mencuba untuk membuat sesuatu seperti Roland 808 atau 909 drum mesin di mana anda perlu kira-kira 16 langkah-langkah yang berbeza? Biasanya ini adalah terfikir untuk nota yang ke-16. Dan anda boleh mengawal global tempo, dan anda boleh memilih sekumpulan alat perkusi yang berbeza dram bass, tepukan tangan yang, jerat yang berbeza, terbuka dan tertutup topi tinggi pada jenis ini saluran, dan kemudian anda boleh EQ atau menyesuaikan jumlah mereka. Dan kita akan melihat cara yang baik dalam Haskell mewakili langkah ini sequencer dengan semua pelbagai perkara yang sejuk di Haskell boleh kita lakukan dengan menjana senarai dan penapisan lebih senarai, pemetaan ke atas senarai, pemetaan fungsi lebih senarai. Dan permohonan maaf secara cepat. Ini adalah sangat sepintas dan lakaran terlalu cepat beberapa aspek daripada Haskell dan Euterpea, yang merupakan domain khusus bahasa tertanam bertulis dalam Haskell untuk jenis muzik. Oleh itu, sila lihat kod di dalam talian. Api sehingga GHCI, yang merupakan Glasgow Haskell Compiler Interpreter. Dan saya akan melakukan beberapa ini dalam sedikit supaya anda boleh melihat bagaimana ia dilakukan. Dan ini membolehkan anda untuk memuatkan masuk dengan the-- sintaksis adalah kolon dan kemudian arahan. Anda boleh memuatkan dalam fail. Anda boleh menggunakan browse pada fail-fail untuk melihat semua fungsi-fungsi yang wujud di dalam modul tertentu. Dan kemudian seperti yang kita akan lihat, jenis dan jenis kelas-kelas adalah begitu penting dalam Haskell, supaya anda sentiasa boleh check-- terutamanya jika anda bekerja dalam DSCL baru seperti ini, apakah jenis muzik? Saya tahu mengenai cara numerik jenis bekerja di Haskell, tetapi saya tidak tahu banyak tentang muzik. Tetapi anda boleh menerokai cara mereka ditakrifkan dengan menggunakan t atau jenis arahan dan kemudian memanggil tertentu fungsi atau objek data. CONNOR HARRIS: Ya. Jika anda fikir C dan dilafaz adalah hardass tentang jenis, anda tidak tahu tentang Haskell. Perkara yang baik tentang Haskell adalah bahawa jika anda boleh mendapatkan kod anda untuk menyusun dan jika cek jenis Haskell, ia mungkin betul, kerana sistem jenis yang begitu ketat. STEPHEN KREWSON: Ya. Jadi saya hanya mahu pergi through-- dan sekali lagi, ini tidak melakukannya justice-- beberapa ciri-ciri Haskell itu, sekurang-kurangnya untuk creators-- dan ia dibuat di akhir 1980-an oleh sekumpulan orang, jawatankuasa kira-kira 20 dan kaum fikir adalah penting. Dan perkara pertama yang mereka disenaraikan dalam kertas kerja yang menyifatkan usul Haskell dalam tempoh 20 tahun pertama atau lebih adalah bahawa ia adalah malas. Jadi apa maknanya? Nah, ia bermakna apabila kita mempunyai beberapa jenis bersuara, kita perlu menilai. Dan Haskell melakukan ini dalam panggilan melalui keperluan atau cara yang tidak ketat. Iaitu, jika kita mempunyai sekumpulan komponen bersuara kami, kita cuba untuk melambatkan penilaian mereka komponen utama sehingga minute-- lalu mutlak iaitu sehingga kita benar-benar memerlukannya. Jadi ertinya- ini yang tidak benar-benar sejuk, terutamanya jika kita berfikir tentang abstraksi satu langkah sequencer muzik. Anda menghidupkannya, dan anda mula menjalankan sequence-- langkah jika anda pernah bekerja dengan gendang machine-- dan ia hanya pergi selama-lamanya. Jadi ia akan menjadi benar-benar baik jika kita boleh mencontohi bahawa dalam Haskell. Dan kita boleh melakukannya dengan tidak terhingga nilai, dalam senarai terhingga tertentu. Ia amat mudah untuk menaip senarai terbatas dalam Haskell. Anda hanya boleh menggunakan sintaks ke bawah di sini, di mana anda melihat 1 hingga 3, mengeluarkan 3 1 dot dot, dan bahawa senarai tidak terhad semua nombor asli melanjutkan pada sejauh yang anda boleh bayangkan. Saya ingin memperkenalkan satu konsep lipatan segera. Dan sekali lagi, tujuan seminar ini tidak untuk belajar tentang lipatan dalam Haskell atau fungsi aras tinggi. Tetapi saya hanya mahu memperkenalkannya kepada memberi pengertian yang tepat tentang bagaimana pelik Haskell dan bagaimana kuat ia adalah. Dan khususnya, kita akan adalah- apabila kita melakukan bahagian drum kami yang berbeza, kita akan dapat memanipulasi senarai nombor, lipatan mereka ke satu sama lain. Dan untuk berbuat demikian, kita akan menjadi menggunakan peta dan lipatan. Ada bersekutu hak kali ganda, yang betul-betul ini satu sini-- 1 tolak kuantiti, 2 tolak kuantiti, 3 tolak 0. Dan sintaks yang kali ganda, anda memberi kali ganda nilai asas dan kemudian operation-- yang dalam kes ini, penambahan atau penolakan. Saya telah menunjukkan kedua-dua kes. Dan kemudian ada penumpuk yang berkumpul atas seluruh senarai, memohon yang ditambah pengendali atau tolak, dan kemudian terkumpul itu. Jadi ini akan menjadi the-- jika ia dipanggil dengan kali ganda r ditambah 0, bermula dengan 0, kami sudah tentu jumlah semua nombor dalam senarai itu. Dan itu adalah satu senarai 1-3. CONNOR HARRIS: Jadi untuk meletakkan ia lain cara, kali ganda r mengambil masa tiga hujah. Ada fungsi yang sendiri mengambil dua hujah, kemudian ada nilai starter, dan ada senarai nilai. Dan apa yang anda lakukan adalah anda mengambil nilai starter, nilai pertama, meletakkan mereka ke dalam majlis itu. Apa yang anda keluar, mengambil bahawa, makanan yang ke dalam fungsi nilai kedua, apa yang anda keluar, mengambil bahawa, makanan itu ke dalam fungsi nilai ketiga. Dan kemudian jika anda turun senarai ini kepada seluruh perjalanan ini, anda akan mendapat akhirnya beberapa nilai tunggal itu daripada jenis yang sama apa yang anda bermula dengan dan daripada jenis yang sama sebagai perkara-perkara dalam senarai, dan kemudian itulah hasil pulangan lipat R. STEPHEN KREWSON: Jadi khususnya, ini adalah fungsi aras tinggi, kerana mereka mengambil satu lagi berfungsi sebagai salah satu daripada hujah-hujah. CONNOR HARRIS: Ya. Jika anda telah menggunakan lain yang tertentu languages-- saya tahu R, [didengar] bahasa mempunyai ini, yang dipanggil Mengurangkan. Anda mungkin mempunyai fungsi yang sama dalam bahasa lain, hanya dipanggil perkara yang berbeza. STEPHEN KREWSON: Dan apa yang baik tentang kali ganda R dalam hal ini adalah kali ganda yang R boleh bekerja dengan senarai terbatas. Jadi, dalam bahagian bawah ini, P5 ini menjana nota yang dihidupkan di sequencer langkah untuk beberapa bahagian drum, sebahagian drum kelima, dan mungkin ia conga yang drum atau sesuatu. Dan ini adalah sengaja cara bodoh penulisan ini, tetapi ia menyeronokkan, kerana ia menunjukkan banyak perkara tentang Haskell dan Euterpea. Jadi kali ganda R kolon colon-- ini hanya satu pengendali yang menolak perkara bersama-sama pada list-- yang menggesa kosong senarai, yang hanya kurungan kosong. Dan saya menyeru yang dalam senarai tidak terhingga ini. Ini sebenarnya adalah dua senarai ditambah bersama-sama di sini. Senarai 1 koma 6 dot dot adalah 1, 6, 11, 16. Jadi Haskell-- dalam hanya beberapa watak, anda boleh menjana keseluruhan urutan nombor yang lima nombor selain regangan ke infiniti. Dan saya Prepend itu list-- ini sedikit lebih pendek 3, 8, 21-- hanya untuk menunjukkan kepada anda bagaimana anda boleh menyatukan senarai. Dan kemudian saya telah dilipat ke atas dirinya. Dan ini akhirnya hanya menjadi sejenis operasi pengenalan, tetapi ia terbatas. Dan lipat R boleh berbuat demikian, kerana ia malas menilai, seperti di atas. Jika kita mempunyai 1 dan 2 dan 3, kita boleh hanya braket off keseluruhan yang lain daripada itu. Yang tidak akan bekerja untuk tolak atau ditambah, tetapi ia akan bekerja untuk kolon ini operasi identiti dalam senarai. Jadi bagaimana kita boleh dikatakan menggunakan bahawa jika kita mempunyai senarai yang panjang tak terhingga perkara? Nah, Haskell menyediakan banyak functions-- dan kelihatan lebih ke dalam ini dalam time-- sendiri seperti mengambil yang mengatakan, OK, kami menjana senarai terhingga ini, tetapi kami hanya akan mengambil beberapa beberapa ia Dan dalam kes ini kita akan melihat ini kemudian dalam code-- mesin dram kami GM hanya beberapa jenis global berubah-ubah bagi bilangan langkah di sequencer. Pada mesin roll masuk saya menunjukkan anda, itu biasanya 16, tetapi saya telah melaksanakan dengan 32. Ia tidak benar-benar perkara itu. Haskell juga tulen, jadi ia mempunyai kuat menaip statik yang Connor dirujuk kepada. Jadi fungsi adalah matematik dalam sense-- mereka lebih matematik bahawa mereka dijamin untuk tidak mengakses atau mengubah apa-apa jenis berubah-ubah atau melaksanakan input atau output. Jadi jika anda mempunyai fungsi, ia ditentukan. Ia akan sentiasa kembali yang sama nilai di negeri program atau tetap sama. Terdapat, sudah tentu, pengecualian monadic ini, tetapi itu di luar skop. CONNOR HARRIS: Ya. Ini bermakna, walaupun, adalah terdapat adalah beberapa penting [didengar] hasil daripada ini. Satu adalah bahawa ia adalah sangat mudah untuk parallelize program Haskell. Kerana jika anda mempunyai, berkata, satu fungsi yang perlu untuk beroperasi pada satu juta nilai, jika anda tahu bahawa majlis itu akan sentiasa memberi nilai yang sama jika anda memberi makan pada value-- tertentu jika anda [didengar] f 1, f 2, maka f 3 atau f daripada 1 whatnot-- tidak akan menulis ke fail atau melakukan sesuatu yang akan mengubah nilai f2. Anda hanya boleh berpecah fungsi ini kepada juta mesin yang berlainan atau satu juta benang yang berbeza atau apa sahaja, mendapat semua jawapan kembali, mendapat semua nilai-nilai pulangan belakang, dan kemudian itu sahaja. Jadi sangat mudah untuk parallelize sesuatu. Kelemahan adalah input yang dan output terutamanya dimuatkan ke dalam sistem jenis dengan cara yang sangat rumit. Kami tidak akan pergi ke betul yang sekarang, tetapi saya menggalakkan anda untuk melihat beberapa sumber dalam talian jika anda mahu belajar tentang itu. STEPHEN KREWSON: Jadi menaip classes-- dan ini kelas was-- jenis dicipta untuk menyelesaikan masalah pengendali muatan. Oleh itu, kita mahu mempunyai persamaan antara pelbagai jenis perkara. Sudah tentu, kita boleh berfikir daripada- persamaan antara jenis angka adalah sangat mudah untuk berfikir tentang, tetapi bagaimana pula kesamaan antara senarai? Bagaimana pula dengan kesaksamaan di antara pokok struktur data kaki? Dan ini semua mungkin dalam Haskell kerana kelas jenis. Jadi, jika anda menentukan type-- data tertentu dan di sini, ini adalah padang muzik. Kami akhirnya mendapat beberapa muzik komputer. Jadi kita mempunyai C, C tajam, dan sebagainya dan sebagainya. Mereka tergolong dalam sekumpulan jenis kelas yang berlainan. EQ-- mereka tergolong dalam golongan jenis EQ. Ini bermakna mereka menyokong operasi kesaksamaan. Jadi, anda boleh menilai sama ada seseorang urutan primitif muzik adalah sama seperti yang lain. Mereka tergolong dalam kelas ordinal. Ini bermakna ada pesanan kepada ini. D datang selepas C. C tajam datang selepas C juga. Mereka tergolong dalam kelas menunjukkan, yang bermakna mereka boleh dicetak untuk konsol atau terminal. Mereka tergolong dalam kelas yang disebut satu persatu, yang bermakna walaupun ini adalah watak-watak, mereka mempunyai angka yang mendasari perwakilan bermula pada 0 dan terkeluar melalui bagaimanapun banyak perkara di sini, 20 atau lebih, atau 30 atau 40, mungkin. CONNOR HARRIS: Dan apabila kita mempunyai jenis data yang derives-- dengan kata kunci tersebut "deriving--" kelas jenis tertentu, ia bermakna bahawa pengkompil akan cuba untuk membina sesuatu yang automatik. Jadi mungkin anda akan mahu untuk menentukan kualiti yang berbeza. Anda akan mahu untuk menentukan C tajam sebagai sama dengan D rata, sebagai contoh. Dengan pembinaan ini di sini, saya tidak fikir C tajam dan D rata akan sama, kerana pengkompil akan secara automatik katakan setiap nilai yang berbeza mungkin adalah berbeza dari setiap yang lain. Oleh itu, ia adalah mungkin untuk mengatasi pelaksanaan yang lalai satu jenis kelas. Sekali lagi, melihat rujukan jika anda mahu belajar tentang itu. STEPHEN KREWSON: Dan di sini, sebenarnya, akan mempunyai ini membantu apabila kita memberi kod kemudian. Kami melihat beberapa pengusaha memasang di antara untuk komposisi berurutan, komposisi yang sama, dan sebagainya sebagainya, ini plus dan tanda-tanda yang sama dikelilingi oleh titik bertindih. Ini bermakna kita boleh bermain ini berbeza primitif muzik satu demi satu. Itulah komposisi berjujukan. Atau kita boleh memainkan mereka dalam selari pada masa yang sama. Jadi saya boleh mempunyai nilai muzik, dan kemudian ini sama dan titik bertindih, memasang di antara pengendali komposisi yang sama, dan bermain mereka sebagai sejenis kord. Dan kita akan menggunakan apabila ini kita menggabungkan bahagian drum kami dengan kami sedikit lagu Frere Jacques untuk bermain kedua-dua urutan nilai-nilai muzik pada masa yang sama. Currying Curry is-- kali terakhir menamakan daripada Haskell Curry, yang imej Haskell itu dinamakan selepas. Dan ini membolehkan kita keanggunan baik apabila kami menulis semua ini berbeza fungsi atau penapis yang kami akan menjadi pemetaan ke atas senarai kami. Fungsi dua arguments-- f x dan y-- boleh diwakili sebagai f x digunakan untuk y. Jadi ia adalah satu fungsi satu hujah yang mengembalikan satu lagi fungsi satu hujah. Jadi ini bermakna kita boleh memetakan fungsi f x lebih senarai y. CONNOR HARRIS: Mahu memberi satu contoh ini? STEPHEN KREWSON: Ya. Saya mempunyai contoh di sini dari beberapa perkara yang kami akan menulis. Jadi meniru 2-- baik, meniru akan mengambil satu nilai, iaitu bagaimana banyak kali untuk meniru sesuatu, dan kemudian ia akan mengambil masa yang value-- biasanya senarai atau sesuatu. Jadi di sini, kami pemetaan meniru 2 atas senarai lain. Jadi, jika kita memetakan meniru 2, jika kita meniru 2 terpakai kepada elemen pertama list-- ini dan ini adalah senarai phrases-- muzik akan menghasilkan dua daripada "anda sleeping--" supaya kamu tidur, kamu tidur. Jadi sekarang kita mempunyai dua. Tetapi meniru mengambil masa dua hujah, tetapi kerana kami currying dan kemudian pemetaan, kita boleh mewakili meniru 2 sebagai telah kembali sebagai fungsi satu argument-- hanya mereplikasi dua kali. Dan kemudian kita memohon bahawa untuk setiap elemen ini senarai frasa. Dan concat adalah Haskell operasi untuk merobohkan senarai. Kerana meniru 2 kehendak menghasilkan satu senarai senarai. Dan ini adalah bentuk perantaraan ini di sini. Dan sebagainya maka kita boleh concat atau meleperkan bahawa daripada dua kali. CONNOR HARRIS: A lebih mudah contoh currying, jika anda mahu like-- bayangkan f hanya fungsi pendaraban yang mengambil masa dua hujah-hujah dan pulangan produk mereka. Jadi jika anda mempunyai f 4 5, ia adalah 20. Tetapi anda boleh berfikir ini sebagai also-- anda mempunyai fungsi f 4 yang mengambil hujah dan pulangan empat kali ini argument-- hanya permohonan separa yang hanya satu hujah 4. Dan jika anda makan f daripada 4 5, yang akan memberi anda 20. Dan itulah yang lebih mudah contoh currying. Ia biasanya salah satu yang buku teks. STEPHEN KREWSON: Lambda ungkapan atau fungsi tanpa nama adalah satu lagi ciri Haskell. Jadi, jika kita perlu menyiapkan satu sedikit fungsi meniru kehidupan, tetapi mengatakan ia bukan dalam perpustakaan standard, kita boleh menggunakan sintaks yang serupa dengan yang berikut. Dan kita akan angin lebih ini. Satu perkara yang anda akan lihat banyak daripada di mesin dram adalah kita membuat panggilan untuk sesuatu yang dinamakan menapis, yang seperti sebelum ini, adalah pemetaan bagi suatu fungsi atas senarai, tetapi ia pemetaan fungsi Boolean. Oleh itu, kita ada di contoh sesuatu yang tanpa nama fungsi Boolean yang ditakrifkan hanya mengambil masa beberapa nilai-nilai. Ini bukan tegasnya fungsi tanpa nama. Tetapi ia menentukan dengan bahawa sintaks untuk keringkasan, dan ini hanya mengambil masa x modul n-- CONNOR HARRIS: Ya. Jadi f adalah fungsi dua hujah n dan p yang mengembalikan fungsi yang ia sendiri fungsi satu hujah, iaitu x. STEPHEN KREWSON: Saya pengendali infiks disebut itu. Apakah pengendali infiks? Nah, pengendali infiks adalah Cara biasa kami mewakili operasi, berkata, dalam mathematics-- 2 tambah 2 daripada pengendali ditambah dan kemudian dua hujah 2 dan 2. CONNOR HARRIS: Ia dipanggil berbalik notasi Poland, yang merupakan tempoh saya ragu-ragu mana-mana anda akan tahu. STEPHEN KREWSON: Betul. Songsang notasi menggilap atau awalan. Tetapi Haskell memutuskan untuk menggunakan operator infiks. Jadi ini adalah sebahagian daripada orang-orang adat yang ditakrifkan bagi Euterpea DSCL di Haskell. Jadi ini adalah komposisi berjujukan. Ini adalah komposisi yang sama, dan ini telah memendekkan komposisi selari. Dan kita perlu yang dengan mesin drum kami, kerana kita akan menggunakan yang terakhir operator yang tuple kecil di sana untuk bermain mesin dram bersama-sama dengan lagu Frere Jacques kami. Dan mesin drum kami adalah akan menjadi tak terhingga. Ia hanya bermain selama-lamanya. Tetapi lagu Frere Jacques tidak. Ia bukan yang panjang. Ia hanya beberapa bar. Oleh itu, kita perlu menghentikan mesin dram sebagai tidak lama lagi sebagai nilai muzik yang lebih pendek datang berakhir. Dan bahawa pengendali infixed adalah super membantu dengan itu. Dan notasi infiks seperti ini adalah jenis yang bagus, kerana mengatakan anda mempunyai fungsi seperti quote, yang memberikan bahagian integer x oleh sesuatu else-- maaf, yang perlu a dan b. Anda boleh menulis sebagai quote b. Jadi, jika anda adalah elemen put-- satu lagi contoh ini. x elemen dalam senarai beberapa, jika anda meletakkan dalam Backticks, anda boleh menggunakannya. Walaupun ia bukan simbol seperti tambah atau tolak atau masa, anda boleh menggunakan nama fungsi seperti itu dalam Backticks sebagai pengendali infiks, yang cukup sejuk. CONNOR HARRIS: Sekali lagi, ini adalah semua gula hanya sintaktik, benar-benar. Ia tidak menjejaskan teras bahasa. STEPHEN KREWSON: Oleh itu, kita lihat di sini untuk frasa terakhir lagu Frere Jacques kami, Saya bermain beberapa chords sedikit atau pertiga menggunakan komposisi selari operator. Ini adalah cara lain untuk mengatakan beberapa daripada apa yang kita baru sahaja berkata. Jadi, anda boleh memetakan fungsi satu hujah ke atas senarai. CONNOR HARRIS: Sekali lagi, rujukan buku teks pengenalan Haskell-- akan mempunyai semua ini di dalamnya. STEPHEN KREWSON: Jadi di sini adalah yang cukup garis utama sequencer langkah kami akan mengambil lihat menggunakan kefahaman senarai. Dan kita lihat di sini adalah elemen yang dalam pengendali tetap dalam petikan belakang. Jadi, jika x ialah unsur senarai x, maka kita akan memanggil fungsi perc. Jadi perc hanya fungsi perkusi. Ia mengambil sedikit p nilai yang sebahagian daripada set terbatas sekali bunyi perkusi yang berbeza yang kita lihat dalam slaid sebelumnya, dan kemudian ia memberikan yang tempoh not suku. Jika tidak, ia memberikan QNR dan QNR hanya rehat komen suku. Jadi ini adalah membina sesuatu yang baik. Kami mempunyai senarai elemen, dan kami akan gelung ke atas beberapa senarai dari satu kepada nilai maksimum langkah sequencer kami. Dan apabila kita berada di i tertentu dalam bahawa senarai satu hingga nilai max, jika itu i adalah ahli ini set dicipta dalam fungsi ini, dengan baik, maka kita mengubahnya ke dalam nota perkusi. Jika tidak, kita hanya bermain rehat, yang Dengan kata lain, kita hanya berdiam diri. Dan kita boleh lihat di sini bahawa dalam senarai ini kefahaman sintaksis, x dihuni oleh ini senarai dibina satu dengan saiz global sequencer. CONNOR HARRIS: Ya. Sintaks asas untuk comprehensions senarai adalah kurungan, nilai yang melibatkan beberapa pembolehubah, bar, nilai yang mungkin bagi pembolehubah diri mereka sendiri, ditutup kurungan. Dan jika anda telah melakukan set notasi pembina dalam apa-apa jenis kelas matematik, anda mungkin telah menetapkan 2n seperti yang n di dalam atau di n di z. Sama thing-- tatatanda ini yang dimaksudkan untuk menjadi tidak senonoh itu notasi matematik. STEPHEN KREWSON: Dan anda boleh memohon pelbagai predikat dan pelbagai penapis dalam senarai kefahaman, yang agak bagus. Algebra kita types-- tidak akan berlama-lama di sini. Tidak ada satu tanggapan yang baik dalam Haskell atau baik, idea yang jelas bagaimana untuk mengambil, berkata, lalai parameter kepada fungsi atau sesuatu. Dalam Python, ini adalah agak mudah. Anda hanya boleh mengatakan dengan sama pada pengisytiharan majlis itu, nilai lalai dalam kes tidak dibekalkan. Dalam Haskell, anda boleh mungkin menggunakan maybe maybe menaip, yang mengambil sama ada apa-apa atau nilai jenis hanya. Oleh itu, kita mengeksploitasi ini dalam mesin dram untuk membolehkan kita untuk memberikan pengeluaran pilihan parameter untuk setiap bahagian drum. Jadi yang memberikan kita satu cara untuk mempunyai EQ atau dagangan di saluran tertentu. CONNOR HARRIS: Dalam contoh Haskell lain, anda mungkin lihat mungkin digunakan untuk fungsi yang mungkin gagal. Ini adalah salah satu yang sama. STEPHEN KREWSON: Dan anda boleh membekalkan beberapa jenis mesej ralat sebagai lalai. Dan itu amat berguna apabila yang anda lakukan I / O dalam Haskell. Yang boleh menjadi helah. CONNOR HARRIS: Atau yang contoh yang serupa, berfikir sesuatu fungsi yang melibatkan pembahagian daripada parameter yang mungkin 0. Dan fungsi yang boleh kembali mungkin apa sahaja. Jadi, jika tidak ada pembahagian dengan 0, ia akan kembali hanya apa sahaja. Jika ada pembahagian dengan 0, ia akan kembali apa-apa sebagai cara untuk isyarat ralat. Kerana salah satu akibat daripada Menaip sangat ketat Haskell adalah bahawa tidak ada real-- Pengecualian adalah janggal, pada dasarnya, pengendalian ralat adalah janggal. Dan ini adalah satu yang sangat cara biasa melakukannya. STEPHEN KREWSON: Jadi sekarang kita mendapatkan kepada perkara minda-lentur lain tentang Haskell, yang merupakan corak yang hampir sama dan fungsi definisi. Aku membawa kepadamu dalam slaid terakhir pengisytiharan urutan langkah fungsi, yang mengambil nilai mungkin, kemudian int, maka senarai ints, kemudian kembali urutan nilai-nilai muzik di sana beranotasi dengan kedua-dua padang dan kelantangan. Jadi mereka tiga hujah boleh menjadi corak dipadankan dengan cara yang berikut. Dan kita sentiasa mahu pastikan melakukan kes asas atau kes keluar pertama. Inilah garis bawah hanya boleh ditafsirkan bermaksud apa-apa nilai yang ada di sana. Jadi, jika kita mendapat panggilan untuk melangkah urutan dengan beberapa nilai, beberapa nilai lain, dan senarai tersebut kosong, apa yang kita mahu untuk kembali hanya berdiam diri, rehat 0. Dan bukannya yang sebagai senarai main kosong atau 0, ia rehat 0, kerana kami berurusan dengan jenis muzik, dan senarai kosong muzik Jenis hanya sepanjang tiada tempoh. Bukan muzik. Dan kemudian kita lihat jika kita mendapatkan langkah yang urutan dengan v bagi hujah jumlah, p untuk instrumen langkah berjaga-jaga hujah, dan kemudian senarai x. Kemudian kami melakukan beberapa perkara. Khususnya, kami memohon ini kefahaman senarai, dan kami melaksanakan beberapa operasi pada mungkin nilai untuk mengubahnya menjadi nilai angka supaya ia boleh kemudian disebut satu persatu dan digunakan untuk memilih cara itu. Sekali lagi, ini adalah sedikit sedikit sengaja inconcise hanya untuk menunjukkan semua perkara yang pelik yang boleh anda lakukan dalam Haskell anda kita lihat pada masa anda sendiri. Baiklah. Jadi, kita akhirnya sampai ke melakukan apa yang kita ingin lakukan, yang membuat beberapa muzik komputer. Jadi, kita akan cuba untuk membuat lagu Frere Jacques. Jadi ada berapa ramai frasa dalam Frere Jacques? Empat. Yang besar. Dan apa yang baik adalah bahawa mereka semua berulang jumlah yang sama kali, yang dua. Oleh itu, kita mempunyai empat frasa setiap diulangi dua kali. Dan khususnya, mereka berada dalam satu pusingan. Dan terdapat banyak, banyak cara untuk melaksanakan pusingan yang boleh menjadi seronok untuk dilakukan. Saya telah melakukannya dalam cantik cara mudah di sini, yang hanya untuk construct-- barisan fungsi mengambil senarai nilai muzik dan bertukar ke dalam komposisi berurutan dengan menggunakan bahawa komposisi berurutan operator. Dan kemudian saya melambatkan bahagian yang berlainan dengan membuat mereka bermula dengan berehat. Jadi saya mulakan dengan rehat dua langkah, dan kemudian sepanjang empat langkah, dan kemudian rehat enam langkah-langkah, dan kemudian pusingan berfungsi, seperti yang kita semua tahu lagu ini. Kita melihat dua penjelasan atau pengubahsuaian nilai muzik yang terkandung dalam urutan ini susunan unsur-unsur muzik. Kami mempunyai jumlah add. Ini adalah satu fungsi untuk menganotasi muzik dengan jumlah tertentu. Ini adalah contoh yang baik daripada MIDI isyarat berjalan 0-127, tujuh bit maklumat yang boleh dibawa. Dan then-- kita lihat sangat secara ringkas, tetapi MIDI umum senarai semua instrumen yang berbeza. Dan tidak ada yang banyak daripada mereka. Jika anda menggunakan stesen kerja audio digital, seperti Ableton Live atau Tools Pro, terdapat pelbagai yang amat luas pensintesis dan instrumen VST. Tetapi standard MIDI sahaja mempunyai beberapa dozen, atau beberapa. Dan sebahagian daripada mereka adalah lucu. Saya fikir ia akan menjadi seronok jika kami bermain instrumen instrumen MIDI helikopter, dan kemudian Cara seterusnya melalui pusingan, kami melakukan Synth pad, dan kemudian daripada ini membawa cetek Synth gelombang persegi, dan kemudian selut suara, yang merupakan sedikit kurang jelas pada MIDI buruk saya pensintesis, tetapi mereka OK. Dan kemudian kita melihat let ini dan dalam sintaks dari Haskell, dan kemudian kita bermain semua anggota-anggota ini dengan operator komposisi selari. Dan kita mungkin boleh menunjukkan beberapa ini. Berikut adalah kod. Dan anda boleh lihat dalam C, ada akan menjadi banyak penjelasan tekak dan tetapan kod meja itu di hadapan anda boleh membuat muzik seperti ini. Atau mana-mana program lain bahasa, anda akan mungkin perlu berinteraksi dengan beberapa jenis perpustakaan atau API dan menetapkan segala-galanya, dan kemudian anda akan mempunyai untuk membersihkan. Tetapi di sini di Haskell, saya rasa, sekali anda biasa itu, sangat boleh dibaca dan sangat ekspresif. Jadi ada pelaksanaan daripada Frere Jacques. Baiklah. Sekarang kita ingin menambah perkusi, dan ini adalah Messier sedikit. Oleh itu, mari kita lihat pada slaid. Jadi idea yang besar adalah untuk membuat sekumpulan senarai atau bahagian. Pada mereka mesin roll-in, terdapat lazimnya kira-kira mungkin lapan 10 irama atau perkusi bahagian. Dan kemudian menggunakan sekumpulan teknik. Dan kita telah bercakap tentang these-- menggunakan lipatan, penapis, fungsi lambda, dipetakan ke atas senarai untuk menjana nilai-nilai dalam julat beberapa 1 hingga r, r ialah 16, atau 32 langkah-langkah dalam sequencer. Dan kemudian jika ada nilai dalam senarai itu seperti yang kita berjalan melalui sequencer, mengalir melaluinya berulang- lebih, ternyata pada masa yang sama, dan sampel yang mendapat dicetuskan. Berikut adalah semua cara yang pelik yang berbeza Saya datang dengan menjana nota. Cubalah atas jumlah semi anda sendiri. Ia akan berbunyi sejuk. Masa mengizinkan, kami akan pergi melalui ini. Tetapi untuk sekarang, saya rasa kita patut demo apa yang kita ada. Mari kita berharap ini pergi OK. Jadi ini adalah GHCI. Dan kita akan memuatkan fail Saya mempunyai dipanggil song.lhs, yang adalah fail yang saya hanya menunjukkan anda. OK, yang besar. Sebagai Connor katakan sebelum ini, disusun, ia menaip diperiksa, jadi saya boleh bernafas lebih mudah. Ia tidak akan meletupkan pada saya. Saya tidak mahu menunjukkan kepada anda sesuatu yang berguna. Anda boleh melihat bahawa modul dimuatkan dipanggil 50. Anda boleh menyemak imbas modul itu. Dan ini adalah begitu baik tentang doing-- mungkin apa yang anda lakukan dalam Haskell tidak dipanggil pembangunan perisian, tetapi anda boleh melakukan banyak perkara yang menyeronokkan pada anda sendiri. Dan aliran kerja yang benar-benar baik sebagai berbanding banyak bahasa yang lain, kerana anda boleh melihat dalam yang benar-benar cara yang boleh dibaca apa yang sedang berlaku. Oleh itu, kita melihat bahawa kita mempunyai semua frasa ini, yang merupakan senarai padang muzik, dan kemudian kita membina ini ke dalam sesuatu yang lebih besar, yang merupakan lagu muzik. Ia adalah satu unit muzik. Dan kemudian kita boleh bermain ini semua dengan fungsi dipanggil bermain muzik. Anda boleh melihat bahawa di sini. Yang hanya bermain. Saya perlu iaitu- saya tidak bercakap tentang tanda ini dolar yang mana-mana. Tanda dolar adalah satu lagi pengendali infiks. Tetapi ia mempunyai keutamaan yang paling rendah mana-mana pengendali, yang berkesan bermakna bahawa segala-galanya di sebelah kiri tanda dolar dan hak tanda dolar, kita akan untuk dinilai sebelum ia. Jadi ia adalah jenis seperti lain cara menambah kurungan. CONNOR HARRIS: Ia pada dasarnya Komposisi Bidang Tugas. Dan ia memastikan bahawa anda tidak ada-- jika anda mempunyai fungsi sama ada di sebelah atau memasang di antara pengusaha-mana pihak, mereka tidak akan mengaitkan merentasinya dan memberi anda keputusan yang tidak dijangka. STEPHEN KREWSON: Oleh itu, kita can-- menggunakan itu, kita boleh memanggil. Pertama, kami akan bermain tanpa gendang. Itulah helikopter, helikopter MIDI. [Bermain muzik] Ada gelombang persegi. Selut suara. Dan anda benar-benar boleh pergi liar dengan ini. Saya mengambil satu yang cukup mudah, kerana saya tahu saya tidak boleh menggigit lebih daripada saya boleh mengunyah. Hanya menyimpan ia agak mudah untuk menunjukkan idea-idea utama. Tetapi kemudian saya adalah seperti, kami telah perlu menambah beberapa gendang untuk ini. Hanya kerana ini adalah satu sedikit tidak dapat ditembusi, dan saya tidak menggunakan menamakan bahagian drum, Saya dipetakan mereka, kelak kerana mereka sebahagian daripada kelas yang disebut satu persatu, Saya dipetakan mereka untuk ints. Satu adalah seperti drum bass. Zero adalah juga. Tujuh adalah topi yang tinggi. Dan ke bawah di sini di mana Fungsi mendapatkan sedikit lebih rawak, ini adalah seperti gendang conga. Jadi, jika anda berfikir about-- mungkin satu Cara yang menyeronokkan untuk melaksanakan mesin dram adalah dengan menggunakan sangat teratur corak pada drum bass anda. Jadi misalnya, pada penapisan ke atas senarai dengan semua yang memberikan kembali 1 apabila ia mengambil modul 04. Jadi saya dapat 1, 5, 9, 13, 17-- jadi ini adalah denyutan pertama setiap langkah. Dan maka ini adalah sama Perkara yang beralih dari dua langkah. Jadi itulah offbeat. Jadi ini akan menjadi sesuatu seperti topi yang tinggi. Dan sekali lagi, turun di sini, ia sedikit rawak, kerana kita lakukan drum conga. Dan saya mempunyai beberapa maracas turun di sini, juga. Jadi saya boleh memanggil bermain mesin drum, tetapi ia akan berterusan selama-lamanya, dan ia mungkin mula jarahan semua memori dalam sistem saya. Jadi saya akan memanggil fungsi ini bermain muzik, yang seperti yang kita akan lihat, menggunakan komposisi selari memendekkan untuk bermain sedikit lagu Frere Jacques kami bersama-sama dengan ini mesin dram pelik. Jadi mari kita lihat. Dan jangan memperbaiki saya susunan semua bahagian-bahagian drum. Tidak khusus saya, tetapi saya mempunyai banyak keseronokan melakukannya. [Bermain muzik] Jadi, sudah tentu, ini adalah semua sedikit tidak sebagai menyeronokkan jika kita tidak boleh menukar untuk skor yang jadi mungkin ia boleh ditafsirkan oleh pelaku manusia. Jadi saya tidak akan berjalan di sini. Saya telah dijana fail. Anda boleh melihat bahawa ada dot GNU LilyPond file-- dan ini akan Shalawat saya kepada Connor-- dan fail dot MIDI, dan fail dot PDF, yang adalah apa yang GNU LilyPond akhirnya akan menjana. Tetapi ini adalah mereka skrip, dan saya akan hanya menjalankan mereka dengan pilihan bantuan mereka. Jika anda mendapatkan ini dan berjalan dengan Euterpea, anda boleh menjana fail MIDI. Dan kemudian dari fail MIDI dengan program MIDI 2LY ini, anda boleh menjana Lily Fail Pond, dan kemudian anda boleh menjana fail PDF bagi skor. Dan kita perlu mengambil lihat di ini. Jadi Connor mungkin akan menunjukkan anda bagaimana untuk menganotasi ini lebih baik, tetapi ini adalah Frere Jacques sebagai yang dihasilkan oleh saya di Euterpea. Ia hanya dalam C. Saya sepatutnya digambarkan apa hack ia sebenarnya masuk. Tetapi itu adalah perancangan untuk bagaimana anda melakukannya dengan itu. Mari kita bercakap lebih lanjut mengenai GNU LilyPond. CONNOR HARRIS: OK Mari kita lihat. Adakah anda menyebut Belajar Anda Haskell? STEPHEN KREWSON: Oh yeah. Semak Belajar Anda Haskell. Ada dalam sumber. Itulah bagaimana saya mula pembelajaran, dan ia adalah besar. Pembelajaran tidak dalam keadaan sihat. CONNOR HARRIS: Jadi ia dalam talian. Jadi seorang lelaki bernama [didengar] learnyouahaskell.com, tiada ruang. Tatabahasa sakit. STEPHEN KREWSON: Ia digambarkan juga. CONNOR HARRIS: Jadi apa yang GNU LilyPond? Ia adalah satu program perisytiharan bahasa untuk muzik atur huruf. Jadi declarative-- anda boleh memikirkan perkara-perkara seperti HTML, di mana anda tidak saying-- HTML tidak mengatakan bagaimana pelayar web perlu memaparkan halaman langkah demi langkah. Ia hanya mengatakan ini adalah keterangan teks apa yang anda mahu halaman untuk kelihatan seperti. Dan kemudian ia juga program yang menghimpunkan bahasa ini, atau ia dibaca dan kemudian benar-benar tidak atur huruf untuk anda, dan ia memuntahkannya keluar ini indah skor PDF mencari. Anda juga boleh mendapatkan format PNG atau apa sahaja. Cara yang baik untuk berfikir ini adalah dengan analogi adalah bahawa LaTeX adalah jenis seperti LillyPond, tetapi hanya atur huruf biasa. Jadi, daripada daripada- ia bukan WYSIWYG, Apa yang Anda Lihat Itulah Yang Anda Dapat, seperti, katakan Finale, atau Sibelius, atau Microsoft Word, di mana anda boleh masuk ke dalam masa sebenar dan draf perkara dalam masa sebenar dan melihat perubahan serta-merta. Ia berasaskan teks. Anda perlu menyusun anda skor menggunakan program yang berasingan dan keluar PDF kemudian. Ini adalah sedikit kurang mudah untuk digunakan jika anda cuba untuk menulis terus ke dalam skor yang dan anda cuba untuk mengarang pada komputer. Tetapi ada banyak kelebihan untuk itu. Satu, ia kelihatan lebih bagus, kerana LillyPond boleh sebenarnya mengambil masa untuk melakukan keputusan susun atur dengan betul, tidak seperti Sibelius atau Finale, yang mempunyai untuk membuat algoritma dikompromi supaya bahawa mereka boleh memaparkan perkara-perkara dalam masa sebenar. Jadi mengapa LilyPond-- grafik komputer adalah sukar. Jika anda melakukan apa-apa dengan muzik dan anda ingin menulis skor, anda tidak mahu menulis segala-galanya sendiri bermula dengan bagaimana untuk menarik kakitangan dan bagaimana untuk menarik pad nota. Ia amat sukar. Ia telah dilakukan sebelum ini. Anda halus. Jika anda mahu menggunakan Finale atau Sibelius, format fail untuk perkara-perkara sangat rumit, dan anda tidak boleh benar-benar menggunakannya pengaturcaraan. Anda boleh membuka Sibelius dengan Finale dan pergi ke Fail, Eksport sebagai PDF diri sendiri, tetapi anda tidak boleh benar-benar memanggil bahawa dari skrip. LillyPond, anda boleh menghubungi dari orang-orang skrip. Anda boleh dengan mudah melelar LillyPond dengan LaTeX. Saya tidak akan mempunyai banyak masa untuk pergi ke dalam teknologi ini sekarang, tetapi mereka wujud. Jika anda mahu melihat dalam satu buku LillyPond, ia adalah satu program yang datang dengan pengedaran LillyPond anda, dan ia untuk iterating Serpihan LillyPond ke dalam LaTeX jika anda mahu melakukan sesuatu seperti dokumen ilmu musik besar dengan contoh-contoh, sebagai contoh. Dan ia adalah satu kemahiran yang baik untuk hidup jika anda melakukan apa-apa dengan muzik, bukan hanya CS50. Saya telah menggunakan LillyPond untuk semua projek komposisi saya kerana saya adalah pada dasarnya kanan di sekolah tinggi. Jadi di sini adalah beberapa contoh yang mudah. Ini adalah pada dasarnya wakil tahap kesukaran bahawa kebanyakan orang akan hadapi itu mereka cuba menggunakan GNU LilyPond untuk projek-projek yang mudah. Ini pertama adalah mulanya untuk permulaan nyanyian untuk paduan suara oleh Bach. Ini salah satu bahagian bawah adalah petikan daripada salah satu daripada kerja-kerja saya sendiri, dan ia hanya di sana untuk menunjukkan kamu perkara-perkara seperti [didengar] meletakkan banyak baris dalam yang sama kakitangan, bagaimana lirik undersetting berfungsi. Underlays Lyric adalah satu perkara yang amat mudah untuk digunakan GNU LilyPond untuk muzik paduan suara. Dan demikian maka ada beberapa lagi contoh rumit di sini. Semua ini dilakukan dalam GNU LilyPond dan mereka boleh dilaksanakan. Ini petikan pertama adalah dari [Didengar] oleh [didengar]. Dan ini [didengar] dari sekeping untuk bass solo seruling oleh [didengar], yang longtime-- yang yang adalah seorang ahli lama daripada jabatan muzik di sini, saya fikir. Saya tidak pasti di mana dia pergi ke luar. Tetapi dia adalah penasihat Harvard Persatuan Penggubah untuk masa yang lama. Lelaki yang baik. Dan dia menulis beberapa muzik yang mempunyai sangat notasi rumit yang LillyPond masih boleh mengendalikan sangat baik. Jadi hanya untuk memberi anda rasa apa keupayaan ini perkara ini ialah- supaya mengenai dalaman LillyPond sangat rumit. Dan anda boleh menggunakannya untuk masa yang lama, termasuk untuk beberapa agak rumit perkara, tanpa benar-benar perlu tahu banyak tentang mereka. Tetapi idea asas adalah bahawa pada tahap paling rendah, atom LillyPonds adalah nota. Nota-nota yang mengandungi konteks dipanggil suara. Jadi konteks suara pada dasarnya sepadan untuk satu baris terdiri dr. Dan kemudian konteks boleh terkandung hierarki dalam sekali di peringkat yang lebih tinggi yang mewakili kakitangan kepada skor atau kumpulan yang lebih besar seperti kakitangan piano atau kakitangan koir, dan kemudian akhirnya keseluruhan konteks skor. Dan anda sebenarnya boleh merangkumi pelbagai skor dalam buku. Dan setiap konteks mempunyai beberapa engravers dilampirkan. Jika anda melihat melalui kandungan konteks yang dan mencetak simbol tertentu atau kelas tertentu simbol seperti yang diperlukan. Jadi untuk setiap konteks suara, ada [didengar] nota pengukir yang pada dasarnya fungsi atau objek yang menulis semua nota kepala di bahagian kanan halaman. Kemudian ada seorang pengukir rekah, yang menulis di clefts pada kakitangan. Kemudian ada metronom tanda pengukir yang menulis daripada markah metronom dalam skor. Dan semua ini patut cantik baik ke dalam hierarki. Dan ia sangat, sangat, sangat disesuaikan, yang anda perlukan jika anda mahu untuk mendapatkan perkara yang seperti itu. Jadi semua konteks mempunyai banyak ciri-ciri yang berbeza bahawa anda boleh mengubah suai untuk segala-galanya dari jarak kepada pelbagai font pemilihan untuk saiz perkara. Jika anda ingin melakukan lebih perkara yang lebih rumit, terdapat satu bahasa skrip yang tertanam. Mereka menggunakan skim, yang adalah dialek LISP. Ini mungkin tidak bermakna apa-apa kepada anda. Tetapi pada dasarnya, skim lain berfungsi bahasa pengaturcaraan, lebih atau kurang. STEPHEN KREWSON: Kerjasama masuk. CONNOR HARRIS: Ya. Ia adalah kerjasama dalam yang baik, saya rasa. Dan ia digunakan sebagai bahasa pengajaran, sebenarnya, turun Mass Ave. Di MIT. Dan ia sangat berguna untuk LillyPond untuk pelbagai sebab-sebab teknikal. Dan jadi jika anda ingin mudah tweak bergantung kepada conditional, untuk example-- ada tertentu keadaan skor yang yang yang dipenuhi, membuat apa-apa perubahan kepada susun atur atau whatnot-- kemudian kemudahan orang berada di sana. Mereka rumit. Jadi di sini adalah sampel kod agak mudah. Ia adalah lima baris. Pada asasnya, saya mendefinisikan dua kakitangan. Ada dalam 3/4. Kakitangan pertama mempunyai dilampirkan tanda tempo, tetapi itu sebenarnya akan untuk pergi ke seluruh skor, kerana tanda tempo berada di tahap skor. Tanda metronom pengukir dilampirkan untuk menjaringkan konteks. Ada kunci yang berbeza, kerana [didengar] pengukir dilampirkan kakitangan. Anda sebenarnya boleh lakukan ialah. Sampel yang saya tulis adalah sebenarnya dalam C utama, tetapi ia hanya untuk menunjukkan anda boleh mempunyai kunci yang berbeza dalam kakitangan yang berbeza. Dan sintaks asas anda menulis ambil perhatian nama dengan E, F, G, apa sahaja. Jika anda mahu lakukan Terkadang, anda akhiran IS atau ES. Ini adalah dari Belanda konvensyen musicological. Dan untuk melakukan lompatan oktaf, anda perlu menggunakan ini semak markah, koma atau koma. Relatif hanya bermakna apa sahaja yang anda mempunyai nota, ia secara automatik akan plaec dalam oktaf yang paling dekat dengan yang sebelumnya. Dan jika anda mahu untuk melompat lebih daripada yang fifth-- mengatakan kelima atau more-- maka anda perlu menggunakan [didengar]. Tetapi jika tidak, anda tidak perlu menentukan oktaf setiap nota tunggal. Dan relatif C, perdana, dan C, anda hanya nyatakan pertengahan C dan asas C, nota terutamanya pertama. Kemudian anda mempunyai kakitangan ini yang menganjurkan kedua-dua suara atau sampel muzik, dan anda mempunyai skor. Dan yang kelihatan seperti ini. Jika anda ingin mengambil masa untuk menyalin bahawa sampel LillyPond kod pada sebelumnya slaid ke bawah di sini, dan anda boleh menulis untuk LillyPond diri sendiri. Saya tahu bahawa kita telah mendapat sesuatu yang kelihatan banyak seperti ini. Jadi ada teknologi lain dipanggil Muzik XML dikekalkan oleh orang yang sama sekali berbeza. XML adalah data teks structure-- Saya tidak boleh mengatakan data structure-- mengatakan peta jenis metafora. Dan ia direka untuk memegang data hierarki dengan baik. HTML, sebagai contoh, adalah sejenis XML. Dan anda boleh memberitahu XML kerana mereka mempunyai semua kurung sudut dan sudut tanda kurungan slash bahawa medan persembahan data. Saya tidak mempunyai kod contoh dari Muzik XML. Anda boleh mencari sendiri. Pada asasnya, sebab anda mungkin mahu menggunakan XML sebagai peringkat pertengahan adalah, pertama sekali, ia adalah format pertukaran untuk dasarnya every-- saya tidak perlu mengatakan setiap, tetapi banyak skor yang berbeza penulis. Jadi, jika anda menulis dalam Muzik XML, bukan sahaja boleh LillyPond membacanya dengan bantuan auxilary ini program dipanggil Muzik XML untuk LY, tetapi juga Finale boleh membaca ia, Sibelius boleh membacanya. Bergantung kepada bagaimana objek dalaman anda hierarki kerja-kerja untuk mewakili muzik, ia mungkin lebih mudah untuk menulis untuk Muzik XML daripada LillyPond dan hanya bergantung kepada Muzik XML untuk LY untuk membuat penukaran. Saya tidak fikir [didengar] mempunyai Muzik XML. STEPHEN KREWSON: Ia tidak. Seseorang sedang bekerja di atasnya, walaupun. CONNOR HARRIS: OK. Euterpea tidak mempunyai Muzik XML output fungsi lagi. Jika anda mahu idea projek akhir, mungkin berhubung dengan seorang lelaki Stephen yang tahu, dan mereka boleh menggunakan bantuan anda. STEPHEN KREWSON: Saya suka bahawa. CONNOR HARRIS: Juga, pada dasarnya, setiap bahasa pengaturcaraan yang bernilai garam sudah mempunyai perpustakaan XML, supaya anda secara dalaman boleh menukar semua muzik anda ke dalam beberapa objek perpustakaan XML boleh menulis keluar yang memerlukan lebih sedikit apa-apa perubahan kepada struktur dalaman anda untuk apa sahaja objek muzik anda mahu menulis daripada menulis ia secara langsung dalam LillyPond akan. Kemudian hanya mencetak dengan XML dengan perpustakaan XML dalam bahasa anda, yang akan menjamin bahawa itu sintaksis betul dan segala-galanya, dan kemudian menukar kepada LillyPond. Jadi teknologi anda mungkin mahu melihat ke dalam jika anda melakukan sesuatu macam ini. [Didengar], satu lagi teknologi auxilarry. Ini adalah pada dasarnya Tech Works atau Tech Studio untuk LillyPond. Oleh itu, ia menawarkan bantuan dengan sintaksis, dengan template untuk pelbagai biasa kombinasi instrumen. Ia membolehkan skrin berpecah melihat supaya anda boleh mempunyai kod anda dalam satu tetingkap dan PDF di tetingkap lain dan klik pada tempat yang dalam bentuk PDF untuk melompat ke yang berkaitan tempat dalam kod sumber anda. Ini adalah lebih berguna jika anda benar-benar bertulis LillyPond fail diri daripada jika anda menjana mereka pengaturcaraan. Tetapi sekali lagi, ia sesuatu yang berguna untuk mempunyai. Yang besar. Satu lagi resources-- saya akan hanya pergi melalui ini dengan cepat. LillyPond manuals-- LillyPond mempunyai dokumentasi yang sangat baik di laman webnya. Mereka mempunyai tutorial. Mereka mempunyai rujukan sintaksis. Mereka mempunyai beratus-ratus coretan untuk pelbagai perkara-perkara kecil yo mungkin perlu lakukan untuk menunjukkan pelbagai keupayaan. Jika anda mahu menggunakan bahasa skrip yang atau membuat yang lebih luas penyesuaian, kemudian ada dalaman rujukan di URL itu. Jika anda mahu menggunakan Muzik XML, ada bahawa URL, musicxml.com/tutorial. Dan kemudian jika anda perlu belajar skim kerana anda benar-benar mahu menggunakan kemudahan skrip dalam LillyPond, kemudian ada yang [didengar] dipanggil Tafsiran Berstruktur Program komputer, yang bukan sahaja kedua pilihan CS buku teks pernah written-- mencari saya selepas itu jika anda ingin tahu apa yang saya fikir pilihan satu is-- yang tetapi ia juga yang sangat baik pengenalan kepada bahasa yang betul. Anda tidak akan memerlukan lebih daripada beberapa bahagian pertama. Dan itu sahaja. Ada soalan? PELAJAR: Di mana saya boleh memuat turun anda Frere Jacques dihasilkan jadi saya boleh meletakkannya di iPod saya? STEPHEN KREWSON: Sebenarnya, anda boleh menulis ke suatu fail wav dalam Euterpea. Dan anda mempunyai kod. Ia pada GitHub. Membuat variasi anda sendiri Frere Jacques oleh CS50 minda sarang. Ia akan menjadi besar. CONNOR HARRIS: Sesiapa yang berlainan? STEPHEN KREWSON: Kita perlu bass drum yang lebih baik juga. Ia benar-benar buruk. PELAJAR: Euterpea mempunyai bukan sahaja sebelah komposisi, tetapi signal-- STEPHEN KREWSON: Ya. Malah, kerja-kerja saya lakukan pada Euterpea apabila saya mengambil this-- ada lulus kursus di Yale yang menggunakan kitab itu sedang dalam sintesis bunyi. Jadi ada yang benar-benar cara yang baik dengan menggunakan anak panah dan beberapa notasi yang kita lihat daripada mengarang bersama-sama fungsi isyarat. Khususnya, bass bagi kebanyakan daripada mereka adalah hanya gelombang sinus mudah. Tetapi jika anda mula mengarang mereka dengan cara perancangan pelik, anda boleh mendapatkan bunyi gila kesan, seperti lata pelik. Anda boleh membuat sangat cekal bunyi dengan banyak modulasi. Saya melakukan projek pada berbutir sintesis, iaitu suatu tempat di antara FM dan persampelan. Anda mengambil sangat kecil, sampel sedikit, dan kemudian menggabungkan mereka dengan sejenis modulator dan membina bunyi yang lebih kaya. Kami juga melakukan pemodelan fizikal, jadi cuba untuk berfikir tentang fizik dan psychoacoustics sesuatu seperti sangkakala, dan berfikir tentang cara bunyi itu memantul dari loceng sangkakala dan akustik bilik dan pemodelan bahawa dengan pengayun asas. CONNOR HARRIS: Terima kasih banyak. Terima kasih kerana datang. Dan saya sentiasa bersedia untuk mengambil soalan oleh email-- connorharris@college.harvard.edu. STEPHEN KREWSON: Ya. stephen.krewson@yale.edu. Sejuk.