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 Soy Connor Harris. 4 00:00:06,820 --> 00:00:09,729 Soy un CA CS50 en Harvard. 5 00:00:09,729 --> 00:00:11,270 STEPHEN Krewson: Soy Stephen Krewson. 6 00:00:11,270 --> 00:00:12,582 Soy un TF para CS50 en Yale. 7 00:00:12,582 --> 00:00:15,790 CONNOR HARRIS: Y vamos a hablar acerca de algunas tecnologías que podrían 8 00:00:15,790 --> 00:00:18,880 desee utilizar si te interesa en hacer un proyecto final o realmente 9 00:00:18,880 --> 00:00:20,920 nada con la música. 10 00:00:20,920 --> 00:00:24,400 Vamos a centrar en una primera lenguaje de programación llamado Haskell. 11 00:00:24,400 --> 00:00:26,280 Es un funcional idioma, por lo que el paradigma 12 00:00:26,280 --> 00:00:29,620 es muy diferente de C o PHP u otros lenguajes imperativos 13 00:00:29,620 --> 00:00:33,450 que usted ha utilizado ya, y en especial en una librería escrita en Haskell 14 00:00:33,450 --> 00:00:40,240 llamada Euterpea, que puede ayudar a las personas con la escritura de la música funcional, 15 00:00:40,240 --> 00:00:40,780 básicamente. 16 00:00:40,780 --> 00:00:43,400 Y Stephen le guiará a a través de un gran ejemplo de eso. 17 00:00:43,400 --> 00:00:46,423 >> Después de esto, voy a presentarles a algo que se llama LillyPond, que 18 00:00:46,423 --> 00:00:48,370 es una tecnología para la música archivos de texto. 19 00:00:48,370 --> 00:00:50,830 Es algo así como LaTeX por la música si alguno de ustedes 20 00:00:50,830 --> 00:00:57,530 han usado LaTeX para las clases de matemáticas o otras clases P puesto o lo que sea. 21 00:00:57,530 --> 00:01:00,440 Y así te voy a dar, una vez más, algunos ejemplos sencillos de que 22 00:01:00,440 --> 00:01:03,640 y señalarle en la general, dirección de algunos recursos mejores. 23 00:01:03,640 --> 00:01:04,319 >> STEPHEN Krewson: En Además, pensamos que 24 00:01:04,319 --> 00:01:06,720 sería genial para configurar un poco de consejos 25 00:01:06,720 --> 00:01:10,780 hacia un oleoducto entre Archivos MIDI Euterpea generados 26 00:01:10,780 --> 00:01:13,910 en LillyPond, por lo que ofrecemos alguna instrucción en guiones 27 00:01:13,910 --> 00:01:16,310 para hacer eso que son proporcionado con LillyPond 28 00:01:16,310 --> 00:01:19,160 sólo para mantenerlo de código abierto y obtener una tubería que va. 29 00:01:19,160 --> 00:01:20,910 CONNOR HARRIS: Una vez más, hay que destacar, 30 00:01:20,910 --> 00:01:23,100 estas dos tecnologías, que no tienen que utilizarlos juntos. 31 00:01:23,100 --> 00:01:25,370 No están diseñados para trabajar juntos, aunque lo hacen muy bien. 32 00:01:25,370 --> 00:01:26,362 >> STEPHEN Krewson: Correcto. 33 00:01:26,362 --> 00:01:30,116 Y totalmente gratis. 34 00:01:30,116 --> 00:01:32,240 CONNOR HARRIS: Así agradecimientos, que acaba de leer. 35 00:01:32,240 --> 00:01:33,406 STEPHEN Krewson: Debidamente señaló. 36 00:01:33,406 --> 00:01:36,360 Gracias a esa gente. 37 00:01:36,360 --> 00:01:39,180 Esto me va a quedarse en sólo un momento. 38 00:01:39,180 --> 00:01:41,560 El proceso de instalación es un poco complicado. 39 00:01:41,560 --> 00:01:45,420 Tenemos un leerme en la GitHub que se puede echar un vistazo a. 40 00:01:45,420 --> 00:01:47,840 Apenas envíeme un correo electrónico si usted tiene alguna pregunta. 41 00:01:47,840 --> 00:01:52,829 Pero vamos a correr esta bajo el supuesto que esto está trabajando para todo el mundo. 42 00:01:52,829 --> 00:01:55,620 CONNOR HARRIS: ¿Y si no puede obtener LillyPond funcione, no es gran cosa. 43 00:01:55,620 --> 00:02:00,139 No hay recopilatorio en vivo que estará involucrado, al menos en mi final. 44 00:02:00,139 --> 00:02:02,930 STEPHEN Krewson: Haskell y LillyPond debería ambos tienen instaladores. 45 00:02:02,930 --> 00:02:08,497 Euterpea se descarga como un paquete, así sucesivamente y así sucesivamente. 46 00:02:08,497 --> 00:02:10,080 Así que estamos hablando de música por ordenador. 47 00:02:10,080 --> 00:02:12,990 Y esto es sólo una muy vista 50.000 pies. 48 00:02:12,990 --> 00:02:15,700 Hay algunos aspectos diferentes de la misma. 49 00:02:15,700 --> 00:02:18,120 Y esto es duro y es va a ocultar algunos detalles. 50 00:02:18,120 --> 00:02:22,090 Pero podríamos pensar en algo como la composición algorítmica, 51 00:02:22,090 --> 00:02:24,920 utilizando algoritmos, utilizando el código, para generar 52 00:02:24,920 --> 00:02:30,280 algún tipo de-- tal vez un auto-similar secuencia de notas, o tal vez las notas 53 00:02:30,280 --> 00:02:33,330 bajo alguna restricción. 54 00:02:33,330 --> 00:02:35,350 Y a continuación, los que podrían ser realizado o interpretado 55 00:02:35,350 --> 00:02:38,390 con instrumentos analógicos ni nada de eso. 56 00:02:38,390 --> 00:02:42,010 Sin embargo, la composición era hecho algorítmicamente. 57 00:02:42,010 --> 00:02:45,120 >> Pero, por supuesto, tal vez el área de la música del ordenador o de la música digital 58 00:02:45,120 --> 00:02:48,870 estamos más familiarizados con es digital síntesis de sonido o muestreo digital 59 00:02:48,870 --> 00:02:51,160 y la grabación digital. 60 00:02:51,160 --> 00:02:55,650 Una gran cantidad de instrumentos digitales son hecho a través de muestreo digital. 61 00:02:55,650 --> 00:03:00,110 De hecho, vamos a estar usando uno de los de la forma de una biblioteca de fuentes de sonido más tarde. 62 00:03:00,110 --> 00:03:02,850 >> Pero también hay algo llamado síntesis digital que salió 63 00:03:02,850 --> 00:03:08,650 de finales de los años 70 y en los años 80 con Yamaha y John Chowning en Stanford 64 00:03:08,650 --> 00:03:11,990 hacer síntesis FM o Síntesis de modulación de frecuencia, 65 00:03:11,990 --> 00:03:15,100 en el que tuvo un portador señal y una señal de modulación 66 00:03:15,100 --> 00:03:18,270 tanto en el espectro de audio. 67 00:03:18,270 --> 00:03:22,570 Pero lo que estamos enfocados en hoy en día es algo que se llama MIDI, 68 00:03:22,570 --> 00:03:25,040 y por supuesto, la composición algorítmica. 69 00:03:25,040 --> 00:03:30,940 >> No vamos a hacer instrumentos, pero estamos en lugar de ir a hacer un poco de música, 70 00:03:30,940 --> 00:03:33,940 y luego de que obtendrá interpretado por algunos instrumentos que 71 00:03:33,940 --> 00:03:38,300 son conformes a la Norma General MIDI. 72 00:03:38,300 --> 00:03:40,830 Entonces, ¿qué es MIDI? 73 00:03:40,830 --> 00:03:45,550 No voy a profundizar demasiado en él, pero MIDI es un protocolo de transferencia de datos. 74 00:03:45,550 --> 00:03:49,250 Es una especie de guía a través de diferentes empresas e industrias 75 00:03:49,250 --> 00:03:52,250 para la organización de los sonidos o parches. 76 00:03:52,250 --> 00:03:54,170 Así que veremos que hay un estándar MIDI 77 00:03:54,170 --> 00:03:57,500 para todos los diferentes percusión sonidos y recomendaciones MIDI 78 00:03:57,500 --> 00:04:01,360 para todos los diferentes tipos de sintetizador o diferentes tipos de todo el instrumento 79 00:04:01,360 --> 00:04:03,650 grupos en una orquesta, dicen. 80 00:04:03,650 --> 00:04:08,916 >> Probablemente usted está familiarizado con 0 a 127 mensajes MIDI. 81 00:04:08,916 --> 00:04:12,920 Una señal MIDI es típicamente un bit que indica 82 00:04:12,920 --> 00:04:16,130 si se trata de un dato o una paquete de estado, y luego está 83 00:04:16,130 --> 00:04:18,589 siete bits de una señal. 84 00:04:18,589 --> 00:04:21,430 Y estos pueden controlar todo de volumen 85 00:04:21,430 --> 00:04:25,330 a la acción o la presión sobre una clave particular 86 00:04:25,330 --> 00:04:29,400 si usted está realizando con un MIDI controlador, así como, por supuesto, 87 00:04:29,400 --> 00:04:31,250 notas. 88 00:04:31,250 --> 00:04:33,450 Y, por supuesto, MIDI tiene sido de gran utilidad, 89 00:04:33,450 --> 00:04:37,550 porque es una forma de hilo juntos o cadena 90 00:04:37,550 --> 00:04:41,570 un grupo de dispositivos de hardware MIDI. 91 00:04:41,570 --> 00:04:44,050 Tengo siete u ocho años atrás en mi casa. 92 00:04:44,050 --> 00:04:46,610 Se pone muy complicado, pero es muy poderoso. 93 00:04:46,610 --> 00:04:47,460 Y es muy viejo. 94 00:04:47,460 --> 00:04:51,117 Es a partir de los años 80, y que es muy bonito y pequeño. 95 00:04:51,117 --> 00:04:51,950 CONNOR HARRIS: Sí. 96 00:04:51,950 --> 00:04:54,230 Todo el clásico de Nintendo videojuegos haría probablemente 97 00:04:54,230 --> 00:04:56,088 tener archivos MIDI para la música, por ejemplo. 98 00:04:56,088 --> 00:04:59,550 99 00:04:59,550 --> 00:05:01,740 >> STEPHEN Krewson: He aquí un ejemplo de MIDI general 100 00:05:01,740 --> 00:05:06,520 mostrando MIDI como una especie del protocolo general. 101 00:05:06,520 --> 00:05:13,280 Y creo que podemos pensar en el diferencia entre la especificación 102 00:05:13,280 --> 00:05:17,830 que debe haber algo así como suena estos instrumentos y el real 103 00:05:17,830 --> 00:05:21,740 realización de esos instrumentos suena en una fuente de sonido o un MIDI en particular 104 00:05:21,740 --> 00:05:25,740 sintetizador como la diferencia entre tal vez un typeface-- que dice: 105 00:05:25,740 --> 00:05:30,350 en general, este es el diseño de de esta manera particular, para representar 106 00:05:30,350 --> 00:05:35,907 characters-- y una fuente en particular que tiene un tamaño y timbre específico, 107 00:05:35,907 --> 00:05:37,240 y no hay realización de el-- 108 00:05:37,240 --> 00:05:39,156 >> CONNOR HARRIS: Tal vez un mejor comparación sería 109 00:05:39,156 --> 00:05:43,430 ser el estándar Unicode says-- da un número para cada personaje, y realmente 110 00:05:43,430 --> 00:05:46,830 todos los idiomas del mundo, o un vasto conjunto de scripts del lenguaje 111 00:05:46,830 --> 00:05:51,310 en el mundo, y entonces esas son dictada en algo gráfica 112 00:05:51,310 --> 00:05:53,710 por diversos paquetes de fuentes. 113 00:05:53,710 --> 00:05:56,630 Y, obviamente, que se pueda imaginar MIDI como el Unicode de sonido. 114 00:05:56,630 --> 00:06:03,250 Y es sólo una lista de-- una gran corriente de los acontecimientos y los instrumentos y todo eso, 115 00:06:03,250 --> 00:06:06,090 y hay que tener una separada programa, como un tipo de letra, 116 00:06:06,090 --> 00:06:08,537 para hacer esto en algo que es audible. 117 00:06:08,537 --> 00:06:12,360 118 00:06:12,360 --> 00:06:13,780 >> STEPHEN Krewson: Entonces, ¿por Haskell? 119 00:06:13,780 --> 00:06:19,110 Haskell es una programación funcional idioma, muy avanzado, 120 00:06:19,110 --> 00:06:22,770 muy diferente de C, muy diferente de PHP. 121 00:06:22,770 --> 00:06:28,120 Y vamos a ver que hay una facilidad de composición de funciones en Haskell 122 00:06:28,120 --> 00:06:37,640 que nos permitirá pasar rápidamente por componer o escribir arriba, 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 tiene una gran cantidad de partes en este momento que son auto-similar o repetir. 125 00:06:46,815 --> 00:06:49,740 126 00:06:49,740 --> 00:06:53,250 Así que esto va a ser algunos de la motivación de por qué 127 00:06:53,250 --> 00:06:59,400 estamos usando Haskell, en el que funciones son ciudadanos de primera clase. 128 00:06:59,400 --> 00:07:01,120 >> Y yo quería ampliar esto un poco. 129 00:07:01,120 --> 00:07:08,800 Es un poco fácil anotar Frere Jacques en Haskell. 130 00:07:08,800 --> 00:07:12,100 Pero lo que si queríamos añadir una parte de batería a ella? 131 00:07:12,100 --> 00:07:17,320 Lo que si queríamos intentar hacer algo así como un tambor de Roland 808 o 909 132 00:07:17,320 --> 00:07:20,970 equipo en el que usted tiene aproximadamente 16 diferentes pasos? 133 00:07:20,970 --> 00:07:24,590 Por lo general, estos son pensado en notas como 16. 134 00:07:24,590 --> 00:07:28,640 Y usted puede controlar lo global tempo, y se puede seleccionar 135 00:07:28,640 --> 00:07:34,620 un montón de diferentes partes de percusión de bombo, un aplauso, diferentes trampas, 136 00:07:34,620 --> 00:07:37,540 sombreros altos abiertos y cerrados en este tipo de canales, 137 00:07:37,540 --> 00:07:41,600 y entonces usted puede ecualizar o ajustar su volumen. 138 00:07:41,600 --> 00:07:45,290 >> Y vamos a ver de una manera agradable en Haskell de representación de este paso 139 00:07:45,290 --> 00:07:48,810 secuenciador con toda la varias cosas interesantes en Haskell 140 00:07:48,810 --> 00:07:53,100 que podemos hacer con generar listas y filtrado de más de listas, 141 00:07:53,100 --> 00:07:56,060 mapeo sobre listas, la cartografía funciones más listas. 142 00:07:56,060 --> 00:07:59,530 143 00:07:59,530 --> 00:08:00,760 Y una disculpa rápida. 144 00:08:00,760 --> 00:08:05,300 Esta es una muy somera y boceto excesivamente rápida 145 00:08:05,300 --> 00:08:07,620 de algunos de los aspectos de Haskell y Euterpea, 146 00:08:07,620 --> 00:08:11,760 que es un dominio específico- lenguaje incrustado escrito 147 00:08:11,760 --> 00:08:14,970 en Haskell para este tipo de música. 148 00:08:14,970 --> 00:08:17,350 Así que por favor revisar el código en línea. 149 00:08:17,350 --> 00:08:22,404 Arranca GHCi, que es el Glasgow Haskell Compiler intérprete. 150 00:08:22,404 --> 00:08:24,320 Y voy a estar haciendo algunos de esto en un poco 151 00:08:24,320 --> 00:08:25,880 para que pueda ver cómo se hace. 152 00:08:25,880 --> 00:08:31,021 >> Y esto le permite cargar con el-- la sintaxis es dos puntos y después 153 00:08:31,021 --> 00:08:31,520 El comando. 154 00:08:31,520 --> 00:08:33,510 Puede cargar en los archivos. 155 00:08:33,510 --> 00:08:36,840 Puede usar navegar en esos archivos para ver todas las funciones que 156 00:08:36,840 --> 00:08:39,169 existir en un módulo particular. 157 00:08:39,169 --> 00:08:43,850 Y luego, como veremos, los tipos y el tipo clases son tan importantes en Haskell, 158 00:08:43,850 --> 00:08:48,850 para que siempre pueda check-- especialmente si está trabajando en una nueva DSCL 159 00:08:48,850 --> 00:08:51,600 así, lo que es un tipo de música? 160 00:08:51,600 --> 00:08:55,114 Lo que sé sobre la forma numérica tipos trabajan en Haskell, 161 00:08:55,114 --> 00:08:56,530 pero yo no sé mucho de música. 162 00:08:56,530 --> 00:09:01,280 Pero usted puede explorar la forma en que son definido por el uso de este tipo de comando o t 163 00:09:01,280 --> 00:09:04,577 y luego llamar a un particular, función o un objeto de datos. 164 00:09:04,577 --> 00:09:05,410 CONNOR HARRIS: Sí. 165 00:09:05,410 --> 00:09:09,820 Si pensabas C y Clang fue hardass acerca de los tipos, 166 00:09:09,820 --> 00:09:11,230 usted no tiene idea acerca de Haskell. 167 00:09:11,230 --> 00:09:14,230 Lo bueno es que Haskell si usted puede conseguir su código para compilar 168 00:09:14,230 --> 00:09:16,790 y si los controles de tipo Haskell, es probable que sea correcto, 169 00:09:16,790 --> 00:09:18,675 debido a que el sistema de tipos es tan estricta. 170 00:09:18,675 --> 00:09:20,090 >> STEPHEN Krewson: Sí. 171 00:09:20,090 --> 00:09:21,980 Así que sólo quiero ir through-- y otra vez, 172 00:09:21,980 --> 00:09:27,160 esto no lo está haciendo justice-- algunas de las características de Haskell que, al menos 173 00:09:27,160 --> 00:09:31,780 a su creators-- y fue creado a finales de 1980 por un grupo de personas, 174 00:09:31,780 --> 00:09:34,610 una comisión de alrededor de 20 personas-- pensado eran importantes. 175 00:09:34,610 --> 00:09:36,850 Y lo primero que figuran en un documento que 176 00:09:36,850 --> 00:09:41,890 descrito la génesis de Haskell durante los primeros 20 años más o menos 177 00:09:41,890 --> 00:09:43,390 fue que era perezoso. 178 00:09:43,390 --> 00:09:44,990 Entonces, ¿qué significa esto? 179 00:09:44,990 --> 00:09:49,860 >> Bueno, significa que cuando tenemos algún tipo de expresión, hay que evaluarlo. 180 00:09:49,860 --> 00:09:54,390 Y Haskell hace de una llamada por la necesidad manera o de una manera no estricta. 181 00:09:54,390 --> 00:09:57,250 Es decir, si tenemos un montón de componentes de nuestra expresión, 182 00:09:57,250 --> 00:10:00,660 tratamos de retrasar la evaluación de esos subcomponentes 183 00:10:00,660 --> 00:10:05,300 hasta que la absoluta última minuto-- es decir, hasta que realmente los necesitamos. 184 00:10:05,300 --> 00:10:08,480 >> Así que este designa todas que es realmente genial, especialmente 185 00:10:08,480 --> 00:10:13,200 si estamos pensando en la abstracción de un paso secuenciador musical. 186 00:10:13,200 --> 00:10:16,740 Tu lo haces posible, y empiezas la ejecución de un paso sequence-- 187 00:10:16,740 --> 00:10:20,010 si alguna vez trabajó con un tambor automático-- y que sólo sirve para siempre. 188 00:10:20,010 --> 00:10:24,650 Así que sería muy bueno si nos podrían emular que en Haskell. 189 00:10:24,650 --> 00:10:31,040 Y podemos hacerlo con infinita valores, en particular las listas infinitas. 190 00:10:31,040 --> 00:10:35,860 Es muy fácil de escribir un lista infinita en Haskell. 191 00:10:35,860 --> 00:10:39,230 Usted sólo puede utilizar la sintaxis abajo aquí, donde se ve 1 a 3, 192 00:10:39,230 --> 00:10:42,440 quitar el punto punto 3 1, y es decir una lista infinita 193 00:10:42,440 --> 00:10:46,960 de todos los números naturales que se extiende en la medida de lo que puedas imaginar. 194 00:10:46,960 --> 00:10:49,925 >> Quiero introducir un concepto de pliegues de inmediato. 195 00:10:49,925 --> 00:10:51,800 Y de nuevo, el propósito de este seminario no es 196 00:10:51,800 --> 00:10:55,770 para aprender acerca de pliegues en Haskell o funciones de orden superior. 197 00:10:55,770 --> 00:10:59,640 Pero yo sólo quiero presentar a dar un sentido exacto de lo extraño 198 00:10:59,640 --> 00:11:03,700 Haskell es y lo poderoso que es. 199 00:11:03,700 --> 00:11:08,000 Y en particular, vamos a ser-- cuando hacemos nuestras diferentes partes de batería, 200 00:11:08,000 --> 00:11:12,790 vamos a estar manipulando listas de números, doblarlos una sobre otra. 201 00:11:12,790 --> 00:11:17,290 Y para hacer eso, vamos a ser el uso de mapas y pliegues. 202 00:11:17,290 --> 00:11:21,770 >> Hay un derecho asociativo pliegue, que es este derecho 203 00:11:21,770 --> 00:11:26,990 aquí-- 1 menos la cantidad, 2 menos la cantidad, 3 minus 0. 204 00:11:26,990 --> 00:11:29,170 Y la sintaxis de una veces, le das un pliegue 205 00:11:29,170 --> 00:11:34,680 un valor base y luego una operation-- en este caso, adición o sustracción. 206 00:11:34,680 --> 00:11:36,280 He mostrado ambos casos. 207 00:11:36,280 --> 00:11:41,760 Y luego está un acumulador que acumula más de toda la lista, 208 00:11:41,760 --> 00:11:46,330 aplicar ese plus operador o menos y, a continuación, la acumulación de la misma. 209 00:11:46,330 --> 00:11:52,680 Así que este será el-- si fuera llamado con pliegue r plus de 0, comenzando con 0, 210 00:11:52,680 --> 00:11:54,720 tendríamos entonces resumir todo los números en esa lista. 211 00:11:54,720 --> 00:11:57,134 Y eso es una lista de 1 a 3. 212 00:11:57,134 --> 00:12:00,050 CONNOR HARRIS: Así que para decirlo de otra manera, pliegue r toma tres argumentos. 213 00:12:00,050 --> 00:12:02,540 Hay una función que sí toma dos argumentos, 214 00:12:02,540 --> 00:12:05,400 entonces hay un valor de arranque, y hay una lista de valores. 215 00:12:05,400 --> 00:12:08,570 Y lo que se hace es tomar valor de arranque, primer valor, 216 00:12:08,570 --> 00:12:09,850 ponerlos en la función. 217 00:12:09,850 --> 00:12:11,607 ¿Qué se obtiene a cabo, tomar eso, alimentación que 218 00:12:11,607 --> 00:12:13,940 en la función de la segundo valor, lo que se obtiene, 219 00:12:13,940 --> 00:12:16,690 tener que alimentar que en el función de la tercera valor. 220 00:12:16,690 --> 00:12:18,740 Y entonces si usted va abajo toda esta lista de esta manera, 221 00:12:18,740 --> 00:12:22,970 usted va a conseguir con el tiempo algún valor singular que es 222 00:12:22,970 --> 00:12:25,720 del mismo tipo de lo que empezaste con y del mismo tipo 223 00:12:25,720 --> 00:12:29,147 como cosas en la lista y, a continuación eso es el resultado de retorno del pliegue R. 224 00:12:29,147 --> 00:12:31,980 STEPHEN Krewson: Así que, en particular, éstas son funciones de orden superior, 225 00:12:31,980 --> 00:12:34,460 porque están tomando otro función como uno de los argumentos. 226 00:12:34,460 --> 00:12:34,770 >> CONNOR HARRIS: Sí. 227 00:12:34,770 --> 00:12:37,820 Si ha utilizado algunos otros Las Lenguas sé R, [inaudible] 228 00:12:37,820 --> 00:12:41,510 lenguaje tiene esta, llamada Reducir. 229 00:12:41,510 --> 00:12:45,460 Es posible que tenga funciones similares en otros idiomas, acaba de llamar 230 00:12:45,460 --> 00:12:48,160 cosas diferentes. 231 00:12:48,160 --> 00:12:50,680 >> STEPHEN Krewson: Y lo bueno de pliegue R 232 00:12:50,680 --> 00:12:53,880 en este caso es que veces R puede trabajar con listas infinitas. 233 00:12:53,880 --> 00:12:59,490 Así que en este fondo, este P5 está generando las notas que 234 00:12:59,490 --> 00:13:03,120 se encienden en el secuenciador por pasos para alguna parte de batería, la quinta parte de batería, 235 00:13:03,120 --> 00:13:05,480 y tal vez se trata de una conga tambor o algo así. 236 00:13:05,480 --> 00:13:09,719 Y esta es una forma deliberada manera obtusa de escribir esto, 237 00:13:09,719 --> 00:13:11,510 pero es divertido, porque demuestra una gran cantidad 238 00:13:11,510 --> 00:13:14,460 cosas sobre Haskell y Euterpea. 239 00:13:14,460 --> 00:13:20,650 >> Así pliegue R de esta colon-- de colon es Sólo un operador que empuja cosas 240 00:13:20,650 --> 00:13:25,700 juntos en un películas-- pedido a un vacío lista, que es sólo los soportes vacíos. 241 00:13:25,700 --> 00:13:28,250 Y estoy llamando a que en esta lista infinita. 242 00:13:28,250 --> 00:13:31,570 Esto es en realidad dos listas suman aquí. 243 00:13:31,570 --> 00:13:37,150 La lista 1 comas 6 puntos dot es 1, 6, 11, 16. 244 00:13:37,150 --> 00:13:39,750 Así Haskell-- en solo unos pocos caracteres, 245 00:13:39,750 --> 00:13:42,420 puede generar la totalidad secuencia de números 246 00:13:42,420 --> 00:13:46,240 que son cinco números separados se extiende hasta el infinito. 247 00:13:46,240 --> 00:13:49,860 Y yo Anteponer para que este pequeño películas-- más corto 248 00:13:49,860 --> 00:13:54,370 3, 8, 21-- sólo para mostrar cómo se puede concatenar listas. 249 00:13:54,370 --> 00:13:55,790 >> Y entonces he doblado sobre sí mismo. 250 00:13:55,790 --> 00:14:01,510 Y esto termina simplemente ser una especie de operación de identidad, pero es infinita. 251 00:14:01,510 --> 00:14:06,070 Y doble R puede hacer eso, porque perezosamente evalúa, como en el anterior. 252 00:14:06,070 --> 00:14:10,582 Si tenemos un 1 y un 2 y 3, podemos simplemente poner entre paréntesis la totalidad del resto de ella. 253 00:14:10,582 --> 00:14:12,290 Eso no va a funcionar para menos o más, pero 254 00:14:12,290 --> 00:14:17,760 trabajará para este de colon operación de la identidad en la lista. 255 00:14:17,760 --> 00:14:24,620 >> Entonces, ¿cómo usamos prácticamente que si tener una infinitamente larga lista de cosas? 256 00:14:24,620 --> 00:14:26,500 Bueno, Haskell proporciona una gran cantidad de functions-- 257 00:14:26,500 --> 00:14:29,450 y mirar más en estos en su tiempo-- como tomar 258 00:14:29,450 --> 00:14:32,200 que dice, está bien, estamos generar esta lista infinita, 259 00:14:32,200 --> 00:14:35,950 pero sólo vamos a tomar algún número de la misma y en este caso-- 260 00:14:35,950 --> 00:14:38,410 ya veremos esto más adelante en nuestra code-- caja de ritmos 261 00:14:38,410 --> 00:14:43,740 GM es sólo una especie de mundial variable para el número de pasos 262 00:14:43,740 --> 00:14:44,610 en el secuenciador. 263 00:14:44,610 --> 00:14:47,630 En las máquinas de rodillo-in me que mostraron, eso es por lo general 16, 264 00:14:47,630 --> 00:14:51,475 pero he implementado con 32. 265 00:14:51,475 --> 00:14:54,470 En realidad no importa. 266 00:14:54,470 --> 00:15:00,230 >> Haskell también es puro, por lo que tiene una fuerte tipos estáticos que Connor aludido. 267 00:15:00,230 --> 00:15:03,220 Así funciones son matemática en el sentido-- 268 00:15:03,220 --> 00:15:06,600 son más matemática que están garantizados 269 00:15:06,600 --> 00:15:11,530 a no acceder o cambiar cualquier tipo de variable o realizar entrada o salida. 270 00:15:11,530 --> 00:15:14,420 Así que si usted tiene una función, es determinista. 271 00:15:14,420 --> 00:15:17,400 Siempre va a devolver el mismo valor en el estado del programa 272 00:15:17,400 --> 00:15:19,310 o siendo el mismo. 273 00:15:19,310 --> 00:15:22,940 Hay, por supuesto, excepciones monádicos a esto, pero eso es más allá de nuestro alcance. 274 00:15:22,940 --> 00:15:23,900 >> CONNOR HARRIS: Sí. 275 00:15:23,900 --> 00:15:26,946 Lo que esto significa, sin embargo, está ahí son algunos importantes [inaudible] 276 00:15:26,946 --> 00:15:27,820 consecuencias de esto. 277 00:15:27,820 --> 00:15:30,940 Una de ellas es que es muy fácil paralelizar programas Haskell. 278 00:15:30,940 --> 00:15:32,773 Porque si usted tiene, decir, una función de ese 279 00:15:32,773 --> 00:15:36,064 tiene que operar en un millón de valores, si usted sabe que la función será siempre 280 00:15:36,064 --> 00:15:39,280 dar a conocer el mismo valor si usted alimenta a una cierta value-- 281 00:15:39,280 --> 00:15:43,055 si usted es [inaudible] f 1, f de 2, entonces f de 3 o whatnot-- f de 1 282 00:15:43,055 --> 00:15:45,180 no va a escribir en un archivo o hacer algo 283 00:15:45,180 --> 00:15:46,850 que alterará el valor de f2. 284 00:15:46,850 --> 00:15:50,220 Usted sólo puede dividir esta función a un millón de máquinas diferentes o un millón 285 00:15:50,220 --> 00:15:54,720 diferentes hilos o lo que sea, obtener todas las respuestas de vuelta, 286 00:15:54,720 --> 00:15:56,900 obtener todos los valores de retorno espalda, y luego ya está. 287 00:15:56,900 --> 00:15:59,780 Así que es muy fácil de paralelizar cosas. 288 00:15:59,780 --> 00:16:03,140 >> Lo malo es que de entrada y la salida especialmente 289 00:16:03,140 --> 00:16:05,720 encajar en el sistema de tipos en formas muy complicadas. 290 00:16:05,720 --> 00:16:09,010 No vamos a entrar en eso ahora mismo, pero yo le animamos a mirar algunos recursos 291 00:16:09,010 --> 00:16:11,175 en línea si usted quiere aprender acerca de eso. 292 00:16:11,175 --> 00:16:13,960 293 00:16:13,960 --> 00:16:16,550 >> STEPHEN Krewson: Así escriba classes-- y esto 294 00:16:16,550 --> 00:16:21,610 era-- clases de tipos se inventaron para resolver 295 00:16:21,610 --> 00:16:24,160 un problema de la sobrecarga de operadores. 296 00:16:24,160 --> 00:16:27,590 Así que queríamos tener la igualdad entre los diferentes tipos de cosas. 297 00:16:27,590 --> 00:16:31,040 Por supuesto, podríamos pensar de-- igualdad entre tipos numéricos 298 00:16:31,040 --> 00:16:34,720 es muy fácil de pensar, pero ¿qué pasa con la igualdad entre las listas? 299 00:16:34,720 --> 00:16:37,610 ¿Qué pasa con la igualdad entre estructuras de datos pierna árbol? 300 00:16:37,610 --> 00:16:43,130 Y todo esto es posible en Haskell por clases de tipos. 301 00:16:43,130 --> 00:16:48,000 >> Así que si se define un determinado type-- datos y aquí, estos son tonos musicales. 302 00:16:48,000 --> 00:16:50,960 Finalmente estamos consiguiendo un poco de música de ordenador. 303 00:16:50,960 --> 00:16:57,420 Así que tenemos C, C aguda, y así sucesivamente y así sucesivamente. 304 00:16:57,420 --> 00:17:01,080 Pertenecen a un grupo de diferentes clases de tipos. 305 00:17:01,080 --> 00:17:03,510 EQ-- que pertenecen a la clase de tipo de EQ. 306 00:17:03,510 --> 00:17:06,780 Eso significa que ellos apoyan operaciones de igualdad. 307 00:17:06,780 --> 00:17:12,650 Así que usted puede evaluar si un solo secuencia de primitivas musicales 308 00:17:12,650 --> 00:17:15,400 es el mismo que uno diferente. 309 00:17:15,400 --> 00:17:17,280 >> Pertenecen a la clase ordinal. 310 00:17:17,280 --> 00:17:19,479 Eso significa que hay un orden para estos. 311 00:17:19,479 --> 00:17:27,670 D se produce después de C. C aguda viene después de C también. 312 00:17:27,670 --> 00:17:29,840 Pertenecen a la clase mostrar, lo que significa que pueden 313 00:17:29,840 --> 00:17:33,000 imprimirse a una consola o terminal. 314 00:17:33,000 --> 00:17:36,090 Pertenecen a la clase enumerado, que 315 00:17:36,090 --> 00:17:39,770 significa que aunque estos son los personajes, 316 00:17:39,770 --> 00:17:45,340 tienen una numérico subyacente representación a partir de las 0 317 00:17:45,340 --> 00:17:48,960 y salirse a través de embargo muchas cosas están aquí, 20 más o menos, 318 00:17:48,960 --> 00:17:51,770 o 30 o 40, tal vez. 319 00:17:51,770 --> 00:17:54,259 >> CONNOR HARRIS: Y cuando tenemos un tipo de datos 320 00:17:54,259 --> 00:17:57,050 que derives-- con esa palabra clave "deriving--" una cierta clase de tipo, 321 00:17:57,050 --> 00:18:01,160 significa que el compilador intentará construir algo automáticamente. 322 00:18:01,160 --> 00:18:05,120 Así que tal vez querrás definir una calidad diferente. 323 00:18:05,120 --> 00:18:09,450 Usted querrá definir Do sostenido como igual a D plana, por ejemplo. 324 00:18:09,450 --> 00:18:11,560 Con esta construcción aquí, no creo Do sostenido 325 00:18:11,560 --> 00:18:14,940 y plano D será igual, porque el compilador automáticamente 326 00:18:14,940 --> 00:18:19,670 decir que cada valor diferente posible es distinto de todos los demás. 327 00:18:19,670 --> 00:18:22,930 >> Por lo que es posible anular las implementaciones por defecto 328 00:18:22,930 --> 00:18:25,730 de estos tipos de clases. 329 00:18:25,730 --> 00:18:28,640 Una vez más, mira la referencia si quieres aprender sobre eso. 330 00:18:28,640 --> 00:18:31,767 331 00:18:31,767 --> 00:18:33,600 STEPHEN Krewson: Y aquí, en realidad, esto va a 332 00:18:33,600 --> 00:18:36,930 ser útil para cuando codificamos después. 333 00:18:36,930 --> 00:18:42,150 Vemos algunos de los operadores infijos para la composición secuencial, 334 00:18:42,150 --> 00:18:46,570 composición paralela, y por lo tanto sucesivamente, estas ventajas y signos de igual 335 00:18:46,570 --> 00:18:48,620 rodeada por dos puntos. 336 00:18:48,620 --> 00:18:53,330 Eso significa que podemos jugar estos diferentes primitivas musicales uno tras otro. 337 00:18:53,330 --> 00:18:54,590 Esa es la composición secuencial. 338 00:18:54,590 --> 00:18:57,170 >> O podemos reproducirlos en paralelo al mismo tiempo. 339 00:18:57,170 --> 00:19:05,100 Así que puedo tener un valor musical, y luego esto es igual y dos puntos, 340 00:19:05,100 --> 00:19:09,669 infijo operador de composición paralela, y reproducirlos como un tipo de acorde. 341 00:19:09,669 --> 00:19:11,460 Y vamos a utilizar esto cuando combinamos 342 00:19:11,460 --> 00:19:15,080 nuestra parte de batería con nuestro cancioncita Frere Jacques 343 00:19:15,080 --> 00:19:19,460 jugar estas dos secuencias de valores musicales al mismo tiempo. 344 00:19:19,460 --> 00:19:24,520 345 00:19:24,520 --> 00:19:29,250 >> Currying Curry es-- por última vez nombre de Haskell Curry, quien 346 00:19:29,250 --> 00:19:31,850 la imagen Haskell se nombra después. 347 00:19:31,850 --> 00:19:34,330 Y esto nos permite una agradable elegancia cuando estamos 348 00:19:34,330 --> 00:19:36,880 escribir todos estos diferentes funciones o filtros que estamos 349 00:19:36,880 --> 00:19:39,330 va a ser la cartografía sobre nuestras listas. 350 00:19:39,330 --> 00:19:42,810 Una función de dos arguments-- f de x e Y- 351 00:19:42,810 --> 00:19:46,630 se puede representar como f de x aplica a y. 352 00:19:46,630 --> 00:19:49,800 Así que es una función de la un argumento que devuelve 353 00:19:49,800 --> 00:19:51,240 otra función de un argumento. 354 00:19:51,240 --> 00:19:56,962 Así que esto significa que podemos asignar una función f de x sobre la lista de y de. 355 00:19:56,962 --> 00:19:58,920 CONNOR HARRIS: ¿Quieres dar un ejemplo de esto? 356 00:19:58,920 --> 00:19:59,836 STEPHEN Krewson: Sí. 357 00:19:59,836 --> 00:20:05,390 Tengo un ejemplo aquí desde algunas de las cosas que vamos a escribir. 358 00:20:05,390 --> 00:20:10,500 Así replicar 2-- así, replicar tendrá 359 00:20:10,500 --> 00:20:13,040 un valor, que es cuántos veces para replicar algo, 360 00:20:13,040 --> 00:20:16,690 y luego tomará un value-- por lo general una lista o algo. 361 00:20:16,690 --> 00:20:23,450 Así que aquí, estamos mapeo replicar 2 sobre otra lista. 362 00:20:23,450 --> 00:20:27,440 >> Así que si mapeamos replicar 2, si replicamos 2 aplica 363 00:20:27,440 --> 00:20:31,890 al primer elemento de este películas-- y estos son listas de phrases-- musical 364 00:20:31,890 --> 00:20:37,650 producirá dos de "usted sleeping--" así que estás durmiendo, estás durmiendo. 365 00:20:37,650 --> 00:20:40,040 Así que ahora tenemos dos. 366 00:20:40,040 --> 00:20:42,570 Pero la réplica necesitan dos argumentos, sino porque estamos 367 00:20:42,570 --> 00:20:47,100 currying y luego mapeo, podemos representar la réplica 2 368 00:20:47,100 --> 00:20:52,310 como habiendo sido devuelta como una función de un solo argument-- simplemente replicando dos veces. 369 00:20:52,310 --> 00:20:57,010 Y luego estamos aplicando eso a cada uno elemento de esta lista de frases. 370 00:20:57,010 --> 00:21:01,900 >> Y concat es un Haskell operación para aplanar una lista. 371 00:21:01,900 --> 00:21:04,400 Debido a que la réplica 2 voluntad producir una lista de listas. 372 00:21:04,400 --> 00:21:06,660 Y esta es la forma intermedia aquí. 373 00:21:06,660 --> 00:21:10,365 Y así entonces podemos concat o aplanar que fuera dos veces. 374 00:21:10,365 --> 00:21:12,240 CONNOR HARRIS: Un simple ejemplo de currificación, 375 00:21:12,240 --> 00:21:15,323 si hubieras como-- imaginar f es sólo un función de multiplicación que tarda de dos 376 00:21:15,323 --> 00:21:16,840 argumentos y devuelve su producto. 377 00:21:16,840 --> 00:21:19,320 Así que si usted tiene una f 4 5, es 20. 378 00:21:19,320 --> 00:21:22,670 Pero usted puede pensar en esto como También-- usted tiene una función f 4 379 00:21:22,670 --> 00:21:25,560 que toma un argumento y devoluciones cuatro veces este argument-- solo 380 00:21:25,560 --> 00:21:27,870 aplicación parcial que sólo un argumento 4. 381 00:21:27,870 --> 00:21:31,182 Y si usted alimenta f de 4 5, que le dará 20. 382 00:21:31,182 --> 00:21:32,890 Y eso es una simple ejemplo de currificación. 383 00:21:32,890 --> 00:21:34,473 Por lo general es uno de los libros de texto. 384 00:21:34,473 --> 00:21:38,860 385 00:21:38,860 --> 00:21:42,110 >> STEPHEN Krewson: Lambda expresiones o funciones anónimas 386 00:21:42,110 --> 00:21:47,330 son otro sello distintivo de Haskell. 387 00:21:47,330 --> 00:21:51,242 Así que si tenemos que preparar una pequeña réplica vida función, 388 00:21:51,242 --> 00:21:52,950 pero dicen que no está en la biblioteca estándar, 389 00:21:52,950 --> 00:21:56,150 podemos utilizar una sintaxis similar a la siguiente. 390 00:21:56,150 --> 00:21:58,730 Y vamos a brisa sobre esto. 391 00:21:58,730 --> 00:22:02,160 Una cosa que usted verá un montón de en el caja de ritmos es que estamos haciendo llamadas 392 00:22:02,160 --> 00:22:05,790 a algo llamado filtrar, que al igual que antes, 393 00:22:05,790 --> 00:22:08,185 es una asignación de una función más de una lista, pero es 394 00:22:08,185 --> 00:22:10,260 una asignación de una función booleana. 395 00:22:10,260 --> 00:22:13,390 >> Así que aquí tenemos un ejemplo de una forma anónima 396 00:22:13,390 --> 00:22:19,150 función booleana que define sólo toma un par de valores. 397 00:22:19,150 --> 00:22:22,990 Esto no es estrictamente hablando una función anónima. 398 00:22:22,990 --> 00:22:25,850 Pero es definir con que la sintaxis por razones de brevedad, 399 00:22:25,850 --> 00:22:28,007 y esto sólo se necesita x módulo n-- 400 00:22:28,007 --> 00:22:28,840 CONNOR HARRIS: Sí. 401 00:22:28,840 --> 00:22:31,330 Así que f es una función de dos argumentos n y p 402 00:22:31,330 --> 00:22:35,440 que devuelve una función que es en sí misma una función de un argumento, a saber, x. 403 00:22:35,440 --> 00:22:38,815 404 00:22:38,815 --> 00:22:40,690 STEPHEN Krewson: I operadores infijos mencionado. 405 00:22:40,690 --> 00:22:42,642 ¿Cuáles son los operadores infijos? 406 00:22:42,642 --> 00:22:45,710 Bueno, operadores infijos son los forma normal representamos operaciones, 407 00:22:45,710 --> 00:22:49,910 decir, en matemáticas-- 2 más 2 en lugar del operador más 408 00:22:49,910 --> 00:22:51,202 y luego dos argumentos 2 y 2. 409 00:22:51,202 --> 00:22:53,701 CONNOR HARRIS: Se llama notación polaca inversa, que es 410 00:22:53,701 --> 00:22:55,330 un término dudo alguno de ustedes sabría. 411 00:22:55,330 --> 00:22:56,288 >> STEPHEN Krewson: Correcto. 412 00:22:56,288 --> 00:22:58,290 Notación polaca inversa o prefijo. 413 00:22:58,290 --> 00:23:01,412 Pero Haskell decidió utilizar operadores infijos. 414 00:23:01,412 --> 00:23:03,120 Así que estos son algunos de los personalizados que 415 00:23:03,120 --> 00:23:07,770 se definen para la Euterpea DSCL en Haskell. 416 00:23:07,770 --> 00:23:10,730 Así que esta era la composición secuencial. 417 00:23:10,730 --> 00:23:16,340 Este fue composición paralela, y esto fue truncando composición paralela. 418 00:23:16,340 --> 00:23:18,710 Y necesitaremos que con nuestra caja de ritmos, 419 00:23:18,710 --> 00:23:22,640 porque vamos a utilizar la última operador en ese pequeño tupla no 420 00:23:22,640 --> 00:23:26,330 a tocar la caja de ritmos a lo largo con nuestra canción Frere Jacques. 421 00:23:26,330 --> 00:23:28,650 Y nuestra caja de ritmos es va a ser infinito. 422 00:23:28,650 --> 00:23:30,920 Simplemente juega siempre. 423 00:23:30,920 --> 00:23:32,692 Pero la canción Frere Jacques no lo es. 424 00:23:32,692 --> 00:23:33,510 No es tanto tiempo. 425 00:23:33,510 --> 00:23:36,610 Es sólo un par de bares. 426 00:23:36,610 --> 00:23:43,030 Así que tenemos que detener la caja de ritmos como pronto como el valor musical más corta viene 427 00:23:43,030 --> 00:23:43,700 a su fin. 428 00:23:43,700 --> 00:23:46,980 Y ese operador infijo es super servicial con eso. 429 00:23:46,980 --> 00:23:50,090 >> Y infijo notación como esto es un poco agradable, 430 00:23:50,090 --> 00:23:57,095 porque dice que tiene una función como cita, la cual da la división entera 431 00:23:57,095 --> 00:24:01,010 de x por algo else-- lo siento, eso debería ser a y b. 432 00:24:01,010 --> 00:24:04,740 Se puede escribir como una cita de b. 433 00:24:04,740 --> 00:24:09,670 Así que si usted es elemento put-- Otro ejemplo de esto. 434 00:24:09,670 --> 00:24:14,730 x elemento de alguna lista, si pones en acentos abiertos, usted puede utilizarlo. 435 00:24:14,730 --> 00:24:20,400 A pesar de que no es un símbolo como más o menos o los tiempos, 436 00:24:20,400 --> 00:24:24,630 se puede utilizar el nombre de una función como la de acentos abiertos 437 00:24:24,630 --> 00:24:27,045 como operador infijo, que está muy bien. 438 00:24:27,045 --> 00:24:29,670 CONNOR HARRIS: Una vez más, esto es todo el azúcar solo sintáctica, la verdad. 439 00:24:29,670 --> 00:24:32,310 No afecta el núcleo del lenguaje. 440 00:24:32,310 --> 00:24:37,440 >> STEPHEN Krewson: Así que vemos aquí por el última frase de nuestra canción Frere Jacques, 441 00:24:37,440 --> 00:24:45,740 Jugué algunos pequeños acordes o terceras partes que utilizan la 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 es otra forma de decir alguna de lo que hemos estado diciendo. 445 00:24:54,950 --> 00:24:59,986 Así que usted puede asignar funciones de un argumento sobre listas. 446 00:24:59,986 --> 00:25:02,860 CONNOR HARRIS: Una vez más, las referencias los libros de texto introductorios Haskell-- 447 00:25:02,860 --> 00:25:04,680 tendrá todo esto en el mismo. 448 00:25:04,680 --> 00:25:07,790 >> STEPHEN Krewson: Así que aquí está un muy línea clave del secuenciador por pasos 449 00:25:07,790 --> 00:25:12,820 vamos a echar un vistazo a utilizar una comprensión lista. 450 00:25:12,820 --> 00:25:17,810 Y vemos aquí es que el elemento en el operador fija entre comillas espalda. 451 00:25:17,810 --> 00:25:23,030 Así que si x es un elemento de la lista de xy, entonces nos van a llamar a funciones perc. 452 00:25:23,030 --> 00:25:25,100 Así perc es sólo una función de percusión. 453 00:25:25,100 --> 00:25:30,200 Se necesita algo de valor de p que es parte del conjunto acotado de todos 454 00:25:30,200 --> 00:25:35,310 los diferentes sonidos de percusión que vimos en una diapositiva anterior, 455 00:25:35,310 --> 00:25:38,840 y luego se da esa duración de una negra. 456 00:25:38,840 --> 00:25:43,190 De lo contrario le da un regiones QNR y regiones QNR es sólo un descanso negra. 457 00:25:43,190 --> 00:25:44,970 >> Así que esto es la construcción de algo agradable. 458 00:25:44,970 --> 00:25:52,110 Tenemos una lista de elementos, y Vamos a lazo sobre alguna lista de uno 459 00:25:52,110 --> 00:25:54,540 al valor máximo de nuestra secuenciador por pasos. 460 00:25:54,540 --> 00:25:58,290 Y cuando estamos en un i particular esa lista de uno al valor máximo, 461 00:25:58,290 --> 00:26:02,970 si i es un miembro de esta conjunto creado en esta función, 462 00:26:02,970 --> 00:26:06,040 bien, entonces nos convertimos en una nota de percusión. 463 00:26:06,040 --> 00:26:10,960 De lo contrario, sólo jugamos un descanso, que es decir, sólo guardamos silencio. 464 00:26:10,960 --> 00:26:16,050 Y podemos ver aquí que en esta sintaxis comprensión lista, 465 00:26:16,050 --> 00:26:20,030 x está poblada por esta Lista construido un solo 466 00:26:20,030 --> 00:26:22,462 con el tamaño global del secuenciador. 467 00:26:22,462 --> 00:26:23,295 CONNOR HARRIS: Sí. 468 00:26:23,295 --> 00:26:26,340 La sintaxis básica de listas por comprensión es 469 00:26:26,340 --> 00:26:30,810 soporte, el valor de la participación Algunas variables, bar, 470 00:26:30,810 --> 00:26:34,260 posibles valores de las variables sí mismos, cerrado soporte. 471 00:26:34,260 --> 00:26:38,545 Y si usted ha hecho fijar la notación constructor en cualquier tipo de clase de matemáticas, 472 00:26:38,545 --> 00:26:45,999 es posible que haya configurado 2n tales que n es en o n está en z. 473 00:26:45,999 --> 00:26:48,290 Similar cosa-- esta notación está destinado a ser sugerente 474 00:26:48,290 --> 00:26:49,630 de que la notación matemática. 475 00:26:49,630 --> 00:26:51,880 STEPHEN Krewson: Y usted puede aplicar múltiples predicados 476 00:26:51,880 --> 00:26:56,250 y varios filtros en una lista comprensión, que es bastante agradable. 477 00:26:56,250 --> 00:27:01,800 Algebraica que Tipos-- no perdurará mucho tiempo aquí. 478 00:27:01,800 --> 00:27:04,840 No es una buena idea en Haskell o una buena noción obvia 479 00:27:04,840 --> 00:27:10,720 de cómo tomar, digamos, un default parámetro a una función o algo así. 480 00:27:10,720 --> 00:27:13,370 En Python, esto es bastante fácil. 481 00:27:13,370 --> 00:27:18,460 Usted sólo puede decir con iguales en la declaración de la función, 482 00:27:18,460 --> 00:27:21,420 un valor por defecto en caso de que ninguno se suministra. 483 00:27:21,420 --> 00:27:27,010 >> En Haskell, podría tal vez utilizar tal vez el tipo, tal vez, 484 00:27:27,010 --> 00:27:32,190 que tiene ya sea nada o un valor de tipo sólo una. 485 00:27:32,190 --> 00:27:38,630 Así que aprovechamos esto en la caja de ritmos que nos permita dar volumen opcional 486 00:27:38,630 --> 00:27:40,730 parámetros a cada una de las partes de batería. 487 00:27:40,730 --> 00:27:46,160 488 00:27:46,160 --> 00:27:54,680 Así que eso nos da una manera de tener EQ o un volumen en un canal en particular. 489 00:27:54,680 --> 00:27:56,440 >> CONNOR HARRIS: En Otros ejemplos Haskell, 490 00:27:56,440 --> 00:28:00,450 Es posible que vea puede ser usado para funciones que pueden fallar. 491 00:28:00,450 --> 00:28:03,470 Esta es una pregunta común. 492 00:28:03,470 --> 00:28:07,010 >> STEPHEN Krewson: Y usted puede suministrar algún tipo de mensaje de error por defecto. 493 00:28:07,010 --> 00:28:11,020 Y eso es especialmente útil cuando que está haciendo la E / S en Haskell. 494 00:28:11,020 --> 00:28:12,044 Eso puede ser trucos. 495 00:28:12,044 --> 00:28:13,960 CONNOR HARRIS: O para un ejemplo similar, piensa 496 00:28:13,960 --> 00:28:17,460 de una función que implica la división de un parámetro que podría ser 0. 497 00:28:17,460 --> 00:28:20,020 Y esa función podía volver tal vez lo que sea. 498 00:28:20,020 --> 00:28:22,802 Así que si no hay división por 0, volverá simplemente lo que sea. 499 00:28:22,802 --> 00:28:25,010 Y si hay división por 0, devolverá nada 500 00:28:25,010 --> 00:28:26,910 como una forma de señalización del error. 501 00:28:26,910 --> 00:28:30,330 Debido a que una de las consecuencias de Muy estricta tipificación de Haskell 502 00:28:30,330 --> 00:28:34,100 es que no hay real-- excepciones son torpes, básicamente, 503 00:28:34,100 --> 00:28:36,160 manejo de errores es torpe. 504 00:28:36,160 --> 00:28:39,440 Y esta es una muy forma común de hacerlo. 505 00:28:39,440 --> 00:28:42,990 >> STEPHEN Krewson: Así que ahora tenemos a otra cosa endiablada 506 00:28:42,990 --> 00:28:49,160 sobre Haskell, que es el patrón definiciones coincidentes y función. 507 00:28:49,160 --> 00:28:53,390 He mostrado en la última diapositiva del declaración de la secuencia de pasos 508 00:28:53,390 --> 00:28:58,170 función, que tuvo un mejor valor, a continuación, un int, a continuación, una lista de enteros, 509 00:28:58,170 --> 00:29:03,850 a continuación, devuelve una secuencia de los valores de la música allí anotados 510 00:29:03,850 --> 00:29:05,375 tanto con el tono y volumen. 511 00:29:05,375 --> 00:29:08,030 512 00:29:08,030 --> 00:29:11,820 >> Así que los tres argumentos pueden ser patrón emparejado de la siguiente manera. 513 00:29:11,820 --> 00:29:16,660 Y siempre queremos estar seguros de que hacer un caso base o caja de salida primero. 514 00:29:16,660 --> 00:29:19,690 Y estos guiones bajos solo puede interpretarse 515 00:29:19,690 --> 00:29:22,340 para referirse a cualquier valor que está ahí. 516 00:29:22,340 --> 00:29:26,580 Así que si recibimos una llamada al paso de secuencia con algún valor, algún otro valor, 517 00:29:26,580 --> 00:29:32,210 y luego la lista vacía, lo que queremos volver es sólo silencio, un resto 0. 518 00:29:32,210 --> 00:29:35,110 >> Y en lugar de que siendo una lista vacía o 0, 519 00:29:35,110 --> 00:29:38,150 es un resto 0, porque somos tratar con el tipo de música, 520 00:29:38,150 --> 00:29:43,230 y la lista vacía de la música tipo es sólo un resto de ninguna duración. 521 00:29:43,230 --> 00:29:45,680 No es la música. 522 00:29:45,680 --> 00:29:51,460 Y luego vemos si conseguimos un paso secuenciar con un v para el argumento de volumen, 523 00:29:51,460 --> 00:29:57,290 p para instrumento de precaución argumento, y luego una lista de las x. 524 00:29:57,290 --> 00:29:58,360 >> A continuación hacemos algunas cosas. 525 00:29:58,360 --> 00:30:01,290 En particular, se aplica esta lista por comprensión, 526 00:30:01,290 --> 00:30:05,700 y realizamos algunos operaciones sobre el valor tal vez 527 00:30:05,700 --> 00:30:10,050 para convertirlo en un valor numérico para que se podría entonces enumeró y utilizado 528 00:30:10,050 --> 00:30:12,300 para seleccionar el instrumento. 529 00:30:12,300 --> 00:30:16,730 Una vez más, esto es un poco poco deliberadamente inconcise 530 00:30:16,730 --> 00:30:20,580 sólo para mostrar todas las cosas raras usted puede hacer en Haskell como usted 531 00:30:20,580 --> 00:30:23,170 echar un vistazo a él en su propio tiempo. 532 00:30:23,170 --> 00:30:23,802 >> Correcto. 533 00:30:23,802 --> 00:30:26,010 Así que estamos finalmente llegar a hacemos lo que nos propusimos hacer, 534 00:30:26,010 --> 00:30:28,820 que es hacer algo de música por ordenador. 535 00:30:28,820 --> 00:30:32,250 Así que vamos a tratar de hacer la canción Frere Jacques. 536 00:30:32,250 --> 00:30:35,220 Así que hay cuántos frases en Frere Jacques? 537 00:30:35,220 --> 00:30:38,790 538 00:30:38,790 --> 00:30:39,680 Cuatro. 539 00:30:39,680 --> 00:30:40,460 Excelente. 540 00:30:40,460 --> 00:30:42,490 Y lo que es interesante es que todos están repetidos 541 00:30:42,490 --> 00:30:46,990 la misma cantidad de veces, que es de dos. 542 00:30:46,990 --> 00:30:50,730 >> Así que tenemos cuatro frases cada repetirá dos veces. 543 00:30:50,730 --> 00:30:53,590 Y, en particular, están en una ronda. 544 00:30:53,590 --> 00:30:55,340 Y hay muchos, muchas maneras de implementar 545 00:30:55,340 --> 00:30:57,520 una ronda que podría ser divertido de hacer. 546 00:30:57,520 --> 00:31:00,260 Lo he hecho en un bonita forma sencilla aquí, 547 00:31:00,260 --> 00:31:05,760 que es sólo para construct-- la línea función toma una lista de valores de la música 548 00:31:05,760 --> 00:31:10,390 y lo convierte en la composición secuencial mediante la aplicación de esa composición secuencial 549 00:31:10,390 --> 00:31:13,000 operador. 550 00:31:13,000 --> 00:31:19,540 >> Y entonces me demoro las diferentes partes haciéndoles comienzan con un descanso. 551 00:31:19,540 --> 00:31:22,770 Así que empiezo con un descanso de dos medidas, y luego un resto de cuatro medidas, 552 00:31:22,770 --> 00:31:26,160 y luego un resto de las seis medidas, y luego la ronda 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 dos anotaciones o modificaciones de los valores de la música 555 00:31:37,180 --> 00:31:43,150 que están contenidos en este secuencial disposición de los elementos de la música. 556 00:31:43,150 --> 00:31:44,810 Tenemos un volumen add. 557 00:31:44,810 --> 00:31:48,960 Esta es una función para anotar música con un volumen particular. 558 00:31:48,960 --> 00:31:51,320 Este es un buen ejemplo de una señal de funcionamiento MIDI 559 00:31:51,320 --> 00:31:57,510 de 0 a 127, los siete bits de información que puede ser llevado. 560 00:31:57,510 --> 00:32:00,650 >> Y entonces-- lo vimos muy brevemente, pero el general MIDI 561 00:32:00,650 --> 00:32:02,310 lista de todos los diferentes instrumentos. 562 00:32:02,310 --> 00:32:04,450 Y no hay un montón de ellos. 563 00:32:04,450 --> 00:32:11,230 Si utiliza una estación de trabajo de audio digital, como Ableton Live o Pro Tools, 564 00:32:11,230 --> 00:32:17,560 hay una gama muy amplia de sintetizadores e instrumentos VST. 565 00:32:17,560 --> 00:32:21,510 Pero sólo el estándar MIDI tiene una docena de pocos, o varios. 566 00:32:21,510 --> 00:32:22,799 Y algunos de ellos son divertidos. 567 00:32:22,799 --> 00:32:25,840 Pensé que sería divertido si jugamos el instrumento del instrumento MIDI 568 00:32:25,840 --> 00:32:30,550 helicóptero, y luego el el próximo paso a través de la ronda, 569 00:32:30,550 --> 00:32:37,980 hicimos un sintetizador almohadilla, y luego de este plomo cursi sintetizador de onda cuadrada, 570 00:32:37,980 --> 00:32:44,240 y luego expresar exudado, que son una poco confuso en mi mala MIDI 571 00:32:44,240 --> 00:32:46,410 sintetizador, pero en Aceptar. 572 00:32:46,410 --> 00:32:50,030 >> Y luego vemos este let y en la sintaxis de Haskell, 573 00:32:50,030 --> 00:32:54,030 y entonces nos estamos jugando todas estas partes juntas 574 00:32:54,030 --> 00:32:56,265 con el operador de composición paralela. 575 00:32:56,265 --> 00:33:00,260 576 00:33:00,260 --> 00:33:02,296 Y probablemente podríamos mostrar algo de esto. 577 00:33:02,296 --> 00:33:07,674 578 00:33:07,674 --> 00:33:08,340 Aquí está el código. 579 00:33:08,340 --> 00:33:14,960 Y se puede ver en C, que habría un gran cantidad de aclarar la garganta y el ajuste 580 00:33:14,960 --> 00:33:19,760 el código de la tabla antes de podría hacer música como esta. 581 00:33:19,760 --> 00:33:22,080 O cualquier otra programación idioma, lo que probablemente 582 00:33:22,080 --> 00:33:27,210 tener que interactuar con algún tipo de biblioteca o API y configurar todo, 583 00:33:27,210 --> 00:33:28,725 y entonces usted tiene que limpiar. 584 00:33:28,725 --> 00:33:33,810 Pero aquí, en Haskell es, creo, una vez que el cuelgue de ella, increíblemente 585 00:33:33,810 --> 00:33:35,770 legible y muy expresivo. 586 00:33:35,770 --> 00:33:38,930 587 00:33:38,930 --> 00:33:43,240 Así que no es la implementación de Frere Jacques. 588 00:33:43,240 --> 00:33:43,740 Correcto. 589 00:33:43,740 --> 00:33:47,557 Ahora queremos añadir percusión, y esto es un poco más desordenado bits. 590 00:33:47,557 --> 00:33:49,015 Así que echemos un vistazo a las diapositivas. 591 00:33:49,015 --> 00:33:56,880 592 00:33:56,880 --> 00:34:00,540 Así que la gran idea es hacer un montón de listas o partes. 593 00:34:00,540 --> 00:34:04,140 En las máquinas de rodillo-in, eran típicamente de aproximadamente unos ocho 594 00:34:04,140 --> 00:34:08,670 10 de ritmo o percusión partes. 595 00:34:08,670 --> 00:34:10,159 Y a continuación, utilizar un montón de técnicas. 596 00:34:10,159 --> 00:34:14,889 Y hemos hablado de these-- usando pliegues, filtros, funciones lambda, 597 00:34:14,889 --> 00:34:19,429 asignada sobre las listas de generar valores en cierto rango de 1 a r, r es 16, 598 00:34:19,429 --> 00:34:20,699 o 32 pasos en el secuenciador. 599 00:34:20,699 --> 00:34:23,810 600 00:34:23,810 --> 00:34:29,920 >> Y luego si hay un valor en la lista ya que estamos corriendo por el secuenciador, 601 00:34:29,920 --> 00:34:34,190 corriendo a través de una y más, se convierte en esa nota, 602 00:34:34,190 --> 00:34:36,060 y que la muestra se desencadena. 603 00:34:36,060 --> 00:34:42,810 604 00:34:42,810 --> 00:34:47,110 Le mostramos las diferentes maneras extrañas Se me ocurrió para generar notas. 605 00:34:47,110 --> 00:34:48,940 Pruébalo en tu propia suma semi. 606 00:34:48,940 --> 00:34:50,360 Va a sonar fresco. 607 00:34:50,360 --> 00:34:53,066 608 00:34:53,066 --> 00:34:54,690 El tiempo lo permite, vamos a ir a través de este. 609 00:34:54,690 --> 00:34:59,200 Pero por ahora, supongo debemos demostración de lo que tenemos. 610 00:34:59,200 --> 00:35:01,380 Esperemos que esto va en Aceptar. 611 00:35:01,380 --> 00:35:02,670 >> Así que esto es GHCi. 612 00:35:02,670 --> 00:35:06,580 613 00:35:06,580 --> 00:35:09,121 Y vamos a cargar un archivo He llamado song.lhs, 614 00:35:09,121 --> 00:35:10,620 que es el archivo que acabo de mostrar. 615 00:35:10,620 --> 00:35:11,470 Vale genial. 616 00:35:11,470 --> 00:35:15,010 Como Connor dijo anteriormente, compilado, tipo marcada, 617 00:35:15,010 --> 00:35:18,380 así que puedo respirar mucho más fácil. 618 00:35:18,380 --> 00:35:20,010 No va a estallar en mí. 619 00:35:20,010 --> 00:35:22,720 >> Yo quiero mostrarte algo útil. 620 00:35:22,720 --> 00:35:25,900 Se puede ver que un módulo cargado llama 50. 621 00:35:25,900 --> 00:35:28,240 Usted puede navegar a ese módulo. 622 00:35:28,240 --> 00:35:32,092 Y esto es tan agradable acerca doing-- quizá lo 623 00:35:32,092 --> 00:35:34,550 que estás haciendo en Haskell no es llamado desarrollo de software, 624 00:35:34,550 --> 00:35:36,980 pero se puede hacer un montón de diversión cosas por su cuenta. 625 00:35:36,980 --> 00:35:42,410 Y el flujo de trabajo es muy agradable ya en comparación con un montón de otras lenguas, 626 00:35:42,410 --> 00:35:45,872 porque se puede ver en una realidad forma legible por lo que está pasando. 627 00:35:45,872 --> 00:35:47,830 Así vemos que tenemos todas estas frases, que 628 00:35:47,830 --> 00:35:53,760 son listas de lanzamientos de música y, a continuación, nos construir estas arriba en algo más grande, 629 00:35:53,760 --> 00:35:55,220 que es una canción de la música. 630 00:35:55,220 --> 00:35:58,450 Es una unidad musical. 631 00:35:58,450 --> 00:36:05,545 Y luego podemos jugar todo esto con una función llamada reproducción de música. 632 00:36:05,545 --> 00:36:09,040 Se puede ver que aquí abajo. 633 00:36:09,040 --> 00:36:11,310 Que se acaba de jugar. 634 00:36:11,310 --> 00:36:15,040 >> Debo decir-- Yo no hablo de este signo de dólares que está en todas partes. 635 00:36:15,040 --> 00:36:17,980 Signo de dólar es otro operador infijo. 636 00:36:17,980 --> 00:36:22,500 Pero tiene la prioridad más baja de cualquier operador, lo que efectivamente 637 00:36:22,500 --> 00:36:24,960 significa que todo en la izquierda del signo de dólar 638 00:36:24,960 --> 00:36:28,460 y la derecha de la muestra de dólar, vamos a conseguir evaluado antes. 639 00:36:28,460 --> 00:36:31,430 Así que es algo así como otra manera de añadir paréntesis. 640 00:36:31,430 --> 00:36:33,980 641 00:36:33,980 --> 00:36:36,220 >> CONNOR HARRIS: Es básicamente composición de funciones. 642 00:36:36,220 --> 00:36:40,026 Y asegura que no tener-- si Tiene funciones de cada lado o infijo 643 00:36:40,026 --> 00:36:42,900 operadores de ambos lados, no lo harán asociar a través de ella y darle 644 00:36:42,900 --> 00:36:46,030 resultados inesperados. 645 00:36:46,030 --> 00:36:49,790 >> STEPHEN Krewson: Así que can-- usar eso, podemos llamar. 646 00:36:49,790 --> 00:36:51,415 En primer lugar, vamos a jugar sin los tambores. 647 00:36:51,415 --> 00:37:00,330 648 00:37:00,330 --> 00:37:03,170 Ese es el helicóptero, el helicóptero MIDI. 649 00:37:03,170 --> 00:37:05,495 >> [REPRODUCCIÓN DE MÚSICA] 650 00:37:05,495 --> 00:37:08,525 651 00:37:08,525 --> 00:37:09,525 Ahí está la onda cuadrada. 652 00:37:09,525 --> 00:37:24,520 653 00:37:24,520 --> 00:37:25,490 El exudado voz. 654 00:37:25,490 --> 00:37:27,630 Y realmente se puede ir salvaje con este. 655 00:37:27,630 --> 00:37:30,872 Elegí un muy simple, porque sabía que no debía morder 656 00:37:30,872 --> 00:37:31,830 más de lo que podía masticar. 657 00:37:31,830 --> 00:37:36,460 Sólo tienes que mantener bastante simple para mostrar las ideas principales. 658 00:37:36,460 --> 00:37:39,952 Pero entonces yo estaba como, tenemos tiene que añadir algunos tambores para esto. 659 00:37:39,952 --> 00:37:41,910 El hecho de que se trata de una poco impenetrable, 660 00:37:41,910 --> 00:37:45,790 y yo no hice uso de la nombre de las partes de batería, 661 00:37:45,790 --> 00:37:49,490 Me asignan ellos-- porque son parte de esa clase enumerado, 662 00:37:49,490 --> 00:37:51,500 Yo les asignan a ints. 663 00:37:51,500 --> 00:37:53,120 Uno de ellos es como un bombo. 664 00:37:53,120 --> 00:37:54,370 Cero es así. 665 00:37:54,370 --> 00:37:56,000 Siete es un sombrero alto. 666 00:37:56,000 --> 00:38:00,920 Y hasta aquí donde el funciones se ponen un poco más al azar, 667 00:38:00,920 --> 00:38:02,100 estos son como las congas. 668 00:38:02,100 --> 00:38:08,360 >> Así que si usted piensa sobre-- tal vez un forma divertida de poner en práctica una caja de ritmos 669 00:38:08,360 --> 00:38:12,830 es utilizar muy ordenado patrones en el bombo. 670 00:38:12,830 --> 00:38:17,640 Así, por ejemplo, en el filtrado sobre el lista con todo lo que le da la espalda 671 00:38:17,640 --> 00:38:20,590 un 1 cuando se toma del módulo 04. 672 00:38:20,590 --> 00:38:27,190 Así que me sale 1, 5, 9, 13, 17-- por lo que este es el primer tiempo de cada compás. 673 00:38:27,190 --> 00:38:32,860 >> Y entonces este es el mismo cosa cambió en dos etapas. 674 00:38:32,860 --> 00:38:33,850 Así que esa es la poco convencional. 675 00:38:33,850 --> 00:38:37,480 Así que esto sería algo así como un sombrero alto. 676 00:38:37,480 --> 00:38:39,640 Y, de nuevo, aquí abajo, que es un poco al azar, 677 00:38:39,640 --> 00:38:41,080 porque estamos haciendo congas. 678 00:38:41,080 --> 00:38:44,180 Y tengo algunas maracas abajo, también. 679 00:38:44,180 --> 00:38:50,280 >> Así que podría llamar a juego caja de ritmos, pero sería seguir para siempre, 680 00:38:50,280 --> 00:38:53,700 y podría empezar a agarrar hasta toda la memoria en mi sistema. 681 00:38:53,700 --> 00:38:57,090 Así que voy a llamar a esta función reproducir música, que como veremos, 682 00:38:57,090 --> 00:39:02,020 utilizar la composición paralela truncando jugar nuestra pequeña canción Frere Jacques 683 00:39:02,020 --> 00:39:04,200 junto con esta caja de ritmos raro. 684 00:39:04,200 --> 00:39:06,190 Así que vamos a echar un vistazo. 685 00:39:06,190 --> 00:39:10,920 Y por favor, mejorar mi disposición de todas las partes de batería. 686 00:39:10,920 --> 00:39:13,375 No es mi especialidad, pero yo tenía un montón de diversión de hacerlo. 687 00:39:13,375 --> 00:39:17,678 688 00:39:17,678 --> 00:39:20,654 >> [REPRODUCCIÓN DE MÚSICA] 689 00:39:20,654 --> 00:39:52,260 690 00:39:52,260 --> 00:39:56,980 >> Así que por supuesto, todo esto es un poco, no tan divertido 691 00:39:56,980 --> 00:40:01,100 si no podemos convertirlo a una puntuación así que tal vez 692 00:40:01,100 --> 00:40:04,650 podría interpretarse por un intérprete humano. 693 00:40:04,650 --> 00:40:06,535 Así que no voy a correr aquí. 694 00:40:06,535 --> 00:40:07,910 Yo ya he generado los archivos. 695 00:40:07,910 --> 00:40:10,280 Se puede ver que hay un dot LilyPond file-- y esto 696 00:40:10,280 --> 00:40:14,500 será mi segue a Connor-- y un archivo de puntos MIDI, 697 00:40:14,500 --> 00:40:18,610 y un archivo PDF de puntos, que es lo que LilyPond en última instancia generar. 698 00:40:18,610 --> 00:40:23,770 >> Pero estos son los guiones, y voy a simplemente correr con sus opciones de ayuda. 699 00:40:23,770 --> 00:40:28,090 Si recibe estos marcha con Euterpea, puede generar un archivo MIDI. 700 00:40:28,090 --> 00:40:31,160 Y a continuación, desde el archivo MIDI con este programa MIDI 2LY, 701 00:40:31,160 --> 00:40:34,930 puede generar un lirio Archivo de la charca, y entonces usted 702 00:40:34,930 --> 00:40:37,974 puede generar un PDF de la partitura. 703 00:40:37,974 --> 00:40:39,390 Y deberíamos echar un vistazo a esto. 704 00:40:39,390 --> 00:40:52,599 705 00:40:52,599 --> 00:40:55,140 Así que Connor probablemente mostrar cómo anotar esto mejor, 706 00:40:55,140 --> 00:41:02,570 pero esto es Frere Jacques como generada por mí en Euterpea. 707 00:41:02,570 --> 00:41:07,300 Es sólo en C. Yo debería haber figurado lo que el hack en realidad en. 708 00:41:07,300 --> 00:41:11,090 Pero esa es la tubería para cómo se hace eso con eso. 709 00:41:11,090 --> 00:41:12,950 Vamos a hablar más sobre LilyPond. 710 00:41:12,950 --> 00:41:15,780 >> CONNOR HARRIS: OK Vamos a ver. 711 00:41:15,780 --> 00:41:19,480 712 00:41:19,480 --> 00:41:21,419 ¿Sabía usted menciona Aprenda Usted Haskell? 713 00:41:21,419 --> 00:41:22,460 STEPHEN Krewson: Ah, sí. 714 00:41:22,460 --> 00:41:23,480 Echa un vistazo a Aprender Usted Haskell. 715 00:41:23,480 --> 00:41:24,410 Está en los recursos. 716 00:41:24,410 --> 00:41:26,830 Así es como empecé aprendizaje, y es genial. 717 00:41:26,830 --> 00:41:27,580 El aprendizaje no tonto. 718 00:41:27,580 --> 00:41:28,829 >> CONNOR HARRIS: Así que es en línea. 719 00:41:28,829 --> 00:41:34,760 Así que un tipo llamado [inaudible] learnyouahaskell.com, sin espacios. 720 00:41:34,760 --> 00:41:37,065 La gramática es enfermo. 721 00:41:37,065 --> 00:41:38,690 STEPHEN Krewson: Es ilustrado, también. 722 00:41:38,690 --> 00:41:39,440 CONNOR HARRIS: Entonces, ¿qué es LilyPond? 723 00:41:39,440 --> 00:41:42,480 Es una programación declarativa idioma para componer tipo de música. 724 00:41:42,480 --> 00:41:45,480 Así declarative-- puedas pensar en cosas como HTML, 725 00:41:45,480 --> 00:41:50,900 donde no estás diciendo-- HTML no dice cómo los navegadores web debe 726 00:41:50,900 --> 00:41:52,180 render páginas paso a paso. 727 00:41:52,180 --> 00:41:54,096 Es sólo decir esto es una descripción textual 728 00:41:54,096 --> 00:41:56,100 de lo que quiere la página para que parezca. 729 00:41:56,100 --> 00:41:59,310 >> Y entonces es también un programa que compila esta lengua, 730 00:41:59,310 --> 00:42:02,300 o leer su adentro y luego en realidad hace la composición tipográfica para usted, 731 00:42:02,300 --> 00:42:05,570 y escupe estos maravillosas que buscan partituras en formato PDF. 732 00:42:05,570 --> 00:42:08,250 También puede obtener el formato PNG o lo que sea. 733 00:42:08,250 --> 00:42:10,300 Una buena manera de pensar de esto es por analogía 734 00:42:10,300 --> 00:42:16,620 es que LaTeX es algo así como LillyPond, pero por sólo tipografía ordinaria. 735 00:42:16,620 --> 00:42:20,360 Así que en lugar de-- no es WYSIWYG, lo que ves 736 00:42:20,360 --> 00:42:22,960 Es lo que obtienes, como, por ejemplo Finale es, o Sibelius, 737 00:42:22,960 --> 00:42:27,430 o Microsoft Word, donde puede escribir en tiempo real y los proyectos de las cosas en tiempo real 738 00:42:27,430 --> 00:42:31,340 y ver los cambios instantáneamente. 739 00:42:31,340 --> 00:42:32,140 >> Se basa texto. 740 00:42:32,140 --> 00:42:35,290 Usted tiene que compilar su puntajes utilizando un programa separado 741 00:42:35,290 --> 00:42:37,090 y salir archivos PDF más tarde. 742 00:42:37,090 --> 00:42:43,320 Esto es un poco menos conveniente para el uso si eres 743 00:42:43,320 --> 00:42:46,520 tratando de escribir directamente en una puntuación y ya está 744 00:42:46,520 --> 00:42:48,620 tratando de componer en el equipo. 745 00:42:48,620 --> 00:42:50,830 Pero hay una gran cantidad de ventajas para ello. 746 00:42:50,830 --> 00:42:56,110 Uno, que tiene un aspecto mucho más agradable, porque LillyPond puede en realidad 747 00:42:56,110 --> 00:42:58,210 tomar el tiempo para hacer las decisiones de diseño de forma adecuada, 748 00:42:58,210 --> 00:43:02,380 a diferencia de Sibelius o Finale, que tienen para hacer algoritmos comprometidos de manera 749 00:43:02,380 --> 00:43:05,020 que pueden mostrar cosas en tiempo real. 750 00:43:05,020 --> 00:43:07,660 >> Así que ¿por qué es LilyPond-- gráficos por ordenador es difícil. 751 00:43:07,660 --> 00:43:10,535 Si usted está haciendo algo con la música y quiere escribir partituras, 752 00:43:10,535 --> 00:43:13,900 usted no desea escribir cabo todo por sí mismo 753 00:43:13,900 --> 00:43:19,040 empezando por cómo dibujar personal y cómo dibujar cuadernos. 754 00:43:19,040 --> 00:43:21,020 Es muy difícil. Se ha hecho antes. 755 00:43:21,020 --> 00:43:22,170 Estás bien. 756 00:43:22,170 --> 00:43:26,200 >> Si desea utilizar Finale o Sibelius, los formatos de archivo para esas cosas 757 00:43:26,200 --> 00:43:30,180 son muy complicados, y no se puede realmente utilizarlos mediante programación. 758 00:43:30,180 --> 00:43:35,020 Puede abrir Sibelius con Finale y vaya a Archivo, Exportar como PDF a ti mismo, 759 00:43:35,020 --> 00:43:37,600 pero usted no puede realmente llamar a que a partir de un guión. 760 00:43:37,600 --> 00:43:40,440 LillyPond, puede llamar al de esos guiones. 761 00:43:40,440 --> 00:43:44,397 Usted podría repetir fácilmente LillyPond con LaTeX. 762 00:43:44,397 --> 00:43:47,230 No voy a tener mucho tiempo para ir en estas tecnologías en este momento, 763 00:43:47,230 --> 00:43:48,321 pero existen. 764 00:43:48,321 --> 00:43:50,070 Si usted quiere ver en un libro LillyPond, 765 00:43:50,070 --> 00:43:53,760 es un programa que viene con su distribución LillyPond, 766 00:43:53,760 --> 00:43:57,030 y es para la iteración Fragmentos LillyPond en LaTeX 767 00:43:57,030 --> 00:44:00,340 si quieres hacer algo como un documento grande musicología 768 00:44:00,340 --> 00:44:02,289 con ejemplos, por ejemplo. 769 00:44:02,289 --> 00:44:04,580 Y es una buena habilidad para vida si estás haciendo nada 770 00:44:04,580 --> 00:44:05,770 con la música, no sólo CS50. 771 00:44:05,770 --> 00:44:09,320 He usado LillyPond para todos de mis proyectos de composición 772 00:44:09,320 --> 00:44:11,880 desde que era básicamente un último año de secundaria. 773 00:44:11,880 --> 00:44:13,455 >> Así que aquí están algunos ejemplos sencillos. 774 00:44:13,455 --> 00:44:17,490 775 00:44:17,490 --> 00:44:21,060 Esto es básicamente representativa del nivel de dificultad 776 00:44:21,060 --> 00:44:23,481 que la mayoría de la gente enfrentarlo estaban tratando 777 00:44:23,481 --> 00:44:24,980 utilizar LilyPond para proyectos simples. 778 00:44:24,980 --> 00:44:29,519 Este primero es el principio a un preludio coral de Bach. 779 00:44:29,519 --> 00:44:31,810 Este fondo es un extracto de uno de mis propias obras, 780 00:44:31,810 --> 00:44:34,650 y es justo allí para mostrar usted cosas como [inaudible] 781 00:44:34,650 --> 00:44:38,550 poniendo varias líneas en el mismo personal, cómo letra undersetting funciona. 782 00:44:38,550 --> 00:44:41,350 783 00:44:41,350 --> 00:44:46,110 Underlays líricos son una cosa que es muy fácil de usar LilyPond para la música coral. 784 00:44:46,110 --> 00:44:48,814 >> Y entonces hay algo más ejemplos complicados aquí. 785 00:44:48,814 --> 00:44:50,980 Todo esto se hace en LilyPond y son factibles. 786 00:44:50,980 --> 00:44:55,280 Este primer extracto es de [Inaudible] por [inaudible]. 787 00:44:55,280 --> 00:44:58,860 Y esto [inaudible] de una pieza para el bajo solista 788 00:44:58,860 --> 00:45:03,550 flauta por [inaudible], que es un longtime-- que 789 00:45:03,550 --> 00:45:07,101 era un miembro de largo plazo de la departamento de música aquí, creo. 790 00:45:07,101 --> 00:45:08,600 No estoy seguro de dónde ha ido a. 791 00:45:08,600 --> 00:45:12,410 Pero él era el asesor de la Universidad de Harvard Asociación de Compositores durante mucho tiempo. 792 00:45:12,410 --> 00:45:13,530 Hombre maravilloso. 793 00:45:13,530 --> 00:45:16,920 Y escribe un poco de música que tiene muy notación complicada que LillyPond 794 00:45:16,920 --> 00:45:20,500 no obstante, puede manejar muy bien. 795 00:45:20,500 --> 00:45:26,030 >> Así que para darle un sentido de lo las capacidades de esta cosa tan son-- 796 00:45:26,030 --> 00:45:28,960 el funcionamiento interno de LillyPond son muy complicados. 797 00:45:28,960 --> 00:45:31,060 Y usted puede utilizarlo para un largo tiempo, incluyendo 798 00:45:31,060 --> 00:45:32,520 para algunos bastante complicado cosas, sin realmente 799 00:45:32,520 --> 00:45:34,060 tener que saber mucho acerca de ellos. 800 00:45:34,060 --> 00:45:38,720 Pero la idea básica es que en el nivel más bajo, los átomos de LillyPonds 801 00:45:38,720 --> 00:45:39,970 son las notas. 802 00:45:39,970 --> 00:45:42,761 Las notas contienen una contexto llamados voces. 803 00:45:42,761 --> 00:45:44,510 Así el contexto de voz básicamente corresponde 804 00:45:44,510 --> 00:45:47,410 a una sola línea de la polifonía. 805 00:45:47,410 --> 00:45:49,410 Y luego contexto puede ser contenida jerárquicamente 806 00:45:49,410 --> 00:45:53,590 en los de más alto nivel que representar personal en la puntuación 807 00:45:53,590 --> 00:45:56,750 o agrupaciones más grandes, como personal de piano o el personal del coro, 808 00:45:56,750 --> 00:45:58,990 y luego, eventualmente contextos puntuación enteras. 809 00:45:58,990 --> 00:46:02,260 Y en realidad se puede abarcar múltiples cuentas en un libro. 810 00:46:02,260 --> 00:46:05,770 >> Y cada contexto tiene una número de grabadores conectados. 811 00:46:05,770 --> 00:46:08,340 Si se mira a través de la contenido de un contexto 812 00:46:08,340 --> 00:46:14,410 e imprimir un cierto símbolo o una cierta clase de símbolos como necesario. 813 00:46:14,410 --> 00:46:17,840 Así que para todos los contextos de voz, hay [inaudible] notas 814 00:46:17,840 --> 00:46:24,270 grabador que es básicamente una función o un objeto que escribe toda la nota 815 00:46:24,270 --> 00:46:26,290 cabezas en las partes correctas de una página. 816 00:46:26,290 --> 00:46:29,510 Luego hay un grabador leporino, que escribe cabo hendiduras en el personal. 817 00:46:29,510 --> 00:46:31,517 Entonces hay un metrónomo marca grabador que 818 00:46:31,517 --> 00:46:33,100 escribe a cabo indicaciones de metrónomo en una partitura. 819 00:46:33,100 --> 00:46:36,410 Y todos éstos encajan bastante bien en la jerarquía. 820 00:46:36,410 --> 00:46:39,500 Y es muy, muy, muy personalizable, lo que usted necesita 821 00:46:39,500 --> 00:46:42,880 si usted quiere conseguir cosas por el estilo. 822 00:46:42,880 --> 00:46:45,730 >> Así que todos los contextos tienen un gran cantidad de diferentes atributos 823 00:46:45,730 --> 00:46:52,410 que se puede modificar para todo, a partir de la separación a diversos fuente 824 00:46:52,410 --> 00:46:54,942 selección de tamaños de cosas. 825 00:46:54,942 --> 00:46:56,900 Si quieres hacer aún las cosas más complicadas, 826 00:46:56,900 --> 00:46:59,210 hay un lenguaje de scripting embebido. 827 00:46:59,210 --> 00:47:01,820 Utilizan esquema, que es el dialecto de LISP. 828 00:47:01,820 --> 00:47:04,960 Estos probablemente no lo hacen significa nada para ti. 829 00:47:04,960 --> 00:47:06,900 Pero, básicamente, un esquema otra funcional 830 00:47:06,900 --> 00:47:09,500 lenguaje de programación, más o menos. 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 Es un buen tie-in, supongo. 834 00:47:15,390 --> 00:47:20,150 Y se utiliza como lengua de enseñanza, de hecho, hasta la misa Ave. En el MIT. 835 00:47:20,150 --> 00:47:26,590 Y es muy útil para LillyPond por diversas razones técnicas. 836 00:47:26,590 --> 00:47:30,317 >> Y por lo que si usted desea hacer sencilla ajustes que dependen de los condicionales, 837 00:47:30,317 --> 00:47:32,900 por ejemplo-- que hay cierta condición de una partitura que se reunió, 838 00:47:32,900 --> 00:47:36,495 realizar modificaciones a la diseño o whatnot-- continuación 839 00:47:36,495 --> 00:47:37,620 esas instalaciones están ahí. 840 00:47:37,620 --> 00:47:38,667 Son complicados. 841 00:47:38,667 --> 00:47:40,250 Así que aquí está un ejemplo de código bastante simple. 842 00:47:40,250 --> 00:47:43,810 Es cinco líneas. 843 00:47:43,810 --> 00:47:46,120 Básicamente, estoy definiendo dos personales. 844 00:47:46,120 --> 00:47:46,904 Está en 3.4. 845 00:47:46,904 --> 00:47:48,695 El primer equipo cuenta con una adjunta marca el tempo, 846 00:47:48,695 --> 00:47:51,110 pero eso es en realidad va para pasar a toda la partitura, 847 00:47:51,110 --> 00:47:54,960 porque las marcas de tempo están en el marcador equilibrado. 848 00:47:54,960 --> 00:47:59,044 El grabador marca de metrónomo Se adjunta para anotar contexto. 849 00:47:59,044 --> 00:48:01,460 Hay diferentes llaves, porque el [inaudible] grabador 850 00:48:01,460 --> 00:48:02,710 Se adjunta el personal. 851 00:48:02,710 --> 00:48:04,441 En realidad se puede hacer es. 852 00:48:04,441 --> 00:48:06,190 La muestra que escribí es realidad en do mayor, 853 00:48:06,190 --> 00:48:07,990 pero es sólo para demostrar que puede tener 854 00:48:07,990 --> 00:48:09,570 diferentes claves en diferentes varas. 855 00:48:09,570 --> 00:48:15,710 Y la sintaxis básica es que escribes señalar nombres con E, F, G, lo que sea. 856 00:48:15,710 --> 00:48:18,910 Si usted quiere hacer alteraciones, usted sufijo es o ES. 857 00:48:18,910 --> 00:48:22,640 Esto es de holandés convenciones musicológicos. 858 00:48:22,640 --> 00:48:28,290 >> Y para hacer saltos de octava, usted tiene que utilizar estas garrapatas marcas, coma o apóstrofo. 859 00:48:28,290 --> 00:48:30,580 La relativa sólo significa lo que tengas una nota, 860 00:48:30,580 --> 00:48:34,080 automáticamente se plaec en el octava más cercana a la anterior. 861 00:48:34,080 --> 00:48:37,624 Y si usted quiere saltar más un fifth-- decir un quinto o más-- 862 00:48:37,624 --> 00:48:39,165 entonces usted tiene que utilizar el [inaudible]. 863 00:48:39,165 --> 00:48:42,580 Pero por lo demás, no tiene que especificar la octava de cada nota. 864 00:48:42,580 --> 00:48:46,130 >> Y en relación C, primer y C, que acaba de especificar Do central 865 00:48:46,130 --> 00:48:48,630 y la base C, especialmente primeras notas. 866 00:48:48,630 --> 00:48:55,020 Entonces usted tiene estas varas que organizan estas dos voces o muestras de música, 867 00:48:55,020 --> 00:48:56,730 y usted tiene una cuenta. 868 00:48:56,730 --> 00:48:58,440 Y eso se ve así. 869 00:48:58,440 --> 00:49:01,780 870 00:49:01,780 --> 00:49:05,380 >> Si usted quiere tomar el tiempo para copiar esa muestra de LillyPond 871 00:49:05,380 --> 00:49:07,530 código de la anterior deslizarse por aquí, y usted 872 00:49:07,530 --> 00:49:09,030 puede escribirlo para LillyPond ti mismo. 873 00:49:09,030 --> 00:49:11,280 Yo sé que tenemos algo que se parece mucho a esto. 874 00:49:11,280 --> 00:49:17,236 875 00:49:17,236 --> 00:49:19,610 Así que hay otra tecnología mantuvo llamado XML Música 876 00:49:19,610 --> 00:49:22,030 por personas completamente diferentes. 877 00:49:22,030 --> 00:49:28,150 XML es que unos datos textuales structure-- No debería decir los datos structure-- dicen 878 00:49:28,150 --> 00:49:29,580 mapa metáfora más o menos. 879 00:49:29,580 --> 00:49:33,800 Y está diseñado para mantener datos jerárquicos muy bien. 880 00:49:33,800 --> 00:49:37,050 HTML, por ejemplo, es un tipo de XML. 881 00:49:37,050 --> 00:49:41,090 Y se puede decir XML porque tenía todos los soportes de ángulo y ángulo 882 00:49:41,090 --> 00:49:44,700 marcas de barra soporte que los campos de datos muestran. 883 00:49:44,700 --> 00:49:47,390 >> Yo no tengo un código ejemplo de Música XML. 884 00:49:47,390 --> 00:49:50,450 Usted puede encontrar usted mismo. 885 00:49:50,450 --> 00:49:53,735 Básicamente, la razón es posible que desee para usar XML como la etapa intermedia 886 00:49:53,735 --> 00:49:55,980 es, primero de todo, es un formato de intercambio 887 00:49:55,980 --> 00:50:02,301 para básicamente every-- no debería decir todos, pero un montón de puntuación diferente 888 00:50:02,301 --> 00:50:02,800 escritores. 889 00:50:02,800 --> 00:50:04,966 Así que si usted escribe en la Música XML, no sólo puede LillyPond 890 00:50:04,966 --> 00:50:08,080 leer con la ayuda de este auxilary programa llamado XML Música para LY, 891 00:50:08,080 --> 00:50:11,360 sino también Finale puede leer que, Sibelius puede leerlo. 892 00:50:11,360 --> 00:50:14,770 Dependiendo de cómo su objeto interno jerarquía trabaja para la representación de la música, 893 00:50:14,770 --> 00:50:18,820 podría ser más fácil que escribir la música XML que a LillyPond 894 00:50:18,820 --> 00:50:22,410 y sólo se basan en XML Música a LY para hacer la conversión. 895 00:50:22,410 --> 00:50:24,282 >> No creo que [inaudible] tiene XML Música. 896 00:50:24,282 --> 00:50:25,490 STEPHEN Krewson: No lo hace. 897 00:50:25,490 --> 00:50:26,340 Alguien está trabajando en ello, sin embargo. 898 00:50:26,340 --> 00:50:27,090 >> CONNOR HARRIS: OK. 899 00:50:27,090 --> 00:50:31,040 Euterpea no tiene Función de salida XML Música todavía. 900 00:50:31,040 --> 00:50:35,340 Si quieres una idea final del proyecto, tal vez ponerse en contacto con los chicos 901 00:50:35,340 --> 00:50:38,620 que Esteban lo sabe, y que podrían utilizar su ayuda. 902 00:50:38,620 --> 00:50:40,992 >> STEPHEN Krewson: Me encantaría eso. 903 00:50:40,992 --> 00:50:43,450 CONNOR HARRIS: También, básicamente, cada lenguajes de programación 904 00:50:43,450 --> 00:50:46,610 eso es que se precie ya cuenta con una biblioteca de XML, 905 00:50:46,610 --> 00:50:51,030 lo que puede convertir internamente todo de su música en un objeto 906 00:50:51,030 --> 00:50:54,120 que la biblioteca XML puede escribir que requeriría menos 907 00:50:54,120 --> 00:50:57,470 alteraciones en su estructura interna por cualquier música que objetos 908 00:50:57,470 --> 00:51:00,310 quiero escribir que escribirlo directamente en LillyPond haría. 909 00:51:00,310 --> 00:51:04,380 A continuación, sólo imprimirlo con XML con las bibliotecas XML en su idioma, 910 00:51:04,380 --> 00:51:07,260 que garantice que es sintácticamente correcta y todo, 911 00:51:07,260 --> 00:51:08,720 y luego convertirlo a LillyPond. 912 00:51:08,720 --> 00:51:11,060 Así que la tecnología es posible que desee mirar en si usted está haciendo algo 913 00:51:11,060 --> 00:51:11,650 Me gusta esto. 914 00:51:11,650 --> 00:51:14,490 915 00:51:14,490 --> 00:51:16,370 >> [Inaudible], otro tecnología auxilarry. 916 00:51:16,370 --> 00:51:21,700 Esto es básicamente Tech Obras o Tech Estudio en LillyPond. 917 00:51:21,700 --> 00:51:25,380 Por lo tanto, ofrece ayuda con sintaxis, con plantillas 918 00:51:25,380 --> 00:51:28,770 común para varios combinaciones de instrumentos. 919 00:51:28,770 --> 00:51:32,780 Permite pantalla dividida de visualización de manera usted puede tener su código en una ventana 920 00:51:32,780 --> 00:51:37,350 y pdf en una ventana y haga clic sobre los lugares en el PDF 921 00:51:37,350 --> 00:51:40,650 para saltar a la correspondiente lugares en su código fuente. 922 00:51:40,650 --> 00:51:45,330 Esto es más útil si usted está realmente escritura LillyPond archivos a ti mismo 923 00:51:45,330 --> 00:51:47,400 que si usted está generando mediante programación. 924 00:51:47,400 --> 00:51:51,230 Pero, de nuevo, es algo útil a tener. 925 00:51:51,230 --> 00:51:51,970 >> Excelente. 926 00:51:51,970 --> 00:51:55,860 Otra resources-- sólo voy a pasar por esto muy rápidamente. 927 00:51:55,860 --> 00:52:01,270 LillyPond manuals-- LillyPond tiene excelente documentación en su sitio web. 928 00:52:01,270 --> 00:52:02,270 Tienen un tutorial. 929 00:52:02,270 --> 00:52:03,478 Tienen una referencia de sintaxis. 930 00:52:03,478 --> 00:52:07,010 Tienen cientos de fragmentos para varias cosas pequeñas 931 00:52:07,010 --> 00:52:09,930 yo puede ser que necesite hacer para demostrar diversas capacidades. 932 00:52:09,930 --> 00:52:12,250 Si desea utilizar el lenguaje de scripting 933 00:52:12,250 --> 00:52:14,740 o hacer más extensa personalizaciones, entonces no 934 00:52:14,740 --> 00:52:16,730 funcionamiento interno de referencia a esa URL. 935 00:52:16,730 --> 00:52:21,950 Si desea utilizar XML Música, hay esa URL, musicxml.com/tutorial. 936 00:52:21,950 --> 00:52:27,960 >> Y entonces, si usted necesita aprender esquema porque en realidad se desea utilizar 937 00:52:27,960 --> 00:52:30,960 las instalaciones de scripting en LillyPond, entonces hay una [inaudible] llama 938 00:52:30,960 --> 00:52:32,918 Interpretación Estructurado de programas de ordenador, 939 00:52:32,918 --> 00:52:35,820 que no sólo es la segunda mayor libro de texto CS nunca written-- 940 00:52:35,820 --> 00:52:39,770 encontrarme después si usted quiere saber lo que creo que el más grande es-- 941 00:52:39,770 --> 00:52:43,580 pero también es una muy buena introducción a la lengua propia. 942 00:52:43,580 --> 00:52:46,630 Usted no necesitará más de las primeras secciones. 943 00:52:46,630 --> 00:52:47,827 >> Y eso es. 944 00:52:47,827 --> 00:52:48,410 ¿Alguna pregunta? 945 00:52:48,410 --> 00:52:54,068 946 00:52:54,068 --> 00:52:57,972 >> ESTUDIANTE: ¿Dónde puedo descargar tu generada Frere Jacques 947 00:52:57,972 --> 00:53:01,050 para que pueda ponerla en mi iPod? 948 00:53:01,050 --> 00:53:07,574 >> STEPHEN Krewson: Bueno, puede escribir a algún archivo wav en Euterpea. 949 00:53:07,574 --> 00:53:08,490 Y usted tiene el código. 950 00:53:08,490 --> 00:53:10,000 Es en GitHub. 951 00:53:10,000 --> 00:53:15,590 Haga sus propias variaciones de Frere Jacques por CS50 mente colmena. 952 00:53:15,590 --> 00:53:17,095 Sería grandioso. 953 00:53:17,095 --> 00:53:18,220 CONNOR HARRIS: ¿Alguien más? 954 00:53:18,220 --> 00:53:20,261 STEPHEN Krewson: Necesitamos una mejor bombo, también. 955 00:53:20,261 --> 00:53:21,935 Es realmente malo. 956 00:53:21,935 --> 00:53:26,565 >> ESTUDIANTE: Euterpea tiene no sólo el lado composición, pero signal-- 957 00:53:26,565 --> 00:53:27,440 STEPHEN Krewson: Sí. 958 00:53:27,440 --> 00:53:30,100 De hecho, el trabajo que hizo en Euterpea cuando 959 00:53:30,100 --> 00:53:33,450 tomó esto-- hay una Curso de Postgrado en la Universidad de Yale que 960 00:53:33,450 --> 00:53:35,900 utiliza it-- estaba en la síntesis de sonido. 961 00:53:35,900 --> 00:53:39,810 Así que hay una realidad buena manera de utilizar las flechas 962 00:53:39,810 --> 00:53:46,150 y algunos de la notación que vimos de componer juntos funciones de señal. 963 00:53:46,150 --> 00:53:50,610 En particular, el bajo para la mayoría de ellos es sólo una onda sinusoidal simple. 964 00:53:50,610 --> 00:53:54,240 Pero si empiezas a componer los en formas programáticas extraños, 965 00:53:54,240 --> 00:54:00,010 usted puede conseguir sonido loco efectos, como cascadas extraños. 966 00:54:00,010 --> 00:54:04,640 Puede crear muy valiente sonidos con una gran cantidad de modulación. 967 00:54:04,640 --> 00:54:07,730 >> Hice un proyecto sobre granular síntesis, que es 968 00:54:07,730 --> 00:54:12,290 en algún lugar entre FM y muestreo. 969 00:54:12,290 --> 00:54:15,230 Se toma muy pequeña, pequeñas muestras, y luego 970 00:54:15,230 --> 00:54:20,440 combinarlos con algún tipo de modulador y crear un sonido más rico. 971 00:54:20,440 --> 00:54:24,900 También hicimos el modelado físico, por lo que tratando de pensar acerca de la física 972 00:54:24,900 --> 00:54:29,410 y psicoacústica de algo así como una trompeta, y pensando en el camino 973 00:54:29,410 --> 00:54:32,320 el sonido esta saltando la campana de la trompeta 974 00:54:32,320 --> 00:54:35,200 y la acústica de la habitación y el modelado 975 00:54:35,200 --> 00:54:40,195 que con los osciladores básicos. 976 00:54:40,195 --> 00:54:47,690 977 00:54:47,690 --> 00:54:48,940 CONNOR HARRIS: Muchas gracias. 978 00:54:48,940 --> 00:54:50,140 Gracias por venir. 979 00:54:50,140 --> 00:54:52,400 Y yo siempre estoy dispuesto a responder 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: Sí. stephen.krewson@yale.edu. 982 00:54:57,020 --> 00:54:58,810 983 00:54:58,810 --> 00:55:00,360 Guay. 984 00:55:00,360 --> 00:55:01,667