CONNOR HARRIS: Hola. Soy Connor Harris. Soy un CA CS50 en Harvard. STEPHEN Krewson: Soy Stephen Krewson. Soy un TF para CS50 en Yale. CONNOR HARRIS: Y vamos a hablaracerca de algunas tecnologías que podrían desee utilizar si te interesaen hacer un proyecto final o realmente nada con la música. Vamos a centrar en una primeralenguaje de programación llamado Haskell. Es un funcionalidioma, por lo que el paradigma es muy diferente de C o PHPu otros lenguajes imperativos que usted ha utilizado ya, y en especialen una librería escrita en Haskell llamada Euterpea, que puede ayudar a las personascon la escritura de la música funcional, básicamente. Y Stephen le guiará aa través de un gran ejemplo de eso. >> Después de esto, voy a presentarles aalgo que se llama LillyPond, que es una tecnología para la música archivos de texto. Es algo así como LaTeXpor la música si alguno de ustedes han usado LaTeX para las clases de matemáticas ootras clases P puesto o lo que sea. Y así te voy a dar, una vez más,algunos ejemplos sencillos de que y señalarle en la general,dirección de algunos recursos mejores. >> STEPHEN Krewson: EnAdemás, pensamos que sería genial para configurarun poco de consejos hacia un oleoducto entreArchivos MIDI Euterpea generados en LillyPond, por lo que ofrecemosalguna instrucción en guiones para hacer eso que sonproporcionado con LillyPond sólo para mantenerlo de código abiertoy obtener una tubería que va. CONNOR HARRIS: Una vez más,hay que destacar, estas dos tecnologías, queno tienen que utilizarlos juntos. No están diseñados para trabajarjuntos, aunque lo hacen muy bien. >> STEPHEN Krewson: Correcto. Y totalmente gratis. CONNOR HARRIS: Asíagradecimientos, que acaba de leer. STEPHEN Krewson: Debidamente señaló. Gracias a esa gente. Esto me va a quedarse en sólo un momento. El proceso de instalaciónes un poco complicado. Tenemos un leerme en la GitHubque se puede echar un vistazo a. Apenas envíeme un correo electrónico si usted tiene alguna pregunta. Pero vamos a correr esta bajo el supuestoque esto está trabajando para todo el mundo. CONNOR HARRIS: ¿Y si no puedeobtener LillyPond funcione, no es gran cosa. No hay recopilatorio en vivo queestará involucrado, al menos en mi final. STEPHEN Krewson: Haskell yLillyPond debería ambos tienen instaladores. Euterpea se descarga como unpaquete, así sucesivamente y así sucesivamente. Así que estamos hablando de música por ordenador. Y esto es sólo unamuy vista 50.000 pies. Hay algunos aspectos diferentes de la misma. Y esto es duro y esva a ocultar algunos detalles. Pero podríamos pensar en algocomo la composición algorítmica, utilizando algoritmos,utilizando el código, para generar algún tipo de-- tal vez un auto-similarsecuencia de notas, o tal vez las notas bajo alguna restricción. Y a continuación, los que podrían serrealizado o interpretado con instrumentos analógicosni nada de eso. Sin embargo, la composición erahecho algorítmicamente. >> Pero, por supuesto, tal vez el área dela música del ordenador o de la música digital estamos más familiarizados con es digitalsíntesis de sonido o muestreo digital y la grabación digital. Una gran cantidad de instrumentos digitales sonhecho a través de muestreo digital. De hecho, vamos a estar usando uno de los dela forma de una biblioteca de fuentes de sonido más tarde. >> Pero también hay algo llamadosíntesis digital que salió de finales de los años 70 y en los años 80 conYamaha y John Chowning en Stanford hacer síntesis FM oSíntesis de modulación de frecuencia, en el que tuvo un portadorseñal y una señal de modulación tanto en el espectro de audio. Pero lo que estamos enfocados enhoy en día es algo que se llama MIDI, y por supuesto, la composición algorítmica. >> No vamos a hacer instrumentos, peroestamos en lugar de ir a hacer un poco de música, y luego de que obtendrá interpretadopor algunos instrumentos que son conformes a laNorma General MIDI. Entonces, ¿qué es MIDI? No voy a profundizar demasiado en él,pero MIDI es un protocolo de transferencia de datos. Es una especie de guía a través dediferentes empresas e industrias para la organización de los sonidos o parches. Así que veremos quehay un estándar MIDI para todos los diferentes percusiónsonidos y recomendaciones MIDI para todos los diferentes tipos de sintetizador odiferentes tipos de todo el instrumento grupos en una orquesta, dicen. >> Probablemente usted está familiarizado con0 a 127 mensajes MIDI. Una señal MIDI es típicamenteun bit que indica si se trata de un dato o unapaquete de estado, y luego está siete bits de una señal. Y estos pueden controlartodo de volumen a la acción o la presiónsobre una clave particular si usted está realizando con un MIDIcontrolador, así como, por supuesto, notas. Y, por supuesto, MIDI tienesido de gran utilidad, porque es una forma de hilojuntos o cadena un grupo de dispositivos de hardware MIDI. Tengo siete u ocho años atrás en mi casa. Se pone muy complicado,pero es muy poderoso. Y es muy viejo. Es a partir de los años 80, yque es muy bonito y pequeño. CONNOR HARRIS: Sí. Todo el clásico de Nintendovideojuegos haría probablemente tener archivos MIDI para la música, por ejemplo. >> STEPHEN Krewson: He aquí unejemplo de MIDI general mostrando MIDI como una especiedel protocolo general. Y creo que podemos pensar en eldiferencia entre la especificación que debe haber algo así comosuena estos instrumentos y el real realización de esos instrumentos suenaen una fuente de sonido o un MIDI en particular sintetizador como la diferenciaentre tal vez un typeface-- que dice: en general, este es el diseño dede esta manera particular, para representar characters-- y una fuente en particularque tiene un tamaño y timbre específico, y no hay realización de el-- >> CONNOR HARRIS: Tal vez unmejor comparación sería ser el estándar Unicode says-- daun número para cada personaje, y realmente todos los idiomas del mundo, oun vasto conjunto de scripts del lenguaje en el mundo, y entonces esas sondictada en algo gráfica por diversos paquetes de fuentes. Y, obviamente, que se pueda imaginarMIDI como el Unicode de sonido. Y es sólo una lista de-- una gran corrientede los acontecimientos y los instrumentos y todo eso, y hay que tener una separadaprograma, como un tipo de letra, para hacer esto enalgo que es audible. >> STEPHEN Krewson: Entonces, ¿por Haskell? Haskell es una programación funcionalidioma, muy avanzado, muy diferente de C,muy diferente de PHP. Y vamos a ver que hay unafacilidad de composición de funciones en Haskell que nos permitirá pasar rápidamente porcomponer o escribir arriba, transcribir, algo así como Frere Jacques,esta canción simple que tiene una gran cantidad de partes en este momento queson auto-similar o repetir. Así que esto va a ser algunos dela motivación de por qué estamos usando Haskell, en el quefunciones son ciudadanos de primera clase. >> Y yo quería ampliaresto un poco. Es un poco fácilanotar Frere Jacques en Haskell. Pero lo que si queríamosañadir una parte de batería a ella? Lo que si queríamos intentar haceralgo así como un tambor de Roland 808 o 909 equipo en el que usted tieneaproximadamente 16 diferentes pasos? Por lo general, estos sonpensado en notas como 16. Y usted puede controlar lo globaltempo, y se puede seleccionar un montón de diferentes partes de percusiónde bombo, un aplauso, diferentes trampas, sombreros altos abiertos y cerradosen este tipo de canales, y entonces usted puede ecualizar oajustar su volumen. >> Y vamos a ver de una manera agradable enHaskell de representación de este paso secuenciador con toda lavarias cosas interesantes en Haskell que podemos hacer con generarlistas y filtrado de más de listas, mapeo sobre listas, la cartografíafunciones más listas. Y una disculpa rápida. Esta es una muy someray boceto excesivamente rápida de algunos de los aspectosde Haskell y Euterpea, que es un dominio específico-lenguaje incrustado escrito en Haskell para este tipo de música. Así que por favor revisar el código en línea. Arranca GHCi, que es el GlasgowHaskell Compiler intérprete. Y voy a estar haciendo algunosde esto en un poco para que pueda ver cómo se hace. >> Y esto le permite cargar conel-- la sintaxis es dos puntos y después El comando. Puede cargar en los archivos. Puede usar navegar en esos archivospara ver todas las funciones que existir en un módulo particular. Y luego, como veremos, los tipos y el tipoclases son tan importantes en Haskell, para que siempre pueda check-- especialmentesi está trabajando en una nueva DSCL así, lo que es un tipo de música? Lo que sé sobre la forma numéricatipos trabajan en Haskell, pero yo no sé mucho de música. Pero usted puede explorar la forma en que sondefinido por el uso de este tipo de comando o t y luego llamar a un particular,función o un objeto de datos. CONNOR HARRIS: Sí. Si pensabas C y Clangfue hardass acerca de los tipos, usted no tiene idea acerca de Haskell. Lo bueno es que Haskellsi usted puede conseguir su código para compilar y si los controles de tipo Haskell,es probable que sea correcto, debido a que el sistema de tipos es tan estricta. >> STEPHEN Krewson: Sí. Así que sólo quiero irthrough-- y otra vez, esto no lo está haciendo justice-- algunas delas características de Haskell que, al menos a su creators-- y fue creadoa finales de 1980 por un grupo de personas, una comisión de alrededor de 20personas-- pensado eran importantes. Y lo primero quefiguran en un documento que descrito la génesis de Haskelldurante los primeros 20 años más o menos fue que era perezoso. Entonces, ¿qué significa esto? >> Bueno, significa que cuando tenemos algún tipode expresión, hay que evaluarlo. Y Haskell hace de una llamadapor la necesidad manera o de una manera no estricta. Es decir, si tenemos un montón decomponentes de nuestra expresión, tratamos de retrasar la evaluaciónde esos subcomponentes hasta que la absoluta última minuto--es decir, hasta que realmente los necesitamos. >> Así que este designa todas que esrealmente genial, especialmente si estamos pensando en la abstracciónde un paso secuenciador musical. Tu lo haces posible, y empiezasla ejecución de un paso sequence-- si alguna vez trabajó con un tamborautomático-- y que sólo sirve para siempre. Así que sería muy bueno si nospodrían emular que en Haskell. Y podemos hacerlo con infinitavalores, en particular las listas infinitas. Es muy fácil de escribir unlista infinita en Haskell. Usted sólo puede utilizar la sintaxis abajoaquí, donde se ve 1 a 3, quitar el punto punto 3 1, yes decir una lista infinita de todos los números naturales que se extiendeen la medida de lo que puedas imaginar. >> Quiero introducir unconcepto de pliegues de inmediato. Y de nuevo, el propósitode este seminario no es para aprender acerca de pliegues en Haskello funciones de orden superior. Pero yo sólo quiero presentar adar un sentido exacto de lo extraño Haskell es y lo poderoso que es. Y en particular, vamos a ser--cuando hacemos nuestras diferentes partes de batería, vamos a estar manipulando listas denúmeros, doblarlos una sobre otra. Y para hacer eso, vamos aser el uso de mapas y pliegues. >> Hay un derecho asociativopliegue, que es este derecho aquí-- 1 menos la cantidad, 2menos la cantidad, 3 minus 0. Y la sintaxis de unaveces, le das un pliegue un valor base y luego una operation--en este caso, adición o sustracción. He mostrado ambos casos. Y luego está un acumulador queacumula más de toda la lista, aplicar ese plus operador omenos y, a continuación, la acumulación de la misma. Así que este será el-- si fuera llamadocon pliegue r plus de 0, comenzando con 0, tendríamos entonces resumir todolos números en esa lista. Y eso es una lista de 1 a 3. CONNOR HARRIS: Así que para decirlo de otramanera, pliegue r toma tres argumentos. Hay una función quesí toma dos argumentos, entonces hay un valor de arranque,y hay una lista de valores. Y lo que se hace es tomarvalor de arranque, primer valor, ponerlos en la función. ¿Qué se obtiene a cabo,tomar eso, alimentación que en la función de lasegundo valor, lo que se obtiene, tener que alimentar que en elfunción de la tercera valor. Y entonces si usted va abajotoda esta lista de esta manera, usted va a conseguir con el tiempoalgún valor singular que es del mismo tipo de lo que empezastecon y del mismo tipo como cosas en la lista y, a continuacióneso es el resultado de retorno del pliegue R. STEPHEN Krewson: Así que, en particular,éstas son funciones de orden superior, porque están tomando otrofunción como uno de los argumentos. >> CONNOR HARRIS: Sí. Si ha utilizado algunos otrosLas Lenguas sé R, [inaudible] lenguaje tiene esta, llamada Reducir. Es posible que tenga funciones similaresen otros idiomas, acaba de llamar cosas diferentes. >> STEPHEN Krewson: Ylo bueno de pliegue R en este caso es que vecesR puede trabajar con listas infinitas. Así que en este fondo, este P5está generando las notas que se encienden en el secuenciador por pasos paraalguna parte de batería, la quinta parte de batería, y tal vez se trata de una congatambor o algo así. Y esta es una forma deliberadamanera obtusa de escribir esto, pero es divertido, porquedemuestra una gran cantidad cosas sobre Haskell y Euterpea. >> Así pliegue R de esta colon-- de colon esSólo un operador que empuja cosas juntos en un películas-- pedido a un vacíolista, que es sólo los soportes vacíos. Y estoy llamando a queen esta lista infinita. Esto es en realidad dos listassuman aquí. La lista 1 comas 6 puntosdot es 1, 6, 11, 16. Así Haskell-- en solounos pocos caracteres, puede generar la totalidadsecuencia de números que son cinco números separadosse extiende hasta el infinito. Y yo Anteponer para queeste pequeño películas-- más corto 3, 8, 21-- sólo para mostrarcómo se puede concatenar listas. >> Y entonces he doblado sobre sí mismo. Y esto termina simplemente ser una especie deoperación de identidad, pero es infinita. Y doble R puede hacer eso, porqueperezosamente evalúa, como en el anterior. Si tenemos un 1 y un 2 y 3, podemossimplemente poner entre paréntesis la totalidad del resto de ella. Eso no va a funcionar paramenos o más, pero trabajará para este de colonoperación de la identidad en la lista. >> Entonces, ¿cómo usamos prácticamente que sitener una infinitamente larga lista de cosas? Bueno, Haskell proporcionauna gran cantidad de functions-- y mirar más en estos ensu tiempo-- como tomar que dice, está bien, estamosgenerar esta lista infinita, pero sólo vamos a tomar algúnnúmero de la misma y en este caso-- ya veremos esto más adelante ennuestra code-- caja de ritmos GM es sólo una especie de mundialvariable para el número de pasos en el secuenciador. En las máquinas de rodillo-in meque mostraron, eso es por lo general 16, pero he implementado con 32. En realidad no importa. >> Haskell también es puro, por lo que tiene una fuertetipos estáticos que Connor aludido. Así funciones sonmatemática en el sentido-- son más matemáticaque están garantizados a no acceder o cambiar cualquier tipo devariable o realizar entrada o salida. Así que si usted tiene una función,es determinista. Siempre va a devolver el mismovalor en el estado del programa o siendo el mismo. Hay, por supuesto, excepciones monádicosa esto, pero eso es más allá de nuestro alcance. >> CONNOR HARRIS: Sí. Lo que esto significa, sin embargo, está ahíson algunos importantes [inaudible] consecuencias de esto. Una de ellas es que es muy fácilparalelizar programas Haskell. Porque si usted tiene,decir, una función de ese tiene que operar en un millón de valores, siusted sabe que la función será siempre dar a conocer el mismo valor siusted alimenta a una cierta value-- si usted es [inaudible] f 1, f de2, entonces f de 3 o whatnot-- f de 1 no va a escribiren un archivo o hacer algo que alterará el valor de f2. Usted sólo puede dividir esta función a unmillón de máquinas diferentes o un millón diferentes hilos o lo que sea,obtener todas las respuestas de vuelta, obtener todos los valores de retornoespalda, y luego ya está. Así que es muy fácil de paralelizar cosas. >> Lo malo es que de entraday la salida especialmente encajar en el sistema de tiposen formas muy complicadas. No vamos a entrar en eso ahora mismo, pero yole animamos a mirar algunos recursos en línea si usted quiere aprender acerca de eso. >> STEPHEN Krewson: Asíescriba classes-- y esto era-- clases de tiposse inventaron para resolver un problema de la sobrecarga de operadores. Así que queríamos tener la igualdadentre los diferentes tipos de cosas. Por supuesto, podríamos pensar de--igualdad entre tipos numéricos es muy fácil de pensar, pero¿qué pasa con la igualdad entre las listas? ¿Qué pasa con la igualdad entreestructuras de datos pierna árbol? Y todo esto es posible enHaskell por clases de tipos. >> Así que si se define un determinado type-- datosy aquí, estos son tonos musicales. Finalmente estamos consiguiendoun poco de música de ordenador. Así que tenemos C, C aguda,y así sucesivamente y así sucesivamente. Pertenecen a un grupo dediferentes clases de tipos. EQ-- que pertenecen a la clase de tipo de EQ. Eso significa que ellos apoyanoperaciones de igualdad. Así que usted puede evaluar si un solosecuencia de primitivas musicales es el mismo que uno diferente. >> Pertenecen a la clase ordinal. Eso significa que hay un orden para estos. D se produce después de C. C agudaviene después de C también. Pertenecen a la clasemostrar, lo que significa que pueden imprimirse a una consola o terminal. Pertenecen a laclase enumerado, que significa que aunqueestos son los personajes, tienen una numérico subyacenterepresentación a partir de las 0 y salirse a través de embargomuchas cosas están aquí, 20 más o menos, o 30 o 40, tal vez. >> CONNOR HARRIS: Y cuandotenemos un tipo de datos que derives-- con esa palabra clave"deriving--" una cierta clase de tipo, significa que el compilador intentaráconstruir algo automáticamente. Así que tal vez querrásdefinir una calidad diferente. Usted querrá definir Do sostenidocomo igual a D plana, por ejemplo. Con esta construcciónaquí, no creo Do sostenido y plano D será igual, porqueel compilador automáticamente decir que cada valor diferente posiblees distinto de todos los demás. >> Por lo que es posible anularlas implementaciones por defecto de estos tipos de clases. Una vez más, mira la referencia siquieres aprender sobre eso. STEPHEN Krewson: Yaquí, en realidad, esto va a ser útil para cuando codificamos después. Vemos algunos de los operadores infijospara la composición secuencial, composición paralela, y por lo tantosucesivamente, estas ventajas y signos de igual rodeada por dos puntos. Eso significa que podemos jugar estos diferentesprimitivas musicales uno tras otro. Esa es la composición secuencial. >> O podemos reproducirlos enparalelo al mismo tiempo. Así que puedo tener un valor musical,y luego esto es igual y dos puntos, infijo operador de composición paralela,y reproducirlos como un tipo de acorde. Y vamos a utilizaresto cuando combinamos nuestra parte de batería con nuestrocancioncita Frere Jacques jugar estas dos secuencias devalores musicales al mismo tiempo. >> Currying Curry es-- por última veznombre de Haskell Curry, quien la imagen Haskell se nombra después. Y esto nos permite unaagradable elegancia cuando estamos escribir todos estos diferentesfunciones o filtros que estamos va a ser la cartografía sobre nuestras listas. Una función de dosarguments-- f de x e Y- se puede representar comof de x aplica a y. Así que es una función de laun argumento que devuelve otra función de un argumento. Así que esto significa que podemos asignar unafunción f de x sobre la lista de y de. CONNOR HARRIS: ¿Quieresdar un ejemplo de esto? STEPHEN Krewson: Sí. Tengo un ejemplo aquí desdealgunas de las cosas que vamos a escribir. Así replicar 2-- así,replicar tendrá un valor, que es cuántosveces para replicar algo, y luego tomará un value--por lo general una lista o algo. Así que aquí, estamos mapeoreplicar 2 sobre otra lista. >> Así que si mapeamos replicar 2,si replicamos 2 aplica al primer elemento de este películas-- yestos son listas de phrases-- musical producirá dos de "usted sleeping--"así que estás durmiendo, estás durmiendo. Así que ahora tenemos dos. Pero la réplica necesitan dosargumentos, sino porque estamos currying y luego mapeo,podemos representar la réplica 2 como habiendo sido devuelta como una función deun solo argument-- simplemente replicando dos veces. Y luego estamos aplicando eso a cada unoelemento de esta lista de frases. >> Y concat es un Haskelloperación para aplanar una lista. Debido a que la réplica 2 voluntadproducir una lista de listas. Y esta es la forma intermedia aquí. Y así entonces podemos concato aplanar que fuera dos veces. CONNOR HARRIS: Un simpleejemplo de currificación, si hubieras como-- imaginar f es sólo unfunción de multiplicación que tarda de dos argumentos y devuelve su producto. Así que si usted tiene una f 4 5, es 20. Pero usted puede pensar en esto comoTambién-- usted tiene una función f 4 que toma un argumento y devolucionescuatro veces este argument-- solo aplicación parcial quesólo un argumento 4. Y si usted alimenta f de 45, que le dará 20. Y eso es una simpleejemplo de currificación. Por lo general es uno de los libros de texto. >> STEPHEN Krewson: Lambdaexpresiones o funciones anónimas son otro sello distintivo de Haskell. Así que si tenemos que preparar unapequeña réplica vida función, pero dicen que no está enla biblioteca estándar, podemos utilizar una sintaxissimilar a la siguiente. Y vamos a brisa sobre esto. Una cosa que usted verá un montón de en elcaja de ritmos es que estamos haciendo llamadas a algo llamadofiltrar, que al igual que antes, es una asignación de una funciónmás de una lista, pero es una asignación de una función booleana. >> Así que aquí tenemos un ejemplode una forma anónima función booleana que definesólo toma un par de valores. Esto no es estrictamente hablandouna función anónima. Pero es definir conque la sintaxis por razones de brevedad, y esto sólo se necesita x módulo n-- CONNOR HARRIS: Sí. Así que f es una función dedos argumentos n y p que devuelve una función que es en sí mismauna función de un argumento, a saber, x. STEPHEN Krewson: Ioperadores infijos mencionado. ¿Cuáles son los operadores infijos? Bueno, operadores infijos son losforma normal representamos operaciones, decir, en matemáticas-- 2 más2 en lugar del operador más y luego dos argumentos 2 y 2. CONNOR HARRIS: Se llamanotación polaca inversa, que es un término dudo alguno de ustedes sabría. >> STEPHEN Krewson: Correcto. Notación polaca inversa o prefijo. Pero Haskell decidióutilizar operadores infijos. Así que estos son algunos delos personalizados que se definen para laEuterpea DSCL en Haskell. Así que esta era la composición secuencial. Este fue composición paralela, y estofue truncando composición paralela. Y necesitaremos quecon nuestra caja de ritmos, porque vamos a utilizar la últimaoperador en ese pequeño tupla no a tocar la caja de ritmos a lo largocon nuestra canción Frere Jacques. Y nuestra caja de ritmos esva a ser infinito. Simplemente juega siempre. Pero la canción Frere Jacques no lo es. No es tanto tiempo. Es sólo un par de bares. Así que tenemos que detener la caja de ritmos comopronto como el valor musical más corta viene a su fin. Y ese operador infijoes super servicial con eso. >> Y infijo notación comoesto es un poco agradable, porque dice que tiene una función comocita, la cual da la división entera de x por algo else--lo siento, eso debería ser a y b. Se puede escribir como una cita de b. Así que si usted es elemento put--Otro ejemplo de esto. x elemento de alguna lista, si ponesen acentos abiertos, usted puede utilizarlo. A pesar de que no es un símbolocomo más o menos o los tiempos, se puede utilizar el nombre de unafunción como la de acentos abiertos como operador infijo, que está muy bien. CONNOR HARRIS: Una vez más, esto estodo el azúcar solo sintáctica, la verdad. No afecta el núcleo del lenguaje. >> STEPHEN Krewson: Así que vemos aquí por elúltima frase de nuestra canción Frere Jacques, Jugué algunos pequeños acordes oterceras partes que utilizan la composición paralela operador. Esta es otra forma de decir algunade lo que hemos estado diciendo. Así que usted puede asignar funcionesde un argumento sobre listas. CONNOR HARRIS: Una vez más, las referenciaslos libros de texto introductorios Haskell-- tendrá todo esto en el mismo. >> STEPHEN Krewson: Así que aquí está un muylínea clave del secuenciador por pasos vamos a echar un vistazo a utilizaruna comprensión lista. Y vemos aquí es que el elementoen el operador fija entre comillas espalda. Así que si x es un elemento de la lista dexy, entonces nos van a llamar a funciones perc. Así perc es sólo una función de percusión. Se necesita algo de valor de p que esparte del conjunto acotado de todos los diferentes sonidos de percusiónque vimos en una diapositiva anterior, y luego se da esaduración de una negra. De lo contrario le da un regiones QNR y regiones QNRes sólo un descanso negra. >> Así que esto es la construcción de algo agradable. Tenemos una lista de elementos, yVamos a lazo sobre alguna lista de uno al valor máximo de nuestra secuenciador por pasos. Y cuando estamos en un i particularesa lista de uno al valor máximo, si i es un miembro de estaconjunto creado en esta función, bien, entonces nos convertimosen una nota de percusión. De lo contrario, sólo jugamos un descanso, quees decir, sólo guardamos silencio. Y podemos ver aquí que enesta sintaxis comprensión lista, x está poblada por estaLista construido un solo con el tamaño global del secuenciador. CONNOR HARRIS: Sí. La sintaxis básica delistas por comprensión es soporte, el valor de la participaciónAlgunas variables, bar, posibles valores de las variablessí mismos, cerrado soporte. Y si usted ha hecho fijar la notación constructoren cualquier tipo de clase de matemáticas, es posible que haya configurado 2n talesque n es en o n está en z. Similar cosa-- esta notaciónestá destinado a ser sugerente de que la notación matemática. STEPHEN Krewson: Y usted puedeaplicar múltiples predicados y varios filtros en una listacomprensión, que es bastante agradable. Algebraica que Tipos--no perdurará mucho tiempo aquí. No es una buena idea enHaskell o una buena noción obvia de cómo tomar, digamos, un defaultparámetro a una función o algo así. En Python, esto es bastante fácil. Usted sólo puede decir con iguales enla declaración de la función, un valor por defecto encaso de que ninguno se suministra. >> En Haskell, podría tal vezutilizar tal vez el tipo, tal vez, que tiene ya sea nadao un valor de tipo sólo una. Así que aprovechamos esto en la caja de ritmosque nos permita dar volumen opcional parámetros a cada una de las partes de batería. Así que eso nos da una manera de tener EQo un volumen en un canal en particular. >> CONNOR HARRIS: EnOtros ejemplos Haskell, Es posible que vea puede ser usado parafunciones que pueden fallar. Esta es una pregunta común. >> STEPHEN Krewson: Y usted puede suministraralgún tipo de mensaje de error por defecto. Y eso es especialmente útil cuandoque está haciendo la E / S en Haskell. Eso puede ser trucos. CONNOR HARRIS: O para unejemplo similar, piensa de una función que implica la divisiónde un parámetro que podría ser 0. Y esa función podíavolver tal vez lo que sea. Así que si no hay división por 0,volverá simplemente lo que sea. Y si hay división por0, devolverá nada como una forma de señalización del error. Debido a que una de las consecuencias deMuy estricta tipificación de Haskell es que no hay real--excepciones son torpes, básicamente, manejo de errores es torpe. Y esta es una muyforma común de hacerlo. >> STEPHEN Krewson: Así que ahora tenemosa otra cosa endiablada sobre Haskell, que es el patróndefiniciones coincidentes y función. He mostrado en la última diapositiva deldeclaración de la secuencia de pasos función, que tuvo un mejor valor,a continuación, un int, a continuación, una lista de enteros, a continuación, devuelve una secuencia delos valores de la música allí anotados tanto con el tono y volumen. >> Así que los tres argumentos pueden serpatrón emparejado de la siguiente manera. Y siempre queremos estar seguros de quehacer un caso base o caja de salida primero. Y estos guiones bajossolo puede interpretarse para referirse a cualquier valor que está ahí. Así que si recibimos una llamada al paso de secuenciacon algún valor, algún otro valor, y luego la lista vacía, lo que queremosvolver es sólo silencio, un resto 0. >> Y en lugar de quesiendo una lista vacía o 0, es un resto 0, porque somostratar con el tipo de música, y la lista vacía de la músicatipo es sólo un resto de ninguna duración. No es la música. Y luego vemos si conseguimos un pasosecuenciar con un v para el argumento de volumen, p para instrumento de precauciónargumento, y luego una lista de las x. >> A continuación hacemos algunas cosas. En particular, se aplicaesta lista por comprensión, y realizamos algunosoperaciones sobre el valor tal vez para convertirlo en un valor numérico para quese podría entonces enumeró y utilizado para seleccionar el instrumento. Una vez más, esto es un pocopoco deliberadamente inconcise sólo para mostrar todas las cosas rarasusted puede hacer en Haskell como usted echar un vistazo a él en su propio tiempo. >> Correcto. Así que estamos finalmente llegar ahacemos lo que nos propusimos hacer, que es hacer algo de música por ordenador. Así que vamos a tratar dehacer la canción Frere Jacques. Así que hay cuántosfrases en Frere Jacques? Cuatro. Excelente. Y lo que es interesante es quetodos están repetidos la misma cantidad de veces, que es de dos. >> Así que tenemos cuatro frasescada repetirá dos veces. Y, en particular, están en una ronda. Y hay muchos,muchas maneras de implementar una ronda que podría ser divertido de hacer. Lo he hecho en unbonita forma sencilla aquí, que es sólo para construct-- la líneafunción toma una lista de valores de la música y lo convierte en la composición secuencialmediante la aplicación de esa composición secuencial operador. >> Y entonces me demoro las diferentes parteshaciéndoles comienzan con un descanso. Así que empiezo con un descanso de dos medidas,y luego un resto de cuatro medidas, y luego un resto de las seismedidas, y luego la ronda funciona, como todos sabemos esta canción. Vemos dos anotaciones omodificaciones de los valores de la música que están contenidos en este secuencialdisposición de los elementos de la música. Tenemos un volumen add. Esta es una función para anotarmúsica con un volumen particular. Este es un buen ejemplode una señal de funcionamiento MIDI de 0 a 127, los siete bits deinformación que puede ser llevado. >> Y entonces-- lo vimos muybrevemente, pero el general MIDI lista de todos los diferentes instrumentos. Y no hay un montón de ellos. Si utiliza una estación de trabajo de audio digital,como Ableton Live o Pro Tools, hay una gama muy ampliade sintetizadores e instrumentos VST. Pero sólo el estándar MIDItiene una docena de pocos, o varios. Y algunos de ellos son divertidos. Pensé que sería divertido si jugamosel instrumento del instrumento MIDI helicóptero, y luego elel próximo paso a través de la ronda, hicimos un sintetizador almohadilla, y luego deeste plomo cursi sintetizador de onda cuadrada, y luego expresar exudado, que son unapoco confuso en mi mala MIDI sintetizador, pero en Aceptar. >> Y luego vemos este lety en la sintaxis de Haskell, y entonces nos estamos jugandotodas estas partes juntas con el operador de composición paralela. Y probablemente podríamos mostrar algo de esto. Aquí está el código. Y se puede ver en C, que habría ungran cantidad de aclarar la garganta y el ajuste el código de la tabla antes depodría hacer música como esta. O cualquier otra programaciónidioma, lo que probablemente tener que interactuar con algún tipo debiblioteca o API y configurar todo, y entonces usted tiene que limpiar. Pero aquí, en Haskell es, creo, una vezque el cuelgue de ella, increíblemente legible y muy expresivo. Así que no es la implementaciónde Frere Jacques. Correcto. Ahora queremos añadir percusión,y esto es un poco más desordenado bits. Así que echemos un vistazo a las diapositivas. Así que la gran idea es hacerun montón de listas o partes. En las máquinas de rodillo-in,eran típicamente de aproximadamente unos ocho 10 de ritmo o percusión partes. Y a continuación, utilizar un montón de técnicas. Y hemos hablado de these-- usandopliegues, filtros, funciones lambda, asignada sobre las listas de generar valoresen cierto rango de 1 a r, r es 16, o 32 pasos en el secuenciador. >> Y luego si hay un valor en la listaya que estamos corriendo por el secuenciador, corriendo a través de una ymás, se convierte en esa nota, y que la muestra se desencadena. Le mostramos las diferentes maneras extrañasSe me ocurrió para generar notas. Pruébalo en tu propia suma semi. Va a sonar fresco. El tiempo lo permite, vamos a ir a través de este. Pero por ahora, supongodebemos demostración de lo que tenemos. Esperemos que esto va en Aceptar. >> Así que esto es GHCi. Y vamos a cargar un archivoHe llamado song.lhs, que es el archivo que acabo de mostrar. Vale genial. Como Connor dijo anteriormente,compilado, tipo marcada, así que puedo respirar mucho más fácil. No va a estallar en mí. >> Yo quiero mostrarte algo útil. Se puede ver que unmódulo cargado llama 50. Usted puede navegar a ese módulo. Y esto es tan agradableacerca doing-- quizá lo que estás haciendo en Haskell no esllamado desarrollo de software, pero se puede hacer un montón dediversión cosas por su cuenta. Y el flujo de trabajo es muy agradable yaen comparación con un montón de otras lenguas, porque se puede ver en una realidadforma legible por lo que está pasando. Así vemos que tenemostodas estas frases, que son listas de lanzamientos de música y, a continuación, nosconstruir estas arriba en algo más grande, que es una canción de la música. Es una unidad musical. Y luego podemos jugar todo estocon una función llamada reproducción de música. Se puede ver que aquí abajo. Que se acaba de jugar. >> Debo decir-- Yo no hablo deeste signo de dólares que está en todas partes. Signo de dólar es otro operador infijo. Pero tiene la prioridad más bajade cualquier operador, lo que efectivamente significa que todo enla izquierda del signo de dólar y la derecha de la muestra de dólar,vamos a conseguir evaluado antes. Así que es algo así como otramanera de añadir paréntesis. >> CONNOR HARRIS: Es básicamentecomposición de funciones. Y asegura que no tener-- siTiene funciones de cada lado o infijo operadores de ambos lados, no lo haránasociar a través de ella y darle resultados inesperados. >> STEPHEN Krewson: Así que can--usar eso, podemos llamar. En primer lugar, vamos a jugar sin los tambores. Ese es el helicóptero,el helicóptero MIDI. >> [REPRODUCCIÓN DE MÚSICA] Ahí está la onda cuadrada. El exudado voz. Y realmente se puede ir salvaje con este. Elegí un muy simple,porque sabía que no debía morder más de lo que podía masticar. Sólo tienes que mantener bastante simplepara mostrar las ideas principales. Pero entonces yo estaba como, tenemostiene que añadir algunos tambores para esto. El hecho de que se trata de unapoco impenetrable, y yo no hice uso de lanombre de las partes de batería, Me asignan ellos-- porque sonparte de esa clase enumerado, Yo les asignan a ints. Uno de ellos es como un bombo. Cero es así. Siete es un sombrero alto. Y hasta aquí donde elfunciones se ponen un poco más al azar, estos son como las congas. >> Así que si usted piensa sobre-- tal vez unforma divertida de poner en práctica una caja de ritmos es utilizar muy ordenadopatrones en el bombo. Así, por ejemplo, en el filtrado sobre ellista con todo lo que le da la espalda un 1 cuando se toma del módulo 04. Así que me sale 1, 5, 9, 13, 17-- por lo que estees el primer tiempo de cada compás. >> Y entonces este es el mismocosa cambió en dos etapas. Así que esa es la poco convencional. Así que esto seríaalgo así como un sombrero alto. Y, de nuevo, aquí abajo,que es un poco al azar, porque estamos haciendo congas. Y tengo algunas maracas abajo, también. >> Así que podría llamar a juego caja de ritmos,pero sería seguir para siempre, y podría empezar a agarrar hastatoda la memoria en mi sistema. Así que voy a llamar a esta funciónreproducir música, que como veremos, utilizar la composición paralela truncandojugar nuestra pequeña canción Frere Jacques junto con esta caja de ritmos raro. Así que vamos a echar un vistazo. Y por favor, mejorar midisposición de todas las partes de batería. No es mi especialidad, pero yotenía un montón de diversión de hacerlo. >> [REPRODUCCIÓN DE MÚSICA] >> Así que por supuesto, todo esto esun poco, no tan divertido si no podemos convertirloa una puntuación así que tal vez podría interpretarsepor un intérprete humano. Así que no voy a correr aquí. Yo ya he generado los archivos. Se puede ver que hay undot LilyPond file-- y esto será mi segue aConnor-- y un archivo de puntos MIDI, y un archivo PDF de puntos, que es lo queLilyPond en última instancia generar. >> Pero estos son los guiones, y voy asimplemente correr con sus opciones de ayuda. Si recibe estos marcha conEuterpea, puede generar un archivo MIDI. Y a continuación, desde el archivo MIDIcon este programa MIDI 2LY, puede generar un lirioArchivo de la charca, y entonces usted puede generar un PDF de la partitura. Y deberíamos echar un vistazo a esto. Así que Connor probablemente mostrarcómo anotar esto mejor, pero esto es Frere Jacques comogenerada por mí en Euterpea. Es sólo en C. Yo debería haber figuradolo que el hack en realidad en. Pero esa es la tubería paracómo se hace eso con eso. Vamos a hablar más sobre LilyPond. >> CONNOR HARRIS: OK Vamos a ver. ¿Sabía usted menciona Aprenda Usted Haskell? STEPHEN Krewson: Ah, sí. Echa un vistazo a Aprender Usted Haskell. Está en los recursos. Así es como empecéaprendizaje, y es genial. El aprendizaje no tonto. >> CONNOR HARRIS: Así que es en línea. Así que un tipo llamado [inaudible]learnyouahaskell.com, sin espacios. La gramática es enfermo. STEPHEN Krewson: Es ilustrado, también. CONNOR HARRIS: Entonces, ¿qué es LilyPond? Es una programación declarativaidioma para componer tipo de música. Así declarative-- puedaspensar en cosas como HTML, donde no estás diciendo-- HTMLno dice cómo los navegadores web debe render páginas paso a paso. Es sólo decir estoes una descripción textual de lo que quiere la página para que parezca. >> Y entonces es también un programaque compila esta lengua, o leer su adentro y luego en realidadhace la composición tipográfica para usted, y escupe estosmaravillosas que buscan partituras en formato PDF. También puede obtener el formato PNG o lo que sea. Una buena manera de pensarde esto es por analogía es que LaTeX es algo así como LillyPond,pero por sólo tipografía ordinaria. Así que en lugar de-- no esWYSIWYG, lo que ves Es lo que obtienes, como, por ejemploFinale es, o Sibelius, o Microsoft Word, donde puede escribiren tiempo real y los proyectos de las cosas en tiempo real y ver los cambios instantáneamente. >> Se basa texto. Usted tiene que compilar supuntajes utilizando un programa separado y salir archivos PDF más tarde. Esto es un poco menosconveniente para el uso si eres tratando de escribir directamenteen una puntuación y ya está tratando de componer en el equipo. Pero hay una gran cantidadde ventajas para ello. Uno, que tiene un aspecto mucho más agradable,porque LillyPond puede en realidad tomar el tiempo para hacerlas decisiones de diseño de forma adecuada, a diferencia de Sibelius o Finale, que tienenpara hacer algoritmos comprometidos de manera que pueden mostrarcosas en tiempo real. >> Así que ¿por qué es LilyPond--gráficos por ordenador es difícil. Si usted está haciendo algo con la músicay quiere escribir partituras, usted no desea escribircabo todo por sí mismo empezando por cómo dibujarpersonal y cómo dibujar cuadernos. Es muy difícil.Se ha hecho antes. Estás bien. >> Si desea utilizar Finale o Sibelius,los formatos de archivo para esas cosas son muy complicados, y no se puederealmente utilizarlos mediante programación. Puede abrir Sibelius con Finaley vaya a Archivo, Exportar como PDF a ti mismo, pero usted no puede realmentellamar a que a partir de un guión. LillyPond, puede llamar alde esos guiones. Usted podría repetir fácilmenteLillyPond con LaTeX. No voy a tener mucho tiempo para iren estas tecnologías en este momento, pero existen. Si usted quiere veren un libro LillyPond, es un programa que viene consu distribución LillyPond, y es para la iteraciónFragmentos LillyPond en LaTeX si quieres hacer algocomo un documento grande musicología con ejemplos, por ejemplo. Y es una buena habilidad paravida si estás haciendo nada con la música, no sólo CS50. He usado LillyPond para todosde mis proyectos de composición desde que era básicamente unúltimo año de secundaria. >> Así que aquí están algunos ejemplos sencillos. Esto es básicamente representativadel nivel de dificultad que la mayoría de la genteenfrentarlo estaban tratando utilizar LilyPond para proyectos simples. Este primero es el principioa un preludio coral de Bach. Este fondo es un extractode uno de mis propias obras, y es justo allí para mostrarusted cosas como [inaudible] poniendo varias líneas en el mismopersonal, cómo letra undersetting funciona. Underlays líricos son una cosa que es muyfácil de usar LilyPond para la música coral. >> Y entonces hay algo másejemplos complicados aquí. Todo esto se hace enLilyPond y son factibles. Este primer extracto es de[Inaudible] por [inaudible]. Y esto [inaudible] deuna pieza para el bajo solista flauta por [inaudible],que es un longtime-- que era un miembro de largo plazo de ladepartamento de música aquí, creo. No estoy seguro de dónde ha ido a. Pero él era el asesor de la Universidad de HarvardAsociación de Compositores durante mucho tiempo. Hombre maravilloso. Y escribe un poco de música que tiene muynotación complicada que LillyPond no obstante, puede manejar muy bien. >> Así que para darle un sentido de lolas capacidades de esta cosa tan son-- el funcionamiento interno de LillyPondson muy complicados. Y usted puede utilizarlo paraun largo tiempo, incluyendo para algunos bastante complicadocosas, sin realmente tener que saber mucho acerca de ellos. Pero la idea básica es que en elnivel más bajo, los átomos de LillyPonds son las notas. Las notas contienen unacontexto llamados voces. Así el contexto de vozbásicamente corresponde a una sola línea de la polifonía. Y luego contexto puede sercontenida jerárquicamente en los de más alto nivel querepresentar personal en la puntuación o agrupaciones más grandes, comopersonal de piano o el personal del coro, y luego, eventualmentecontextos puntuación enteras. Y en realidad se puede abarcarmúltiples cuentas en un libro. >> Y cada contexto tiene unanúmero de grabadores conectados. Si se mira a través de lacontenido de un contexto e imprimir un cierto símbolo o unacierta clase de símbolos como necesario. Así que para todos los contextos de voz,hay [inaudible] notas grabador que es básicamente una función oun objeto que escribe toda la nota cabezas en las partes correctas de una página. Luego hay un grabador leporino, queescribe cabo hendiduras en el personal. Entonces hay un metrónomomarca grabador que escribe a cabo indicaciones de metrónomo en una partitura. Y todos éstos encajan bastantebien en la jerarquía. Y es muy, muy, muypersonalizable, lo que usted necesita si usted quiere conseguir cosas por el estilo. >> Así que todos los contextos tienen ungran cantidad de diferentes atributos que se puede modificar para todo,a partir de la separación a diversos fuente selección de tamaños de cosas. Si quieres hacer aúnlas cosas más complicadas, hay un lenguaje de scripting embebido. Utilizan esquema, quees el dialecto de LISP. Estos probablemente no lo hacensignifica nada para ti. Pero, básicamente, un esquemaotra funcional lenguaje de programación, más o menos. >> STEPHEN Krewson: El tie-in. >> CONNOR HARRIS: Sí. Es un buen tie-in, supongo. Y se utiliza como lengua de enseñanza,de hecho, hasta la misa Ave. En el MIT. Y es muy útil para LillyPondpor diversas razones técnicas. >> Y por lo que si usted desea hacer sencillaajustes que dependen de los condicionales, por ejemplo-- que hay ciertacondición de una partitura que se reunió, realizar modificaciones a ladiseño o whatnot-- continuación esas instalaciones están ahí. Son complicados. Así que aquí está un ejemplo de código bastante simple. Es cinco líneas. Básicamente, estoy definiendo dos personales. Está en 3.4. El primer equipo cuenta con unaadjunta marca el tempo, pero eso es en realidad vapara pasar a toda la partitura, porque las marcas de tempoestán en el marcador equilibrado. El grabador marca de metrónomoSe adjunta para anotar contexto. Hay diferentes llaves,porque el [inaudible] grabador Se adjunta el personal. En realidad se puede hacer es. La muestra que escribí esrealidad en do mayor, pero es sólo parademostrar que puede tener diferentes claves en diferentes varas. Y la sintaxis básica es que escribesseñalar nombres con E, F, G, lo que sea. Si usted quiere hacer alteraciones,usted sufijo es o ES. Esto es de holandésconvenciones musicológicos. >> Y para hacer saltos de octava, usted tiene que utilizarestas garrapatas marcas, coma o apóstrofo. La relativa sólo significalo que tengas una nota, automáticamente se plaec en eloctava más cercana a la anterior. Y si usted quiere saltar másun fifth-- decir un quinto o más-- entonces usted tiene que utilizar el [inaudible]. Pero por lo demás, no tiene queespecificar la octava de cada nota. >> Y en relación C, primer yC, que acaba de especificar Do central y la base C, especialmente primeras notas. Entonces usted tiene estas varas que organizanestas dos voces o muestras de música, y usted tiene una cuenta. Y eso se ve así. >> Si usted quiere tomar el tiempo paracopiar esa muestra de LillyPond código de la anteriordeslizarse por aquí, y usted puede escribirlo para LillyPond ti mismo. Yo sé que tenemos algoque se parece mucho a esto. Así que hay otra tecnologíamantuvo llamado XML Música por personas completamente diferentes. XML es que unos datos textuales structure--No debería decir los datos structure-- dicen mapa metáfora más o menos. Y está diseñado para mantenerdatos jerárquicos muy bien. HTML, por ejemplo, es un tipo de XML. Y se puede decir XML porquetenía todos los soportes de ángulo y ángulo marcas de barra soporteque los campos de datos muestran. >> Yo no tengo un códigoejemplo de Música XML. Usted puede encontrar usted mismo. Básicamente, la razón es posible que deseepara usar XML como la etapa intermedia es, primero de todo, esun formato de intercambio para básicamente every-- no debería decirtodos, pero un montón de puntuación diferente escritores. Así que si usted escribe en la MúsicaXML, no sólo puede LillyPond leer con la ayuda de este auxilaryprograma llamado XML Música para LY, sino también Finale puede leerque, Sibelius puede leerlo. Dependiendo de cómo su objeto internojerarquía trabaja para la representación de la música, podría ser más fácil que escribirla música XML que a LillyPond y sólo se basan en XML Músicaa LY para hacer la conversión. >> No creo que [inaudible] tiene XML Música. STEPHEN Krewson: No lo hace. Alguien está trabajando en ello, sin embargo. >> CONNOR HARRIS: OK. Euterpea no tieneFunción de salida XML Música todavía. Si quieres una idea final del proyecto,tal vez ponerse en contacto con los chicos que Esteban lo sabe, yque podrían utilizar su ayuda. >> STEPHEN Krewson: Me encantaría eso. CONNOR HARRIS: También, básicamente,cada lenguajes de programación eso es que se precieya cuenta con una biblioteca de XML, lo que puede convertir internamente todode su música en un objeto que la biblioteca XML puede escribirque requeriría menos alteraciones en su estructura internapor cualquier música que objetos quiero escribir que escribirlodirectamente en LillyPond haría. A continuación, sólo imprimirlo con XML conlas bibliotecas XML en su idioma, que garantice que essintácticamente correcta y todo, y luego convertirlo a LillyPond. Así que la tecnología es posible que deseemirar en si usted está haciendo algo Me gusta esto. >> [Inaudible], otrotecnología auxilarry. Esto es básicamente Tech Obraso Tech Estudio en LillyPond. Por lo tanto, ofrece ayuda consintaxis, con plantillas común para varioscombinaciones de instrumentos. Permite pantalla dividida de visualización de manerausted puede tener su código en una ventana y pdf en una ventana yhaga clic sobre los lugares en el PDF para saltar a la correspondientelugares en su código fuente. Esto es más útil si usted está realmenteescritura LillyPond archivos a ti mismo que si usted está generandomediante programación. Pero, de nuevo, esalgo útil a tener. >> Excelente. Otra resources-- sólo voy apasar por esto muy rápidamente. LillyPond manuals-- LillyPond tieneexcelente documentación en su sitio web. Tienen un tutorial. Tienen una referencia de sintaxis. Tienen cientos de fragmentospara varias cosas pequeñas yo puede ser que necesite hacer para demostrardiversas capacidades. Si desea utilizarel lenguaje de scripting o hacer más extensapersonalizaciones, entonces no funcionamiento interno de referencia a esa URL. Si desea utilizar XML Música, hayesa URL, musicxml.com/tutorial. >> Y entonces, si usted necesita aprender esquemaporque en realidad se desea utilizar las instalaciones de scripting en LillyPond,entonces hay una [inaudible] llama Interpretación Estructuradode programas de ordenador, que no sólo es la segundamayor libro de texto CS nunca written-- encontrarme después si usted quiere saberlo que creo que el más grande es-- pero también es una muy buenaintroducción a la lengua propia. Usted no necesitará más delas primeras secciones. >> Y eso es. ¿Alguna pregunta? >> ESTUDIANTE: ¿Dónde puedo descargartu generada Frere Jacques para que pueda ponerla en mi iPod? >> STEPHEN Krewson: Bueno, puede escribira algún archivo wav en Euterpea. Y usted tiene el código. Es en GitHub. Haga sus propias variaciones deFrere Jacques por CS50 mente colmena. Sería grandioso. CONNOR HARRIS: ¿Alguien más? STEPHEN Krewson: Necesitamosuna mejor bombo, también. Es realmente malo. >> ESTUDIANTE: Euterpea tiene no sóloel lado composición, pero signal-- STEPHEN Krewson: Sí. De hecho, el trabajo quehizo en Euterpea cuando tomó esto-- hay unaCurso de Postgrado en la Universidad de Yale que utiliza it-- estaba en la síntesis de sonido. Así que hay una realidadbuena manera de utilizar las flechas y algunos de la notación que vimos decomponer juntos funciones de señal. En particular, el bajo para la mayoríade ellos es sólo una onda sinusoidal simple. Pero si empiezas a componer losen formas programáticas extraños, usted puede conseguir sonido locoefectos, como cascadas extraños. Puede crear muy valientesonidos con una gran cantidad de modulación. >> Hice un proyecto sobre granularsíntesis, que es en algún lugar entre FM y muestreo. Se toma muy pequeña,pequeñas muestras, y luego combinarlos con algún tipo demodulador y crear un sonido más rico. También hicimos el modelado físico, por lo quetratando de pensar acerca de la física y psicoacústica de algo así comouna trompeta, y pensando en el camino el sonido esta saltandola campana de la trompeta y la acústica dela habitación y el modelado que con los osciladores básicos. CONNOR HARRIS: Muchas gracias. Gracias por venir. Y yo siempre estoy dispuesto aresponder preguntas por email-- connorharris@college.harvard.edu. >> STEPHEN Krewson: Sí.stephen.krewson@yale.edu. Guay.