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 Sunt Connor Harris. 4 00:00:06,820 --> 00:00:09,729 Sunt o CA CS50 la Harvard. 5 00:00:09,729 --> 00:00:11,270 STEPHEN KREWSON: Sunt Stephen Krewson. 6 00:00:11,270 --> 00:00:12,582 Sunt un TF pentru CS50 la Yale. 7 00:00:12,582 --> 00:00:15,790 CONNOR HARRIS: Și vom vorbi despre unele tehnologii care s-ar putea 8 00:00:15,790 --> 00:00:18,880 doriți să utilizați dacă sunteți interesat în a face un proiect final sau chiar 9 00:00:18,880 --> 00:00:20,920 nimic cu muzica. 10 00:00:20,920 --> 00:00:24,400 Vom fi concentrându-se pe primul o limbaj de programare numit Haskell. 11 00:00:24,400 --> 00:00:26,280 Este o funcțională limbă, astfel încât paradigma 12 00:00:26,280 --> 00:00:29,620 este foarte diferit de C sau PHP sau alte limbi imperative 13 00:00:29,620 --> 00:00:33,450 care le-ați folosit deja, și în special pe o bibliotecă scrisă în Haskell 14 00:00:33,450 --> 00:00:40,240 numit Euterpea, care poate ajuta oamenii cu scrierea muzică funcțional, 15 00:00:40,240 --> 00:00:40,780 practic. 16 00:00:40,780 --> 00:00:43,400 Și Stephen vei umbla printr-un exemplu foarte bun de care. 17 00:00:43,400 --> 00:00:46,423 >> După aceasta, am să vă prezint ceva numit LillyPond, care 18 00:00:46,423 --> 00:00:48,370 este o tehnologie pentru muzica culegere. 19 00:00:48,370 --> 00:00:50,830 E un fel de LaTeX pentru muzică, dacă vreunul dintre voi 20 00:00:50,830 --> 00:00:57,530 au folosit LaTeX pentru clasele de matematica sau alte clase set P sau ceea ce ai. 21 00:00:57,530 --> 00:01:00,440 Și așa am să-ți dau, din nou, prin câteva exemple ale acestei 22 00:01:00,440 --> 00:01:03,640 și punctul în general direcție a unor resurse mai bune. 23 00:01:03,640 --> 00:01:04,319 >> STEPHEN KREWSON: În plus, ne-am gândit 24 00:01:04,319 --> 00:01:06,720 ar fi în regulă să înființeze un pic de indicii 25 00:01:06,720 --> 00:01:10,780 spre o conductă între Fișiere MIDI generat de Euterpea 26 00:01:10,780 --> 00:01:13,910 în LillyPond, asa ca am oferi unele instrucțiuni pe script-uri 27 00:01:13,910 --> 00:01:16,310 a face acest lucru, care sunt prevăzut cu LillyPond 28 00:01:16,310 --> 00:01:19,160 doar să-l păstrați open source și a obține o conductă merge. 29 00:01:19,160 --> 00:01:20,910 CONNOR HARRIS: Din nou, noi ar trebui să subliniem, 30 00:01:20,910 --> 00:01:23,100 aceste două tehnologii, tu Nu trebuie să le folosească împreună. 31 00:01:23,100 --> 00:01:25,370 Nu sunt concepute pentru a lucra împreună, deși o fac foarte bine. 32 00:01:25,370 --> 00:01:26,362 >> STEPHEN KREWSON: dreapta. 33 00:01:26,362 --> 00:01:30,116 Și complet gratuit. 34 00:01:30,116 --> 00:01:32,240 CONNOR HARRIS: Deci confirmări, citit doar că. 35 00:01:32,240 --> 00:01:33,406 STEPHEN KREWSON: în mod corespunzător remarcat. 36 00:01:33,406 --> 00:01:36,360 Datorită acestor oameni. 37 00:01:36,360 --> 00:01:39,180 Acest Voi persista pe doar pentru un moment. 38 00:01:39,180 --> 00:01:41,560 Procesul de instalare este un pic complicat. 39 00:01:41,560 --> 00:01:45,420 Am un ma citit pe GitHub pe care le puteți lua o privire la. 40 00:01:45,420 --> 00:01:47,840 Doar e-mail-mă dacă aveți întrebări. 41 00:01:47,840 --> 00:01:52,829 Dar vom rula aceasta în ipoteza că acest lucru este de lucru pentru toată lumea. 42 00:01:52,829 --> 00:01:55,620 CONNOR HARRIS: Și dacă nu se poate ajunge LillyPond la locul de muncă, nu e mare lucru. 43 00:01:55,620 --> 00:02:00,139 Nu e nici o compilare live care vor fi implicați, cel puțin la sfârșitul meu. 44 00:02:00,139 --> 00:02:02,930 STEPHEN KREWSON: Haskell și LillyPond ar trebui să ambele au instalatori. 45 00:02:02,930 --> 00:02:08,497 Euterpea este descărcat ca un pachet, așa mai departe și așa mai departe. 46 00:02:08,497 --> 00:02:10,080 Deci vorbim despre muzica pe calculator. 47 00:02:10,080 --> 00:02:12,990 Și aceasta este doar o foarte vedere 50000-picior. 48 00:02:12,990 --> 00:02:15,700 Exista cateva aspecte diferite ale acestuia. 49 00:02:15,700 --> 00:02:18,120 Și acest lucru este dur și este O să ascundă unele detalii. 50 00:02:18,120 --> 00:02:22,090 Dar am putea gândi la ceva ca compoziție algoritmică, 51 00:02:22,090 --> 00:02:24,920 folosind algoritmi, folosind codul, pentru a genera 52 00:02:24,920 --> 00:02:30,280 un anumit tip de-- poate o auto-similare succesiune de note, sau poate note 53 00:02:30,280 --> 00:02:33,330 în unele constrângeri. 54 00:02:33,330 --> 00:02:35,350 Și apoi ar putea fi cele efectuat sau interpretate 55 00:02:35,350 --> 00:02:38,390 cu instrumente analogice sau ceva de genul asta. 56 00:02:38,390 --> 00:02:42,010 Compoziția fiind făcut algoritmic. 57 00:02:42,010 --> 00:02:45,120 >> Dar, desigur, poate zona de muzica pe calculator sau de muzică digitală 58 00:02:45,120 --> 00:02:48,870 suntem mai familiarizați cu este digital sinteză a sunetului sau de prelevare de probe digitale 59 00:02:48,870 --> 00:02:51,160 și de înregistrare digitală. 60 00:02:51,160 --> 00:02:55,650 O mulțime de instrumente digitale sunt face prin eșantionare digitală. 61 00:02:55,650 --> 00:03:00,110 De fapt, vom folosi una din cele forma unei biblioteci font sunet mai târziu. 62 00:03:00,110 --> 00:03:02,850 >> Dar există, de asemenea ceva numit sinteza digital care a ieșit 63 00:03:02,850 --> 00:03:08,650 din anii '70 și în anii '80 cu întârziere Yamaha și John Chowning la Stanford 64 00:03:08,650 --> 00:03:11,990 a face sinteza FM sau Frecvența de sinteză Modulation, 65 00:03:11,990 --> 00:03:15,100 în cazul în care ați avut un purtător de semnal și un semnal de modulare 66 00:03:15,100 --> 00:03:18,270 atât în ​​spectrul audio. 67 00:03:18,270 --> 00:03:22,570 Dar ceea ce suntem concentrat pe astăzi este ceva numit MIDI, 68 00:03:22,570 --> 00:03:25,040 și, desigur, compoziția algoritmică. 69 00:03:25,040 --> 00:03:30,940 >> Nu ne vor face instrumente, dar ne în schimb de gând să facă niște muzică, 70 00:03:30,940 --> 00:03:33,940 și apoi că vor fi interpretate de unele instrumente care 71 00:03:33,940 --> 00:03:38,300 sunt conformă la standardul general de MIDI. 72 00:03:38,300 --> 00:03:40,830 Deci, ce-i MIDI? 73 00:03:40,830 --> 00:03:45,550 Eu nu am de gând pentru a obține prea adânc în ea, dar MIDI este protocol de transfer de date. 74 00:03:45,550 --> 00:03:49,250 E un fel de ghid în întreaga diferite companii si industrii 75 00:03:49,250 --> 00:03:52,250 pentru organizarea de sunete sau patch-uri. 76 00:03:52,250 --> 00:03:54,170 Deci, vom vedea că există un standard MIDI 77 00:03:54,170 --> 00:03:57,500 pentru toate diferite percuție sunete și recomandări MIDI 78 00:03:57,500 --> 00:04:01,360 pentru toate tipurile diferite de sintetizator sau diferite tipuri de toate instrumentului 79 00:04:01,360 --> 00:04:03,650 grupuri intr-o orchestra, spune. 80 00:04:03,650 --> 00:04:08,916 >> Esti, probabil, familiarizat cu 0 prin 127 mesaje MIDI. 81 00:04:08,916 --> 00:04:12,920 Un semnal MIDI este de obicei un bit care indică 82 00:04:12,920 --> 00:04:16,130 indiferent dacă este un de date sau o pachete de stare, și apoi există 83 00:04:16,130 --> 00:04:18,589 șapte biți de un semnal. 84 00:04:18,589 --> 00:04:21,430 Și acestea pot controla totul, de la volum 85 00:04:21,430 --> 00:04:25,330 la acțiunea sau presiunea pe o anumită cheie 86 00:04:25,330 --> 00:04:29,400 dacă sunteți performante cu un MIDI controler precum, desigur, 87 00:04:29,400 --> 00:04:31,250 Note. 88 00:04:31,250 --> 00:04:33,450 Și, bineînțeles, MIDI are fost extrem de util, 89 00:04:33,450 --> 00:04:37,550 pentru că este un mod de a fir împreună sau lanț daisy 90 00:04:37,550 --> 00:04:41,570 o grămadă de dispozitive hardware MIDI. 91 00:04:41,570 --> 00:04:44,050 Am șapte sau opt din nou la casa mea. 92 00:04:44,050 --> 00:04:46,610 Aceasta devine foarte complicat, dar este foarte puternic. 93 00:04:46,610 --> 00:04:47,460 Și e foarte vechi. 94 00:04:47,460 --> 00:04:51,117 E de la inceputul anilor '80, și este foarte frumos și mici. 95 00:04:51,117 --> 00:04:51,950 CONNOR HARRIS: Da. 96 00:04:51,950 --> 00:04:54,230 Toate clasic Nintendo jocuri video ar fi, probabil 97 00:04:54,230 --> 00:04:56,088 aveți fișiere MIDI pentru muzică, de exemplu. 98 00:04:56,088 --> 00:04:59,550 99 00:04:59,550 --> 00:05:01,740 >> STEPHEN KREWSON: Iată un exemplu de MIDI general, 100 00:05:01,740 --> 00:05:06,520 arată MIDI ca un fel de protocol general. 101 00:05:06,520 --> 00:05:13,280 Și cred că ne putem gândim la diferență între caietul de sarcini 102 00:05:13,280 --> 00:05:17,830 că ar trebui să existe ceva de genul aceste instrumente și sunete reale 103 00:05:17,830 --> 00:05:21,740 realizarea acestor instrumente sunete într-un font de sunet sau un anumit MIDI 104 00:05:21,740 --> 00:05:25,740 sintetizator ca fiind diferența între poate un typeface-- care spune, 105 00:05:25,740 --> 00:05:30,350 în general, aceasta este de proiectare a acest mod particular de a reprezenta 106 00:05:30,350 --> 00:05:35,907 characters-- și un anumit font care are o dimensiune și timbrul specific, 107 00:05:35,907 --> 00:05:37,240 și nu există realizarea the-- 108 00:05:37,240 --> 00:05:39,156 >> CONNOR HARRIS: Poate un mai bine ar comparație 109 00:05:39,156 --> 00:05:43,430 fie standardul Unicode says-- dă un număr de fiecare caracter, și într-adevăr 110 00:05:43,430 --> 00:05:46,830 fiecare limbă din lume, sau un set vast de scripturi de limbaj 111 00:05:46,830 --> 00:05:51,310 în lume, și apoi acestea sunt prestate în ceva grafic 112 00:05:51,310 --> 00:05:53,710 prin diverse pachete de fonturi. 113 00:05:53,710 --> 00:05:56,630 Și, evident, vă puteți gândi MIDI ca Unicode sunetului. 114 00:05:56,630 --> 00:06:03,250 Și e doar o listă de-- un flux mare de evenimente și instrumente și fleacuri, 115 00:06:03,250 --> 00:06:06,090 și trebuie să aibă o separat Programul, ca un font, 116 00:06:06,090 --> 00:06:08,537 pentru a face asta în ceva care este în minus. 117 00:06:08,537 --> 00:06:12,360 118 00:06:12,360 --> 00:06:13,780 >> STEPHEN KREWSON: Deci, de ce Haskell? 119 00:06:13,780 --> 00:06:19,110 Haskell este un programare funcțional limbă, foarte avansat, 120 00:06:19,110 --> 00:06:22,770 foarte diferit de C, foarte diferit de PHP. 121 00:06:22,770 --> 00:06:28,120 Și vom vedea că există o Ușor de compoziție functie in Haskell 122 00:06:28,120 --> 00:06:37,640 care ne va permite sa briza prin compune sau tastând în sus, transcrierea, 123 00:06:37,640 --> 00:06:42,160 ceva de genul Frere Jacques, acest cântec simplu care 124 00:06:42,160 --> 00:06:46,815 are o mulțime de piese în ea că sunt auto-similare sau repetarea. 125 00:06:46,815 --> 00:06:49,740 126 00:06:49,740 --> 00:06:53,250 Deci, acest lucru va fi o parte din motivația pentru ce 127 00:06:53,250 --> 00:06:59,400 suntem folosind Haskell, în care Funcțiile sunt cetățeni de primă clasă. 128 00:06:59,400 --> 00:07:01,120 >> Și am vrut să se extindă acest un pic. 129 00:07:01,120 --> 00:07:08,800 E un pic ușor de notate Frere Jacques în Haskell. 130 00:07:08,800 --> 00:07:12,100 Dar dacă ne-am dorit să adăugați o parte tambur să-l? 131 00:07:12,100 --> 00:07:17,320 Ce se întâmplă dacă am vrut să încercăm să facem ceva de genul un tambur Roland 808 sau 909 132 00:07:17,320 --> 00:07:20,970 mașină în cazul în care aveți aproximativ 16 etape diferite? 133 00:07:20,970 --> 00:07:24,590 De obicei, acestea sunt gândit de note ca 16. 134 00:07:24,590 --> 00:07:28,640 Și puteți controla la nivel mondial tempo, și puteți alege 135 00:07:28,640 --> 00:07:34,620 o grămadă de diferite părți percuție de cilindru bass, o bate, diferite curse, 136 00:07:34,620 --> 00:07:37,540 deschise și închise pălării mari pe aceste fel de canale, 137 00:07:37,540 --> 00:07:41,600 și apoi puteți EQ sau regla volumul lor. 138 00:07:41,600 --> 00:07:45,290 >> Si vom vedea un mod frumos în Haskell a reprezenta acest pas 139 00:07:45,290 --> 00:07:48,810 sequencer Cu toate diverse lucruri interesante în Haskell 140 00:07:48,810 --> 00:07:53,100 putem face cu generatoare liste și filtrare peste liste, 141 00:07:53,100 --> 00:07:56,060 cartografiere peste liste, cartografiere Funcțiile peste liste. 142 00:07:56,060 --> 00:07:59,530 143 00:07:59,530 --> 00:08:00,760 Și-a cerut scuze rapid. 144 00:08:00,760 --> 00:08:05,300 Aceasta este o foarte sumară și schiță prea rapid 145 00:08:05,300 --> 00:08:07,620 unora dintre aspectele de Haskell și Euterpea, 146 00:08:07,620 --> 00:08:11,760 care este un domeniu specific limbă încorporat scris 147 00:08:11,760 --> 00:08:14,970 în Haskell pentru tipurile muzicale. 148 00:08:14,970 --> 00:08:17,350 Deci, vă rugăm să verificați codul de on-line. 149 00:08:17,350 --> 00:08:22,404 Foc până GHCI, care este Glasgow Haskell Compiler interpret. 150 00:08:22,404 --> 00:08:24,320 Și voi face unele de aceasta într-un pic 151 00:08:24,320 --> 00:08:25,880 astfel încât să puteți vedea cum se face. 152 00:08:25,880 --> 00:08:31,021 >> Și acest lucru vă permite să încărcați cu the-- sintaxa este colon și apoi 153 00:08:31,021 --> 00:08:31,520 comanda. 154 00:08:31,520 --> 00:08:33,510 Aveți posibilitatea să încărcați în fișiere. 155 00:08:33,510 --> 00:08:36,840 Puteți utiliza răsfoire pe acele fișiere pentru a vedea toate funcțiile pe care 156 00:08:36,840 --> 00:08:39,169 există într-o anumită modul. 157 00:08:39,169 --> 00:08:43,850 Și apoi ca vom vedea, tipurile și de tip clase sunt atât de importante în Haskell, 158 00:08:43,850 --> 00:08:48,850 astfel încât să puteți check-- întotdeauna special dacă lucrați într-un nou DSCL 159 00:08:48,850 --> 00:08:51,600 ca aceasta, ceea ce este un tip de muzică? 160 00:08:51,600 --> 00:08:55,114 Știu despre modul în care numerice Tipuri de lucru în Haskell, 161 00:08:55,114 --> 00:08:56,530 dar eu nu știu prea multe despre muzica. 162 00:08:56,530 --> 00:09:01,280 Dar puteți explora modul în care sunt definit prin utilizarea acestui tip T sau comanda 163 00:09:01,280 --> 00:09:04,577 și apoi de asteptare într-un anumit Funcția sau un obiect de date. 164 00:09:04,577 --> 00:09:05,410 CONNOR HARRIS: Da. 165 00:09:05,410 --> 00:09:09,820 Dacă ați crezut că C și zăngănit a fost hardass despre tipurile, 166 00:09:09,820 --> 00:09:11,230 nu ai nici o idee despre Haskell. 167 00:09:11,230 --> 00:09:14,230 De un lucru bun despre Haskell este că dacă puteți obține codul dvs. de a compila 168 00:09:14,230 --> 00:09:16,790 și dacă verificările de tip Haskell, este, probabil, dreptate, 169 00:09:16,790 --> 00:09:18,675 deoarece sistemul de tip este atât de strict. 170 00:09:18,675 --> 00:09:20,090 >> STEPHEN KREWSON: Da. 171 00:09:20,090 --> 00:09:21,980 Așa că vreau doar să merg through-- și din nou, 172 00:09:21,980 --> 00:09:27,160 acest lucru nu este de a face o justice-- câteva dintre caracteristicile Haskell care, cel puțin 173 00:09:27,160 --> 00:09:31,780 a creators-- și a fost creat la sfârșitul anilor 1980 de către un grup de oameni, 174 00:09:31,780 --> 00:09:34,610 un comitet de aproximativ 20 people-- crezut au fost importante. 175 00:09:34,610 --> 00:09:36,850 Și primul lucru pe care enumerate într-o lucrare care 176 00:09:36,850 --> 00:09:41,890 a descris geneza Haskell peste primii 20 de ani sau cam asa ceva 177 00:09:41,890 --> 00:09:43,390 a fost că era leneș. 178 00:09:43,390 --> 00:09:44,990 Deci, ce înseamnă asta? 179 00:09:44,990 --> 00:09:49,860 >> Ei bine, aceasta înseamnă atunci când avem un fel de exprimare, trebuie să-l evalueze. 180 00:09:49,860 --> 00:09:54,390 Și Haskell face acest lucru într-un apel prin nevoia fel sau un mod non-strict. 181 00:09:54,390 --> 00:09:57,250 Asta este, dacă avem o grămadă de componente ale expresiei noastre, 182 00:09:57,250 --> 00:10:00,660 vom încerca să întârzie evaluarea din aceste subcomponente 183 00:10:00,660 --> 00:10:05,300 până la absolut ultima minute-- care este de fapt până când vom avea nevoie de ele. 184 00:10:05,300 --> 00:10:08,480 >> Deci, acest lucru înseamnă: care este foarte cool, mai ales 185 00:10:08,480 --> 00:10:13,200 dacă ne gândim despre captarea de un pas sequencer muzical. 186 00:10:13,200 --> 00:10:16,740 Când îl porniți, și de a începe să rulează un pas sequence-- 187 00:10:16,740 --> 00:10:20,010 dacă ați lucrat vreodată cu un tambur machine-- și merge doar pentru totdeauna. 188 00:10:20,010 --> 00:10:24,650 Deci, ar fi foarte frumos dacă am ar putea imite faptul că, în Haskell. 189 00:10:24,650 --> 00:10:31,040 Si o putem face cu infinit valori, în special listele infinite. 190 00:10:31,040 --> 00:10:35,860 Este foarte ușor să tastați un Lista infinită în Haskell. 191 00:10:35,860 --> 00:10:39,230 Ai putea folosi doar sintaxa jos aici, în cazul în care veți vedea la 1 la 3, 192 00:10:39,230 --> 00:10:42,440 scoateți 3 1 punct punct, și că este o listă infinită 193 00:10:42,440 --> 00:10:46,960 din toate numerele naturale se extinde pe în măsura în care vă puteți imagina. 194 00:10:46,960 --> 00:10:49,925 >> Vreau să introducă o Conceptul de falduri imediat. 195 00:10:49,925 --> 00:10:51,800 Și din nou, în scopul acestui seminar nu este 196 00:10:51,800 --> 00:10:55,770 pentru a afla despre falduri în Haskell sau funcții de ordin superior. 197 00:10:55,770 --> 00:10:59,640 Dar eu vreau doar să-l introducă la da un sentiment ciudat cum exactă a 198 00:10:59,640 --> 00:11:03,700 Haskell este și cât de puternic este. 199 00:11:03,700 --> 00:11:08,000 Și în special, vom be-- atunci când facem diferite părți noastre tambur, 200 00:11:08,000 --> 00:11:12,790 vom fi manipularea listelor de Numerele, pliere le una peste alta. 201 00:11:12,790 --> 00:11:17,290 Și pentru a face acest lucru, vom fie folosind hărți și falduri. 202 00:11:17,290 --> 00:11:21,770 >> Există un drept asociativ ori, ceea ce este acest drept unul 203 00:11:21,770 --> 00:11:26,990 here-- 1 minus cantitatea, 2 minus cantitatea, 3 minus 0. 204 00:11:26,990 --> 00:11:29,170 Și sintaxa pentru o ori, vă dau un ori 205 00:11:29,170 --> 00:11:34,680 o valoare de bază și apoi o operation-- În acest caz, plus sau scădere. 206 00:11:34,680 --> 00:11:36,280 Am arătat ambele cazuri. 207 00:11:36,280 --> 00:11:41,760 Și apoi există un acumulator care acumulează pe întreaga listă, 208 00:11:41,760 --> 00:11:46,330 aplicarea acestei operatorul plus sau minus, iar apoi acumularea. 209 00:11:46,330 --> 00:11:52,680 Deci, acest lucru va fi the-- daca a fost numit cu pliu r plus de 0, începând cu 0, 210 00:11:52,680 --> 00:11:54,720 ne-ar rezuma atunci toate numerele din această listă. 211 00:11:54,720 --> 00:11:57,134 Și că este o listă la 1 la 3. 212 00:11:57,134 --> 00:12:00,050 CONNOR HARRIS: Deci, pentru a-l pune un alt Astfel, ori r ia trei argumente. 213 00:12:00,050 --> 00:12:02,540 Există o funcție care se ia două argumente, 214 00:12:02,540 --> 00:12:05,400 atunci există o valoare de pornire, și nu există o listă de valori. 215 00:12:05,400 --> 00:12:08,570 Și ceea ce faci este să luați Valoarea de pornire, în primul rând valoare, 216 00:12:08,570 --> 00:12:09,850 le-a pus în funcție. 217 00:12:09,850 --> 00:12:11,607 Ce vrei să ieși, ia că, hrana pentru animale, care 218 00:12:11,607 --> 00:12:13,940 în funcția de a doua valoare, ceea ce te scot, 219 00:12:13,940 --> 00:12:16,690 ia că, hrana pentru animale, care în Funcția de-a treia valori. 220 00:12:16,690 --> 00:12:18,740 Și apoi, dacă te duci în jos această listă întreagă în acest fel, 221 00:12:18,740 --> 00:12:22,970 ai de gând pentru a obține în cele din urmă o valoare singulară care este 222 00:12:22,970 --> 00:12:25,720 de același tip de ceea ce ai început cu și de același tip 223 00:12:25,720 --> 00:12:29,147 ca lucrurile din listă, apoi asta e rezultatul revenire a ori R. 224 00:12:29,147 --> 00:12:31,980 STEPHEN KREWSON: Deci, în special, acestea sunt funcții superioare de comandă, 225 00:12:31,980 --> 00:12:34,460 pentru că sunt luați un alt funcționează ca unul dintre argumentele. 226 00:12:34,460 --> 00:12:34,770 >> CONNOR HARRIS: Da. 227 00:12:34,770 --> 00:12:37,820 Dacă ați utilizat anumite alte languages-- Știu R, [neauzit] 228 00:12:37,820 --> 00:12:41,510 limbă are această, numit Reducerea. 229 00:12:41,510 --> 00:12:45,460 S-ar putea avea funcții similare în alte limbi, a sunat 230 00:12:45,460 --> 00:12:48,160 lucruri diferite. 231 00:12:48,160 --> 00:12:50,680 >> STEPHEN KREWSON: Și ceea ce este frumos despre ori R 232 00:12:50,680 --> 00:12:53,880 în acest caz este că ori R poate lucra cu liste infinite. 233 00:12:53,880 --> 00:12:59,490 Deci, în acest jos, acest P5 generează notele pe care 234 00:12:59,490 --> 00:13:03,120 sunt pornite în sequencer pas pentru o parte tambur, al cincilea aspect cilindru, 235 00:13:03,120 --> 00:13:05,480 și poate că este un conga tambur sau ceva. 236 00:13:05,480 --> 00:13:09,719 Și aceasta este o în mod deliberat mod obtuz de a scrie acest lucru, 237 00:13:09,719 --> 00:13:11,510 dar e distractiv, pentru că demonstreaza o mulțime 238 00:13:11,510 --> 00:13:14,460 de lucruri despre Haskell și Euterpea. 239 00:13:14,460 --> 00:13:20,650 >> Deci, ori R a acestui colon colon-- este doar un operator care împinge lucrurile 240 00:13:20,650 --> 00:13:25,700 împreună pe o list-- numit pe un gol Lista, care este doar paranteze goale. 241 00:13:25,700 --> 00:13:28,250 Și am sunat că pe această listă infinită. 242 00:13:28,250 --> 00:13:31,570 Aceasta este, de fapt două liste adunate aici. 243 00:13:31,570 --> 00:13:37,150 Lista 1 virgulă 6 punctul dot este 1, 6, 11, 16. 244 00:13:37,150 --> 00:13:39,750 Deci, Haskell-- în doar câteva personaje, te 245 00:13:39,750 --> 00:13:42,420 poate genera întregul secvență de numere 246 00:13:42,420 --> 00:13:46,240 că sunt cinci numere afară întinzându-se pe la infinit. 247 00:13:46,240 --> 00:13:49,860 Și am să adauge că acest mic list-- scurt 248 00:13:49,860 --> 00:13:54,370 3, 8, 21-- doar să-ți arăt cum poți înlănțui liste. 249 00:13:54,370 --> 00:13:55,790 >> Și apoi m-am pliat pe sine. 250 00:13:55,790 --> 00:14:01,510 Și acest lucru se termină până fiind doar un fel de operațiune de identitate, dar e infinit. 251 00:14:01,510 --> 00:14:06,070 Și ori R pot face asta, pentru că evaluează alene, ca în cele de mai sus. 252 00:14:06,070 --> 00:14:10,582 Dacă avem o 1 și un 2 și 3, putem doar bracketing pe întreaga restul. 253 00:14:10,582 --> 00:14:12,290 Asta nu va lucra pentru minus sau plus, dar 254 00:14:12,290 --> 00:14:17,760 va lucra pentru acest colon operațiune de identitate pe lista. 255 00:14:17,760 --> 00:14:24,620 >> Deci, cum putem folosi practic că, dacă vom au o listă lungă de lucruri infinit? 256 00:14:24,620 --> 00:14:26,500 Ei bine, Haskell oferă o mulțime de functions-- 257 00:14:26,500 --> 00:14:29,450 si uita-te mai mult în aceste în propria time--, cum ar fi să ia 258 00:14:29,450 --> 00:14:32,200 care spune, OK, suntem generând această listă infinită, 259 00:14:32,200 --> 00:14:35,950 dar noi suntem doar de gând să ia unele Numărul de IT și în acest case-- 260 00:14:35,950 --> 00:14:38,410 vom vedea mai târziu în nostru code-- drum machine 261 00:14:38,410 --> 00:14:43,740 GM este doar un fel de la nivel mondial variabilă pentru numărul de trepte 262 00:14:43,740 --> 00:14:44,610 în sequencer. 263 00:14:44,610 --> 00:14:47,630 Pe mașinile-roll în I ți-a arătat, că e de obicei 16, 264 00:14:47,630 --> 00:14:51,475 dar l-am pus în aplicare cu 32. 265 00:14:51,475 --> 00:14:54,470 Nu contează. 266 00:14:54,470 --> 00:15:00,230 >> Haskell este, de asemenea, pur, deci are puternică dactilografiere static care Connor a făcut aluzie la. 267 00:15:00,230 --> 00:15:03,220 Deci funcții sunt matematic în sense-- 268 00:15:03,220 --> 00:15:06,600 sunt mai matematice că acestea sunt garantate 269 00:15:06,600 --> 00:15:11,530 nu de a accesa sau modifica orice fel de variabilă sau de a efectua intrare sau de ieșire. 270 00:15:11,530 --> 00:15:14,420 Deci, dacă aveți o funcție, e deterministă. 271 00:15:14,420 --> 00:15:17,400 Acesta va reveni întotdeauna la fel valoare în starea programului 272 00:15:17,400 --> 00:15:19,310 sau rămân aceleași. 273 00:15:19,310 --> 00:15:22,940 Există, desigur, excepții monadice la acest lucru, dar asta e dincolo de domeniul de aplicare nostru. 274 00:15:22,940 --> 00:15:23,900 >> CONNOR HARRIS: Da. 275 00:15:23,900 --> 00:15:26,946 Ce înseamnă acest lucru, deși, este acolo sunt cateva importante [Inaudibil] 276 00:15:26,946 --> 00:15:27,820 consecințe ale acestei. 277 00:15:27,820 --> 00:15:30,940 Una dintre ele este faptul că este foarte ușor de paraleliza programe Haskell. 278 00:15:30,940 --> 00:15:32,773 Pentru că, dacă aveți, spun, o funcție de care 279 00:15:32,773 --> 00:15:36,064 trebuie să opereze pe un milion de valori, în cazul în care știți că funcția va fi întotdeauna 280 00:15:36,064 --> 00:15:39,280 da aceeași valoare în cazul în care te hrăni la un anumit value-- 281 00:15:39,280 --> 00:15:43,055 dacă sunteți [neauzit] f din 1, f din 2, atunci f de 3 sau whatnot-- f din 1 282 00:15:43,055 --> 00:15:45,180 nu este de gând să scrie într-un fișier sau a face ceva 283 00:15:45,180 --> 00:15:46,850 care va modifica valoarea F2. 284 00:15:46,850 --> 00:15:50,220 Puteți împărți doar până la o această funcție milioane de mașini diferite sau un milion 285 00:15:50,220 --> 00:15:54,720 fire diferite sau orice altceva, obține toate răspunsurile înapoi, 286 00:15:54,720 --> 00:15:56,900 obține toate valorile de returnare înapoi, și atunci asta e. 287 00:15:56,900 --> 00:15:59,780 Deci, foarte usor de paraleliza lucruri. 288 00:15:59,780 --> 00:16:03,140 >> Dezavantajul este că de intrare și de ieșire în special 289 00:16:03,140 --> 00:16:05,720 se încadrează în sistemul de tip în moduri foarte complicate. 290 00:16:05,720 --> 00:16:09,010 Nu vom intra în asta acum, dar am va incurajam sa se uite la unele resurse 291 00:16:09,010 --> 00:16:11,175 online dacă doriți să aflați despre asta. 292 00:16:11,175 --> 00:16:13,960 293 00:16:13,960 --> 00:16:16,550 >> STEPHEN KREWSON: Deci tip classes-- și acest 294 00:16:16,550 --> 00:16:21,610 clase de tipuri de asta-- au fost inventate pentru a rezolva 295 00:16:21,610 --> 00:16:24,160 o problemă de operator de supraîncărcarea. 296 00:16:24,160 --> 00:16:27,590 Asa ca am vrut sa avem egalitate între diferitele tipuri de lucruri. 297 00:16:27,590 --> 00:16:31,040 Desigur, am putea gândi de-- egalitatea între tipurile numerice 298 00:16:31,040 --> 00:16:34,720 este foarte ușor să se gândească, dar Ce zici de egalitate între listele de? 299 00:16:34,720 --> 00:16:37,610 Ce zici de egalitate între copac structuri de date picior? 300 00:16:37,610 --> 00:16:43,130 Și acest lucru este posibil în Haskell din cauza clase de tip. 301 00:16:43,130 --> 00:16:48,000 >> Deci, dacă definiți o anumită type-- date și aici, acestea sunt terenuri muzicale. 302 00:16:48,000 --> 00:16:50,960 În cele din urmă Primim niște muzică calculator. 303 00:16:50,960 --> 00:16:57,420 Deci avem C, C ascuțite, și așa mai departe și așa mai departe. 304 00:16:57,420 --> 00:17:01,080 Ele aparțin la o grămadă de clase tip diferit. 305 00:17:01,080 --> 00:17:03,510 EQ-- ei fac parte din clasa de tip EQ. 306 00:17:03,510 --> 00:17:06,780 Asta înseamnă că sprijină operațiuni de promovare a egalității. 307 00:17:06,780 --> 00:17:12,650 Astfel încât să puteți evalua dacă un secvență de primitive muzicale 308 00:17:12,650 --> 00:17:15,400 este la fel ca un altul. 309 00:17:15,400 --> 00:17:17,280 >> Ei fac parte din clasa ordinal. 310 00:17:17,280 --> 00:17:19,479 Asta înseamnă că este o ordonare a acestora. 311 00:17:19,479 --> 00:17:27,670 D vine dupa C. C ascuțite vine dupa C, de asemenea. 312 00:17:27,670 --> 00:17:29,840 Ele aparțin clasei arată, ceea ce înseamnă că pot 313 00:17:29,840 --> 00:17:33,000 fi tipărite la o consolă sau terminale. 314 00:17:33,000 --> 00:17:36,090 Ei fac parte din clasă enumerate, care 315 00:17:36,090 --> 00:17:39,770 înseamnă că, chiar dacă acestea sunt de caractere, 316 00:17:39,770 --> 00:17:45,340 au un numeric care stau la baza Reprezentarea începând de la 0 317 00:17:45,340 --> 00:17:48,960 și merge off prin toate acestea multe lucruri sunt aici, 20 sau cam asa ceva, 318 00:17:48,960 --> 00:17:51,770 sau 30 sau 40, poate. 319 00:17:51,770 --> 00:17:54,259 >> CONNOR HARRIS: Și când avem un tip de date 320 00:17:54,259 --> 00:17:57,050 care derives-- cu acel cuvânt cheie "deriving--" o anumită clasă de tip, 321 00:17:57,050 --> 00:18:01,160 aceasta înseamnă că compilatorul va încerca pentru a construi în mod automat ceva. 322 00:18:01,160 --> 00:18:05,120 Deci, poate că veți dori să defini o calitate diferit. 323 00:18:05,120 --> 00:18:09,450 Veți dori să definiți C ascuțite ca egal cu D plat, de exemplu. 324 00:18:09,450 --> 00:18:11,560 Cu această construcție aici, nu cred că C ascuțite 325 00:18:11,560 --> 00:18:14,940 și D plat va fi egal, deoarece compilatorul va automat 326 00:18:14,940 --> 00:18:19,670 spun fiecare valoare posibilă diferite este diferit de orice alt. 327 00:18:19,670 --> 00:18:22,930 >> Deci, este posibil pentru a trece peste implementările implicite 328 00:18:22,930 --> 00:18:25,730 din aceste tipuri de clase. 329 00:18:25,730 --> 00:18:28,640 Din nou, uita-te la trimiterea dacă doriți să aflați despre asta. 330 00:18:28,640 --> 00:18:31,767 331 00:18:31,767 --> 00:18:33,600 STEPHEN KREWSON: Și aici, de fapt, asta va 332 00:18:33,600 --> 00:18:36,930 fi util pentru atunci când am cod mai târziu. 333 00:18:36,930 --> 00:18:42,150 Am vedea unele dintre operatori infix pentru compoziție secvențială, 334 00:18:42,150 --> 00:18:46,570 Compoziție paralel, și așa mai departe, aceste plusuri și semne egale 335 00:18:46,570 --> 00:18:48,620 înconjurat de două puncte. 336 00:18:48,620 --> 00:18:53,330 Asta înseamnă că putem juca aceste diferite primitive muzicale unul după altul. 337 00:18:53,330 --> 00:18:54,590 Asta e compoziție secvențială. 338 00:18:54,590 --> 00:18:57,170 >> Sau le pot juca în paralel, în același timp. 339 00:18:57,170 --> 00:19:05,100 Așa că am putea avea o valoare muzicală, iar apoi acest egal și două puncte, 340 00:19:05,100 --> 00:19:09,669 infix operator de compoziție paralel, și să le joci ca un fel de coardă. 341 00:19:09,669 --> 00:19:11,460 Și vom pentru a utiliza acest lucru atunci când am combina 342 00:19:11,460 --> 00:19:15,080 partea noastră tambur cu nostru puțin cântec Frere Jacques 343 00:19:15,080 --> 00:19:19,460 pentru a juca aceste două secvențe de Valorile muzicale în același timp. 344 00:19:19,460 --> 00:19:24,520 345 00:19:24,520 --> 00:19:29,250 >> Prelucrare Curry este-- fost ultima Numele Haskell Curry, care a 346 00:19:29,250 --> 00:19:31,850 imaginea Haskell este numit după. 347 00:19:31,850 --> 00:19:34,330 Iar acest lucru ne permite o eleganță frumos atunci când suntem 348 00:19:34,330 --> 00:19:36,880 scris toate acestea diferite funcții sau filtre care suntem 349 00:19:36,880 --> 00:19:39,330 Va fi de cartografiere pe listele noastre. 350 00:19:39,330 --> 00:19:42,810 O funcție a două arguments-- f de x si y-- 351 00:19:42,810 --> 00:19:46,630 poate fi reprezentat ca f de x aplicat y. 352 00:19:46,630 --> 00:19:49,800 Deci, este o funcție de un argument care returnează 353 00:19:49,800 --> 00:19:51,240 o altă funcție de un argument. 354 00:19:51,240 --> 00:19:56,962 Deci, aceasta înseamnă, putem harta un Funcția f x peste lista de Y lui. 355 00:19:56,962 --> 00:19:58,920 CONNOR HARRIS: Doriți să da un exemplu în acest sens? 356 00:19:58,920 --> 00:19:59,836 STEPHEN KREWSON: Da. 357 00:19:59,836 --> 00:20:05,390 Am un exemplu chiar aici la unele din lucrurile pe care le va scrie. 358 00:20:05,390 --> 00:20:10,500 Deci, replica 2-- bine, reproduce va lua 359 00:20:10,500 --> 00:20:13,040 o valoare, care este cât de multe ori de a reproduce ceva, 360 00:20:13,040 --> 00:20:16,690 și apoi se va lua o value-- de obicei, o listă sau ceva. 361 00:20:16,690 --> 00:20:23,450 Deci, aici, suntem de cartografiere reproduce 2 peste o altă listă. 362 00:20:23,450 --> 00:20:27,440 >> Deci, dacă am harta reproduce 2, dacă vom reproduce 2 se aplică 363 00:20:27,440 --> 00:20:31,890 la primul element al acestui list-- și acestea sunt liste de phrases-- muzicale 364 00:20:31,890 --> 00:20:37,650 va produce două de "voi sleeping--" așa dormi, dormi. 365 00:20:37,650 --> 00:20:40,040 Deci, acum avem două. 366 00:20:40,040 --> 00:20:42,570 Dar replicate nevoie de doi argumente, ci pentru că suntem 367 00:20:42,570 --> 00:20:47,100 curtau și apoi de cartografiere, putem reprezenta reprodusă 2 368 00:20:47,100 --> 00:20:52,310 ca fiind returnat în funcție de o argument-- doar replicarea de două ori. 369 00:20:52,310 --> 00:20:57,010 Și apoi suntem aplicarea acestui fiecărui element de această listă de fraze. 370 00:20:57,010 --> 00:21:01,900 >> Și concat este un Haskell operație pentru aplatizarea o listă. 371 00:21:01,900 --> 00:21:04,400 Deoarece replicate 2 va produce o listă de liste. 372 00:21:04,400 --> 00:21:06,660 Și acest lucru este această formă intermediară aici. 373 00:21:06,660 --> 00:21:10,365 Și astfel putem Concat sau aplatiza asta de două ori. 374 00:21:10,365 --> 00:21:12,240 CONNOR HARRIS: O simplă exemplu de Prelucrare, 375 00:21:12,240 --> 00:21:15,323 dacă ai like-- imagina f este doar o Funcția de multiplicare care are două 376 00:21:15,323 --> 00:21:16,840 argumente și returnează produsul lor. 377 00:21:16,840 --> 00:21:19,320 Deci, dacă aveți un f 4 5, e 20. 378 00:21:19,320 --> 00:21:22,670 Dar vă puteți gândi la acest lucru ca also-- aveți o funcție f 4 379 00:21:22,670 --> 00:21:25,560 care ia un argument și returnează de patru ori acest argument-- doar 380 00:21:25,560 --> 00:21:27,870 aplicarea parțială care doar un singur argument 4. 381 00:21:27,870 --> 00:21:31,182 Și dacă se hrănească f de 4 5, care vă va oferi 20. 382 00:21:31,182 --> 00:21:32,890 Și că este un simplu exemplu de Prelucrare. 383 00:21:32,890 --> 00:21:34,473 Este, de obicei, una dintre cele manual. 384 00:21:34,473 --> 00:21:38,860 385 00:21:38,860 --> 00:21:42,110 >> STEPHEN KREWSON: Lambda expresii sau funcții anonime 386 00:21:42,110 --> 00:21:47,330 sunt un alt semn distinctiv Haskell. 387 00:21:47,330 --> 00:21:51,242 Deci, dacă avem nevoie pentru a bate un Funcția puțin replicate viață, 388 00:21:51,242 --> 00:21:52,950 dar spun că nu e în biblioteca standard, 389 00:21:52,950 --> 00:21:56,150 putem folosi o sintaxă similar cu următorul. 390 00:21:56,150 --> 00:21:58,730 Și vom briza peste asta. 391 00:21:58,730 --> 00:22:02,160 Un lucru veți vedea o mulțime și din drum machine este facem apeluri 392 00:22:02,160 --> 00:22:05,790 la ceva numit filtru, care ca înainte, 393 00:22:05,790 --> 00:22:08,185 este o mapare a unei funcții peste o listă, dar este 394 00:22:08,185 --> 00:22:10,260 o cartografiere a unei funcții booleene. 395 00:22:10,260 --> 00:22:13,390 >> Deci, avem aici un exemplu a unui un anonim 396 00:22:13,390 --> 00:22:19,150 Funcția booleană definit ca doar durează câteva valori. 397 00:22:19,150 --> 00:22:22,990 Acest lucru nu este, strict vorbind, o funcție anonim. 398 00:22:22,990 --> 00:22:25,850 Dar e defini cu că sintaxa pentru concizie, 399 00:22:25,850 --> 00:22:28,007 și acest lucru ia doar X modul N- 400 00:22:28,007 --> 00:22:28,840 CONNOR HARRIS: Da. 401 00:22:28,840 --> 00:22:31,330 Deci f este o funcție de două argumente n și p 402 00:22:31,330 --> 00:22:35,440 care returnează o funcție care este ea însăși o funcție de un argument, și anume x. 403 00:22:35,440 --> 00:22:38,815 404 00:22:38,815 --> 00:22:40,690 STEPHEN KREWSON: I Operatorii infix mentionate. 405 00:22:40,690 --> 00:22:42,642 Care sunt operatori infix? 406 00:22:42,642 --> 00:22:45,710 Ei bine, operatorii infix sunt normal ne reprezintă operațiuni, 407 00:22:45,710 --> 00:22:49,910 spun, în mathematics-- 2 plus 2 în loc de operatorul plus 408 00:22:49,910 --> 00:22:51,202 și apoi două argumente 2 și 2. 409 00:22:51,202 --> 00:22:53,701 CONNOR HARRIS: Se numește inversa notație poloneză, care este 410 00:22:53,701 --> 00:22:55,330 un termen Mă îndoiesc oricare dintre voi ar ști. 411 00:22:55,330 --> 00:22:56,288 >> STEPHEN KREWSON: dreapta. 412 00:22:56,288 --> 00:22:58,290 Reverse notație poloneză sau prefix. 413 00:22:58,290 --> 00:23:01,412 Dar a decis să Haskell utiliza operatori infix. 414 00:23:01,412 --> 00:23:03,120 Deci, acestea sunt unele dintre cele personalizate care 415 00:23:03,120 --> 00:23:07,770 sunt definite pentru Euterpea DSCL în Haskell. 416 00:23:07,770 --> 00:23:10,730 Deci, acest lucru a fost compoziție secvențial. 417 00:23:10,730 --> 00:23:16,340 Aceasta a fost compoziție paralel, iar acest lucru a fost trunchiere compoziție paralel. 418 00:23:16,340 --> 00:23:18,710 Și vom avea nevoie de asta cu masina noastra tambur, 419 00:23:18,710 --> 00:23:22,640 pentru că vom folosi ultimul Operatorul în micul tuplu acolo 420 00:23:22,640 --> 00:23:26,330 pentru a juca de-a lungul drum machine cu nostru cântec Frere Jacques. 421 00:23:26,330 --> 00:23:28,650 Si masina noastra cilindru este O să fie infinit. 422 00:23:28,650 --> 00:23:30,920 Pur și simplu joacă pentru totdeauna. 423 00:23:30,920 --> 00:23:32,692 Dar melodia Frere Jacques nu este. 424 00:23:32,692 --> 00:23:33,510 Nu e atât de mult. 425 00:23:33,510 --> 00:23:36,610 E doar câteva baruri. 426 00:23:36,610 --> 00:23:43,030 Deci, avem nevoie pentru a opri mașina de cilindru ca Imediat ce vine valoarea muzical scurt 427 00:23:43,030 --> 00:23:43,700 la capăt. 428 00:23:43,700 --> 00:23:46,980 Și că operatorul infixed este super util cu asta. 429 00:23:46,980 --> 00:23:50,090 >> Și infix notație ca acest este un fel de frumos, 430 00:23:50,090 --> 00:23:57,095 pentru că presupunem că aveți o funcție cum ar fi Citat, care dă divizia întreg 431 00:23:57,095 --> 00:24:01,010 de X prin ceva else-- Ne pare rău, că ar trebui să fie o și b. 432 00:24:01,010 --> 00:24:04,740 Ai putea scrie ca un citat de b. 433 00:24:04,740 --> 00:24:09,670 Deci, dacă elementul este put-- un alt exemplu al acestei. 434 00:24:09,670 --> 00:24:14,730 X element oarecare listă, dacă ai pus l în Backticks, îl puteți folosi. 435 00:24:14,730 --> 00:24:20,400 Chiar dacă nu este un simbol cum ar fi plus sau minus sau ori, 436 00:24:20,400 --> 00:24:24,630 puteți utiliza numele unei Funcția de genul asta in Backticks 437 00:24:24,630 --> 00:24:27,045 ca operator infix, care este destul de rece. 438 00:24:27,045 --> 00:24:29,670 CONNOR HARRIS: Din nou, aceasta este toate zahăr doar sintactic, într-adevăr. 439 00:24:29,670 --> 00:24:32,310 Aceasta nu afectează miezul limbajului. 440 00:24:32,310 --> 00:24:37,440 >> STEPHEN KREWSON: Vedem aici pentru Ultima frază din nostru cântec Frere Jacques, 441 00:24:37,440 --> 00:24:45,740 Am jucat niște acorduri mici sau treimi utilizând compoziția paralel 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 Acesta este un alt mod de a spune ceva de ceea ce am fost doar a spune. 445 00:24:54,950 --> 00:24:59,986 Astfel încât să puteți hartă funcții de un argument peste liste. 446 00:24:59,986 --> 00:25:02,860 CONNOR HARRIS: Din nou, referinte pentru manuale introductive Haskell-- 447 00:25:02,860 --> 00:25:04,680 va avea toate acestea în ea. 448 00:25:04,680 --> 00:25:07,790 >> STEPHEN KREWSON: Deci, aici e un destul de linie cheie al sequencer pas 449 00:25:07,790 --> 00:25:12,820 vom arunca o privire la utilizarea o înțelegere listă. 450 00:25:12,820 --> 00:25:17,810 Și vedem aici este că elementul operator fix în ghilimele spate. 451 00:25:17,810 --> 00:25:23,030 Deci, dacă x este un element al listei x, atunci vom apela funcții perc. 452 00:25:23,030 --> 00:25:25,100 Deci perc este doar o funcție percuție. 453 00:25:25,100 --> 00:25:30,200 Este nevoie de o valoare p e parte a setului mărginite de toate 454 00:25:30,200 --> 00:25:35,310 diferite sunete de percuție că am văzut într-un diapozitiv anterior, 455 00:25:35,310 --> 00:25:38,840 și apoi se dă ca Durata unei note sfert. 456 00:25:38,840 --> 00:25:43,190 Altceva îi dă un qnr, și qnr este doar un repaus sfert notă. 457 00:25:43,190 --> 00:25:44,970 >> Deci, aceasta este construirea de ceva frumos. 458 00:25:44,970 --> 00:25:52,110 Avem o listă de elemente, și am să bucla peste unele lista de la un 459 00:25:52,110 --> 00:25:54,540 la valoarea maximă a sequencer pas. 460 00:25:54,540 --> 00:25:58,290 Și când suntem la o anumită i în lista de la unu la valoarea maximă, 461 00:25:58,290 --> 00:26:02,970 dacă i este un membru al acestui set creat în această funcție, 462 00:26:02,970 --> 00:26:06,040 bine, atunci l-am transforma într-o notă de percuție. 463 00:26:06,040 --> 00:26:10,960 În caz contrar, vom juca doar o pauză, care este de a spune, ne-am rămâne tăcut. 464 00:26:10,960 --> 00:26:16,050 Și putem vedea aici că, în această listă sintaxă înțelegere, 465 00:26:16,050 --> 00:26:20,030 X este populat de această Lista construit unul 466 00:26:20,030 --> 00:26:22,462 la dimensiunea globală a sequencer. 467 00:26:22,462 --> 00:26:23,295 CONNOR HARRIS: Da. 468 00:26:23,295 --> 00:26:26,340 Sintaxa de bază pentru Lista este comprehensions 469 00:26:26,340 --> 00:26:30,810 suport, valoarea care implică unele variabile, bar, 470 00:26:30,810 --> 00:26:34,260 Valorile posibile ale variabilelor se, închis suport. 471 00:26:34,260 --> 00:26:38,545 Și dacă ați făcut stabilit notație constructor în orice fel de clasă de matematică, 472 00:26:38,545 --> 00:26:45,999 este posibil să fi setat astfel de 2n că n este sau n este în z. 473 00:26:45,999 --> 00:26:48,290 Similar thing-- această notație este menit să fie sugestiv 474 00:26:48,290 --> 00:26:49,630 din notație matematice. 475 00:26:49,630 --> 00:26:51,880 STEPHEN KREWSON: Și tu poți se aplică mai multe predicate 476 00:26:51,880 --> 00:26:56,250 și mai multe filtre într-o listă înțelegere, ceea ce este destul de frumos. 477 00:26:56,250 --> 00:27:01,800 Algebrică am types-- nu va persista mult timp aici. 478 00:27:01,800 --> 00:27:04,840 Nu e un noțiune bună Haskell sau un bun noțiune, evident 479 00:27:04,840 --> 00:27:10,720 cum să realizați, să zicem, un default parametru la o funcție sau ceva. 480 00:27:10,720 --> 00:27:13,370 În Python, acest lucru este destul de ușor. 481 00:27:13,370 --> 00:27:18,460 Vă pot spune doar cu egal pe declarația funcției, 482 00:27:18,460 --> 00:27:21,420 o valoare implicită în caz nici una nu este furnizată. 483 00:27:21,420 --> 00:27:27,010 >> În Haskell, ai putea poate utilizați Poate că poate tipul, 484 00:27:27,010 --> 00:27:32,190 care ia fie nimic sau o valoare de tip doar o. 485 00:27:32,190 --> 00:27:38,630 Așa că am exploata acest lucru în drum machine pentru a ne permite să dea volum opțional 486 00:27:38,630 --> 00:27:40,730 parametrii pentru fiecare dintre părțile de tobe. 487 00:27:40,730 --> 00:27:46,160 488 00:27:46,160 --> 00:27:54,680 Așa că ne oferă o modalitate de a avea EQ sau un volum pe un anumit canal. 489 00:27:54,680 --> 00:27:56,440 >> CONNOR HARRIS: În alte exemple Haskell, 490 00:27:56,440 --> 00:28:00,450 s-ar putea vedea poate folosi funcții care ar putea eșua. 491 00:28:00,450 --> 00:28:03,470 Acesta este unul comun. 492 00:28:03,470 --> 00:28:07,010 >> STEPHEN KREWSON: Și vă poate furniza un fel de mesaj de eroare, ca implicit. 493 00:28:07,010 --> 00:28:11,020 Și asta e deosebit de util atunci când faci I / O în Haskell. 494 00:28:11,020 --> 00:28:12,044 Care poate fi trucuri. 495 00:28:12,044 --> 00:28:13,960 CONNOR HARRIS: Sau pentru o exemplu similar, cred că 496 00:28:13,960 --> 00:28:17,460 de o funcție care implică divizare de un parametru care poate fi 0. 497 00:28:17,460 --> 00:28:20,020 Și această funcție ar putea reveni poate orice. 498 00:28:20,020 --> 00:28:22,802 Deci, în cazul în care nu există nici o diviziune cu 0, va reveni doar ceea ce. 499 00:28:22,802 --> 00:28:25,010 Și dacă există diviziune de 0, se va reveni nimic 500 00:28:25,010 --> 00:28:26,910 ca o modalitate de a semnalizarea erorii. 501 00:28:26,910 --> 00:28:30,330 Deoarece unul urmare a Dactilografiere foarte strict Haskell lui 502 00:28:30,330 --> 00:28:34,100 este că nu există nici o real-- excepții sunt incomode, practic, 503 00:28:34,100 --> 00:28:36,160 tratarea erorilor este ciudat. 504 00:28:36,160 --> 00:28:39,440 Și aceasta este una foarte mod comun de a face aceasta. 505 00:28:39,440 --> 00:28:42,990 >> STEPHEN KREWSON: Deci, acum avem la un alt lucru de indoiala minte 506 00:28:42,990 --> 00:28:49,160 despre Haskell, care este model potrivire și funcție definiții. 507 00:28:49,160 --> 00:28:53,390 Ți-am arătat în ultimul Glisați Declarația a secvenței pas 508 00:28:53,390 --> 00:28:58,170 funcție, care a avut o valoare poate, apoi un int, apoi o listă de int, 509 00:28:58,170 --> 00:29:03,850 apoi revine o secvență de Valorile de muzică acolo adnotat 510 00:29:03,850 --> 00:29:05,375 cu atât smoală și volumul. 511 00:29:05,375 --> 00:29:08,030 512 00:29:08,030 --> 00:29:11,820 >> Deci, cele trei argumente poate fi model potrivit în modul următor. 513 00:29:11,820 --> 00:29:16,660 Și întotdeauna vrem să fie sigur de a face un caz de bază sau caz de ieșire primul. 514 00:29:16,660 --> 00:29:19,690 Și aceste subliniere doar poate fi interpretată 515 00:29:19,690 --> 00:29:22,340 înseamnă orice valoare care e acolo. 516 00:29:22,340 --> 00:29:26,580 Deci, dacă vom obține un apel la pasul secvență cu o valoare, o altă valoare, 517 00:29:26,580 --> 00:29:32,210 și apoi lista goală, ceea ce ne dorim pentru a reveni este liniște doar, o odihnă 0. 518 00:29:32,210 --> 00:29:35,110 >> Și în loc de asta fiind o listă goală sau 0, 519 00:29:35,110 --> 00:29:38,150 este un rest 0, pentru că suntem care se ocupă cu tipul de muzică, 520 00:29:38,150 --> 00:29:43,230 și lista goală muzicii tip este doar un repaus de cel durată. 521 00:29:43,230 --> 00:29:45,680 Nu e nici muzica. 522 00:29:45,680 --> 00:29:51,460 Și apoi vom vedea dacă vom obține un pas secventa cu un v pentru argument volum, 523 00:29:51,460 --> 00:29:57,290 p pentru instrument de precauție argument, iar apoi o listă de x lui. 524 00:29:57,290 --> 00:29:58,360 >> Apoi ne-am face unele lucruri. 525 00:29:58,360 --> 00:30:01,290 În special, vom aplica această listă înțelegere, 526 00:30:01,290 --> 00:30:05,700 și vom efectua unele operațiunile pe valoarea poate 527 00:30:05,700 --> 00:30:10,050 să-l transforme într-o valoare numerică, astfel încât ea ar putea fi apoi enumerate și utilizate 528 00:30:10,050 --> 00:30:12,300 pentru a selecta instrumentul. 529 00:30:12,300 --> 00:30:16,730 Din nou, acest lucru este un pic bit în mod deliberat inconcise 530 00:30:16,730 --> 00:30:20,580 doar pentru a arăta toate lucrurile ciudate puteți face în timp ce Haskell 531 00:30:20,580 --> 00:30:23,170 să ia o privire la ea pe cont propriu timp. 532 00:30:23,170 --> 00:30:23,802 >> In regula. 533 00:30:23,802 --> 00:30:26,010 Așa că în cele din urmă ajunge la face ceea ce ne-am propus să facem, 534 00:30:26,010 --> 00:30:28,820 care este de a face niște muzică de calculator. 535 00:30:28,820 --> 00:30:32,250 Deci vom încerca să face melodia Frere Jacques. 536 00:30:32,250 --> 00:30:35,220 Deci, există câte Expresii din Frere Jacques? 537 00:30:35,220 --> 00:30:38,790 538 00:30:38,790 --> 00:30:39,680 Patru. 539 00:30:39,680 --> 00:30:40,460 Grozav. 540 00:30:40,460 --> 00:30:42,490 Și ceea ce este frumos este că acestea sunt toate repetate 541 00:30:42,490 --> 00:30:46,990 aceeași cantitate de ori, care este de două. 542 00:30:46,990 --> 00:30:50,730 >> Deci, avem patru fraze fiecare repetată de două ori. 543 00:30:50,730 --> 00:30:53,590 Și în special, sunt într-o rundă. 544 00:30:53,590 --> 00:30:55,340 Și acolo sunt multe, moduri de a pune în aplicare mai multe 545 00:30:55,340 --> 00:30:57,520 o rundă care ar putea fi distractiv de a face. 546 00:30:57,520 --> 00:31:00,260 Am făcut într-o destul de simplu mod aici, 547 00:31:00,260 --> 00:31:05,760 care este doar la construct-- linia Funcția are o listă de valori muzicale 548 00:31:05,760 --> 00:31:10,390 și se transformă în compoziție secvențială prin aplicarea acestui compoziție secvențială 549 00:31:10,390 --> 00:31:13,000 operator. 550 00:31:13,000 --> 00:31:19,540 >> Și apoi am întârzia diferitele părți făcându-le să înceapă cu o perioadă de odihnă. 551 00:31:19,540 --> 00:31:22,770 Așa că am începe cu o pauză de două măsuri, și apoi o odihnă de patru măsuri, 552 00:31:22,770 --> 00:31:26,160 și apoi o odihnă de șase măsuri, și apoi rundă 553 00:31:26,160 --> 00:31:32,290 de lucrări, după cum știm cu toții acest cântec. 554 00:31:32,290 --> 00:31:37,180 Vedem două adnotări sau modificări ale valorilor muzicale 555 00:31:37,180 --> 00:31:43,150 care sunt cuprinse în acest secvențial aranjament de elemente de muzică. 556 00:31:43,150 --> 00:31:44,810 Avem un volum de adăugare. 557 00:31:44,810 --> 00:31:48,960 Aceasta este o funcție a adnota muzica cu un anumit volum. 558 00:31:48,960 --> 00:31:51,320 Acesta este un exemplu bun de un semnal de funcționare MIDI 559 00:31:51,320 --> 00:31:57,510 de la 0 la 127, cele șapte biți de informații care pot fi transportate. 560 00:31:57,510 --> 00:32:00,650 >> Si then-- am văzut foarte pe scurt, dar MIDI generală 561 00:32:00,650 --> 00:32:02,310 listă cu toate diferitelor instrumente. 562 00:32:02,310 --> 00:32:04,450 Și nu e o mulțime de ei. 563 00:32:04,450 --> 00:32:11,230 Dacă utilizați o stație de lucru audio digitale, cum ar fi Ableton Live sau Pro Tools, 564 00:32:11,230 --> 00:32:17,560 există o gamă largă incredibil de sintetizatoare și instrumente VST. 565 00:32:17,560 --> 00:32:21,510 Dar numai standardul MIDI are câteva zeci, sau mai multe. 566 00:32:21,510 --> 00:32:22,799 Iar unii dintre ei sunt amuzante. 567 00:32:22,799 --> 00:32:25,840 M-am gândit că ar fi distractiv dacă ne-am jucat instrumentul instrumentul MIDI 568 00:32:25,840 --> 00:32:30,550 elicopter, și apoi următor drum prin tur de scrutin, 569 00:32:30,550 --> 00:32:37,980 am făcut un synth pad, și apoi a Aceasta a condus corny synth val pătrat, 570 00:32:37,980 --> 00:32:44,240 și apoi voce mâl, care sunt o pic indistinct pe MIDI meu rău 571 00:32:44,240 --> 00:32:46,410 sintetizator, dar OK. 572 00:32:46,410 --> 00:32:50,030 >> Și apoi vom vedea acest lucru lit. și în sintaxa din Haskell, 573 00:32:50,030 --> 00:32:54,030 și apoi ne jucăm toate aceste părți împreună 574 00:32:54,030 --> 00:32:56,265 cu operatorul compoziție paralel. 575 00:32:56,265 --> 00:33:00,260 576 00:33:00,260 --> 00:33:02,296 Și probabil am putea arăta o parte din aceasta. 577 00:33:02,296 --> 00:33:07,674 578 00:33:07,674 --> 00:33:08,340 Aici este codul. 579 00:33:08,340 --> 00:33:14,960 Și puteți vedea în C, ar fi o mulțime de compensare gat si compozitie 580 00:33:14,960 --> 00:33:19,760 codul de masă înainte de a ar putea face muzica de genul asta. 581 00:33:19,760 --> 00:33:22,080 Sau orice alt programare limbă, ai probabil 582 00:33:22,080 --> 00:33:27,210 Trebuie să interacționeze cu un fel de bibliotecă sau API și a stabilit totul, 583 00:33:27,210 --> 00:33:28,725 și apoi ai avea pentru a curăța. 584 00:33:28,725 --> 00:33:33,810 Dar aici, în Haskell este, cred, o dată te obișnuiești cu ea, incredibil 585 00:33:33,810 --> 00:33:35,770 ușor de citit și foarte expresiv. 586 00:33:35,770 --> 00:33:38,930 587 00:33:38,930 --> 00:33:43,240 Deci, nu există punerea în aplicare de Frere Jacques. 588 00:33:43,240 --> 00:33:43,740 In regula. 589 00:33:43,740 --> 00:33:47,557 Acum vrem să adăugați percuție, iar acest lucru este un pic pic Messier. 590 00:33:47,557 --> 00:33:49,015 Deci, haideți să aruncăm o privire la diapozitive. 591 00:33:49,015 --> 00:33:56,880 592 00:33:56,880 --> 00:34:00,540 Deci, ideea este de a face mare o grămadă de liste sau părți. 593 00:34:00,540 --> 00:34:04,140 Pentru aceste mașini-roll în, acolo au fost de obicei despre poate opt 594 00:34:04,140 --> 00:34:08,670 la 10 de ritm sau de percuție părți. 595 00:34:08,670 --> 00:34:10,159 Și apoi utilizați o grămadă de tehnici. 596 00:34:10,159 --> 00:34:14,889 Și am vorbit despre utilizarea these-- renunță, filtre, funcții lambda, 597 00:34:14,889 --> 00:34:19,429 mapate pe liste pentru a genera valori în unele între 1 și R, R este de 16, 598 00:34:19,429 --> 00:34:20,699 sau 32 de pași în sequencer. 599 00:34:20,699 --> 00:34:23,810 600 00:34:23,810 --> 00:34:29,920 >> Și apoi, dacă există o valoare în această listă ca suntem trece prin sequencer, 601 00:34:29,920 --> 00:34:34,190 trece prin ea de peste si peste, se transformă pe această notă, 602 00:34:34,190 --> 00:34:36,060 și că proba devine declanșat. 603 00:34:36,060 --> 00:34:42,810 604 00:34:42,810 --> 00:34:47,110 Aici sunt toate moduri diferite de ciudate Am venit cu pentru a genera note. 605 00:34:47,110 --> 00:34:48,940 Încercați să-l pe cont propriu suma semi. 606 00:34:48,940 --> 00:34:50,360 Va suna misto. 607 00:34:50,360 --> 00:34:53,066 608 00:34:53,066 --> 00:34:54,690 Timp permite, vom trece prin asta. 609 00:34:54,690 --> 00:34:59,200 Dar pentru acum, cred că ar trebui să ne demo ceea ce avem. 610 00:34:59,200 --> 00:35:01,380 Să sperăm că acest lucru merge OK. 611 00:35:01,380 --> 00:35:02,670 >> Deci, aceasta este GHCI. 612 00:35:02,670 --> 00:35:06,580 613 00:35:06,580 --> 00:35:09,121 Și vom încărca un fișier Am numit song.lhs, 614 00:35:09,121 --> 00:35:10,620 care este fișierul doar ți-am arătat. 615 00:35:10,620 --> 00:35:11,470 Bine, minunat. 616 00:35:11,470 --> 00:35:15,010 Așa cum Connor spus mai devreme, aceasta compilat, l scrieți verificat, 617 00:35:15,010 --> 00:35:18,380 așa că am putea respira mult mai usor. 618 00:35:18,380 --> 00:35:20,010 Nu va să arunce în aer pe mine. 619 00:35:20,010 --> 00:35:22,720 >> Am vrut să-ți arăt ceva util. 620 00:35:22,720 --> 00:35:25,900 Puteți vedea că o Modul încărcat numit 50. 621 00:35:25,900 --> 00:35:28,240 Puteți parcurge modulul. 622 00:35:28,240 --> 00:35:32,092 Și acest lucru este atât de frumos despre doing-- Poate că ceea ce 623 00:35:32,092 --> 00:35:34,550 faci in Haskell nu este numita dezvoltare de software, 624 00:35:34,550 --> 00:35:36,980 dar puteți face o mulțime de chestii amuzante pe cont propriu. 625 00:35:36,980 --> 00:35:42,410 Și fluxul de lucru este foarte frumos ca în comparație cu o mulțime de alte limbi, 626 00:35:42,410 --> 00:35:45,872 pentru că puteți vedea într-un adevărat mod lizibil ce se întâmplă. 627 00:35:45,872 --> 00:35:47,830 Deci, vedem că avem toate aceste fraze, care 628 00:35:47,830 --> 00:35:53,760 sunt liste de terenuri de muzică, și apoi ne construi astea în ceva mai mare, 629 00:35:53,760 --> 00:35:55,220 care este un cântec de muzică. 630 00:35:55,220 --> 00:35:58,450 Este o unitate de muzical. 631 00:35:58,450 --> 00:36:05,545 Și atunci putem juca acest tot cu o funcție numită muzică joc. 632 00:36:05,545 --> 00:36:09,040 Puteți vedea că aici. 633 00:36:09,040 --> 00:36:11,310 Care este doar joaca. 634 00:36:11,310 --> 00:36:15,040 >> Ar trebui să say-- nu am vorbit despre acest semn dolar asta e peste tot. 635 00:36:15,040 --> 00:36:17,980 Semn dolar este un alt operator infix. 636 00:36:17,980 --> 00:36:22,500 Dar are cea mai mică prioritate de orice operator, care în mod eficient 637 00:36:22,500 --> 00:36:24,960 înseamnă că totul pe în partea stângă a semnului dolarului 638 00:36:24,960 --> 00:36:28,460 și dreptul semnului dolar, vom să se evaluate înainte de aceasta. 639 00:36:28,460 --> 00:36:31,430 Deci e un fel de alt mod de a adăuga paranteze. 640 00:36:31,430 --> 00:36:33,980 641 00:36:33,980 --> 00:36:36,220 >> CONNOR HARRIS: Este practic compoziție funcție. 642 00:36:36,220 --> 00:36:40,026 Și se asigură că nu have-- dacă aveți funcții de fiecare parte sau infix 643 00:36:40,026 --> 00:36:42,900 Operatorii de pe fiecare parte, ei nu vor asocia peste el și vă va oferi 644 00:36:42,900 --> 00:36:46,030 rezultate neașteptate. 645 00:36:46,030 --> 00:36:49,790 >> STEPHEN KREWSON: Deci, noi can-- utilizarea pe care, putem apela. 646 00:36:49,790 --> 00:36:51,415 În primul rând, vom juca fara tobe. 647 00:36:51,415 --> 00:37:00,330 648 00:37:00,330 --> 00:37:03,170 Asta e elicopterul, elicopter MIDI. 649 00:37:03,170 --> 00:37:05,495 >> [MUSIC JOC] 650 00:37:05,495 --> 00:37:08,525 651 00:37:08,525 --> 00:37:09,525 Nu e val pătrat. 652 00:37:09,525 --> 00:37:24,520 653 00:37:24,520 --> 00:37:25,490 Mâlul voce. 654 00:37:25,490 --> 00:37:27,630 Și tu poți merge cu adevărat sălbatice cu acest lucru. 655 00:37:27,630 --> 00:37:30,872 Am luat unul destul de simplu, pentru că știam că nu ar trebui să mușca 656 00:37:30,872 --> 00:37:31,830 mai mult decât am putut mesteca. 657 00:37:31,830 --> 00:37:36,460 Doar păstrați-l destul de simplu pentru a arăta ideile principale. 658 00:37:36,460 --> 00:37:39,952 Dar apoi am fost ca, am Trebuie să adăuga unele tobe la acest lucru. 659 00:37:39,952 --> 00:37:41,910 Doar pentru că acest lucru este o pic de nepătruns, 660 00:37:41,910 --> 00:37:45,790 și eu nu am folosit Numele părților tobe, 661 00:37:45,790 --> 00:37:49,490 Am mapate them-- deoarece acestea sunt parte din această clasă recenzate, 662 00:37:49,490 --> 00:37:51,500 Le-am mapate la int. 663 00:37:51,500 --> 00:37:53,120 Una dintre ele este ca o tobă bass. 664 00:37:53,120 --> 00:37:54,370 Zero este la fel de bine. 665 00:37:54,370 --> 00:37:56,000 Șapte este o pălărie mare. 666 00:37:56,000 --> 00:38:00,920 Și în cazul în care aici Funcțiile obține un pic mai mult la întâmplare, 667 00:38:00,920 --> 00:38:02,100 acestea sunt ca tobe conga. 668 00:38:02,100 --> 00:38:08,360 >> Deci, dacă credeți că poate un about-- mod distractiv de a pune în aplicare o mașină de tambur 669 00:38:08,360 --> 00:38:12,830 este de a folosi foarte ordonată modele pe tambur dvs. bas. 670 00:38:12,830 --> 00:38:17,640 Deci, de exemplu, pe filtrarea peste Lista cu tot ceea ce dă înapoi 671 00:38:17,640 --> 00:38:20,590 1 atunci când este luat modul 04. 672 00:38:20,590 --> 00:38:27,190 Așa că am obține 1, 5, 9, 13, astfel încât această 17-- este prima ritmul orice măsură. 673 00:38:27,190 --> 00:38:32,860 >> Apoi aceasta este aceeași lucru mutat în două etape. 674 00:38:32,860 --> 00:38:33,850 Deci asta e neconventionala. 675 00:38:33,850 --> 00:38:37,480 Deci acest lucru ar fi ceva ca o pălărie mare. 676 00:38:37,480 --> 00:38:39,640 Și apoi din nou, aici, e un pic aleatoriu, 677 00:38:39,640 --> 00:38:41,080 pentru că noi facem tobe conga. 678 00:38:41,080 --> 00:38:44,180 Și am niște Maracas aici, de asemenea. 679 00:38:44,180 --> 00:38:50,280 >> Așa că am putea numi joc drum machine, dar ar merge la nesfârșit, 680 00:38:50,280 --> 00:38:53,700 și-ar putea începe hapsân sus toate memoria în sistemul meu. 681 00:38:53,700 --> 00:38:57,090 Așa că am să sun această funcție reda muzică, care, după cum vom vedea, 682 00:38:57,090 --> 00:39:02,020 utiliza compoziția paralel trunchia pentru a juca micul nostru cântec Frere Jacques 683 00:39:02,020 --> 00:39:04,200 împreună cu această mașină tambur ciudat. 684 00:39:04,200 --> 00:39:06,190 Deci, haideți să aruncăm o privire. 685 00:39:06,190 --> 00:39:10,920 Și vă rugăm să îmbunătățească pe meu aranjament de toate părțile de tobe. 686 00:39:10,920 --> 00:39:13,375 Nu specialitatea mea, dar am a avut o mulțime de distracție face-o. 687 00:39:13,375 --> 00:39:17,678 688 00:39:17,678 --> 00:39:20,654 >> [MUSIC JOC] 689 00:39:20,654 --> 00:39:52,260 690 00:39:52,260 --> 00:39:56,980 >> Deci, desigur, acest lucru este tot un pic nu la fel de distractiv 691 00:39:56,980 --> 00:40:01,100 dacă nu-l putem converti la un scor așa că poate 692 00:40:01,100 --> 00:40:04,650 ar putea fi interpretat de un interpret uman. 693 00:40:04,650 --> 00:40:06,535 Deci, eu nu va rula aici. 694 00:40:06,535 --> 00:40:07,910 Am generat deja fișierele. 695 00:40:07,910 --> 00:40:10,280 Puteți vedea că există o dot LilyPond file-- și acest 696 00:40:10,280 --> 00:40:14,500 va fi Segue mea pe la Connor-- și un fișier punct MIDI, 697 00:40:14,500 --> 00:40:18,610 și un fișier PDF punct, care este ceea ce LilyPond va genera în cele din urmă. 698 00:40:18,610 --> 00:40:23,770 >> Dar acestea sunt acele scripturi, și voi doar le executa cu opțiunile lor de ajutor. 699 00:40:23,770 --> 00:40:28,090 Dacă aveți aceste în funcțiune cu Euterpea, puteti genera un fișier MIDI. 700 00:40:28,090 --> 00:40:31,160 Și apoi de la dosar MIDI cu acest program MIDI 2LY, 701 00:40:31,160 --> 00:40:34,930 puteti genera o Lily Fișier iaz, și apoi 702 00:40:34,930 --> 00:40:37,974 poate genera un PDF din scorul. 703 00:40:37,974 --> 00:40:39,390 Și noi ar trebui să aruncăm o privire la acest lucru. 704 00:40:39,390 --> 00:40:52,599 705 00:40:52,599 --> 00:40:55,140 Deci, Connor va arăta, probabil, cum să adnota acest lucru mai bine, 706 00:40:55,140 --> 00:41:02,570 dar acest lucru este Frere Jacques ca generate de mine în Euterpea. 707 00:41:02,570 --> 00:41:07,300 E doar în C.-aș fi dat seama ce hack este de fapt în. 708 00:41:07,300 --> 00:41:11,090 Dar asta este conducta pentru cum să faci asta cu asta. 709 00:41:11,090 --> 00:41:12,950 Să vorbim mai multe despre LilyPond. 710 00:41:12,950 --> 00:41:15,780 >> CONNOR HARRIS: OK Să vedem. 711 00:41:15,780 --> 00:41:19,480 712 00:41:19,480 --> 00:41:21,419 Ți-ai spus afli ca Haskell? 713 00:41:21,419 --> 00:41:22,460 STEPHEN KREWSON: Oh, da. 714 00:41:22,460 --> 00:41:23,480 Check out Veți învăța Haskell. 715 00:41:23,480 --> 00:41:24,410 Este scris în resursele. 716 00:41:24,410 --> 00:41:26,830 Așa am început învățare, și e minunat. 717 00:41:26,830 --> 00:41:27,580 Învățarea nu prost. 718 00:41:27,580 --> 00:41:28,829 >> CONNOR HARRIS: Deci, e on-line. 719 00:41:28,829 --> 00:41:34,760 Deci, un tip pe nume [Inaudibil] learnyouahaskell.com, fără spații. 720 00:41:34,760 --> 00:41:37,065 Gramatica este bolnav. 721 00:41:37,065 --> 00:41:38,690 STEPHEN KREWSON: E ilustrat, de asemenea. 722 00:41:38,690 --> 00:41:39,440 CONNOR HARRIS: Deci, ce este LilyPond? 723 00:41:39,440 --> 00:41:42,480 E o programare declarativ limbă pentru culegere de muzică. 724 00:41:42,480 --> 00:41:45,480 Deci declarative-- puteți cred că de lucruri, cum ar fi HTML, 725 00:41:45,480 --> 00:41:50,900 în cazul în care nu ești saying-- HTML nu spune cum browsere web ar trebui să 726 00:41:50,900 --> 00:41:52,180 fac pagini pas cu pas. 727 00:41:52,180 --> 00:41:54,096 E doar că acest este o descriere textuală 728 00:41:54,096 --> 00:41:56,100 de ceea ce vrei paginii pentru a arata. 729 00:41:56,100 --> 00:41:59,310 >> Și apoi este, de asemenea, un program de care compilează acest limbaj, 730 00:41:59,310 --> 00:42:02,300 sau citit în și apoi de fapt face culegere pentru tine, 731 00:42:02,300 --> 00:42:05,570 și scuipa acestea minunate înscris PDF cauta. 732 00:42:05,570 --> 00:42:08,250 De asemenea, puteți format PNG sau orice altceva. 733 00:42:08,250 --> 00:42:10,300 O modalitate buna de a gândi în acest sens este, prin analogie 734 00:42:10,300 --> 00:42:16,620 este că LaTeX este un fel de LillyPond, dar doar pentru culegere obișnuită. 735 00:42:16,620 --> 00:42:20,360 Deci, în loc de-- nu e WYSIWYG, ceea ce vezi 736 00:42:20,360 --> 00:42:22,960 Este ceea ce ai, cum ar fi, spun Final este, sau Sibelius, 737 00:42:22,960 --> 00:42:27,430 sau Microsoft Word, în cazul în care aveți posibilitatea să tastați în în timp real și proiecte de lucruri in timp real 738 00:42:27,430 --> 00:42:31,340 și a vedea modificările instantaneu. 739 00:42:31,340 --> 00:42:32,140 >> Ea se bazează text. 740 00:42:32,140 --> 00:42:35,290 Trebuie să compilați dvs. înscris folosind un program separat 741 00:42:35,290 --> 00:42:37,090 și ieși PDF-uri mai târziu. 742 00:42:37,090 --> 00:42:43,320 Acesta este un pic mai puțin convenabil pentru utilizare în cazul în care sunteți 743 00:42:43,320 --> 00:42:46,520 încercarea de a scrie direct într-un scor și ești 744 00:42:46,520 --> 00:42:48,620 încercarea de a compune pe computer. 745 00:42:48,620 --> 00:42:50,830 Dar există o mulțime de avantaje pentru ea. 746 00:42:50,830 --> 00:42:56,110 Unul, arata mult mai frumos, pentru că, de fapt LillyPond poate 747 00:42:56,110 --> 00:42:58,210 ia timp pentru a face Deciziile aspect în mod corespunzător, 748 00:42:58,210 --> 00:43:02,380 spre deosebire de Sibelius sau Finale, care au pentru a face algoritmi compromise atât de 749 00:43:02,380 --> 00:43:05,020 că pot afișa lucruri în timp real. 750 00:43:05,020 --> 00:43:07,660 >> Deci, de ce este LilyPond-- grafica pe calculator este greu. 751 00:43:07,660 --> 00:43:10,535 Dacă faci ceva cu muzica si doriti sa scrie scoruri, 752 00:43:10,535 --> 00:43:13,900 nu vrei să scrie totul de unul singur 753 00:43:13,900 --> 00:43:19,040 începând cu cum să atragă personalul și cum să atragă Agende. 754 00:43:19,040 --> 00:43:21,020 Este foarte dificil. A fost facut inainte. 755 00:43:21,020 --> 00:43:22,170 Esti bine. 756 00:43:22,170 --> 00:43:26,200 >> Dacă doriți să utilizați Finale sau Sibelius, formatele de fișiere pentru aceste lucruri 757 00:43:26,200 --> 00:43:30,180 sunt foarte complicate, și nu poți într-adevăr le folosesc programatic. 758 00:43:30,180 --> 00:43:35,020 Puteți deschide Sibelius cu Finale și du-te la File, Export PDF le 759 00:43:35,020 --> 00:43:37,600 dar nu poate într-adevăr suna ca dintr-un script. 760 00:43:37,600 --> 00:43:40,440 LillyPond, puteți apela din aceste scripturi. 761 00:43:40,440 --> 00:43:44,397 Ai putea repeta cu ușurință LillyPond cu LaTeX. 762 00:43:44,397 --> 00:43:47,230 Eu nu va avea prea mult timp pentru a merge în aceste tehnologii, chiar acum, 763 00:43:47,230 --> 00:43:48,321 dar ele există. 764 00:43:48,321 --> 00:43:50,070 Dacă doriți să se uite într-o carte LillyPond, 765 00:43:50,070 --> 00:43:53,760 este un program care vine cu distribuția LillyPond, 766 00:43:53,760 --> 00:43:57,030 și este pentru iterarea Fragmente LillyPond în LaTeX 767 00:43:57,030 --> 00:44:00,340 dacă vrei să faci ceva ca un document muzicologie mare 768 00:44:00,340 --> 00:44:02,289 cu exemple, de exemplu. 769 00:44:02,289 --> 00:44:04,580 Și e un moral bun pentru viață dacă faci ceva 770 00:44:04,580 --> 00:44:05,770 cu muzica, nu doar CS50. 771 00:44:05,770 --> 00:44:09,320 Am folosit LillyPond pentru toate dintre proiectele mele de compoziție 772 00:44:09,320 --> 00:44:11,880 deoarece am fost de fapt o liceu. 773 00:44:11,880 --> 00:44:13,455 >> Deci, aici sunt câteva exemple simple. 774 00:44:13,455 --> 00:44:17,490 775 00:44:17,490 --> 00:44:21,060 Aceasta este de fapt reprezentant de nivelul de dificultate 776 00:44:21,060 --> 00:44:23,481 că majoritatea persoanelor ar se confruntă cu o au încercat 777 00:44:23,481 --> 00:44:24,980 de a utiliza LilyPond pentru proiecte simple. 778 00:44:24,980 --> 00:44:29,519 Aceasta prima unul este începutul la un preludiu coral de Bach. 779 00:44:29,519 --> 00:44:31,810 Acesta jos este un fragment de la una din propriile mele lucrări, 780 00:44:31,810 --> 00:44:34,650 și este doar acolo pentru a arăta te lucruri cum ar fi [] nu pot fi auzite 781 00:44:34,650 --> 00:44:38,550 punerea mai multe linii în aceeași personal, cum liric undersetting funcționează. 782 00:44:38,550 --> 00:44:41,350 783 00:44:41,350 --> 00:44:46,110 Underlays Lyric sunt un lucru care este foarte ușor de utilizat LilyPond pentru muzică corală. 784 00:44:46,110 --> 00:44:48,814 >> Și așa, atunci nu e ceva mai mult Exemple complicate aici. 785 00:44:48,814 --> 00:44:50,980 Toate acestea se fac în LilyPond și sunt fezabile. 786 00:44:50,980 --> 00:44:55,280 Acest prim fragment este de la [Inaudibil] de [neauzit]. 787 00:44:55,280 --> 00:44:58,860 Și aceasta [Inaudibil] de la o bucată de bas solo 788 00:44:58,860 --> 00:45:03,550 flaut de [neauzit], care este un longtime-- care 789 00:45:03,550 --> 00:45:07,101 a fost un membru mult timp de Departamentul de muzica aici, cred. 790 00:45:07,101 --> 00:45:08,600 Nu sunt sigur în cazul în care el a plecat la. 791 00:45:08,600 --> 00:45:12,410 Dar el a fost consilier al Harvard Asociatia compozitori pentru o lungă perioadă de timp. 792 00:45:12,410 --> 00:45:13,530 Om minunat. 793 00:45:13,530 --> 00:45:16,920 Și a scrie o muzica care are foarte notație complicat care LillyPond 794 00:45:16,920 --> 00:45:20,500 pot ocupa totuși foarte frumos. 795 00:45:20,500 --> 00:45:26,030 >> Deci, doar pentru a vă oferi un sentiment de ceea ce capacitățile acest lucru este atât de are-- 796 00:45:26,030 --> 00:45:28,960 componentele interne ale LillyPond sunt foarte complicate. 797 00:45:28,960 --> 00:45:31,060 Și îl puteți folosi pentru de mult timp, inclusiv 798 00:45:31,060 --> 00:45:32,520 pentru unele destul de complicat lucruri, într-adevăr fără 799 00:45:32,520 --> 00:45:34,060 a fi nevoie să știe o mulțime de lucruri despre ei. 800 00:45:34,060 --> 00:45:38,720 Dar ideea de bază este că, pe cel mai scăzut nivel, atomii de LillyPonds 801 00:45:38,720 --> 00:45:39,970 sunt notele. 802 00:45:39,970 --> 00:45:42,761 Notele conțin o Contextul numite voci. 803 00:45:42,761 --> 00:45:44,510 Deci contextul voce practic corespunde 804 00:45:44,510 --> 00:45:47,410 la o singură linie de polifonie. 805 00:45:47,410 --> 00:45:49,410 Și apoi context poate fi conținut ierarhic 806 00:45:49,410 --> 00:45:53,590 în cele de nivel superior care reprezintă personalul pe punctajul 807 00:45:53,590 --> 00:45:56,750 sau grupuri mai mari, cum ar fi personalul pian sau bete cor, 808 00:45:56,750 --> 00:45:58,990 și apoi în cele din urmă contexte întregi scor. 809 00:45:58,990 --> 00:46:02,260 Și tu poate cuprinde de fapt mai multe scoruri într-o carte. 810 00:46:02,260 --> 00:46:05,770 >> Și fiecare context are un Numărul de gravori atașate. 811 00:46:05,770 --> 00:46:08,340 Dacă te uiți prin conținutul unui context 812 00:46:08,340 --> 00:46:14,410 și imprima un anumit simbol sau un anumită clasă de simboluri ca este necesar. 813 00:46:14,410 --> 00:46:17,840 Deci, pentru a fiecare context de voce, nu e [Inaudibil] Note 814 00:46:17,840 --> 00:46:24,270 gravor care este de fapt o funcție sau un obiect care scrie tot nota 815 00:46:24,270 --> 00:46:26,290 capete pe părțile din dreapta ale unei pagini. 816 00:46:26,290 --> 00:46:29,510 Apoi, există un gravor despicat, care scrie în crăpături asupra personalului. 817 00:46:29,510 --> 00:46:31,517 Apoi, există un metronom marca gravor care 818 00:46:31,517 --> 00:46:33,100 scrie pe mărci Metronome într-un scor. 819 00:46:33,100 --> 00:46:36,410 Și toate acestea se potrivesc destul de bine în ierarhia. 820 00:46:36,410 --> 00:46:39,500 Și e foarte, foarte, foarte personalizabil, care aveți nevoie 821 00:46:39,500 --> 00:46:42,880 dacă doriți să obțineți lucruri de genul asta. 822 00:46:42,880 --> 00:46:45,730 >> Deci, toate contextele au o mulțime de atribute diferite 823 00:46:45,730 --> 00:46:52,410 pe care le puteți modifica pentru tot din distanța la diferite font 824 00:46:52,410 --> 00:46:54,942 selecție pentru dimensiunile de lucruri. 825 00:46:54,942 --> 00:46:56,900 Dacă vrei să faci chiar lucruri mai complicate, 826 00:46:56,900 --> 00:46:59,210 există o limbaj de scripting încorporat. 827 00:46:59,210 --> 00:47:01,820 Ei folosesc sistem, care este dialect al LISP. 828 00:47:01,820 --> 00:47:04,960 Acestea, probabil, nu înseamnă ceva pentru tine. 829 00:47:04,960 --> 00:47:06,900 Dar în esență, un sistem de un alt funcțional 830 00:47:06,900 --> 00:47:09,500 limbaj de programare, mai mult sau mai puțin. 831 00:47:09,500 --> 00:47:10,800 >> STEPHEN KREWSON: tie-in. 832 00:47:10,800 --> 00:47:12,690 >> CONNOR HARRIS: Da. 833 00:47:12,690 --> 00:47:15,390 Este un bun tie-in, presupun. 834 00:47:15,390 --> 00:47:20,150 Și este folosit ca un limbaj de predare, de fapt, în jos de masă Ave. La MIT. 835 00:47:20,150 --> 00:47:26,590 Și este foarte util pentru LillyPond pentru diverse motive tehnice. 836 00:47:26,590 --> 00:47:30,317 >> Și deci, dacă doriți să faceți simplu trucuri dependente de condiționale, 837 00:47:30,317 --> 00:47:32,900 pentru example-- există anumite condiție de un scor care este cunoscut, 838 00:47:32,900 --> 00:47:36,495 face modificări la aspectul sau whatnot-- atunci 839 00:47:36,495 --> 00:47:37,620 aceste facilități sunt acolo. 840 00:47:37,620 --> 00:47:38,667 Sunt complicate. 841 00:47:38,667 --> 00:47:40,250 Deci, aici e un eșantion de cod destul de simplu. 842 00:47:40,250 --> 00:47:43,810 E cinci linii. 843 00:47:43,810 --> 00:47:46,120 Practic, am definind două personalul. 844 00:47:46,120 --> 00:47:46,904 Este scris în 3/4. 845 00:47:46,904 --> 00:47:48,695 Primul Personalul are o atașat marca tempo, 846 00:47:48,695 --> 00:47:51,110 dar că de fapt merge pentru a merge pe la întreaga scorul, 847 00:47:51,110 --> 00:47:54,960 deoarece mărci tempo sunt la nivelul scorul. 848 00:47:54,960 --> 00:47:59,044 Marca metronom gravorului este atașat să înscrie context. 849 00:47:59,044 --> 00:48:01,460 Există chei diferite, deoarece [neauzit] gravorului 850 00:48:01,460 --> 00:48:02,710 este atașat personalul. 851 00:48:02,710 --> 00:48:04,441 Puteți face de fapt este. 852 00:48:04,441 --> 00:48:06,190 Eșantionul am scris este de fapt, în Do major, 853 00:48:06,190 --> 00:48:07,990 dar este doar pentru a demonstra puteți avea 854 00:48:07,990 --> 00:48:09,570 chei diferite în diferite personalul. 855 00:48:09,570 --> 00:48:15,710 Și sintaxa de bază este să scrie Atentie nume cu E, F, G, oricare ar fi. 856 00:48:15,710 --> 00:48:18,910 Dacă vrei să faci accidentals, te sufix este sau ES. 857 00:48:18,910 --> 00:48:22,640 Acest lucru este de la Dutch convenții muzicologice. 858 00:48:22,640 --> 00:48:28,290 >> Și pentru a face salturi de octavă, va trebui să utilizați acestea bifați mărci, virgulă sau apostrof. 859 00:48:28,290 --> 00:48:30,580 În raport înseamnă doar orice ai o notă, 860 00:48:30,580 --> 00:48:34,080 acesta va fi plaec automat în octavă mai apropiată de cea anterioară. 861 00:48:34,080 --> 00:48:37,624 Și, dacă doriți să sari mai mult un fifth-- spun o cincime sau more-- 862 00:48:37,624 --> 00:48:39,165 atunci va trebui să utilizați [neauzit]. 863 00:48:39,165 --> 00:48:42,580 Dar altfel, nu trebuie să specifica octava de fiecare nota. 864 00:48:42,580 --> 00:48:46,130 >> Și relativ C, prim, și C, doar să specificați de mijloc C 865 00:48:46,130 --> 00:48:48,630 și de bază C, în special primele note. 866 00:48:48,630 --> 00:48:55,020 Apoi, aveți aceste personalul care organizează aceste două voci sau eșantioane de muzică, 867 00:48:55,020 --> 00:48:56,730 și aveți un scor. 868 00:48:56,730 --> 00:48:58,440 Și care arată ca aceasta. 869 00:48:58,440 --> 00:49:01,780 870 00:49:01,780 --> 00:49:05,380 >> Dacă doriți să faceți timp pentru a copie care eșantion de LillyPond 871 00:49:05,380 --> 00:49:07,530 cod pe anterior glisați în jos aici, iar tu 872 00:49:07,530 --> 00:49:09,030 poate scrie pentru tine LillyPond. 873 00:49:09,030 --> 00:49:11,280 Știu că ne-am luat ceva care arata foarte mult ca aceasta. 874 00:49:11,280 --> 00:49:17,236 875 00:49:17,236 --> 00:49:19,610 Deci există o altă tehnologie numit Muzica XML menținut 876 00:49:19,610 --> 00:49:22,030 de persoane complet diferite. 877 00:49:22,030 --> 00:49:28,150 XML este un text de date structure-- I Nu ar trebui să spun de date structure-- spun 878 00:49:28,150 --> 00:49:29,580 metaforă harta fel de. 879 00:49:29,580 --> 00:49:33,800 Și este proiectat să dețină date ierarhice foarte bine. 880 00:49:33,800 --> 00:49:37,050 HTML, de exemplu, este un tip de XML. 881 00:49:37,050 --> 00:49:41,090 Și pot să vă spun XML pentru că au avut toate paranteze unghiulare și unghiul 882 00:49:41,090 --> 00:49:44,700 mărci suport slash că câmpuri arată date. 883 00:49:44,700 --> 00:49:47,390 >> Nu am un cod exemplu de Muzică XML. 884 00:49:47,390 --> 00:49:50,450 Puteți găsi singur. 885 00:49:50,450 --> 00:49:53,735 Practic, motivul pentru care s-ar putea dori de a utiliza XML ca stadiul intermediar 886 00:49:53,735 --> 00:49:55,980 este, în primul rând, este un format de schimb 887 00:49:55,980 --> 00:50:02,301 pentru practic every-- eu nu ar trebui să spun fiecare, dar o mulțime de scor diferite 888 00:50:02,301 --> 00:50:02,800 scriitori. 889 00:50:02,800 --> 00:50:04,966 Deci, dacă vă scrie în Muzică XML, nu numai pot LillyPond 890 00:50:04,966 --> 00:50:08,080 citit-o cu ajutorul acestui auxilary program numit Muzica XML pentru LY, 891 00:50:08,080 --> 00:50:11,360 dar, de asemenea, poate citi Finale aceasta, Sibelius poate citi. 892 00:50:11,360 --> 00:50:14,770 În funcție de modul în care dvs. obiect intern ierarhie lucrează pentru reprezentarea muzică, 893 00:50:14,770 --> 00:50:18,820 ar putea fi mai ușor să scrie la Muzică XML decât la LillyPond 894 00:50:18,820 --> 00:50:22,410 și doar se bazează pe muzica XML să LY pentru a face conversia. 895 00:50:22,410 --> 00:50:24,282 >> Nu cred că [neauzit] are Muzică XML. 896 00:50:24,282 --> 00:50:25,490 STEPHEN KREWSON: nu. 897 00:50:25,490 --> 00:50:26,340 Cineva lucrează la el, deși. 898 00:50:26,340 --> 00:50:27,090 >> CONNOR HARRIS: OK. 899 00:50:27,090 --> 00:50:31,040 Euterpea nu are un Funcție de ieșire muzica XML încă. 900 00:50:31,040 --> 00:50:35,340 Dacă doriți o idee finală a proiectului, poate intra în contact cu baieti 901 00:50:35,340 --> 00:50:38,620 că Ștefan știe, și acestea ar putea folosi de ajutorul tău. 902 00:50:38,620 --> 00:50:40,992 >> STEPHEN KREWSON: Mi-ar plăcea asta. 903 00:50:40,992 --> 00:50:43,450 CONNOR HARRIS: De asemenea, în esență, fiecare limbaje de programare 904 00:50:43,450 --> 00:50:46,610 care merită sarea sa are deja o bibliotecă XML, 905 00:50:46,610 --> 00:50:51,030 astfel încât să puteți converti intern toate de muzica în unele obiect 906 00:50:51,030 --> 00:50:54,120 că biblioteca XML poate scrie faptul că ar avea nevoie de mai puține 907 00:50:54,120 --> 00:50:57,470 modificări la structura intern pentru orice muzica pe obiecte 908 00:50:57,470 --> 00:51:00,310 doresc să scrie decât scris-o direct în LillyPond ar fi. 909 00:51:00,310 --> 00:51:04,380 Apoi, pur și simplu imprima cu XML cu bibliotecile XML în limba dvs., 910 00:51:04,380 --> 00:51:07,260 care va garanta că este sintactic corecte și totul, 911 00:51:07,260 --> 00:51:08,720 și apoi converti la LillyPond. 912 00:51:08,720 --> 00:51:11,060 Deci tehnologie ar putea să doriți să uite în cazul în care faci ceva 913 00:51:11,060 --> 00:51:11,650 asa. 914 00:51:11,650 --> 00:51:14,490 915 00:51:14,490 --> 00:51:16,370 >> [Auzite], un alt Tehnologia auxilarry. 916 00:51:16,370 --> 00:51:21,700 Aceasta este de fapt Tech Works sau Tech Studio pentru LillyPond. 917 00:51:21,700 --> 00:51:25,380 Așa că oferă ajutor cu sintaxa, cu template-uri 918 00:51:25,380 --> 00:51:28,770 pentru diverse comun combinații de instrumente. 919 00:51:28,770 --> 00:51:32,780 Acesta permite vizualizarea atât de split screen poti avea codul într-o singură fereastră 920 00:51:32,780 --> 00:51:37,350 și PDF într-o altă fereastră și click pe locuri în PDF 921 00:51:37,350 --> 00:51:40,650 pentru a sări la relevante pete în codul sursă. 922 00:51:40,650 --> 00:51:45,330 Acest lucru este mai util dacă ești de fapt scris LillyPond fișiere te 923 00:51:45,330 --> 00:51:47,400 decât dacă sunteți generatoare le programatic. 924 00:51:47,400 --> 00:51:51,230 Dar, din nou, e ceva util pentru a avea. 925 00:51:51,230 --> 00:51:51,970 >> Grozav. 926 00:51:51,970 --> 00:51:55,860 Un alt resources-- Voi doar du-te prin acest lucru foarte repede. 927 00:51:55,860 --> 00:52:01,270 LillyPond manuals-- LillyPond are documentație excelent pe site-ul său. 928 00:52:01,270 --> 00:52:02,270 Ei au un tutorial. 929 00:52:02,270 --> 00:52:03,478 Ei au o referință sintaxa. 930 00:52:03,478 --> 00:52:07,010 Ei au sute de fragmente pentru diverse lucruri mici 931 00:52:07,010 --> 00:52:09,930 yo ar putea avea nevoie să demonstreze face diverse capacități. 932 00:52:09,930 --> 00:52:12,250 Dacă doriți să utilizați limbaj de scripting 933 00:52:12,250 --> 00:52:14,740 sau face mai extinse particularizări, atunci nu e 934 00:52:14,740 --> 00:52:16,730 interne de referință la respectiva adresă URL. 935 00:52:16,730 --> 00:52:21,950 Dacă doriți să utilizați Muzică XML, nu e că URL, musicxml.com/tutorial. 936 00:52:21,950 --> 00:52:27,960 >> Și apoi, dacă aveți nevoie pentru a învăța sistem pentru că de fapt, doriți să utilizați 937 00:52:27,960 --> 00:52:30,960 facilitățile de scripting din LillyPond, atunci există o [Inaudibil] numit 938 00:52:30,960 --> 00:52:32,918 Interpretarea structurat de programe de calculator, 939 00:52:32,918 --> 00:52:35,820 care nu este doar al doilea cea mai mare manual CS written-- vreodată 940 00:52:35,820 --> 00:52:39,770 mă găsești după aceea, dacă vrei să știi Cred că cea mai mare ce-i singura este-- 941 00:52:39,770 --> 00:52:43,580 dar este de asemenea un foarte bun Introducere în limba corectă. 942 00:52:43,580 --> 00:52:46,630 Tu nu va nevoie de mai mult primele secțiuni. 943 00:52:46,630 --> 00:52:47,827 >> Si asta e. 944 00:52:47,827 --> 00:52:48,410 Alte intrebari? 945 00:52:48,410 --> 00:52:54,068 946 00:52:54,068 --> 00:52:57,972 >> STUDENT: De unde pot descărca generat Frere Jacques 947 00:52:57,972 --> 00:53:01,050 așa că am putea pune pe iPod-ul meu? 948 00:53:01,050 --> 00:53:07,574 >> STEPHEN KREWSON: Ei bine, puteți scrie la un fisier wav în Euterpea. 949 00:53:07,574 --> 00:53:08,490 Și ai codul. 950 00:53:08,490 --> 00:53:10,000 E pe GitHub. 951 00:53:10,000 --> 00:53:15,590 Face propriile variante ale Frere Jacques de minte stup CS50. 952 00:53:15,590 --> 00:53:17,095 Ar fi grozav. 953 00:53:17,095 --> 00:53:18,220 CONNOR HARRIS: Altcineva? 954 00:53:18,220 --> 00:53:20,261 STEPHEN KREWSON: Avem nevoie de un tambur bas mai bun, de asemenea. 955 00:53:20,261 --> 00:53:21,935 E foarte rău. 956 00:53:21,935 --> 00:53:26,565 >> STUDENT: Euterpea nu numai partea compoziție, dar signal-- 957 00:53:26,565 --> 00:53:27,440 STEPHEN KREWSON: Da. 958 00:53:27,440 --> 00:53:30,100 De fapt, activitatea I făcut în Euterpea când am 959 00:53:30,100 --> 00:53:33,450 a luat asta: există o absolvent curs la Yale care 960 00:53:33,450 --> 00:53:35,900 folosește it-- fost pe sinteza de sunet. 961 00:53:35,900 --> 00:53:39,810 Deci, există un adevărat mod plăcut cu ajutorul săgeți 962 00:53:39,810 --> 00:53:46,150 și o parte din notația am văzut de compunere împreună funcțiile de semnal. 963 00:53:46,150 --> 00:53:50,610 În special, basul pentru mai dintre ele este doar un simplu undă sinusoidală. 964 00:53:50,610 --> 00:53:54,240 Dar, dacă începeți să compuneți cele în moduri ciudate programatice, 965 00:53:54,240 --> 00:54:00,010 puteți obține un sunet nebun efecte, cum ar fi cascade ciudat. 966 00:54:00,010 --> 00:54:04,640 Puteți crea foarte curajos sunete cu o mulțime de modulare. 967 00:54:04,640 --> 00:54:07,730 >> Am făcut un proiect pe granular sinteză, care este 968 00:54:07,730 --> 00:54:12,290 undeva între FM și de prelevare de probe. 969 00:54:12,290 --> 00:54:15,230 Iei foarte mici, eșantioane mici, și apoi 970 00:54:15,230 --> 00:54:20,440 să le combine cu un fel de modulator și construi un sunet mai bogat. 971 00:54:20,440 --> 00:54:24,900 Am făcut, de asemenea, modelarea fizică, așa încercând să se gândească la fizica 972 00:54:24,900 --> 00:54:29,410 și psiho de ceva de genul o trompetă, și de gândire despre modul 973 00:54:29,410 --> 00:54:32,320 sunetul este cade pe clopotul de trompeta 974 00:54:32,320 --> 00:54:35,200 și acustica cameră și modelarea 975 00:54:35,200 --> 00:54:40,195 care cu oscilatoare de bază. 976 00:54:40,195 --> 00:54:47,690 977 00:54:47,690 --> 00:54:48,940 CONNOR HARRIS: Multumesc mult. 978 00:54:48,940 --> 00:54:50,140 Mulțumesc pentru vizită. 979 00:54:50,140 --> 00:54:52,400 Și sunt întotdeauna dispuși să ia întrebări de 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: Da. stephen.krewson@yale.edu. 982 00:54:57,020 --> 00:54:58,810 983 00:54:58,810 --> 00:55:00,360 Misto. 984 00:55:00,360 --> 00:55:01,667