1 00:00:00,000 --> 00:00:05,180 2 00:00:05,180 --> 00:00:05,930 CONNOR HARRIS: Ola. 3 00:00:05,930 --> 00:00:06,820 Eu son Connor Harris. 4 00:00:06,820 --> 00:00:09,729 Eu son un CA CS50 en Harvard. 5 00:00:09,729 --> 00:00:11,270 STEPHEN Krewson: Eu son Stephen Krewson. 6 00:00:11,270 --> 00:00:12,582 Eu son un TF para CS50 en Yale. 7 00:00:12,582 --> 00:00:15,790 CONNOR HARRIS: E imos falar sobre algunhas tecnoloxías que pode 8 00:00:15,790 --> 00:00:18,880 quere usar, se vostede está interesado en facer un proxecto final ou realmente 9 00:00:18,880 --> 00:00:20,920 nada coa música. 10 00:00:20,920 --> 00:00:24,400 Estamos indo para concentrarse nun primeiro linguaxe de programación chamada Haskell. 11 00:00:24,400 --> 00:00:26,280 É unha funcional lingua, de xeito que o paradigma 12 00:00:26,280 --> 00:00:29,620 é moi diferente do C ou PHP ou outras linguaxes imperativas 13 00:00:29,620 --> 00:00:33,450 que xa teña usado e, especialmente, nunha biblioteca escrita en Haskell 14 00:00:33,450 --> 00:00:40,240 Euterpea chamado, o que pode axudar a xente coa escrita de música funcionalmente, 15 00:00:40,240 --> 00:00:40,780 basicamente. 16 00:00:40,780 --> 00:00:43,400 E Stephen ha oriente-lo a través dun gran exemplo diso. 17 00:00:43,400 --> 00:00:46,423 >> Despois diso, eu vou presenta-lo a algo chamado LillyPond, que 18 00:00:46,423 --> 00:00:48,370 é unha tecnoloxía para a música de composición. 19 00:00:48,370 --> 00:00:50,830 É unha especie de como LaTeX para a música se algún de vós 20 00:00:50,830 --> 00:00:57,530 LaTeX usar para clases de matemáticas ou outras clases conxunto P ou o que ten. 21 00:00:57,530 --> 00:01:00,440 E entón eu vou dar-lle, unha vez máis, algúns exemplos simples de que 22 00:01:00,440 --> 00:01:03,640 e sinala-lo na xeral dirección dalgúns recursos mellores. 23 00:01:03,640 --> 00:01:04,319 >> STEPHEN Krewson: En Adicionalmente, nós pensamos que 24 00:01:04,319 --> 00:01:06,720 sería legal para definir-se un pouco de suxestións 25 00:01:06,720 --> 00:01:10,780 cara a un gasoduto entre Arquivos MIDI xerados polo Euterpea 26 00:01:10,780 --> 00:01:13,910 en LillyPond, polo que ofrecemos algunha instrución en scripts 27 00:01:13,910 --> 00:01:16,310 para facelo que son que acompaña LillyPond 28 00:01:16,310 --> 00:01:19,160 só para manter-lo código aberto e obter un gasoduto vai. 29 00:01:19,160 --> 00:01:20,910 CONNOR HARRIS: Unha vez máis, debemos salientar, 30 00:01:20,910 --> 00:01:23,100 estas dúas tecnoloxías, vostede Non ten que usalos xuntos. 31 00:01:23,100 --> 00:01:25,370 Eles non están deseñados para traballar xuntos, aínda que eles fan moi ben. 32 00:01:25,370 --> 00:01:26,362 >> STEPHEN Krewson: Correcto. 33 00:01:26,362 --> 00:01:30,116 E totalmente gratuíto. 34 00:01:30,116 --> 00:01:32,240 CONNOR HARRIS: Entón, recoñecementos, pode ler isto. 35 00:01:32,240 --> 00:01:33,406 STEPHEN Krewson: Debidamente anotado. 36 00:01:33,406 --> 00:01:36,360 Grazas a estas persoas. 37 00:01:36,360 --> 00:01:39,180 Iso eu vou ir en só un momento. 38 00:01:39,180 --> 00:01:41,560 O proceso de instalación é un pouco complicado. 39 00:01:41,560 --> 00:01:45,420 Temos un me ler no GitHub que pode dar un ollo. 40 00:01:45,420 --> 00:01:47,840 Só envíe me se tes algunha preguntas. 41 00:01:47,840 --> 00:01:52,829 Pero imos realizar este baixo o presuposto que está a funcionar para todos. 42 00:01:52,829 --> 00:01:55,620 CONNOR HARRIS: E se non pode obter LillyPond para traballar, non é gran cousa. 43 00:01:55,620 --> 00:02:00,139 Non hai ningunha compilación en directo que estarán implicados, polo menos no meu fin. 44 00:02:00,139 --> 00:02:02,930 STEPHEN Krewson: Haskell e LillyPond debe ambos teñen instaladores. 45 00:02:02,930 --> 00:02:08,497 Euterpea é baixo como un paquete, así por diante e así por diante. 46 00:02:08,497 --> 00:02:10,080 Entón, estamos a falar de música de ordenador. 47 00:02:10,080 --> 00:02:12,990 E este é só un moi vista de 50.000 pés. 48 00:02:12,990 --> 00:02:15,700 Hai algúns aspectos diferentes do mesmo. 49 00:02:15,700 --> 00:02:18,120 E iso é duro e é indo a obscurecer algún detalle. 50 00:02:18,120 --> 00:02:22,090 Pero poderiamos pensar en algo como composición algorítmica, 51 00:02:22,090 --> 00:02:24,920 utilizando algoritmos, usar o código, para xerar 52 00:02:24,920 --> 00:02:30,280 algún tipo de-- quizais un auto-similar secuencia de notas, ou que notas 53 00:02:30,280 --> 00:02:33,330 baixo restrición. 54 00:02:33,330 --> 00:02:35,350 E entón os podería ser executado ou interpretada 55 00:02:35,350 --> 00:02:38,390 con instrumentos analóxicos ou algo así. 56 00:02:38,390 --> 00:02:42,010 Pero a composición era facer a través de algoritmos. 57 00:02:42,010 --> 00:02:45,120 >> Pero, claro, quizais a área de música de ordenador ou de música dixital 58 00:02:45,120 --> 00:02:48,870 estamos máis familiarizados co é dixital síntese de son ou de mostraxe dixital 59 00:02:48,870 --> 00:02:51,160 e gravación dixital. 60 00:02:51,160 --> 00:02:55,650 Unha morea de instrumentos dixitais son facer a través de mostraxe dixital. 61 00:02:55,650 --> 00:03:00,110 En realidade, nós estaremos usando un dos que están no a forma dunha biblioteca de fontes de son máis tarde. 62 00:03:00,110 --> 00:03:02,850 >> Pero tamén hai algo chamado síntese dixital que saíu 63 00:03:02,850 --> 00:03:08,650 dos anos 70 e os anos 80 con 'final Yamaha e John Chowning en Stanford 64 00:03:08,650 --> 00:03:11,990 facendo síntese FM ou Síntese de modulación de frecuencia, 65 00:03:11,990 --> 00:03:15,100 onde tivo unha transporte sinal e un sinal de modulación 66 00:03:15,100 --> 00:03:18,270 tanto no espectro de audio. 67 00:03:18,270 --> 00:03:22,570 Pero o que estamos enfocados en hoxe é algo chamado MIDI, 68 00:03:22,570 --> 00:03:25,040 e, por suposto, composición algorítmica. 69 00:03:25,040 --> 00:03:30,940 >> Non estamos indo a facer instrumentos, pero imos no canto de facer música, 70 00:03:30,940 --> 00:03:33,940 e, a continuación, que vai interpretar polo que algúns instrumentos 71 00:03:33,940 --> 00:03:38,300 son conformidade co estándar xeral MIDI. 72 00:03:38,300 --> 00:03:40,830 Entón o que é MIDI? 73 00:03:40,830 --> 00:03:45,550 Non vou ser moi fondo nel, pero MIDI é un protocolo de transferencia de datos. 74 00:03:45,550 --> 00:03:49,250 É unha especie de un guía fronte diferentes empresas e industrias 75 00:03:49,250 --> 00:03:52,250 para a organización de sons ou parches. 76 00:03:52,250 --> 00:03:54,170 Entón, imos ver que hai un estándar MIDI 77 00:03:54,170 --> 00:03:57,500 para todos os distintos percusión sons e recomendacións MIDI 78 00:03:57,500 --> 00:04:01,360 para todos os distintos tipos de sintetizadores ou distintos tipos de todo o instrumento 79 00:04:01,360 --> 00:04:03,650 grupos nunha orquestra, din. 80 00:04:03,650 --> 00:04:08,916 >> Probablemente está familiarizado con 0 a 127 mensaxes MIDI. 81 00:04:08,916 --> 00:04:12,920 Un sinal MIDI é tipicamente un bit indicando 82 00:04:12,920 --> 00:04:16,130 se é un de datos ou un paquete de estado, e despois hai 83 00:04:16,130 --> 00:04:18,589 sete bits dun sinal. 84 00:04:18,589 --> 00:04:21,430 E estes poden controlar todo dende o volume 85 00:04:21,430 --> 00:04:25,330 á presión ou acción nunha chave especial 86 00:04:25,330 --> 00:04:29,400 se está executando cun MIDI controlador, así como, por suposto, 87 00:04:29,400 --> 00:04:31,250 notas. 88 00:04:31,250 --> 00:04:33,450 E, por suposto, ten MIDI foi moi útil, 89 00:04:33,450 --> 00:04:37,550 porque é un xeito de arame xuntos ou en cadea 90 00:04:37,550 --> 00:04:41,570 unha morea de dispositivos hardware MIDI. 91 00:04:41,570 --> 00:04:44,050 Teño sete ou oito de volta na miña casa. 92 00:04:44,050 --> 00:04:46,610 Está realmente complicado, pero é realmente poderoso. 93 00:04:46,610 --> 00:04:47,460 E é realmente vello. 94 00:04:47,460 --> 00:04:51,117 É o inicio dos anos 80, e é moi bo e pequeno. 95 00:04:51,117 --> 00:04:51,950 CONNOR HARRIS: Yeah. 96 00:04:51,950 --> 00:04:54,230 Todo o clásico Nintendo videoxogos sería probablemente 97 00:04:54,230 --> 00:04:56,088 ten ficheiros MIDI para a música, por exemplo. 98 00:04:56,088 --> 00:04:59,550 99 00:04:59,550 --> 00:05:01,740 >> STEPHEN Krewson: Aquí está o exemplo MIDI xeral, 100 00:05:01,740 --> 00:05:06,520 mostrando MIDI como unha especie de protocolo xeral. 101 00:05:06,520 --> 00:05:13,280 E eu creo que podemos pensar no diferenza entre a especificación 102 00:05:13,280 --> 00:05:17,830 que debe haber algo estes sons de instrumentos eo real 103 00:05:17,830 --> 00:05:21,740 realización destes instrumentos sons nunha fonte de son ou un MIDI especial 104 00:05:21,740 --> 00:05:25,740 sintetizador como a diferenza entre quizais un typeface-- que di: 105 00:05:25,740 --> 00:05:30,350 En xeral, este é o deseño de Deste xeito especial para representar 106 00:05:30,350 --> 00:05:35,907 de caracteres e unha fonte específica que ten un tamaño e timbre específico, 107 00:05:35,907 --> 00:05:37,240 e non hai realización as-- 108 00:05:37,240 --> 00:05:39,156 >> CONNOR HARRIS: Talvez un mellor comparación sería 109 00:05:39,156 --> 00:05:43,430 ser o estándar Unicode says-- dá- un número para cada personaxe, e realmente 110 00:05:43,430 --> 00:05:46,830 todas as linguas do mundo, ou un amplo conxunto de scripts de linguaxe 111 00:05:46,830 --> 00:05:51,310 en todo o mundo, e, a continuación, son os rendido en algo gráfica 112 00:05:51,310 --> 00:05:53,710 por varios paquetes de fontes. 113 00:05:53,710 --> 00:05:56,630 E, por suposto, pode pensar MIDI como Unicode de son. 114 00:05:56,630 --> 00:06:03,250 E iso é só unha lista de-- un gran fluxo de eventos e instrumentos e outros enfeites, 115 00:06:03,250 --> 00:06:06,090 e ten que ter un separado programa, como un tipo de letra, 116 00:06:06,090 --> 00:06:08,537 para facer iso en algo que é audible. 117 00:06:08,537 --> 00:06:12,360 118 00:06:12,360 --> 00:06:13,780 >> STEPHEN Krewson: Entón, por que Haskell? 119 00:06:13,780 --> 00:06:19,110 Haskell é unha programación funcional lingua, moi avanzado, 120 00:06:19,110 --> 00:06:22,770 moi diferente de C, moi diferente do PHP. 121 00:06:22,770 --> 00:06:28,120 E veremos que hai unha facilidade de composición de función en Haskell 122 00:06:28,120 --> 00:06:37,640 que nos permitirá brisa través compondo ou escribindo a, transcribir, 123 00:06:37,640 --> 00:06:42,160 algo así como Frere Jacques, esta canción simple que 124 00:06:42,160 --> 00:06:46,815 ten unha morea de pezas en que son propio similar ou repetir. 125 00:06:46,815 --> 00:06:49,740 126 00:06:49,740 --> 00:06:53,250 Entón, que vai ser algúns dos a motivación para iso 127 00:06:53,250 --> 00:06:59,400 Utilizamos Haskell, en que funcións son cidadáns de primeira clase. 128 00:06:59,400 --> 00:07:01,120 >> E eu quería estender iso un pouco. 129 00:07:01,120 --> 00:07:08,800 É un pouco doado anotar Frere Jacques en Haskell. 130 00:07:08,800 --> 00:07:12,100 Pero o que se quixésemos engadir unha parte da batería para el? 131 00:07:12,100 --> 00:07:17,320 O que se quería para tentar facer algo así como un tambor Roland 808 ou 909 132 00:07:17,320 --> 00:07:20,970 máquina en que ten preto de 16 diferentes etapas? 133 00:07:20,970 --> 00:07:24,590 Normalmente, estas son pensou en notas como 16o. 134 00:07:24,590 --> 00:07:28,640 E pode controlar o mundial tempo, e podes escoller 135 00:07:28,640 --> 00:07:34,620 unha morea de diferentes partes de percusión de bombo, unha salva de palmas, diferentes trampas, 136 00:07:34,620 --> 00:07:37,540 abertas e pechadas sombreiros altos sobre este tipo de canles, 137 00:07:37,540 --> 00:07:41,600 e entón pode ou EQ axustar o seu volume. 138 00:07:41,600 --> 00:07:45,290 >> E nós imos ver un xeito agradable en Haskell de representar esta etapa 139 00:07:45,290 --> 00:07:48,810 sequenciador con toda a moitas cousas legais en Haskell 140 00:07:48,810 --> 00:07:53,100 o que podemos facer coa xeración listas e máis listas de filtrado, 141 00:07:53,100 --> 00:07:56,060 cartografía sobre listas, cartografía funcións máis listas. 142 00:07:56,060 --> 00:07:59,530 143 00:07:59,530 --> 00:08:00,760 E un rápido petición de desculpas. 144 00:08:00,760 --> 00:08:05,300 Este é un moi superficial e esbozo excesivamente rápida 145 00:08:05,300 --> 00:08:07,620 dalgúns dos aspectos de Haskell e Euterpea, 146 00:08:07,620 --> 00:08:11,760 que é un dominio específico linguaxe embutida escrito 147 00:08:11,760 --> 00:08:14,970 en Haskell para tipos musicais. 148 00:08:14,970 --> 00:08:17,350 Entón, por favor, comprobe o código en liña. 149 00:08:17,350 --> 00:08:22,404 Lume ata GHCI, que é o Glasgow Haskell Compiler intérprete. 150 00:08:22,404 --> 00:08:24,320 E eu vou estar facendo algúns isto un pouco 151 00:08:24,320 --> 00:08:25,880 para que poida ver como está feito. 152 00:08:25,880 --> 00:08:31,021 >> E iso permite que prema en con as-- a sintaxe é colon e entón 153 00:08:31,021 --> 00:08:31,520 o comando. 154 00:08:31,520 --> 00:08:33,510 Pode premer arquivos. 155 00:08:33,510 --> 00:08:36,840 Podes usar browse neses ficheiros para ver todas as funcións que 156 00:08:36,840 --> 00:08:39,169 existir nun módulo particular. 157 00:08:39,169 --> 00:08:43,850 E entón, como veremos, tipos e tipo clases son tan importantes en Haskell, 158 00:08:43,850 --> 00:08:48,850 así sempre pode check-- especialmente se está a traballar nunha nova DSCL 159 00:08:48,850 --> 00:08:51,600 como este, que é un tipo de música? 160 00:08:51,600 --> 00:08:55,114 Sei sobre os modos de números tipo traballar en Haskell, 161 00:08:55,114 --> 00:08:56,530 pero eu non sei moito sobre música. 162 00:08:56,530 --> 00:09:01,280 Pero pode explotar a forma como son definida mediante o comando t ou tipo 163 00:09:01,280 --> 00:09:04,577 e, a continuación, chamar nun determinado función ou un obxecto de datos. 164 00:09:04,577 --> 00:09:05,410 CONNOR HARRIS: Yeah. 165 00:09:05,410 --> 00:09:09,820 Se penso C e Clang foi hardass sobre tipos, 166 00:09:09,820 --> 00:09:11,230 non ten idea sobre Haskell. 167 00:09:11,230 --> 00:09:14,230 O bo Haskell é que se pode obter o seu código para compilar 168 00:09:14,230 --> 00:09:16,790 e comprobacións de tipo Haskell, probablemente está certo, 169 00:09:16,790 --> 00:09:18,675 xa que o sistema de tipo é tan rigoroso. 170 00:09:18,675 --> 00:09:20,090 >> STEPHEN Krewson: Yeah. 171 00:09:20,090 --> 00:09:21,980 Entón, eu só quero ir through-- e de novo, 172 00:09:21,980 --> 00:09:27,160 este non está facendo iso justice-- algunhas das as características de Haskell que, polo menos 173 00:09:27,160 --> 00:09:31,780 a creators-- e foi creado a finais de 1980 por un grupo de persoas, 174 00:09:31,780 --> 00:09:34,610 unha comisión de preto de 20 pessoas-- penso que eran importantes. 175 00:09:34,610 --> 00:09:36,850 E o primeiro que eles listados en un documento que 176 00:09:36,850 --> 00:09:41,890 describiu a xénese de Haskell nos primeiros 20 anos ou máis 177 00:09:41,890 --> 00:09:43,390 é que era preguiceiro. 178 00:09:43,390 --> 00:09:44,990 Entón o que significa isto? 179 00:09:44,990 --> 00:09:49,860 >> Ben, iso significa que cando temos algún tipo de expresión, necesitamos valora-lo. 180 00:09:49,860 --> 00:09:54,390 E Haskell fai iso dunha chamada por medio necesidade ou dun xeito que non sexa estrita. 181 00:09:54,390 --> 00:09:57,250 É dicir, se temos unha morea de compoñentes da nosa expresión, 182 00:09:57,250 --> 00:10:00,660 nós tentar atrasar a avaliación deses subcompoñentes 183 00:10:00,660 --> 00:10:05,300 ata o último minute-- absoluta é dicir, ata nós realmente necesitamos deles. 184 00:10:05,300 --> 00:10:08,480 >> Polo tanto, este means-- que é moi legal, especialmente 185 00:10:08,480 --> 00:10:13,200 se estamos a pensar sobre a abstracción dun secuenciador paso a paso musical. 186 00:10:13,200 --> 00:10:16,740 Liga-lo, e comeza executando un paso sequence-- 187 00:10:16,740 --> 00:10:20,010 Se nunca traballou cun tambor machine-- e el só vai para sempre. 188 00:10:20,010 --> 00:10:24,650 Por iso, sería moi bo se nós podería emular que en Haskell. 189 00:10:24,650 --> 00:10:31,040 E podemos facelo con infinita valores, en listas infinitas particulares. 190 00:10:31,040 --> 00:10:35,860 É moi fácil de escribir un lista infinita en Haskell. 191 00:10:35,860 --> 00:10:39,230 Pode simplemente usar a sintaxe abaixo aquí, onde se ve de 1 a 3, 192 00:10:39,230 --> 00:10:42,440 eliminar o 3 1 punto a punto, e que é unha lista infinita 193 00:10:42,440 --> 00:10:46,960 de todos os números naturais estendéndose en tanto como pode imaxinar. 194 00:10:46,960 --> 00:10:49,925 >> Quero presentar unha concepto de pregos de inmediato. 195 00:10:49,925 --> 00:10:51,800 E, de novo, o propósito Este seminario non é 196 00:10:51,800 --> 00:10:55,770 para aprender sobre dobras en Haskell ou funcións de orde superior. 197 00:10:55,770 --> 00:10:59,640 Pero eu só quero presentalo ao dar un sentido teño como estraño 198 00:10:59,640 --> 00:11:03,700 Haskell é e como é poderoso. 199 00:11:03,700 --> 00:11:08,000 E, en particular, imos ser-- cando facemos as nosas distintas partes de batería, 200 00:11:08,000 --> 00:11:12,790 estaremos manipulando listas de números, dobrando os uns sobre os outros. 201 00:11:12,790 --> 00:11:17,290 E para facelo, imos estar usando mapas e dobras. 202 00:11:17,290 --> 00:11:21,770 >> Hai un asociativos á dereita dobrar, o que é esta unha dereita 203 00:11:21,770 --> 00:11:26,990 aqui-- 1 menos a cantidade, 2 menos a cantidade, 3 menos 0. 204 00:11:26,990 --> 00:11:29,170 E a sintaxe para unha veces, dá unha dobra 205 00:11:29,170 --> 00:11:34,680 un valor base e, a continuación, un operation-- Neste caso, a suma ou a resta. 206 00:11:34,680 --> 00:11:36,280 Eu mostre ambos os casos. 207 00:11:36,280 --> 00:11:41,760 E despois hai un acumulador que acumula ao longo do toda a lista, 208 00:11:41,760 --> 00:11:46,330 aplicación que ademais de operador ou menos, e, a continuación, acumulando-lo. 209 00:11:46,330 --> 00:11:52,680 Polo tanto, este será as-- se foi chamado con R dobra máis de 0, comezando con 0, 210 00:11:52,680 --> 00:11:54,720 teriamos entón resumir todo os números nesa lista. 211 00:11:54,720 --> 00:11:57,134 E iso é unha lista 1-3. 212 00:11:57,134 --> 00:12:00,050 CONNOR HARRIS: Entón, dito doutro xeito, dobra r recibe tres argumentos. 213 00:12:00,050 --> 00:12:02,540 Hai unha función que en si leva dous argumentos, 214 00:12:02,540 --> 00:12:05,400 entón hai un valor de inicio, e hai unha lista de valores. 215 00:12:05,400 --> 00:12:08,570 E o que fai é tomar valor Start, primeiro valor, 216 00:12:08,570 --> 00:12:09,850 poñer-los para a función. 217 00:12:09,850 --> 00:12:11,607 Que saír, tomar que, de alimentación que 218 00:12:11,607 --> 00:12:13,940 para a función do segundo valor, o que saír, 219 00:12:13,940 --> 00:12:16,690 levar isto, alimente esta ao función do terceiro valor. 220 00:12:16,690 --> 00:12:18,740 E entón, se vai para abaixo esta lista enteira deste xeito, 221 00:12:18,740 --> 00:12:22,970 está indo para obter finalmente algún valor singular que é 222 00:12:22,970 --> 00:12:25,720 do mesmo tipo que se comezou con e do mesmo tipo 223 00:12:25,720 --> 00:12:29,147 como as cousas da lista e, a continuación que é o resultado de retorno de dobra R. 224 00:12:29,147 --> 00:12:31,980 STEPHEN Krewson: Entón, en particular, estes son as funcións de orde superior, 225 00:12:31,980 --> 00:12:34,460 porque están tomando outro función como un dos argumentos. 226 00:12:34,460 --> 00:12:34,770 >> CONNOR HARRIS: Yeah. 227 00:12:34,770 --> 00:12:37,820 Se xa usou algúns outros languages-- Sei R, [inaudível] 228 00:12:37,820 --> 00:12:41,510 lingua ten iso, chamado Reducir. 229 00:12:41,510 --> 00:12:45,460 Pode ter funcións similares noutros idiomas, só chamado 230 00:12:45,460 --> 00:12:48,160 cousas distintas. 231 00:12:48,160 --> 00:12:50,680 >> STEPHEN Krewson: E o que é agradable sobre dobra R 232 00:12:50,680 --> 00:12:53,880 neste caso é que dobra R pode traballar con listas infinitas. 233 00:12:53,880 --> 00:12:59,490 Polo tanto, neste fondo, este P5 está xerando as notas que 234 00:12:59,490 --> 00:13:03,120 son activados no secuenciador paso para algunha parte da batería, a quinta parte da batería, 235 00:13:03,120 --> 00:13:05,480 e é posible que unha conga tambor ou algo así. 236 00:13:05,480 --> 00:13:09,719 E este é un deliberadamente obtuso xeito de escribir isto, 237 00:13:09,719 --> 00:13:11,510 pero é divertido, porque el demostra unha gran cantidade 238 00:13:11,510 --> 00:13:14,460 de cousas sobre Haskell e Euterpea. 239 00:13:14,460 --> 00:13:20,650 >> Entón dobra R deste colonos é colon-- só un operador que empuxa as cousas 240 00:13:20,650 --> 00:13:25,700 xuntos nun lista-- chamado nun baleiro lista, que non é máis que os corchetes baleiros. 241 00:13:25,700 --> 00:13:28,250 E eu estou chamando que nesta lista infinita. 242 00:13:28,250 --> 00:13:31,570 Isto é, de feito, dúas listas sumados ata aquí. 243 00:13:31,570 --> 00:13:37,150 A lista unha coma 6 dot punto é 1, 6, 11, 16. 244 00:13:37,150 --> 00:13:39,750 Así Haskell-- en só algúns caracteres, 245 00:13:39,750 --> 00:13:42,420 pode xerar o enteiro secuencia de números 246 00:13:42,420 --> 00:13:46,240 que son cinco números ademais estirando o infinito. 247 00:13:46,240 --> 00:13:49,860 E que a preceder este pequeno curto lista-- 248 00:13:49,860 --> 00:13:54,370 3, 8, 21-- só para amosar-lle como pode concatenar listas. 249 00:13:54,370 --> 00:13:55,790 >> E entón eu teño dobrado sobre si mesmo. 250 00:13:55,790 --> 00:14:01,510 E iso acaba sendo só un tipo de operación de identidade, pero é infinito. 251 00:14:01,510 --> 00:14:06,070 E dobre R pode facelo, porque preguizosamente avalía, como no exemplo anterior. 252 00:14:06,070 --> 00:14:10,582 Se temos un 1 e un 2 e 3, podemos só entre parénteses fóra todo o demais. 253 00:14:10,582 --> 00:14:12,290 Isto non vai funcionar para menos ou máis, pero 254 00:14:12,290 --> 00:14:17,760 ha traballar para iso colon operación de identidade na lista. 255 00:14:17,760 --> 00:14:24,620 >> Entón, como podemos utilizar practicamente que se nós ten un infinitamente longa lista de cousas? 256 00:14:24,620 --> 00:14:26,500 Ben, Haskell ofrece unha morea de funcións no pasado: 257 00:14:26,500 --> 00:14:29,450 e ollar máis para estas en seu propio tempo-- como tomar 258 00:14:29,450 --> 00:14:32,200 que di: OK, estamos xerar esta lista infinita, 259 00:14:32,200 --> 00:14:35,950 pero nós estamos só vai levar moito número de la E neste case-- 260 00:14:35,950 --> 00:14:38,410 imos ver iso máis tarde en nosa code-- drum machine 261 00:14:38,410 --> 00:14:43,740 GM é só unha especie de mundo variable ao número de pasos 262 00:14:43,740 --> 00:14:44,610 no secuenciador. 263 00:14:44,610 --> 00:14:47,630 Nas máquinas de rolo-in I mostrou ti, que é normalmente 16, 264 00:14:47,630 --> 00:14:51,475 pero eu non a aplicaron con 32. 265 00:14:51,475 --> 00:14:54,470 Realmente non importa. 266 00:14:54,470 --> 00:15:00,230 >> Haskell tamén é puro, polo que ten forte tipagem estática que Connor aludido. 267 00:15:00,230 --> 00:15:03,220 Así, son funcións matemático no sense-- 268 00:15:03,220 --> 00:15:06,600 son máis matemática que está garantido 269 00:15:06,600 --> 00:15:11,530 para non acceder ou cambiar calquera tipo de variable ou realizar entrada ou saída. 270 00:15:11,530 --> 00:15:14,420 Entón se ten unha función, é determinista. 271 00:15:14,420 --> 00:15:17,400 El sempre volverá a mesma valor no estado do programa 272 00:15:17,400 --> 00:15:19,310 ou permanecer o mesmo. 273 00:15:19,310 --> 00:15:22,940 Existen, por suposto, excepcións monádicos para iso, pero iso está fóra do noso alcance. 274 00:15:22,940 --> 00:15:23,900 >> CONNOR HARRIS: Yeah. 275 00:15:23,900 --> 00:15:26,946 O que isto significa, con todo, está aí son algúns importantes [inaudível] 276 00:15:26,946 --> 00:15:27,820 consecuencias desta. 277 00:15:27,820 --> 00:15:30,940 Unha delas é que é moi fácil de paralelizar programas Haskell. 278 00:15:30,940 --> 00:15:32,773 Porque se ten, dicir, unha función de que 279 00:15:32,773 --> 00:15:36,064 necesita operar sobre un millón de valores, se vostede sabe que a función sempre 280 00:15:36,064 --> 00:15:39,280 dar o mesmo valor que alimenta nun determinado value-- 281 00:15:39,280 --> 00:15:43,055 se é [inaudível] f 1, f de 2, despois de 3 ou f f de 1 whatnot-- 282 00:15:43,055 --> 00:15:45,180 non vai escribir para un ficheiro ou facer algo 283 00:15:45,180 --> 00:15:46,850 que pode cambiar o valor de f2. 284 00:15:46,850 --> 00:15:50,220 Pode simplemente dividir esa función para unha millóns de máquinas diferentes, ou un millón 285 00:15:50,220 --> 00:15:54,720 diferentes temas ou calquera outra cousa, obter as respostas de volta, 286 00:15:54,720 --> 00:15:56,900 obter todos os valores de retorno cara atrás, e, a continuación, é iso. 287 00:15:56,900 --> 00:15:59,780 Entón, moi fácil de paralelizar cousas. 288 00:15:59,780 --> 00:16:03,140 >> A desvantaxe é que a entrada e saída especialmente 289 00:16:03,140 --> 00:16:05,720 encaixar no sistema de tipos de formas moi complicadas. 290 00:16:05,720 --> 00:16:09,010 Non imos entrar niso agora, pero eu Estimula-vos a ollar para algúns recursos 291 00:16:09,010 --> 00:16:11,175 en liña, se quere saber máis sobre iso. 292 00:16:11,175 --> 00:16:13,960 293 00:16:13,960 --> 00:16:16,550 >> STEPHEN Krewson: Entón, e este tipo classes-- 294 00:16:16,550 --> 00:16:21,610 as clases de tipo foi-- foron inventados para resolver 295 00:16:21,610 --> 00:16:24,160 un problema de sobrecarga de operadores. 296 00:16:24,160 --> 00:16:27,590 Entón, nós queriamos ter igualdade entre diferentes tipos de cousas. 297 00:16:27,590 --> 00:16:31,040 Por suposto, poderiamos pensar de-- igualdade entre tipos numéricos 298 00:16:31,040 --> 00:16:34,720 É moi fácil pensar, pero que sobre a igualdade entre listas? 299 00:16:34,720 --> 00:16:37,610 E sobre a igualdade entre árbore de estruturas de datos perna? 300 00:16:37,610 --> 00:16:43,130 E todo isto é posible en Haskell porque de clases de tipo. 301 00:16:43,130 --> 00:16:48,000 >> Entón, se define unha certa type-- datos e aquí, estes son pasos musicais. 302 00:16:48,000 --> 00:16:50,960 Estamos finalmente empezando un pouco de música de ordenador. 303 00:16:50,960 --> 00:16:57,420 Polo tanto, temos C, C sharp, e así por diante e así por diante. 304 00:16:57,420 --> 00:17:01,080 Elas pertencen a un grupo de distintas clases de tipo. 305 00:17:01,080 --> 00:17:03,510 EQ-- eles pertencen á clase tipo de EQ. 306 00:17:03,510 --> 00:17:06,780 Isto significa que soportan operacións de igualdade. 307 00:17:06,780 --> 00:17:12,650 Así, pode avaliar un secuencia de primitivas musicais 308 00:17:12,650 --> 00:17:15,400 é o mesmo que un diferente. 309 00:17:15,400 --> 00:17:17,280 >> Eles pertencen á clase ordinal. 310 00:17:17,280 --> 00:17:19,479 Isto significa que hai unha ordenación a estes. 311 00:17:19,479 --> 00:17:27,670 D vén despois de C. C sharp C vén despois, ben. 312 00:17:27,670 --> 00:17:29,840 Eles pertencen á clase amosar, o que significa que poden 313 00:17:29,840 --> 00:17:33,000 ser impreso para unha consola ou terminal. 314 00:17:33,000 --> 00:17:36,090 Eles pertencen á clase enumerados, que 315 00:17:36,090 --> 00:17:39,770 significa que, aínda estes son personaxes, 316 00:17:39,770 --> 00:17:45,340 eles teñen un número subxacente representación comezando a 0 317 00:17:45,340 --> 00:17:48,960 e saíndo través con todo moitas cousas están aquí, 20 ou así, 318 00:17:48,960 --> 00:17:51,770 ou 30 ou 40, quizais. 319 00:17:51,770 --> 00:17:54,259 >> CONNOR HARRIS: E cando temos un tipo de datos 320 00:17:54,259 --> 00:17:57,050 que derives-- con esa contrasinal "deriving--" un certo tipo de clase, 321 00:17:57,050 --> 00:18:01,160 isto significa que o compilador intentará para construír algo automaticamente. 322 00:18:01,160 --> 00:18:05,120 Entón, talvez vai querer definir unha calidade distinta. 323 00:18:05,120 --> 00:18:09,450 Vai querer definir C sharp como igual a D plana, por exemplo. 324 00:18:09,450 --> 00:18:11,560 Con esta construción aquí, eu non creo que C sharp 325 00:18:11,560 --> 00:18:14,940 e D plana pode ser igual, porque o compilador ha automaticamente 326 00:18:14,940 --> 00:18:19,670 dicir que cada valor diferente posible é distinto de todos os outros. 327 00:18:19,670 --> 00:18:22,930 >> Por iso, é posible substituír as implementacións estándar 328 00:18:22,930 --> 00:18:25,730 deste tipo de clases. 329 00:18:25,730 --> 00:18:28,640 Unha vez máis, ollar para a referencia se quere saber máis sobre iso. 330 00:18:28,640 --> 00:18:31,767 331 00:18:31,767 --> 00:18:33,600 STEPHEN Krewson: E aquí, en realidade, que vai 332 00:18:33,600 --> 00:18:36,930 ser útil para cando código máis tarde. 333 00:18:36,930 --> 00:18:42,150 Vemos algúns dos operadores infixas para a composición Secuencial, 334 00:18:42,150 --> 00:18:46,570 composición paralela, e así por diante, estes aspectos positivos e signos de igual 335 00:18:46,570 --> 00:18:48,620 rodeado por dous puntos. 336 00:18:48,620 --> 00:18:53,330 Isto significa que podemos xogar eses diferentes primitivas musicais un despois do outro. 337 00:18:53,330 --> 00:18:54,590 Isto é composición secuencial. 338 00:18:54,590 --> 00:18:57,170 >> Ou podemos reproducir-los en paralelo á vez. 339 00:18:57,170 --> 00:19:05,100 Entón eu podo ter un valor musical, e, a continuación, o que equivale a dous puntos e, 340 00:19:05,100 --> 00:19:09,669 infix operador composición paralela, e reproducir-los como unha especie de corda. 341 00:19:09,669 --> 00:19:11,460 E nós estamos indo a usar iso cando nós quedamos 342 00:19:11,460 --> 00:19:15,080 nosa parte da batería coa nosa musiquinha Frere Jacques 343 00:19:15,080 --> 00:19:19,460 xogar estas dúas secuencias de valores musicais á vez. 344 00:19:19,460 --> 00:19:24,520 345 00:19:24,520 --> 00:19:29,250 >> Currying Curry é-- foi pasado Nome do Haskell Curry, que 346 00:19:29,250 --> 00:19:31,850 a imaxe Haskell é nomeado despois. 347 00:19:31,850 --> 00:19:34,330 E iso nos permite unha agradable elegancia cando estamos 348 00:19:34,330 --> 00:19:36,880 escribindo todos estes diferentes funcións ou filtros que estamos 349 00:19:36,880 --> 00:19:39,330 será cartografía sobre as nosas listas. 350 00:19:39,330 --> 00:19:42,810 A función de dous arguments-- f x e y-- 351 00:19:42,810 --> 00:19:46,630 pode ser representada como f x para y aplicada. 352 00:19:46,630 --> 00:19:49,800 Polo tanto, é unha función de un argumento que retorna 353 00:19:49,800 --> 00:19:51,240 outra función dun argumento. 354 00:19:51,240 --> 00:19:56,962 Entón, isto significa que podemos mapear unha f función de x lista de y rematou. 355 00:19:56,962 --> 00:19:58,920 CONNOR HARRIS: Quere dar un exemplo disto? 356 00:19:58,920 --> 00:19:59,836 STEPHEN Krewson: Yeah. 357 00:19:59,836 --> 00:20:05,390 Eu teño un exemplo ben aquí de algunhas das cousas que imos escribir. 358 00:20:05,390 --> 00:20:10,500 Entón replicar 2-- ben, replicar tomará 359 00:20:10,500 --> 00:20:13,040 un valor que é cantas veces para replicar algo, 360 00:20:13,040 --> 00:20:16,690 e entón vai levar un value-- xeralmente unha lista ou algo así. 361 00:20:16,690 --> 00:20:23,450 Entón, aquí, estamos cartografía replicar 2 sobre a outra lista. 362 00:20:23,450 --> 00:20:27,440 >> Entón, se nós mapear replicar 2, replicar aplicar 2 363 00:20:27,440 --> 00:20:31,890 para o primeiro elemento e esta lista-- estas son as listas de phrases-- musical 364 00:20:31,890 --> 00:20:37,650 xerará dous de "vostede sleeping--" entón está durmindo, está a durmir. 365 00:20:37,650 --> 00:20:40,040 Polo tanto, agora temos dous. 366 00:20:40,040 --> 00:20:42,570 Pero replicar leva dous argumentos, senón porque somos 367 00:20:42,570 --> 00:20:47,100 currying e, a continuación, cartografía, podemos representar repetición 2 368 00:20:47,100 --> 00:20:52,310 como sendo devolto como unha función de un argument-- só replicar dúas veces. 369 00:20:52,310 --> 00:20:57,010 E entón estamos aplicando que cada elemento da lista de frases. 370 00:20:57,010 --> 00:21:01,900 >> E é unha concatenación Haskell operación para aplanar unha lista. 371 00:21:01,900 --> 00:21:04,400 Porque replicar 2 vontade producir unha lista de listas. 372 00:21:04,400 --> 00:21:06,660 E este é esa forma intermedia aquí. 373 00:21:06,660 --> 00:21:10,365 E entón podemos concat ou esmagar que dúas veces. 374 00:21:10,365 --> 00:21:12,240 CONNOR HARRIS: A máis simple exemplo currying, 375 00:21:12,240 --> 00:21:15,323 se imaxinar como-- f é só un función de multiplicación que leva dous 376 00:21:15,323 --> 00:21:16,840 argumentos e devolve o seu produto. 377 00:21:16,840 --> 00:21:19,320 Entón, se ten unha f 4 5, é 20. 378 00:21:19,320 --> 00:21:22,670 Pero pode pensar niso como Também-- ten unha función f 4 379 00:21:22,670 --> 00:21:25,560 que leva un argumento e devolve catro veces este argument-- só 380 00:21:25,560 --> 00:21:27,870 aplicación parcial que só un argumento 4. 381 00:21:27,870 --> 00:21:31,182 E se alimento-f de 4 5, que lle dará 20. 382 00:21:31,182 --> 00:21:32,890 E iso é unha simple exemplo currying. 383 00:21:32,890 --> 00:21:34,473 Xeralmente é un dos libros de texto. 384 00:21:34,473 --> 00:21:38,860 385 00:21:38,860 --> 00:21:42,110 >> STEPHEN Krewson: Lambda expresións ou funcións anónimas 386 00:21:42,110 --> 00:21:47,330 son outra marca rexistrada Haskell. 387 00:21:47,330 --> 00:21:51,242 Entón, se temos de preparar unha pouco replicar vida función, 388 00:21:51,242 --> 00:21:52,950 pero din que non é en a biblioteca estándar, 389 00:21:52,950 --> 00:21:56,150 podemos utilizar unha sintaxe semellante á que segue. 390 00:21:56,150 --> 00:21:58,730 E nós imos brisa sobre iso. 391 00:21:58,730 --> 00:22:02,160 Unha cousa que vai ver unha chea de na drum machine é que estamos a facer chamadas 392 00:22:02,160 --> 00:22:05,790 a algo chamado filtrar, que, como antes, 393 00:22:05,790 --> 00:22:08,185 é un mapeamento dunha función sobre unha lista, pero é 394 00:22:08,185 --> 00:22:10,260 un mapeamento dunha función booleana. 395 00:22:10,260 --> 00:22:13,390 >> Polo tanto, temos aquí un exemplo dun un xeito anónimo 396 00:22:13,390 --> 00:22:19,150 función booleana definida que leva só valores parella. 397 00:22:19,150 --> 00:22:22,990 Esta non é a rigor unha función anónima. 398 00:22:22,990 --> 00:22:25,850 Pero é definir con que a sintaxe para a brevidade, 399 00:22:25,850 --> 00:22:28,007 e iso só leva x módulo n-- 400 00:22:28,007 --> 00:22:28,840 CONNOR HARRIS: Yeah. 401 00:22:28,840 --> 00:22:31,330 Entón F é unha función de dous argumentos n e p 402 00:22:31,330 --> 00:22:35,440 que retorna unha función que é propia unha función dun argumento, é dicir, x. 403 00:22:35,440 --> 00:22:38,815 404 00:22:38,815 --> 00:22:40,690 STEPHEN Krewson: I operadores infixas mencionados. 405 00:22:40,690 --> 00:22:42,642 Cales son os operadores infixas? 406 00:22:42,642 --> 00:22:45,710 Así, os operadores están a infixas forma normal que representan operacións, 407 00:22:45,710 --> 00:22:49,910 dicir, en mathematics-- 2 máis 2, en vez de o operador máis 408 00:22:49,910 --> 00:22:51,202 e, a continuación, dous argumentos 2 e 2. 409 00:22:51,202 --> 00:22:53,701 CONNOR HARRIS: Chama- inverter notación polaco, que é 410 00:22:53,701 --> 00:22:55,330 un termo que dubido que calquera de vostedes sabería. 411 00:22:55,330 --> 00:22:56,288 >> STEPHEN Krewson: Correcto. 412 00:22:56,288 --> 00:22:58,290 Inverter notación polaco ou prefixo. 413 00:22:58,290 --> 00:23:01,412 Pero Haskell decidiu usar operadores infixas. 414 00:23:01,412 --> 00:23:03,120 Entón, estas son algunhas das os personalizados que 415 00:23:03,120 --> 00:23:07,770 son definidos para a Euterpea DSCL en Haskell. 416 00:23:07,770 --> 00:23:10,730 Polo tanto, esta foi a composición secuencial. 417 00:23:10,730 --> 00:23:16,340 Esta foi a composición paralela, e este foi truncando composición paralela. 418 00:23:16,340 --> 00:23:18,710 E imos ter que coa nosa máquina de tambor, 419 00:23:18,710 --> 00:23:22,640 porque nós imos usar o último operador en que hai pouco tupla 420 00:23:22,640 --> 00:23:26,330 xogar a batería electrónica ao longo coa nosa música Frere Jacques. 421 00:23:26,330 --> 00:23:28,650 E a nosa máquina de tambor é será infinito. 422 00:23:28,650 --> 00:23:30,920 El só toca para sempre. 423 00:23:30,920 --> 00:23:32,692 Pero a música Frere Jacques non é. 424 00:23:32,692 --> 00:23:33,510 Non é que moito tempo. 425 00:23:33,510 --> 00:23:36,610 É só uns bares. 426 00:23:36,610 --> 00:23:43,030 Por iso, necesitamos deixar a máquina de tambor como Así que o valor musical menor vén 427 00:23:43,030 --> 00:23:43,700 a fin. 428 00:23:43,700 --> 00:23:46,980 E ese operador infixada é super útil con iso. 429 00:23:46,980 --> 00:23:50,090 >> E notación infix como este é o tipo de Niza, 430 00:23:50,090 --> 00:23:57,095 porque dicir que ten unha función como citas, o que dá a división enteira 431 00:23:57,095 --> 00:24:01,010 x algo else-- pesaroso, que debe ser un e b. 432 00:24:01,010 --> 00:24:04,740 Pode escribir-lo como un orzamento de b. 433 00:24:04,740 --> 00:24:09,670 Entón, se é elemento put-- outro exemplo diso. 434 00:24:09,670 --> 00:24:14,730 x elemento nalgunha lista, se pór Lo en Backticks, pode usalo. 435 00:24:14,730 --> 00:24:20,400 Aínda que non é un símbolo como máis ou menos ou tempos, 436 00:24:20,400 --> 00:24:24,630 pode usar o nome dunha función como que en Backticks 437 00:24:24,630 --> 00:24:27,045 como operador infixo, que é moi legal. 438 00:24:27,045 --> 00:24:29,670 CONNOR HARRIS: Unha vez máis, este é todo o azucre só sintáctica, realmente. 439 00:24:29,670 --> 00:24:32,310 Non afecta o núcleo da linguaxe. 440 00:24:32,310 --> 00:24:37,440 >> STEPHEN Krewson: Entón vemos aquí á última frase da nosa canción Frere Jacques, 441 00:24:37,440 --> 00:24:45,740 Xoguei uns acordes ou pequenos terzos, a través da composición paralela 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 Esta é outra forma de dicir algunha que temos que chegou a dicir só. 445 00:24:54,950 --> 00:24:59,986 Entón podes mapear funcións dunha discusión sobre listas. 446 00:24:59,986 --> 00:25:02,860 CONNOR HARRIS: Unha vez máis, as referencias para manuais introdutorios Haskell-- 447 00:25:02,860 --> 00:25:04,680 terá todo isto nel. 448 00:25:04,680 --> 00:25:07,790 >> STEPHEN Krewson: Entón aquí está un fermoso liña clave do sequenciador paso a paso 449 00:25:07,790 --> 00:25:12,820 imos dar un ollo a usar unha comprensión da lista. 450 00:25:12,820 --> 00:25:17,810 E vemos aquí é ese elemento na operadora fixa en citas atrás. 451 00:25:17,810 --> 00:25:23,030 Polo tanto, se X é un elemento dunha lista de X, entón imos chamar funcións perc. 452 00:25:23,030 --> 00:25:25,100 Entón perc é só unha función de percusión. 453 00:25:25,100 --> 00:25:30,200 Leva algún valor p que é parte do conxunto limitado de todo 454 00:25:30,200 --> 00:25:35,310 os distintos sons de percusión que vimos en un slide anterior, 455 00:25:35,310 --> 00:25:38,840 e, a continuación, el dá que duración de unha negra. 456 00:25:38,840 --> 00:25:43,190 El lle dá un qnr, e qnr é só un descanso nota dun cuarto. 457 00:25:43,190 --> 00:25:44,970 >> Polo tanto, este é construír algo agradable. 458 00:25:44,970 --> 00:25:52,110 Temos unha lista de elementos, e nós imos loop sobre algunha lista de un 459 00:25:52,110 --> 00:25:54,540 para o valor máximo do noso sequenciador paso a paso. 460 00:25:54,540 --> 00:25:58,290 E cando estamos nun i particular que lista de un para o valor máximo 461 00:25:58,290 --> 00:26:02,970 que i é membro desta conxunto creado nesta función, 462 00:26:02,970 --> 00:26:06,040 ben, entón podemos transformalo lo nunha nota percusión. 463 00:26:06,040 --> 00:26:10,960 Se non, nós só xogar un descanso, que É dicir, nós simplemente permanecer en silencio. 464 00:26:10,960 --> 00:26:16,050 E vemos aquí que, en esta sintaxe comprensión da lista, 465 00:26:16,050 --> 00:26:20,030 x é cuberto por este lista construído un 466 00:26:20,030 --> 00:26:22,462 para o tamaño global do secuenciador. 467 00:26:22,462 --> 00:26:23,295 CONNOR HARRIS: Yeah. 468 00:26:23,295 --> 00:26:26,340 A sintaxe básica para comprensións lista é 469 00:26:26,340 --> 00:26:30,810 soporte, que inclúen valor algunhas variables, bar, 470 00:26:30,810 --> 00:26:34,260 posibles valores das variables eles mesmos, o soporte pechados. 471 00:26:34,260 --> 00:26:38,545 E se ten feito definir notación constructor en calquera tipo de clase de matemáticas, 472 00:26:38,545 --> 00:26:45,999 pode configurar tal 2n en que n é ou que n é z. 473 00:26:45,999 --> 00:26:48,290 Similar coisa-- esta notación pretende ser suxerente 474 00:26:48,290 --> 00:26:49,630 de que notación matemática. 475 00:26:49,630 --> 00:26:51,880 STEPHEN Krewson: E pode aplicar varios predicados 476 00:26:51,880 --> 00:26:56,250 e varios filtros nunha lista comprensión, que é moi agradable. 477 00:26:56,250 --> 00:27:01,800 Alxébrica types-- non vai levar moito tempo aquí. 478 00:27:01,800 --> 00:27:04,840 Non é unha boa idea en Haskell ou un bo, noción obvia 479 00:27:04,840 --> 00:27:10,720 de como sacar, digamos, un estándar parámetro para unha función ou algo así. 480 00:27:10,720 --> 00:27:13,370 En Python, iso é moi fácil. 481 00:27:13,370 --> 00:27:18,460 Pode só dicir con igual en a declaración da función, 482 00:27:18,460 --> 00:27:21,420 un valor por defecto en caso nada se inclúe. 483 00:27:21,420 --> 00:27:27,010 >> En Haskell, podería talvez usar quizais o tipo cadra, 484 00:27:27,010 --> 00:27:32,190 que leva tanto nada ou un valor de só un tipo. 485 00:27:32,190 --> 00:27:38,630 Entón, nós explorar esta na batería electrónica para permitir dar de volume opcional 486 00:27:38,630 --> 00:27:40,730 parámetros para cada unha das partes de batería. 487 00:27:40,730 --> 00:27:46,160 488 00:27:46,160 --> 00:27:54,680 Entón iso nos dá unha forma de ter EQ ou un volume dunha canle en particular. 489 00:27:54,680 --> 00:27:56,440 >> Connor HARRIS: En outros exemplos Haskell, 490 00:27:56,440 --> 00:28:00,450 podes ver quizais usado para funcións que poden fallar. 491 00:28:00,450 --> 00:28:03,470 Esta é unha pregunta común. 492 00:28:03,470 --> 00:28:07,010 >> STEPHEN Krewson: E pode fornecer algún tipo de mensaxe de erro como un defecto. 493 00:28:07,010 --> 00:28:11,020 E iso é especialmente útil cando está facendo o I / O en Haskell. 494 00:28:11,020 --> 00:28:12,044 Isto pode ser trucos. 495 00:28:12,044 --> 00:28:13,960 CONNOR HARRIS: Ou a un exemplo semellante, pense 496 00:28:13,960 --> 00:28:17,460 dunha función que implica división dun parámetro que se pode 0. 497 00:28:17,460 --> 00:28:20,020 E esa función podería volver quizais sexa o que sexa. 498 00:28:20,020 --> 00:28:22,802 Entón, se non hai ningunha división por 0, el volverá só o que quere. 499 00:28:22,802 --> 00:28:25,010 E se hai división por 0, ha voltar nada 500 00:28:25,010 --> 00:28:26,910 como unha forma de sinalización do erro. 501 00:28:26,910 --> 00:28:30,330 Porque unha das consecuencias da Moi estrita de tipo de Haskell 502 00:28:30,330 --> 00:28:34,100 é que non hai ningunha real-- excepcións son difíciles basicamente 503 00:28:34,100 --> 00:28:36,160 manipulación de erro é estraño. 504 00:28:36,160 --> 00:28:39,440 E este é un moi forma común de facelo. 505 00:28:39,440 --> 00:28:42,990 >> STEPHEN Krewson: Entón agora temos a outra cousa alucinante 506 00:28:42,990 --> 00:28:49,160 sobre Haskell, que é estándar definicións de harmonización e función. 507 00:28:49,160 --> 00:28:53,390 Eu mostre o último foto da declaración da secuencia paso 508 00:28:53,390 --> 00:28:58,170 función, que tivo un valor quizais a continuación, un int, entón a lista de enteiros, 509 00:28:58,170 --> 00:29:03,850 logo retorna unha secuencia de valores música non anotada 510 00:29:03,850 --> 00:29:05,375 tanto con ton e volume. 511 00:29:05,375 --> 00:29:08,030 512 00:29:08,030 --> 00:29:11,820 >> Entón eses tres argumentos poden ser estándar correspondente do seguinte xeito. 513 00:29:11,820 --> 00:29:16,660 E sempre queremos estar seguro de facer un caso base ou caso saia primeiro. 514 00:29:16,660 --> 00:29:19,690 E estes subliñados pode só ser interpretada 515 00:29:19,690 --> 00:29:22,340 significa calquera valor que está aí. 516 00:29:22,340 --> 00:29:26,580 Entón, se nós recibir unha chamada para a etapa secuencia con algún valor, algún outro valor, 517 00:29:26,580 --> 00:29:32,210 e, a continuación, a lista baleira, o que queremos para volver só silencio, un descanso 0. 518 00:29:32,210 --> 00:29:35,110 >> E no canto de que sendo unha lista baleira ou 0, 519 00:29:35,110 --> 00:29:38,150 é un descanso 0, porque somos manexar o tipo de música, 520 00:29:38,150 --> 00:29:43,230 ea lista baleira musical tipo é só un resto de ningunha duración. 521 00:29:43,230 --> 00:29:45,680 Non é ningunha música. 522 00:29:45,680 --> 00:29:51,460 E, despois, ver se temos un paso secuenciar cun v ao argumento de volume, 523 00:29:51,460 --> 00:29:57,290 p para o instrumento precaución argumento, e, a continuación, unha lista de X. 524 00:29:57,290 --> 00:29:58,360 >> A continuación, facer algunhas cousas. 525 00:29:58,360 --> 00:30:01,290 En particular, nós aplicamos esta comprensión da lista, 526 00:30:01,290 --> 00:30:05,700 e nós realizar algúns operacións por valor quizais 527 00:30:05,700 --> 00:30:10,050 para transformalo en un valor numérico para que que podería ser usado, e, a continuación enumerados 528 00:30:10,050 --> 00:30:12,300 seleccionar o instrumento. 529 00:30:12,300 --> 00:30:16,730 De novo, isto é un pouco bit deliberadamente inconcise 530 00:30:16,730 --> 00:30:20,580 só para mostrar todas as cousas estrañas pode facer en Haskell como 531 00:30:20,580 --> 00:30:23,170 bótalle un ollo no seu propio tempo. 532 00:30:23,170 --> 00:30:23,802 >> Todo ben. 533 00:30:23,802 --> 00:30:26,010 Entón, nós estamos finalmente empezando a facer o que nos propuxemos a facer, 534 00:30:26,010 --> 00:30:28,820 que é facer un pouco de música de ordenador. 535 00:30:28,820 --> 00:30:32,250 Entón, nós estamos indo a tentar facer música Frere Jacques. 536 00:30:32,250 --> 00:30:35,220 Polo tanto, hai tantas frases en Frere Jacques? 537 00:30:35,220 --> 00:30:38,790 538 00:30:38,790 --> 00:30:39,680 Four. 539 00:30:39,680 --> 00:30:40,460 Gran. 540 00:30:40,460 --> 00:30:42,490 E o que é bo é que están todos repetido 541 00:30:42,490 --> 00:30:46,990 a mesma cantidade de veces, que é dous. 542 00:30:46,990 --> 00:30:50,730 >> Polo tanto, temos catro frases cada repetido dúas veces. 543 00:30:50,730 --> 00:30:53,590 E, en particular, están nunha rolda. 544 00:30:53,590 --> 00:30:55,340 E hai moitos, moitas formas de aplicar 545 00:30:55,340 --> 00:30:57,520 un partido que podería ser divertido de facer. 546 00:30:57,520 --> 00:31:00,260 Xa fixen iso nun bonito forma sinxela aquí, 547 00:31:00,260 --> 00:31:05,760 que é só para a liña construct-- función recibe unha lista de valores de música 548 00:31:05,760 --> 00:31:10,390 e transforma-lo en composición secuencial mediante a aplicación desta composición secuencial 549 00:31:10,390 --> 00:31:13,000 operador. 550 00:31:13,000 --> 00:31:19,540 >> E entón eu atrasar as distintas partes mediante a comezar con un descanso. 551 00:31:19,540 --> 00:31:22,770 Así que comezar cun descanso de dúas medidas, e, a continuación, un resto de catro medidas, 552 00:31:22,770 --> 00:31:26,160 e, a continuación, un resto de seis medidas e, a continuación, a rolda 553 00:31:26,160 --> 00:31:32,290 funciona, como todos sabemos, esta canción. 554 00:31:32,290 --> 00:31:37,180 Vemos dúas anotacións ou modificacións dos valores de música 555 00:31:37,180 --> 00:31:43,150 que están contidas neste secuencial arranxo de elementos de música. 556 00:31:43,150 --> 00:31:44,810 Temos un volume add. 557 00:31:44,810 --> 00:31:48,960 Esta é unha función para anotar música cun volume específico. 558 00:31:48,960 --> 00:31:51,320 Este é un bo exemplo dun sinal MIDI en execución 559 00:31:51,320 --> 00:31:57,510 de 0 a 127, os bits de sete información que pode ser transportado. 560 00:31:57,510 --> 00:32:00,650 >> E entăo-- Vimo-lo moi brevemente, pero o MIDI xeral 561 00:32:00,650 --> 00:32:02,310 lista de todos os diferentes instrumentos. 562 00:32:02,310 --> 00:32:04,450 E non hai unha morea deles. 563 00:32:04,450 --> 00:32:11,230 Se usar unha estación de traballo de audio dixital, como o Pro Tools Ableton Live ou, 564 00:32:11,230 --> 00:32:17,560 hai unha gama máis ampla incrible de sintetizadores e instrumentos VST. 565 00:32:17,560 --> 00:32:21,510 Pero o patrón MIDI única ten algúns ou varios ducia. 566 00:32:21,510 --> 00:32:22,799 E algúns deles son divertido. 567 00:32:22,799 --> 00:32:25,840 Eu penso que sería divertido se xogamos o instrumento do instrumento MIDI 568 00:32:25,840 --> 00:32:30,550 helicóptero, e, a continuación, o preto camiño a través do round, 569 00:32:30,550 --> 00:32:37,980 fixemos un synth pad, e despois de ese liderado brega synth onda cadrada, 570 00:32:37,980 --> 00:32:44,240 e entón a voz lama, que son un pouco indistinta no meu mal MIDI 571 00:32:44,240 --> 00:32:46,410 sintetizador, pero Aceptar. 572 00:32:46,410 --> 00:32:50,030 >> E entón vemos isto let e na sintaxe de Haskell, 573 00:32:50,030 --> 00:32:54,030 e, a continuación, estamos xogando todas estas partes conxuntamente 574 00:32:54,030 --> 00:32:56,265 co seu operador de composición paralela. 575 00:32:56,265 --> 00:33:00,260 576 00:33:00,260 --> 00:33:02,296 E nós probablemente podería amosar un pouco iso. 577 00:33:02,296 --> 00:33:07,674 578 00:33:07,674 --> 00:33:08,340 Aquí está o código. 579 00:33:08,340 --> 00:33:14,960 E podes ver en C, que habería unha chea de pigarro e definición 580 00:33:14,960 --> 00:33:19,760 o código de táboa antes de podería facer música como esta. 581 00:33:19,760 --> 00:33:22,080 Ou calquera outra programación lingua, probablemente 582 00:33:22,080 --> 00:33:27,210 ten que interactuar con algún tipo de biblioteca ou API e configurar todo, 583 00:33:27,210 --> 00:33:28,725 e entón tes que limpar. 584 00:33:28,725 --> 00:33:33,810 Pero aquí en Haskell é, penso eu, xa incorporarse o xeito del, incrible 585 00:33:33,810 --> 00:33:35,770 lexible e moi expresivo. 586 00:33:35,770 --> 00:33:38,930 587 00:33:38,930 --> 00:33:43,240 Polo tanto, hai a implementación de Frere Jacques. 588 00:33:43,240 --> 00:33:43,740 Todo ben. 589 00:33:43,740 --> 00:33:47,557 Agora queremos engadir percusión, e iso é un pouco máis confusa pouco. 590 00:33:47,557 --> 00:33:49,015 Entón, imos dar un ollo nos diapositivas. 591 00:33:49,015 --> 00:33:56,880 592 00:33:56,880 --> 00:34:00,540 Así, a gran idea é facer unha morea de listas ou pezas. 593 00:34:00,540 --> 00:34:04,140 Polos máquinas roll-in, non eran tipicamente preto de quizais oito 594 00:34:04,140 --> 00:34:08,670 10 de ritmo ou de percusión partes. 595 00:34:08,670 --> 00:34:10,159 E, a continuación, usar unha morea de técnicas. 596 00:34:10,159 --> 00:34:14,889 E falamos de these-- usando pregamentos, filtros, funcións lambda, 597 00:34:14,889 --> 00:34:19,429 mapeado sobre listas de xerar valores nalgún intervalo de 1 a r, r é 16, 598 00:34:19,429 --> 00:34:20,699 ou 32 pasos no secuenciador. 599 00:34:20,699 --> 00:34:23,810 600 00:34:23,810 --> 00:34:29,920 >> E, a continuación, se hai un valor nesa lista como estamos correndo a través do secuenciador, 601 00:34:29,920 --> 00:34:34,190 que pasa por el unha e máis, parece que nesa nota, 602 00:34:34,190 --> 00:34:36,060 e que a mostra é accionado. 603 00:34:36,060 --> 00:34:42,810 604 00:34:42,810 --> 00:34:47,110 Aquí están as diferentes formas estrañas Eu vin coa xerar notas. 605 00:34:47,110 --> 00:34:48,940 Proba-o no seu propio suma semi. 606 00:34:48,940 --> 00:34:50,360 Vai soar legal. 607 00:34:50,360 --> 00:34:53,066 608 00:34:53,066 --> 00:34:54,690 Se o tempo permitir, imos pasar por iso. 609 00:34:54,690 --> 00:34:59,200 Pero, por agora, eu creo debemos demostración que temos. 610 00:34:59,200 --> 00:35:01,380 Imos esperar que isto vai Aceptar. 611 00:35:01,380 --> 00:35:02,670 >> Polo tanto, este é GHCI. 612 00:35:02,670 --> 00:35:06,580 613 00:35:06,580 --> 00:35:09,121 E nós imos enviar un ficheiro Teño chamado song.lhs, 614 00:35:09,121 --> 00:35:10,620 que é o ficheiro que acaba de amosar. 615 00:35:10,620 --> 00:35:11,470 OK, gran. 616 00:35:11,470 --> 00:35:15,010 Como Connor dixo anteriormente, compilado, tipo marcada, 617 00:35:15,010 --> 00:35:18,380 para que eu poida respirar moito máis fácil. 618 00:35:18,380 --> 00:35:20,010 Non vai explotar en min. 619 00:35:20,010 --> 00:35:22,720 >> Quería amosar-lle algo útil. 620 00:35:22,720 --> 00:35:25,900 Podes ver que un módulo cargado chamado 50. 621 00:35:25,900 --> 00:35:28,240 Pode procurar ese módulo. 622 00:35:28,240 --> 00:35:32,092 E isto é tan bo sobre doing-- quizais o que 623 00:35:32,092 --> 00:35:34,550 está facendo en Haskell non é chamado de desenvolvemento de software, 624 00:35:34,550 --> 00:35:36,980 pero pode facer unha chea de diversión no seu propio país. 625 00:35:36,980 --> 00:35:42,410 E o fluxo de traballo é realmente bo, como en comparación con unha morea de outras linguas, 626 00:35:42,410 --> 00:35:45,872 porque pode ver nun realmente forma lexible o que está pasando. 627 00:35:45,872 --> 00:35:47,830 Así, vemos que temos Todas estas frases, as cales 628 00:35:47,830 --> 00:35:53,760 son listas de arremessos de música, e entón nós construír estes arriba en algo maior, 629 00:35:53,760 --> 00:35:55,220 que é unha canción de música. 630 00:35:55,220 --> 00:35:58,450 É unha unidade musical. 631 00:35:58,450 --> 00:36:05,545 E entón podemos xogar iso todo cunha función chamada reprodución de música. 632 00:36:05,545 --> 00:36:09,040 Podes ver que aquí abaixo. 633 00:36:09,040 --> 00:36:11,310 Que non é máis que xogar. 634 00:36:11,310 --> 00:36:15,040 >> Eu debería dizer-- non falar este sinal de dólar que está en todas partes. 635 00:36:15,040 --> 00:36:17,980 Sinal de dólar é outro operador infixo. 636 00:36:17,980 --> 00:36:22,500 Pero ten o menor precedencia de calquera operador, o que efectivamente 637 00:36:22,500 --> 00:36:24,960 significa que todo o á esquerda do signo de dólar 638 00:36:24,960 --> 00:36:28,460 e á dereita do sinal de dólar, nós estamos indo a obter avaliados antes del. 639 00:36:28,460 --> 00:36:31,430 Polo tanto, é unha especie de como outro forma de engadir parénteses. 640 00:36:31,430 --> 00:36:33,980 641 00:36:33,980 --> 00:36:36,220 >> CONNOR HARRIS: É basicamente composición de función. 642 00:36:36,220 --> 00:36:40,026 E asegura que non se have-- tes funcións de cada lado ou infix 643 00:36:40,026 --> 00:36:42,900 operadores de ambos os dous lados, eles non van asociar a través del e darlle 644 00:36:42,900 --> 00:36:46,030 resultados inesperados. 645 00:36:46,030 --> 00:36:49,790 >> STEPHEN Krewson: Entón nós can-- usando este, podemos chamar. 646 00:36:49,790 --> 00:36:51,415 En primeiro lugar, imos xogalo sen batería. 647 00:36:51,415 --> 00:37:00,330 648 00:37:00,330 --> 00:37:03,170 Ese é o helicóptero, o helicóptero MIDI. 649 00:37:03,170 --> 00:37:05,495 >> [Música tocando] 650 00:37:05,495 --> 00:37:08,525 651 00:37:08,525 --> 00:37:09,525 Hai a onda cadrada. 652 00:37:09,525 --> 00:37:24,520 653 00:37:24,520 --> 00:37:25,490 O lodo de voz. 654 00:37:25,490 --> 00:37:27,630 E realmente pode ir salvaxes con este. 655 00:37:27,630 --> 00:37:30,872 Eu escollín un ben simple, porque eu sabía que non debería morder 656 00:37:30,872 --> 00:37:31,830 máis do que podía mastigar. 657 00:37:31,830 --> 00:37:36,460 Basta mantelo moi sinxelo para mostrar as ideas principais. 658 00:37:36,460 --> 00:37:39,952 Pero, entón, eu era como, temos ten que engadir algúns tambores para iso. 659 00:37:39,952 --> 00:37:41,910 Só porque este é un pouco impenetrábel, 660 00:37:41,910 --> 00:37:45,790 e eu non usar o NOME DO partes de batería, 661 00:37:45,790 --> 00:37:49,490 Eu mapeados eles-- porque son parte desa clase enumerado, 662 00:37:49,490 --> 00:37:51,500 I mapeado los para ints. 663 00:37:51,500 --> 00:37:53,120 Unha delas é como un tambor. 664 00:37:53,120 --> 00:37:54,370 Cero é así. 665 00:37:54,370 --> 00:37:56,000 Sete é un sombreiro alto. 666 00:37:56,000 --> 00:38:00,920 E abaixo aquí onde a funcións de estar un pouco máis ao chou, 667 00:38:00,920 --> 00:38:02,100 estes son como atabaques. 668 00:38:02,100 --> 00:38:08,360 >> Entón, se pensas que quizais un about-- divertida forma de implementar unha batería electrónica 669 00:38:08,360 --> 00:38:12,830 é por moito ordenada patróns no seu bombo. 670 00:38:12,830 --> 00:38:17,640 Así, por exemplo, por filtración a través da lista con todo o que lle dá de volta 671 00:38:17,640 --> 00:38:20,590 a 1 cando é tomado módulo 04. 672 00:38:20,590 --> 00:38:27,190 Entón eu fico 1, 5, 9, 13, de xeito que este 17-- é o primeiro tempo de cada compás. 673 00:38:27,190 --> 00:38:32,860 >> E entón que é o mesmo cousa cambiou ao longo de dous pasos. 674 00:38:32,860 --> 00:38:33,850 Entón ese é o pouco frecuente. 675 00:38:33,850 --> 00:38:37,480 Polo tanto, este sería algo así como un sombreiro alto. 676 00:38:37,480 --> 00:38:39,640 E entón, de novo, aquí en baixo, é un pouco ao chou, 677 00:38:39,640 --> 00:38:41,080 porque estamos facendo atabaques. 678 00:38:41,080 --> 00:38:44,180 E eu teño algunhas maracas abaixo tamén. 679 00:38:44,180 --> 00:38:50,280 >> Entón, eu podería chamar drum machine xogo, pero sería ir sempre, 680 00:38:50,280 --> 00:38:53,700 e que podería comezar a coller-se toda a memoria no meu sistema. 681 00:38:53,700 --> 00:38:57,090 Entón, eu vou chamar esa función tocar música, que, como veremos, 682 00:38:57,090 --> 00:39:02,020 usar a composición paralela truncando para xogar a nosa pequena canción Frere Jacques 683 00:39:02,020 --> 00:39:04,200 xunto con esta máquina tambor estraño. 684 00:39:04,200 --> 00:39:06,190 Entón, imos dar un ollo. 685 00:39:06,190 --> 00:39:10,920 E por favor non mellorar no meu arranxo de todas as partes de batería. 686 00:39:10,920 --> 00:39:13,375 Non a miña especialidade, pero eu tiña unha morea de desfrute facelo. 687 00:39:13,375 --> 00:39:17,678 688 00:39:17,678 --> 00:39:20,654 >> [Música tocando] 689 00:39:20,654 --> 00:39:52,260 690 00:39:52,260 --> 00:39:56,980 >> Entón, por suposto, iso é todo algo non tan divertido 691 00:39:56,980 --> 00:40:01,100 se non podemos convertelo lo a unha puntuación talvez por iso, 692 00:40:01,100 --> 00:40:04,650 Pode ser interpretada por un performer humano. 693 00:40:04,650 --> 00:40:06,535 Entón eu non vou executa-lo aquí. 694 00:40:06,535 --> 00:40:07,910 Eu xa xerou os arquivos. 695 00:40:07,910 --> 00:40:10,280 Podes ver que hai unha dot LilyPond file-- e este 696 00:40:10,280 --> 00:40:14,500 será o meu segue ata Connor-- e un arquivo punto MIDI, 697 00:40:14,500 --> 00:40:18,610 e un ficheiro PDF punto, que é o que LilyPond que acabará por xerar. 698 00:40:18,610 --> 00:40:23,770 >> Pero estes son os scripts, e eu vou só executa-los con as súas opcións de axuda. 699 00:40:23,770 --> 00:40:28,090 Se obtén estes instalado e funcionando con Euterpea, pode xerar un arquivo MIDI. 700 00:40:28,090 --> 00:40:31,160 E, a continuación, a partir do ficheiro MIDI con este programa MIDI 2LY, 701 00:40:31,160 --> 00:40:34,930 pode xerar un lírio Arquivo Pond, e entón 702 00:40:34,930 --> 00:40:37,974 pode xerar un PDF da partitura. 703 00:40:37,974 --> 00:40:39,390 E debemos dar un ollo niso. 704 00:40:39,390 --> 00:40:52,599 705 00:40:52,599 --> 00:40:55,140 Entón Connor probablemente amosar como para anotar iso mellor, 706 00:40:55,140 --> 00:41:02,570 pero este é Frere Jacques como xerado por min en Euterpea. 707 00:41:02,570 --> 00:41:07,300 É só en C. Eu debería figurado o que a corte-lo, en realidade, no. 708 00:41:07,300 --> 00:41:11,090 Pero iso é o gasoduto para como facelo con iso. 709 00:41:11,090 --> 00:41:12,950 Imos falar máis sobre LilyPond. 710 00:41:12,950 --> 00:41:15,780 >> CONNOR HARRIS: OK Imos ver. 711 00:41:15,780 --> 00:41:19,480 712 00:41:19,480 --> 00:41:21,419 Mencionar Saber vostede Haskell? 713 00:41:21,419 --> 00:41:22,460 STEPHEN Krewson: Oh yeah. 714 00:41:22,460 --> 00:41:23,480 Consulte Saber Vostede Haskell. 715 00:41:23,480 --> 00:41:24,410 É nos recursos. 716 00:41:24,410 --> 00:41:26,830 É así que eu comece aprendizaxe, e iso é gran. 717 00:41:26,830 --> 00:41:27,580 Aprendizaxe non mudo. 718 00:41:27,580 --> 00:41:28,829 >> CONNOR HARRIS: Entón é en liña. 719 00:41:28,829 --> 00:41:34,760 Entón, un cara chamado [inaudível] learnyouahaskell.com sen espazos. 720 00:41:34,760 --> 00:41:37,065 A gramática é enfermo. 721 00:41:37,065 --> 00:41:38,690 STEPHEN Krewson: É ilustrado, tamén. 722 00:41:38,690 --> 00:41:39,440 CONNOR HARRIS: Entón, cal é LilyPond? 723 00:41:39,440 --> 00:41:42,480 É unha programación declarativa Idioma para diagramación música. 724 00:41:42,480 --> 00:41:45,480 Entón podes declarative-- pensar en cousas como HTML, 725 00:41:45,480 --> 00:41:50,900 onde non está dizendo-- HTML non di como navegadores web deben 726 00:41:50,900 --> 00:41:52,180 procesar páxinas paso a paso. 727 00:41:52,180 --> 00:41:54,096 É só dicir isto é unha descrición textual 728 00:41:54,096 --> 00:41:56,100 do que quere que a páxina para ver como. 729 00:41:56,100 --> 00:41:59,310 >> E entón é tamén un programa de que compila esa linguaxe, 730 00:41:59,310 --> 00:42:02,300 ou ler o seu correo, a continuación, en realidade, fai a diagramación para ti, 731 00:42:02,300 --> 00:42:05,570 e el cospe estes marabillosas partituras en PDF busca. 732 00:42:05,570 --> 00:42:08,250 Tamén pode obter formato PNG ou o que quere. 733 00:42:08,250 --> 00:42:10,300 Unha boa forma de pensar é dicir, por analoxía 734 00:42:10,300 --> 00:42:16,620 LaTeX é que é unha especie de LillyPond, pero por só maquetación común. 735 00:42:16,620 --> 00:42:20,360 Entón, en vez de-- non é WYSIWYG, o que ve 736 00:42:20,360 --> 00:42:22,960 É o que, como, por exemplo Finale é, ou Sibelius, 737 00:42:22,960 --> 00:42:27,430 ou Microsoft Word, onde podes escribir tempo real e proxectos de cousas en tempo real 738 00:42:27,430 --> 00:42:31,340 para ver os cambios instantaneamente. 739 00:42:31,340 --> 00:42:32,140 >> El está baseado en texto. 740 00:42:32,140 --> 00:42:35,290 Ten que compilar o seu correas mediante un programa separado 741 00:42:35,290 --> 00:42:37,090 e saír PDFs máis tarde. 742 00:42:37,090 --> 00:42:43,320 Isto é un pouco menos cómodo para o uso se está 743 00:42:43,320 --> 00:42:46,520 intentando escribir directamente nunha puntuación e está 744 00:42:46,520 --> 00:42:48,620 tentar compoñer no ordenador. 745 00:42:48,620 --> 00:42:50,830 Pero hai unha serie de vantaxes para el. 746 00:42:50,830 --> 00:42:56,110 Un deles, que se parece moito máis agradable, porque realmente LillyPond 747 00:42:56,110 --> 00:42:58,210 tomar o tempo para fazê- decisións de deseño propiamente, 748 00:42:58,210 --> 00:43:02,380 a diferenza de Sibelius ou Finale, que teñen para facer algoritmos tan comprometidos 749 00:43:02,380 --> 00:43:05,020 que poden amosar as cousas en tempo real. 750 00:43:05,020 --> 00:43:07,660 >> Entón, por que é LilyPond-- computación gráfica é difícil. 751 00:43:07,660 --> 00:43:10,535 Se está facendo calquera cousa con música e quere escribir partituras, 752 00:43:10,535 --> 00:43:13,900 non quere escribir fóra todo só 753 00:43:13,900 --> 00:43:19,040 comezando con como deseñar equipos de funcionarios e como deseñar notepads. 754 00:43:19,040 --> 00:43:21,020 É moi difícil. Isto xa foi feito antes. 755 00:43:21,020 --> 00:43:22,170 Está ben. 756 00:43:22,170 --> 00:43:26,200 >> Se quere usar Finale ou Sibelius, os formatos de ficheiro para isto 757 00:43:26,200 --> 00:43:30,180 son moi complicado, e non pode realmente usalos de forma programática. 758 00:43:30,180 --> 00:43:35,020 Pode abrir Sibelius coa Finale e vai File, Export as PDF mesmo, 759 00:43:35,020 --> 00:43:37,600 pero non pode realmente chamar iso dun guión. 760 00:43:37,600 --> 00:43:40,440 LillyPond, pode chamar a partir destes scripts. 761 00:43:40,440 --> 00:43:44,397 Podería facilmente facer unha iteración LillyPond con LaTeX. 762 00:43:44,397 --> 00:43:47,230 Non vou ter moito tempo para ir para estas tecnoloxías de agora, 763 00:43:47,230 --> 00:43:48,321 pero existen. 764 00:43:48,321 --> 00:43:50,070 Se queres ollar nun libro LillyPond, 765 00:43:50,070 --> 00:43:53,760 é un programa que inclúe súa distribución LillyPond, 766 00:43:53,760 --> 00:43:57,030 e é a iteración Fragmentos LillyPond en LaTeX 767 00:43:57,030 --> 00:44:00,340 se quere facer algo como un documento de gran musicologia 768 00:44:00,340 --> 00:44:02,289 con exemplos, por exemplo. 769 00:44:02,289 --> 00:44:04,580 E é unha boa habilidade para vida se está facendo nada 770 00:44:04,580 --> 00:44:05,770 con música, non só CS50. 771 00:44:05,770 --> 00:44:09,320 Eu usei LillyPond para todos dos meus proxectos de composición 772 00:44:09,320 --> 00:44:11,880 desde que era basicamente un sénior na escola. 773 00:44:11,880 --> 00:44:13,455 >> Entón, aquí están algúns exemplos simples. 774 00:44:13,455 --> 00:44:17,490 775 00:44:17,490 --> 00:44:21,060 Este é basicamente representante do nivel de dificultade 776 00:44:21,060 --> 00:44:23,481 que a maioría da xente afrontalo lo que estaban tentando 777 00:44:23,481 --> 00:44:24,980 usar LilyPond para proxectos simple. 778 00:44:24,980 --> 00:44:29,519 Este primeiro é o principio a un preludio coral de Bach. 779 00:44:29,519 --> 00:44:31,810 Este fondo é unha parte dunha das miñas propias obras, 780 00:44:31,810 --> 00:44:34,650 e é só alí para amosar lle cousas como [inaudível] 781 00:44:34,650 --> 00:44:38,550 poñendo varias liñas na mesma equipo, como lyric undersetting funciona. 782 00:44:38,550 --> 00:44:41,350 783 00:44:41,350 --> 00:44:46,110 Underlays líricos son unha cousa que é moi fácil de usar para LilyPond música coral. 784 00:44:46,110 --> 00:44:48,814 >> E entón hai algo máis exemplos complicadas aquí. 785 00:44:48,814 --> 00:44:50,980 Todos estes son feitos en LilyPond e son viables. 786 00:44:50,980 --> 00:44:55,280 Este primeiro tramo é de [Inaudível] por [inaudível]. 787 00:44:55,280 --> 00:44:58,860 E iso [inaudível] de unha peza abaixo a solo 788 00:44:58,860 --> 00:45:03,550 frauta por [inaudível] que é un longtime-- que 789 00:45:03,550 --> 00:45:07,101 era un membro de longa data do departamento de música aquí, eu creo. 790 00:45:07,101 --> 00:45:08,600 Eu non estou seguro para onde foi para fóra. 791 00:45:08,600 --> 00:45:12,410 Pero el era o conselleiro do Harvard Asociación compositores por un longo tempo. 792 00:45:12,410 --> 00:45:13,530 Home marabilloso. 793 00:45:13,530 --> 00:45:16,920 E escribe unha canción que ten moito notación complicado que LillyPond 794 00:45:16,920 --> 00:45:20,500 Pode, con todo, tratar moi ben. 795 00:45:20,500 --> 00:45:26,030 >> Entón, só para lle dar unha idea do que capacidades desta cousa tan é-- 796 00:45:26,030 --> 00:45:28,960 os internos do LillyPond son moi complicadas. 797 00:45:28,960 --> 00:45:31,060 E pode usalo para un longo período de tempo, incluíndo 798 00:45:31,060 --> 00:45:32,520 para algúns moi complicado cousas, sen realmente 799 00:45:32,520 --> 00:45:34,060 ter que saber moito sobre eles. 800 00:45:34,060 --> 00:45:38,720 Pero a idea básica é que na nivel máis baixo, os átomos de LillyPonds 801 00:45:38,720 --> 00:45:39,970 son as notas. 802 00:45:39,970 --> 00:45:42,761 As notas conteñen unha Contexto da chamada voces. 803 00:45:42,761 --> 00:45:44,510 Así, o contexto de voz basicamente corresponde 804 00:45:44,510 --> 00:45:47,410 a unha soa liña de polifonia. 805 00:45:47,410 --> 00:45:49,410 E, a continuación, pode ser contexto contiñan xerarquicamente 806 00:45:49,410 --> 00:45:53,590 en os de nivel superior que representan equipos na puntuación 807 00:45:53,590 --> 00:45:56,750 ou agrupacións máis grandes, como equipos de piano ou equipos coro, 808 00:45:56,750 --> 00:45:58,990 e despois, finalmente, contextos de puntuación enteiras. 809 00:45:58,990 --> 00:46:02,260 E realmente pode abarcar varias decenas nun libro. 810 00:46:02,260 --> 00:46:05,770 >> E cada contexto ten un número de gravadores conectados. 811 00:46:05,770 --> 00:46:08,340 Se ollar a través da contido dun contexto 812 00:46:08,340 --> 00:46:14,410 e imprimir un certo símbolo ou un certa clase de símbolos como necesario. 813 00:46:14,410 --> 00:46:17,840 Entón, para todos os contextos de voz, hai [inaudível] notas 814 00:46:17,840 --> 00:46:24,270 gravador que é basicamente unha función ou un obxecto que escribe para fóra toda a nota 815 00:46:24,270 --> 00:46:26,290 cabezas sobre as pezas certas dunha páxina. 816 00:46:26,290 --> 00:46:29,510 Entón hai un gravador fenda, que escribe fisuras na pauta. 817 00:46:29,510 --> 00:46:31,517 Despois, hai un metrónomo marca de gravador que 818 00:46:31,517 --> 00:46:33,100 escribe marcas metrónomo nunha puntuación. 819 00:46:33,100 --> 00:46:36,410 E todos se encaixan moi ben dentro da xerarquía. 820 00:46:36,410 --> 00:46:39,500 E é moi, moi, moi personalizable, o que precisa 821 00:46:39,500 --> 00:46:42,880 se quere facer as cousas así. 822 00:46:42,880 --> 00:46:45,730 >> Así, todos os contextos teñen un morea de diferentes atributos 823 00:46:45,730 --> 00:46:52,410 que pode modificar para todo do paso a varias opcións de fonte 824 00:46:52,410 --> 00:46:54,942 selección de tamaños de cousas. 825 00:46:54,942 --> 00:46:56,900 Se queres facer aínda as cousas máis complicadas, 826 00:46:56,900 --> 00:46:59,210 hai unha linguaxe de script incorporado. 827 00:46:59,210 --> 00:47:01,820 Falan esquema, que é dialeto do LISP. 828 00:47:01,820 --> 00:47:04,960 Estes probablemente non facer significa nada para ti. 829 00:47:04,960 --> 00:47:06,900 Pero, basicamente, un esquema de outro funcional 830 00:47:06,900 --> 00:47:09,500 linguaxe de programación, máis ou menos. 831 00:47:09,500 --> 00:47:10,800 >> STEPHEN Krewson: O tie-in. 832 00:47:10,800 --> 00:47:12,690 >> CONNOR HARRIS: Yeah. 833 00:47:12,690 --> 00:47:15,390 É un bo tie-in, supoño. 834 00:47:15,390 --> 00:47:20,150 E é usado como lingua de ensino, de feito, para abaixo Mass Ave No MIT. 835 00:47:20,150 --> 00:47:26,590 E é moi útil para LillyPond por varias razóns técnicas. 836 00:47:26,590 --> 00:47:30,317 >> E por iso, se quere facer sinxela tweaks dependentes condicionais, 837 00:47:30,317 --> 00:47:32,900 para example-- hai certa condición de unha puntuación que coñeceu, 838 00:47:32,900 --> 00:47:36,495 facer cambios no esquema ou entón whatnot-- 839 00:47:36,495 --> 00:47:37,620 as instalacións están alí. 840 00:47:37,620 --> 00:47:38,667 Son complicados. 841 00:47:38,667 --> 00:47:40,250 Entón aquí está un exemplo de código ben sinxelo. 842 00:47:40,250 --> 00:47:43,810 É cinco liñas. 843 00:47:43,810 --> 00:47:46,120 Basicamente, eu estou definindo dous equipos. 844 00:47:46,120 --> 00:47:46,904 É en 3/4. 845 00:47:46,904 --> 00:47:48,695 O primeiro equipo ten un adxunto marca de tempo, 846 00:47:48,695 --> 00:47:51,110 pero que está realmente a suceder para ir toda a partitura, 847 00:47:51,110 --> 00:47:54,960 porque marcas de marcha están no nivel puntuación. 848 00:47:54,960 --> 00:47:59,044 O gravador marca metrónomo está conectado a marcar contexto. 849 00:47:59,044 --> 00:48:01,460 Hai claves diferentes, porque o [inaudível] gravador 850 00:48:01,460 --> 00:48:02,710 está conectado os equipos. 851 00:48:02,710 --> 00:48:04,441 Pode realmente facer é. 852 00:48:04,441 --> 00:48:06,190 A mostra que escribín é de feito, en C major, 853 00:48:06,190 --> 00:48:07,990 pero é só a demostrar que pode ter 854 00:48:07,990 --> 00:48:09,570 claves diferentes en diferentes equipos. 855 00:48:09,570 --> 00:48:15,710 E a sintaxe básica é que escribe Observe nomes con E, F, G, calquera que sexa. 856 00:48:15,710 --> 00:48:18,910 Se queres facer accidentes, vostede sufixo é ou ES. 857 00:48:18,910 --> 00:48:22,640 Este é de Holandés convencións musicologia. 858 00:48:22,640 --> 00:48:28,290 >> E para facer saltos de oitava, tes que usar estas marcas de escala, coma ou apóstrofo. 859 00:48:28,290 --> 00:48:30,580 A relativa significa só o que ten unha nota, 860 00:48:30,580 --> 00:48:34,080 será automaticamente plaec no oitava máis próximo á anterior. 861 00:48:34,080 --> 00:48:37,624 E se queres ir máis que un fifth-- dicir un quinto ou more-- 862 00:48:37,624 --> 00:48:39,165 entón tes que usar o [inaudível]. 863 00:48:39,165 --> 00:48:42,580 Pero se non, non ten que especificar a oitava de cada nota. 864 00:48:42,580 --> 00:48:46,130 >> E sobre C, prema, e C, só especificar medio C 865 00:48:46,130 --> 00:48:48,630 e base de C, especialmente primeiras notas. 866 00:48:48,630 --> 00:48:55,020 Entón tes esas equipos que organizan estas dúas voces ou mostras de música, 867 00:48:55,020 --> 00:48:56,730 e ten unha puntuación. 868 00:48:56,730 --> 00:48:58,440 E que se parece con isto. 869 00:48:58,440 --> 00:49:01,780 870 00:49:01,780 --> 00:49:05,380 >> Se quere ter o tempo para copiar ese exemplo de LillyPond 871 00:49:05,380 --> 00:49:07,530 no código anterior deslice cara abaixo aquí, e 872 00:49:07,530 --> 00:49:09,030 pode escribir para LillyPond-se. 873 00:49:09,030 --> 00:49:11,280 Sei que teño algo que se parece moito con iso. 874 00:49:11,280 --> 00:49:17,236 875 00:49:17,236 --> 00:49:19,610 Polo tanto, hai outra tecnoloxía XML chamado Música mantida 876 00:49:19,610 --> 00:49:22,030 por persoas completamente diferentes. 877 00:49:22,030 --> 00:49:28,150 XML é un conxunto de datos textuais structure-- I non debería dicir datos structure-- dicir 878 00:49:28,150 --> 00:49:29,580 mapa metáfora máis ou menos. 879 00:49:29,580 --> 00:49:33,800 E está deseñado para manter datos xerárquicos moi ben. 880 00:49:33,800 --> 00:49:37,050 HTML, por exemplo, é un tipo de XML. 881 00:49:37,050 --> 00:49:41,090 E pode dicir XML porque tiña todos os sinais de menor e ángulo 882 00:49:41,090 --> 00:49:44,700 marcas de soporte de barra que os campos cos datos. 883 00:49:44,700 --> 00:49:47,390 >> Non teño un código exemplo de XML Music. 884 00:49:47,390 --> 00:49:50,450 Pode atopalo vostede mesmo. 885 00:49:50,450 --> 00:49:53,735 Basicamente, a razón pola que pode querer usar XML como o estadio intermedio 886 00:49:53,735 --> 00:49:55,980 é, ante todo, é un formato de intercambio 887 00:49:55,980 --> 00:50:02,301 para basicamente every-- non debería dicir todos, pero unha morea de puntuación diferente 888 00:50:02,301 --> 00:50:02,800 escritores. 889 00:50:02,800 --> 00:50:04,966 Entón, se escribir en Música XML, non só pode LillyPond 890 00:50:04,966 --> 00:50:08,080 lelo coa axuda deste auxilary programa chamado XML Música para LY, 891 00:50:08,080 --> 00:50:11,360 pero tamén pode ler Finale el, Sibelius pode lelo. 892 00:50:11,360 --> 00:50:14,770 Dependendo de como o obxecto interno xerarquía traballa para representar música, 893 00:50:14,770 --> 00:50:18,820 pode ser máis doado para escribir Música para XML que LillyPond 894 00:50:18,820 --> 00:50:22,410 e confiar só en XML Música Ly para facer a conversión. 895 00:50:22,410 --> 00:50:24,282 >> Eu non creo que [inaudível] ten XML Music. 896 00:50:24,282 --> 00:50:25,490 STEPHEN Krewson: Non fai. 897 00:50:25,490 --> 00:50:26,340 Alguén está a traballar nel, con todo. 898 00:50:26,340 --> 00:50:27,090 >> CONNOR HARRIS: Aceptar. 899 00:50:27,090 --> 00:50:31,040 Non Euterpea non ten un Función de saída XML musical con todo. 900 00:50:31,040 --> 00:50:35,340 Se queres ter unha idea final do proxecto, quizais contacte con caras 901 00:50:35,340 --> 00:50:38,620 que Stephen sabe, e poderían usar a súa axuda. 902 00:50:38,620 --> 00:50:40,992 >> STEPHEN Krewson: Encantaríame iso. 903 00:50:40,992 --> 00:50:43,450 CONNOR HARRIS: Tamén basicamente cada linguaxes de programación 904 00:50:43,450 --> 00:50:46,610 que vale o seu sal xa ten unha biblioteca XML, 905 00:50:46,610 --> 00:50:51,030 para que poida converter todo internamente das súas cancións nalgún obxecto 906 00:50:51,030 --> 00:50:54,120 que a biblioteca XML pode escribir que esixe menos 907 00:50:54,120 --> 00:50:57,470 cambios na súa estrutura interna por calquera música obxectos que 908 00:50:57,470 --> 00:51:00,310 quero escribir que gravala-lo directamente no LillyPond faría. 909 00:51:00,310 --> 00:51:04,380 A continuación, pode imprimir lo con XML con as bibliotecas XML no seu idioma, 910 00:51:04,380 --> 00:51:07,260 que vai garantir que é sintaticamente correcto e todo máis, 911 00:51:07,260 --> 00:51:08,720 e, a continuación, convertelo para LillyPond. 912 00:51:08,720 --> 00:51:11,060 Así, a tecnoloxía que pode querer ollar se está facendo algo 913 00:51:11,060 --> 00:51:11,650 como este. 914 00:51:11,650 --> 00:51:14,490 915 00:51:14,490 --> 00:51:16,370 >> [Inaudível], outro tecnoloxía auxilarry. 916 00:51:16,370 --> 00:51:21,700 Este é basicamente Works tecnoloxía ou tecnoloxía Studio for LillyPond. 917 00:51:21,700 --> 00:51:25,380 Por iso, ofrece axuda co sintaxe, con modelos 918 00:51:25,380 --> 00:51:28,770 para varios común combinacións de instrumentos. 919 00:51:28,770 --> 00:51:32,780 Permite a visualización de pantalla dividida polo pode que o seu código nunha fiestra 920 00:51:32,780 --> 00:51:37,350 e PDF noutra fiestra e prema en lugares do PDF 921 00:51:37,350 --> 00:51:40,650 para ir á correspondente spots no seu código fonte. 922 00:51:40,650 --> 00:51:45,330 Isto é máis útil se está realmente escrita LillyPond arquivos vostede mesmo 923 00:51:45,330 --> 00:51:47,400 que se está xerando Los programaticamente. 924 00:51:47,400 --> 00:51:51,230 Pero, de novo, é algo útil para ter. 925 00:51:51,230 --> 00:51:51,970 >> Gran. 926 00:51:51,970 --> 00:51:55,860 Outra resources-- vou só pasar por iso moi rapidamente. 927 00:51:55,860 --> 00:52:01,270 LillyPond manuals-- LillyPond ten excelente documentación no seu sitio. 928 00:52:01,270 --> 00:52:02,270 Teñen un tutorial. 929 00:52:02,270 --> 00:52:03,478 Teñen unha referencia de sintaxe. 930 00:52:03,478 --> 00:52:07,010 Teñen centos de fragmentos para moitas cousas pequenas 931 00:52:07,010 --> 00:52:09,930 yo Pode facer para demostrar varias capacidades. 932 00:52:09,930 --> 00:52:12,250 Se desexa usar a linguaxe de script 933 00:52:12,250 --> 00:52:14,740 ou facer máis extensa personalización, non hai 934 00:52:14,740 --> 00:52:16,730 internos de referencia a que URL. 935 00:52:16,730 --> 00:52:21,950 Se quere usar XML Music, hai que URL, musicxml.com/tutorial. 936 00:52:21,950 --> 00:52:27,960 >> E entón se ten que aprender esquema porque o quere usar 937 00:52:27,960 --> 00:52:30,960 as instalacións de script en LillyPond, a continuación, hai un [inaudível] chamado 938 00:52:30,960 --> 00:52:32,918 Interpretación estruturado de Programas de Ordenador, 939 00:52:32,918 --> 00:52:35,820 que é non só o segundo maior libro de CS nunca written-- 940 00:52:35,820 --> 00:52:39,770 atopar-me máis tarde se quere saber o que eu creo que o maior deles é-- 941 00:52:39,770 --> 00:52:43,580 pero tamén é moi bo introdución á linguaxe axeitada. 942 00:52:43,580 --> 00:52:46,630 Non vai ter máis que as primeiras seccións. 943 00:52:46,630 --> 00:52:47,827 >> E é iso. 944 00:52:47,827 --> 00:52:48,410 Algunha pregunta? 945 00:52:48,410 --> 00:52:54,068 946 00:52:54,068 --> 00:52:57,972 >> ALUMNO: Onde podo baixar Frere Jacques súa xerado 947 00:52:57,972 --> 00:53:01,050 para que eu poida poñelo no meu iPod? 948 00:53:01,050 --> 00:53:07,574 >> STEPHEN Krewson: Ben, pode escribir para algún ficheiro wav en Euterpea. 949 00:53:07,574 --> 00:53:08,490 E ten o código. 950 00:53:08,490 --> 00:53:10,000 É no GitHub. 951 00:53:10,000 --> 00:53:15,590 Fai os seus propios variacións de Frere Jacques por CS50 mente da colmea. 952 00:53:15,590 --> 00:53:17,095 Sería óptimo. 953 00:53:17,095 --> 00:53:18,220 CONNOR HARRIS: Máis alguén? 954 00:53:18,220 --> 00:53:20,261 STEPHEN Krewson: Necesitamos unha mellor bombo tamén. 955 00:53:20,261 --> 00:53:21,935 É moi malo. 956 00:53:21,935 --> 00:53:26,565 >> ALUMNO: Euterpea ten non só lado a composición, pero signal-- 957 00:53:26,565 --> 00:53:27,440 STEPHEN Krewson: Si. 958 00:53:27,440 --> 00:53:30,100 En realidade, o traballo que eu fixo en Euterpea cando 959 00:53:30,100 --> 00:53:33,450 tomou isto-- hai unha graduar curso en Yale que 960 00:53:33,450 --> 00:53:35,900 utiliza ele-- foi en síntese de son. 961 00:53:35,900 --> 00:53:39,810 Polo tanto, non hai realmente un xeito agradable usando as frechas 962 00:53:39,810 --> 00:53:46,150 e algúns da notación vimos de compondo xuntos funcións de sinal. 963 00:53:46,150 --> 00:53:50,610 En particular, o baixo para a maioría un deles é só unha onda senoidal simple. 964 00:53:50,610 --> 00:53:54,240 Pero se comezar a compoñer os de formas programáticas estraños, 965 00:53:54,240 --> 00:54:00,010 pode obter son tolo efectos, como fervenzas estrañas. 966 00:54:00,010 --> 00:54:04,640 Pode crear moi valente sons cunha gran cantidade de modulación. 967 00:54:04,640 --> 00:54:07,730 >> Eu fixen un proxecto sobre granular síntese, que é 968 00:54:07,730 --> 00:54:12,290 nalgún lugar entre FM e mostraxe. 969 00:54:12,290 --> 00:54:15,230 Se toma moi pequeno, mostras pequenas, e logo 970 00:54:15,230 --> 00:54:20,440 combinalos con algún tipo de modulador e construír-se un son máis rico. 971 00:54:20,440 --> 00:54:24,900 Tamén fixemos modelaxe física, de xeito intentando pensar sobre a física 972 00:54:24,900 --> 00:54:29,410 e psicoacústica de algo así como trompeta, e pensar sobre o xeito 973 00:54:29,410 --> 00:54:32,320 o son está saltando fóra a campá da trompeta 974 00:54:32,320 --> 00:54:35,200 ea acústica de o cuarto e modelaxe 975 00:54:35,200 --> 00:54:40,195 que os osciladores de base. 976 00:54:40,195 --> 00:54:47,690 977 00:54:47,690 --> 00:54:48,940 CONNOR HARRIS: Thanks so much. 978 00:54:48,940 --> 00:54:50,140 Grazas por vir. 979 00:54:50,140 --> 00:54:52,400 E eu estou sempre disposto a a preguntas por 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: Yeah. stephen.krewson@yale.edu. 982 00:54:57,020 --> 00:54:58,810 983 00:54:58,810 --> 00:55:00,360 Legal. 984 00:55:00,360 --> 00:55:01,667