1 00:00:00,000 --> 00:00:05,180 2 00:00:05,180 --> 00:00:05,930 CONNOR HARRIS: Hola. 3 00:00:05,930 --> 00:00:06,820 Sóc Connor Harris. 4 00:00:06,820 --> 00:00:09,729 Sóc un CA CS50 a Harvard. 5 00:00:09,729 --> 00:00:11,270 STEPHEN Krewson: Sóc Stephen Krewson. 6 00:00:11,270 --> 00:00:12,582 Sóc un TF per CS50 a Yale. 7 00:00:12,582 --> 00:00:15,790 CONNOR HARRIS: I parlarem sobre algunes tecnologies que podrien 8 00:00:15,790 --> 00:00:18,880 voleu fer servir si t'interessa en fer un projecte final o realment 9 00:00:18,880 --> 00:00:20,920 res amb la música. 10 00:00:20,920 --> 00:00:24,400 Centrarem en una primera llenguatge de programació anomenat Haskell. 11 00:00:24,400 --> 00:00:26,280 És un funcional idioma, de manera que el paradigma 12 00:00:26,280 --> 00:00:29,620 és molt diferent de C o PHP o altres llenguatges imperatius 13 00:00:29,620 --> 00:00:33,450 que vostè ha utilitzat ja, i especialment en una llibreria escrita en Haskell 14 00:00:33,450 --> 00:00:40,240 anomenada Euterpea, que pot ajudar a les persones amb l'escriptura de la música funcional, 15 00:00:40,240 --> 00:00:40,780 bàsicament. 16 00:00:40,780 --> 00:00:43,400 I Stephen us guiarà a a través d'un gran exemple d'això. 17 00:00:43,400 --> 00:00:46,423 >> Després d'això, vaig a presentar a cosa que es diu LillyPond, que 18 00:00:46,423 --> 00:00:48,370 és una tecnologia per a la música arxius de text. 19 00:00:48,370 --> 00:00:50,830 És una cosa així com LaTeX per la música si algun de vostès 20 00:00:50,830 --> 00:00:57,530 han fet servir LaTeX per a les classes de matemàtiques o altres classes P lloc o el que sigui. 21 00:00:57,530 --> 00:01:00,440 I així et donaré, un cop més, alguns exemples senzills que 22 00:01:00,440 --> 00:01:03,640 i assenyalar en la general, direcció d'alguns recursos millors. 23 00:01:03,640 --> 00:01:04,319 >> STEPHEN Krewson: En A més, pensem que 24 00:01:04,319 --> 00:01:06,720 seria genial per configurar una mica de consells 25 00:01:06,720 --> 00:01:10,780 cap a un oleoducte entre Arxius MIDI Euterpea generats 26 00:01:10,780 --> 00:01:13,910 en LillyPond, de manera que oferim alguna instrucció en guions 27 00:01:13,910 --> 00:01:16,310 per fer això que són proporcionat amb LillyPond 28 00:01:16,310 --> 00:01:19,160 només per mantenir-lo de codi obert i obtenir una canonada que va. 29 00:01:19,160 --> 00:01:20,910 CONNOR HARRIS: Un cop més, cal destacar, 30 00:01:20,910 --> 00:01:23,100 aquestes dues tecnologies, que no han de utilitzar-los junts. 31 00:01:23,100 --> 00:01:25,370 No estan dissenyats per treballar junts, encara que ho fan molt bé. 32 00:01:25,370 --> 00:01:26,362 >> STEPHEN Krewson: Correcte. 33 00:01:26,362 --> 00:01:30,116 I totalment gratis. 34 00:01:30,116 --> 00:01:32,240 CONNOR HARRIS: Així agraïments, que acaba de llegir. 35 00:01:32,240 --> 00:01:33,406 STEPHEN Krewson: Degudament assenyalar. 36 00:01:33,406 --> 00:01:36,360 Gràcies a aquesta gent. 37 00:01:36,360 --> 00:01:39,180 Això em va quedar-se a només un moment. 38 00:01:39,180 --> 00:01:41,560 El procés d'instal·lació és una mica complicat. 39 00:01:41,560 --> 00:01:45,420 Tenim un llegir-me en la GitHub que es pot fer una ullada a. 40 00:01:45,420 --> 00:01:47,840 Tot just envieu-me un correu electrònic si vostè té alguna pregunta. 41 00:01:47,840 --> 00:01:52,829 Però anem a córrer aquesta sota el supòsit que això està treballant per a tothom. 42 00:01:52,829 --> 00:01:55,620 CONNOR HARRIS: ¿I si no pot obtenir LillyPond funcioni, no és gran cosa. 43 00:01:55,620 --> 00:02:00,139 No hi ha recopilatori en viu que estarà involucrat, almenys en el meu final. 44 00:02:00,139 --> 00:02:02,930 STEPHEN Krewson: Haskell i LillyPond hauria dos tenen instal·ladors. 45 00:02:02,930 --> 00:02:08,497 Euterpea es descarrega com un paquet, així successivament i així successivament. 46 00:02:08,497 --> 00:02:10,080 Així que estem parlant de música per ordinador. 47 00:02:10,080 --> 00:02:12,990 I això és només una molt vista 50.000 peus. 48 00:02:12,990 --> 00:02:15,700 Hi ha alguns aspectes diferents de la mateixa. 49 00:02:15,700 --> 00:02:18,120 I això és dur i és va a amagar alguns detalls. 50 00:02:18,120 --> 00:02:22,090 Però podríem pensar en alguna cosa com la composició algorítmica, 51 00:02:22,090 --> 00:02:24,920 utilitzant algoritmes, utilitzant el codi, per generar 52 00:02:24,920 --> 00:02:30,280 algun tipus de-- potser un acte-similar seqüència de notes, o potser les notes 53 00:02:30,280 --> 00:02:33,330 sota alguna restricció. 54 00:02:33,330 --> 00:02:35,350 I a continuació, els que podrien ser realitzat o interpretat 55 00:02:35,350 --> 00:02:38,390 amb instruments analògics ni res d'això. 56 00:02:38,390 --> 00:02:42,010 No obstant això, la composició era fet algorítmicament. 57 00:02:42,010 --> 00:02:45,120 >> Però, és clar, potser l'àrea de la música de l'ordinador o de la música digital 58 00:02:45,120 --> 00:02:48,870 estem més familiaritzats amb és digital síntesi de so o mostreig digital 59 00:02:48,870 --> 00:02:51,160 i la gravació digital. 60 00:02:51,160 --> 00:02:55,650 Una gran quantitat d'instruments digitals són fet a través de mostreig digital. 61 00:02:55,650 --> 00:03:00,110 De fet, estarem usant un dels de la forma d'una biblioteca de fonts de so més tard. 62 00:03:00,110 --> 00:03:02,850 >> Però també hi ha una cosa anomenada síntesi digital que va sortir 63 00:03:02,850 --> 00:03:08,650 de finals dels anys 70 i en els anys 80 amb Yamaha i John Chowning a Stanford 64 00:03:08,650 --> 00:03:11,990 fer síntesi FM o Síntesi de modulació de freqüència, 65 00:03:11,990 --> 00:03:15,100 en el qual va tenir un portador senyal i un senyal de modulació 66 00:03:15,100 --> 00:03:18,270 tant en l'espectre d'àudio. 67 00:03:18,270 --> 00:03:22,570 Però el que estem enfocats en avui dia és una cosa que es diu MIDI, 68 00:03:22,570 --> 00:03:25,040 i per descomptat, la composició algorísmica. 69 00:03:25,040 --> 00:03:30,940 >> No farem instruments, però estem en lloc d'anar a fer una mica de música, 70 00:03:30,940 --> 00:03:33,940 i després que obtindrà interpretat per alguns instruments que 71 00:03:33,940 --> 00:03:38,300 són conformes a la Norma General MIDI. 72 00:03:38,300 --> 00:03:40,830 Llavors, què és MIDI? 73 00:03:40,830 --> 00:03:45,550 No vaig a aprofundir massa en ell, però MIDI és un protocol de transferència de dades. 74 00:03:45,550 --> 00:03:49,250 És una espècie de guia a través de diferents empreses i indústries 75 00:03:49,250 --> 00:03:52,250 per a l'organització dels sons o pegats. 76 00:03:52,250 --> 00:03:54,170 Així que veurem que hi ha un estàndard MIDI 77 00:03:54,170 --> 00:03:57,500 per a tots els diferents percussió sons i recomanacions MIDI 78 00:03:57,500 --> 00:04:01,360 per a tots els diferents tipus de sintetitzador o diferents tipus de tot l'instrument 79 00:04:01,360 --> 00:04:03,650 grups en una orquestra, diuen. 80 00:04:03,650 --> 00:04:08,916 >> Probablement vostè està familiaritzat amb 0 a 127 missatges MIDI. 81 00:04:08,916 --> 00:04:12,920 Un senyal MIDI és típicament un bit que indica 82 00:04:12,920 --> 00:04:16,130 si es tracta d'una dada o un paquet d'estat, i després hi 83 00:04:16,130 --> 00:04:18,589 set bits d'un senyal. 84 00:04:18,589 --> 00:04:21,430 I aquests poden controlar tot de volum 85 00:04:21,430 --> 00:04:25,330 a l'acció o la pressió sobre una clau particular 86 00:04:25,330 --> 00:04:29,400 si vostè està fent amb un MIDI controlador, així com, per descomptat, 87 00:04:29,400 --> 00:04:31,250 notes. 88 00:04:31,250 --> 00:04:33,450 I, per descomptat, MIDI té estat de gran utilitat, 89 00:04:33,450 --> 00:04:37,550 perquè és una forma de fil junts o cadena 90 00:04:37,550 --> 00:04:41,570 un grup de dispositius de maquinari MIDI. 91 00:04:41,570 --> 00:04:44,050 Tinc set o vuit anys enrere a casa meva. 92 00:04:44,050 --> 00:04:46,610 Es posa molt complicat, però és molt poderós. 93 00:04:46,610 --> 00:04:47,460 I és molt vell. 94 00:04:47,460 --> 00:04:51,117 És a partir dels anys 80, i que és molt bonic i petit. 95 00:04:51,117 --> 00:04:51,950 CONNOR HARRIS: Sí. 96 00:04:51,950 --> 00:04:54,230 Tot el clàssic de Nintendo videojocs faria probablement 97 00:04:54,230 --> 00:04:56,088 tenir arxius MIDI per a la música, per exemple. 98 00:04:56,088 --> 00:04:59,550 99 00:04:59,550 --> 00:05:01,740 >> STEPHEN Krewson: Heus aquí un exemple de MIDI general 100 00:05:01,740 --> 00:05:06,520 mostrant MIDI com una mena del protocol general. 101 00:05:06,520 --> 00:05:13,280 I crec que podem pensar en el diferència entre l'especificació 102 00:05:13,280 --> 00:05:17,830 que ha d'haver alguna cosa així com sona aquests instruments i el real 103 00:05:17,830 --> 00:05:21,740 realització d'aquests instruments sona en una font de so o un MIDI en particular 104 00:05:21,740 --> 00:05:25,740 sintetitzador com la diferència entre potser un typeface-- que diu: 105 00:05:25,740 --> 00:05:30,350 en general, aquest és el disseny de d'aquesta manera particular, per a representar 106 00:05:30,350 --> 00:05:35,907 characters-- i una font en particular que té una mida i timbre específic, 107 00:05:35,907 --> 00:05:37,240 i no hi ha realització d'ell-- 108 00:05:37,240 --> 00:05:39,156 >> CONNOR HARRIS: Potser una millor comparació seria 109 00:05:39,156 --> 00:05:43,430 ser l'estàndard Unicode says-- dóna un nombre per a cada personatge, i realment 110 00:05:43,430 --> 00:05:46,830 tots els idiomes del món, o un vast conjunt d'scripts del llenguatge 111 00:05:46,830 --> 00:05:51,310 al món, i llavors aquestes són dictada en alguna cosa gràfica 112 00:05:51,310 --> 00:05:53,710 per diversos paquets de fonts. 113 00:05:53,710 --> 00:05:56,630 I, òbviament, que es pugui imaginar MIDI com l'Unicode de so. 114 00:05:56,630 --> 00:06:03,250 I és només una llista de-- un gran corrent dels esdeveniments i els instruments i tot això, 115 00:06:03,250 --> 00:06:06,090 i cal tenir una separada programa, com un tipus de lletra, 116 00:06:06,090 --> 00:06:08,537 per fer això en cosa que és audible. 117 00:06:08,537 --> 00:06:12,360 118 00:06:12,360 --> 00:06:13,780 >> STEPHEN Krewson: Llavors, per Haskell? 119 00:06:13,780 --> 00:06:19,110 Haskell és una programació funcional idioma, molt avançat, 120 00:06:19,110 --> 00:06:22,770 molt diferent de C, molt diferent de PHP. 121 00:06:22,770 --> 00:06:28,120 I veurem que hi ha una facilitat de composició de funcions en Haskell 122 00:06:28,120 --> 00:06:37,640 que ens permetrà passar ràpidament per compondre o escriure a dalt, transcriure, 123 00:06:37,640 --> 00:06:42,160 una mena de Frere Jacques, aquesta cançó simple que 124 00:06:42,160 --> 00:06:46,815 té una gran quantitat de parts en aquest moment que són auto-similar o repetir. 125 00:06:46,815 --> 00:06:49,740 126 00:06:49,740 --> 00:06:53,250 Així que això va a ser alguns la motivació de per què 127 00:06:53,250 --> 00:06:59,400 estem usant Haskell, en el qual funcions són ciutadans de primera classe. 128 00:06:59,400 --> 00:07:01,120 >> I jo volia ampliar això una mica. 129 00:07:01,120 --> 00:07:08,800 És una mica fàcil anotar Frere Jacques en Haskell. 130 00:07:08,800 --> 00:07:12,100 Però el que si volíem afegir una part de bateria a ella? 131 00:07:12,100 --> 00:07:17,320 El que si volíem intentar fer una mena tambor de Roland 808 o 909 132 00:07:17,320 --> 00:07:20,970 equip en el qual vostè ha aproximadament 16 diferents passos? 133 00:07:20,970 --> 00:07:24,590 En general, aquests són pensat en notes com 16. 134 00:07:24,590 --> 00:07:28,640 I vostè pot controlar el global tempo, i es pot seleccionar 135 00:07:28,640 --> 00:07:34,620 un munt de diferents parts de percussió de bombo, un aplaudiment, diferents trampes, 136 00:07:34,620 --> 00:07:37,540 barrets alts oberts i tancats en aquest tipus de canals, 137 00:07:37,540 --> 00:07:41,600 i llavors vostè pot equalitzar o ajustar el seu volum. 138 00:07:41,600 --> 00:07:45,290 >> I anem a veure d'una manera agradable a Haskell de representar aquest pas 139 00:07:45,290 --> 00:07:48,810 seqüenciador amb tota la diverses coses interessants a Haskell 140 00:07:48,810 --> 00:07:53,100 que podem fer amb generar llistes i filtrat de més de llistes, 141 00:07:53,100 --> 00:07:56,060 mapatge sobre llistes, la cartografia funcions més llistes. 142 00:07:56,060 --> 00:07:59,530 143 00:07:59,530 --> 00:08:00,760 I una disculpa ràpida. 144 00:08:00,760 --> 00:08:05,300 Aquesta és una molt succinta i esbós excessivament ràpida 145 00:08:05,300 --> 00:08:07,620 d'alguns dels aspectes d'Haskell i Euterpea, 146 00:08:07,620 --> 00:08:11,760 que és un domini específic- llenguatge incrustat escrit 147 00:08:11,760 --> 00:08:14,970 en Haskell per a aquest tipus de música. 148 00:08:14,970 --> 00:08:17,350 Així que si us plau revisar el codi en línia. 149 00:08:17,350 --> 00:08:22,404 Arrenca GHCi, que és el Glasgow Haskell Compiler intèrpret. 150 00:08:22,404 --> 00:08:24,320 I vaig a estar fent alguns d'això en una mica 151 00:08:24,320 --> 00:08:25,880 perquè pugui veure com es fa. 152 00:08:25,880 --> 00:08:31,021 >> I això li permet carregar amb ell-- la sintaxi és dos punts i després 153 00:08:31,021 --> 00:08:31,520 la comanda. 154 00:08:31,520 --> 00:08:33,510 Pot carregar en els arxius. 155 00:08:33,510 --> 00:08:36,840 Feu servir navegar en aquests arxius per veure totes les funcions que 156 00:08:36,840 --> 00:08:39,169 existir en un mòdul particular. 157 00:08:39,169 --> 00:08:43,850 I després, com veurem, els tipus i el tipus classes són tan importants en Haskell, 158 00:08:43,850 --> 00:08:48,850 perquè sempre pugui check-- especialment si està treballant en una nova DSCL 159 00:08:48,850 --> 00:08:51,600 així, el que és un tipus de música? 160 00:08:51,600 --> 00:08:55,114 El que sé sobre la forma numèrica tipus treballen en Haskell, 161 00:08:55,114 --> 00:08:56,530 però jo no sé molt de música. 162 00:08:56,530 --> 00:09:01,280 Però vostè pot explorar la forma en què són definit per l'ús d'aquest tipus de comandament o t 163 00:09:01,280 --> 00:09:04,577 i després trucar a un particular, funció o un objecte de dades. 164 00:09:04,577 --> 00:09:05,410 CONNOR HARRIS: Sí. 165 00:09:05,410 --> 00:09:09,820 Si pensaves C i Clang va ser hardass sobre els tipus, 166 00:09:09,820 --> 00:09:11,230 vostè no té idea sobre Haskell. 167 00:09:11,230 --> 00:09:14,230 El millor és que Haskell si vostè pot aconseguir el seu codi per compilar 168 00:09:14,230 --> 00:09:16,790 i si els controls de tipus Haskell, és probable que sigui correcte, 169 00:09:16,790 --> 00:09:18,675 pel fet que el sistema de tipus és tan estricta. 170 00:09:18,675 --> 00:09:20,090 >> STEPHEN Krewson: Sí. 171 00:09:20,090 --> 00:09:21,980 Així que només vull anar through-- i una altra, 172 00:09:21,980 --> 00:09:27,160 això no ho està fent justice-- algunes de les característiques d'Haskell que, almenys 173 00:09:27,160 --> 00:09:31,780 al seu creators-- i va ser creat a finals de 1980 per un grup de persones, 174 00:09:31,780 --> 00:09:34,610 una comissió d'al voltant de 20 persones-- pensat eren importants. 175 00:09:34,610 --> 00:09:36,850 I el primer que figuren en un document que 176 00:09:36,850 --> 00:09:41,890 es descriu la gènesi d'Haskell durant els primers 20 anys més o menys 177 00:09:41,890 --> 00:09:43,390 va ser que era mandrós. 178 00:09:43,390 --> 00:09:44,990 Llavors, què vol dir això? 179 00:09:44,990 --> 00:09:49,860 >> Bé, significa que quan tenim algun tipus d'expressió, cal avaluar-lo. 180 00:09:49,860 --> 00:09:54,390 I Haskell fa d'una trucada per la necessitat manera o d'una manera no estricta. 181 00:09:54,390 --> 00:09:57,250 És a dir, si tenim un munt de components de la nostra expressió, 182 00:09:57,250 --> 00:10:00,660 tractem de retardar l'avaluació d'aquests subcomponents 183 00:10:00,660 --> 00:10:05,300 fins que l'absoluta última minut-- és a dir, fins que realment els necessitem. 184 00:10:05,300 --> 00:10:08,480 >> Així que aquest designa totes que és realment genial, especialment 185 00:10:08,480 --> 00:10:13,200 si estem pensant en l'abstracció d'un pas seqüenciador musical. 186 00:10:13,200 --> 00:10:16,740 Tu ho fas possible, i comences l'execució d'un pas sequence-- 187 00:10:16,740 --> 00:10:20,010 si alguna vegada va treballar amb un tambor automático-- i que només serveix per sempre. 188 00:10:20,010 --> 00:10:24,650 Així que seria molt bo si ens podrien emular que en Haskell. 189 00:10:24,650 --> 00:10:31,040 I podem fer-ho amb infinita valors, en particular les llistes infinites. 190 00:10:31,040 --> 00:10:35,860 És molt fàcil d'escriure un llista infinita en Haskell. 191 00:10:35,860 --> 00:10:39,230 Vostè només pot utilitzar la sintaxi baix aquí, on es veu 1 a 3, 192 00:10:39,230 --> 00:10:42,440 treure el punt punt 3 1, i és a dir una llista infinita 193 00:10:42,440 --> 00:10:46,960 de tots els nombres naturals que s'estén en la mesura del que puguis imaginar. 194 00:10:46,960 --> 00:10:49,925 >> Vull introduir un concepte de plecs immediatament. 195 00:10:49,925 --> 00:10:51,800 I de nou, el propòsit d'aquest seminari no és 196 00:10:51,800 --> 00:10:55,770 per aprendre sobre plecs en Haskell o funcions d'ordre superior. 197 00:10:55,770 --> 00:10:59,640 Però jo només vull presentar a donar un sentit exacte del que és estrany 198 00:10:59,640 --> 00:11:03,700 Haskell és i el poderós que és. 199 00:11:03,700 --> 00:11:08,000 I en particular, anem a ser-- quan fem les nostres diferents parts de bateria, 200 00:11:08,000 --> 00:11:12,790 estarem manipulant llistes de nombres, doblegar una sobre l'altra. 201 00:11:12,790 --> 00:11:17,290 I per fer això, anem a ser l'ús de mapes i plecs. 202 00:11:17,290 --> 00:11:21,770 >> Hi ha un dret associatiu plec, que és aquest dret 203 00:11:21,770 --> 00:11:26,990 aquí-- 1 menys la quantitat, 2 menys la quantitat, 3 minus 0. 204 00:11:26,990 --> 00:11:29,170 I la sintaxi d'una vegades, li dónes un plec 205 00:11:29,170 --> 00:11:34,680 un valor base i després una operation-- en aquest cas, addició o sostracció. 206 00:11:34,680 --> 00:11:36,280 He mostrat tots dos casos. 207 00:11:36,280 --> 00:11:41,760 I després hi ha un acumulador que acumula més de tota la llista, 208 00:11:41,760 --> 00:11:46,330 aplicar aquest plus operador o menys i, a continuació, l'acumulació de la mateixa. 209 00:11:46,330 --> 00:11:52,680 Així que aquest serà ell-- si fos cridat amb plec r plus de 0, començant amb 0, 210 00:11:52,680 --> 00:11:54,720 tindríem llavors resumir tot els números en aquesta llista. 211 00:11:54,720 --> 00:11:57,134 I això és una llista d'1 a 3. 212 00:11:57,134 --> 00:12:00,050 CONNOR HARRIS: Així que per dir-ho d'una altra manera, plec r pren tres arguments. 213 00:12:00,050 --> 00:12:02,540 Hi ha una funció que si pren dos arguments, 214 00:12:02,540 --> 00:12:05,400 llavors hi ha un valor d'arrencada, i hi ha una llista de valors. 215 00:12:05,400 --> 00:12:08,570 I el que es fa és prendre valor d'arrencada, primer valor, 216 00:12:08,570 --> 00:12:09,850 posar-los en la funció. 217 00:12:09,850 --> 00:12:11,607 Què s'obté a terme, prendre això, alimentació que 218 00:12:11,607 --> 00:12:13,940 en la funció de la segon valor, el que s'obté, 219 00:12:13,940 --> 00:12:16,690 haver d'alimentar que en el funció de la tercera valor. 220 00:12:16,690 --> 00:12:18,740 I llavors si vostè va avall tota aquesta llista d'aquesta manera, 221 00:12:18,740 --> 00:12:22,970 vostè va a aconseguir amb el temps algun valor singular que és 222 00:12:22,970 --> 00:12:25,720 del mateix tipus del que vas començar amb i del mateix tipus 223 00:12:25,720 --> 00:12:29,147 com coses a la llista i, a continuació això és el resultat de retorn del plec R. 224 00:12:29,147 --> 00:12:31,980 STEPHEN Krewson: Així que, en particular, aquestes són funcions d'ordre superior, 225 00:12:31,980 --> 00:12:34,460 perquè estan prenent un altre funció com un dels arguments. 226 00:12:34,460 --> 00:12:34,770 >> CONNOR HARRIS: Sí. 227 00:12:34,770 --> 00:12:37,820 Si ha utilitzat alguns altres Les Llengües sé R, [inaudible] 228 00:12:37,820 --> 00:12:41,510 llenguatge té aquesta, anomenada Reduir. 229 00:12:41,510 --> 00:12:45,460 És possible que tingui funcions similars en altres idiomes, acaba de trucar 230 00:12:45,460 --> 00:12:48,160 coses diferents. 231 00:12:48,160 --> 00:12:50,680 >> STEPHEN Krewson: I el bo de plec R 232 00:12:50,680 --> 00:12:53,880 en aquest cas és que vegades R pot treballar amb llistes infinites. 233 00:12:53,880 --> 00:12:59,490 Així que en aquest fons, aquest P5 està generant les notes que 234 00:12:59,490 --> 00:13:03,120 s'encenen en el seqüenciador per passos per a alguna part de bateria, la cinquena part de bateria, 235 00:13:03,120 --> 00:13:05,480 i potser es tracta d'una conga tambor o alguna cosa així. 236 00:13:05,480 --> 00:13:09,719 I aquesta és una forma deliberada manera obtusa d'escriure això, 237 00:13:09,719 --> 00:13:11,510 però és divertit, perquè demostra una gran quantitat 238 00:13:11,510 --> 00:13:14,460 coses sobre Haskell i Euterpea. 239 00:13:14,460 --> 00:13:20,650 >> Així plec R d'aquesta colon-- de còlon és Només un operador que empeny coses 240 00:13:20,650 --> 00:13:25,700 junts en un pel·lícules-- demanat a un buit llista, que és només els suports buits. 241 00:13:25,700 --> 00:13:28,250 I estic trucant al fet que en aquesta llista infinita. 242 00:13:28,250 --> 00:13:31,570 Això és en realitat dues llistes sumen aquí. 243 00:13:31,570 --> 00:13:37,150 La llista 1 comes 6 punts dot és 1, 6, 11, 16. 244 00:13:37,150 --> 00:13:39,750 Així Haskell-- en només uns pocs caràcters, 245 00:13:39,750 --> 00:13:42,420 pot generar la totalitat seqüència de nombres 246 00:13:42,420 --> 00:13:46,240 que són cinc números separats s'estén fins a l'infinit. 247 00:13:46,240 --> 00:13:49,860 I jo Anteposar perquè aquest petit pel·lícules-- més curt 248 00:13:49,860 --> 00:13:54,370 3, 8, 21-- només per mostrar com es pot concatenar llistes. 249 00:13:54,370 --> 00:13:55,790 >> I llavors he doblegat sobre si mateix. 250 00:13:55,790 --> 00:14:01,510 I això acaba simplement ser una mena de operació d'identitat, però és infinita. 251 00:14:01,510 --> 00:14:06,070 I doble R pot fer això, perquè mandrosament avalua, com en l'anterior. 252 00:14:06,070 --> 00:14:10,582 Si tenim un 1 i un 2 i 3, podem simplement posar entre parèntesis la totalitat de la resta d'ella. 253 00:14:10,582 --> 00:14:12,290 Això no funcionarà per menys o més, però 254 00:14:12,290 --> 00:14:17,760 treballarà per a aquest de còlon operació de la identitat a la llista. 255 00:14:17,760 --> 00:14:24,620 >> Llavors, com fem servir pràcticament que si tenir una infinitament llarga llista de coses? 256 00:14:24,620 --> 00:14:26,500 Bé, Haskell proporciona una gran quantitat de functions-- 257 00:14:26,500 --> 00:14:29,450 i mirar més en aquests en seva temps-- com prendre 258 00:14:29,450 --> 00:14:32,200 que diu, està bé, estem generar aquesta llista infinita, 259 00:14:32,200 --> 00:14:35,950 però només anem a portar el número de la mateixa i en aquest cas-- 260 00:14:35,950 --> 00:14:38,410 ja veurem això més endavant en la nostra code-- caixa de ritmes 261 00:14:38,410 --> 00:14:43,740 GM és només una espècie de mundial variable per al nombre de passos 262 00:14:43,740 --> 00:14:44,610 en el seqüenciador. 263 00:14:44,610 --> 00:14:47,630 En les màquines de corró-in me que van mostrar, això és en general 16, 264 00:14:47,630 --> 00:14:51,475 però he implementat amb 32. 265 00:14:51,475 --> 00:14:54,470 En realitat no importa. 266 00:14:54,470 --> 00:15:00,230 >> Haskell també és pur, pel que té una forta tipus estàtics que Connor al·ludit. 267 00:15:00,230 --> 00:15:03,220 Així funcions són matemàtica en el sentit-- 268 00:15:03,220 --> 00:15:06,600 són més matemàtica que estan garantits 269 00:15:06,600 --> 00:15:11,530 a no accedir o canviar qualsevol tipus de variable o realitzar entrada o sortida. 270 00:15:11,530 --> 00:15:14,420 Així que si vostè té una funció, és determinista. 271 00:15:14,420 --> 00:15:17,400 Sempre va a tornar el mateix valor en l'estat del programa 272 00:15:17,400 --> 00:15:19,310 o sent el mateix. 273 00:15:19,310 --> 00:15:22,940 Hi ha, per descomptat, excepcions monádicos a això, però això és més enllà del nostre abast. 274 00:15:22,940 --> 00:15:23,900 >> CONNOR HARRIS: Sí. 275 00:15:23,900 --> 00:15:26,946 El que això significa, però, hi és són alguns importants [inaudible] 276 00:15:26,946 --> 00:15:27,820 conseqüències d'això. 277 00:15:27,820 --> 00:15:30,940 Una d'elles és que és molt fàcil paralelizar programes Haskell. 278 00:15:30,940 --> 00:15:32,773 Perquè si vostè té, dir, una funció d'aquest 279 00:15:32,773 --> 00:15:36,064 ha d'operar en un milió de valors, si vostè sap que la funció serà sempre 280 00:15:36,064 --> 00:15:39,280 donar a conèixer el mateix valor si vostè alimenta una certa value-- 281 00:15:39,280 --> 00:15:43,055 si vostè és [inaudible] f 1, f de 2, llavors f de 3 o whatnot-- f d'1 282 00:15:43,055 --> 00:15:45,180 no va a escriure en un arxiu o fer alguna cosa 283 00:15:45,180 --> 00:15:46,850 que alterarà el valor de f2. 284 00:15:46,850 --> 00:15:50,220 Vostè només pot dividir aquesta funció a un milió de màquines diferents o un milió 285 00:15:50,220 --> 00:15:54,720 diferents fils o el que sigui, obtenir totes les respostes de tornada, 286 00:15:54,720 --> 00:15:56,900 obtenir tots els valors de retorn esquena, i després ja està. 287 00:15:56,900 --> 00:15:59,780 Així que és molt fàcil de paral·lelitzar coses. 288 00:15:59,780 --> 00:16:03,140 >> El dolent és que d'entrada i la sortida especialment 289 00:16:03,140 --> 00:16:05,720 encaixar en el sistema de tipus en formes molt complicades. 290 00:16:05,720 --> 00:16:09,010 No entrarem en això ara mateix, però jo l'animem a mirar alguns recursos 291 00:16:09,010 --> 00:16:11,175 en línia si vostè vol aprendre sobre això. 292 00:16:11,175 --> 00:16:13,960 293 00:16:13,960 --> 00:16:16,550 >> STEPHEN Krewson: Així escrigui classes-- i això 294 00:16:16,550 --> 00:16:21,610 era-- classes de tipus es van inventar per resoldre 295 00:16:21,610 --> 00:16:24,160 un problema de la sobrecàrrega d'operadors. 296 00:16:24,160 --> 00:16:27,590 Així que volíem tenir la igualtat entre els diferents tipus de coses. 297 00:16:27,590 --> 00:16:31,040 Per descomptat, podríem pensar de-- igualtat entre tipus numèrics 298 00:16:31,040 --> 00:16:34,720 és molt fàcil de pensar, però ¿Què passa amb la igualtat entre les llistes? 299 00:16:34,720 --> 00:16:37,610 Què passa amb la igualtat entre estructures de dades cama arbre? 300 00:16:37,610 --> 00:16:43,130 I tot això és possible en Haskell per classes de tipus. 301 00:16:43,130 --> 00:16:48,000 >> Així que si es defineix un determinat type-- dades i aquí, aquests són tons musicals. 302 00:16:48,000 --> 00:16:50,960 Finalment estem aconseguint una mica de música d'ordinador. 303 00:16:50,960 --> 00:16:57,420 Així que tenim C, C aguda, i així successivament i així successivament. 304 00:16:57,420 --> 00:17:01,080 Pertanyen a un grup de diferents classes de tipus. 305 00:17:01,080 --> 00:17:03,510 EQ-- que pertanyen a la classe de tipus d'EQ. 306 00:17:03,510 --> 00:17:06,780 Això vol dir que ells donen suport operacions d'igualtat. 307 00:17:06,780 --> 00:17:12,650 Així que vostè pot avaluar si un sol seqüència de primitives musicals 308 00:17:12,650 --> 00:17:15,400 és el mateix que un de diferent. 309 00:17:15,400 --> 00:17:17,280 >> Pertanyen a la classe ordinal. 310 00:17:17,280 --> 00:17:19,479 Això vol dir que hi ha un ordre per a aquests. 311 00:17:19,479 --> 00:17:27,670 D es produeix després C. C aguda ve després de C també. 312 00:17:27,670 --> 00:17:29,840 Pertanyen a la classe mostrar, el que significa que poden 313 00:17:29,840 --> 00:17:33,000 imprimir-se a una consola o terminal. 314 00:17:33,000 --> 00:17:36,090 Pertanyen a la classe enumerat, que 315 00:17:36,090 --> 00:17:39,770 significa que encara que aquests són els personatges, 316 00:17:39,770 --> 00:17:45,340 tenen una numèric subjacent representació a partir de les 0 317 00:17:45,340 --> 00:17:48,960 i sortir a través d'embargament moltes coses són aquí, 20 més o menys, 318 00:17:48,960 --> 00:17:51,770 o 30 o 40, potser. 319 00:17:51,770 --> 00:17:54,259 >> CONNOR HARRIS: I quan tenim un tipus de dades 320 00:17:54,259 --> 00:17:57,050 que derives-- amb aquesta paraula clau "deriving--" una certa classe de tipus, 321 00:17:57,050 --> 00:18:01,160 vol dir que el compilador intentarà construir alguna cosa automàticament. 322 00:18:01,160 --> 00:18:05,120 Així que potser voldràs definir una qualitat diferent. 323 00:18:05,120 --> 00:18:09,450 Vostè voldrà definir Do sostingut com igual a D plana, per exemple. 324 00:18:09,450 --> 00:18:11,560 Amb aquesta construcció aquí, no crec Do sostingut 325 00:18:11,560 --> 00:18:14,940 i plànol D serà igual, perquè el compilador automàticament 326 00:18:14,940 --> 00:18:19,670 dir que cada valor diferent possible és diferent de tots els altres. 327 00:18:19,670 --> 00:18:22,930 >> Pel que és possible anul·lar les implementacions per defecte 328 00:18:22,930 --> 00:18:25,730 d'aquests tipus de classes. 329 00:18:25,730 --> 00:18:28,640 Un cop més, mira la referència si vols aprendre sobre això. 330 00:18:28,640 --> 00:18:31,767 331 00:18:31,767 --> 00:18:33,600 STEPHEN Krewson: I aquí, en realitat, això va a 332 00:18:33,600 --> 00:18:36,930 ser útil per quan codifiquem després. 333 00:18:36,930 --> 00:18:42,150 Veiem alguns dels operadors infixos per a la composició seqüencial, 334 00:18:42,150 --> 00:18:46,570 composició paral·lela, i per tant successivament, aquests avantatges i signes d'igual 335 00:18:46,570 --> 00:18:48,620 envoltada per dos punts. 336 00:18:48,620 --> 00:18:53,330 Això vol dir que podem jugar aquests diferents primitives musicals un darrere l'altre. 337 00:18:53,330 --> 00:18:54,590 Aquesta és la composició seqüencial. 338 00:18:54,590 --> 00:18:57,170 >> O podem reproduir-los en paral·lel al mateix temps. 339 00:18:57,170 --> 00:19:05,100 Així que puc tenir un valor musical, i després això és igual i dos punts, 340 00:19:05,100 --> 00:19:09,669 infix operador de composició paral·lela, i reproduir-los com una mena de d'acord. 341 00:19:09,669 --> 00:19:11,460 I utilitzarem això quan combinem 342 00:19:11,460 --> 00:19:15,080 la nostra part de bateria amb el nostre cançoneta Frere Jacques 343 00:19:15,080 --> 00:19:19,460 jugar aquestes dues seqüències de valors musicals al mateix temps. 344 00:19:19,460 --> 00:19:24,520 345 00:19:24,520 --> 00:19:29,250 >> Currying Curry és-- per última vegada nom d'Haskell Curry, qui 346 00:19:29,250 --> 00:19:31,850 la imatge Haskell es nomena després. 347 00:19:31,850 --> 00:19:34,330 I això ens permet una agradable elegància quan estem 348 00:19:34,330 --> 00:19:36,880 escriure tots aquests diferents funcions o filtres que estem 349 00:19:36,880 --> 00:19:39,330 serà la cartografia sobre les nostres llistes. 350 00:19:39,330 --> 00:19:42,810 Una funció de dues arguments-- f de x i I- 351 00:19:42,810 --> 00:19:46,630 es pot representar com f de x s'aplica a i. 352 00:19:46,630 --> 00:19:49,800 Així que és una funció de la un argument que retorna 353 00:19:49,800 --> 00:19:51,240 una altra funció d'un argument. 354 00:19:51,240 --> 00:19:56,962 Així que això significa que podem assignar una funció f de x sobre la llista de i de. 355 00:19:56,962 --> 00:19:58,920 CONNOR HARRIS: Vols donar un exemple d'això? 356 00:19:58,920 --> 00:19:59,836 STEPHEN Krewson: Sí. 357 00:19:59,836 --> 00:20:05,390 Tinc un exemple aquí des algunes de les coses que anem a escriure. 358 00:20:05,390 --> 00:20:10,500 Així replicar 2-- així, replicar tindrà 359 00:20:10,500 --> 00:20:13,040 un valor, que és quants vegades per replicar alguna cosa, 360 00:20:13,040 --> 00:20:16,690 i després prendrà 1 value-- en general una llista o alguna cosa. 361 00:20:16,690 --> 00:20:23,450 Així que aquí, estem mapatge replicar 2 sobre una altra llista. 362 00:20:23,450 --> 00:20:27,440 >> Així que si mapeamos replicar 2, si repliquem 2 s'aplica 363 00:20:27,440 --> 00:20:31,890 al primer element d'aquest pel·lícules-- i aquests són llistes de phrases-- musical 364 00:20:31,890 --> 00:20:37,650 produirà 2 de "vostè sleeping--" així que estàs dormint, estàs dormint. 365 00:20:37,650 --> 00:20:40,040 Així que ara tenim dos. 366 00:20:40,040 --> 00:20:42,570 Però la rèplica necessiten 2 arguments, sinó perquè estem 367 00:20:42,570 --> 00:20:47,100 currying i després mapatge, podem representar la rèplica 2 368 00:20:47,100 --> 00:20:52,310 com una vegada tornada com una funció de un sol argument-- simplement replicant dues vegades. 369 00:20:52,310 --> 00:20:57,010 I després estem aplicant això a cadascun element d'aquesta llista de frases. 370 00:20:57,010 --> 00:21:01,900 >> I concat és un Haskell operació per aplanar una llista. 371 00:21:01,900 --> 00:21:04,400 A causa de que la rèplica febrer voluntat produir una llista de llistes. 372 00:21:04,400 --> 00:21:06,660 I aquesta és la forma intermèdia aquí. 373 00:21:06,660 --> 00:21:10,365 I així llavors podem concat o aplanar que fos dues vegades. 374 00:21:10,365 --> 00:21:12,240 CONNOR HARRIS: Un simple exemple de currificación, 375 00:21:12,240 --> 00:21:15,323 si haguessis com-- imaginar f és només un funció de multiplicació que triga de dos 376 00:21:15,323 --> 00:21:16,840 arguments i retorna el seu producte. 377 00:21:16,840 --> 00:21:19,320 Així que si vostè té una f maig 4, és 20. 378 00:21:19,320 --> 00:21:22,670 Però vostè pot pensar en això com També- vostè té una funció f 4 379 00:21:22,670 --> 00:21:25,560 que pren un argument i devolucions quatre vegades aquest argument-- només 380 00:21:25,560 --> 00:21:27,870 aplicació parcial que només un argument abril. 381 00:21:27,870 --> 00:21:31,182 I si vostè alimenta f de 4 5, que li donarà 20. 382 00:21:31,182 --> 00:21:32,890 I això és una simple exemple de currificación. 383 00:21:32,890 --> 00:21:34,473 En general és un dels llibres de text. 384 00:21:34,473 --> 00:21:38,860 385 00:21:38,860 --> 00:21:42,110 >> STEPHEN Krewson: Lambda expressions o funcions anònimes 386 00:21:42,110 --> 00:21:47,330 són un altre segell distintiu de Haskell. 387 00:21:47,330 --> 00:21:51,242 Així que si hem de preparar una petita rèplica vida funció, 388 00:21:51,242 --> 00:21:52,950 però diuen que no està en la biblioteca estàndard, 389 00:21:52,950 --> 00:21:56,150 podem utilitzar una sintaxi similar a la següent. 390 00:21:56,150 --> 00:21:58,730 I anem a brisa sobre això. 391 00:21:58,730 --> 00:22:02,160 Una cosa que vostè veurà un munt de al caixa de ritmes és que estem fent trucades 392 00:22:02,160 --> 00:22:05,790 a una cosa anomenada filtrar, que igual que abans, 393 00:22:05,790 --> 00:22:08,185 és una assignació d'una funció més d'una llista, però és 394 00:22:08,185 --> 00:22:10,260 una assignació d'una funció booleana. 395 00:22:10,260 --> 00:22:13,390 >> Així que aquí tenim un exemple d'una manera anònima 396 00:22:13,390 --> 00:22:19,150 funció booleana que defineix només pren un parell de valors. 397 00:22:19,150 --> 00:22:22,990 Això no és estrictament parlant una funció anònima. 398 00:22:22,990 --> 00:22:25,850 Però és definir amb que la sintaxi per raons de brevetat, 399 00:22:25,850 --> 00:22:28,007 i això només es necessita x mòdul N-- 400 00:22:28,007 --> 00:22:28,840 CONNOR HARRIS: Sí. 401 00:22:28,840 --> 00:22:31,330 Així que f és una funció de dos arguments n i p 402 00:22:31,330 --> 00:22:35,440 que retorna una funció que és en si mateixa una funció d'un argument, és a dir, x. 403 00:22:35,440 --> 00:22:38,815 404 00:22:38,815 --> 00:22:40,690 STEPHEN Krewson: I operadors infixos esmentat. 405 00:22:40,690 --> 00:22:42,642 Quins són els operadors infixos? 406 00:22:42,642 --> 00:22:45,710 Bé, operadors infixos són els forma normal representem operacions, 407 00:22:45,710 --> 00:22:49,910 dir, en matemàtiques-- 2 més 2 en lloc de l'operador més 408 00:22:49,910 --> 00:22:51,202 i després dos arguments 2 i 2. 409 00:22:51,202 --> 00:22:53,701 CONNOR HARRIS: Es diu notació polonesa inversa, que és 410 00:22:53,701 --> 00:22:55,330 un terme dubto algun de vostès sabria. 411 00:22:55,330 --> 00:22:56,288 >> STEPHEN Krewson: Correcte. 412 00:22:56,288 --> 00:22:58,290 Notació polonesa inversa o prefix. 413 00:22:58,290 --> 00:23:01,412 Però Haskell decidir utilitzar operadors infixos. 414 00:23:01,412 --> 00:23:03,120 Així que aquests són alguns els personalitzats que 415 00:23:03,120 --> 00:23:07,770 es defineixen per a la Euterpea DSCL en Haskell. 416 00:23:07,770 --> 00:23:10,730 Així que aquesta era la composició seqüencial. 417 00:23:10,730 --> 00:23:16,340 Aquest va ser composició paral·lela, i això va ser truncant composició paral·lela. 418 00:23:16,340 --> 00:23:18,710 I necessitarem que amb la nostra caixa de ritmes, 419 00:23:18,710 --> 00:23:22,640 perquè utilitzarem l'última operador en aquest petit tupla no 420 00:23:22,640 --> 00:23:26,330 a tocar la caixa de ritmes al llarg amb la nostra cançó Frere Jacques. 421 00:23:26,330 --> 00:23:28,650 I la nostra caixa de ritmes és serà infinit. 422 00:23:28,650 --> 00:23:30,920 Simplement juga sempre. 423 00:23:30,920 --> 00:23:32,692 Però la cançó Frere Jacques no ho és. 424 00:23:32,692 --> 00:23:33,510 No és tant de temps. 425 00:23:33,510 --> 00:23:36,610 És només un parell de bars. 426 00:23:36,610 --> 00:23:43,030 Així que hem de detenir la caixa de ritmes com aviat com el valor musical més curta ve 427 00:23:43,030 --> 00:23:43,700 a la seva fi. 428 00:23:43,700 --> 00:23:46,980 I aquest operador infix és super servicial amb això. 429 00:23:46,980 --> 00:23:50,090 >> I infix notació com això és una mica agradable, 430 00:23:50,090 --> 00:23:57,095 perquè diu que té una funció com cita, la qual dóna la divisió entera 431 00:23:57,095 --> 00:24:01,010 de x per alguna cosa else-- ho sento, això hauria de ser a i b. 432 00:24:01,010 --> 00:24:04,740 Es pot escriure com una cita de b. 433 00:24:04,740 --> 00:24:09,670 Així que si vostè és element put-- Un altre exemple d'això. 434 00:24:09,670 --> 00:24:14,730 x element d'alguna llista, si poses en accents oberts, vostè pot utilitzar-lo. 435 00:24:14,730 --> 00:24:20,400 Tot i que no és un símbol com més o menys o els temps, 436 00:24:20,400 --> 00:24:24,630 es pot utilitzar el nom d'una funció com la d'accents oberts 437 00:24:24,630 --> 00:24:27,045 com a operador infix, que està molt bé. 438 00:24:27,045 --> 00:24:29,670 CONNOR HARRIS: Un cop més, això és tot el sucre només sintàctica, la veritat. 439 00:24:29,670 --> 00:24:32,310 No afecta el nucli del llenguatge. 440 00:24:32,310 --> 00:24:37,440 >> STEPHEN Krewson: Així que veiem aquí pel última frase de la nostra cançó Frere Jacques, 441 00:24:37,440 --> 00:24:45,740 Vaig jugar alguns petits acords o terceres parts que utilitzen la composició paral·lela 442 00:24:45,740 --> 00:24:46,240 operador. 443 00:24:46,240 --> 00:24:50,680 444 00:24:50,680 --> 00:24:54,950 Aquesta és una altra manera de dir alguna del que hem estat dient. 445 00:24:54,950 --> 00:24:59,986 Així que vostè pot assignar funcions d'un argument sobre llistes. 446 00:24:59,986 --> 00:25:02,860 CONNOR HARRIS: Un cop més, les referències els llibres de text introductoris Haskell-- 447 00:25:02,860 --> 00:25:04,680 tindrà tot això en el mateix. 448 00:25:04,680 --> 00:25:07,790 >> STEPHEN Krewson: Així que aquí està una molt línia clau del seqüenciador per passos 449 00:25:07,790 --> 00:25:12,820 anem a fer una ullada a utilitzar una comprensió llista. 450 00:25:12,820 --> 00:25:17,810 I veiem aquí és que l'element en l'operador fixa entre cometes esquena. 451 00:25:17,810 --> 00:25:23,030 Així que si x és un element de la llista de xi, llavors ens van a cridar a funcions perc. 452 00:25:23,030 --> 00:25:25,100 Així perc és només una funció de percussió. 453 00:25:25,100 --> 00:25:30,200 Es necessita una mica de valor de p que és part del conjunt acotat de tots 454 00:25:30,200 --> 00:25:35,310 els diferents sons de percussió que vam veure en una diapositiva anterior, 455 00:25:35,310 --> 00:25:38,840 i després es dóna aquesta durada d'una negra. 456 00:25:38,840 --> 00:25:43,190 En cas contrari li dóna un regions QNR i regions QNR és només un descans negra. 457 00:25:43,190 --> 00:25:44,970 >> Així que això és la construcció d'alguna cosa agradable. 458 00:25:44,970 --> 00:25:52,110 Tenim una llista d'elements, i Anem a llaç sobre alguna llista d'un 459 00:25:52,110 --> 00:25:54,540 al valor màxim de la nostra seqüenciador per passos. 460 00:25:54,540 --> 00:25:58,290 I quan estem en un i particular aquesta llista d'un al valor màxim, 461 00:25:58,290 --> 00:26:02,970 si i és un membre d'aquesta conjunt creat en aquesta funció, 462 00:26:02,970 --> 00:26:06,040 bé, llavors ens convertim en una nota de percussió. 463 00:26:06,040 --> 00:26:10,960 Altrament, només juguem un descans, que és a dir, només guardem silenci. 464 00:26:10,960 --> 00:26:16,050 I podem veure aquí que en aquesta sintaxi comprensió llista, 465 00:26:16,050 --> 00:26:20,030 x està poblada per aquesta Llista construït un sol 466 00:26:20,030 --> 00:26:22,462 amb la mida global del seqüenciador. 467 00:26:22,462 --> 00:26:23,295 CONNOR HARRIS: Sí. 468 00:26:23,295 --> 00:26:26,340 La sintaxi bàsica de llistes per comprensió és 469 00:26:26,340 --> 00:26:30,810 suport, el valor de la participació Algunes variables, bar, 470 00:26:30,810 --> 00:26:34,260 possibles valors de les variables si mateixos, tancat suport. 471 00:26:34,260 --> 00:26:38,545 I si vostè ha fet fixar la notació constructor en qualsevol tipus de classe de matemàtiques, 472 00:26:38,545 --> 00:26:45,999 és possible que hi hagi configurat 2n tals que n és en o n està en z. 473 00:26:45,999 --> 00:26:48,290 Similar cosa-- aquesta notació està destinat a ser suggerent 474 00:26:48,290 --> 00:26:49,630 que la notació matemàtica. 475 00:26:49,630 --> 00:26:51,880 STEPHEN Krewson: I vostè pot aplicar múltiples predicats 476 00:26:51,880 --> 00:26:56,250 i diversos filtres en una llista comprensió, que és bastant agradable. 477 00:26:56,250 --> 00:27:01,800 Algebraica que tipus-- no perdurarà molt de temps aquí. 478 00:27:01,800 --> 00:27:04,840 No és una bona idea en Haskell o una bona noció òbvia 479 00:27:04,840 --> 00:27:10,720 de com prendre, diguem, un default paràmetre a una funció o alguna cosa així. 480 00:27:10,720 --> 00:27:13,370 En Python, això és bastant fàcil. 481 00:27:13,370 --> 00:27:18,460 Vostè només pot dir amb iguals en la declaració de la funció, 482 00:27:18,460 --> 00:27:21,420 un valor per defecte en cas que cap es subministra. 483 00:27:21,420 --> 00:27:27,010 >> En Haskell, podria potser utilitzar potser el tipus, potser, 484 00:27:27,010 --> 00:27:32,190 que té ja sigui res o un valor de tipus només un. 485 00:27:32,190 --> 00:27:38,630 Així que aprofitem això a la caixa de ritmes que ens permeti donar volum opcional 486 00:27:38,630 --> 00:27:40,730 paràmetres a cadascuna de les parts de bateria. 487 00:27:40,730 --> 00:27:46,160 488 00:27:46,160 --> 00:27:54,680 Així que això ens dóna una manera de tenir EQ o un volum en un canal en particular. 489 00:27:54,680 --> 00:27:56,440 >> CONNOR HARRIS: En Altres exemples Haskell, 490 00:27:56,440 --> 00:28:00,450 És possible que vegi pot ser usat per funcions que poden fallar. 491 00:28:00,450 --> 00:28:03,470 Aquesta és una pregunta comuna. 492 00:28:03,470 --> 00:28:07,010 >> STEPHEN Krewson: I vostè pot subministrar algun tipus de missatge d'error per defecte. 493 00:28:07,010 --> 00:28:11,020 I això és especialment útil quan que està fent la I / S en Haskell. 494 00:28:11,020 --> 00:28:12,044 Això pot ser trucs. 495 00:28:12,044 --> 00:28:13,960 CONNOR HARRIS: O per a un exemple similar, pensa 496 00:28:13,960 --> 00:28:17,460 d'una funció que implica la divisió d'un paràmetre que podria ser 0. 497 00:28:17,460 --> 00:28:20,020 I aquesta funció podia tornar potser el que sigui. 498 00:28:20,020 --> 00:28:22,802 Així que si no hi ha divisió per 0, tornarà simplement el que sigui. 499 00:28:22,802 --> 00:28:25,010 I si hi ha divisió per 0, retornarà res 500 00:28:25,010 --> 00:28:26,910 com una forma de senyalització de l'error. 501 00:28:26,910 --> 00:28:30,330 A causa que una de les conseqüències de Molt estricta tipificació d'Haskell 502 00:28:30,330 --> 00:28:34,100 és que no hi ha real-- excepcions són maldestres, bàsicament, 503 00:28:34,100 --> 00:28:36,160 maneig d'errors és maldestre. 504 00:28:36,160 --> 00:28:39,440 I aquesta és una molt forma comuna de fer-ho. 505 00:28:39,440 --> 00:28:42,990 >> STEPHEN Krewson: Així que ara tenim a una altra cosa endimoniada 506 00:28:42,990 --> 00:28:49,160 sobre Haskell, que és el patró definicions coincidents i funció. 507 00:28:49,160 --> 00:28:53,390 He mostrat en l'última diapositiva del declaració de la seqüència de passos 508 00:28:53,390 --> 00:28:58,170 funció, que va tenir un millor valor, a continuació, un int, a continuació, una llista d'enters, 509 00:28:58,170 --> 00:29:03,850 a continuació, retorna una seqüència de els valors de la música allà anotats 510 00:29:03,850 --> 00:29:05,375 tant amb el to i volum. 511 00:29:05,375 --> 00:29:08,030 512 00:29:08,030 --> 00:29:11,820 >> Així que els tres arguments poden ser patró aparellat de la següent manera. 513 00:29:11,820 --> 00:29:16,660 I sempre volem estar segurs que fer un cas base o caixa de sortida primer. 514 00:29:16,660 --> 00:29:19,690 I aquests guions baixos només pot interpretar-se 515 00:29:19,690 --> 00:29:22,340 per referir-se a qualsevol valor que hi és. 516 00:29:22,340 --> 00:29:26,580 Així que si rebem una trucada al pas de seqüència amb algun valor, algun altre valor, 517 00:29:26,580 --> 00:29:32,210 i després la llista buida, el que volem tornar és només silenci, una resta 0. 518 00:29:32,210 --> 00:29:35,110 >> I en lloc que sent una llista buida o 0, 519 00:29:35,110 --> 00:29:38,150 és una resta 0, perquè som tractar amb el tipus de música, 520 00:29:38,150 --> 00:29:43,230 i la llista buida de la música tipus és només una resta de cap durada. 521 00:29:43,230 --> 00:29:45,680 No és la música. 522 00:29:45,680 --> 00:29:51,460 I després veiem si aconseguim un pas seqüenciar amb un v per l'argument de volum, 523 00:29:51,460 --> 00:29:57,290 p per a instrument de precaució argument, i després una llista de les x. 524 00:29:57,290 --> 00:29:58,360 >> A continuació fem algunes coses. 525 00:29:58,360 --> 00:30:01,290 En particular, s'aplica aquesta llista per comprensió, 526 00:30:01,290 --> 00:30:05,700 i vam realitzar alguns operacions sobre el valor potser 527 00:30:05,700 --> 00:30:10,050 per convertir-lo en un valor numèric perquè es podria llavors va enumerar i utilitzat 528 00:30:10,050 --> 00:30:12,300 per seleccionar l'instrument. 529 00:30:12,300 --> 00:30:16,730 Un cop més, això és una mica poc deliberadament inconcise 530 00:30:16,730 --> 00:30:20,580 només per mostrar totes les coses rares vostè pot fer en Haskell com vostè 531 00:30:20,580 --> 00:30:23,170 fer una ullada a ell en el seu propi temps. 532 00:30:23,170 --> 00:30:23,802 >> Tot bé. 533 00:30:23,802 --> 00:30:26,010 Així que estem finalment arribar a fem el que ens vam proposar fer, 534 00:30:26,010 --> 00:30:28,820 que és fer una mica de música per ordinador. 535 00:30:28,820 --> 00:30:32,250 Així que anem a tractar de fer la cançó Frere Jacques. 536 00:30:32,250 --> 00:30:35,220 Així que hi ha quants frases en Frere Jacques? 537 00:30:35,220 --> 00:30:38,790 538 00:30:38,790 --> 00:30:39,680 Quatre. 539 00:30:39,680 --> 00:30:40,460 Gran. 540 00:30:40,460 --> 00:30:42,490 I el que és interessant és que tots estan repetits 541 00:30:42,490 --> 00:30:46,990 la mateixa quantitat de vegades, que és de dos. 542 00:30:46,990 --> 00:30:50,730 >> Així que tenim quatre frases cada repetirà dues vegades. 543 00:30:50,730 --> 00:30:53,590 I, en particular, estan en una ronda. 544 00:30:53,590 --> 00:30:55,340 I n'hi ha molts, moltes maneres d'implementar 545 00:30:55,340 --> 00:30:57,520 una ronda que podria ser divertit de fer. 546 00:30:57,520 --> 00:31:00,260 Ho he fet en un bonica forma senzilla aquí, 547 00:31:00,260 --> 00:31:05,760 que és només per construct-- la línia funció pren una llista de valors de la música 548 00:31:05,760 --> 00:31:10,390 i el converteix en la composició seqüencial mitjançant l'aplicació d'aquesta composició seqüencial 549 00:31:10,390 --> 00:31:13,000 operador. 550 00:31:13,000 --> 00:31:19,540 >> I llavors em demoro les diferents parts fent-los comencen amb un descans. 551 00:31:19,540 --> 00:31:22,770 Així que començo amb un descans de dues mesures, i després una resta de quatre mesures, 552 00:31:22,770 --> 00:31:26,160 i després una resta de les sis mesures, i després la ronda 553 00:31:26,160 --> 00:31:32,290 funciona, com tots sabem aquesta cançó. 554 00:31:32,290 --> 00:31:37,180 Veiem dues anotacions o modificacions dels valors de la música 555 00:31:37,180 --> 00:31:43,150 que estan continguts en aquest seqüencial disposició dels elements de la música. 556 00:31:43,150 --> 00:31:44,810 Tenim un volum add. 557 00:31:44,810 --> 00:31:48,960 Aquesta és una funció per anotar música amb un volum particular. 558 00:31:48,960 --> 00:31:51,320 Aquest és un bon exemple d'un senyal de funcionament MIDI 559 00:31:51,320 --> 00:31:57,510 de 0 a 127, els set bits de informació que pot ser portat. 560 00:31:57,510 --> 00:32:00,650 >> I llavors-- ho vam veure molt breument, però el general MIDI 561 00:32:00,650 --> 00:32:02,310 llista de tots els diferents instruments. 562 00:32:02,310 --> 00:32:04,450 I no hi ha un munt d'ells. 563 00:32:04,450 --> 00:32:11,230 Si utilitzeu una estació de treball d'àudio digital, com Ableton Live o Pro Tools, 564 00:32:11,230 --> 00:32:17,560 hi ha una gamma molt àmplia de sintetitzadors i instruments VST. 565 00:32:17,560 --> 00:32:21,510 Però només l'estàndard MIDI té una dotzena de pocs, o varis. 566 00:32:21,510 --> 00:32:22,799 I alguns d'ells són divertits. 567 00:32:22,799 --> 00:32:25,840 Vaig pensar que seria divertit si juguem l'instrument de l'instrument MIDI 568 00:32:25,840 --> 00:32:30,550 helicòpter, i després el el proper pas a través de la ronda, 569 00:32:30,550 --> 00:32:37,980 vam fer un sintetitzador coixinet, i després de aquest plom cursi sintetitzador d'ona quadrada, 570 00:32:37,980 --> 00:32:44,240 i després expressar exsudat, que són una mica confús en la meva mala MIDI 571 00:32:44,240 --> 00:32:46,410 sintetitzador, però a D'acord. 572 00:32:46,410 --> 00:32:50,030 >> I després veiem aquest let i en la sintaxi d'Haskell, 573 00:32:50,030 --> 00:32:54,030 i llavors ens estem jugant totes aquestes parts juntes 574 00:32:54,030 --> 00:32:56,265 amb l'operador de composició paral·lela. 575 00:32:56,265 --> 00:33:00,260 576 00:33:00,260 --> 00:33:02,296 I probablement podríem mostrar una mica d'això. 577 00:33:02,296 --> 00:33:07,674 578 00:33:07,674 --> 00:33:08,340 Aquí està el codi. 579 00:33:08,340 --> 00:33:14,960 I es pot veure en C, que hi hauria un gran quantitat d'aclarir la gola i l'ajust 580 00:33:14,960 --> 00:33:19,760 el codi de la taula abans de podria fer música com aquesta. 581 00:33:19,760 --> 00:33:22,080 O qualsevol altra programació idioma, el que probablement 582 00:33:22,080 --> 00:33:27,210 haver d'interactuar amb algun tipus de biblioteca o API i configurar tot, 583 00:33:27,210 --> 00:33:28,725 i llavors vostè ha de netejar. 584 00:33:28,725 --> 00:33:33,810 Però aquí, a Haskell és, crec, un cop que el pengi d'ella, increïblement 585 00:33:33,810 --> 00:33:35,770 llegible i molt expressiu. 586 00:33:35,770 --> 00:33:38,930 587 00:33:38,930 --> 00:33:43,240 Així que no és la implementació de Frere Jacques. 588 00:33:43,240 --> 00:33:43,740 Tot bé. 589 00:33:43,740 --> 00:33:47,557 Ara volem afegir percussió, i això és una mica més desordenat bits. 590 00:33:47,557 --> 00:33:49,015 Així que donem una ullada a les diapositives. 591 00:33:49,015 --> 00:33:56,880 592 00:33:56,880 --> 00:34:00,540 Així que la gran idea és fer un munt de llistes o parts. 593 00:34:00,540 --> 00:34:04,140 En les màquines de corró-in, eren típicament d'aproximadament uns vuit 594 00:34:04,140 --> 00:34:08,670 10 de ritme o percussió parts. 595 00:34:08,670 --> 00:34:10,159 I a continuació, utilitzar un munt de tècniques. 596 00:34:10,159 --> 00:34:14,889 I hem parlat de these-- usant plecs, filtres, funcions lambda, 597 00:34:14,889 --> 00:34:19,429 assignada sobre les llistes de generar valors en cert rang d'1 a r, r és 16, 598 00:34:19,429 --> 00:34:20,699 o 32 passos en el seqüenciador. 599 00:34:20,699 --> 00:34:23,810 600 00:34:23,810 --> 00:34:29,920 >> I després si hi ha un valor a la llista ja que estem corrent pel seqüenciador, 601 00:34:29,920 --> 00:34:34,190 corrent a través d'una i més, es converteix en aquesta nota, 602 00:34:34,190 --> 00:34:36,060 i que la mostra es desencadena. 603 00:34:36,060 --> 00:34:42,810 604 00:34:42,810 --> 00:34:47,110 Li mostrem les diferents maneres estranyes Es va acudir per generar notes. 605 00:34:47,110 --> 00:34:48,940 Prova-ho en la teva pròpia suma semi. 606 00:34:48,940 --> 00:34:50,360 Va a sonar fresc. 607 00:34:50,360 --> 00:34:53,066 608 00:34:53,066 --> 00:34:54,690 El temps ho permet, anirem a través d'aquest. 609 00:34:54,690 --> 00:34:59,200 Però per ara, suposo hem demostració del que tenim. 610 00:34:59,200 --> 00:35:01,380 Esperem que això va en D'acord. 611 00:35:01,380 --> 00:35:02,670 >> Així que això és GHCi. 612 00:35:02,670 --> 00:35:06,580 613 00:35:06,580 --> 00:35:09,121 I anem a carregar un fitxer He trucat song.lhs, 614 00:35:09,121 --> 00:35:10,620 que és l'arxiu que acabo de mostrar. 615 00:35:10,620 --> 00:35:11,470 D'acord perfecte. 616 00:35:11,470 --> 00:35:15,010 Com Connor va dir anteriorment, compilat, tipus marcada, 617 00:35:15,010 --> 00:35:18,380 així que puc respirar molt més fàcil. 618 00:35:18,380 --> 00:35:20,010 No va a esclatar en mi. 619 00:35:20,010 --> 00:35:22,720 >> Jo vull mostrar alguna cosa útil. 620 00:35:22,720 --> 00:35:25,900 Es pot veure que un mòdul carregat diu 50. 621 00:35:25,900 --> 00:35:28,240 Vostè pot navegar a aquest mòdul. 622 00:35:28,240 --> 00:35:32,092 I això és tan agradable sobre doing-- potser el 623 00:35:32,092 --> 00:35:34,550 que estàs fent en Haskell no és anomenat desenvolupament de programari, 624 00:35:34,550 --> 00:35:36,980 però es pot fer un munt de diversió coses pel seu compte. 625 00:35:36,980 --> 00:35:42,410 I el flux de treball és molt agradable ja en comparació amb un munt d'altres llengües, 626 00:35:42,410 --> 00:35:45,872 perquè es pot veure en una realitat forma llegible pel que està passant. 627 00:35:45,872 --> 00:35:47,830 Així veiem que tenim totes aquestes frases, que 628 00:35:47,830 --> 00:35:53,760 són llistes de llançaments de música i, a continuació, ens construir aquestes amunt en alguna cosa més gran, 629 00:35:53,760 --> 00:35:55,220 que és una cançó de la música. 630 00:35:55,220 --> 00:35:58,450 És una unitat musical. 631 00:35:58,450 --> 00:36:05,545 I després podem jugar tot això amb una funció anomenada reproducció de música. 632 00:36:05,545 --> 00:36:09,040 Es pot veure que aquí baix. 633 00:36:09,040 --> 00:36:11,310 Que s'acaba de jugar. 634 00:36:11,310 --> 00:36:15,040 >> He de dir-- Jo no parlo de aquest signe de dòlars que està a tot arreu. 635 00:36:15,040 --> 00:36:17,980 Signe de dòlar és altre operador infix. 636 00:36:17,980 --> 00:36:22,500 Però té la prioritat més baixa de qualsevol operador, el que efectivament 637 00:36:22,500 --> 00:36:24,960 significa que tot en l'esquerra del signe de dòlar 638 00:36:24,960 --> 00:36:28,460 i la dreta de la mostra de dòlar, aconseguirem avaluat abans. 639 00:36:28,460 --> 00:36:31,430 Així que és una cosa així com una altra manera d'afegir parèntesis. 640 00:36:31,430 --> 00:36:33,980 641 00:36:33,980 --> 00:36:36,220 >> CONNOR HARRIS: És bàsicament composició de funcions. 642 00:36:36,220 --> 00:36:40,026 I assegura que no tener-- si Té funcions de cada costat o infix 643 00:36:40,026 --> 00:36:42,900 operadors de banda i banda, no ho faran associar a través d'ella i donar-li 644 00:36:42,900 --> 00:36:46,030 resultats inesperats. 645 00:36:46,030 --> 00:36:49,790 >> STEPHEN Krewson: Així que can-- utilitzar això, podem trucar. 646 00:36:49,790 --> 00:36:51,415 En primer lloc, anem a jugar sense els tambors. 647 00:36:51,415 --> 00:37:00,330 648 00:37:00,330 --> 00:37:03,170 Aquest és l'helicòpter, l'helicòpter MIDI. 649 00:37:03,170 --> 00:37:05,495 >> [REPRODUCCIÓ DE MÚSICA] 650 00:37:05,495 --> 00:37:08,525 651 00:37:08,525 --> 00:37:09,525 Aquí està l'ona quadrada. 652 00:37:09,525 --> 00:37:24,520 653 00:37:24,520 --> 00:37:25,490 El exsudat veu. 654 00:37:25,490 --> 00:37:27,630 I realment es pot anar salvatge amb aquest. 655 00:37:27,630 --> 00:37:30,872 Vaig triar un molt simple, perquè sabia que no havia de mossegar 656 00:37:30,872 --> 00:37:31,830 més del que podia mastegar. 657 00:37:31,830 --> 00:37:36,460 Només has de mantenir bastant simple per mostrar les idees principals. 658 00:37:36,460 --> 00:37:39,952 Però llavors jo estava com, tenim ha d'afegir alguns tambors per això. 659 00:37:39,952 --> 00:37:41,910 El fet que es tracta d'una poc impenetrable, 660 00:37:41,910 --> 00:37:45,790 i jo no vaig fer ús de la nom de les parts de bateria, 661 00:37:45,790 --> 00:37:49,490 Em assignen ells-- perquè són part d'aquesta classe enumerat, 662 00:37:49,490 --> 00:37:51,500 Jo els assignen a ints. 663 00:37:51,500 --> 00:37:53,120 Un d'ells és com un bombo. 664 00:37:53,120 --> 00:37:54,370 Zero és així. 665 00:37:54,370 --> 00:37:56,000 Set és un barret alt. 666 00:37:56,000 --> 00:38:00,920 I fins aquí on el funcions es posen una mica més a l'atzar, 667 00:38:00,920 --> 00:38:02,100 aquests són com les congues. 668 00:38:02,100 --> 00:38:08,360 >> Així que si vostè pensa sobre-- potser un forma divertida de posar en pràctica una caixa de ritmes 669 00:38:08,360 --> 00:38:12,830 és utilitzar molt ordenat patrons al bombo. 670 00:38:12,830 --> 00:38:17,640 Així, per exemple, en el filtrat sobre el llista amb tot el que li dóna l'esquena 671 00:38:17,640 --> 00:38:20,590 gener 1 quan es pren del mòdul 04. 672 00:38:20,590 --> 00:38:27,190 Així que em surt 1, 5, 9, 13, 17-- de manera que aquest és el primer temps de cada compàs. 673 00:38:27,190 --> 00:38:32,860 >> I llavors aquest és el mateix cosa va canviar en dues etapes. 674 00:38:32,860 --> 00:38:33,850 Així que aquesta és la poc convencional. 675 00:38:33,850 --> 00:38:37,480 Així que això seria una mena barret alt. 676 00:38:37,480 --> 00:38:39,640 I, de nou, aquí baix, que és una mica a l'atzar, 677 00:38:39,640 --> 00:38:41,080 perquè estem fent congues. 678 00:38:41,080 --> 00:38:44,180 I tinc algunes maraques baix, també. 679 00:38:44,180 --> 00:38:50,280 >> Així que podria cridar a joc caixa de ritmes, però seria seguir per sempre, 680 00:38:50,280 --> 00:38:53,700 i podria començar a agafar fins tota la memòria en el meu sistema. 681 00:38:53,700 --> 00:38:57,090 Així que vaig a cridar a aquesta funció reproduir música, que com veurem, 682 00:38:57,090 --> 00:39:02,020 utilitzar la composició paral·lela truncant jugar la nostra petita cançó Frere Jacques 683 00:39:02,020 --> 00:39:04,200 juntament amb aquesta caixa de ritmes rar. 684 00:39:04,200 --> 00:39:06,190 Així que anem a fer una ullada. 685 00:39:06,190 --> 00:39:10,920 I per favor, millorar la meva disposició de totes les parts de bateria. 686 00:39:10,920 --> 00:39:13,375 No és la meva especialitat, però jo tenia un munt de diversió de fer-ho. 687 00:39:13,375 --> 00:39:17,678 688 00:39:17,678 --> 00:39:20,654 >> [REPRODUCCIÓ DE MÚSICA] 689 00:39:20,654 --> 00:39:52,260 690 00:39:52,260 --> 00:39:56,980 >> Així que per descomptat, tot això és una mica, no tan divertit 691 00:39:56,980 --> 00:40:01,100 si no podem convertir- a una puntuació així que potser 692 00:40:01,100 --> 00:40:04,650 podria interpretar- per un intèrpret humà. 693 00:40:04,650 --> 00:40:06,535 Així que no vaig a córrer aquí. 694 00:40:06,535 --> 00:40:07,910 Jo ja he generat els arxius. 695 00:40:07,910 --> 00:40:10,280 Es pot veure que hi ha un dot LilyPond file-- i això 696 00:40:10,280 --> 00:40:14,500 serà el meu segue a Connor-- i un arxiu de punts MIDI, 697 00:40:14,500 --> 00:40:18,610 i un arxiu PDF de punts, que és el que LilyPond en última instància generar. 698 00:40:18,610 --> 00:40:23,770 >> Però aquests són els guions, i vaig a simplement córrer amb les seves opcions d'ajuda. 699 00:40:23,770 --> 00:40:28,090 Si rep aquests marxa amb Euterpea, pot generar un arxiu MIDI. 700 00:40:28,090 --> 00:40:31,160 I a continuació, des de l'arxiu MIDI amb aquest programa MIDI 2LY, 701 00:40:31,160 --> 00:40:34,930 pot generar un lliri Arxiu de la bassa, i llavors vostè 702 00:40:34,930 --> 00:40:37,974 pot generar un PDF de la partitura. 703 00:40:37,974 --> 00:40:39,390 I hauríem fer una ullada a això. 704 00:40:39,390 --> 00:40:52,599 705 00:40:52,599 --> 00:40:55,140 Així que Connor probablement mostrar com anotar això millor, 706 00:40:55,140 --> 00:41:02,570 però això és Frere Jacques com generada per mi en Euterpea. 707 00:41:02,570 --> 00:41:07,300 És només en C. Jo hauria d'haver figurat el que el hack en realitat a. 708 00:41:07,300 --> 00:41:11,090 Però aquesta és la canonada per com es fa això amb això. 709 00:41:11,090 --> 00:41:12,950 Anem a parlar més sobre LilyPond. 710 00:41:12,950 --> 00:41:15,780 >> CONNOR HARRIS: OK Anem a veure. 711 00:41:15,780 --> 00:41:19,480 712 00:41:19,480 --> 00:41:21,419 Sabia vostè esmenta Aprendre Vostè Haskell? 713 00:41:21,419 --> 00:41:22,460 STEPHEN Krewson: Ah, sí. 714 00:41:22,460 --> 00:41:23,480 Consulteu Aprendre Vostè Haskell. 715 00:41:23,480 --> 00:41:24,410 Està en els recursos. 716 00:41:24,410 --> 00:41:26,830 Així és com vaig començar aprenentatge, i és genial. 717 00:41:26,830 --> 00:41:27,580 L'aprenentatge no ximple. 718 00:41:27,580 --> 00:41:28,829 >> CONNOR HARRIS: Així que és en línia. 719 00:41:28,829 --> 00:41:34,760 Així que un tipus anomenat [inaudible] learnyouahaskell.com, sense espais. 720 00:41:34,760 --> 00:41:37,065 La gramàtica és malalt. 721 00:41:37,065 --> 00:41:38,690 STEPHEN Krewson: És il·lustrat, també. 722 00:41:38,690 --> 00:41:39,440 CONNOR HARRIS: Llavors, què és LilyPond? 723 00:41:39,440 --> 00:41:42,480 És una programació declarativa idioma per compondre tipus de música. 724 00:41:42,480 --> 00:41:45,480 Així declarative-- puguis pensar en coses com HTML, 725 00:41:45,480 --> 00:41:50,900 on no hi ets dient-- HTML no diu com els navegadors web ha 726 00:41:50,900 --> 00:41:52,180 render pàgines pas a pas. 727 00:41:52,180 --> 00:41:54,096 És només dir això és una descripció textual 728 00:41:54,096 --> 00:41:56,100 del que vol la pàgina perquè sembli. 729 00:41:56,100 --> 00:41:59,310 >> I llavors és també un programa que compila aquesta llengua, 730 00:41:59,310 --> 00:42:02,300 o llegir el seu endins i després en realitat fa la composició tipogràfica per a vostè, 731 00:42:02,300 --> 00:42:05,570 i escup aquests meravelloses que busquen partitures en format PDF. 732 00:42:05,570 --> 00:42:08,250 També pot obtenir el format PNG o el que sigui. 733 00:42:08,250 --> 00:42:10,300 Una bona manera de pensar d'això és per analogia 734 00:42:10,300 --> 00:42:16,620 és que LaTeX és una cosa així com LillyPond, però per només tipografia ordinària. 735 00:42:16,620 --> 00:42:20,360 Així que en lloc de-- no és WYSIWYG, el que veus 736 00:42:20,360 --> 00:42:22,960 És el que obtens, com, per exemple Finale és, o Sibelius, 737 00:42:22,960 --> 00:42:27,430 o Microsoft Word, on pot escriure en temps real i els projectes de les coses en temps real 738 00:42:27,430 --> 00:42:31,340 i veure els canvis de forma immediata. 739 00:42:31,340 --> 00:42:32,140 >> Es basa text. 740 00:42:32,140 --> 00:42:35,290 Vostè ha de compilar el puntuacions utilitzant un programa separat 741 00:42:35,290 --> 00:42:37,090 i sortir arxius PDF més tard. 742 00:42:37,090 --> 00:42:43,320 Això és una mica menys convenient per a l'ús si ets 743 00:42:43,320 --> 00:42:46,520 tractant d'escriure directament en una puntuació i ja està 744 00:42:46,520 --> 00:42:48,620 tractant de compondre en l'equip. 745 00:42:48,620 --> 00:42:50,830 Però hi ha una gran quantitat d'avantatges per a això. 746 00:42:50,830 --> 00:42:56,110 Un, que té un aspecte molt més agradable, perquè LillyPond pot en realitat 747 00:42:56,110 --> 00:42:58,210 prendre el temps per fer les decisions de disseny de forma adequada, 748 00:42:58,210 --> 00:43:02,380 a diferència de Sibelius o Finale, que tenen per fer algoritmes compromesos de manera 749 00:43:02,380 --> 00:43:05,020 que poden mostrar coses en temps real. 750 00:43:05,020 --> 00:43:07,660 >> Així que per què és LilyPond-- gràfics per ordinador és difícil. 751 00:43:07,660 --> 00:43:10,535 Si vostè està fent alguna cosa amb la música i vol escriure partitures, 752 00:43:10,535 --> 00:43:13,900 vostè no desitja escriure terme tot per si mateix 753 00:43:13,900 --> 00:43:19,040 començant per com dibuixar personal i com dibuixar quaderns. 754 00:43:19,040 --> 00:43:21,020 És molt difícil. S'ha fet abans. 755 00:43:21,020 --> 00:43:22,170 Estàs bé. 756 00:43:22,170 --> 00:43:26,200 >> Si voleu utilitzar Finale o Sibelius, els formats d'arxiu per a aquestes coses 757 00:43:26,200 --> 00:43:30,180 són molt complicats, i no es pot realment utilitzar mitjançant programació. 758 00:43:30,180 --> 00:43:35,020 Podeu obrir Sibelius amb Finale i aneu a Fitxer, Exporta com a PDF a tu mateix, 759 00:43:35,020 --> 00:43:37,600 però vostè no pot realment trucar a que a partir d'un guió. 760 00:43:37,600 --> 00:43:40,440 LillyPond, pot trucar al d'aquests guions. 761 00:43:40,440 --> 00:43:44,397 Vostè podria repetir fàcilment LillyPond amb LaTeX. 762 00:43:44,397 --> 00:43:47,230 No tindré molt de temps per anar en aquestes tecnologies en aquest moment, 763 00:43:47,230 --> 00:43:48,321 però existeixen. 764 00:43:48,321 --> 00:43:50,070 Si vostè vol veure en un llibre LillyPond, 765 00:43:50,070 --> 00:43:53,760 és un programa que ve amb la seva distribució LillyPond, 766 00:43:53,760 --> 00:43:57,030 i és per a la iteració Fragments LillyPond en LaTeX 767 00:43:57,030 --> 00:44:00,340 si vols fer alguna cosa com un document gran musicologia 768 00:44:00,340 --> 00:44:02,289 amb exemples, per exemple. 769 00:44:02,289 --> 00:44:04,580 I és una bona habilitat per vida si estàs fent res 770 00:44:04,580 --> 00:44:05,770 amb la música, no només CS50. 771 00:44:05,770 --> 00:44:09,320 He fet servir LillyPond per a tots dels meus projectes de composició 772 00:44:09,320 --> 00:44:11,880 des que era bàsicament un últim any de secundària. 773 00:44:11,880 --> 00:44:13,455 >> Així que aquí estan alguns exemples senzills. 774 00:44:13,455 --> 00:44:17,490 775 00:44:17,490 --> 00:44:21,060 Això és bàsicament representativa del nivell de dificultat 776 00:44:21,060 --> 00:44:23,481 que la majoria de la gent enfrontar estaven tractant 777 00:44:23,481 --> 00:44:24,980 utilitzar LilyPond per a projectes simples. 778 00:44:24,980 --> 00:44:29,519 Aquest primer és el principi a un preludi coral de Bach. 779 00:44:29,519 --> 00:44:31,810 Aquest fons és un extracte d'un dels meus pròpies obres, 780 00:44:31,810 --> 00:44:34,650 i és just allà per mostrar vostè coses com [inaudible] 781 00:44:34,650 --> 00:44:38,550 posant diverses línies en el mateix personal, com lletra undersetting funciona. 782 00:44:38,550 --> 00:44:41,350 783 00:44:41,350 --> 00:44:46,110 Underlays lírics són una cosa que és molt fàcil d'usar LilyPond per a la música coral. 784 00:44:46,110 --> 00:44:48,814 >> I llavors hi ha alguna cosa més exemples complicats aquí. 785 00:44:48,814 --> 00:44:50,980 Tot això es fa en LilyPond i són factibles. 786 00:44:50,980 --> 00:44:55,280 Aquest primer extracte és de [Inaudible] per [inaudible]. 787 00:44:55,280 --> 00:44:58,860 I això [inaudible] de una peça per al baix solista 788 00:44:58,860 --> 00:45:03,550 flauta per [inaudible], que és un longtime-- que 789 00:45:03,550 --> 00:45:07,101 era un membre de llarg termini de la departament de música aquí, crec. 790 00:45:07,101 --> 00:45:08,600 No estic segur d'on ha anat a. 791 00:45:08,600 --> 00:45:12,410 Però ell era l'assessor de la Universitat de Harvard Associació de Compositors durant molt de temps. 792 00:45:12,410 --> 00:45:13,530 Home meravellós. 793 00:45:13,530 --> 00:45:16,920 I escriu una mica de música que té molt notació complicada que LillyPond 794 00:45:16,920 --> 00:45:20,500 no obstant això, pot gestionar molt bé. 795 00:45:20,500 --> 00:45:26,030 >> Així que per donar-li un sentit del les capacitats d'aquesta cosa tan són-- 796 00:45:26,030 --> 00:45:28,960 el funcionament intern de LillyPond són molt complicats. 797 00:45:28,960 --> 00:45:31,060 I vostè pot utilitzar-lo per molt de temps, incloent 798 00:45:31,060 --> 00:45:32,520 per a alguns bastant complicat coses, sense realment 799 00:45:32,520 --> 00:45:34,060 haver de saber molt sobre ells. 800 00:45:34,060 --> 00:45:38,720 Però la idea bàsica és que en el nivell més baix, els àtoms de LillyPonds 801 00:45:38,720 --> 00:45:39,970 són les notes. 802 00:45:39,970 --> 00:45:42,761 Les notes contenen una context anomenats veus. 803 00:45:42,761 --> 00:45:44,510 Així el context de veu bàsicament correspon 804 00:45:44,510 --> 00:45:47,410 a una sola línia de la polifonia. 805 00:45:47,410 --> 00:45:49,410 I després context pot ser continguda jeràrquicament 806 00:45:49,410 --> 00:45:53,590 en els de més alt nivell que representar personal en la puntuació 807 00:45:53,590 --> 00:45:56,750 o agrupacions més grans, com personal de piano o el personal del cor, 808 00:45:56,750 --> 00:45:58,990 i després, eventualment contextos puntuació senceres. 809 00:45:58,990 --> 00:46:02,260 I en realitat es pot abastar múltiples comptes en un llibre. 810 00:46:02,260 --> 00:46:05,770 >> I cada context té una nombre de gravadors connectats. 811 00:46:05,770 --> 00:46:08,340 Si es mira a través de la contingut d'un context 812 00:46:08,340 --> 00:46:14,410 i imprimir un cert símbol o un certa classe de símbols com a necessari. 813 00:46:14,410 --> 00:46:17,840 Així que per a tots els contextos de veu, hi ha [inaudible] notes 814 00:46:17,840 --> 00:46:24,270 gravador que és bàsicament una funció o un objecte que escriu tota la nota 815 00:46:24,270 --> 00:46:26,290 caps en les parts correctes d'una pàgina. 816 00:46:26,290 --> 00:46:29,510 Després hi ha un gravador leporí, que escriu terme esquerdes en el personal. 817 00:46:29,510 --> 00:46:31,517 Llavors hi ha un metrònom marca gravador que 818 00:46:31,517 --> 00:46:33,100 escriu a terme indicacions de metrònom en una partitura. 819 00:46:33,100 --> 00:46:36,410 I tots aquests encaixen bastant bé en la jerarquia. 820 00:46:36,410 --> 00:46:39,500 I és molt, molt, molt personalitzable, el que vostè necessita 821 00:46:39,500 --> 00:46:42,880 si vostè vol aconseguir coses per l'estil. 822 00:46:42,880 --> 00:46:45,730 >> Així que tots els contextos tenen un gran quantitat de diferents atributs 823 00:46:45,730 --> 00:46:52,410 que es pot modificar per a tot, a partir de la separació a diversos font 824 00:46:52,410 --> 00:46:54,942 selecció de mides de coses. 825 00:46:54,942 --> 00:46:56,900 Si vols fer encara les coses més complicades, 826 00:46:56,900 --> 00:46:59,210 hi ha un llenguatge de scripting encastat. 827 00:46:59,210 --> 00:47:01,820 Utilitzen esquema, que és el dialecte de LISP. 828 00:47:01,820 --> 00:47:04,960 Aquests probablement no ho fan significa res per a tu. 829 00:47:04,960 --> 00:47:06,900 Però, bàsicament, un esquema una altra funcional 830 00:47:06,900 --> 00:47:09,500 llenguatge de programació, més o menys. 831 00:47:09,500 --> 00:47:10,800 >> STEPHEN Krewson: El tie-in. 832 00:47:10,800 --> 00:47:12,690 >> CONNOR HARRIS: Sí. 833 00:47:12,690 --> 00:47:15,390 És un bon tie-in, suposo. 834 00:47:15,390 --> 00:47:20,150 I s'utilitza com a llengua d'ensenyament, de fet, fins a la missa Ave Al MIT. 835 00:47:20,150 --> 00:47:26,590 I és molt útil per LillyPond per diverses raons tècniques. 836 00:47:26,590 --> 00:47:30,317 >> I pel que si vol fer senzilla ajustos que depenen dels condicionals, 837 00:47:30,317 --> 00:47:32,900 per exemple-- que hi ha certa condició d'una partitura que es va reunir, 838 00:47:32,900 --> 00:47:36,495 realitzar modificacions a la disseny o whatnot-- continuació 839 00:47:36,495 --> 00:47:37,620 aquestes instal·lacions hi són. 840 00:47:37,620 --> 00:47:38,667 Són complicats. 841 00:47:38,667 --> 00:47:40,250 Així que aquí està un exemple de codi bastant simple. 842 00:47:40,250 --> 00:47:43,810 És cinc línies. 843 00:47:43,810 --> 00:47:46,120 Bàsicament, estic definint dues personals. 844 00:47:46,120 --> 00:47:46,904 Està en 3.4. 845 00:47:46,904 --> 00:47:48,695 El primer equip compta amb una adjunta marca el tempo, 846 00:47:48,695 --> 00:47:51,110 però això és en realitat va per passar a tota la partitura, 847 00:47:51,110 --> 00:47:54,960 perquè les marques de tempo estan en el marcador equilibrat. 848 00:47:54,960 --> 00:47:59,044 El gravador marca de metrònom S'adjunta per anotar context. 849 00:47:59,044 --> 00:48:01,460 Hi ha diferents claus, perquè el [inaudible] gravador 850 00:48:01,460 --> 00:48:02,710 S'adjunta el personal. 851 00:48:02,710 --> 00:48:04,441 En realitat es pot fer és. 852 00:48:04,441 --> 00:48:06,190 La mostra que vaig escriure és realitat en do major, 853 00:48:06,190 --> 00:48:07,990 però és només per a demostrar que pot tenir 854 00:48:07,990 --> 00:48:09,570 diferents claus en diferents vares. 855 00:48:09,570 --> 00:48:15,710 I la sintaxi bàsica és que escrius assenyalar noms amb E, F, G, el que sigui. 856 00:48:15,710 --> 00:48:18,910 Si vostè vol fer alteracions, vostè sufix és o ES. 857 00:48:18,910 --> 00:48:22,640 Això és d'holandès convencions musicològics. 858 00:48:22,640 --> 00:48:28,290 >> I per fer salts d'octava, vostè ha d'utilitzar aquestes paparres marques, coma o apòstrof. 859 00:48:28,290 --> 00:48:30,580 La relativa només significa el que tinguis una nota, 860 00:48:30,580 --> 00:48:34,080 automàticament es plaec al vuitena més propera a l'anterior. 861 00:48:34,080 --> 00:48:37,624 I si vostè vol saltar més 1 fifth-- dir un cinquè o més-- 862 00:48:37,624 --> 00:48:39,165 llavors vostè ha d'utilitzar el [inaudible]. 863 00:48:39,165 --> 00:48:42,580 Però d'altra banda, no ha de especificar la vuitena de cada nota. 864 00:48:42,580 --> 00:48:46,130 >> I en relació C, primer i C, que acaba d'especificar Do central 865 00:48:46,130 --> 00:48:48,630 i la base C, especialment primeres notes. 866 00:48:48,630 --> 00:48:55,020 Llavors vostè té aquestes vares que organitzen aquestes dues veus o mostres de música, 867 00:48:55,020 --> 00:48:56,730 i vostè té un compte. 868 00:48:56,730 --> 00:48:58,440 I això es veu així. 869 00:48:58,440 --> 00:49:01,780 870 00:49:01,780 --> 00:49:05,380 >> Si vostè vol prendre el temps per copiar aquesta mostra de LillyPond 871 00:49:05,380 --> 00:49:07,530 codi de l'anterior lliscar per aquí, i vostè 872 00:49:07,530 --> 00:49:09,030 pot escriure per LillyPond tu mateix. 873 00:49:09,030 --> 00:49:11,280 Jo sé que tenim alguna cosa que s'assembla molt a això. 874 00:49:11,280 --> 00:49:17,236 875 00:49:17,236 --> 00:49:19,610 Així que hi ha una altra tecnologia va mantenir anomenat XML Música 876 00:49:19,610 --> 00:49:22,030 per persones completament diferents. 877 00:49:22,030 --> 00:49:28,150 XML és que unes dades textuals structure-- No hauria de dir les dades structure-- diuen 878 00:49:28,150 --> 00:49:29,580 mapa metàfora més o menys. 879 00:49:29,580 --> 00:49:33,800 I està dissenyat per mantenir dades jeràrquics molt bé. 880 00:49:33,800 --> 00:49:37,050 HTML, per exemple, és un tipus de XML. 881 00:49:37,050 --> 00:49:41,090 I es pot dir XML perquè tenia tots els suports d'angle i angle 882 00:49:41,090 --> 00:49:44,700 marques de barra suport que els camps de dades mostren. 883 00:49:44,700 --> 00:49:47,390 >> Jo no tinc un codi exemple de Música XML. 884 00:49:47,390 --> 00:49:50,450 Vostè pot trobar vostè mateix. 885 00:49:50,450 --> 00:49:53,735 Bàsicament, la raó és possible que vulgueu per utilitzar XML com l'etapa intermèdia 886 00:49:53,735 --> 00:49:55,980 és, primer de tot, és un format d'intercanvi 887 00:49:55,980 --> 00:50:02,301 per bàsicament every-- no hauria de dir tots, però un munt de puntuació diferent 888 00:50:02,301 --> 00:50:02,800 escriptors. 889 00:50:02,800 --> 00:50:04,966 Així que si vostè escriu a la Música XML, no només pot LillyPond 890 00:50:04,966 --> 00:50:08,080 llegir amb l'ajuda d'aquest auxilary programa anomenat XML Música per LY, 891 00:50:08,080 --> 00:50:11,360 sinó també Finale pot llegir que, Sibelius pot llegir-lo. 892 00:50:11,360 --> 00:50:14,770 Depenent de com el seu objecte intern jerarquia treballa per a la representació de la música, 893 00:50:14,770 --> 00:50:18,820 podria ser més fàcil que escriure la música XML que a LillyPond 894 00:50:18,820 --> 00:50:22,410 i només es basen en XML Música a LY per fer la conversió. 895 00:50:22,410 --> 00:50:24,282 >> No crec que [inaudible] té XML Música. 896 00:50:24,282 --> 00:50:25,490 STEPHEN Krewson: No ho fa. 897 00:50:25,490 --> 00:50:26,340 Algú està treballant en això, però. 898 00:50:26,340 --> 00:50:27,090 >> CONNOR HARRIS: OK. 899 00:50:27,090 --> 00:50:31,040 Euterpea no té Funció de sortida XML Música encara. 900 00:50:31,040 --> 00:50:35,340 Si vols una idea final del projecte, potser posar-se en contacte amb els nois 901 00:50:35,340 --> 00:50:38,620 que Esteban ho sap, i que podrien utilitzar la seva ajuda. 902 00:50:38,620 --> 00:50:40,992 >> STEPHEN Krewson: M'encantaria això. 903 00:50:40,992 --> 00:50:43,450 CONNOR HARRIS: També, bàsicament, cada llenguatges de programació 904 00:50:43,450 --> 00:50:46,610 això és que es preï ja compta amb una biblioteca de XML, 905 00:50:46,610 --> 00:50:51,030 el que pot convertir internament tot de la seva música en un objecte 906 00:50:51,030 --> 00:50:54,120 que la biblioteca XML pot escriure que requeriria menys 907 00:50:54,120 --> 00:50:57,470 alteracions en la seva estructura interna per qualsevol música que objectes 908 00:50:57,470 --> 00:51:00,310 vull escriure que escriure- directament en LillyPond faria. 909 00:51:00,310 --> 00:51:04,380 A continuació, només imprimir-lo amb XML amb les biblioteques XML en el seu idioma, 910 00:51:04,380 --> 00:51:07,260 que garanteixi que és sintàcticament correcta i tot, 911 00:51:07,260 --> 00:51:08,720 i després convertir-lo a LillyPond. 912 00:51:08,720 --> 00:51:11,060 Així que la tecnologia és possible que vulgueu mirar si vostè està fent alguna cosa 913 00:51:11,060 --> 00:51:11,650 així. 914 00:51:11,650 --> 00:51:14,490 915 00:51:14,490 --> 00:51:16,370 >> [Inaudible], un altre tecnologia auxilarry. 916 00:51:16,370 --> 00:51:21,700 Això és bàsicament Tech Obres o Tech Estudi a LillyPond. 917 00:51:21,700 --> 00:51:25,380 Per tant, ofereix ajuda amb sintaxi, amb plantilles 918 00:51:25,380 --> 00:51:28,770 comú per a diversos combinacions d'instruments. 919 00:51:28,770 --> 00:51:32,780 Permet pantalla dividida de visualització de manera vostè pot tenir el seu codi en una finestra 920 00:51:32,780 --> 00:51:37,350 i pdf en una finestra i feu clic sobre els llocs al PDF 921 00:51:37,350 --> 00:51:40,650 per saltar a la corresponent llocs en el seu codi font. 922 00:51:40,650 --> 00:51:45,330 Això és més útil si vostè està realment escriptura LillyPond arxius a tu mateix 923 00:51:45,330 --> 00:51:47,400 que si vostè està generant mitjançant programació. 924 00:51:47,400 --> 00:51:51,230 Però, de nou, és alguna cosa útil a tenir. 925 00:51:51,230 --> 00:51:51,970 >> Gran. 926 00:51:51,970 --> 00:51:55,860 Una altra resources-- només vaig a passar per això molt ràpidament. 927 00:51:55,860 --> 00:52:01,270 LillyPond manuals-- LillyPond té excel·lent documentació al seu lloc web. 928 00:52:01,270 --> 00:52:02,270 Tenen un tutorial. 929 00:52:02,270 --> 00:52:03,478 Tenen una referència de sintaxi. 930 00:52:03,478 --> 00:52:07,010 Tenen centenars de fragments per diverses coses petites 931 00:52:07,010 --> 00:52:09,930 jo pot ser que necessiti fer per demostrar diverses capacitats. 932 00:52:09,930 --> 00:52:12,250 Si voleu utilitzar el llenguatge de scripting 933 00:52:12,250 --> 00:52:14,740 o fer més extensa personalitzacions, llavors no 934 00:52:14,740 --> 00:52:16,730 funcionament intern de referència a aquesta URL. 935 00:52:16,730 --> 00:52:21,950 Si voleu utilitzar XML Música, hi ha aquesta URL, musicxml.com/tutorial. 936 00:52:21,950 --> 00:52:27,960 >> I llavors, si vostè necessita aprendre esquema perquè en realitat es vol utilitzar 937 00:52:27,960 --> 00:52:30,960 les instal·lacions de scripting en LillyPond, llavors hi ha una [inaudible] diu 938 00:52:30,960 --> 00:52:32,918 Interpretació Estructurat de programes d'ordinador, 939 00:52:32,918 --> 00:52:35,820 que no només és la segona major llibre de text CS mai written-- 940 00:52:35,820 --> 00:52:39,770 trobar-me després si vostè vol saber el que crec que el més gran és-- 941 00:52:39,770 --> 00:52:43,580 però també és una molt bona introducció a la llengua pròpia. 942 00:52:43,580 --> 00:52:46,630 Vostè no necessitarà més de les primeres seccions. 943 00:52:46,630 --> 00:52:47,827 >> I això és tot. 944 00:52:47,827 --> 00:52:48,410 Qualsevol pregunta? 945 00:52:48,410 --> 00:52:54,068 946 00:52:54,068 --> 00:52:57,972 >> ESTUDIANT: On puc descarregar el teu generada Frere Jacques 947 00:52:57,972 --> 00:53:01,050 perquè pugui posar-la en el meu iPod? 948 00:53:01,050 --> 00:53:07,574 >> STEPHEN Krewson: Bé, pot escriure a algun arxiu wav a Euterpea. 949 00:53:07,574 --> 00:53:08,490 I vostè té el codi. 950 00:53:08,490 --> 00:53:10,000 És en GitHub. 951 00:53:10,000 --> 00:53:15,590 Faci les seves pròpies variacions de Frere Jacques per CS50 ment rusc. 952 00:53:15,590 --> 00:53:17,095 Seria molt bo. 953 00:53:17,095 --> 00:53:18,220 CONNOR HARRIS: Algú més? 954 00:53:18,220 --> 00:53:20,261 STEPHEN Krewson: Necessitem una millor bombo, també. 955 00:53:20,261 --> 00:53:21,935 És realment dolent. 956 00:53:21,935 --> 00:53:26,565 >> ESTUDIANT: Euterpea té no només el costat composició, però signal-- 957 00:53:26,565 --> 00:53:27,440 STEPHEN Krewson: Sí. 958 00:53:27,440 --> 00:53:30,100 De fet, el treball que va fer en Euterpea quan 959 00:53:30,100 --> 00:53:33,450 prendre esto-- hi ha una Curs de Postgrau en la Universitat de Yale que 960 00:53:33,450 --> 00:53:35,900 utilitza it-- era a la síntesi de so. 961 00:53:35,900 --> 00:53:39,810 Així que hi ha una realitat bona manera d'utilitzar les fletxes 962 00:53:39,810 --> 00:53:46,150 i alguns de la notació que vam veure de compondre junts funcions de senyal. 963 00:53:46,150 --> 00:53:50,610 En particular, el baix per a la majoria d'ells és només una ona sinusoïdal simple. 964 00:53:50,610 --> 00:53:54,240 Però si comences a compondre els en formes programàtiques estranys, 965 00:53:54,240 --> 00:54:00,010 vostè pot aconseguir so boig efectes, com cascades estranys. 966 00:54:00,010 --> 00:54:04,640 Podeu crear molt valent sons amb una gran quantitat de modulació. 967 00:54:04,640 --> 00:54:07,730 >> Vaig fer un projecte sobre granular síntesi, que és 968 00:54:07,730 --> 00:54:12,290 en algun lloc entre FM i mostreig. 969 00:54:12,290 --> 00:54:15,230 Es pren molt petita, petites mostres, i després 970 00:54:15,230 --> 00:54:20,440 combinar-los amb algun tipus de modulador i crear un so més ric. 971 00:54:20,440 --> 00:54:24,900 També vam fer el modelatge físic, per la qual cosa tractant de pensar sobre la física 972 00:54:24,900 --> 00:54:29,410 i psicoacústica d'una cosa així com una trompeta, i pensant en el camí 973 00:54:29,410 --> 00:54:32,320 el so aquesta saltant la campana de la trompeta 974 00:54:32,320 --> 00:54:35,200 i l'acústica de l'habitació i el modelatge 975 00:54:35,200 --> 00:54:40,195 que amb els oscil·ladors bàsics. 976 00:54:40,195 --> 00:54:47,690 977 00:54:47,690 --> 00:54:48,940 CONNOR HARRIS: Moltes gràcies. 978 00:54:48,940 --> 00:54:50,140 Gràcies per venir. 979 00:54:50,140 --> 00:54:52,400 I jo sempre estic disposat a respondre preguntes per 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: Sí. stephen.krewson@yale.edu. 982 00:54:57,020 --> 00:54:58,810 983 00:54:58,810 --> 00:55:00,360 Fresc. 984 00:55:00,360 --> 00:55:01,667