CONNOR HARRIS: Ola.
Eu son Connor Harris.
Eu son un CA CS50 en Harvard.
STEPHEN Krewson: Eu son Stephen Krewson.
Eu son un TF para CS50 en Yale.
CONNOR HARRIS: E imos falar sobre algunhas tecnoloxías que pode
quere usar, se vostede está interesado en facer un proxecto final ou realmente
nada coa música.
Estamos indo para concentrarse nun primeiro linguaxe de programación chamada Haskell.
É unha funcional lingua, de xeito que o paradigma
é moi diferente do C ou PHP ou outras linguaxes imperativas
que xa teña usado e, especialmente, nunha biblioteca escrita en Haskell
Euterpea chamado, o que pode axudar a xente coa escrita de música funcionalmente,
basicamente.
E Stephen ha oriente-lo a través dun gran exemplo diso.
>> Despois diso, eu vou presenta-lo a algo chamado LillyPond, que
é unha tecnoloxía para a música de composición.
É unha especie de como LaTeX para a música se algún de vós
LaTeX usar para clases de matemáticas ou outras clases conxunto P ou o que ten.
E entón eu vou dar-lle, unha vez máis, algúns exemplos simples de que
e sinala-lo na xeral dirección dalgúns recursos mellores.
>> STEPHEN Krewson: En Adicionalmente, nós pensamos que
sería legal para definir-se un pouco de suxestións
cara a un gasoduto entre Arquivos MIDI xerados polo Euterpea
en LillyPond, polo que ofrecemos algunha instrución en scripts
para facelo que son que acompaña LillyPond
só para manter-lo código aberto e obter un gasoduto vai.
CONNOR HARRIS: Unha vez máis, debemos salientar,
estas dúas tecnoloxías, vostede Non ten que usalos xuntos.
Eles non están deseñados para traballar xuntos, aínda que eles fan moi ben.
>> STEPHEN Krewson: Correcto.
E totalmente gratuíto.
CONNOR HARRIS: Entón, recoñecementos, pode ler isto.
STEPHEN Krewson: Debidamente anotado.
Grazas a estas persoas.
Iso eu vou ir en só un momento.
O proceso de instalación é un pouco complicado.
Temos un me ler no GitHub que pode dar un ollo.
Só envíe me se tes algunha preguntas.
Pero imos realizar este baixo o presuposto que está a funcionar para todos.
CONNOR HARRIS: E se non pode obter LillyPond para traballar, non é gran cousa.
Non hai ningunha compilación en directo que estarán implicados, polo menos no meu fin.
STEPHEN Krewson: Haskell e LillyPond debe ambos teñen instaladores.
Euterpea é baixo como un paquete, así por diante e así por diante.
Entón, estamos a falar de música de ordenador.
E este é só un moi vista de 50.000 pés.
Hai algúns aspectos diferentes do mesmo.
E iso é duro e é indo a obscurecer algún detalle.
Pero poderiamos pensar en algo como composición algorítmica,
utilizando algoritmos, usar o código, para xerar
algún tipo de-- quizais un auto-similar secuencia de notas, ou que notas
baixo restrición.
E entón os podería ser executado ou interpretada
con instrumentos analóxicos ou algo así.
Pero a composición era facer a través de algoritmos.
>> Pero, claro, quizais a área de música de ordenador ou de música dixital
estamos máis familiarizados co é dixital síntese de son ou de mostraxe dixital
e gravación dixital.
Unha morea de instrumentos dixitais son facer a través de mostraxe dixital.
En realidade, nós estaremos usando un dos que están no a forma dunha biblioteca de fontes de son máis tarde.
>> Pero tamén hai algo chamado síntese dixital que saíu
dos anos 70 e os anos 80 con 'final Yamaha e John Chowning en Stanford
facendo síntese FM ou Síntese de modulación de frecuencia,
onde tivo unha transporte sinal e un sinal de modulación
tanto no espectro de audio.
Pero o que estamos enfocados en hoxe é algo chamado MIDI,
e, por suposto, composición algorítmica.
>> Non estamos indo a facer instrumentos, pero imos no canto de facer música,
e, a continuación, que vai interpretar polo que algúns instrumentos
son conformidade co estándar xeral MIDI.
Entón o que é MIDI?
Non vou ser moi fondo nel, pero MIDI é un protocolo de transferencia de datos.
É unha especie de un guía fronte diferentes empresas e industrias
para a organización de sons ou parches.
Entón, imos ver que hai un estándar MIDI
para todos os distintos percusión sons e recomendacións MIDI
para todos os distintos tipos de sintetizadores ou distintos tipos de todo o instrumento
grupos nunha orquestra, din.
>> Probablemente está familiarizado con 0 a 127 mensaxes MIDI.
Un sinal MIDI é tipicamente un bit indicando
se é un de datos ou un paquete de estado, e despois hai
sete bits dun sinal.
E estes poden controlar todo dende o volume
á presión ou acción nunha chave especial
se está executando cun MIDI controlador, así como, por suposto,
notas.
E, por suposto, ten MIDI foi moi útil,
porque é un xeito de arame xuntos ou en cadea
unha morea de dispositivos hardware MIDI.
Teño sete ou oito de volta na miña casa.
Está realmente complicado, pero é realmente poderoso.
E é realmente vello.
É o inicio dos anos 80, e é moi bo e pequeno.
CONNOR HARRIS: Yeah.
Todo o clásico Nintendo videoxogos sería probablemente
ten ficheiros MIDI para a música, por exemplo.
>> STEPHEN Krewson: Aquí está o exemplo MIDI xeral,
mostrando MIDI como unha especie de protocolo xeral.
E eu creo que podemos pensar no diferenza entre a especificación
que debe haber algo estes sons de instrumentos eo real
realización destes instrumentos sons nunha fonte de son ou un MIDI especial
sintetizador como a diferenza entre quizais un typeface-- que di:
En xeral, este é o deseño de Deste xeito especial para representar
de caracteres e unha fonte específica que ten un tamaño e timbre específico,
e non hai realización as--
>> CONNOR HARRIS: Talvez un mellor comparación sería
ser o estándar Unicode says-- dá- un número para cada personaxe, e realmente
todas as linguas do mundo, ou un amplo conxunto de scripts de linguaxe
en todo o mundo, e, a continuación, son os rendido en algo gráfica
por varios paquetes de fontes.
E, por suposto, pode pensar MIDI como Unicode de son.
E iso é só unha lista de-- un gran fluxo de eventos e instrumentos e outros enfeites,
e ten que ter un separado programa, como un tipo de letra,
para facer iso en algo que é audible.
>> STEPHEN Krewson: Entón, por que Haskell?
Haskell é unha programación funcional lingua, moi avanzado,
moi diferente de C, moi diferente do PHP.
E veremos que hai unha facilidade de composición de función en Haskell
que nos permitirá brisa través compondo ou escribindo a, transcribir,
algo así como Frere Jacques, esta canción simple que
ten unha morea de pezas en que son propio similar ou repetir.
Entón, que vai ser algúns dos a motivación para iso
Utilizamos Haskell, en que funcións son cidadáns de primeira clase.
>> E eu quería estender iso un pouco.
É un pouco doado anotar Frere Jacques en Haskell.
Pero o que se quixésemos engadir unha parte da batería para el?
O que se quería para tentar facer algo así como un tambor Roland 808 ou 909
máquina en que ten preto de 16 diferentes etapas?
Normalmente, estas son pensou en notas como 16o.
E pode controlar o mundial tempo, e podes escoller
unha morea de diferentes partes de percusión de bombo, unha salva de palmas, diferentes trampas,
abertas e pechadas sombreiros altos sobre este tipo de canles,
e entón pode ou EQ axustar o seu volume.
>> E nós imos ver un xeito agradable en Haskell de representar esta etapa
sequenciador con toda a moitas cousas legais en Haskell
o que podemos facer coa xeración listas e máis listas de filtrado,
cartografía sobre listas, cartografía funcións máis listas.
E un rápido petición de desculpas.
Este é un moi superficial e esbozo excesivamente rápida
dalgúns dos aspectos de Haskell e Euterpea,
que é un dominio específico linguaxe embutida escrito
en Haskell para tipos musicais.
Entón, por favor, comprobe o código en liña.
Lume ata GHCI, que é o Glasgow Haskell Compiler intérprete.
E eu vou estar facendo algúns isto un pouco
para que poida ver como está feito.
>> E iso permite que prema en con as-- a sintaxe é colon e entón
o comando.
Pode premer arquivos.
Podes usar browse neses ficheiros para ver todas as funcións que
existir nun módulo particular.
E entón, como veremos, tipos e tipo clases son tan importantes en Haskell,
así sempre pode check-- especialmente se está a traballar nunha nova DSCL
como este, que é un tipo de música?
Sei sobre os modos de números tipo traballar en Haskell,
pero eu non sei moito sobre música.
Pero pode explotar a forma como son definida mediante o comando t ou tipo
e, a continuación, chamar nun determinado función ou un obxecto de datos.
CONNOR HARRIS: Yeah.
Se penso C e Clang foi hardass sobre tipos,
non ten idea sobre Haskell.
O bo Haskell é que se pode obter o seu código para compilar
e comprobacións de tipo Haskell, probablemente está certo,
xa que o sistema de tipo é tan rigoroso.
>> STEPHEN Krewson: Yeah.
Entón, eu só quero ir through-- e de novo,
este non está facendo iso justice-- algunhas das as características de Haskell que, polo menos
a creators-- e foi creado a finais de 1980 por un grupo de persoas,
unha comisión de preto de 20 pessoas-- penso que eran importantes.
E o primeiro que eles listados en un documento que
describiu a xénese de Haskell nos primeiros 20 anos ou máis
é que era preguiceiro.
Entón o que significa isto?
>> Ben, iso significa que cando temos algún tipo de expresión, necesitamos valora-lo.
E Haskell fai iso dunha chamada por medio necesidade ou dun xeito que non sexa estrita.
É dicir, se temos unha morea de compoñentes da nosa expresión,
nós tentar atrasar a avaliación deses subcompoñentes
ata o último minute-- absoluta é dicir, ata nós realmente necesitamos deles.
>> Polo tanto, este means-- que é moi legal, especialmente
se estamos a pensar sobre a abstracción dun secuenciador paso a paso musical.
Liga-lo, e comeza executando un paso sequence--
Se nunca traballou cun tambor machine-- e el só vai para sempre.
Por iso, sería moi bo se nós podería emular que en Haskell.
E podemos facelo con infinita valores, en listas infinitas particulares.
É moi fácil de escribir un lista infinita en Haskell.
Pode simplemente usar a sintaxe abaixo aquí, onde se ve de 1 a 3,
eliminar o 3 1 punto a punto, e que é unha lista infinita
de todos os números naturais estendéndose en tanto como pode imaxinar.
>> Quero presentar unha concepto de pregos de inmediato.
E, de novo, o propósito Este seminario non é
para aprender sobre dobras en Haskell ou funcións de orde superior.
Pero eu só quero presentalo ao dar un sentido teño como estraño
Haskell é e como é poderoso.
E, en particular, imos ser-- cando facemos as nosas distintas partes de batería,
estaremos manipulando listas de números, dobrando os uns sobre os outros.
E para facelo, imos estar usando mapas e dobras.
>> Hai un asociativos á dereita dobrar, o que é esta unha dereita
aqui-- 1 menos a cantidade, 2 menos a cantidade, 3 menos 0.
E a sintaxe para unha veces, dá unha dobra
un valor base e, a continuación, un operation-- Neste caso, a suma ou a resta.
Eu mostre ambos os casos.
E despois hai un acumulador que acumula ao longo do toda a lista,
aplicación que ademais de operador ou menos, e, a continuación, acumulando-lo.
Polo tanto, este será as-- se foi chamado con R dobra máis de 0, comezando con 0,
teriamos entón resumir todo os números nesa lista.
E iso é unha lista 1-3.
CONNOR HARRIS: Entón, dito doutro xeito, dobra r recibe tres argumentos.
Hai unha función que en si leva dous argumentos,
entón hai un valor de inicio, e hai unha lista de valores.
E o que fai é tomar valor Start, primeiro valor,
poñer-los para a función.
Que saír, tomar que, de alimentación que
para a función do segundo valor, o que saír,
levar isto, alimente esta ao función do terceiro valor.
E entón, se vai para abaixo esta lista enteira deste xeito,
está indo para obter finalmente algún valor singular que é
do mesmo tipo que se comezou con e do mesmo tipo
como as cousas da lista e, a continuación que é o resultado de retorno de dobra R.
STEPHEN Krewson: Entón, en particular, estes son as funcións de orde superior,
porque están tomando outro función como un dos argumentos.
>> CONNOR HARRIS: Yeah.
Se xa usou algúns outros languages-- Sei R, [inaudível]
lingua ten iso, chamado Reducir.
Pode ter funcións similares noutros idiomas, só chamado
cousas distintas.
>> STEPHEN Krewson: E o que é agradable sobre dobra R
neste caso é que dobra R pode traballar con listas infinitas.
Polo tanto, neste fondo, este P5 está xerando as notas que
son activados no secuenciador paso para algunha parte da batería, a quinta parte da batería,
e é posible que unha conga tambor ou algo así.
E este é un deliberadamente obtuso xeito de escribir isto,
pero é divertido, porque el demostra unha gran cantidade
de cousas sobre Haskell e Euterpea.
>> Entón dobra R deste colonos é colon-- só un operador que empuxa as cousas
xuntos nun lista-- chamado nun baleiro lista, que non é máis que os corchetes baleiros.
E eu estou chamando que nesta lista infinita.
Isto é, de feito, dúas listas sumados ata aquí.
A lista unha coma 6 dot punto é 1, 6, 11, 16.
Así Haskell-- en só algúns caracteres,
pode xerar o enteiro secuencia de números
que son cinco números ademais estirando o infinito.
E que a preceder este pequeno curto lista--
3, 8, 21-- só para amosar-lle como pode concatenar listas.
>> E entón eu teño dobrado sobre si mesmo.
E iso acaba sendo só un tipo de operación de identidade, pero é infinito.
E dobre R pode facelo, porque preguizosamente avalía, como no exemplo anterior.
Se temos un 1 e un 2 e 3, podemos só entre parénteses fóra todo o demais.
Isto non vai funcionar para menos ou máis, pero
ha traballar para iso colon operación de identidade na lista.
>> Entón, como podemos utilizar practicamente que se nós ten un infinitamente longa lista de cousas?
Ben, Haskell ofrece unha morea de funcións no pasado:
e ollar máis para estas en seu propio tempo-- como tomar
que di: OK, estamos xerar esta lista infinita,
pero nós estamos só vai levar moito número de la E neste case--
imos ver iso máis tarde en nosa code-- drum machine
GM é só unha especie de mundo variable ao número de pasos
no secuenciador.
Nas máquinas de rolo-in I mostrou ti, que é normalmente 16,
pero eu non a aplicaron con 32.
Realmente non importa.
>> Haskell tamén é puro, polo que ten forte tipagem estática que Connor aludido.
Así, son funcións matemático no sense--
son máis matemática que está garantido
para non acceder ou cambiar calquera tipo de variable ou realizar entrada ou saída.
Entón se ten unha función, é determinista.
El sempre volverá a mesma valor no estado do programa
ou permanecer o mesmo.
Existen, por suposto, excepcións monádicos para iso, pero iso está fóra do noso alcance.
>> CONNOR HARRIS: Yeah.
O que isto significa, con todo, está aí son algúns importantes [inaudível]
consecuencias desta.
Unha delas é que é moi fácil de paralelizar programas Haskell.
Porque se ten, dicir, unha función de que
necesita operar sobre un millón de valores, se vostede sabe que a función sempre
dar o mesmo valor que alimenta nun determinado value--
se é [inaudível] f 1, f de 2, despois de 3 ou f f de 1 whatnot--
non vai escribir para un ficheiro ou facer algo
que pode cambiar o valor de f2.
Pode simplemente dividir esa función para unha millóns de máquinas diferentes, ou un millón
diferentes temas ou calquera outra cousa, obter as respostas de volta,
obter todos os valores de retorno cara atrás, e, a continuación, é iso.
Entón, moi fácil de paralelizar cousas.
>> A desvantaxe é que a entrada e saída especialmente
encaixar no sistema de tipos de formas moi complicadas.
Non imos entrar niso agora, pero eu Estimula-vos a ollar para algúns recursos
en liña, se quere saber máis sobre iso.
>> STEPHEN Krewson: Entón, e este tipo classes--
as clases de tipo foi-- foron inventados para resolver
un problema de sobrecarga de operadores.
Entón, nós queriamos ter igualdade entre diferentes tipos de cousas.
Por suposto, poderiamos pensar de-- igualdade entre tipos numéricos
É moi fácil pensar, pero que sobre a igualdade entre listas?
E sobre a igualdade entre árbore de estruturas de datos perna?
E todo isto é posible en Haskell porque de clases de tipo.
>> Entón, se define unha certa type-- datos e aquí, estes son pasos musicais.
Estamos finalmente empezando un pouco de música de ordenador.
Polo tanto, temos C, C sharp, e así por diante e así por diante.
Elas pertencen a un grupo de distintas clases de tipo.
EQ-- eles pertencen á clase tipo de EQ.
Isto significa que soportan operacións de igualdade.
Así, pode avaliar un secuencia de primitivas musicais
é o mesmo que un diferente.
>> Eles pertencen á clase ordinal.
Isto significa que hai unha ordenación a estes.
D vén despois de C. C sharp C vén despois, ben.
Eles pertencen á clase amosar, o que significa que poden
ser impreso para unha consola ou terminal.
Eles pertencen á clase enumerados, que
significa que, aínda estes son personaxes,
eles teñen un número subxacente representación comezando a 0
e saíndo través con todo moitas cousas están aquí, 20 ou así,
ou 30 ou 40, quizais.
>> CONNOR HARRIS: E cando temos un tipo de datos
que derives-- con esa contrasinal "deriving--" un certo tipo de clase,
isto significa que o compilador intentará para construír algo automaticamente.
Entón, talvez vai querer definir unha calidade distinta.
Vai querer definir C sharp como igual a D plana, por exemplo.
Con esta construción aquí, eu non creo que C sharp
e D plana pode ser igual, porque o compilador ha automaticamente
dicir que cada valor diferente posible é distinto de todos os outros.
>> Por iso, é posible substituír as implementacións estándar
deste tipo de clases.
Unha vez máis, ollar para a referencia se quere saber máis sobre iso.
STEPHEN Krewson: E aquí, en realidade, que vai
ser útil para cando código máis tarde.
Vemos algúns dos operadores infixas para a composición Secuencial,
composición paralela, e así por diante, estes aspectos positivos e signos de igual
rodeado por dous puntos.
Isto significa que podemos xogar eses diferentes primitivas musicais un despois do outro.
Isto é composición secuencial.
>> Ou podemos reproducir-los en paralelo á vez.
Entón eu podo ter un valor musical, e, a continuación, o que equivale a dous puntos e,
infix operador composición paralela, e reproducir-los como unha especie de corda.
E nós estamos indo a usar iso cando nós quedamos
nosa parte da batería coa nosa musiquinha Frere Jacques
xogar estas dúas secuencias de valores musicais á vez.
>> Currying Curry é-- foi pasado Nome do Haskell Curry, que
a imaxe Haskell é nomeado despois.
E iso nos permite unha agradable elegancia cando estamos
escribindo todos estes diferentes funcións ou filtros que estamos
será cartografía sobre as nosas listas.
A función de dous arguments-- f x e y--
pode ser representada como f x para y aplicada.
Polo tanto, é unha función de un argumento que retorna
outra función dun argumento.
Entón, isto significa que podemos mapear unha f función de x lista de y rematou.
CONNOR HARRIS: Quere dar un exemplo disto?
STEPHEN Krewson: Yeah.
Eu teño un exemplo ben aquí de algunhas das cousas que imos escribir.
Entón replicar 2-- ben, replicar tomará
un valor que é cantas veces para replicar algo,
e entón vai levar un value-- xeralmente unha lista ou algo así.
Entón, aquí, estamos cartografía replicar 2 sobre a outra lista.
>> Entón, se nós mapear replicar 2, replicar aplicar 2
para o primeiro elemento e esta lista-- estas son as listas de phrases-- musical
xerará dous de "vostede sleeping--" entón está durmindo, está a durmir.
Polo tanto, agora temos dous.
Pero replicar leva dous argumentos, senón porque somos
currying e, a continuación, cartografía, podemos representar repetición 2
como sendo devolto como unha función de un argument-- só replicar dúas veces.
E entón estamos aplicando que cada elemento da lista de frases.
>> E é unha concatenación Haskell operación para aplanar unha lista.
Porque replicar 2 vontade producir unha lista de listas.
E este é esa forma intermedia aquí.
E entón podemos concat ou esmagar que dúas veces.
CONNOR HARRIS: A máis simple exemplo currying,
se imaxinar como-- f é só un función de multiplicación que leva dous
argumentos e devolve o seu produto.
Entón, se ten unha f 4 5, é 20.
Pero pode pensar niso como Também-- ten unha función f 4
que leva un argumento e devolve catro veces este argument-- só
aplicación parcial que só un argumento 4.
E se alimento-f de 4 5, que lle dará 20.
E iso é unha simple exemplo currying.
Xeralmente é un dos libros de texto.
>> STEPHEN Krewson: Lambda expresións ou funcións anónimas
son outra marca rexistrada Haskell.
Entón, se temos de preparar unha pouco replicar vida función,
pero din que non é en a biblioteca estándar,
podemos utilizar unha sintaxe semellante á que segue.
E nós imos brisa sobre iso.
Unha cousa que vai ver unha chea de na drum machine é que estamos a facer chamadas
a algo chamado filtrar, que, como antes,
é un mapeamento dunha función sobre unha lista, pero é
un mapeamento dunha función booleana.
>> Polo tanto, temos aquí un exemplo dun un xeito anónimo
función booleana definida que leva só valores parella.
Esta non é a rigor unha función anónima.
Pero é definir con que a sintaxe para a brevidade,
e iso só leva x módulo n--
CONNOR HARRIS: Yeah.
Entón F é unha función de dous argumentos n e p
que retorna unha función que é propia unha función dun argumento, é dicir, x.
STEPHEN Krewson: I operadores infixas mencionados.
Cales son os operadores infixas?
Así, os operadores están a infixas forma normal que representan operacións,
dicir, en mathematics-- 2 máis 2, en vez de o operador máis
e, a continuación, dous argumentos 2 e 2.
CONNOR HARRIS: Chama- inverter notación polaco, que é
un termo que dubido que calquera de vostedes sabería.
>> STEPHEN Krewson: Correcto.
Inverter notación polaco ou prefixo.
Pero Haskell decidiu usar operadores infixas.
Entón, estas son algunhas das os personalizados que
son definidos para a Euterpea DSCL en Haskell.
Polo tanto, esta foi a composición secuencial.
Esta foi a composición paralela, e este foi truncando composición paralela.
E imos ter que coa nosa máquina de tambor,
porque nós imos usar o último operador en que hai pouco tupla
xogar a batería electrónica ao longo coa nosa música Frere Jacques.
E a nosa máquina de tambor é será infinito.
El só toca para sempre.
Pero a música Frere Jacques non é.
Non é que moito tempo.
É só uns bares.
Por iso, necesitamos deixar a máquina de tambor como Así que o valor musical menor vén
a fin.
E ese operador infixada é super útil con iso.
>> E notación infix como este é o tipo de Niza,
porque dicir que ten unha función como citas, o que dá a división enteira
x algo else-- pesaroso, que debe ser un e b.
Pode escribir-lo como un orzamento de b.
Entón, se é elemento put-- outro exemplo diso.
x elemento nalgunha lista, se pór Lo en Backticks, pode usalo.
Aínda que non é un símbolo como máis ou menos ou tempos,
pode usar o nome dunha función como que en Backticks
como operador infixo, que é moi legal.
CONNOR HARRIS: Unha vez máis, este é todo o azucre só sintáctica, realmente.
Non afecta o núcleo da linguaxe.
>> STEPHEN Krewson: Entón vemos aquí á última frase da nosa canción Frere Jacques,
Xoguei uns acordes ou pequenos terzos, a través da composición paralela
operador.
Esta é outra forma de dicir algunha que temos que chegou a dicir só.
Entón podes mapear funcións dunha discusión sobre listas.
CONNOR HARRIS: Unha vez máis, as referencias para manuais introdutorios Haskell--
terá todo isto nel.
>> STEPHEN Krewson: Entón aquí está un fermoso liña clave do sequenciador paso a paso
imos dar un ollo a usar unha comprensión da lista.
E vemos aquí é ese elemento na operadora fixa en citas atrás.
Polo tanto, se X é un elemento dunha lista de X, entón imos chamar funcións perc.
Entón perc é só unha función de percusión.
Leva algún valor p que é parte do conxunto limitado de todo
os distintos sons de percusión que vimos en un slide anterior,
e, a continuación, el dá que duración de unha negra.
El lle dá un qnr, e qnr é só un descanso nota dun cuarto.
>> Polo tanto, este é construír algo agradable.
Temos unha lista de elementos, e nós imos loop sobre algunha lista de un
para o valor máximo do noso sequenciador paso a paso.
E cando estamos nun i particular que lista de un para o valor máximo
que i é membro desta conxunto creado nesta función,
ben, entón podemos transformalo lo nunha nota percusión.
Se non, nós só xogar un descanso, que É dicir, nós simplemente permanecer en silencio.
E vemos aquí que, en esta sintaxe comprensión da lista,
x é cuberto por este lista construído un
para o tamaño global do secuenciador.
CONNOR HARRIS: Yeah.
A sintaxe básica para comprensións lista é
soporte, que inclúen valor algunhas variables, bar,
posibles valores das variables eles mesmos, o soporte pechados.
E se ten feito definir notación constructor en calquera tipo de clase de matemáticas,
pode configurar tal 2n en que n é ou que n é z.
Similar coisa-- esta notación pretende ser suxerente
de que notación matemática.
STEPHEN Krewson: E pode aplicar varios predicados
e varios filtros nunha lista comprensión, que é moi agradable.
Alxébrica types-- non vai levar moito tempo aquí.
Non é unha boa idea en Haskell ou un bo, noción obvia
de como sacar, digamos, un estándar parámetro para unha función ou algo así.
En Python, iso é moi fácil.
Pode só dicir con igual en a declaración da función,
un valor por defecto en caso nada se inclúe.
>> En Haskell, podería talvez usar quizais o tipo cadra,
que leva tanto nada ou un valor de só un tipo.
Entón, nós explorar esta na batería electrónica para permitir dar de volume opcional
parámetros para cada unha das partes de batería.
Entón iso nos dá unha forma de ter EQ ou un volume dunha canle en particular.
>> Connor HARRIS: En outros exemplos Haskell,
podes ver quizais usado para funcións que poden fallar.
Esta é unha pregunta común.
>> STEPHEN Krewson: E pode fornecer algún tipo de mensaxe de erro como un defecto.
E iso é especialmente útil cando está facendo o I / O en Haskell.
Isto pode ser trucos.
CONNOR HARRIS: Ou a un exemplo semellante, pense
dunha función que implica división dun parámetro que se pode 0.
E esa función podería volver quizais sexa o que sexa.
Entón, se non hai ningunha división por 0, el volverá só o que quere.
E se hai división por 0, ha voltar nada
como unha forma de sinalización do erro.
Porque unha das consecuencias da Moi estrita de tipo de Haskell
é que non hai ningunha real-- excepcións son difíciles basicamente
manipulación de erro é estraño.
E este é un moi forma común de facelo.
>> STEPHEN Krewson: Entón agora temos a outra cousa alucinante
sobre Haskell, que é estándar definicións de harmonización e función.
Eu mostre o último foto da declaración da secuencia paso
función, que tivo un valor quizais a continuación, un int, entón a lista de enteiros,
logo retorna unha secuencia de valores música non anotada
tanto con ton e volume.
>> Entón eses tres argumentos poden ser estándar correspondente do seguinte xeito.
E sempre queremos estar seguro de facer un caso base ou caso saia primeiro.
E estes subliñados pode só ser interpretada
significa calquera valor que está aí.
Entón, se nós recibir unha chamada para a etapa secuencia con algún valor, algún outro valor,
e, a continuación, a lista baleira, o que queremos para volver só silencio, un descanso 0.
>> E no canto de que sendo unha lista baleira ou 0,
é un descanso 0, porque somos manexar o tipo de música,
ea lista baleira musical tipo é só un resto de ningunha duración.
Non é ningunha música.
E, despois, ver se temos un paso secuenciar cun v ao argumento de volume,
p para o instrumento precaución argumento, e, a continuación, unha lista de X.
>> A continuación, facer algunhas cousas.
En particular, nós aplicamos esta comprensión da lista,
e nós realizar algúns operacións por valor quizais
para transformalo en un valor numérico para que que podería ser usado, e, a continuación enumerados
seleccionar o instrumento.
De novo, isto é un pouco bit deliberadamente inconcise
só para mostrar todas as cousas estrañas pode facer en Haskell como
bótalle un ollo no seu propio tempo.
>> Todo ben.
Entón, nós estamos finalmente empezando a facer o que nos propuxemos a facer,
que é facer un pouco de música de ordenador.
Entón, nós estamos indo a tentar facer música Frere Jacques.
Polo tanto, hai tantas frases en Frere Jacques?
Four.
Gran.
E o que é bo é que están todos repetido
a mesma cantidade de veces, que é dous.
>> Polo tanto, temos catro frases cada repetido dúas veces.
E, en particular, están nunha rolda.
E hai moitos, moitas formas de aplicar
un partido que podería ser divertido de facer.
Xa fixen iso nun bonito forma sinxela aquí,
que é só para a liña construct-- función recibe unha lista de valores de música
e transforma-lo en composición secuencial mediante a aplicación desta composición secuencial
operador.
>> E entón eu atrasar as distintas partes mediante a comezar con un descanso.
Así que comezar cun descanso de dúas medidas, e, a continuación, un resto de catro medidas,
e, a continuación, un resto de seis medidas e, a continuación, a rolda
funciona, como todos sabemos, esta canción.
Vemos dúas anotacións ou modificacións dos valores de música
que están contidas neste secuencial arranxo de elementos de música.
Temos un volume add.
Esta é unha función para anotar música cun volume específico.
Este é un bo exemplo dun sinal MIDI en execución
de 0 a 127, os bits de sete información que pode ser transportado.
>> E entăo-- Vimo-lo moi brevemente, pero o MIDI xeral
lista de todos os diferentes instrumentos.
E non hai unha morea deles.
Se usar unha estación de traballo de audio dixital, como o Pro Tools Ableton Live ou,
hai unha gama máis ampla incrible de sintetizadores e instrumentos VST.
Pero o patrón MIDI única ten algúns ou varios ducia.
E algúns deles son divertido.
Eu penso que sería divertido se xogamos o instrumento do instrumento MIDI
helicóptero, e, a continuación, o preto camiño a través do round,
fixemos un synth pad, e despois de ese liderado brega synth onda cadrada,
e entón a voz lama, que son un pouco indistinta no meu mal MIDI
sintetizador, pero Aceptar.
>> E entón vemos isto let e na sintaxe de Haskell,
e, a continuación, estamos xogando todas estas partes conxuntamente
co seu operador de composición paralela.
E nós probablemente podería amosar un pouco iso.
Aquí está o código.
E podes ver en C, que habería unha chea de pigarro e definición
o código de táboa antes de podería facer música como esta.
Ou calquera outra programación lingua, probablemente
ten que interactuar con algún tipo de biblioteca ou API e configurar todo,
e entón tes que limpar.
Pero aquí en Haskell é, penso eu, xa incorporarse o xeito del, incrible
lexible e moi expresivo.
Polo tanto, hai a implementación de Frere Jacques.
Todo ben.
Agora queremos engadir percusión, e iso é un pouco máis confusa pouco.
Entón, imos dar un ollo nos diapositivas.
Así, a gran idea é facer unha morea de listas ou pezas.
Polos máquinas roll-in, non eran tipicamente preto de quizais oito
10 de ritmo ou de percusión partes.
E, a continuación, usar unha morea de técnicas.
E falamos de these-- usando pregamentos, filtros, funcións lambda,
mapeado sobre listas de xerar valores nalgún intervalo de 1 a r, r é 16,
ou 32 pasos no secuenciador.
>> E, a continuación, se hai un valor nesa lista como estamos correndo a través do secuenciador,
que pasa por el unha e máis, parece que nesa nota,
e que a mostra é accionado.
Aquí están as diferentes formas estrañas Eu vin coa xerar notas.
Proba-o no seu propio suma semi.
Vai soar legal.
Se o tempo permitir, imos pasar por iso.
Pero, por agora, eu creo debemos demostración que temos.
Imos esperar que isto vai Aceptar.
>> Polo tanto, este é GHCI.
E nós imos enviar un ficheiro Teño chamado song.lhs,
que é o ficheiro que acaba de amosar.
OK, gran.
Como Connor dixo anteriormente, compilado, tipo marcada,
para que eu poida respirar moito máis fácil.
Non vai explotar en min.
>> Quería amosar-lle algo útil.
Podes ver que un módulo cargado chamado 50.
Pode procurar ese módulo.
E isto é tan bo sobre doing-- quizais o que
está facendo en Haskell non é chamado de desenvolvemento de software,
pero pode facer unha chea de diversión no seu propio país.
E o fluxo de traballo é realmente bo, como en comparación con unha morea de outras linguas,
porque pode ver nun realmente forma lexible o que está pasando.
Así, vemos que temos Todas estas frases, as cales
son listas de arremessos de música, e entón nós construír estes arriba en algo maior,
que é unha canción de música.
É unha unidade musical.
E entón podemos xogar iso todo cunha función chamada reprodución de música.
Podes ver que aquí abaixo.
Que non é máis que xogar.
>> Eu debería dizer-- non falar este sinal de dólar que está en todas partes.
Sinal de dólar é outro operador infixo.
Pero ten o menor precedencia de calquera operador, o que efectivamente
significa que todo o á esquerda do signo de dólar
e á dereita do sinal de dólar, nós estamos indo a obter avaliados antes del.
Polo tanto, é unha especie de como outro forma de engadir parénteses.
>> CONNOR HARRIS: É basicamente composición de función.
E asegura que non se have-- tes funcións de cada lado ou infix
operadores de ambos os dous lados, eles non van asociar a través del e darlle
resultados inesperados.
>> STEPHEN Krewson: Entón nós can-- usando este, podemos chamar.
En primeiro lugar, imos xogalo sen batería.
Ese é o helicóptero, o helicóptero MIDI.
>> [Música tocando]
Hai a onda cadrada.
O lodo de voz.
E realmente pode ir salvaxes con este.
Eu escollín un ben simple, porque eu sabía que non debería morder
máis do que podía mastigar.
Basta mantelo moi sinxelo para mostrar as ideas principais.
Pero, entón, eu era como, temos ten que engadir algúns tambores para iso.
Só porque este é un pouco impenetrábel,
e eu non usar o NOME DO partes de batería,
Eu mapeados eles-- porque son parte desa clase enumerado,
I mapeado los para ints.
Unha delas é como un tambor.
Cero é así.
Sete é un sombreiro alto.
E abaixo aquí onde a funcións de estar un pouco máis ao chou,
estes son como atabaques.
>> Entón, se pensas que quizais un about-- divertida forma de implementar unha batería electrónica
é por moito ordenada patróns no seu bombo.
Así, por exemplo, por filtración a través da lista con todo o que lle dá de volta
a 1 cando é tomado módulo 04.
Entón eu fico 1, 5, 9, 13, de xeito que este 17-- é o primeiro tempo de cada compás.
>> E entón que é o mesmo cousa cambiou ao longo de dous pasos.
Entón ese é o pouco frecuente.
Polo tanto, este sería algo así como un sombreiro alto.
E entón, de novo, aquí en baixo, é un pouco ao chou,
porque estamos facendo atabaques.
E eu teño algunhas maracas abaixo tamén.
>> Entón, eu podería chamar drum machine xogo, pero sería ir sempre,
e que podería comezar a coller-se toda a memoria no meu sistema.
Entón, eu vou chamar esa función tocar música, que, como veremos,
usar a composición paralela truncando para xogar a nosa pequena canción Frere Jacques
xunto con esta máquina tambor estraño.
Entón, imos dar un ollo.
E por favor non mellorar no meu arranxo de todas as partes de batería.
Non a miña especialidade, pero eu tiña unha morea de desfrute facelo.
>> [Música tocando]
>> Entón, por suposto, iso é todo algo non tan divertido
se non podemos convertelo lo a unha puntuación talvez por iso,
Pode ser interpretada por un performer humano.
Entón eu non vou executa-lo aquí.
Eu xa xerou os arquivos.
Podes ver que hai unha dot LilyPond file-- e este
será o meu segue ata Connor-- e un arquivo punto MIDI,
e un ficheiro PDF punto, que é o que LilyPond que acabará por xerar.
>> Pero estes son os scripts, e eu vou só executa-los con as súas opcións de axuda.
Se obtén estes instalado e funcionando con Euterpea, pode xerar un arquivo MIDI.
E, a continuación, a partir do ficheiro MIDI con este programa MIDI 2LY,
pode xerar un lírio Arquivo Pond, e entón
pode xerar un PDF da partitura.
E debemos dar un ollo niso.
Entón Connor probablemente amosar como para anotar iso mellor,
pero este é Frere Jacques como xerado por min en Euterpea.
É só en C. Eu debería figurado o que a corte-lo, en realidade, no.
Pero iso é o gasoduto para como facelo con iso.
Imos falar máis sobre LilyPond.
>> CONNOR HARRIS: OK Imos ver.
Mencionar Saber vostede Haskell?
STEPHEN Krewson: Oh yeah.
Consulte Saber Vostede Haskell.
É nos recursos.
É así que eu comece aprendizaxe, e iso é gran.
Aprendizaxe non mudo.
>> CONNOR HARRIS: Entón é en liña.
Entón, un cara chamado [inaudível] learnyouahaskell.com sen espazos.
A gramática é enfermo.
STEPHEN Krewson: É ilustrado, tamén.
CONNOR HARRIS: Entón, cal é LilyPond?
É unha programación declarativa Idioma para diagramación música.
Entón podes declarative-- pensar en cousas como HTML,
onde non está dizendo-- HTML non di como navegadores web deben
procesar páxinas paso a paso.
É só dicir isto é unha descrición textual
do que quere que a páxina para ver como.
>> E entón é tamén un programa de que compila esa linguaxe,
ou ler o seu correo, a continuación, en realidade, fai a diagramación para ti,
e el cospe estes marabillosas partituras en PDF busca.
Tamén pode obter formato PNG ou o que quere.
Unha boa forma de pensar é dicir, por analoxía
LaTeX é que é unha especie de LillyPond, pero por só maquetación común.
Entón, en vez de-- non é WYSIWYG, o que ve
É o que, como, por exemplo Finale é, ou Sibelius,
ou Microsoft Word, onde podes escribir tempo real e proxectos de cousas en tempo real
para ver os cambios instantaneamente.
>> El está baseado en texto.
Ten que compilar o seu correas mediante un programa separado
e saír PDFs máis tarde.
Isto é un pouco menos cómodo para o uso se está
intentando escribir directamente nunha puntuación e está
tentar compoñer no ordenador.
Pero hai unha serie de vantaxes para el.
Un deles, que se parece moito máis agradable, porque realmente LillyPond
tomar o tempo para fazê- decisións de deseño propiamente,
a diferenza de Sibelius ou Finale, que teñen para facer algoritmos tan comprometidos
que poden amosar as cousas en tempo real.
>> Entón, por que é LilyPond-- computación gráfica é difícil.
Se está facendo calquera cousa con música e quere escribir partituras,
non quere escribir fóra todo só
comezando con como deseñar equipos de funcionarios e como deseñar notepads.
É moi difícil. Isto xa foi feito antes.
Está ben.
>> Se quere usar Finale ou Sibelius, os formatos de ficheiro para isto
son moi complicado, e non pode realmente usalos de forma programática.
Pode abrir Sibelius coa Finale e vai File, Export as PDF mesmo,
pero non pode realmente chamar iso dun guión.
LillyPond, pode chamar a partir destes scripts.
Podería facilmente facer unha iteración LillyPond con LaTeX.
Non vou ter moito tempo para ir para estas tecnoloxías de agora,
pero existen.
Se queres ollar nun libro LillyPond,
é un programa que inclúe súa distribución LillyPond,
e é a iteración Fragmentos LillyPond en LaTeX
se quere facer algo como un documento de gran musicologia
con exemplos, por exemplo.
E é unha boa habilidade para vida se está facendo nada
con música, non só CS50.
Eu usei LillyPond para todos dos meus proxectos de composición
desde que era basicamente un sénior na escola.
>> Entón, aquí están algúns exemplos simples.
Este é basicamente representante do nivel de dificultade
que a maioría da xente afrontalo lo que estaban tentando
usar LilyPond para proxectos simple.
Este primeiro é o principio a un preludio coral de Bach.
Este fondo é unha parte dunha das miñas propias obras,
e é só alí para amosar lle cousas como [inaudível]
poñendo varias liñas na mesma equipo, como lyric undersetting funciona.
Underlays líricos son unha cousa que é moi fácil de usar para LilyPond música coral.
>> E entón hai algo máis exemplos complicadas aquí.
Todos estes son feitos en LilyPond e son viables.
Este primeiro tramo é de [Inaudível] por [inaudível].
E iso [inaudível] de unha peza abaixo a solo
frauta por [inaudível] que é un longtime-- que
era un membro de longa data do departamento de música aquí, eu creo.
Eu non estou seguro para onde foi para fóra.
Pero el era o conselleiro do Harvard Asociación compositores por un longo tempo.
Home marabilloso.
E escribe unha canción que ten moito notación complicado que LillyPond
Pode, con todo, tratar moi ben.
>> Entón, só para lle dar unha idea do que capacidades desta cousa tan é--
os internos do LillyPond son moi complicadas.
E pode usalo para un longo período de tempo, incluíndo
para algúns moi complicado cousas, sen realmente
ter que saber moito sobre eles.
Pero a idea básica é que na nivel máis baixo, os átomos de LillyPonds
son as notas.
As notas conteñen unha Contexto da chamada voces.
Así, o contexto de voz basicamente corresponde
a unha soa liña de polifonia.
E, a continuación, pode ser contexto contiñan xerarquicamente
en os de nivel superior que representan equipos na puntuación
ou agrupacións máis grandes, como equipos de piano ou equipos coro,
e despois, finalmente, contextos de puntuación enteiras.
E realmente pode abarcar varias decenas nun libro.
>> E cada contexto ten un número de gravadores conectados.
Se ollar a través da contido dun contexto
e imprimir un certo símbolo ou un certa clase de símbolos como necesario.
Entón, para todos os contextos de voz, hai [inaudível] notas
gravador que é basicamente unha función ou un obxecto que escribe para fóra toda a nota
cabezas sobre as pezas certas dunha páxina.
Entón hai un gravador fenda, que escribe fisuras na pauta.
Despois, hai un metrónomo marca de gravador que
escribe marcas metrónomo nunha puntuación.
E todos se encaixan moi ben dentro da xerarquía.
E é moi, moi, moi personalizable, o que precisa
se quere facer as cousas así.
>> Así, todos os contextos teñen un morea de diferentes atributos
que pode modificar para todo do paso a varias opcións de fonte
selección de tamaños de cousas.
Se queres facer aínda as cousas máis complicadas,
hai unha linguaxe de script incorporado.
Falan esquema, que é dialeto do LISP.
Estes probablemente non facer significa nada para ti.
Pero, basicamente, un esquema de outro funcional
linguaxe de programación, máis ou menos.
>> STEPHEN Krewson: O tie-in.
>> CONNOR HARRIS: Yeah.
É un bo tie-in, supoño.
E é usado como lingua de ensino, de feito, para abaixo Mass Ave No MIT.
E é moi útil para LillyPond por varias razóns técnicas.
>> E por iso, se quere facer sinxela tweaks dependentes condicionais,
para example-- hai certa condición de unha puntuación que coñeceu,
facer cambios no esquema ou entón whatnot--
as instalacións están alí.
Son complicados.
Entón aquí está un exemplo de código ben sinxelo.
É cinco liñas.
Basicamente, eu estou definindo dous equipos.
É en 3/4.
O primeiro equipo ten un adxunto marca de tempo,
pero que está realmente a suceder para ir toda a partitura,
porque marcas de marcha están no nivel puntuación.
O gravador marca metrónomo está conectado a marcar contexto.
Hai claves diferentes, porque o [inaudível] gravador
está conectado os equipos.
Pode realmente facer é.
A mostra que escribín é de feito, en C major,
pero é só a demostrar que pode ter
claves diferentes en diferentes equipos.
E a sintaxe básica é que escribe Observe nomes con E, F, G, calquera que sexa.
Se queres facer accidentes, vostede sufixo é ou ES.
Este é de Holandés convencións musicologia.
>> E para facer saltos de oitava, tes que usar estas marcas de escala, coma ou apóstrofo.
A relativa significa só o que ten unha nota,
será automaticamente plaec no oitava máis próximo á anterior.
E se queres ir máis que un fifth-- dicir un quinto ou more--
entón tes que usar o [inaudível].
Pero se non, non ten que especificar a oitava de cada nota.
>> E sobre C, prema, e C, só especificar medio C
e base de C, especialmente primeiras notas.
Entón tes esas equipos que organizan estas dúas voces ou mostras de música,
e ten unha puntuación.
E que se parece con isto.
>> Se quere ter o tempo para copiar ese exemplo de LillyPond
no código anterior deslice cara abaixo aquí, e
pode escribir para LillyPond-se.
Sei que teño algo que se parece moito con iso.
Polo tanto, hai outra tecnoloxía XML chamado Música mantida
por persoas completamente diferentes.
XML é un conxunto de datos textuais structure-- I non debería dicir datos structure-- dicir
mapa metáfora máis ou menos.
E está deseñado para manter datos xerárquicos moi ben.
HTML, por exemplo, é un tipo de XML.
E pode dicir XML porque tiña todos os sinais de menor e ángulo
marcas de soporte de barra que os campos cos datos.
>> Non teño un código exemplo de XML Music.
Pode atopalo vostede mesmo.
Basicamente, a razón pola que pode querer usar XML como o estadio intermedio
é, ante todo, é un formato de intercambio
para basicamente every-- non debería dicir todos, pero unha morea de puntuación diferente
escritores.
Entón, se escribir en Música XML, non só pode LillyPond
lelo coa axuda deste auxilary programa chamado XML Música para LY,
pero tamén pode ler Finale el, Sibelius pode lelo.
Dependendo de como o obxecto interno xerarquía traballa para representar música,
pode ser máis doado para escribir Música para XML que LillyPond
e confiar só en XML Música Ly para facer a conversión.
>> Eu non creo que [inaudível] ten XML Music.
STEPHEN Krewson: Non fai.
Alguén está a traballar nel, con todo.
>> CONNOR HARRIS: Aceptar.
Non Euterpea non ten un Función de saída XML musical con todo.
Se queres ter unha idea final do proxecto, quizais contacte con caras
que Stephen sabe, e poderían usar a súa axuda.
>> STEPHEN Krewson: Encantaríame iso.
CONNOR HARRIS: Tamén basicamente cada linguaxes de programación
que vale o seu sal xa ten unha biblioteca XML,
para que poida converter todo internamente das súas cancións nalgún obxecto
que a biblioteca XML pode escribir que esixe menos
cambios na súa estrutura interna por calquera música obxectos que
quero escribir que gravala-lo directamente no LillyPond faría.
A continuación, pode imprimir lo con XML con as bibliotecas XML no seu idioma,
que vai garantir que é sintaticamente correcto e todo máis,
e, a continuación, convertelo para LillyPond.
Así, a tecnoloxía que pode querer ollar se está facendo algo
como este.
>> [Inaudível], outro tecnoloxía auxilarry.
Este é basicamente Works tecnoloxía ou tecnoloxía Studio for LillyPond.
Por iso, ofrece axuda co sintaxe, con modelos
para varios común combinacións de instrumentos.
Permite a visualización de pantalla dividida polo pode que o seu código nunha fiestra
e PDF noutra fiestra e prema en lugares do PDF
para ir á correspondente spots no seu código fonte.
Isto é máis útil se está realmente escrita LillyPond arquivos vostede mesmo
que se está xerando Los programaticamente.
Pero, de novo, é algo útil para ter.
>> Gran.
Outra resources-- vou só pasar por iso moi rapidamente.
LillyPond manuals-- LillyPond ten excelente documentación no seu sitio.
Teñen un tutorial.
Teñen unha referencia de sintaxe.
Teñen centos de fragmentos para moitas cousas pequenas
yo Pode facer para demostrar varias capacidades.
Se desexa usar a linguaxe de script
ou facer máis extensa personalización, non hai
internos de referencia a que URL.
Se quere usar XML Music, hai que URL, musicxml.com/tutorial.
>> E entón se ten que aprender esquema porque o quere usar
as instalacións de script en LillyPond, a continuación, hai un [inaudível] chamado
Interpretación estruturado de Programas de Ordenador,
que é non só o segundo maior libro de CS nunca written--
atopar-me máis tarde se quere saber o que eu creo que o maior deles é--
pero tamén é moi bo introdución á linguaxe axeitada.
Non vai ter máis que as primeiras seccións.
>> E é iso.
Algunha pregunta?
>> ALUMNO: Onde podo baixar Frere Jacques súa xerado
para que eu poida poñelo no meu iPod?
>> STEPHEN Krewson: Ben, pode escribir para algún ficheiro wav en Euterpea.
E ten o código.
É no GitHub.
Fai os seus propios variacións de Frere Jacques por CS50 mente da colmea.
Sería óptimo.
CONNOR HARRIS: Máis alguén?
STEPHEN Krewson: Necesitamos unha mellor bombo tamén.
É moi malo.
>> ALUMNO: Euterpea ten non só lado a composición, pero signal--
STEPHEN Krewson: Si.
En realidade, o traballo que eu fixo en Euterpea cando
tomou isto-- hai unha graduar curso en Yale que
utiliza ele-- foi en síntese de son.
Polo tanto, non hai realmente un xeito agradable usando as frechas
e algúns da notación vimos de compondo xuntos funcións de sinal.
En particular, o baixo para a maioría un deles é só unha onda senoidal simple.
Pero se comezar a compoñer os de formas programáticas estraños,
pode obter son tolo efectos, como fervenzas estrañas.
Pode crear moi valente sons cunha gran cantidade de modulación.
>> Eu fixen un proxecto sobre granular síntese, que é
nalgún lugar entre FM e mostraxe.
Se toma moi pequeno, mostras pequenas, e logo
combinalos con algún tipo de modulador e construír-se un son máis rico.
Tamén fixemos modelaxe física, de xeito intentando pensar sobre a física
e psicoacústica de algo así como trompeta, e pensar sobre o xeito
o son está saltando fóra a campá da trompeta
ea acústica de o cuarto e modelaxe
que os osciladores de base.
CONNOR HARRIS: Thanks so much.
Grazas por vir.
E eu estou sempre disposto a a preguntas por email--
connorharris@college.harvard.edu.
>> STEPHEN Krewson: Yeah. stephen.krewson@yale.edu.
Legal.