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 Ako Connor Harris. 4 00:00:06,820 --> 00:00:09,729 Ako ay CS50 CA sa Harvard. 5 00:00:09,729 --> 00:00:11,270 STEPHEN KREWSON: Ako Stephen Krewson. 6 00:00:11,270 --> 00:00:12,582 Ako TF para sa CS50 sa Yale. 7 00:00:12,582 --> 00:00:15,790 CONNOR HARRIS: At kami ay pagpunta sa makipag-usap tungkol sa ilang mga teknolohiya na maaari ka 8 00:00:15,790 --> 00:00:18,880 nais mong gamitin sa kung interesado ka sa paggawa ng isang pangwakas na proyekto o talagang 9 00:00:18,880 --> 00:00:20,920 anumang bagay na may musika. 10 00:00:20,920 --> 00:00:24,400 Kami ay pagpunta sa ay nagbibigay-diin sa unang isang programming language na tinatawag Haskell. 11 00:00:24,400 --> 00:00:26,280 Ito ay isang functional wika, kaya ang tularan 12 00:00:26,280 --> 00:00:29,620 ay ibang-iba mula sa C o PHP o iba pang mga kinakailangan mga wika 13 00:00:29,620 --> 00:00:33,450 na ginamit mo na, at lalo na sa isang library na nakasulat sa Haskell 14 00:00:33,450 --> 00:00:40,240 tinatawag Euterpea, na maaaring makatulong sa mga tao sa pagsusulat ng musika pagtakbo, 15 00:00:40,240 --> 00:00:40,780 talaga. 16 00:00:40,780 --> 00:00:43,400 At si Esteban ay ituturo sa iyo sa pamamagitan ng isang mahusay na halimbawa ng na. 17 00:00:43,400 --> 00:00:46,423 >> Pagkatapos nito, makikita ba kitang ipakilala sa isang bagay na tinatawag LillyPond, na 18 00:00:46,423 --> 00:00:48,370 ay isang teknolohiya para sa typesetting music. 19 00:00:48,370 --> 00:00:50,830 Ito ay uri ng tulad ng LaTeX para sa musika kung anuman sa iyo 20 00:00:50,830 --> 00:00:57,530 may ginagamit LaTeX para sa mga klase sa matematika o iba pang P set klase o kung ano ang mayroon ka. 21 00:00:57,530 --> 00:01:00,440 At kaya Bibigyan kita, muli, ang ilang mga simpleng halimbawa ng mga na 22 00:01:00,440 --> 00:01:03,640 at ituro sa iyo sa pangkalahatan direksyon ng ilang mas mahusay na mga mapagkukunan. 23 00:01:03,640 --> 00:01:04,319 >> STEPHEN KREWSON: In Bilang karagdagan, naisip namin na ito 24 00:01:04,319 --> 00:01:06,720 magiging cool upang i-set up isang maliit na piraso ng mga pahiwatig 25 00:01:06,720 --> 00:01:10,780 patungo sa isang tubo sa pagitan ng Euterpea-generated Midi file 26 00:01:10,780 --> 00:01:13,910 sa LillyPond, kaya nagbibigay kami ang ilang mga pagtuturo sa mga script 27 00:01:13,910 --> 00:01:16,310 upang gawin iyon na ibinigay sa LillyPond 28 00:01:16,310 --> 00:01:19,160 lamang panatilihin ito open source at makakuha ng isang pipeline ng pagpunta. 29 00:01:19,160 --> 00:01:20,910 CONNOR HARRIS: Muli, dapat naming bigyang-diin, 30 00:01:20,910 --> 00:01:23,100 mga ito ng dalawang mga teknolohiya, ikaw ay Hindi mo na kailangang gamitin ang mga ito nang magkakasama. 31 00:01:23,100 --> 00:01:25,370 Hindi sila ay dinisenyo upang gumana sama-sama, kahit na gawin nila sa lalong mabuti. 32 00:01:25,370 --> 00:01:26,362 >> STEPHEN KREWSON: Kanan. 33 00:01:26,362 --> 00:01:30,116 At talagang libre. 34 00:01:30,116 --> 00:01:32,240 CONNOR HARRIS: So Pasasalamat, basahin lamang na. 35 00:01:32,240 --> 00:01:33,406 STEPHEN KREWSON: Gaya ng nararapat nabanggit. 36 00:01:33,406 --> 00:01:36,360 Salamat sa mga kamag-anak. 37 00:01:36,360 --> 00:01:39,180 Ito Kukunin ko nagtatagal sa lamang sa isang sandali. 38 00:01:39,180 --> 00:01:41,560 Ang proseso ng pag-install ay isang maliit na bit mapanlinlang. 39 00:01:41,560 --> 00:01:45,420 Kami ay isang read ako sa GitHub na maaari mong tingnan sa. 40 00:01:45,420 --> 00:01:47,840 Mag-email lang sa akin kung mayroon kang anumang mga katanungan. 41 00:01:47,840 --> 00:01:52,829 Ngunit kami ay tumakbo na ito sa ilalim ng mga palagay na ito ay gumagana para sa lahat ng tao. 42 00:01:52,829 --> 00:01:55,620 CONNOR HARRIS: At kung ikaw ay hindi maaaring makakuha LillyPond sa trabaho, hindi sang-ayon. 43 00:01:55,620 --> 00:02:00,139 Walang mga live na compilation na ay kasangkot, hindi bababa sa aking pagtatapos. 44 00:02:00,139 --> 00:02:02,930 STEPHEN KREWSON: Haskell at LillyPond dapat pareho kayong may mga installer. 45 00:02:02,930 --> 00:02:08,497 Euterpea ay nai-download bilang package, kaya sa at iba pa. 46 00:02:08,497 --> 00:02:10,080 Kaya pinag-uusapan natin ang tungkol sa computer na musika. 47 00:02:10,080 --> 00:02:12,990 At ito ay lamang ng isang very view ng 50,000-foot. 48 00:02:12,990 --> 00:02:15,700 Mayroong ilang iba't-ibang mga aspeto ng mga ito. 49 00:02:15,700 --> 00:02:18,120 At ito ay hindi pantay na lupa at ito ay pagpunta sa makaharang sa ilang mga detalye. 50 00:02:18,120 --> 00:02:22,090 Ngunit kami ay maaaring sa tingin ng isang bagay tulad ng algorithmic komposisyon, 51 00:02:22,090 --> 00:02:24,920 gamit ang algorithm, gamit ang code, upang bumuo ng 52 00:02:24,920 --> 00:02:30,280 ilang uri of-- marahil ng isang self-katulad pagkakasunod-sunod ng mga tala, o marahil tala 53 00:02:30,280 --> 00:02:33,330 sa ilalim ng ilang pagpilit. 54 00:02:33,330 --> 00:02:35,350 At pagkatapos ay ang mga maaaring maging ginanap o wangis 55 00:02:35,350 --> 00:02:38,390 sa analog instrumento o anumang bagay na tulad ng. 56 00:02:38,390 --> 00:02:42,010 Ngunit ang komposisyon ay tapos algorithm. 57 00:02:42,010 --> 00:02:45,120 >> Pero siyempre, siguro sa lugar ng computer na musika o mga digital na musika 58 00:02:45,120 --> 00:02:48,870 kami ay mas pamilyar sa ay digital sound synthesis o digital sampling 59 00:02:48,870 --> 00:02:51,160 at mga digital na-record. 60 00:02:51,160 --> 00:02:55,650 Ang isang pulutong ng mga digital na instrumento ay gawin sa pamamagitan ng digital sampling. 61 00:02:55,650 --> 00:03:00,110 Sa katunayan, kami ay magiging gamit ang isa sa mga nasa sa anyo ng isang sound library font mamaya. 62 00:03:00,110 --> 00:03:02,850 >> Ngunit mayroon ding isang bagay na tinatawag na digital synthesis na nagmula sa labas 63 00:03:02,850 --> 00:03:08,650 ng late '70s at sa' 80s sa Yamaha at John Chowning sa Stanford 64 00:03:08,650 --> 00:03:11,990 ginagawa FM pagbubuo o Dalas modulasyon synthesis, 65 00:03:11,990 --> 00:03:15,100 kung saan mo ay nagkaroon ng isang carrier signal at isang modulating signal 66 00:03:15,100 --> 00:03:18,270 parehong sa audio spectrum. 67 00:03:18,270 --> 00:03:22,570 Ngunit kung ano ang kami ay nakatutok sa araw na ito ay isang bagay na tinatawag MIDI, 68 00:03:22,570 --> 00:03:25,040 at siyempre, algorithmic komposisyon. 69 00:03:25,040 --> 00:03:30,940 >> Hindi namin pagpunta upang gumawa ng mga instrumento, ngunit sa halip kami ay pagpunta sa gumawa ng ilang musika, 70 00:03:30,940 --> 00:03:33,940 at pagkatapos na makakuha ng naisalin sa pamamagitan ng ilang mga instrumento na 71 00:03:33,940 --> 00:03:38,300 mga conformant sa pangkalahatang MIDI standard. 72 00:03:38,300 --> 00:03:40,830 Kaya kung ano ang MIDI? 73 00:03:40,830 --> 00:03:45,550 Hindi ako pupunta upang makakuha ng masyadong malalim sa mga ito, ngunit MIDI ay ang data transfer protocol. 74 00:03:45,550 --> 00:03:49,250 Ito ay isang uri ng isang gabay sa kabuuan iba't-ibang mga kompanya at industriya 75 00:03:49,250 --> 00:03:52,250 para sa pag-aayos ng mga tunog o mga patch. 76 00:03:52,250 --> 00:03:54,170 Kaya makikita namin makita na mayroong isang standard MIDI 77 00:03:54,170 --> 00:03:57,500 para sa lahat ng iba't ibang percussion tunog at MIDI rekomendasyon 78 00:03:57,500 --> 00:04:01,360 para sa lahat ng iba't ibang uri ng synth o iba't ibang uri ng lahat ng mga instrumento 79 00:04:01,360 --> 00:04:03,650 mga pangkat sa isang orkestra, sabihin. 80 00:04:03,650 --> 00:04:08,916 >> Ikaw ay malamang na pamilyar sa 0 hanggang 127 MIDI mensahe. 81 00:04:08,916 --> 00:04:12,920 A signal MIDI ay kadalasang isa bit na nagpapahiwatig 82 00:04:12,920 --> 00:04:16,130 kung ito ay isang data o isang status packet, at pagkatapos ay mayroong 83 00:04:16,130 --> 00:04:18,589 pitong mga piraso ng isang signal. 84 00:04:18,589 --> 00:04:21,430 At ang mga ito ay maaaring kontrolin lahat mula sa dami 85 00:04:21,430 --> 00:04:25,330 sa pagkilos o presyon sa isang partikular na key 86 00:04:25,330 --> 00:04:29,400 kung ikaw ay gumaganap na may isang MIDI controller bilang pati na rin, siyempre, 87 00:04:29,400 --> 00:04:31,250 mga tala. 88 00:04:31,250 --> 00:04:33,450 At siyempre, MIDI ay ay lubhang kapaki-pakinabang, 89 00:04:33,450 --> 00:04:37,550 dahil sa ito ay isang paraan upang wire sama-sama o daisy chain 90 00:04:37,550 --> 00:04:41,570 ng grupo ng mga MIDI aparato ng hardware. 91 00:04:41,570 --> 00:04:44,050 Mayroon akong pito o walong pabalik sa aking bahay. 92 00:04:44,050 --> 00:04:46,610 Ito ay makakakuha ng tunay na kumplikado, ngunit ito ay talagang malakas. 93 00:04:46,610 --> 00:04:47,460 At ito ay tunay na gulang. 94 00:04:47,460 --> 00:04:51,117 Ito ay mula sa unang bahagi ng '80s, at ito ay talagang maganda at maliit. 95 00:04:51,117 --> 00:04:51,950 CONNOR HARRIS: Oo. 96 00:04:51,950 --> 00:04:54,230 Lahat ng mga klasikong nintendo video games ay marahil 97 00:04:54,230 --> 00:04:56,088 Mayroon Midi file para sa musika, halimbawa. 98 00:04:56,088 --> 00:04:59,550 99 00:04:59,550 --> 00:05:01,740 >> STEPHEN KREWSON: Narito ang isang halimbawa ng pangkalahatang MIDI, 100 00:05:01,740 --> 00:05:06,520 Ipinapakita MIDI bilang isang uri ng pangkalahatang protocol. 101 00:05:06,520 --> 00:05:13,280 At sa tingin ko maaari naming isipin ng mga pagkakaiba sa pagitan ng ang mga detalye 102 00:05:13,280 --> 00:05:17,830 na dapat ay isang bagay na tulad doon mga tunog ng instrumento at ang aktwal na 103 00:05:17,830 --> 00:05:21,740 pagsasakatuparan ng mga instrumento ng tunog sa isang sound font o isang partikular na MIDI 104 00:05:21,740 --> 00:05:25,740 synthesizer bilang ng mga pagkakaiba pagitan siguro ng typeface-- na nagsasabing, 105 00:05:25,740 --> 00:05:30,350 sa pangkalahatan, ito ay ang disenyo ng ang partikular na paraan upang kumatawan 106 00:05:30,350 --> 00:05:35,907 characters-- at isang partikular na font na may isang tiyak na laki at uri ng tono, 107 00:05:35,907 --> 00:05:37,240 at mayroong pagsasakatuparan ng the-- 108 00:05:37,240 --> 00:05:39,156 >> CONNOR HARRIS: Maaari isang mas mahusay na paghahambing ng gagawin 109 00:05:39,156 --> 00:05:43,430 ang watawat Unicode says-- ito ay nagbibigay sa isang numero sa bawat karakter, at talagang 110 00:05:43,430 --> 00:05:46,830 lahat ng wika sa mundo, o sa isang malawak na hanay ng mga script ng mga wika 111 00:05:46,830 --> 00:05:51,310 sa mundo, at pagkatapos ay ang mga ito ay render sa isang bagay na graphical 112 00:05:51,310 --> 00:05:53,710 sa pamamagitan ng iba't-ibang mga pakete font. 113 00:05:53,710 --> 00:05:56,630 At malinaw naman, maaari mong isipin MIDI bilang Unicode ng tunog. 114 00:05:56,630 --> 00:06:03,250 At ito ay isang listahan lamang of-- isang malaking stream ng mga kaganapan at mga instrumento at watnat, 115 00:06:03,250 --> 00:06:06,090 at kailangan mong magkaroon ng isang hiwalay na programa, tulad ng isang typeface, 116 00:06:06,090 --> 00:06:08,537 upang mag-render na sa isang bagay na naririnig. 117 00:06:08,537 --> 00:06:12,360 118 00:06:12,360 --> 00:06:13,780 >> STEPHEN KREWSON: Kaya bakit Haskell? 119 00:06:13,780 --> 00:06:19,110 Haskell ay isang functional programming wika, napaka-advanced, 120 00:06:19,110 --> 00:06:22,770 ibang-iba mula C, ibang-iba mula sa PHP. 121 00:06:22,770 --> 00:06:28,120 At kami ay pagpunta upang makita na mayroong isang kadalian ng function na komposisyon sa Haskell 122 00:06:28,120 --> 00:06:37,640 na magbibigay-daan sa amin upang Breeze sa pamamagitan ng aakda o pag-type up, pag-transcribe, 123 00:06:37,640 --> 00:06:42,160 isang bagay tulad ng Frere Jacques, ito simpleng kanta na 124 00:06:42,160 --> 00:06:46,815 ay may maraming mga bahagi sa loob nito na ay self-katulad o paulit-ulit. 125 00:06:46,815 --> 00:06:49,740 126 00:06:49,740 --> 00:06:53,250 Kaya ito ay ang ilan sa ang pag-uudyok para sa kung bakit 127 00:06:53,250 --> 00:06:59,400 aming ginagamit Haskell, kung saan function ay unang klase mamamayan. 128 00:06:59,400 --> 00:07:01,120 >> At Nais kong i-extend ito nang kaunti. 129 00:07:01,120 --> 00:07:08,800 Ito ay isang maliit na piraso madaling notate Frere Jacques sa Haskell. 130 00:07:08,800 --> 00:07:12,100 Ngunit paano kung gusto naming magdagdag ng isang drum part na ito? 131 00:07:12,100 --> 00:07:17,320 Paano kung gusto naming subukan na gumawa isang bagay tulad ng isang Roland 808 o 909 drum 132 00:07:17,320 --> 00:07:20,970 machine kung saan mayroon kang tungkol sa 16 iba't-ibang mga hakbang na ito? 133 00:07:20,970 --> 00:07:24,590 Karaniwan ang mga ito ay iisip ng mga bilang 16 mga tala. 134 00:07:24,590 --> 00:07:28,640 At maaari mong makontrol ang global tempo, at maaari kang pumili ng 135 00:07:28,640 --> 00:07:34,620 ng grupo ng mga iba't-ibang bahagi percussion ng bass drum, isang tunog ng kulog, iba't-ibang mga bitag, 136 00:07:34,620 --> 00:07:37,540 bukas at sarado high hats sa mga uri ng mga channels, 137 00:07:37,540 --> 00:07:41,600 at pagkatapos ay maaari mong EQ o ayusin ang kanilang lakas ng tunog. 138 00:07:41,600 --> 00:07:45,290 >> At kami na makita ng isang magandang paraan sa Haskell ng kumakatawan sa hakbang na ito 139 00:07:45,290 --> 00:07:48,810 sequencer sa lahat ng mga iba't-ibang mga cool na bagay sa Haskell 140 00:07:48,810 --> 00:07:53,100 maaari naming gawin sa pagbuo ng listahan at filtering higit sa listahan, 141 00:07:53,100 --> 00:07:56,060 mapping sa paglipas ng mga listahan, paggawa ng mga mapa function sa paglipas ng mga listahan. 142 00:07:56,060 --> 00:07:59,530 143 00:07:59,530 --> 00:08:00,760 At isang mabilis na paghingi ng tawad. 144 00:08:00,760 --> 00:08:05,300 Ito ay isang napaka madalian at labis na mabilis na sketch 145 00:08:05,300 --> 00:08:07,620 ng ilan sa mga aspeto ng Haskell at Euterpea, 146 00:08:07,620 --> 00:08:11,760 kung saan ay isang domain na tukoy sa nakasulat na naka-embed wika 147 00:08:11,760 --> 00:08:14,970 sa Haskell para sa musical uri. 148 00:08:14,970 --> 00:08:17,350 Kaya mangyaring huwag tingnan ang code sa online. 149 00:08:17,350 --> 00:08:22,404 Sunog up GHCI, na kung saan ay ang Glasgow Haskell Compiler Interpreter. 150 00:08:22,404 --> 00:08:24,320 At Kukunin ko ay ang paggawa ng ilang ng mga ito sa ilang sandali 151 00:08:24,320 --> 00:08:25,880 sa gayon maaari mong makita kung paano ito gawin. 152 00:08:25,880 --> 00:08:31,021 >> At ito ay nagbibigay-daan sa iyo upang i-load sa sa the-- ang syntax ay colon at pagkatapos ay 153 00:08:31,021 --> 00:08:31,520 ang utos. 154 00:08:31,520 --> 00:08:33,510 Maaari mong i-load sa mga file. 155 00:08:33,510 --> 00:08:36,840 Maaari mong gamitin ang browse sa mga file upang makita ang lahat ng mga function na 156 00:08:36,840 --> 00:08:39,169 umiiral sa isang partikular na module. 157 00:08:39,169 --> 00:08:43,850 At pagkatapos ay bilang namin makita, mga uri at uri mga klase ay kaya mahalaga sa Haskell, 158 00:08:43,850 --> 00:08:48,850 sa gayon maaari mong check-- palaging lalo kung ikaw ay nagtatrabaho sa isang bagong DSCL 159 00:08:48,850 --> 00:08:51,600 tulad nito, kung ano ang isang uri ng musika? 160 00:08:51,600 --> 00:08:55,114 Alam ko ang tungkol sa mga paraan numeric uri ng trabaho sa Haskell, 161 00:08:55,114 --> 00:08:56,530 ngunit hindi magkano ang tungkol sa musika ko alam. 162 00:08:56,530 --> 00:09:01,280 Ngunit maaari mong galugarin ang mga paraan na ang mga ito na tinukoy sa pamamagitan ng paggamit na ito t o uri ng command 163 00:09:01,280 --> 00:09:04,577 at pagkatapos ay pagtawag sa isang partikular na function o isang data object. 164 00:09:04,577 --> 00:09:05,410 CONNOR HARRIS: Oo. 165 00:09:05,410 --> 00:09:09,820 Kung naisip mo C at Clang ay hardass tungkol sa mga uri, 166 00:09:09,820 --> 00:09:11,230 wala kang ideya tungkol sa Haskell. 167 00:09:11,230 --> 00:09:14,230 Ang magandang bagay tungkol Haskell ay na kung maaari mong makuha ang iyong code sa sumulat ng libro 168 00:09:14,230 --> 00:09:16,790 at kung type Haskell tseke, marahil ito ay karapatan, 169 00:09:16,790 --> 00:09:18,675 dahil ang uri ng sistema ay kaya mahigpit. 170 00:09:18,675 --> 00:09:20,090 >> STEPHEN KREWSON: Oo. 171 00:09:20,090 --> 00:09:21,980 Kaya gusto ko lang pumunta through-- at muli, 172 00:09:21,980 --> 00:09:27,160 ito ay hindi ginagawa ito justice-- ng ilang sa ang mga tampok ng Haskell na, hindi bababa sa 173 00:09:27,160 --> 00:09:31,780 upang creators-- nito at ito ay nilikha sa huli 1980s sa pamamagitan ng isang grupo ng mga tao, 174 00:09:31,780 --> 00:09:34,610 isang komite ng mga 20 Akala people-- ay mahalaga. 175 00:09:34,610 --> 00:09:36,850 At ang unang bagay na kanilang na nakalista sa isang papel na 176 00:09:36,850 --> 00:09:41,890 inilarawan sa simula ng Haskell sa loob ng unang 20 taon o kaya 177 00:09:41,890 --> 00:09:43,390 ay na ito ay tamad. 178 00:09:43,390 --> 00:09:44,990 Kaya kung ano ang ibig sabihin nito? 179 00:09:44,990 --> 00:09:49,860 >> Well, ang ibig sabihin nito kapag kami ay may ilang mga uri sa pagpapahayag ng damdamin, kailangan namin upang suriin ito. 180 00:09:49,860 --> 00:09:54,390 At Haskell Ginagawa ito sa isang tawag sa pamamagitan ng kailangan na paraan o sa isang di-mahigpit na paraan. 181 00:09:54,390 --> 00:09:57,250 Iyon ay, kung kami ay may isang bungkos ng mga mga bahagi ng aming pagpapahayag, 182 00:09:57,250 --> 00:10:00,660 subukan namin upang antalahin ang pagsusuri mga subcomponents 183 00:10:00,660 --> 00:10:05,300 hanggang sa ganap na huling minute-- iyon ay hanggang talagang kailangan namin ang mga ito. 184 00:10:05,300 --> 00:10:08,480 >> Kaya ito means-- na kung saan ay talagang cool na, lalo na 185 00:10:08,480 --> 00:10:13,200 kung pinag-iisipan namin ang tungkol sa abstraction ng isang musikal step sequencer. 186 00:10:13,200 --> 00:10:16,740 I-on mo ito sa, at simulan mo pagpapatakbo ng isang hakbang sequence-- 187 00:10:16,740 --> 00:10:20,010 kung ikaw ba nagtrabaho sa isang drum machine-- at ito lamang ay pumunta sa habang panahon. 188 00:10:20,010 --> 00:10:24,650 Kaya magiging talagang maganda kung tayo ay tularan na sa Haskell. 189 00:10:24,650 --> 00:10:31,040 At maaari naming gawin ito na may walang hangganang mga halaga, sa mga partikular na mga walang katapusan na mga listahan. 190 00:10:31,040 --> 00:10:35,860 Ito ay tunay madali na mag-type ng isang walang katapusan na listahan sa Haskell. 191 00:10:35,860 --> 00:10:39,230 Maaari mo lamang gamitin ang syntax pababa dito, kung saan nakikita mo ang 1 hanggang 3, 192 00:10:39,230 --> 00:10:42,440 alisin ang 3 1 dot dot, at iyon ay isang walang-katapusang listahan 193 00:10:42,440 --> 00:10:46,960 ng lahat ng mga natural na mga numero ng pagpapalawak on tulad ng maaari mong isipin. 194 00:10:46,960 --> 00:10:49,925 >> Gusto kong ipakilala ang isang konsepto ng mga kulungan kaagad. 195 00:10:49,925 --> 00:10:51,800 At muli, ang layunin ng seminar na ito ay hindi 196 00:10:51,800 --> 00:10:55,770 upang malaman ang tungkol kulungan sa Haskell o mas mataas function order. 197 00:10:55,770 --> 00:10:59,640 Ngunit Gusto ko lang ipakilala ito sa magbigay ng isang tumpak na pananaw kung ang kakaibang 198 00:10:59,640 --> 00:11:03,700 Haskell ay at kung paano malakas na ito. 199 00:11:03,700 --> 00:11:08,000 At sa partikular, kami ay pagpunta sa be-- kapag ginagawa namin ang aming iba't-ibang bahagi drum, 200 00:11:08,000 --> 00:11:12,790 kami ay pupunta sa pagmamanipula ng mga listahan ng mga numero, natitiklop ang mga ito papunta sa bawat isa. 201 00:11:12,790 --> 00:11:17,290 At upang gawin iyon, ipapakita namin ay gumagamit ng mga mapa at mga kulungan. 202 00:11:17,290 --> 00:11:21,770 >> May isang tamang-uugnay kulungan ng mga tupa, na kung saan ay ang isang ito karapatan 203 00:11:21,770 --> 00:11:26,990 here-- 1 minus ang dami, 2 minus ang dami, 3 minus 0. 204 00:11:26,990 --> 00:11:29,170 At ang syntax para sa isang fold, magbibigay sa iyo ng fold 205 00:11:29,170 --> 00:11:34,680 basehan ng halaga at pagkatapos ay isang operation-- sa kasong ito, karagdagan o pagbabawas. 206 00:11:34,680 --> 00:11:36,280 Ipinapakita ko na parehong kaso. 207 00:11:36,280 --> 00:11:41,760 At pagkatapos ay may isang nagtitipon na accumulates sa buong listahan, 208 00:11:41,760 --> 00:11:46,330 nag-aaplay na operator plus o minus, at pagkatapos ay magtamo ito. 209 00:11:46,330 --> 00:11:52,680 Kaya ito ay magiging the-- kung ito ay tinatawag na may fold r plus ng 0, na nagsisimula sa 0, 210 00:11:52,680 --> 00:11:54,720 Gusto namin pagkatapos sum ang lahat ng ang mga numero sa listahan. 211 00:11:54,720 --> 00:11:57,134 At iyon ang isang listahan mula 1 hanggang 3. 212 00:11:57,134 --> 00:12:00,050 CONNOR HARRIS: So ilagay ito sa ibang paraan, fold r tumatagal ng tatlong argumento. 213 00:12:00,050 --> 00:12:02,540 May isang function na mismo ay tumatagal ng dalawang argumento, 214 00:12:02,540 --> 00:12:05,400 pagkatapos ay may isang halaga ng starter, at mayroong isang listahan ng mga halaga. 215 00:12:05,400 --> 00:12:08,570 At ano ang gagawin mo ay magdadala sa iyo starter halaga, unang halaga, 216 00:12:08,570 --> 00:12:09,850 ilagay ang mga ito sa function. 217 00:12:09,850 --> 00:12:11,607 Ano ang makukuha mo sa labas, tumagal na, feed na 218 00:12:11,607 --> 00:12:13,940 sa pag-andar ng second na halaga, kung ano ang iyong makakuha ng out, 219 00:12:13,940 --> 00:12:16,690 tumagal na, feed na papunta sa function ng ikatlong halaga. 220 00:12:16,690 --> 00:12:18,740 At pagkatapos ay kung ikaw ay pupunta pababa ito buong listahan sa ganitong paraan, 221 00:12:18,740 --> 00:12:22,970 ikaw ay pagpunta upang makakuha ng sa huli ilang isahan halaga na 222 00:12:22,970 --> 00:12:25,720 ng parehong uri ng kung ano ang iyong sinimulan out sa at ng parehong uri 223 00:12:25,720 --> 00:12:29,147 bilang mga bagay sa listahan, at pagkatapos ay iyon ang return resulta ng R. fold 224 00:12:29,147 --> 00:12:31,980 STEPHEN KREWSON: So sa partikular, ang mga ito ay mas mataas na pag-andar order, 225 00:12:31,980 --> 00:12:34,460 dahil ito ay ang pagkuha ng isa pang function na bilang isa sa mga argumento. 226 00:12:34,460 --> 00:12:34,770 >> CONNOR HARRIS: Oo. 227 00:12:34,770 --> 00:12:37,820 Kung nagamit mo na ang ilang mga iba pang languages-- alam ko R, [hindi marinig] 228 00:12:37,820 --> 00:12:41,510 Wala ang wikang ito, na tinatawag na Bawasan. 229 00:12:41,510 --> 00:12:45,460 Maaari mong magkaroon ng katulad na pag-andar sa iba pang mga wika, na tinatawag lamang 230 00:12:45,460 --> 00:12:48,160 iba't ibang bagay. 231 00:12:48,160 --> 00:12:50,680 >> STEPHEN KREWSON: At kung ano ang magaling tungkol fold R 232 00:12:50,680 --> 00:12:53,880 sa pagkakataong ito ay na fold R ay maaaring gumana sa mga walang katapusan na mga listahan. 233 00:12:53,880 --> 00:12:59,490 Kaya sa ibaba, ito P5 ay ang pagbuo ng mga tala na 234 00:12:59,490 --> 00:13:03,120 ay naka-on sa hakbang sequencer para sa ilang drum ng bahagi, ang ika-limang drum bahagi, 235 00:13:03,120 --> 00:13:05,480 at marahil ito ay isang conga dram o isang bagay. 236 00:13:05,480 --> 00:13:09,719 At ito ay isang sadyang mahina ang isip ng paraan ng pagsulat na ito, 237 00:13:09,719 --> 00:13:11,510 ngunit ito ay masaya, dahil ito ay nagpapakita ng maraming 238 00:13:11,510 --> 00:13:14,460 ng mga bagay-bagay tungkol sa Haskell at Euterpea. 239 00:13:14,460 --> 00:13:20,650 >> Kaya fold R ng colon-- colon ay lamang ng isang operator na tinutulak bagay 240 00:13:20,650 --> 00:13:25,700 magkasama sa isang list-- tinatawag sa walang lamang listahan, na kung saan ay lamang ang walang laman na mga braket. 241 00:13:25,700 --> 00:13:28,250 At ako ng pagtawag na na ito sa mga walang katapusan na listahan. 242 00:13:28,250 --> 00:13:31,570 Ito ay talagang dalawang mga listahan pinagsama-sama dito sa ibaba. 243 00:13:31,570 --> 00:13:37,150 Ang listahan 1 comma 6 dot tuldok ay 1, 6, 11, 16. 244 00:13:37,150 --> 00:13:39,750 Kaya Haskell-- sa loob lamang ng ilang mga character, ikaw 245 00:13:39,750 --> 00:13:42,420 maaaring bumuo ang buong pagkakasunod-sunod ng numero 246 00:13:42,420 --> 00:13:46,240 na ang limang mga numero ng sandata lumalawak sa sa kawalang-hanggan. 247 00:13:46,240 --> 00:13:49,860 At prepend ko sa na ito mas maikli maliit list-- 248 00:13:49,860 --> 00:13:54,370 3, 8, 21-- upang ipakita sa iyo kung paano maaari mong pagdugtungin list. 249 00:13:54,370 --> 00:13:55,790 >> At pagkatapos mo ako nakatiklop sa mismo. 250 00:13:55,790 --> 00:14:01,510 At ito ay nauuwi sa pagiging lamang ng isang uri ng operasyon identity, ngunit ito ay walang hanggan. 251 00:14:01,510 --> 00:14:06,070 At fold R maaaring gawin na, dahil ito lazily sinusuri, tulad ng sa itaas. 252 00:14:06,070 --> 00:14:10,582 Kung kami ay may isang 1 at 2 at 3, maaari naming bracket lang off ang buong natitirang bahagi ng ito. 253 00:14:10,582 --> 00:14:12,290 Iyon ay hindi gagana para sa minus o plus, ngunit ito 254 00:14:12,290 --> 00:14:17,760 gagana para sa colon operasyon identity sa listahan. 255 00:14:17,760 --> 00:14:24,620 >> Kaya paano talaga naming gamitin na kung tayo magkaroon ng isang walang hanggan mahabang listahan ng mga bagay na ito? 256 00:14:24,620 --> 00:14:26,500 Well, Haskell nagbibigay isang pulutong ng mga functions-- 257 00:14:26,500 --> 00:14:29,450 at tumingin pa sa mga in iyong sariling time-- tulad ng tumagal 258 00:14:29,450 --> 00:14:32,200 na nagsasabing, OK, hindi namin pagbuo ng walang katapusan na listahan, 259 00:14:32,200 --> 00:14:35,950 ngunit lamang namin ang pagpunta sa tumagal ng ilang bilang ng mga ito At sa ganitong case-- 260 00:14:35,950 --> 00:14:38,410 kami ay makita ito sa ibang pagkakataon sa aming drum machine code-- 261 00:14:38,410 --> 00:14:43,740 Gm ay ilan lamang uri ng global variable para sa bilang ng mga hakbang 262 00:14:43,740 --> 00:14:44,610 sa sequencer. 263 00:14:44,610 --> 00:14:47,630 Sa machine roll-in ako ay nagpakita sa iyo, na ang karaniwang 16, 264 00:14:47,630 --> 00:14:51,475 ngunit kami ay ipinatupad ko ito sa 32. 265 00:14:51,475 --> 00:14:54,470 Ito ay hindi talagang mahalaga. 266 00:14:54,470 --> 00:15:00,230 >> Haskell ding dalisay, sa gayon ito ay may malakas na static na pag-type na Connor tinutukoy. 267 00:15:00,230 --> 00:15:03,220 Kaya function ay mathematical sa sense-- 268 00:15:03,220 --> 00:15:06,600 ang mga ito ay mas mathematical na sila ay garantisadong 269 00:15:06,600 --> 00:15:11,530 upang hindi ma-access o baguhin ang anumang uri ng variable o magsagawa ng input o output. 270 00:15:11,530 --> 00:15:14,420 Kaya kung mayroon kang isang function, ito ay deterministic. 271 00:15:14,420 --> 00:15:17,400 Ito ay palaging bumalik sa parehong halaga sa estado ng programa 272 00:15:17,400 --> 00:15:19,310 o mananatiling pareho. 273 00:15:19,310 --> 00:15:22,940 May, siyempre, monadic eksepsiyon sa mga ito, ngunit iyan ay lampas sa aming mga nasasakupan. 274 00:15:22,940 --> 00:15:23,900 >> CONNOR HARRIS: Oo. 275 00:15:23,900 --> 00:15:26,946 Ano ang ibig sabihin nito, bagaman, ay mayroong mga ilang mahalagang [hindi marinig] 276 00:15:26,946 --> 00:15:27,820 kahihinatnan ng mga ito. 277 00:15:27,820 --> 00:15:30,940 Ang isa ay na ito ay tunay madali upang parallelize Haskell programs. 278 00:15:30,940 --> 00:15:32,773 Dahil kung mayroon ka, sabihin, ang isang function ng na 279 00:15:32,773 --> 00:15:36,064 pangangailangan upang gumana sa isang milyong mga halaga, kung Alam mo ba na ang pag-andar ay palaging 280 00:15:36,064 --> 00:15:39,280 ibigay ang parehong halaga kung feed mo sa isang tiyak na value-- 281 00:15:39,280 --> 00:15:43,055 kung ikaw [hindi marinig] f ng 1 mo, f ng 2, pagkatapos f ng 3 o whatnot-- f ng 1 282 00:15:43,055 --> 00:15:45,180 ay hindi pagpunta upang isulat ang sa isang file o gawin ang isang bagay 283 00:15:45,180 --> 00:15:46,850 na baguhin ang halaga ng F2. 284 00:15:46,850 --> 00:15:50,220 Maaari mo lamang maghiwalay ang function na ito sa isang milyong iba't ibang machine o isang milyong 285 00:15:50,220 --> 00:15:54,720 iba't-ibang mga thread o anumang, makakuha ng lahat ng kasagutan sa likod, 286 00:15:54,720 --> 00:15:56,900 makakuha ng lahat ng mga halaga ng pagbabalik likod, at pagkatapos na ito. 287 00:15:56,900 --> 00:15:59,780 Kaya mas madali upang parallelize bagay. 288 00:15:59,780 --> 00:16:03,140 >> Ang downside ay input na at output lalo 289 00:16:03,140 --> 00:16:05,720 magkasya sa uri ng sistema sa napaka-komplikadong paraan. 290 00:16:05,720 --> 00:16:09,010 Hindi namin pumunta sa na sa ngayon, ngunit ko Hinihikayat ka upang tingnan ang ilang mga mapagkukunan 291 00:16:09,010 --> 00:16:11,175 online kung gusto mong malaman ang tungkol sa na. 292 00:16:11,175 --> 00:16:13,960 293 00:16:13,960 --> 00:16:16,550 >> STEPHEN KREWSON: So type classes-- at ito 294 00:16:16,550 --> 00:16:21,610 was-- klase ng mga uri ay likha upang malutas 295 00:16:21,610 --> 00:16:24,160 isang problema ng operator labis na pasanin. 296 00:16:24,160 --> 00:16:27,590 Kaya gusto naming magkaroon ng pagkakapantay-pantay pagitan ng iba't ibang mga uri ng mga bagay-bagay. 297 00:16:27,590 --> 00:16:31,040 Siyempre, maaari naming isipin of-- pagkakapantay-pantay sa pagitan numeric uri 298 00:16:31,040 --> 00:16:34,720 Napakadaling mag-isip tungkol sa, ngunit ano ang tungkol sa pagkakapantay-pantay sa pagitan ng mga listahan? 299 00:16:34,720 --> 00:16:37,610 Ano ang tungkol sa pagkakapantay-pantay sa pagitan ng puno data leg istruktura? 300 00:16:37,610 --> 00:16:43,130 At ito ay ang lahat ng posibleng sa Haskell dahil sa klase ng uri. 301 00:16:43,130 --> 00:16:48,000 >> Kaya kung tinukoy mo ang isang tiyak na type-- data at dito, ang mga ito ay musical pag-alok. 302 00:16:48,000 --> 00:16:50,960 Sa wakas Kami ay nakakakuha sa ilang mga computer na musika. 303 00:16:50,960 --> 00:16:57,420 Kaya kami C, C matalim, at iba pa. 304 00:16:57,420 --> 00:17:01,080 Nabibilang sila sa isang grupo ng mga iba't ibang klase ng uri. 305 00:17:01,080 --> 00:17:03,510 EQ-- pag-aari nila ang uri EQ class. 306 00:17:03,510 --> 00:17:06,780 Ito ay nangangahulugan na sila ay sumusuporta sa operations pagkakapantay-pantay. 307 00:17:06,780 --> 00:17:12,650 Kaya maaari mong suriin kung ang isang pagkakasunod-sunod ng musical primitives 308 00:17:12,650 --> 00:17:15,400 ay ang parehong bilang ng iba. 309 00:17:15,400 --> 00:17:17,280 >> Nabibilang sila sa ORDINAL class. 310 00:17:17,280 --> 00:17:19,479 Ito ay nangangahulugan na may isang pag-order sa mga ito. 311 00:17:19,479 --> 00:17:27,670 D dumating pagkatapos C. C matalim pagdating pati na rin pagkatapos C. 312 00:17:27,670 --> 00:17:29,840 Nabibilang sila sa klase ipakita, na nangangahulugan na maaari nilang 313 00:17:29,840 --> 00:17:33,000 ipi-print sa isang console o terminal. 314 00:17:33,000 --> 00:17:36,090 Nabibilang sila sa klase inisa-isa, na 315 00:17:36,090 --> 00:17:39,770 nangangahulugan na kahit na ang mga ito ay mga character, 316 00:17:39,770 --> 00:17:45,340 mayroon silang isang batayan numeric representasyon simula sa 0 317 00:17:45,340 --> 00:17:48,960 at pagpunta off sa pamamagitan gayunpaman maraming bagay ang narito, 20 o kaya, 318 00:17:48,960 --> 00:17:51,770 o 30 o 40, marahil. 319 00:17:51,770 --> 00:17:54,259 >> CONNOR HARRIS: At kapag kami ay may isang uri ng data 320 00:17:54,259 --> 00:17:57,050 na derives-- sa keyword na iyon "deriving--" sa isang tiyak na klase ng uri, 321 00:17:57,050 --> 00:18:01,160 ito ay nangangahulugan na ang tagatala ay susubukan upang awtomatikong bumuo ng isang bagay. 322 00:18:01,160 --> 00:18:05,120 Kaya marahil ay gusto ninyong tukuyin ang isang kalidad na naiiba. 323 00:18:05,120 --> 00:18:09,450 Makikita mo nais na tukuyin C matalim bilang katumbas ng D flat, halimbawa. 324 00:18:09,450 --> 00:18:11,560 Gamit ang construction dito, Hindi sa tingin ko C matalim 325 00:18:11,560 --> 00:18:14,940 at D flat ay katumbas, dahil awtomatikong ang tagatala ay 326 00:18:14,940 --> 00:18:19,670 sabihin sa bawat iba't ibang mga posibleng halaga ay naiiba mula sa bawat isa. 327 00:18:19,670 --> 00:18:22,930 >> Kaya ito ay posible na i-override ang default na pagpapatupad 328 00:18:22,930 --> 00:18:25,730 sa mga uri ng mga klase. 329 00:18:25,730 --> 00:18:28,640 Muli, tingnan ang reference kung gusto mong malaman ang tungkol sa na. 330 00:18:28,640 --> 00:18:31,767 331 00:18:31,767 --> 00:18:33,600 STEPHEN KREWSON: At dito, talaga, ito idedetalye 332 00:18:33,600 --> 00:18:36,930 maging kapaki-pakinabang para sa kapag ang code namin mamaya. 333 00:18:36,930 --> 00:18:42,150 Nakikita natin ang ilan sa mga itanim operator para sequential komposisyon, 334 00:18:42,150 --> 00:18:46,570 parallel komposisyon, at iba pa, mga plus at pantay-pantay na mga palatandaan 335 00:18:46,570 --> 00:18:48,620 napapalibutan ng tutuldok. 336 00:18:48,620 --> 00:18:53,330 Iyon ay nangangahulugang maaari naming i-play ang mga iba't-ibang musical primitives isa pagkatapos ng isa. 337 00:18:53,330 --> 00:18:54,590 Iyan ay sequential komposisyon. 338 00:18:54,590 --> 00:18:57,170 >> O maaari naming i-play ang mga ito sa kahanay sa parehong oras. 339 00:18:57,170 --> 00:19:05,100 Kaya ang maaari kong magkaroon ng isang halaga musical, at pagkatapos na ito ay katumbas ng at tutuldok, 340 00:19:05,100 --> 00:19:09,669 itanim parallel komposisyon operator, at i-play ang mga ito bilang isang uri ng chord. 341 00:19:09,669 --> 00:19:11,460 At kami ay pagpunta upang gamitin ang ito kapag pinagsama natin 342 00:19:11,460 --> 00:19:15,080 aming drum bahagi sa aming maliit Frere Jacques kanta 343 00:19:15,080 --> 00:19:19,460 upang i-play ito ng dalawang mga pagkakasunud-sunod ng mga musical halaga sa parehong oras. 344 00:19:19,460 --> 00:19:24,520 345 00:19:24,520 --> 00:19:29,250 >> Currying is-- Curry ay huling na pangalan ng Haskell Curry, na 346 00:19:29,250 --> 00:19:31,850 ang Haskell imahe ay pinangalanang matapos. 347 00:19:31,850 --> 00:19:34,330 At ito ay nagbibigay-daan sa amin ng isang gandang gilas kapag kami ay 348 00:19:34,330 --> 00:19:36,880 pagsulat ng lahat ng mga iba't-ibang function o mga filter na hindi namin 349 00:19:36,880 --> 00:19:39,330 magiging mapping sa paglipas ng aming mga listahan. 350 00:19:39,330 --> 00:19:42,810 Ang isang function ng dalawang arguments-- f ng x at y-- 351 00:19:42,810 --> 00:19:46,630 maaaring kinakatawan bilang f ng x inilapat sa y. 352 00:19:46,630 --> 00:19:49,800 Kaya ito ay isang function ng isang argument na nagbabalik 353 00:19:49,800 --> 00:19:51,240 isa pang pag-andar ng isang argument. 354 00:19:51,240 --> 00:19:56,962 Kaya ito ay nangangahulugan na maaari naming i-map ang isang function f ng x sa ibabaw ng listahan ng y ni. 355 00:19:56,962 --> 00:19:58,920 CONNOR HARRIS: Gusto mong magbigay ng isang halimbawa ng mga ito? 356 00:19:58,920 --> 00:19:59,836 STEPHEN KREWSON: Oo. 357 00:19:59,836 --> 00:20:05,390 Mayroon akong isang halimbawa dito mula mismo sa ilan sa mga bagay kami magsulat. 358 00:20:05,390 --> 00:20:10,500 Kaya ginagaya 2-- rin, magtiklop ay magdadala 359 00:20:10,500 --> 00:20:13,040 isang halaga, na kung saan ay kung gaano karaming beses sa magtiklop ang isang bagay, 360 00:20:13,040 --> 00:20:16,690 at pagkatapos ay aabutin ng value-- karaniwang isang listahan o isang bagay. 361 00:20:16,690 --> 00:20:23,450 Kaya dito, hindi namin mapping magtiklop 2 sa ibabaw ng isa pang listahan. 362 00:20:23,450 --> 00:20:27,440 >> Kaya kung mapa namin ginagaya 2, kung ginagaya namin 2-apply 363 00:20:27,440 --> 00:20:31,890 sa unang elemento ng list-- at ang mga ito ay mga listahan ng mga musical phrases-- 364 00:20:31,890 --> 00:20:37,650 ay gumawa ng dalawang ng "sleeping-- iyo" kaya ikaw ay natutulog, natutulog ka. 365 00:20:37,650 --> 00:20:40,040 Kaya ngayon kami ay may dalawang. 366 00:20:40,040 --> 00:20:42,570 Ngunit magtiklop ay tumatagal ng dalawang arguments, ngunit dahil hindi namin 367 00:20:42,570 --> 00:20:47,100 currying at pagkatapos ay paggawa ng mga mapa, maaari naming kumatawan magtiklop 2 368 00:20:47,100 --> 00:20:52,310 bilang pagiging ibinalik bilang isang katangian ng isa argument-- lang Kinokopya dalawang beses. 369 00:20:52,310 --> 00:20:57,010 At pagkatapos ay nag-aaplay namin na sa bawat elemento ng listahan na ito ng mga parirala. 370 00:20:57,010 --> 00:21:01,900 >> At concat ay isang Haskell operasyon para sa pagyupi isang listahan. 371 00:21:01,900 --> 00:21:04,400 Dahil magtiklop 2 kalooban gumawa ng isang listahan ng mga listahan. 372 00:21:04,400 --> 00:21:06,660 At ito ay ang intermediate form dito. 373 00:21:06,660 --> 00:21:10,365 At kaya pagkatapos ay maaari naming concat o patagin na out nang dalawang beses. 374 00:21:10,365 --> 00:21:12,240 CONNOR HARRIS: Isang simple halimbawa ng currying, 375 00:21:12,240 --> 00:21:15,323 kung gusto mo like-- isipin f ay lamang ng isang pagpaparami function na tumatagal ng dalawang 376 00:21:15,323 --> 00:21:16,840 argumento at nagbabalik ng kanilang mga produkto. 377 00:21:16,840 --> 00:21:19,320 Kaya kung mayroon kang isang f 4 5, ito ay 20. 378 00:21:19,320 --> 00:21:22,670 Ngunit maaari mong isipin na ito bilang also-- mayroon kang isang function f 4 379 00:21:22,670 --> 00:21:25,560 na tumatagal ng isang argument at nagbabalik apat na beses na ito argument-- lamang 380 00:21:25,560 --> 00:21:27,870 bahagyang application na lamang ng isang argument 4. 381 00:21:27,870 --> 00:21:31,182 At kung ikaw feed f ng 4 5, na ay magbibigay sa iyo ng 20. 382 00:21:31,182 --> 00:21:32,890 At iyon ay isang mas simple halimbawa ng currying. 383 00:21:32,890 --> 00:21:34,473 Ito ay karaniwang ang isa sa mga iyan textbook. 384 00:21:34,473 --> 00:21:38,860 385 00:21:38,860 --> 00:21:42,110 >> STEPHEN KREWSON: Lambda expression o hindi kilalang function 386 00:21:42,110 --> 00:21:47,330 ay isa pang Haskell tatak ng kadalisayan. 387 00:21:47,330 --> 00:21:51,242 Kaya kung kailangan namin upang gumawa ng isang maliit na function buhay magtiklop, 388 00:21:51,242 --> 00:21:52,950 ngunit sabihin ito ay wala sa ang standard na library, 389 00:21:52,950 --> 00:21:56,150 Maaari naming gamitin ang isang syntax katulad ng mga sumusunod. 390 00:21:56,150 --> 00:21:58,730 At kami na simoy sa paglipas ng ito. 391 00:21:58,730 --> 00:22:02,160 Ang isang bagay na makikita mo ang isang pulutong ng sa drum machine ay ginagawa namin tawag 392 00:22:02,160 --> 00:22:05,790 sa isang bagay na tinatawag na i-filter, na tulad ng dati, 393 00:22:05,790 --> 00:22:08,185 ay isang mapping ng isang function higit sa isang listahan, ngunit ito ay 394 00:22:08,185 --> 00:22:10,260 isang pagmamapa ng isang Boolean function. 395 00:22:10,260 --> 00:22:13,390 >> Kaya kami dito ng isang halimbawa ng isang isang hindi nagpapakilala 396 00:22:13,390 --> 00:22:19,150 tinukoy Boolean function na Ito lamang ay tumatagal ng ilang mga halaga. 397 00:22:19,150 --> 00:22:22,990 Ito ay hindi mahigpit na nagsasalita sa isang hindi nakikilalang function. 398 00:22:22,990 --> 00:22:25,850 Ngunit ito ay tukuyin ang may na syntax para sa kaiklian, 399 00:22:25,850 --> 00:22:28,007 at ito lamang ay tumatagal ng x module n-- 400 00:22:28,007 --> 00:22:28,840 CONNOR HARRIS: Oo. 401 00:22:28,840 --> 00:22:31,330 Kaya f ay isang function ng dalawang argumento n at p 402 00:22:31,330 --> 00:22:35,440 na nagbabalik ng isang function na ay ang sarili isang function ng isang argument, katulad x. 403 00:22:35,440 --> 00:22:38,815 404 00:22:38,815 --> 00:22:40,690 STEPHEN KREWSON: I nabanggit itanim operator. 405 00:22:40,690 --> 00:22:42,642 Ano itanim operator? 406 00:22:42,642 --> 00:22:45,710 Well, itanim operator ay ang mga normal na paraan ay kumakatawan sa aming mga pagpapatakbo, 407 00:22:45,710 --> 00:22:49,910 sabihin, sa mathematics-- 2 plus 2 sa halip ng operator plus 408 00:22:49,910 --> 00:22:51,202 at pagkatapos ay dalawang argumento 2 at 2. 409 00:22:51,202 --> 00:22:53,701 CONNOR HARRIS: Ito ay tinatawag baligtarin polish notation, na kung saan ay 410 00:22:53,701 --> 00:22:55,330 isang kataga duda ako mayroon sa inyo na malaman. 411 00:22:55,330 --> 00:22:56,288 >> STEPHEN KREWSON: Kanan. 412 00:22:56,288 --> 00:22:58,290 Baligtarin polish o prefix notation. 413 00:22:58,290 --> 00:23:01,412 Ngunit nagpasya Haskell sa gamitin itanim operator. 414 00:23:01,412 --> 00:23:03,120 Kaya ang mga ito ay ilan sa mga ang pasadyang mga na 415 00:23:03,120 --> 00:23:07,770 ay tinukoy para sa Euterpea DSCL sa Haskell. 416 00:23:07,770 --> 00:23:10,730 Kaya ito ay sequential komposisyon. 417 00:23:10,730 --> 00:23:16,340 Ito ay parallel komposisyon, at ito ay pinuputol parallel komposisyon. 418 00:23:16,340 --> 00:23:18,710 At kami ay kailangan na sa aming drum machine, 419 00:23:18,710 --> 00:23:22,640 dahil gagamitin namin ang huling operator sa maliit tuple doon 420 00:23:22,640 --> 00:23:26,330 maglaro ng drum machine kasama sa aming Frere Jacques song. 421 00:23:26,330 --> 00:23:28,650 At ang aming drum machine ay magiging walang hanggan. 422 00:23:28,650 --> 00:23:30,920 Ito ay gumaganap lamang magpakailanman. 423 00:23:30,920 --> 00:23:32,692 Ngunit ang Frere Jacques kanta ay hindi. 424 00:23:32,692 --> 00:23:33,510 Ito ay hindi na mahaba. 425 00:23:33,510 --> 00:23:36,610 Ito ay lamang ng ilang mga bar. 426 00:23:36,610 --> 00:23:43,030 Kaya kailangan namin upang ihinto ang drum machine bilang Sa sandali na ang mas maikling musical halaga ay dumating 427 00:23:43,030 --> 00:23:43,700 sa isang dulo. 428 00:23:43,700 --> 00:23:46,980 At na infixed operator ay sobrang helpful sa mga iyon. 429 00:23:46,980 --> 00:23:50,090 >> At itanim notation tulad ito ay uri ng nice, 430 00:23:50,090 --> 00:23:57,095 dahil sabihin nating mayroon kang isang function tulad ng quote, na kung saan ay nagbibigay sa mga integer division 431 00:23:57,095 --> 00:24:01,010 ng x sa pamamagitan ng isang bagay else-- Paumanhin, na dapat ay isang at b. 432 00:24:01,010 --> 00:24:04,740 Maaari kang sumulat ng mga ito bilang isang quote ng b. 433 00:24:04,740 --> 00:24:09,670 Kaya't kung ikaw put-- elemento ay isa pang halimbawa ng mga ito. 434 00:24:09,670 --> 00:24:14,730 x na sangkap sa ilang mga listahan, kung inilagay mo ito sa Backticks, maaari mong gamitin ito. 435 00:24:14,730 --> 00:24:20,400 Kahit na ito ay hindi isang simbolo tulad ng plus o minus o beses, 436 00:24:20,400 --> 00:24:24,630 maaari mong gamitin ang pangalan ng isang function na tulad nang sa Backticks 437 00:24:24,630 --> 00:24:27,045 bilang itanim operator, na kung saan ay medyo cool. 438 00:24:27,045 --> 00:24:29,670 CONNOR HARRIS: Muli, ito ay lahat lamang sintaktik asukal, talaga. 439 00:24:29,670 --> 00:24:32,310 Hindi nito naaapektuhan ang core ng wika. 440 00:24:32,310 --> 00:24:37,440 >> STEPHEN KREWSON: Kaya nakikita natin dito para sa huling parirala ng aming Frere Jacques song, 441 00:24:37,440 --> 00:24:45,740 Nilalaro ko ang ilang mga maliit na chords o thirds gamit ang parallel na komposisyon 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 Ito ay isa pang paraan ng sinasabi ng ilang ng kung ano lamang namin ay sinasabi namin. 445 00:24:54,950 --> 00:24:59,986 Kaya maaari mong i-map function ng isa argument sa listahan. 446 00:24:59,986 --> 00:25:02,860 CONNOR HARRIS: Muli, ang mga sanggunian para Haskell-- pambungad aklat-aralin 447 00:25:02,860 --> 00:25:04,680 ay magkakaroon ng lahat ng mga ito sa loob nito. 448 00:25:04,680 --> 00:25:07,790 >> STEPHEN KREWSON: Kaya narito ang isang pretty key line ng step sequencer 449 00:25:07,790 --> 00:25:12,820 kami ay kumuha ng isang pagtingin sa gamit isang listahan ng intindi. 450 00:25:12,820 --> 00:25:17,810 At nakita namin dito ay sangkap na sa takdang operator sa quotes likod. 451 00:25:17,810 --> 00:25:23,030 Kaya kung x ay isang elemento ng listahan ng mga x, at pagkatapos ay makikita tumawag up namin perc function. 452 00:25:23,030 --> 00:25:25,100 Kaya perc ay lamang ng isang percussion function. 453 00:25:25,100 --> 00:25:30,200 Ito ay tumatagal ng ilang mga halaga p iyan ay bahagi ng bounded hanay ng lahat ng 454 00:25:30,200 --> 00:25:35,310 ang iba't ibang mga tunog percussion na nakita natin sa isang naunang slide, 455 00:25:35,310 --> 00:25:38,840 at pagkatapos ito ay nagbibigay na tagal ng isang isang-kapat na nota. 456 00:25:38,840 --> 00:25:43,190 Iba Pa ito ay nagbibigay ito ng isang QNR, at QNR ay lamang ng isang sangkapat pahinga. 457 00:25:43,190 --> 00:25:44,970 >> Kaya ito ay gusali up ng isang bagay nice. 458 00:25:44,970 --> 00:25:52,110 Kami ay may isang listahan ng mga sangkap na ito, at bibigyan namin ng loop sa paglipas ng ilang mga listahan mula sa isang 459 00:25:52,110 --> 00:25:54,540 to the max na halaga ng aming step sequencer. 460 00:25:54,540 --> 00:25:58,290 At kapag hindi namin sa isang partikular na i in na listahan ng isa sa max na halaga, 461 00:25:58,290 --> 00:26:02,970 kung na i ay isang miyembro ng mga ito nilikha sa function na ito set, 462 00:26:02,970 --> 00:26:06,040 well, pagkatapos ay i-namin ito sa isang percussion note. 463 00:26:06,040 --> 00:26:10,960 Kung hindi man, i-play lamang kami ng pahinga, kung saan sa mga sinasabi, mananatiling lamang namin tahimik. 464 00:26:10,960 --> 00:26:16,050 At maaari naming makita dito na sa ito listahan intindi syntax, 465 00:26:16,050 --> 00:26:20,030 x ay populated na sa pamamagitan ng ito list na itinayo sa isa 466 00:26:20,030 --> 00:26:22,462 sa pandaigdigang sukat ng sequencer. 467 00:26:22,462 --> 00:26:23,295 CONNOR HARRIS: Oo. 468 00:26:23,295 --> 00:26:26,340 Ang mga pangunahing syntax para sa comprehensions listahan ay 469 00:26:26,340 --> 00:26:30,810 bracket, ang halaga na kinasasangkutan ang ilang mga variable, bar, 470 00:26:30,810 --> 00:26:34,260 posibleng halaga ng variable kanilang sarili, nakasara bracket. 471 00:26:34,260 --> 00:26:38,545 At kung nagawa mo na i-set notation builder nasa anumang uri ng matematika klase, 472 00:26:38,545 --> 00:26:45,999 maaari mong na-set 2 n tulad na ang n ay sa o sa n nasa z. 473 00:26:45,999 --> 00:26:48,290 Katulad thing-- pagtatanda na ito ay sinadya upang maging pasaring 474 00:26:48,290 --> 00:26:49,630 ng na notation sa matematika. 475 00:26:49,630 --> 00:26:51,880 STEPHEN KREWSON: At maaari mong ilapat ang maramihang mga predicates 476 00:26:51,880 --> 00:26:56,250 at mga maramihang mga filter sa isang listahan intindi, na kung saan ay lubos na nice. 477 00:26:56,250 --> 00:27:01,800 Algebraic types-- namin hindi nagtatagal mahaba dito. 478 00:27:01,800 --> 00:27:04,840 May hindi isang magandang ideya sa Haskell o ng isang magandang, halata paniwala 479 00:27:04,840 --> 00:27:10,720 ng kung paano kumuha ng, sabihin nating, isang default parameter sa isang function o isang bagay. 480 00:27:10,720 --> 00:27:13,370 Sa Python, ito ay medyo madali. 481 00:27:13,370 --> 00:27:18,460 Maaari mo lamang sabihin na may katumbas sa deklarasyon ng function, 482 00:27:18,460 --> 00:27:21,420 isang default na halaga sa none kaso ay ibinibigay. 483 00:27:21,420 --> 00:27:27,010 >> Sa Haskell, maaari mong marahil gamitin siguro ang siguro type, 484 00:27:27,010 --> 00:27:32,190 na kumukuha ng alinman sa wala o ng isang halaga ng type lang a. 485 00:27:32,190 --> 00:27:38,630 Kaya pagsamantalahan namin ito sa drum machine na nagpapahintulot sa amin upang magbigay ng mga opsyonal na volume 486 00:27:38,630 --> 00:27:40,730 parameter sa bawat isa sa mga bahagi drum. 487 00:27:40,730 --> 00:27:46,160 488 00:27:46,160 --> 00:27:54,680 Kaya na nagbibigay sa amin ng isang paraan ng pagkakaroon ng EQ o isang lakas ng tunog sa isang partikular na channel. 489 00:27:54,680 --> 00:27:56,440 >> CONNOR HARRIS: In iba pang mga Haskell halimbawa, 490 00:27:56,440 --> 00:28:00,450 maaari mong makita ang marahil na ginagamit para sa mga function na ito ay maaaring mabibigo. 491 00:28:00,450 --> 00:28:03,470 Ito ay isang pangkaraniwang isa. 492 00:28:03,470 --> 00:28:07,010 >> STEPHEN KREWSON: At maaari mong supply ilang uri ng mga error na mensahe bilang default. 493 00:28:07,010 --> 00:28:11,020 At iyan ay partikular na madaling gamitin kapag ikaw ay gumagawa ng I / O sa Haskell. 494 00:28:11,020 --> 00:28:12,044 Iyon ay maaaring maging tricks. 495 00:28:12,044 --> 00:28:13,960 CONNOR HARRIS: O para sa isang katulad halimbawa, sa tingin 496 00:28:13,960 --> 00:28:17,460 ng isang function na nagsasangkot ng dibisyon ng isang parameter na ito ay maaaring maging 0. 497 00:28:17,460 --> 00:28:20,020 At na function na maaaring bumalik marahil kahit na ano. 498 00:28:20,020 --> 00:28:22,802 Kaya kung walang division sa pamamagitan ng 0, ito ay babalik kahit anong lamang. 499 00:28:22,802 --> 00:28:25,010 At kung may division sa pamamagitan ng 0, ito ay babalik sa wala 500 00:28:25,010 --> 00:28:26,910 bilang isang paraan ng pagbibigay ng senyas ng error. 501 00:28:26,910 --> 00:28:30,330 Dahil isa kinahinatnan ng Masyadong mahigpit na pag-type Haskell 502 00:28:30,330 --> 00:28:34,100 ay na walang real-- eksepsiyon ay mahirap, talaga, 503 00:28:34,100 --> 00:28:36,160 paghawak ng error ay hindi akma. 504 00:28:36,160 --> 00:28:39,440 At ito ay isa sa tunay karaniwang paraan ng paggawa nito. 505 00:28:39,440 --> 00:28:42,990 >> STEPHEN KREWSON: Kaya ngayon kami makakuha ng sa isa pang isip-baluktot na bagay 506 00:28:42,990 --> 00:28:49,160 tungkol sa Haskell, na kung saan ay pattern pagtutugma at pag-andar sa mga kahulugan. 507 00:28:49,160 --> 00:28:53,390 Ipinakita ko sa inyo sa mga huling slide ang deklarasyon ng mga hakbang na pagkakasunod-sunod 508 00:28:53,390 --> 00:28:58,170 function, na kinuha ng isang siguro na halaga, pagkatapos ay isang int, at pagkatapos ng isang listahan ng mga ints, 509 00:28:58,170 --> 00:29:03,850 pagkatapos ay nagbabalik ng isang pagkakasunod-sunod ng mga halaga ng musika may annotation 510 00:29:03,850 --> 00:29:05,375 may parehong mga pitch at lakas ng tunog. 511 00:29:05,375 --> 00:29:08,030 512 00:29:08,030 --> 00:29:11,820 >> Kaya mga tatlong argumento ay maaaring maging tumugma sa sumusunod na paraan pattern. 513 00:29:11,820 --> 00:29:16,660 At kami ay laging nais na maging sigurado na gawin ang isang base kaso o exit kaso. 514 00:29:16,660 --> 00:29:19,690 At ang mga underscore Maaari lamang bigyang-kahulugan 515 00:29:19,690 --> 00:29:22,340 na nangangahulugan na ang anumang halaga na doon. 516 00:29:22,340 --> 00:29:26,580 Kaya kung makuha namin ang isang tawag sa hakbang sequence may ilang mga halaga, ang ilang iba pang mga halaga, 517 00:29:26,580 --> 00:29:32,210 at pagkatapos ay ang walang laman na listahan, kung ano ang gusto namin upang bumalik lamang katahimikan, isang pahinga 0. 518 00:29:32,210 --> 00:29:35,110 >> At sa halip na na pagiging isang walang laman na listahan o 0, 519 00:29:35,110 --> 00:29:38,150 ito ay isang natitirang 0, dahil hindi namin pakikitungo sa mga uri ng musika, 520 00:29:38,150 --> 00:29:43,230 at ang walang laman na listahan ng musika type lamang ang natitira sa walang duration. 521 00:29:43,230 --> 00:29:45,680 Ito ay walang musika. 522 00:29:45,680 --> 00:29:51,460 At pagkatapos ay nakita namin kung makuha namin ng isang hakbang pagkakasunud-sunod sa isang v para argument lakas ng tunog, 523 00:29:51,460 --> 00:29:57,290 p para sa instrumento iingat argument, at pagkatapos ng isang listahan ng mga x ni. 524 00:29:57,290 --> 00:29:58,360 >> Pagkatapos gawin namin ang ilang mga bagay-bagay. 525 00:29:58,360 --> 00:30:01,290 Sa partikular, mag-apply namin listahang ito unawa, 526 00:30:01,290 --> 00:30:05,700 at magsagawa ng namin ang ilang mga operasyon sa siguro halaga 527 00:30:05,700 --> 00:30:10,050 upang buksan ito sa isang numerong halaga sa gayon ay ito ay maaaring pagkatapos ay inisa-isa at ginagamit 528 00:30:10,050 --> 00:30:12,300 upang piliin ang mga instrumento. 529 00:30:12,300 --> 00:30:16,730 Muli, ito ay isang maliit na bit sadyang inconcise 530 00:30:16,730 --> 00:30:20,580 upang ipakita lamang ang lahat ng mga kakaiba mga bagay maaari mong gawin sa Haskell bilang ka 531 00:30:20,580 --> 00:30:23,170 tingnan ang mga ito sa iyong sariling oras. 532 00:30:23,170 --> 00:30:23,802 >> Lahat tama. 533 00:30:23,802 --> 00:30:26,010 Kaya kami ay sa wakas pagkuha sa gawin kung ano ang aming set out na gawin, 534 00:30:26,010 --> 00:30:28,820 na kung saan ay gumawa ng ilang mga computer na musika. 535 00:30:28,820 --> 00:30:32,250 Kaya kami ay pagpunta sa subukan upang gawin ang Frere Jacques song. 536 00:30:32,250 --> 00:30:35,220 Kaya may mga gaano karaming parirala sa Frere Jacques? 537 00:30:35,220 --> 00:30:38,790 538 00:30:38,790 --> 00:30:39,680 Four. 539 00:30:39,680 --> 00:30:40,460 Great. 540 00:30:40,460 --> 00:30:42,490 At kung ano ang magaling na lahat sila ay paulit-ulit na 541 00:30:42,490 --> 00:30:46,990 sa parehong halaga ng mga beses, na kung saan ay dalawang. 542 00:30:46,990 --> 00:30:50,730 >> Kaya kami ay may apat na mga parirala bawat paulit-ulit ng dalawang beses. 543 00:30:50,730 --> 00:30:53,590 At sa partikular, ang mga ito ay sa isang round. 544 00:30:53,590 --> 00:30:55,340 At doon ay marami, maraming mga paraan upang ipatupad 545 00:30:55,340 --> 00:30:57,520 isang ikot na maaaring maging masaya na gawin. 546 00:30:57,520 --> 00:31:00,260 Ginawa ko na ito sa isang pretty simpleng paraan dito, 547 00:31:00,260 --> 00:31:05,760 na kung saan ay lamang na construct-- linya function na tumatagal ng isang listahan ng mga halaga ng musika 548 00:31:05,760 --> 00:31:10,390 at lumiliko ito sa sequential komposisyon sa pamamagitan ng paglalapat na sequential komposisyon 549 00:31:10,390 --> 00:31:13,000 operator. 550 00:31:13,000 --> 00:31:19,540 >> At pagkatapos ay antalahin ko ang iba't-ibang bahagi sa pamamagitan ng paggawa ng mga ito magsimula sa isang pahinga. 551 00:31:19,540 --> 00:31:22,770 Kaya sisimulan ko na may isang natitirang bahagi ng dalawang hakbang, at pagkatapos ay isang natitirang bahagi ng apat na hakbang, 552 00:31:22,770 --> 00:31:26,160 at pagkatapos ng pahinga ng anim na hakbang, at pagkatapos ay ang pag-ikot 553 00:31:26,160 --> 00:31:32,290 gumagana, dahil alam namin ang lahat ng kanta na ito. 554 00:31:32,290 --> 00:31:37,180 Nakakakita kami ng dalawang mga anotasyon o pagbabago ng mga halaga ng musika 555 00:31:37,180 --> 00:31:43,150 na nakapaloob sa ito sequential aayos ng mga elemento ng musika. 556 00:31:43,150 --> 00:31:44,810 Kami ay may isang dami ng add. 557 00:31:44,810 --> 00:31:48,960 Ito ay isang function upang i-annotate ng musika sa isang partikular na lakas ng tunog. 558 00:31:48,960 --> 00:31:51,320 Ito ay isang magandang halimbawa ng isang tumatakbong MIDI signal 559 00:31:51,320 --> 00:31:57,510 0-127, ang pitong mga piraso ng impormasyon na maaaring isinasagawa. 560 00:31:57,510 --> 00:32:00,650 >> At then-- nakita natin ito masyadong sa madaling sabi, ngunit ang pangkalahatang MIDI 561 00:32:00,650 --> 00:32:02,310 listahan ng lahat ng iba't ibang instrumento. 562 00:32:02,310 --> 00:32:04,450 At doon ay hindi isang buong pulutong ng mga ito. 563 00:32:04,450 --> 00:32:11,230 Kung gumamit ka ng isang digital audio workstation, tulad Ableton Live o Tools Pro, 564 00:32:11,230 --> 00:32:17,560 mayroong isang hindi kapani-paniwalang mas malawak na hanay ng synthesizers at VST instrumento. 565 00:32:17,560 --> 00:32:21,510 Ngunit ang mga karaniwang Midi lamang ay may ilang, o ilang dosena. 566 00:32:21,510 --> 00:32:22,799 At ang ilan sa kanila ay nakakatawa. 567 00:32:22,799 --> 00:32:25,840 Akala ko magiging masaya kung kami nag-play ang mga instrumento ng Midi instrumento 568 00:32:25,840 --> 00:32:30,550 helicopter, at pagkatapos ay ang susunod na paraan sa pamamagitan ng pag-ikot, 569 00:32:30,550 --> 00:32:37,980 ginawa namin ang isang pad synth, at pagkatapos ng ito mabutil humantong square wave synth, 570 00:32:37,980 --> 00:32:44,240 at pagkatapos ay boses ng tumagas, na kung saan ay isang Medyo malabo sa aking masamang MIDI 571 00:32:44,240 --> 00:32:46,410 synthesizer, ngunit sila OK. 572 00:32:46,410 --> 00:32:50,030 >> At pagkatapos ay nakita namin na ito ay hahayaan at sa syntax mula sa Haskell, 573 00:32:50,030 --> 00:32:54,030 at pagkatapos kami ay naglalaro ang lahat ng mga bahagi ng magkasama 574 00:32:54,030 --> 00:32:56,265 may parallel komposisyon operator. 575 00:32:56,265 --> 00:33:00,260 576 00:33:00,260 --> 00:33:02,296 At maaari naming malamang na ipakita ang ilan sa mga ito. 577 00:33:02,296 --> 00:33:07,674 578 00:33:07,674 --> 00:33:08,340 Narito ang code. 579 00:33:08,340 --> 00:33:14,960 At makikita mo sa C, may gusto maging isang pulutong ng lalamunan clearing at setting 580 00:33:14,960 --> 00:33:19,760 talahanayan ng code bago mo ay maaaring gumawa ng music tulad nito. 581 00:33:19,760 --> 00:33:22,080 O anumang iba pang programming wika, gusto mong malamang 582 00:33:22,080 --> 00:33:27,210 kung makipag-ugnay sa ilang mga uri ng aklatan o API at itakda ang lahat ng bagay up, 583 00:33:27,210 --> 00:33:28,725 at pagkatapos ay gusto may upang linisin ang. 584 00:33:28,725 --> 00:33:33,810 Ngunit dito sa Haskell ay, tingin ko, sa sandaling kumuha ang hang ng mga ito, hindi kapani-paniwalang 585 00:33:33,810 --> 00:33:35,770 nababasa at napaka makahulugan. 586 00:33:35,770 --> 00:33:38,930 587 00:33:38,930 --> 00:33:43,240 Kaya doon ay ang pagpapatupad ng Frere Jacques. 588 00:33:43,240 --> 00:33:43,740 Lahat tama. 589 00:33:43,740 --> 00:33:47,557 Ngayon gusto naming idagdag percussion, at ito ay isang maliit na bit Messier. 590 00:33:47,557 --> 00:33:49,015 Kaya sabihin kumuha ng isang pagtingin sa mga slide. 591 00:33:49,015 --> 00:33:56,880 592 00:33:56,880 --> 00:34:00,540 Kaya ang malaking ideya ay upang gumawa ng grupo ng mga listahan o mga bahagi. 593 00:34:00,540 --> 00:34:04,140 Sa mga machine roll-in, may ay karaniwang tungkol siguro walong 594 00:34:04,140 --> 00:34:08,670 hanggang 10 ritmo o percussion bahagi. 595 00:34:08,670 --> 00:34:10,159 At pagkatapos ay gamitin ang isang bungkos ng mga diskarte. 596 00:34:10,159 --> 00:34:14,889 At kami uusapang tungkol these-- gamit kulungan, filter, lambda function, 597 00:34:14,889 --> 00:34:19,429 nakamapang sa paglipas ng mga listahan upang bumuo ng mga halaga sa ilang mga hanay na 1 hanggang r, r ay 16, 598 00:34:19,429 --> 00:34:20,699 o 32 hakbang sa sequencer. 599 00:34:20,699 --> 00:34:23,810 600 00:34:23,810 --> 00:34:29,920 >> At pagkatapos ay kung may isang halaga na sa listahan bilang kami ay tumatakbo sa pamamagitan ng sequencer, 601 00:34:29,920 --> 00:34:34,190 tumatakbo sa pamamagitan ng ito sa loob at sa ibabaw, ito ay lumiliko sa na tala, 602 00:34:34,190 --> 00:34:36,060 at sample na maipo-trigger. 603 00:34:36,060 --> 00:34:42,810 604 00:34:42,810 --> 00:34:47,110 Narito ang lahat ng iba't ibang mga kakaibang paraan Ako ay dumating sa upang bumuo ng mga tala. 605 00:34:47,110 --> 00:34:48,940 Subukan ito sa iyong sariling mga semi sum. 606 00:34:48,940 --> 00:34:50,360 Makikita ito tunog cool. 607 00:34:50,360 --> 00:34:53,066 608 00:34:53,066 --> 00:34:54,690 Oras na nagpapahintulot, kami ay pumunta sa pamamagitan na ito. 609 00:34:54,690 --> 00:34:59,200 Ngunit para sa ngayon, ako hulaan dapat naming demo kung ano ang mayroon kami. 610 00:34:59,200 --> 00:35:01,380 Tayo'y umaasa na ito ay napupunta OK Hayaan. 611 00:35:01,380 --> 00:35:02,670 >> Kaya ito ay GHCI. 612 00:35:02,670 --> 00:35:06,580 613 00:35:06,580 --> 00:35:09,121 At kami na mag-load ng file Mayroon akong tinawag song.lhs, 614 00:35:09,121 --> 00:35:10,620 kung saan ay ang file na lang ako nagpakita sa iyo. 615 00:35:10,620 --> 00:35:11,470 OK, malaki. 616 00:35:11,470 --> 00:35:15,010 Tulad ng mas maaga sinabi Connor, ito pinagsama-sama, ito type naka-check, 617 00:35:15,010 --> 00:35:18,380 kaya ang maaari kong huminga ng maraming mas madali. 618 00:35:18,380 --> 00:35:20,010 Ito ay hindi pagpunta sa pumutok sa akin. 619 00:35:20,010 --> 00:35:22,720 >> Ko nais na ipakita sa iyo ang isang bagay na kapaki-pakinabang. 620 00:35:22,720 --> 00:35:25,900 Maaari mong makita na ang isang module load tinatawag 50. 621 00:35:25,900 --> 00:35:28,240 Maaari mong i-browse ang module na iyon. 622 00:35:28,240 --> 00:35:32,092 At ito ay kaya maganda tungkol doing-- siguro kung ano 623 00:35:32,092 --> 00:35:34,550 ang iyong ginagawa sa Haskell ay hindi tinatawag na pag-unlad ng software, 624 00:35:34,550 --> 00:35:36,980 ngunit maaari mong gawin ang isang pulutong ng nakakatuwang bagay sa inyong sarili. 625 00:35:36,980 --> 00:35:42,410 At ang workflow ay talagang maganda bilang kumpara sa isang pulutong ng iba pang mga wika, 626 00:35:42,410 --> 00:35:45,872 dahil maaari mong makita sa isang talagang nababasa paraan kung ano ang nangyayari sa. 627 00:35:45,872 --> 00:35:47,830 Kaya makikita natin na mayroon kami lahat ng mga parirala, kung saan 628 00:35:47,830 --> 00:35:53,760 ay mga listahan ng mga pag-alok ng musika, at pagkatapos namin bumuo ng mga up sa isang bagay na mas malaki, 629 00:35:53,760 --> 00:35:55,220 na kung saan ay isang awit ng musika. 630 00:35:55,220 --> 00:35:58,450 Ito ay isang yunit ng musical. 631 00:35:58,450 --> 00:36:05,545 At pagkatapos ay maaari naming i-play ang lahat ng ito may isang function na tinatawag na pag-play ng musika. 632 00:36:05,545 --> 00:36:09,040 Maaari mong makita na pababa dito. 633 00:36:09,040 --> 00:36:11,310 Na kung saan ay i-play lamang. 634 00:36:11,310 --> 00:36:15,040 >> Dapat kong say-- Hindi ko makipag-usap tungkol ito dollar sign na sa lahat ng dako. 635 00:36:15,040 --> 00:36:17,980 Dollar sign ay isa pang itanim operator. 636 00:36:17,980 --> 00:36:22,500 Ngunit ito ay ang pinakamababang mauuna ng anumang operator, na epektibong 637 00:36:22,500 --> 00:36:24,960 ay nangangahulugan na ang lahat ng bagay sa sa kaliwa ng dollar sign 638 00:36:24,960 --> 00:36:28,460 at ang mga karapatan ng dollar sign, kami ay pagpunta upang makakuha ng sinusuri bago ito. 639 00:36:28,460 --> 00:36:31,430 Kaya ito ay uri ng tulad ng iba pang paraan ng pagdaragdag ng panaklong. 640 00:36:31,430 --> 00:36:33,980 641 00:36:33,980 --> 00:36:36,220 >> CONNOR HARRIS: Ito ay isa lamang function na komposisyon. 642 00:36:36,220 --> 00:36:40,026 At ito ay nagsisiguro na hindi mo have-- kung ikaw ay may mga pag-andar magkabilang gilid o itanim 643 00:36:40,026 --> 00:36:42,900 operator sa magkabilang panig, ang mga ito ay hindi iugnay sa kabuuan nito at bigyan ka ng 644 00:36:42,900 --> 00:36:46,030 hindi inaasahang resulta. 645 00:36:46,030 --> 00:36:49,790 >> STEPHEN KREWSON: So can-- namin gamit na, maaari naming tawagan. 646 00:36:49,790 --> 00:36:51,415 Una, kakailanganin naming i-play ito nang walang drums. 647 00:36:51,415 --> 00:37:00,330 648 00:37:00,330 --> 00:37:03,170 Iyan ang helicopter, mga MIDI helicopter. 649 00:37:03,170 --> 00:37:05,495 >> [MUSIC nagpe-play] 650 00:37:05,495 --> 00:37:08,525 651 00:37:08,525 --> 00:37:09,525 Mayroong ang square wave. 652 00:37:09,525 --> 00:37:24,520 653 00:37:24,520 --> 00:37:25,490 Ang tinig dumaloy. 654 00:37:25,490 --> 00:37:27,630 At maaari mong talagang pumunta sa wild ito. 655 00:37:27,630 --> 00:37:30,872 Ako pumili ng isang pretty simpleng isa, dahil alam ko na hindi ko dapat kumagat off 656 00:37:30,872 --> 00:37:31,830 marami sa kaya kong ngumunguya. 657 00:37:31,830 --> 00:37:36,460 Lamang panatilihin ito medyo simple upang ipakita ang mga pangunahing ideya. 658 00:37:36,460 --> 00:37:39,952 Ngunit pagkatapos ay ako ay tulad ng, na namin Nakakuha upang magdagdag ng ilang drums na ito. 659 00:37:39,952 --> 00:37:41,910 Dahil lang sa ito ay isang Medyo hindi malalampasan, 660 00:37:41,910 --> 00:37:45,790 at hindi ko alam gamitin ang pangalan ng mga bahagi drum, 661 00:37:45,790 --> 00:37:49,490 Nakamapang ako them-- dahil ang mga ito bahagi ng na enumerated class, 662 00:37:49,490 --> 00:37:51,500 Nakamapang ko sa kanila na ints. 663 00:37:51,500 --> 00:37:53,120 Ang isa ay tulad ng isang bass drum. 664 00:37:53,120 --> 00:37:54,370 Zero ay pati na rin. 665 00:37:54,370 --> 00:37:56,000 Pitong ay isang mataas na sumbrero. 666 00:37:56,000 --> 00:38:00,920 At pababa sa dito kung saan ang function makakuha ng kaunti pa random, 667 00:38:00,920 --> 00:38:02,100 ang mga ito ay tulad ng conga drums. 668 00:38:02,100 --> 00:38:08,360 >> Kaya kung sa tingin mo about-- marahil isang masaya na paraan upang ipatupad ang isang drum machine 669 00:38:08,360 --> 00:38:12,830 ay ang paggamit ng tunay maayos pattern sa iyong bass drum. 670 00:38:12,830 --> 00:38:17,640 Kaya halimbawa, sa pag-filter sa ibabaw ng listahan ng lahat ng bagay na nagbibigay sa likod 671 00:38:17,640 --> 00:38:20,590 isang 1 kapag ito ay kinuha module 04. 672 00:38:20,590 --> 00:38:27,190 Kaya kumuha ako ng 1, 5, 9, 13, 17-- kaya ito ay ang unang matalo ng bawat hakbang. 673 00:38:27,190 --> 00:38:32,860 >> At pagkatapos na ito ay ang parehong bagay Paglipat sa loob ng dalawang hakbang. 674 00:38:32,860 --> 00:38:33,850 Kaya iyon ang offbeat. 675 00:38:33,850 --> 00:38:37,480 Kaya ito ay magiging isang bagay tulad ng isang mataas na sumbrero. 676 00:38:37,480 --> 00:38:39,640 At pagkatapos ay muli, down dito, ito ay isang maliit random, 677 00:38:39,640 --> 00:38:41,080 dahil ang aming ginagawa conga drums. 678 00:38:41,080 --> 00:38:44,180 At ako ay may ilang mga maracas down dito, masyadong. 679 00:38:44,180 --> 00:38:50,280 >> Kaya maaari kong tumawag sa drum machine play, ngunit ito ay pumunta sa magpakailanman, 680 00:38:50,280 --> 00:38:53,700 at maaari na itong magsimula daklot up lahat ng memory sa aking system. 681 00:38:53,700 --> 00:38:57,090 Kaya Tatawag ako ng function na ito play ng musika, na kung saan ang bilang namin makita, 682 00:38:57,090 --> 00:39:02,020 gamitin ang truncating parallel komposisyon upang i-play ang aming maliit Frere Jacques kanta 683 00:39:02,020 --> 00:39:04,200 kasama ang mga ito kakaiba drum machine. 684 00:39:04,200 --> 00:39:06,190 Kaya sabihin tumagal ng isang pagtingin. 685 00:39:06,190 --> 00:39:10,920 At mangyaring huwag mapabuti sa aking pag-aayos ng lahat ng mga bahagi drum. 686 00:39:10,920 --> 00:39:13,375 Hindi ang aking specialty, ngunit ako nagkaroon ng maraming masaya paggawa nito. 687 00:39:13,375 --> 00:39:17,678 688 00:39:17,678 --> 00:39:20,654 >> [MUSIC nagpe-play] 689 00:39:20,654 --> 00:39:52,260 690 00:39:52,260 --> 00:39:56,980 >> Kaya ng mga kurso, ito ay ang lahat ng Medyo hindi na masaya 691 00:39:56,980 --> 00:40:01,100 kapag hindi namin na-convert ito sa isang puntos kaya marahil ito 692 00:40:01,100 --> 00:40:04,650 maaaring bigyang-kahulugan sa pamamagitan ng isang tao kumanta. 693 00:40:04,650 --> 00:40:06,535 Kaya ako ay hindi tatakbo ito dito. 694 00:40:06,535 --> 00:40:07,910 Kayo ay nakagawa na nabuo ko ang file. 695 00:40:07,910 --> 00:40:10,280 Maaari mong makita na mayroong isang dot LilyPond file-- at ito 696 00:40:10,280 --> 00:40:14,500 ay higit sa aking segue sa Connor-- at isang tuldok MIDI file, 697 00:40:14,500 --> 00:40:18,610 at isang tuldok PDF file, na kung saan ay kung ano ang LilyPond ay ganap na bumuo. 698 00:40:18,610 --> 00:40:23,770 >> Ngunit ang mga ito ay ang mga script, at idedetalye ko lamang tumakbo ang mga ito sa kanilang mga pagpipilian sa tulong. 699 00:40:23,770 --> 00:40:28,090 Kung makuha na ninyo ang mga up at tumatakbo sa Euterpea, maaari kang bumuo ng isang Midi file. 700 00:40:28,090 --> 00:40:31,160 At pagkatapos ay mula sa MIDI file na may ganitong MIDI 2LY program, 701 00:40:31,160 --> 00:40:34,930 maaari kang bumuo ng isang Lily Pond file, at pagkatapos ay sa iyo 702 00:40:34,930 --> 00:40:37,974 maaaring bumuo ng isang PDF ng score. 703 00:40:37,974 --> 00:40:39,390 At tayo ay dapat kumuha ng isang pagtingin sa ito. 704 00:40:39,390 --> 00:40:52,599 705 00:40:52,599 --> 00:40:55,140 Kaya Connor ay malamang na ipakita sa iyo kung paano i-annotate ito ng mas mahusay, 706 00:40:55,140 --> 00:41:02,570 ngunit ito ay Frere Jacques bilang binuo sa pamamagitan ng sa akin sa Euterpea. 707 00:41:02,570 --> 00:41:07,300 Ito lang sa C. ang dapat kong magkaroon ng korte kung ano ang sumibak ito ay sa tunay na. 708 00:41:07,300 --> 00:41:11,090 Ngunit iyon ay mga tubo para sa kung paano mo gawin iyon na iyon. 709 00:41:11,090 --> 00:41:12,950 Makipag-usap nang higit pa tungkol LilyPond Hayaan. 710 00:41:12,950 --> 00:41:15,780 >> CONNOR HARRIS: Tingnan natin OK Hayaan. 711 00:41:15,780 --> 00:41:19,480 712 00:41:19,480 --> 00:41:21,419 Banggitin mo ba Ikaw Dagdagan Haskell? 713 00:41:21,419 --> 00:41:22,460 STEPHEN KREWSON: Oh oo. 714 00:41:22,460 --> 00:41:23,480 Tingnan Matuto kang Haskell. 715 00:41:23,480 --> 00:41:24,410 Ito ay sa mga resources. 716 00:41:24,410 --> 00:41:26,830 Iyon ang dahilan kung paano ako nagsimula pag-aaral, at ito ay mahusay. 717 00:41:26,830 --> 00:41:27,580 Hindi pipi aaral. 718 00:41:27,580 --> 00:41:28,829 >> CONNOR HARRIS: Kaya ito ay online. 719 00:41:28,829 --> 00:41:34,760 Kaya ang isang tao na may pangalang [hindi marinig] learnyouahaskell.com, walang mga puwang. 720 00:41:34,760 --> 00:41:37,065 Grammar ay may sakit. 721 00:41:37,065 --> 00:41:38,690 STEPHEN KREWSON: Ito ay isinalarawan, masyadong. 722 00:41:38,690 --> 00:41:39,440 CONNOR HARRIS: Kaya kung ano ang LilyPond? 723 00:41:39,440 --> 00:41:42,480 Ito ay isang paturol programming wika para sa typesetting music. 724 00:41:42,480 --> 00:41:45,480 Kaya declarative-- maaari mong mag-isip ng mga bagay tulad ng HTML, 725 00:41:45,480 --> 00:41:50,900 kung saan ikaw ay hindi saying-- HTML Hindi sinasabi kung paano web browser ay dapat na 726 00:41:50,900 --> 00:41:52,180 render pahina hakbang-hakbang. 727 00:41:52,180 --> 00:41:54,096 Sinasabi Ito lamang ito ay isang paglalarawan textual 728 00:41:54,096 --> 00:41:56,100 ng kung ano ang nais mo ang pahina sa hitsura. 729 00:41:56,100 --> 00:41:59,310 >> At pagkatapos ito ay din ng isang programa na compiles ang wikang ito, 730 00:41:59,310 --> 00:42:02,300 o ito basahin sa kanyang at pagkatapos ay talagang gumagana ang typesetting para sa iyo, 731 00:42:02,300 --> 00:42:05,570 at ito spits out ang mga ito kahanga-hangang naghahanap score PDF. 732 00:42:05,570 --> 00:42:08,250 Maaari ka ring makakuha PNG format o anuman. 733 00:42:08,250 --> 00:42:10,300 Ang isang mahusay na paraan upang isipin ng mga ito ay sa pamamagitan ng pagkakatulad 734 00:42:10,300 --> 00:42:16,620 ay na LaTeX ay uri ng tulad LillyPond, ngunit para lamang ordinaryong pampalimbagan. 735 00:42:16,620 --> 00:42:20,360 Kaya sa halip of-- ito ay hindi WYSIWYG, Ano Tingnan mo 736 00:42:20,360 --> 00:42:22,960 Ay Ano Kumuha ka, tulad ng, sabihin Finale ay, o Sibelius, 737 00:42:22,960 --> 00:42:27,430 o Microsoft Word, kung saan maaari mong i-type sa tunay na oras at draft bagay sa real time 738 00:42:27,430 --> 00:42:31,340 at makita ang mga pagbabago agad. 739 00:42:31,340 --> 00:42:32,140 >> Ito ay batay text. 740 00:42:32,140 --> 00:42:35,290 Mayroon kang upang itala ang iyong marka ng paggamit ng isang hiwalay na programa 741 00:42:35,290 --> 00:42:37,090 at lumabas ang mga PDF sa ibang pagkakataon. 742 00:42:37,090 --> 00:42:43,320 Ito ay mas mababa ng kaunti maginhawa para sa paggamit kung ikaw ay 743 00:42:43,320 --> 00:42:46,520 sumusubok na magsulat ng direkta sa isang puntos at ikaw ay 744 00:42:46,520 --> 00:42:48,620 sinusubukan mong gumawa ng sulat sa computer. 745 00:42:48,620 --> 00:42:50,830 Ngunit may isang pulutong ng mga pakinabang para sa mga ito. 746 00:42:50,830 --> 00:42:56,110 One, ito ay ang hitsura ng isang pulutong nicer, dahil LillyPond maaaring aktwal 747 00:42:56,110 --> 00:42:58,210 maglaan ng oras upang gawin layout desisyon ng maayos, 748 00:42:58,210 --> 00:43:02,380 hindi katulad ng Sibelius o Finale, na kung saan ay may upang gumawa ng mga nakompromisong algorithm upang 749 00:43:02,380 --> 00:43:05,020 na maaari nilang ipakita mga bagay-bagay sa real time. 750 00:43:05,020 --> 00:43:07,660 >> Kaya bakit LilyPond-- computer graphics ay mahirap. 751 00:43:07,660 --> 00:43:10,535 Kung ikaw ay gumagawa ng anumang bagay na may musika at nais mong isulat ang mga marka, 752 00:43:10,535 --> 00:43:13,900 hindi mo nais na magsulat ang lahat ng bagay sa iyong sarili 753 00:43:13,900 --> 00:43:19,040 na nagsisimula sa kung paano gumuhit staffs at kung paano gumuhit ng notepads. 754 00:43:19,040 --> 00:43:21,020 Ito ay lubhang mahirap. Ito ay nagawa bago. 755 00:43:21,020 --> 00:43:22,170 Ikaw ang fine. 756 00:43:22,170 --> 00:43:26,200 >> Kung nais mong gamitin ang Finale o Sibelius, ang mga format ng file para sa mga bagay-bagay 757 00:43:26,200 --> 00:43:30,180 ay masyadong kumplikado, at hindi ka maaaring talagang gamitin ang mga ito ng programming. 758 00:43:30,180 --> 00:43:35,020 Maaari mong buksan up Sibelius sa Finale at pumunta sa File, I-export bilang PDF sa iyong sarili, 759 00:43:35,020 --> 00:43:37,600 ngunit hindi ka maaaring talagang tumawag na mula sa isang script. 760 00:43:37,600 --> 00:43:40,440 LillyPond, maaari kang tumawag mula sa mga script. 761 00:43:40,440 --> 00:43:44,397 Maaari mong madaling umulit LillyPond sa LaTeX. 762 00:43:44,397 --> 00:43:47,230 Hindi ako ay magkakaroon ng maraming oras upang pumunta sa mga teknolohiyang ito sa ngayon, 763 00:43:47,230 --> 00:43:48,321 ngunit sila ay umiiral. 764 00:43:48,321 --> 00:43:50,070 Kung nais mong tingnan ang sa isang LillyPond book, 765 00:43:50,070 --> 00:43:53,760 ito ay isang programa na nanggagaling sa iyong pamamahagi LillyPond, 766 00:43:53,760 --> 00:43:57,030 at ito ay para iterating LillyPond fragment sa LaTeX 767 00:43:57,030 --> 00:44:00,340 kung gusto mong gawin ang isang bagay tulad ng isang malaking dokumento musicology 768 00:44:00,340 --> 00:44:02,289 may mga halimbawa, halimbawa. 769 00:44:02,289 --> 00:44:04,580 At ito ay isang mahusay na kasanayan para sa buhay kung ikaw ay gumagawa ng anumang bagay 770 00:44:04,580 --> 00:44:05,770 gamit ang musika, hindi CS50 lamang. 771 00:44:05,770 --> 00:44:09,320 Ginagamit ko na LillyPond para sa lahat sa aking mga proyekto komposisyon 772 00:44:09,320 --> 00:44:11,880 dahil ako ay isa lamang senior sa mataas na paaralan. 773 00:44:11,880 --> 00:44:13,455 >> Kaya narito ang ilang mga simpleng halimbawa. 774 00:44:13,455 --> 00:44:17,490 775 00:44:17,490 --> 00:44:21,060 Ito ay isa lamang na kinatawan ng antas ng kahirapan 776 00:44:21,060 --> 00:44:23,481 na ang karamihan sa mga tao na gusto mukha ito sila ay sinusubukan 777 00:44:23,481 --> 00:44:24,980 gamitin LilyPond para sa simpleng mga proyekto. 778 00:44:24,980 --> 00:44:29,519 Ang unang isa ay ang simula sa isang chorale pagpapakilala sa pamamagitan ng Bach. 779 00:44:29,519 --> 00:44:31,810 Ito ang isa sa ibaba ang isang sipi mula sa isa sa aking mga gawa, 780 00:44:31,810 --> 00:44:34,650 at ito ay doon lamang upang ipakita ka ng mga bagay tulad ng [hindi marinig] 781 00:44:34,650 --> 00:44:38,550 paglagay ng maramihang mga linya sa parehong mga kawani, kung paano lyric gumagana undersetting. 782 00:44:38,550 --> 00:44:41,350 783 00:44:41,350 --> 00:44:46,110 Lyric underlays ay isang bagay na masyadong madaling gamitin LilyPond para koro musika. 784 00:44:46,110 --> 00:44:48,814 >> At kaya pagkatapos ay may ilang mga mas kumplikado halimbawa dito. 785 00:44:48,814 --> 00:44:50,980 Lahat ng ito ay tapos na sa LilyPond at sila hindi magagawa. 786 00:44:50,980 --> 00:44:55,280 Ang unang sipi ay mula sa [Hindi marinig] sa pamamagitan ng [hindi marinig]. 787 00:44:55,280 --> 00:44:58,860 At ito [hindi marinig] mula isang piraso para sa solo bass 788 00:44:58,860 --> 00:45:03,550 flute pamamagitan [hindi marinig], sino ang isang longtime-- na 789 00:45:03,550 --> 00:45:07,101 ay isang matagal nang miyembro ng department musika dito, tingin ko. 790 00:45:07,101 --> 00:45:08,600 Hindi ako sigurado kung saan siya ay nawala off sa. 791 00:45:08,600 --> 00:45:12,410 Ngunit siya ang tagapayo ng Harvard Composers Association para sa isang mahabang panahon. 792 00:45:12,410 --> 00:45:13,530 Kahanga-hangang tao. 793 00:45:13,530 --> 00:45:16,920 At magsusulat siya ng ilang musika na may tunay kumplikado notasyon na LillyPond 794 00:45:16,920 --> 00:45:20,500 gayunman ay maaaring hawakan sa lalong mabuti. 795 00:45:20,500 --> 00:45:26,030 >> Kaya lamang upang mabigyan ka ng isang katinuan kung ano kakayahan ang bagay na ito ni are-- kaya 796 00:45:26,030 --> 00:45:28,960 internals ng LillyPond ay masyadong kumplikado. 797 00:45:28,960 --> 00:45:31,060 At maaari mong gamitin ito para sa sa isang mahabang panahon, kabilang ang 798 00:45:31,060 --> 00:45:32,520 para sa ilang mga medyo kumplikado mga bagay-bagay, na walang tunay 799 00:45:32,520 --> 00:45:34,060 hindi na malaman ng maraming tungkol sa mga ito. 800 00:45:34,060 --> 00:45:38,720 Ngunit ang mga pangunahing ideya ay na sa pinakamababang antas, ang mga atom ng LillyPonds 801 00:45:38,720 --> 00:45:39,970 ang mga tala. 802 00:45:39,970 --> 00:45:42,761 Maglaman ang mga tala ng isang context na tinatawag na boses. 803 00:45:42,761 --> 00:45:44,510 Kaya ang tinig konteksto talaga ay tumutugon 804 00:45:44,510 --> 00:45:47,410 sa isang solong linya ng polyphony. 805 00:45:47,410 --> 00:45:49,410 At pagkatapos ay ang konteksto ay maaaring maging nakapaloob hierarchically 806 00:45:49,410 --> 00:45:53,590 mas mataas na mga antas na kumakatawan staffs sa puntos 807 00:45:53,590 --> 00:45:56,750 o mas malaki pagpapangkat tulad piano staffs o koro staffs, 808 00:45:56,750 --> 00:45:58,990 at pagkatapos ay sa wakas buong iskor konteksto. 809 00:45:58,990 --> 00:46:02,260 At maaari mong aktwal na pumaligid maramihang mga marka sa isang libro. 810 00:46:02,260 --> 00:46:05,770 >> At sa bawat konteksto ay may isang bilang ng mga naka-attach engravers. 811 00:46:05,770 --> 00:46:08,340 Kung tumingin ka sa pamamagitan ng mga nilalaman ng isang konteksto 812 00:46:08,340 --> 00:46:14,410 at i-print ang isang tiyak na simbolo o ng isang tiyak na uri ng mga simbolo tulad ng kinakailangan. 813 00:46:14,410 --> 00:46:17,840 Kaya sa bawat tinig konteksto, mayroong [hindi marinig] tala 814 00:46:17,840 --> 00:46:24,270 ukit na ay karaniwang isang function o isang bagay na nagsusulat out ang lahat ng mga tala 815 00:46:24,270 --> 00:46:26,290 ulo sa kanang bahagi ng isang pahina. 816 00:46:26,290 --> 00:46:29,510 Pagkatapos ay mayroong isang bitak-ukit, kung saan nagsusulat out bitak sa mga kawani. 817 00:46:29,510 --> 00:46:31,517 Pagkatapos ay may isang metronom mark-ukit na 818 00:46:31,517 --> 00:46:33,100 nagsusulat out metronome marka sa isang puntos. 819 00:46:33,100 --> 00:46:36,410 At ang lahat ng magkasya pretty rin sa hierarchy. 820 00:46:36,410 --> 00:46:39,500 At ito ay tunay, tunay, tunay nako-customize na, na kung saan kailangan mo 821 00:46:39,500 --> 00:46:42,880 kung gusto mong makakuha ng mga bagay na tulad ng. 822 00:46:42,880 --> 00:46:45,730 >> Kaya ang lahat ng mga konteksto ay may isang maraming iba't ibang mga katangian 823 00:46:45,730 --> 00:46:52,410 na maaari mong baguhin sa lahat ng bagay mula sa spacing sa iba't-ibang mga font 824 00:46:52,410 --> 00:46:54,942 pagpili sa mga sukat ng mga bagay-bagay. 825 00:46:54,942 --> 00:46:56,900 Kung nais mong gawin kahit na bagay na mas kumplikado, 826 00:46:56,900 --> 00:46:59,210 may isang naka-embed scripting wika. 827 00:46:59,210 --> 00:47:01,820 Gumagamit sila ng pamamaraan, na ay diyalekto ng pagkabulol. 828 00:47:01,820 --> 00:47:04,960 Ang mga malamang na hindi ibig sabihin kahit ano sa inyo. 829 00:47:04,960 --> 00:47:06,900 Pero talaga, sa isang scheme isa pang functional 830 00:47:06,900 --> 00:47:09,500 programming language, mas marami o mas kaunti. 831 00:47:09,500 --> 00:47:10,800 >> STEPHEN KREWSON: Ang kurbatang-in. 832 00:47:10,800 --> 00:47:12,690 >> CONNOR HARRIS: Oo. 833 00:47:12,690 --> 00:47:15,390 Ito ay isang magandang itali-in, ipagpalagay ko. 834 00:47:15,390 --> 00:47:20,150 At ito ay ginagamit bilang isang pagtuturo ng wika, talaga, down Mass Ave. Sa MIT. 835 00:47:20,150 --> 00:47:26,590 At ito ay tunay magaling para LillyPond para sa iba't-ibang mga teknikal na dahilan. 836 00:47:26,590 --> 00:47:30,317 >> At kaya kung nais mong gumawa ng mga simpleng mga pag-aayos na nakasalalay sa conditionals, 837 00:47:30,317 --> 00:47:32,900 para example-- mayroong tiyak kalagayan ng isang marka na nakilala, 838 00:47:32,900 --> 00:47:36,495 gumawa ng mga pagbabago sa layout o whatnot-- pagkatapos 839 00:47:36,495 --> 00:47:37,620 mga facility doon. 840 00:47:37,620 --> 00:47:38,667 Ang mga ito ay kumplikado. 841 00:47:38,667 --> 00:47:40,250 Kaya narito ang isang magandang simpleng code sample. 842 00:47:40,250 --> 00:47:43,810 Ito ay limang linya. 843 00:47:43,810 --> 00:47:46,120 Talaga, ako pagtukoy ng dalawang tungkod. 844 00:47:46,120 --> 00:47:46,904 Ito ay sa 3/4. 845 00:47:46,904 --> 00:47:48,695 May isang Ang unang staff nakalakip tempo mark, 846 00:47:48,695 --> 00:47:51,110 ngunit na ang aktwal na pagpunta upang pumunta sa sa buong score, 847 00:47:51,110 --> 00:47:54,960 dahil tempo marks ay nasa antas ng kalidad. 848 00:47:54,960 --> 00:47:59,044 Ang metronome mark-ukit ay naka-attach sa iskor na konteksto. 849 00:47:59,044 --> 00:48:01,460 Mayroong iba't ibang mga susi, dahil ang [hindi marinig] ukit 850 00:48:01,460 --> 00:48:02,710 ay naka-attach sa mga staffs. 851 00:48:02,710 --> 00:48:04,441 Maaari mong talagang gawin ay. 852 00:48:04,441 --> 00:48:06,190 Ang sample na sinulat ko ay talagang sa C major, 853 00:48:06,190 --> 00:48:07,990 ngunit ito lamang sa ipakita maaari kang magkaroon ng 854 00:48:07,990 --> 00:48:09,570 iba't-ibang mga pindutan sa iba't ibang mga staffs. 855 00:48:09,570 --> 00:48:15,710 At ang basic syntax ay mong isulat tandaan mga pangalan sa E, F, G, ano man. 856 00:48:15,710 --> 00:48:18,910 Kung nais mong gawin accidentals, hulapi mo AY o ES. 857 00:48:18,910 --> 00:48:22,640 Ito ay mula sa Dutch musicological balarila. 858 00:48:22,640 --> 00:48:28,290 >> At upang gawin octave leaps, kailangan mong gamitin ang mga tick mark, comma o kudlit. 859 00:48:28,290 --> 00:48:30,580 Kamag-anak Ang lamang ay nangangahulugan kahit anong mayroon ka ng isang tala, 860 00:48:30,580 --> 00:48:34,080 ito ay awtomatikong plaec sa oktaba pinakamalapit sa ang nakaraang isa. 861 00:48:34,080 --> 00:48:37,624 At kung gusto mong tumalon higit sa isang fifth-- sabihin ang ikalimang o more-- 862 00:48:37,624 --> 00:48:39,165 pagkatapos ay kailangan mong gamitin ang [hindi marinig]. 863 00:48:39,165 --> 00:48:42,580 Ngunit kung hindi man, hindi mo na kailangang tukuyin ang octave ng bawat isang note. 864 00:48:42,580 --> 00:48:46,130 >> At kamag C, kalakasan, at C, tukuyin mo lamang middle C 865 00:48:46,130 --> 00:48:48,630 at base C, lalo na unang tala. 866 00:48:48,630 --> 00:48:55,020 Pagkatapos ay mayroon kang mga staffs na maisaayos ang dalawang tinig o mga halimbawa ng musika, 867 00:48:55,020 --> 00:48:56,730 at ikaw ay may isang puntos. 868 00:48:56,730 --> 00:48:58,440 At na ganito ang hitsura. 869 00:48:58,440 --> 00:49:01,780 870 00:49:01,780 --> 00:49:05,380 >> Kung nais mong maglaan ng panahon upang kopyahin na sample ng LillyPond 871 00:49:05,380 --> 00:49:07,530 code sa nakaraang slide down dito, at ikaw ay 872 00:49:07,530 --> 00:49:09,030 maaaring isulat ito para LillyPond iyong sarili. 873 00:49:09,030 --> 00:49:11,280 Alam ko namin nakuha ng isang bagay na hitsura ng maraming tulad nito. 874 00:49:11,280 --> 00:49:17,236 875 00:49:17,236 --> 00:49:19,610 Kaya may isa pang teknolohiya tinatawag XML Music pinananatili 876 00:49:19,610 --> 00:49:22,030 sa pamamagitan ng ganap na naiibang mga tao. 877 00:49:22,030 --> 00:49:28,150 XML ay isang textual data structure-- ko hindi dapat sabihin data structure-- sabihin 878 00:49:28,150 --> 00:49:29,580 talinghaga sort mapa ng. 879 00:49:29,580 --> 00:49:33,800 At ito ay dinisenyo upang i-hold hierarchical data nang mahusay. 880 00:49:33,800 --> 00:49:37,050 HTML, halimbawa, ay isang uri ng XML. 881 00:49:37,050 --> 00:49:41,090 At maaari mong sabihin XML dahil sila Nagkaroon ang lahat ng mga anggulo bracket at anggulo 882 00:49:41,090 --> 00:49:44,700 bracket slash marks na patlang show data. 883 00:49:44,700 --> 00:49:47,390 >> Hindi ko magkaroon ng isang code halimbawa mula sa Music XML. 884 00:49:47,390 --> 00:49:50,450 Maaari mong mahanap ito sa iyong sarili. 885 00:49:50,450 --> 00:49:53,735 Karaniwang, ang dahilan baka gusto gamitin ang XML bilang ang intermediate yugto 886 00:49:53,735 --> 00:49:55,980 ay, una sa lahat, ito ay isang format interchange 887 00:49:55,980 --> 00:50:02,301 para talaga every-- hindi ko dapat sabihin bawat, ngunit isang pulutong ng mga iba't ibang mga puntos 888 00:50:02,301 --> 00:50:02,800 manunulat. 889 00:50:02,800 --> 00:50:04,966 Kaya't kung ikaw ay sumulat sa Musika XML, hindi lamang maaaring LillyPond 890 00:50:04,966 --> 00:50:08,080 basahin ito sa tulong ng mga ito auxilary programa na tinatawag na Musika XML na LY, 891 00:50:08,080 --> 00:50:11,360 ngunit maaari ring basahin Finale ito, maaaring basahin ito Sibelius. 892 00:50:11,360 --> 00:50:14,770 Depende sa kung paano ang iyong panloob na object gumagana hierarchy para sa kumakatawan sa musika, 893 00:50:14,770 --> 00:50:18,820 ito ay maaaring maging mas madaling isulat out sa Music XML kaysa sa LillyPond 894 00:50:18,820 --> 00:50:22,410 at umasa lamang sa Music XML sa LY para gawin ang mga conversion. 895 00:50:22,410 --> 00:50:24,282 >> Hindi sa tingin ko [hindi marinig] Wala Music XML. 896 00:50:24,282 --> 00:50:25,490 STEPHEN KREWSON: Ito ay hindi. 897 00:50:25,490 --> 00:50:26,340 Ang isang tao ay nagtatrabaho sa mga ito, kahit na. 898 00:50:26,340 --> 00:50:27,090 >> CONNOR HARRIS: OK. 899 00:50:27,090 --> 00:50:31,040 Euterpea hindi magkaroon ng isang Music XML output pa function. 900 00:50:31,040 --> 00:50:35,340 Kung nais mo ng isang pangwakas na proyekto ideya, siguro makipag-ugnay sa isang lalaki 901 00:50:35,340 --> 00:50:38,620 na nakakaalam si Esteban, at sila ay maaaring gamitin ang iyong tulong. 902 00:50:38,620 --> 00:50:40,992 >> STEPHEN KREWSON: Gusto ko ibig na iyon. 903 00:50:40,992 --> 00:50:43,450 CONNOR HARRIS: Gayundin, talaga, bawat programming languages 904 00:50:43,450 --> 00:50:46,610 na nagkakahalaga ng kanyang asin ay mayroon ng isang XML library, 905 00:50:46,610 --> 00:50:51,030 para makita mo ang panloob convert ang lahat ng ng iyong musika sa ilang mga bagay 906 00:50:51,030 --> 00:50:54,120 na ang XML library ay maaaring sumulat out na nangangailangan ng mas kaunting 907 00:50:54,120 --> 00:50:57,470 babaguhin sa iyong panloob na istraktura para sa kahit anong bagay ka ng musika 908 00:50:57,470 --> 00:51:00,310 nais na magsulat sa pagsulat ito direkta sa LillyPond gusto. 909 00:51:00,310 --> 00:51:04,380 Pagkatapos i-print lamang ito sa mga XML na may ang XML aklatan sa inyong wika, 910 00:51:04,380 --> 00:51:07,260 na kung saan ay garantiya na ito ay syntactically tama at lahat ng bagay, 911 00:51:07,260 --> 00:51:08,720 at pagkatapos ay i-convert ito sa LillyPond. 912 00:51:08,720 --> 00:51:11,060 Kaya technology maaari mong tumingin sa kung ikaw ay gumagawa ng isang bagay 913 00:51:11,060 --> 00:51:11,650 ganito. 914 00:51:11,650 --> 00:51:14,490 915 00:51:14,490 --> 00:51:16,370 >> [Hindi marinig], ang isa pang auxilarry teknolohiya. 916 00:51:16,370 --> 00:51:21,700 Ito ay isa lamang Tech Works o Tech Studio para LillyPond. 917 00:51:21,700 --> 00:51:25,380 Kaya ito ay nag-aalok ng tulong sa syntax, na may mga template 918 00:51:25,380 --> 00:51:28,770 para sa iba't ibang mga karaniwang mga kumbinasyon ng mga instrumento. 919 00:51:28,770 --> 00:51:32,780 Ito ay nagpapahintulot sa split screen sa pagtingin kaya Maaari kang magkaroon ng iyong code sa isang window 920 00:51:32,780 --> 00:51:37,350 at PDF sa ibang window at mag-click sa mga lugar sa PDF 921 00:51:37,350 --> 00:51:40,650 upang lumaktaw sa mga may-katuturang spot sa iyong source code. 922 00:51:40,650 --> 00:51:45,330 Ito ay mas kapaki-pakinabang kung ikaw ay talagang pagsulat LillyPond file sa iyong sarili 923 00:51:45,330 --> 00:51:47,400 kaysa sa kung ikaw ay pagbuo ng ang mga ito ng programming. 924 00:51:47,400 --> 00:51:51,230 Ngunit muli, ito ay isang bagay na kapaki-pakinabang na magkaroon. 925 00:51:51,230 --> 00:51:51,970 >> Great. 926 00:51:51,970 --> 00:51:55,860 Isa pang resources-- kukunin ko na lang pumunta sa pamamagitan ng masyadong mabilis. 927 00:51:55,860 --> 00:52:01,270 LillyPond manuals LillyPond ay mahusay na dokumentasyon sa website nito. 928 00:52:01,270 --> 00:52:02,270 Mayroon silang isang tutorial. 929 00:52:02,270 --> 00:52:03,478 Sila ay may isang reference syntax. 930 00:52:03,478 --> 00:52:07,010 Sila ay may daan-daang mga snippets para sa iba't-ibang maliliit na bagay 931 00:52:07,010 --> 00:52:09,930 Maaaring kailanganin yo gawin upang ipakita ang iba't-ibang mga kakayahan. 932 00:52:09,930 --> 00:52:12,250 Kung nais mong gamitin ang ang scripting wika 933 00:52:12,250 --> 00:52:14,740 o gumawa ng mas malawak na mga pagpapasadya, pagkatapos ay mayroong 934 00:52:14,740 --> 00:52:16,730 internals isangguni sa URL na iyon. 935 00:52:16,730 --> 00:52:21,950 Kung nais mong gamitin ang Music XML, may na URL, musicxml.com/tutorial. 936 00:52:21,950 --> 00:52:27,960 >> At pagkatapos ay kung kailangan mong matuto scheme dahil ang tunay na nais na gumamit ng 937 00:52:27,960 --> 00:52:30,960 ng mga pasilidad scripting in LillyPond, pagkatapos ay mayroong isang tinatawag na [hindi marinig] 938 00:52:30,960 --> 00:52:32,918 Nakabalangkas Interpretasyon ng Programa ng Computer, 939 00:52:32,918 --> 00:52:35,820 na kung saan ay hindi lamang ang pangalawang pinakadakilang CS textbook kailanman written-- 940 00:52:35,820 --> 00:52:39,770 mahanap ako pagkatapos kung nais mong malaman kung ano sa tingin ko ang pinakamalaking isa is-- 941 00:52:39,770 --> 00:52:43,580 ngunit ito ay isang napakahusay na din pagpapakilala sa wika tamang. 942 00:52:43,580 --> 00:52:46,630 Hindi mo na kailangan ng higit sa ang unang ilang mga seksyon. 943 00:52:46,630 --> 00:52:47,827 >> At na ito. 944 00:52:47,827 --> 00:52:48,410 May tanong? 945 00:52:48,410 --> 00:52:54,068 946 00:52:54,068 --> 00:52:57,972 >> MAG-AARAL: Saan ko maaaring i-download iyong binuo Frere Jacques 947 00:52:57,972 --> 00:53:01,050 kaya ko bang ilagay sa aking iPod? 948 00:53:01,050 --> 00:53:07,574 >> STEPHEN KREWSON: Well, maaari mong isulat out sa ilang mga wav file sa Euterpea. 949 00:53:07,574 --> 00:53:08,490 At mayroon ka ng code. 950 00:53:08,490 --> 00:53:10,000 Ito ay sa GitHub. 951 00:53:10,000 --> 00:53:15,590 Gumawa ng iyong sariling mga pagkakaiba-iba ng Frere Jacques pamamagitan CS50 isip pugad. 952 00:53:15,590 --> 00:53:17,095 Ito ay magiging malaki. 953 00:53:17,095 --> 00:53:18,220 CONNOR HARRIS: Kahit sino pa? 954 00:53:18,220 --> 00:53:20,261 STEPHEN KREWSON: Kailangan namin isang mas mahusay na bass drum, masyadong. 955 00:53:20,261 --> 00:53:21,935 Ito ay ganap na hindi maayos. 956 00:53:21,935 --> 00:53:26,565 >> MAG-AARAL: Euterpea ay hindi lamang gilid komposisyon, ngunit signal-- 957 00:53:26,565 --> 00:53:27,440 STEPHEN KREWSON Oo. 958 00:53:27,440 --> 00:53:30,100 Sa katunayan, ang gawa ko ginawa sa Euterpea kapag ako 959 00:53:30,100 --> 00:53:33,450 Kinuha this-- mayroong isang graduate course sa Yale na 960 00:53:33,450 --> 00:53:35,900 ay gumagamit ng it-- ay sa sound synthesis. 961 00:53:35,900 --> 00:53:39,810 Kaya doon ay isang tunay na magandang paraan ng paggamit ng mga arrow 962 00:53:39,810 --> 00:53:46,150 at ang ilan sa pagtatanda ng nakita natin ng aakda magkasama function signal. 963 00:53:46,150 --> 00:53:50,610 Sa partikular, ang bass para sa karamihan ng mga ito ay lamang ng isang simpleng sine wave. 964 00:53:50,610 --> 00:53:54,240 Ngunit kung sinimulan mo ang pagbuo ng mga sa kakaibang programmatic paraan, 965 00:53:54,240 --> 00:54:00,010 maaari kang makakuha ng mabaliw tunog effects, tulad ng kakaibang cascades. 966 00:54:00,010 --> 00:54:04,640 Maaari kang lumikha ng napaka-magaspang tunog na may isang pulutong ng modulasyon. 967 00:54:04,640 --> 00:54:07,730 >> Ako ay isang proyekto sa butil-butil synthesis, na kung saan ay 968 00:54:07,730 --> 00:54:12,290 saanman sa pagitan ng FM at sampling. 969 00:54:12,290 --> 00:54:15,230 Kumuha ka ng maliit, maliit na mga halimbawa, at pagkatapos ay 970 00:54:15,230 --> 00:54:20,440 pagsamahin ang mga ito na may ilang mga uri ng moduleitor at bumuo ng isang mas mayamang tunog. 971 00:54:20,440 --> 00:54:24,900 Ginawa din kami ng pisikal na modeling, kaya sinusubukang mag-isip tungkol sa physics 972 00:54:24,900 --> 00:54:29,410 at psychoacoustics ng isang bagay tulad ng pakakak, at ang pag-iisip tungkol sa mga paraan 973 00:54:29,410 --> 00:54:32,320 ang tunog ay nagba-bounce off ang kampana ng trumpeta 974 00:54:32,320 --> 00:54:35,200 at ang acoustics ng ang mga kuwarto at modeling 975 00:54:35,200 --> 00:54:40,195 na may mga pangunahing oscillators. 976 00:54:40,195 --> 00:54:47,690 977 00:54:47,690 --> 00:54:48,940 CONNOR HARRIS: Salamat kaya magkano. 978 00:54:48,940 --> 00:54:50,140 Salamat sa pagpunta. 979 00:54:50,140 --> 00:54:52,400 At ako ay laging handa na kumuha ng mga katanungan sa pamamagitan ng 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: Oo. stephen.krewson@yale.edu. 982 00:54:57,020 --> 00:54:58,810 983 00:54:58,810 --> 00:55:00,360 Cool. 984 00:55:00,360 --> 00:55:01,667