1 00:00:00,000 --> 00:00:05,180 2 00:00:05,180 --> 00:00:05,930 CONNOR HARRIS: Ciao. 3 00:00:05,930 --> 00:00:06,820 Sono Connor Harris. 4 00:00:06,820 --> 00:00:09,729 Sono una CA CS50 ad Harvard. 5 00:00:09,729 --> 00:00:11,270 STEPHEN Krewson: io sono Stephen Krewson. 6 00:00:11,270 --> 00:00:12,582 Sono un TF per CS50 a Yale. 7 00:00:12,582 --> 00:00:15,790 CONNOR HARRIS: E stiamo andando a parlare su alcune tecnologie che si potrebbe 8 00:00:15,790 --> 00:00:18,880 desidera utilizzare se siete interessati nel fare un progetto finale o realmente 9 00:00:18,880 --> 00:00:20,920 qualsiasi cosa con la musica. 10 00:00:20,920 --> 00:00:24,400 Stiamo per essere concentrandosi su una prima linguaggio di programmazione chiamato Haskell. 11 00:00:24,400 --> 00:00:26,280 Si tratta di un funzionale lingua, così il paradigma 12 00:00:26,280 --> 00:00:29,620 è molto diverso da C o PHP o altri linguaggi imperativi 13 00:00:29,620 --> 00:00:33,450 che hai utilizzato già, e in particolare su una libreria scritta in Haskell 14 00:00:33,450 --> 00:00:40,240 chiamato Euterpea, che può aiutare le persone con scrivere musica funzionale, 15 00:00:40,240 --> 00:00:40,780 fondamentalmente. 16 00:00:40,780 --> 00:00:43,400 E Stephen vi guiderà attraverso un grande esempio di questo. 17 00:00:43,400 --> 00:00:46,423 >> Dopo questo, io ti presento qualcosa chiamato LillyPond, che 18 00:00:46,423 --> 00:00:48,370 è una tecnologia per la musica composizione. 19 00:00:48,370 --> 00:00:50,830 E 'un po' come LaTeX per la musica, se qualcuno di voi 20 00:00:50,830 --> 00:00:57,530 hanno usato LaTeX per lezioni di matematica o altre classi P set o quello che hai. 21 00:00:57,530 --> 00:01:00,440 E così io ti darò, ancora una volta, alcuni semplici esempi di quello 22 00:01:00,440 --> 00:01:03,640 e il punto è nella generale direzione di alcune risorse migliori. 23 00:01:03,640 --> 00:01:04,319 >> STEPHEN Krewson: In Inoltre, abbiamo pensato che 24 00:01:04,319 --> 00:01:06,720 sarebbe bello per impostare un po 'di suggerimenti 25 00:01:06,720 --> 00:01:10,780 verso un gasdotto tra I file MIDI Euterpea generati 26 00:01:10,780 --> 00:01:13,910 in LillyPond, in modo da fornire qualche istruzione su script 27 00:01:13,910 --> 00:01:16,310 per fare questo che sono dotato di LillyPond 28 00:01:16,310 --> 00:01:19,160 solo per tenerlo open source e ottenere una pipeline in corso. 29 00:01:19,160 --> 00:01:20,910 CONNOR HARRIS: Anche in questo caso, dobbiamo sottolineare, 30 00:01:20,910 --> 00:01:23,100 queste due tecnologie, è non è necessario usarli insieme. 31 00:01:23,100 --> 00:01:25,370 Non sono progettati per lavorare insieme, anche se lo fanno molto bene. 32 00:01:25,370 --> 00:01:26,362 >> STEPHEN Krewson: Giusto. 33 00:01:26,362 --> 00:01:30,116 E totalmente gratuito. 34 00:01:30,116 --> 00:01:32,240 CONNOR HARRIS: So riconoscimenti, basta leggere questo. 35 00:01:32,240 --> 00:01:33,406 STEPHEN Krewson: Debitamente osservato. 36 00:01:33,406 --> 00:01:36,360 Grazie a queste persone. 37 00:01:36,360 --> 00:01:39,180 Questo io indugiare su solo per un momento. 38 00:01:39,180 --> 00:01:41,560 Il processo di installazione è un po 'difficile. 39 00:01:41,560 --> 00:01:45,420 Abbiamo un leggimi sul GitHub che si può dare un'occhiata a. 40 00:01:45,420 --> 00:01:47,840 Basta email me se avete domande. 41 00:01:47,840 --> 00:01:52,829 Ma noi corriamo questo sotto l'ipotesi che funziona per tutti. 42 00:01:52,829 --> 00:01:55,620 CONNOR HARRIS: E se non è possibile arrivare LillyPond al lavoro, non un grosso problema. 43 00:01:55,620 --> 00:02:00,139 Non c'è compilation live che saranno coinvolti, almeno da parte mia. 44 00:02:00,139 --> 00:02:02,930 STEPHEN Krewson: Haskell e LillyPond dovrebbe entrambi hanno installatori. 45 00:02:02,930 --> 00:02:08,497 Euterpea viene scaricato come un pacchetto, così via e così via. 46 00:02:08,497 --> 00:02:10,080 Quindi stiamo parlando di computer music. 47 00:02:10,080 --> 00:02:12,990 E questo è solo un molto vista di 50.000 piedi. 48 00:02:12,990 --> 00:02:15,700 Ci sono alcuni aspetti diversi di essa. 49 00:02:15,700 --> 00:02:18,120 E questo è agitato ed è andando a oscurare alcuni dettagli. 50 00:02:18,120 --> 00:02:22,090 Ma si potrebbe pensare a qualcosa come la composizione algoritmica, 51 00:02:22,090 --> 00:02:24,920 utilizzando algoritmi, utilizzando il codice, per generare 52 00:02:24,920 --> 00:02:30,280 qualche tipo di-- forse un auto-simile sequenza di note, o forse le note 53 00:02:30,280 --> 00:02:33,330 sotto qualche vincolo. 54 00:02:33,330 --> 00:02:35,350 E poi quelli potrebbero essere eseguiti o interpretate 55 00:02:35,350 --> 00:02:38,390 con strumenti analogici o qualcosa di simile. 56 00:02:38,390 --> 00:02:42,010 Ma la composizione era fatto algoritmicamente. 57 00:02:42,010 --> 00:02:45,120 >> Ma naturalmente, forse l'area computer music o musica digitale 58 00:02:45,120 --> 00:02:48,870 siamo più familiarità con è digitale la sintesi del suono o di campionamento digitale 59 00:02:48,870 --> 00:02:51,160 e registrazione digitale. 60 00:02:51,160 --> 00:02:55,650 Un sacco di strumenti digitali sono fatto attraverso campionamento digitale. 61 00:02:55,650 --> 00:03:00,110 In realtà, saremo utilizzando uno di quelli in la forma di una libreria di font audio successivamente. 62 00:03:00,110 --> 00:03:02,850 >> Ma c'è anche qualcosa chiamato sintesi digitale che è venuto fuori 63 00:03:02,850 --> 00:03:08,650 degli anni '70 e negli anni '80 con ' Yamaha e John Chowning a Stanford 64 00:03:08,650 --> 00:03:11,990 facendo sintesi FM o Frequenza sintesi di modulazione, 65 00:03:11,990 --> 00:03:15,100 dove si aveva un vettore segnale ed un segnale modulante 66 00:03:15,100 --> 00:03:18,270 sia nello spettro audio. 67 00:03:18,270 --> 00:03:22,570 Ma quello che ci siamo concentrati su oggi è una cosa chiamata MIDI, 68 00:03:22,570 --> 00:03:25,040 e, naturalmente, composizione algoritmica. 69 00:03:25,040 --> 00:03:30,940 >> Non stiamo andando a fare strumenti, ma stiamo invece andando a fare un po 'di musica, 70 00:03:30,940 --> 00:03:33,940 e poi che otterrà interpretato da alcuni strumenti 71 00:03:33,940 --> 00:03:38,300 sono conforme alla standard General MIDI. 72 00:03:38,300 --> 00:03:40,830 Allora, qual è il MIDI? 73 00:03:40,830 --> 00:03:45,550 Io non ho intenzione di entrare troppo in profondità in esso, ma MIDI è il protocollo di trasferimento dei dati. 74 00:03:45,550 --> 00:03:49,250 E 'una sorta di guida attraverso diverse aziende e industrie 75 00:03:49,250 --> 00:03:52,250 per l'organizzazione di suoni o patch. 76 00:03:52,250 --> 00:03:54,170 Così vedremo che c'è uno standard MIDI 77 00:03:54,170 --> 00:03:57,500 per tutti i vari strumenti a percussione suoni e le raccomandazioni MIDI 78 00:03:57,500 --> 00:04:01,360 per tutti i diversi tipi di synth o diversi tipi di tutti gli strumenti 79 00:04:01,360 --> 00:04:03,650 gruppi in un'orchestra, dicono. 80 00:04:03,650 --> 00:04:08,916 >> Probabilmente siete a conoscenza con Da 0 a 127 messaggi MIDI. 81 00:04:08,916 --> 00:04:12,920 Un segnale MIDI è tipicamente un bit che indica 82 00:04:12,920 --> 00:04:16,130 che si tratti di un dato o un lo stato dei pacchetti, e poi c'è 83 00:04:16,130 --> 00:04:18,589 sette bit di un segnale. 84 00:04:18,589 --> 00:04:21,430 E questi possono controllare tutto da volume 85 00:04:21,430 --> 00:04:25,330 all'azione o pressione su un determinato tasto 86 00:04:25,330 --> 00:04:29,400 se si sta eseguendo con un MIDI regolatore nonché, naturalmente, 87 00:04:29,400 --> 00:04:31,250 gli appunti. 88 00:04:31,250 --> 00:04:33,450 E, naturalmente, il MIDI ha stato estremamente utile, 89 00:04:33,450 --> 00:04:37,550 perché è un modo per legare insieme o daisy chain 90 00:04:37,550 --> 00:04:41,570 un gruppo di dispositivi hardware MIDI. 91 00:04:41,570 --> 00:04:44,050 Ho sette o otto di nuovo a casa mia. 92 00:04:44,050 --> 00:04:46,610 Si diventa veramente complicato, ma è davvero potente. 93 00:04:46,610 --> 00:04:47,460 Ed è davvero vecchio. 94 00:04:47,460 --> 00:04:51,117 E 'dai primi anni '80, e è veramente bello e piccole. 95 00:04:51,117 --> 00:04:51,950 CONNOR HARRIS: Sì. 96 00:04:51,950 --> 00:04:54,230 Tutto il classico di Nintendo videogiochi sarebbe probabilmente 97 00:04:54,230 --> 00:04:56,088 avere i file MIDI per la musica, per esempio. 98 00:04:56,088 --> 00:04:59,550 99 00:04:59,550 --> 00:05:01,740 >> STEPHEN Krewson: Ecco un esempio di MIDI generale, 100 00:05:01,740 --> 00:05:06,520 mostrando MIDI come una sorta di protocollo generale. 101 00:05:06,520 --> 00:05:13,280 E penso che possiamo pensare al differenza tra la specificazione 102 00:05:13,280 --> 00:05:17,830 che ci dovrebbe essere qualcosa di simile questi suoni strumentali e l'attuale 103 00:05:17,830 --> 00:05:21,740 realizzazione di tali strumenti suoni in un tipo di carattere del suono o di una particolare MIDI 104 00:05:21,740 --> 00:05:25,740 sintetizzatore come la differenza tra forse un typeface-- che dice, 105 00:05:25,740 --> 00:05:30,350 in generale, questo è il disegno di in questo modo particolare di rappresentare 106 00:05:30,350 --> 00:05:35,907 characters-- e un carattere particolare che ha una dimensione e specifico timbro, 107 00:05:35,907 --> 00:05:37,240 e c'è la realizzazione di the-- 108 00:05:37,240 --> 00:05:39,156 >> CONNOR HARRIS: Forse un meglio sarebbe confronto 109 00:05:39,156 --> 00:05:43,430 essere lo standard Unicode says-- dà un numero a ogni personaggio, e davvero 110 00:05:43,430 --> 00:05:46,830 tutte le lingue del mondo, o un vasto insieme di script di lingua 111 00:05:46,830 --> 00:05:51,310 nel mondo, e quindi quelli sono resi in qualcosa di grafica 112 00:05:51,310 --> 00:05:53,710 da diversi pacchetti di font. 113 00:05:53,710 --> 00:05:56,630 E ovviamente, si può pensare di MIDI come Unicode del suono. 114 00:05:56,630 --> 00:06:03,250 Ed è solo un elenco di-- un grande flusso di eventi e strumenti e quant'altro, 115 00:06:03,250 --> 00:06:06,090 e devi avere un separato programma, come un carattere tipografico, 116 00:06:06,090 --> 00:06:08,537 a rendere che in qualcosa che è udibile. 117 00:06:08,537 --> 00:06:12,360 118 00:06:12,360 --> 00:06:13,780 >> STEPHEN Krewson: Allora perché Haskell? 119 00:06:13,780 --> 00:06:19,110 Haskell è una programmazione funzionale lingua, molto avanzata, 120 00:06:19,110 --> 00:06:22,770 molto diverso da C, molto diversa da PHP. 121 00:06:22,770 --> 00:06:28,120 E stiamo andando a vedere che c'è una facilità di composizione di funzioni in Haskell 122 00:06:28,120 --> 00:06:37,640 che ci permetterà di brezza attraverso comporre o digitando su, trascrivere, 123 00:06:37,640 --> 00:06:42,160 qualcosa di simile a Frere Jacques, questa semplice canzone che 124 00:06:42,160 --> 00:06:46,815 ha un sacco di parti in modo che sono auto-simile o ripetere. 125 00:06:46,815 --> 00:06:49,740 126 00:06:49,740 --> 00:06:53,250 Quindi questo sarà un po 'di la motivazione per cui 127 00:06:53,250 --> 00:06:59,400 stiamo usando Haskell, in cui le funzioni sono cittadini di prima classe. 128 00:06:59,400 --> 00:07:01,120 >> E volevo prolungare questo un po '. 129 00:07:01,120 --> 00:07:08,800 E 'un po' facile annotare Frere Jacques a Haskell. 130 00:07:08,800 --> 00:07:12,100 Ma cosa succede se volessimo aggiungere una parte di batteria ad esso? 131 00:07:12,100 --> 00:07:17,320 E se abbiamo voluto provare a fare qualcosa di simile a un tamburo Roland 808 o 909 132 00:07:17,320 --> 00:07:20,970 macchina in cui si dispone circa 16 diverse fasi? 133 00:07:20,970 --> 00:07:24,590 Di solito questi sono pensato note come 16 °. 134 00:07:24,590 --> 00:07:28,640 Ed è possibile controllare il globale tempo, e si può scegliere 135 00:07:28,640 --> 00:07:34,620 un gruppo di diverse parti di percussioni di grancassa, un applauso, diverse insidie, 136 00:07:34,620 --> 00:07:37,540 aperti e chiusi cappelli alti su questo genere di canali, 137 00:07:37,540 --> 00:07:41,600 e poi si può EQ o regolare il loro volume. 138 00:07:41,600 --> 00:07:45,290 >> E vedremo un bel modo di Haskell di rappresentare questo passaggio 139 00:07:45,290 --> 00:07:48,810 sequencer con tutte le varie cose interessanti a Haskell 140 00:07:48,810 --> 00:07:53,100 si può fare con la generazione di liste e filtraggio più liste, 141 00:07:53,100 --> 00:07:56,060 mappatura su liste, mappatura funzioni oltre elenchi. 142 00:07:56,060 --> 00:07:59,530 143 00:07:59,530 --> 00:08:00,760 E un rapido scuse. 144 00:08:00,760 --> 00:08:05,300 Questo è un molto superficiale e abbozzo eccessivamente rapido 145 00:08:05,300 --> 00:08:07,620 di alcuni aspetti di Haskell e Euterpea, 146 00:08:07,620 --> 00:08:11,760 che è un dominio specifico linguaggio incorporato scritto 147 00:08:11,760 --> 00:08:14,970 in Haskell per generi musicali. 148 00:08:14,970 --> 00:08:17,350 Quindi, per favore controlli anche il codice in linea. 149 00:08:17,350 --> 00:08:22,404 Accendi GHCI, che è il Glasgow Haskell Compiler Interpreter. 150 00:08:22,404 --> 00:08:24,320 E farò un po ' di questo in un po ' 151 00:08:24,320 --> 00:08:25,880 così si può vedere come è fatto. 152 00:08:25,880 --> 00:08:31,021 >> E questo consente di caricare con the-- la sintassi è colon e poi 153 00:08:31,021 --> 00:08:31,520 il comando. 154 00:08:31,520 --> 00:08:33,510 È possibile caricare in file. 155 00:08:33,510 --> 00:08:36,840 È possibile utilizzare Sfoglia su quei file per visualizzare tutte le funzioni che 156 00:08:36,840 --> 00:08:39,169 esistere in un particolare modulo. 157 00:08:39,169 --> 00:08:43,850 E poi come vedremo, tipi e tipo le classi sono così importanti in Haskell, 158 00:08:43,850 --> 00:08:48,850 in modo da poter sempre check-- soprattutto se si sta lavorando in una nuova DSCL 159 00:08:48,850 --> 00:08:51,600 in questo modo, quello che è un tipo di musica? 160 00:08:51,600 --> 00:08:55,114 Conosco il modo numerico tipi lavorano in Haskell, 161 00:08:55,114 --> 00:08:56,530 ma io non ne so molto di musica. 162 00:08:56,530 --> 00:09:01,280 Ma è possibile esplorare il modo in cui sono definita utilizzando questo comando t o tipo 163 00:09:01,280 --> 00:09:04,577 e quindi chiamando in un particolare funzione o un oggetto dati. 164 00:09:04,577 --> 00:09:05,410 CONNOR HARRIS: Sì. 165 00:09:05,410 --> 00:09:09,820 Se pensavate C e Clang era hardass sui tipi, 166 00:09:09,820 --> 00:09:11,230 non avete idea su Haskell. 167 00:09:11,230 --> 00:09:14,230 La cosa buona di Haskell è che se è possibile ottenere il codice per la compilazione 168 00:09:14,230 --> 00:09:16,790 e se di tipo Haskell controlli, è probabilmente giusto, 169 00:09:16,790 --> 00:09:18,675 perché il sistema tipo è così rigoroso. 170 00:09:18,675 --> 00:09:20,090 >> STEPHEN Krewson: Sì. 171 00:09:20,090 --> 00:09:21,980 Quindi voglio solo andare through-- e ancora, 172 00:09:21,980 --> 00:09:27,160 questo non sta facendo justice-- alcuni dei le caratteristiche di Haskell che, almeno 173 00:09:27,160 --> 00:09:31,780 alla sua creators-- ed è stato creato alla fine del 1980 da un gruppo di persone, 174 00:09:31,780 --> 00:09:34,610 un comitato di circa 20 people-- pensato erano importanti. 175 00:09:34,610 --> 00:09:36,850 E la prima cosa che elencati in un documento che 176 00:09:36,850 --> 00:09:41,890 descritto la genesi di Haskell nei primi 20 anni o giù di lì 177 00:09:41,890 --> 00:09:43,390 era che era pigro. 178 00:09:43,390 --> 00:09:44,990 Che cosa significa questo? 179 00:09:44,990 --> 00:09:49,860 >> Beh, vuol dire quando abbiamo qualche tipo di espressione, dobbiamo valutarlo. 180 00:09:49,860 --> 00:09:54,390 E Haskell fa in una chiamata mediante necessità o un modo non rigoroso. 181 00:09:54,390 --> 00:09:57,250 Cioè, se abbiamo un po 'di componenti della nostra espressione, 182 00:09:57,250 --> 00:10:00,660 proviamo a ritardare la valutazione di tali sottocomponenti 183 00:10:00,660 --> 00:10:05,300 fino a quando l'ultimo minute-- assoluto cioè fino a quando abbiamo effettivamente bisogno di loro. 184 00:10:05,300 --> 00:10:08,480 >> Quindi questo means-- che è davvero cool, soprattutto 185 00:10:08,480 --> 00:10:13,200 se stiamo pensando l'astrazione di un step sequencer musicale. 186 00:10:13,200 --> 00:10:16,740 Si accende e si avvia l'esecuzione di un passo sequence-- 187 00:10:16,740 --> 00:10:20,010 se mai lavorato con un tamburo machine-- e si va solo per sempre. 188 00:10:20,010 --> 00:10:24,650 Quindi sarebbe davvero bello se potrebbe emulare quel in Haskell. 189 00:10:24,650 --> 00:10:31,040 E possiamo farlo con infinita valori, in particolare liste infinite. 190 00:10:31,040 --> 00:10:35,860 E 'molto facile da digitare un lista infinita di Haskell. 191 00:10:35,860 --> 00:10:39,230 Si potrebbe utilizzare la sintassi giù qui, dove si vede da 1 a 3, 192 00:10:39,230 --> 00:10:42,440 rimuovere il 3 1 dot dot, e che è una lista infinita 193 00:10:42,440 --> 00:10:46,960 di tutti i numeri naturali estendentesi su quanto si possa immaginare. 194 00:10:46,960 --> 00:10:49,925 >> Voglio introdurre un concetto di pieghe subito. 195 00:10:49,925 --> 00:10:51,800 E ancora, lo scopo di questo seminario non è 196 00:10:51,800 --> 00:10:55,770 per conoscere le pieghe in Haskell o funzioni di ordine superiore. 197 00:10:55,770 --> 00:10:59,640 Ma voglio solo introdurlo a dare un senso preciso di come strano 198 00:10:59,640 --> 00:11:03,700 Haskell è e quanto sia potente. 199 00:11:03,700 --> 00:11:08,000 E in particolare, stiamo andando a essere-- quando facciamo le nostre diverse parti di batteria, 200 00:11:08,000 --> 00:11:12,790 stiamo andando a manipolare liste di numeri, piegarli uno sull'altro. 201 00:11:12,790 --> 00:11:17,290 E per farlo, faremo prevede di utilizzare mappe e pieghe. 202 00:11:17,290 --> 00:11:21,770 >> C'è un diritto associativo piega, che è questo quello giusto 203 00:11:21,770 --> 00:11:26,990 qui-- 1 meno la quantità, 2 meno la quantità, 3 meno 0. 204 00:11:26,990 --> 00:11:29,170 E la sintassi per un piega, si dà una piega 205 00:11:29,170 --> 00:11:34,680 un valore di base e poi un operation-- in questo caso, addizione o sottrazione. 206 00:11:34,680 --> 00:11:36,280 Ho mostrato entrambi i casi. 207 00:11:36,280 --> 00:11:41,760 E poi c'è un accumulatore che accumula su tutta la lista, 208 00:11:41,760 --> 00:11:46,330 applicazione di tale operatore più o minus, e quindi accumularla. 209 00:11:46,330 --> 00:11:52,680 Quindi questo sarà the-- se fosse chiamato con piega r più di 0, a partire da 0, 210 00:11:52,680 --> 00:11:54,720 saremmo poi sommare tutti i numeri in tale elenco. 211 00:11:54,720 --> 00:11:57,134 E questo è un elenco di 1-3. 212 00:11:57,134 --> 00:12:00,050 CONNOR HARRIS: Quindi, per dirla in altro modo, piega r prende tre argomenti. 213 00:12:00,050 --> 00:12:02,540 C'è una funzione che si prende due argomenti, 214 00:12:02,540 --> 00:12:05,400 poi c'è un valore di avviamento, e c'è un elenco di valori. 215 00:12:05,400 --> 00:12:08,570 E quello che fai è prendere valore antipasto, primo valore, 216 00:12:08,570 --> 00:12:09,850 metterli in funzione. 217 00:12:09,850 --> 00:12:11,607 Che cosa si ottiene fuori, prendere quella, mangimi che 218 00:12:11,607 --> 00:12:13,940 in funzione del secondo valore, ciò che si ottiene fuori, 219 00:12:13,940 --> 00:12:16,690 prendere quella, mangimi che nella funzione del terzo valore. 220 00:12:16,690 --> 00:12:18,740 E poi se si va giù tutta questa lista in questo modo, 221 00:12:18,740 --> 00:12:22,970 si sta andando ad ottenere alla fine un valore singolare che è 222 00:12:22,970 --> 00:12:25,720 dello stesso tipo di quello che hai iniziato con e dello stesso tipo 223 00:12:25,720 --> 00:12:29,147 come le cose nella lista, e poi questo è il risultato di ritorno di fold R. 224 00:12:29,147 --> 00:12:31,980 STEPHEN Krewson: Quindi, in particolare, queste sono funzioni di ordine superiore, 225 00:12:31,980 --> 00:12:34,460 perché stanno prendendo un altro funzione come uno degli argomenti. 226 00:12:34,460 --> 00:12:34,770 >> CONNOR HARRIS: Sì. 227 00:12:34,770 --> 00:12:37,820 Se hai utilizzato alcuni altri languages-- So R, [incomprensibile] 228 00:12:37,820 --> 00:12:41,510 lingua ha questa, chiamata Ridurre. 229 00:12:41,510 --> 00:12:45,460 Si potrebbe avere funzioni simili in altre lingue, appena chiamato 230 00:12:45,460 --> 00:12:48,160 cose differenti. 231 00:12:48,160 --> 00:12:50,680 >> STEPHEN Krewson: E Il bello di piega R 232 00:12:50,680 --> 00:12:53,880 in questo caso è che piega R può lavorare con liste infinite. 233 00:12:53,880 --> 00:12:59,490 Quindi, in questo fondo, questo P5 sta generando le note che 234 00:12:59,490 --> 00:13:03,120 sono accesi nella step sequencer per qualche parte di batteria, la quinta parte di batteria, 235 00:13:03,120 --> 00:13:05,480 e forse è una conga drum o qualcosa del genere. 236 00:13:05,480 --> 00:13:09,719 E questo è volutamente modo ottusa della stesura di questo, 237 00:13:09,719 --> 00:13:11,510 ma è divertente, perché dimostra molto 238 00:13:11,510 --> 00:13:14,460 di cose su Haskell e Euterpea. 239 00:13:14,460 --> 00:13:20,650 >> Così piega R di questo colon colon-- è solo un operatore che spinge cose 240 00:13:20,650 --> 00:13:25,700 insieme su un list-- chiamato su un vuoto lista, che è solo le staffe vuote. 241 00:13:25,700 --> 00:13:28,250 E sto chiedendo che in questa lista infinita. 242 00:13:28,250 --> 00:13:31,570 Questo è in realtà due liste sommati qui. 243 00:13:31,570 --> 00:13:37,150 La lista 1 comma 6 punti dot è 1, 6, 11, 16. 244 00:13:37,150 --> 00:13:39,750 Quindi Haskell-- in proprio alcuni caratteri, è 245 00:13:39,750 --> 00:13:42,420 può generare l'intero sequenza di numeri 246 00:13:42,420 --> 00:13:46,240 che sono cinque numeri a parte si estende su all'infinito. 247 00:13:46,240 --> 00:13:49,860 E io anteporre a che questo piccolo list-- più corto 248 00:13:49,860 --> 00:13:54,370 3, 8, 21-- solo per mostrarvi come è possibile concatenare liste. 249 00:13:54,370 --> 00:13:55,790 >> E poi ho ripiegato su se stesso. 250 00:13:55,790 --> 00:14:01,510 E questo finisce per essere solo una sorta di Funzionamento identità, ma è infinita. 251 00:14:01,510 --> 00:14:06,070 E piega R può farlo, perché pigramente valuta, come in precedenza. 252 00:14:06,070 --> 00:14:10,582 Se abbiamo un 1 e 2 e 3, possiamo appena fuori l'intera staffa resto. 253 00:14:10,582 --> 00:14:12,290 Che non funziona per meno o più, ma 254 00:14:12,290 --> 00:14:17,760 lavorerà per questo colon operazione identità sulla lista. 255 00:14:17,760 --> 00:14:24,620 >> Quindi, come possiamo praticamente usiamo che se noi avere un infinitamente lungo elenco di cose? 256 00:14:24,620 --> 00:14:26,500 Beh, Haskell fornisce un sacco di functions-- 257 00:14:26,500 --> 00:14:29,450 e guardare più in questi in il proprio tempo-- come prendere 258 00:14:29,450 --> 00:14:32,200 che dice, OK, siamo generando questa lista infinita, 259 00:14:32,200 --> 00:14:35,950 ma stiamo solo andando a prendere un po ' numero di esso E in questo case-- 260 00:14:35,950 --> 00:14:38,410 vedremo in seguito a il nostro code-- drum machine 261 00:14:38,410 --> 00:14:43,740 GM è solo una sorta di globale variabile per il numero di passi 262 00:14:43,740 --> 00:14:44,610 nel sequencer. 263 00:14:44,610 --> 00:14:47,630 Sulle macchine roll-in I si mostrò, che è tipicamente 16, 264 00:14:47,630 --> 00:14:51,475 ma ho implementato con 32. 265 00:14:51,475 --> 00:14:54,470 Non ha molta importanza. 266 00:14:54,470 --> 00:15:00,230 >> Haskell è anche puro, quindi ha una forte tipizzazione statica che Connor alludeva. 267 00:15:00,230 --> 00:15:03,220 Così funzioni sono matematica nel sense-- 268 00:15:03,220 --> 00:15:06,600 sono più matematica che sono garantiti 269 00:15:06,600 --> 00:15:11,530 di non accedere o modificare qualsiasi tipo di variabile o ingresso o di uscita eseguire. 270 00:15:11,530 --> 00:15:14,420 Quindi, se avete una funzione, è deterministico. 271 00:15:14,420 --> 00:15:17,400 Sarà sempre tornare lo stesso valore nello stato del programma 272 00:15:17,400 --> 00:15:19,310 o rimanere lo stesso. 273 00:15:19,310 --> 00:15:22,940 Ci sono, naturalmente, eccezioni monadiche per questo, ma questo è di là della nostra portata. 274 00:15:22,940 --> 00:15:23,900 >> CONNOR HARRIS: Sì. 275 00:15:23,900 --> 00:15:26,946 Ciò significa, però, è lì sono alcuni importanti [incomprensibile] 276 00:15:26,946 --> 00:15:27,820 conseguenze di questo. 277 00:15:27,820 --> 00:15:30,940 Uno è che è molto facile parallelizzare programmi Haskell. 278 00:15:30,940 --> 00:15:32,773 Perché se si dispone, dire, una funzione di tale 279 00:15:32,773 --> 00:15:36,064 deve operare su un milione di valori, se si sa che la funzione sarà sempre 280 00:15:36,064 --> 00:15:39,280 dare lo stesso valore se si alimenta a un certo value-- 281 00:15:39,280 --> 00:15:43,055 se siete [incomprensibile] f 1, f 2, allora f di 3 o whatnot-- f 1 282 00:15:43,055 --> 00:15:45,180 non sta per scrivere in un file o fare qualcosa 283 00:15:45,180 --> 00:15:46,850 che alterano il valore di f2. 284 00:15:46,850 --> 00:15:50,220 Si può solo dividere questa funzione per un milioni di macchine diverse o un milione 285 00:15:50,220 --> 00:15:54,720 diversi fili o qualsiasi altra cosa, ottenere tutte le risposte indietro, 286 00:15:54,720 --> 00:15:56,900 ottenere tutti i valori di ritorno indietro, e allora il gioco è fatto. 287 00:15:56,900 --> 00:15:59,780 Quindi è molto facile per parallelizzare le cose. 288 00:15:59,780 --> 00:16:03,140 >> Il rovescio della medaglia è che l'ingresso e soprattutto in uscita 289 00:16:03,140 --> 00:16:05,720 inserirsi nel sistema di tipo in modi molto complicati. 290 00:16:05,720 --> 00:16:09,010 Non entreremo in che in questo momento, ma io vi incoraggio a guardare alcune risorse 291 00:16:09,010 --> 00:16:11,175 online, se si vuole imparare a tale proposito. 292 00:16:11,175 --> 00:16:13,960 293 00:16:13,960 --> 00:16:16,550 >> STEPHEN Krewson: So digitare classes-- e questo 294 00:16:16,550 --> 00:16:21,610 classi era-- di tipi sono stati inventati per risolvere 295 00:16:21,610 --> 00:16:24,160 un problema di overloading degli operatori. 296 00:16:24,160 --> 00:16:27,590 Così abbiamo voluto avere uguaglianza tra i diversi tipi di cose. 297 00:16:27,590 --> 00:16:31,040 Naturalmente, potremmo pensare di-- uguaglianza tra tipi numerici 298 00:16:31,040 --> 00:16:34,720 è molto facile pensare, ma per quanto riguarda la parità tra le liste? 299 00:16:34,720 --> 00:16:37,610 Che dire di parità tra strutture di dati gamba albero? 300 00:16:37,610 --> 00:16:43,130 E questo è possibile in Haskell a causa di classi tipo. 301 00:16:43,130 --> 00:16:48,000 >> Quindi, se si definisce una certa type-- dati e qui, questi sono passi musicali. 302 00:16:48,000 --> 00:16:50,960 Stiamo arrivare finalmente ad alcuni computer music. 303 00:16:50,960 --> 00:16:57,420 Così abbiamo C, C sharp, e così via. 304 00:16:57,420 --> 00:17:01,080 Essi appartengono a un gruppo di diverse classi di tipo. 305 00:17:01,080 --> 00:17:03,510 EQ-- appartengono alla classe tipo di EQ. 306 00:17:03,510 --> 00:17:06,780 Ciò significa che sostengono operazioni di uguaglianza. 307 00:17:06,780 --> 00:17:12,650 Così si può valutare se un Sequenza di primitive musicali 308 00:17:12,650 --> 00:17:15,400 è la stessa come una diversa. 309 00:17:15,400 --> 00:17:17,280 >> Essi appartengono alla classe ordinale. 310 00:17:17,280 --> 00:17:19,479 Questo significa che c'è un ordine a questi. 311 00:17:19,479 --> 00:17:27,670 D viene dopo C. C sharp viene dopo C pure. 312 00:17:27,670 --> 00:17:29,840 Appartengono alla classe dimostrare, il che significa che possono 313 00:17:29,840 --> 00:17:33,000 essere stampato a una console o un terminale. 314 00:17:33,000 --> 00:17:36,090 Appartengono alla classe elencate, che 315 00:17:36,090 --> 00:17:39,770 significa che anche se questi sono i personaggi, 316 00:17:39,770 --> 00:17:45,340 hanno un numerico sottostante rappresentazione a partire da 0 317 00:17:45,340 --> 00:17:48,960 e andando fuori attraverso però molte cose sono qui, il 20 o giù di lì, 318 00:17:48,960 --> 00:17:51,770 o 30 o 40, forse. 319 00:17:51,770 --> 00:17:54,259 >> CONNOR HARRIS: E quando abbiamo un tipo di dati 320 00:17:54,259 --> 00:17:57,050 che derives-- con quella parola chiave "deriving--" una certa classe di tipo, 321 00:17:57,050 --> 00:18:01,160 ciò significa che il compilatore tenterà per costruire automaticamente qualcosa. 322 00:18:01,160 --> 00:18:05,120 Così forse si vorrà definire una qualità differente. 323 00:18:05,120 --> 00:18:09,450 Avrai voglia definire Do diesis uguale a D piatta, per esempio. 324 00:18:09,450 --> 00:18:11,560 Con questa costruzione qui, non credo che Do diesis 325 00:18:11,560 --> 00:18:14,940 e Re bemolle sarà uguale, perché il compilatore verrà automaticamente 326 00:18:14,940 --> 00:18:19,670 dire ogni diverso valore possibile è distinto da ogni altro. 327 00:18:19,670 --> 00:18:22,930 >> Così è possibile sovrascrivere le implementazioni predefinite 328 00:18:22,930 --> 00:18:25,730 di questi tipi di classi. 329 00:18:25,730 --> 00:18:28,640 Ancora una volta, guardare il riferimento, se Vuoi imparare a tale proposito. 330 00:18:28,640 --> 00:18:31,767 331 00:18:31,767 --> 00:18:33,600 STEPHEN Krewson: E qui, in realtà, questo sarà 332 00:18:33,600 --> 00:18:36,930 essere utile per quando codice in seguito. 333 00:18:36,930 --> 00:18:42,150 Vediamo alcuni degli operatori infissi per la composizione sequenziale, 334 00:18:42,150 --> 00:18:46,570 composizione parallela, e così avanti, questi vantaggi e segni di uguale 335 00:18:46,570 --> 00:18:48,620 circondato da due punti. 336 00:18:48,620 --> 00:18:53,330 Ciò significa che possiamo giocare a questi diversi primitive musicali uno dopo l'altro. 337 00:18:53,330 --> 00:18:54,590 Ecco la composizione sequenziale. 338 00:18:54,590 --> 00:18:57,170 >> Oppure possiamo giocare a parallelo allo stesso tempo. 339 00:18:57,170 --> 00:19:05,100 Così posso avere un valore musicale, e poi questo è uguale e due punti, 340 00:19:05,100 --> 00:19:09,669 infisso operatore di composizione parallela, e li gioca come una sorta di accordo. 341 00:19:09,669 --> 00:19:11,460 E stiamo andando a utilizzare questo quando si combinano 342 00:19:11,460 --> 00:19:15,080 la nostra parte di batteria con il nostro canzoncina Frere Jacques 343 00:19:15,080 --> 00:19:19,460 a giocare a questi due sequenze di valori musicali allo stesso tempo. 344 00:19:19,460 --> 00:19:24,520 345 00:19:24,520 --> 00:19:29,250 >> Currying Curry è-- ultimo nome di Haskell Curry, che 346 00:19:29,250 --> 00:19:31,850 l'immagine Haskell prende il nome. 347 00:19:31,850 --> 00:19:34,330 E questo ci permette un bello eleganza quando siamo 348 00:19:34,330 --> 00:19:36,880 scrivere tutte queste diverse funzioni o dei filtri che siamo 349 00:19:36,880 --> 00:19:39,330 sta per essere mappatura sulle nostre liste. 350 00:19:39,330 --> 00:19:42,810 Una funzione di due arguments-- f di x e y-- 351 00:19:42,810 --> 00:19:46,630 può essere rappresentato come f di x applicato a y. 352 00:19:46,630 --> 00:19:49,800 Quindi è una funzione di un argomento che ritorna 353 00:19:49,800 --> 00:19:51,240 un'altra funzione di un argomento. 354 00:19:51,240 --> 00:19:56,962 Quindi questo significa che possiamo mappare funzione f di x sopra l'elenco di y di. 355 00:19:56,962 --> 00:19:58,920 CONNOR HARRIS: Vuoi dare un esempio di questo? 356 00:19:58,920 --> 00:19:59,836 STEPHEN Krewson: Sì. 357 00:19:59,836 --> 00:20:05,390 Ho un esempio proprio qui da alcune delle cose che faremo scrivere. 358 00:20:05,390 --> 00:20:10,500 Così replicare 2-- bene, replicare avrà 359 00:20:10,500 --> 00:20:13,040 un valore, che è il numero di volte per replicare qualcosa, 360 00:20:13,040 --> 00:20:16,690 e poi ci vorrà un value-- solitamente una lista o qualcosa. 361 00:20:16,690 --> 00:20:23,450 Ecco, noi siamo la mappatura 2 replicare su un altro elenco. 362 00:20:23,450 --> 00:20:27,440 >> Quindi, se mappiamo replicare 2, se noi replichiamo 2 si applicano 363 00:20:27,440 --> 00:20:31,890 al primo elemento di questo list-- e questi sono liste di phrases-- musicale 364 00:20:31,890 --> 00:20:37,650 produrrà due di "tu sleeping--" così dormi, dormi. 365 00:20:37,650 --> 00:20:40,040 Così ora abbiamo due. 366 00:20:40,040 --> 00:20:42,570 Ma la replica prende due argomenti, ma perché siamo 367 00:20:42,570 --> 00:20:47,100 currying e poi la mappatura, possiamo rappresentare replicato 2 368 00:20:47,100 --> 00:20:52,310 come abbiano fatto ritorno in funzione uno argument-- appena replica due volte. 369 00:20:52,310 --> 00:20:57,010 E poi stiamo applicando tale ad ogni elemento di questo elenco di frasi. 370 00:20:57,010 --> 00:21:01,900 >> E concat è un Haskell operazione per appiattire una lista. 371 00:21:01,900 --> 00:21:04,400 Perché replicato 2 volontà produrre una lista di liste. 372 00:21:04,400 --> 00:21:06,660 E questa è la forma intermedia qui. 373 00:21:06,660 --> 00:21:10,365 E così poi possiamo concat o appiattire che due volte. 374 00:21:10,365 --> 00:21:12,240 CONNOR HARRIS: Un semplice esempio di currying, 375 00:21:12,240 --> 00:21:15,323 se vuoi like-- immaginare f è solo un funzione di moltiplicazione che prende due 376 00:21:15,323 --> 00:21:16,840 argomenti e restituisce il loro prodotto. 377 00:21:16,840 --> 00:21:19,320 Quindi, se avete un f 4 5, è 20. 378 00:21:19,320 --> 00:21:22,670 Ma si può pensare a questo come also-- si dispone di una funzione f 4 379 00:21:22,670 --> 00:21:25,560 che prende un argomento e ritorna quattro volte questo argument-- solo 380 00:21:25,560 --> 00:21:27,870 applicazione parziale che solo un argomento 4. 381 00:21:27,870 --> 00:21:31,182 E se si mangimi f di 4 5, che vi darà 20. 382 00:21:31,182 --> 00:21:32,890 E questo è un semplice esempio di accattivarsi. 383 00:21:32,890 --> 00:21:34,473 Di solito uno di quelli dei libri di testo. 384 00:21:34,473 --> 00:21:38,860 385 00:21:38,860 --> 00:21:42,110 >> STEPHEN Krewson: Lambda espressioni o funzioni anonime 386 00:21:42,110 --> 00:21:47,330 sono un altro segno distintivo Haskell. 387 00:21:47,330 --> 00:21:51,242 Quindi, se abbiamo bisogno di improvvisare una piccola funzione replicare la vita, 388 00:21:51,242 --> 00:21:52,950 ma dire che non è in la libreria standard, 389 00:21:52,950 --> 00:21:56,150 possiamo usare una sintassi simile al seguente. 390 00:21:56,150 --> 00:21:58,730 E faremo brezza su questo. 391 00:21:58,730 --> 00:22:02,160 Una cosa che vedrete un sacco di in drum machine sta stiamo facendo le chiamate 392 00:22:02,160 --> 00:22:05,790 a qualcosa chiamato filtrare, che come prima, 393 00:22:05,790 --> 00:22:08,185 è una mappatura di una funzione su una lista, ma è 394 00:22:08,185 --> 00:22:10,260 una mappatura di una funzione booleana. 395 00:22:10,260 --> 00:22:13,390 >> Così abbiamo qui un esempio di un anonimo 396 00:22:13,390 --> 00:22:19,150 Funzione booleana definita che richiede solo un paio di valori. 397 00:22:19,150 --> 00:22:22,990 Questo non è strettamente parlando una funzione anonima. 398 00:22:22,990 --> 00:22:25,850 Ma è definire con che la sintassi per brevità, 399 00:22:25,850 --> 00:22:28,007 e questo richiede solo x modulo n-- 400 00:22:28,007 --> 00:22:28,840 CONNOR HARRIS: Sì. 401 00:22:28,840 --> 00:22:31,330 Quindi f è una funzione di due argomenti n e p 402 00:22:31,330 --> 00:22:35,440 che restituisce una funzione che è esso stesso una funzione di un argomento, cioè x. 403 00:22:35,440 --> 00:22:38,815 404 00:22:38,815 --> 00:22:40,690 STEPHEN Krewson: I operatori infissi menzionati. 405 00:22:40,690 --> 00:22:42,642 Quali sono operatori infissi? 406 00:22:42,642 --> 00:22:45,710 Beh, operatori infissi sono la come di consueto noi rappresentiamo le operazioni, 407 00:22:45,710 --> 00:22:49,910 dire, in mathematics-- 2 plus 2 anziché l'operatore più 408 00:22:49,910 --> 00:22:51,202 e poi due argomenti 2 e 2. 409 00:22:51,202 --> 00:22:53,701 CONNOR HARRIS: Si chiama notazione polacca inversa, che è 410 00:22:53,701 --> 00:22:55,330 un termine dubito qualcuno di voi volesse sapere. 411 00:22:55,330 --> 00:22:56,288 >> STEPHEN Krewson: Giusto. 412 00:22:56,288 --> 00:22:58,290 Reverse Polish Notation o il prefisso. 413 00:22:58,290 --> 00:23:01,412 Ma Haskell ha deciso di utilizzare operatori infissi. 414 00:23:01,412 --> 00:23:03,120 Quindi questi sono alcuni dei quelli personalizzati che 415 00:23:03,120 --> 00:23:07,770 sono definiti per il Euterpea DSCL in Haskell. 416 00:23:07,770 --> 00:23:10,730 Quindi questa è stata la composizione sequenziale. 417 00:23:10,730 --> 00:23:16,340 Questo era composizione parallela, e questo è stato troncando composizione parallela. 418 00:23:16,340 --> 00:23:18,710 E abbiamo bisogno che con la nostra drum machine, 419 00:23:18,710 --> 00:23:22,640 perché useremo l'ultimo operatore in quel piccolo tuple ci 420 00:23:22,640 --> 00:23:26,330 a suonare la drum machine lungo con la nostra canzone Frere Jacques. 421 00:23:26,330 --> 00:23:28,650 E la nostra drum machine è sta per essere infinito. 422 00:23:28,650 --> 00:23:30,920 Si gioca solo per sempre. 423 00:23:30,920 --> 00:23:32,692 Ma la canzone Frere Jacques non è. 424 00:23:32,692 --> 00:23:33,510 Non è così a lungo. 425 00:23:33,510 --> 00:23:36,610 E 'solo un paio di bar. 426 00:23:36,610 --> 00:23:43,030 Quindi abbiamo bisogno di fermare la drum machine come Non appena il valore musicale più breve arriva 427 00:23:43,030 --> 00:23:43,700 al termine. 428 00:23:43,700 --> 00:23:46,980 E che l'operatore infissa è super disponibile con quello. 429 00:23:46,980 --> 00:23:50,090 >> E notazione infissa come questo è una specie di piacevole, 430 00:23:50,090 --> 00:23:57,095 perché dire che hai una funzione come citazione, che dà la divisione intera 431 00:23:57,095 --> 00:24:01,010 di x da qualcosa else-- mi dispiace, che dovrebbe essere a e b. 432 00:24:01,010 --> 00:24:04,740 Si potrebbe scrivere come un preventivo di b. 433 00:24:04,740 --> 00:24:09,670 Quindi, se si è elemento put-- un altro esempio di questo. 434 00:24:09,670 --> 00:24:14,730 x elemento in qualche lista, se si mette in backtick, è possibile utilizzarlo. 435 00:24:14,730 --> 00:24:20,400 Anche se non è un simbolo come più o meno o tempi, 436 00:24:20,400 --> 00:24:24,630 è possibile utilizzare il nome di una funzione come quella in backticks 437 00:24:24,630 --> 00:24:27,045 come operatore infisso, che è piuttosto fresco. 438 00:24:27,045 --> 00:24:29,670 CONNOR HARRIS: Ancora una volta, questo è tutto lo zucchero sintattico, davvero. 439 00:24:29,670 --> 00:24:32,310 Non influenza il nucleo del linguaggio. 440 00:24:32,310 --> 00:24:37,440 >> STEPHEN Krewson: Così vediamo qui per la ultima frase della nostra canzone Frere Jacques, 441 00:24:37,440 --> 00:24:45,740 Ho giocato alcuni piccoli accordi o terzi utilizzando la composizione parallela 442 00:24:45,740 --> 00:24:46,240 operatore. 443 00:24:46,240 --> 00:24:50,680 444 00:24:50,680 --> 00:24:54,950 Questo è un altro modo di dire qualche di quello che abbiamo appena detto. 445 00:24:54,950 --> 00:24:59,986 Così è possibile mappare le funzioni di un argomento su liste. 446 00:24:59,986 --> 00:25:02,860 CONNOR HARRIS: Anche in questo caso, i riferimenti per i libri di testo introduttivi Haskell-- 447 00:25:02,860 --> 00:25:04,680 avrà tutto questo in esso. 448 00:25:04,680 --> 00:25:07,790 >> STEPHEN Krewson: Quindi, ecco una bella la linea fondamentale del step sequencer 449 00:25:07,790 --> 00:25:12,820 daremo un'occhiata a utilizzare la comprensione lista. 450 00:25:12,820 --> 00:25:17,810 E vediamo qui è quell'elemento operatore in fissa tra virgolette schiena. 451 00:25:17,810 --> 00:25:23,030 Quindi, se x è un elemento della lista di x di, allora chiameremo le funzioni perc. 452 00:25:23,030 --> 00:25:25,100 Quindi perc è solo una funzione di percussione. 453 00:25:25,100 --> 00:25:30,200 Ci vuole un po valore di p che è parte della insieme limitato di tutti 454 00:25:30,200 --> 00:25:35,310 i diversi suoni di percussioni che abbiamo visto in una diapositiva precedente, 455 00:25:35,310 --> 00:25:38,840 e allora si dà che durata di un quarto di nota. 456 00:25:38,840 --> 00:25:43,190 Altrimenti dà un QNR, e QNR è solo un quarto di riposo nota. 457 00:25:43,190 --> 00:25:44,970 >> Quindi questo è costruire qualcosa di bello. 458 00:25:44,970 --> 00:25:52,110 Abbiamo una lista di elementi, e faremo un ciclo su qualche lista da uno 459 00:25:52,110 --> 00:25:54,540 al valore massimo della nostra step sequencer. 460 00:25:54,540 --> 00:25:58,290 E quando siamo in un particolare i in tale elenco di uno al valore massimo, 461 00:25:58,290 --> 00:26:02,970 se che i è un membro di questo set creato in questa funzione, 462 00:26:02,970 --> 00:26:06,040 bene, allora ci rivolgiamo lo in una nota percussioni. 463 00:26:06,040 --> 00:26:10,960 In caso contrario, dobbiamo solo giocare un periodo di riposo, che Vale a dire, dobbiamo solo rimanere in silenzio. 464 00:26:10,960 --> 00:26:16,050 E possiamo vedere qui che in questa lista di comprensione della sintassi, 465 00:26:16,050 --> 00:26:20,030 x è popolata da questo Lista costruito uno 466 00:26:20,030 --> 00:26:22,462 la dimensione globale del sequencer. 467 00:26:22,462 --> 00:26:23,295 CONNOR HARRIS: Sì. 468 00:26:23,295 --> 00:26:26,340 La sintassi di base per list comprehension è 469 00:26:26,340 --> 00:26:30,810 Staffa, valore che coinvolge Alcune variabili, bar, 470 00:26:30,810 --> 00:26:34,260 possibili valori delle variabili stessi, chiuso staffa. 471 00:26:34,260 --> 00:26:38,545 E se avete fatto la notazione costruttore set in qualsiasi tipo di classe di matematica, 472 00:26:38,545 --> 00:26:45,999 si potrebbe avere impostato 2n tale che n sia o n è in z. 473 00:26:45,999 --> 00:26:48,290 Simile cosa-- questa notazione è destinato a essere suggestiva 474 00:26:48,290 --> 00:26:49,630 di tale notazione matematica. 475 00:26:49,630 --> 00:26:51,880 STEPHEN Krewson: E si può applicare più predicati 476 00:26:51,880 --> 00:26:56,250 e più filtri in un elenco comprensione, che è molto bella. 477 00:26:56,250 --> 00:27:01,800 Algebrica abbiamo types-- Non si soffermerà a lungo qui. 478 00:27:01,800 --> 00:27:04,840 Non c'è una buona idea in Haskell o un buon, concetto ovvio 479 00:27:04,840 --> 00:27:10,720 di come prendere, per esempio, un default parametro di una funzione o di qualcosa. 480 00:27:10,720 --> 00:27:13,370 In Python, questo è abbastanza facile. 481 00:27:13,370 --> 00:27:18,460 Si può solo dire con uguale su la dichiarazione della funzione, 482 00:27:18,460 --> 00:27:21,420 un valore predefinito in caso nessuno è in dotazione. 483 00:27:21,420 --> 00:27:27,010 >> In Haskell, si potrebbe forse utilizzare forse il tipo forse, 484 00:27:27,010 --> 00:27:32,190 che prende o niente o un valore di tipo solo. 485 00:27:32,190 --> 00:27:38,630 Quindi sfruttiamo questo la drum machine per permetterci di dare volume opzionale 486 00:27:38,630 --> 00:27:40,730 parametri a ciascuna delle parti di batteria. 487 00:27:40,730 --> 00:27:46,160 488 00:27:46,160 --> 00:27:54,680 In modo che ci dà un modo di avere EQ o un volume su un determinato canale. 489 00:27:54,680 --> 00:27:56,440 >> CONNOR HARRIS: In altri esempi Haskell, 490 00:27:56,440 --> 00:28:00,450 potresti trovarlo forse utilizzato per funzioni che potrebbe non riuscire. 491 00:28:00,450 --> 00:28:03,470 Questo è comune. 492 00:28:03,470 --> 00:28:07,010 >> STEPHEN Krewson: E puoi fornire una sorta di messaggio di errore come predefinito. 493 00:28:07,010 --> 00:28:11,020 E questo è particolarmente utile quando si sta facendo l'I / O in Haskell. 494 00:28:11,020 --> 00:28:12,044 Che può essere trucchi. 495 00:28:12,044 --> 00:28:13,960 CONNOR HARRIS: O per una esempio simile, pensare 496 00:28:13,960 --> 00:28:17,460 di una funzione che coinvolge divisione di un parametro che può essere 0. 497 00:28:17,460 --> 00:28:20,020 E tale funzione potrebbe tornare forse qualunque. 498 00:28:20,020 --> 00:28:22,802 Quindi, se non c'è divisione per 0, tornerà solo quello. 499 00:28:22,802 --> 00:28:25,010 E se c'è divisione per 0, verrà restituito nulla 500 00:28:25,010 --> 00:28:26,910 come un modo di segnalazione dell'errore. 501 00:28:26,910 --> 00:28:30,330 Perché uno conseguenza di Molto tipizzazione di Haskell 502 00:28:30,330 --> 00:28:34,100 è che non c'è real-- eccezioni sono scomodi, in fondo, 503 00:28:34,100 --> 00:28:36,160 la gestione degli errori è imbarazzante. 504 00:28:36,160 --> 00:28:39,440 E questo è uno molto comune modo di farlo. 505 00:28:39,440 --> 00:28:42,990 >> STEPHEN Krewson: Così ora otteniamo a un'altra cosa mind-bending 506 00:28:42,990 --> 00:28:49,160 su Haskell, che è modello definizioni di corrispondenza e funzione. 507 00:28:49,160 --> 00:28:53,390 Vi ho mostrato in l'ultima diapositiva del Dichiarazione della sequenza di fase 508 00:28:53,390 --> 00:28:58,170 funzione, che ha avuto un valore forse, poi un int, quindi una lista di int, 509 00:28:58,170 --> 00:29:03,850 quindi restituisce una sequenza di I valori di musica ci annotati 510 00:29:03,850 --> 00:29:05,375 sia con tono e il volume. 511 00:29:05,375 --> 00:29:08,030 512 00:29:08,030 --> 00:29:11,820 >> Quindi questi tre argomenti possono essere modello corrispondente nel modo seguente. 513 00:29:11,820 --> 00:29:16,660 E vogliamo sempre essere sicuri di fare un caso base o il caso di uscita prima. 514 00:29:16,660 --> 00:29:19,690 E queste sottolineature può solo essere interpretato 515 00:29:19,690 --> 00:29:22,340 a qualsiasi valore che c'è. 516 00:29:22,340 --> 00:29:26,580 Quindi, se vogliamo ottenere una chiamata al passaggio sequenza con un certo valore, qualche altro valore, 517 00:29:26,580 --> 00:29:32,210 e poi l'elenco vuoto, quello che vogliamo per tornare è solo il silenzio, un periodo di riposo 0. 518 00:29:32,210 --> 00:29:35,110 >> E invece di quella essendo una lista vuota o 0, 519 00:29:35,110 --> 00:29:38,150 si tratta di un periodo di riposo 0, perché siamo trattare con il tipo di musica, 520 00:29:38,150 --> 00:29:43,230 e la lista vuota della musica tipo è solo un resto di nessuna durata. 521 00:29:43,230 --> 00:29:45,680 Non è la musica. 522 00:29:45,680 --> 00:29:51,460 E poi vediamo se otteniamo un passo sequenza con una v per la discussione del volume, 523 00:29:51,460 --> 00:29:57,290 p per strumento di precauzione argomento, e poi una lista di x. 524 00:29:57,290 --> 00:29:58,360 >> Poi facciamo un po 'di roba. 525 00:29:58,360 --> 00:30:01,290 In particolare, si applica questa lista di comprensione, 526 00:30:01,290 --> 00:30:05,700 e noi eseguiamo alcuni operazioni sul valore forse 527 00:30:05,700 --> 00:30:10,050 per trasformarlo in un valore numerico in modo che si potrebbe poi enumerato e usate 528 00:30:10,050 --> 00:30:12,300 per selezionare lo strumento. 529 00:30:12,300 --> 00:30:16,730 Di nuovo, questo è un po ' bit deliberatamente inconcise 530 00:30:16,730 --> 00:30:20,580 solo per mostrare tutte le cose strane si può fare in Haskell, come si 531 00:30:20,580 --> 00:30:23,170 dare un'occhiata sul proprio tempo. 532 00:30:23,170 --> 00:30:23,802 >> Tutto ok. 533 00:30:23,802 --> 00:30:26,010 Quindi noi stiamo finalmente arrivare a facciamo quello che abbiamo deciso di fare, 534 00:30:26,010 --> 00:30:28,820 che è fare un po 'computer music. 535 00:30:28,820 --> 00:30:32,250 Quindi stiamo andando a cercare di rendere la canzone Frere Jacques. 536 00:30:32,250 --> 00:30:35,220 Quindi ci sono quanti frasi in Frere Jacques? 537 00:30:35,220 --> 00:30:38,790 538 00:30:38,790 --> 00:30:39,680 Quattro. 539 00:30:39,680 --> 00:30:40,460 Grande. 540 00:30:40,460 --> 00:30:42,490 E ciò che è bello è che sono tutti ripetevano 541 00:30:42,490 --> 00:30:46,990 la stessa quantità di tempo, che è due. 542 00:30:46,990 --> 00:30:50,730 >> Così abbiamo quattro frasi ogni Ripetere due volte. 543 00:30:50,730 --> 00:30:53,590 E in particolare, sono in un giro. 544 00:30:53,590 --> 00:30:55,340 E ci sono molti, molti modi per implementare 545 00:30:55,340 --> 00:30:57,520 una partita che potrebbe essere divertente da fare. 546 00:30:57,520 --> 00:31:00,260 L'ho fatto in un piuttosto modo semplice qui, 547 00:31:00,260 --> 00:31:05,760 che è solo per construct-- linea funzione accetta un elenco di valori di musica 548 00:31:05,760 --> 00:31:10,390 e lo trasforma in composizione sequenziale applicando tale composizione sequenziale 549 00:31:10,390 --> 00:31:13,000 operatore. 550 00:31:13,000 --> 00:31:19,540 >> E poi ho ritardare le diverse parti facendoli iniziano con un periodo di riposo. 551 00:31:19,540 --> 00:31:22,770 Così comincio con una pausa di due misure, e quindi un riposo di quattro misure, 552 00:31:22,770 --> 00:31:26,160 e quindi un riposo di sei misure, e poi il turno 553 00:31:26,160 --> 00:31:32,290 opere, come tutti sappiamo questa canzone. 554 00:31:32,290 --> 00:31:37,180 Vediamo due annotazioni o modifiche dei valori musicali 555 00:31:37,180 --> 00:31:43,150 che sono contenuti in questo sequenziale disposizione di elementi musicali. 556 00:31:43,150 --> 00:31:44,810 Abbiamo un volume aggiuntivo. 557 00:31:44,810 --> 00:31:48,960 Questa è una funzione di annotare musica con un particolare volume. 558 00:31:48,960 --> 00:31:51,320 Questo è un buon esempio di un segnale in esecuzione MIDI 559 00:31:51,320 --> 00:31:57,510 da 0 a 127, i sette bit di informazioni che possono essere trasportato. 560 00:31:57,510 --> 00:32:00,650 >> E then-- abbiamo visto molto brevemente, ma il MIDI generale 561 00:32:00,650 --> 00:32:02,310 elenco di tutti i vari strumenti. 562 00:32:02,310 --> 00:32:04,450 E non c'è un sacco di loro. 563 00:32:04,450 --> 00:32:11,230 Se si utilizza una workstation audio digitale, come Ableton Live o Pro Tools, 564 00:32:11,230 --> 00:32:17,560 c'è una gamma incredibilmente ampia di sintetizzatori e strumenti VST. 565 00:32:17,560 --> 00:32:21,510 Ma solo lo standard MIDI ha pochi, o di alcune decine. 566 00:32:21,510 --> 00:32:22,799 E alcuni di loro sono divertenti. 567 00:32:22,799 --> 00:32:25,840 Ho pensato che sarebbe stato divertente se abbiamo giocato lo strumento lo strumento MIDI 568 00:32:25,840 --> 00:32:30,550 elicottero, e quindi la prossimo strada tra la rotonda, 569 00:32:30,550 --> 00:32:37,980 abbiamo fatto un synth pad, e quindi di questo cavo banale onda quadra synth, 570 00:32:37,980 --> 00:32:44,240 e poi voce melma, che sono un po 'indistinto sul mio male MIDI 571 00:32:44,240 --> 00:32:46,410 sintetizzatore, ma OK. 572 00:32:46,410 --> 00:32:50,030 >> E allora vediamo questo let e nella sintassi da Haskell, 573 00:32:50,030 --> 00:32:54,030 e poi stiamo giocando tutte queste parti insieme 574 00:32:54,030 --> 00:32:56,265 con l'operatore di composizione parallela. 575 00:32:56,265 --> 00:33:00,260 576 00:33:00,260 --> 00:33:02,296 E potremmo probabilmente mostrare una parte di questo. 577 00:33:02,296 --> 00:33:07,674 578 00:33:07,674 --> 00:33:08,340 Ecco il codice. 579 00:33:08,340 --> 00:33:14,960 E si può vedere in C, ci sarebbe un sacco di compensazione gola e l'impostazione 580 00:33:14,960 --> 00:33:19,760 il codice della tabella prima di potrebbe fare musica come questo. 581 00:33:19,760 --> 00:33:22,080 O qualsiasi altra programmazione lingua, si sarebbe probabilmente 582 00:33:22,080 --> 00:33:27,210 devono interagire con una sorta di biblioteca o API e impostato tutto, 583 00:33:27,210 --> 00:33:28,725 e allora dovresti pulire. 584 00:33:28,725 --> 00:33:33,810 Ma qui a Haskell è, credo, una volta si ottiene il blocco di esso, incredibilmente 585 00:33:33,810 --> 00:33:35,770 leggibile e molto espressivo. 586 00:33:35,770 --> 00:33:38,930 587 00:33:38,930 --> 00:33:43,240 Quindi non vi è l'implementazione di Frere Jacques. 588 00:33:43,240 --> 00:33:43,740 Tutto ok. 589 00:33:43,740 --> 00:33:47,557 Ora vogliamo aggiungere percussioni, e questo è un po 'Messier. 590 00:33:47,557 --> 00:33:49,015 Quindi, diamo uno sguardo alle diapositive. 591 00:33:49,015 --> 00:33:56,880 592 00:33:56,880 --> 00:34:00,540 Così la grande idea è di fare un gruppo di liste o di parti. 593 00:34:00,540 --> 00:34:04,140 Su quelle macchine roll-in, ci erano tipicamente circa otto forse 594 00:34:04,140 --> 00:34:08,670 a 10 rhythm o percussioni parti. 595 00:34:08,670 --> 00:34:10,159 E quindi utilizzare un mucchio di tecniche. 596 00:34:10,159 --> 00:34:14,889 E abbiamo parlato con these-- pieghe, filtri, funzioni lambda, 597 00:34:14,889 --> 00:34:19,429 mappato sulle liste per generare i valori in qualche campo da 1 a r, r è 16, 598 00:34:19,429 --> 00:34:20,699 o 32 passi nel sequencer. 599 00:34:20,699 --> 00:34:23,810 600 00:34:23,810 --> 00:34:29,920 >> E poi se c'è un valore in quella lista come stiamo correndo attraverso il sequencer, 601 00:34:29,920 --> 00:34:34,190 che l'attraversa più e sopra, si accende quella nota, 602 00:34:34,190 --> 00:34:36,060 e quel campione viene attivato. 603 00:34:36,060 --> 00:34:42,810 604 00:34:42,810 --> 00:34:47,110 Qui ci sono tutti i diversi modi strani Mi si avvicinò con per generare note. 605 00:34:47,110 --> 00:34:48,940 Prova sul proprio somma semi. 606 00:34:48,940 --> 00:34:50,360 Sarà il suono fresco. 607 00:34:50,360 --> 00:34:53,066 608 00:34:53,066 --> 00:34:54,690 Tempo permettendo, andremo attraverso questo. 609 00:34:54,690 --> 00:34:59,200 Ma per ora, credo dovremmo demo quello che abbiamo. 610 00:34:59,200 --> 00:35:01,380 Speriamo questo va OK. 611 00:35:01,380 --> 00:35:02,670 >> Quindi questo è GHCI. 612 00:35:02,670 --> 00:35:06,580 613 00:35:06,580 --> 00:35:09,121 E noi carichiamo un file Ho chiamato song.lhs, 614 00:35:09,121 --> 00:35:10,620 che è il file che ho appena mostrato. 615 00:35:10,620 --> 00:35:11,470 Ok fantastico. 616 00:35:11,470 --> 00:35:15,010 Come ha detto Connor prima, compilato, Tipo E, 617 00:35:15,010 --> 00:35:18,380 così posso respirare molto più facile. 618 00:35:18,380 --> 00:35:20,010 Non sta andando a soffiare su di me. 619 00:35:20,010 --> 00:35:22,720 >> Volevo mostrarvi qualcosa di utile. 620 00:35:22,720 --> 00:35:25,900 Si può vedere che una modulo caricato chiamato 50. 621 00:35:25,900 --> 00:35:28,240 È possibile sfogliare quel modulo. 622 00:35:28,240 --> 00:35:32,092 E questo è così bello su doing-- forse quello che 623 00:35:32,092 --> 00:35:34,550 si sta facendo in Haskell non è chiamato lo sviluppo del software, 624 00:35:34,550 --> 00:35:36,980 ma si può fare un sacco di cose divertenti da soli. 625 00:35:36,980 --> 00:35:42,410 E il flusso di lavoro è davvero bello come rispetto a un sacco di altre lingue, 626 00:35:42,410 --> 00:35:45,872 perché si può vedere in una davvero modo leggibile quello che sta succedendo. 627 00:35:45,872 --> 00:35:47,830 Così vediamo che abbiamo tutte queste frasi, che 628 00:35:47,830 --> 00:35:53,760 sono liste di piazzole di musica, e poi noi costruire questi in qualcosa di più grande, 629 00:35:53,760 --> 00:35:55,220 che è un brano musicale. 630 00:35:55,220 --> 00:35:58,450 Si tratta di una unità musicale. 631 00:35:58,450 --> 00:36:05,545 E allora possiamo giocare questo tutto con una funzione chiamata musica del gioco. 632 00:36:05,545 --> 00:36:09,040 Si può vedere che qui. 633 00:36:09,040 --> 00:36:11,310 Che è solo giocare. 634 00:36:11,310 --> 00:36:15,040 >> Dovrei say-- Non ho parlato questo segno del dollaro che è ovunque. 635 00:36:15,040 --> 00:36:17,980 Segno del dollaro è un altro operatore infisso. 636 00:36:17,980 --> 00:36:22,500 Ma ha la precedenza più bassa di qualsiasi operatore, che di fatto 637 00:36:22,500 --> 00:36:24,960 significa che tutto su alla sinistra del simbolo del dollaro 638 00:36:24,960 --> 00:36:28,460 e alla destra del simbolo del dollaro, stiamo andando a ottenere valutata prima di esso. 639 00:36:28,460 --> 00:36:31,430 Quindi è un po 'come un altro modo di aggiungere parentesi. 640 00:36:31,430 --> 00:36:33,980 641 00:36:33,980 --> 00:36:36,220 >> CONNOR HARRIS: E 'fondamentalmente composizione di funzioni. 642 00:36:36,220 --> 00:36:40,026 E assicura che non se have-- avete funzioni di entrambi i lati o infisso 643 00:36:40,026 --> 00:36:42,900 operatori su entrambi i lati, non lo faranno associarlo attraverso di esso e dare 644 00:36:42,900 --> 00:36:46,030 risultati imprevisti. 645 00:36:46,030 --> 00:36:49,790 >> STEPHEN Krewson: Così abbiamo can-- utilizzando tale, possiamo chiamare. 646 00:36:49,790 --> 00:36:51,415 In primo luogo, giocheremo senza la batteria. 647 00:36:51,415 --> 00:37:00,330 648 00:37:00,330 --> 00:37:03,170 Questo è l'elicottero, l'elicottero MIDI. 649 00:37:03,170 --> 00:37:05,495 >> [RIPRODUZIONE DI BRANI MUSICALI] 650 00:37:05,495 --> 00:37:08,525 651 00:37:08,525 --> 00:37:09,525 C'è l'onda quadra. 652 00:37:09,525 --> 00:37:24,520 653 00:37:24,520 --> 00:37:25,490 La melma voce. 654 00:37:25,490 --> 00:37:27,630 E si può davvero scatenarsi con questo. 655 00:37:27,630 --> 00:37:30,872 Ho preso una bella semplice, perché sapevo che non dovevo mordere 656 00:37:30,872 --> 00:37:31,830 più di quanto potessi masticare. 657 00:37:31,830 --> 00:37:36,460 Basta tenere abbastanza semplice per mostrare le idee principali. 658 00:37:36,460 --> 00:37:39,952 Ma poi mi sono detto, abbiamo avuto modo di aggiungere alcuni fusti per questo. 659 00:37:39,952 --> 00:37:41,910 Proprio perché si tratta di un po 'impenetrabili, 660 00:37:41,910 --> 00:37:45,790 e non ho usato la nome delle parti di batteria, 661 00:37:45,790 --> 00:37:49,490 Ho mappato them-- perché sono parte di quella classe enumerato, 662 00:37:49,490 --> 00:37:51,500 Li ho mappato a int. 663 00:37:51,500 --> 00:37:53,120 Uno è come una grancassa. 664 00:37:53,120 --> 00:37:54,370 Zero è così. 665 00:37:54,370 --> 00:37:56,000 Sette è un alto cappello. 666 00:37:56,000 --> 00:38:00,920 E giù a qui dove il funzioni diventano un po 'più casuale, 667 00:38:00,920 --> 00:38:02,100 questi sono come tamburi conga. 668 00:38:02,100 --> 00:38:08,360 >> Quindi, se pensate about-- forse un modo divertente per implementare una drum machine 669 00:38:08,360 --> 00:38:12,830 è quello di utilizzare molto ordinato modelli sul grancassa. 670 00:38:12,830 --> 00:38:17,640 Così, per esempio, sul filtraggio sulla lista con tutto quello che restituisce 671 00:38:17,640 --> 00:38:20,590 un 1 quando è il modulo 04 preso. 672 00:38:20,590 --> 00:38:27,190 In modo da ottenere 1, 5, 9, 13, 17-- quindi questo è la prima battuta di ogni misura. 673 00:38:27,190 --> 00:38:32,860 >> E allora questo è lo stesso cosa spostato in due fasi. 674 00:38:32,860 --> 00:38:33,850 Ecco, questo è il insolito. 675 00:38:33,850 --> 00:38:37,480 Quindi questo sarebbe qualcosa di simile a un alto cappello. 676 00:38:37,480 --> 00:38:39,640 E poi di nuovo, qui, è un po 'a caso, 677 00:38:39,640 --> 00:38:41,080 perché stiamo facendo tamburi conga. 678 00:38:41,080 --> 00:38:44,180 E ho alcune maracas qui, anche. 679 00:38:44,180 --> 00:38:50,280 >> Così ho potuto chiamare drum machine gioco, ma sarebbe andare avanti per sempre, 680 00:38:50,280 --> 00:38:53,700 e potrebbe iniziare afferrando tutta la memoria nel mio sistema. 681 00:38:53,700 --> 00:38:57,090 Così ti chiamo questa funzione riprodurre musica, che, come vedremo, 682 00:38:57,090 --> 00:39:02,020 utilizzare la composizione parallela troncare a fare la nostra piccola canzone Frere Jacques 683 00:39:02,020 --> 00:39:04,200 insieme a questo drum machine strano. 684 00:39:04,200 --> 00:39:06,190 Quindi, diamo uno sguardo. 685 00:39:06,190 --> 00:39:10,920 E per favore migliorare il mio disposizione di tutte le parti di batteria. 686 00:39:10,920 --> 00:39:13,375 Non la mia specialità, ma io aveva un sacco di divertimento farlo. 687 00:39:13,375 --> 00:39:17,678 688 00:39:17,678 --> 00:39:20,654 >> [RIPRODUZIONE DI BRANI MUSICALI] 689 00:39:20,654 --> 00:39:52,260 690 00:39:52,260 --> 00:39:56,980 >> Quindi, naturalmente, questo è tutto un po 'non come divertimento 691 00:39:56,980 --> 00:40:01,100 se non siamo in grado di convertire ad un punteggio così forse 692 00:40:01,100 --> 00:40:04,650 potrebbe essere interpretato da un performer umano. 693 00:40:04,650 --> 00:40:06,535 Quindi non correrò qui. 694 00:40:06,535 --> 00:40:07,910 Ho già generato i file. 695 00:40:07,910 --> 00:40:10,280 Si può vedere che c'è una dot LilyPond file-- e questo 696 00:40:10,280 --> 00:40:14,500 sarà il mio segue verso Connor-- e un file MIDI puntino, 697 00:40:14,500 --> 00:40:18,610 e un file PDF puntino, che è ciò che LilyPond alla fine genererà. 698 00:40:18,610 --> 00:40:23,770 >> Ma questi sono questi script, e io basta correre con le loro opzioni di aiuto. 699 00:40:23,770 --> 00:40:28,090 Se si ottiene questi installato e funzionante con Euterpea, è possibile generare un file MIDI. 700 00:40:28,090 --> 00:40:31,160 E poi dal file MIDI con questo programma MIDI 2LY, 701 00:40:31,160 --> 00:40:34,930 è possibile generare un giglio File di stagno, e poi si 702 00:40:34,930 --> 00:40:37,974 in grado di generare un PDF della partitura. 703 00:40:37,974 --> 00:40:39,390 E dovremmo dare un'occhiata a questo. 704 00:40:39,390 --> 00:40:52,599 705 00:40:52,599 --> 00:40:55,140 Così Connor probabilmente mostrerà come annotare questo meglio, 706 00:40:55,140 --> 00:41:02,570 ma questo è Frere Jacques come generato da me in Euterpea. 707 00:41:02,570 --> 00:41:07,300 E 'solo in C. avrei capito che cosa l'hack è in realtà in. 708 00:41:07,300 --> 00:41:11,090 Ma questa è la conduttura per come hai fatto con quella. 709 00:41:11,090 --> 00:41:12,950 Parliamo di più su LilyPond. 710 00:41:12,950 --> 00:41:15,780 >> CONNOR HARRIS: OK Vediamo. 711 00:41:15,780 --> 00:41:19,480 712 00:41:19,480 --> 00:41:21,419 Hai accennato Scopri È Haskell? 713 00:41:21,419 --> 00:41:22,460 STEPHEN Krewson: Oh sì. 714 00:41:22,460 --> 00:41:23,480 Scopri Scopri È Haskell. 715 00:41:23,480 --> 00:41:24,410 E 'nelle risorse. 716 00:41:24,410 --> 00:41:26,830 È così che ho iniziato imparare, ed è bello. 717 00:41:26,830 --> 00:41:27,580 L'apprendimento non muto. 718 00:41:27,580 --> 00:41:28,829 >> CONNOR HARRIS: Quindi è in linea. 719 00:41:28,829 --> 00:41:34,760 Così un ragazzo di nome [incomprensibile] learnyouahaskell.com, senza spazi. 720 00:41:34,760 --> 00:41:37,065 La grammatica è malato. 721 00:41:37,065 --> 00:41:38,690 STEPHEN Krewson: E 'illustrato, troppo. 722 00:41:38,690 --> 00:41:39,440 CONNOR HARRIS: Allora, qual è LilyPond? 723 00:41:39,440 --> 00:41:42,480 Si tratta di una programmazione dichiarativa lingua per la musica composizione. 724 00:41:42,480 --> 00:41:45,480 Così declarative-- è possibile pensare a cose come HTML, 725 00:41:45,480 --> 00:41:50,900 dove tu non sei saying-- HTML non dice come i browser web dovrebbe 726 00:41:50,900 --> 00:41:52,180 il rendering delle pagine passo dopo passo. 727 00:41:52,180 --> 00:41:54,096 E 'solo dicendo questo è una descrizione testuale 728 00:41:54,096 --> 00:41:56,100 di ciò che si desidera che la pagina per assomigliare. 729 00:41:56,100 --> 00:41:59,310 >> E poi è anche un programma che compila questo linguaggio, 730 00:41:59,310 --> 00:42:02,300 o leggere la sua e poi in realtà fa la composizione per voi, 731 00:42:02,300 --> 00:42:05,570 e sputa fuori questi meravigliosi spartiti in PDF che cercano. 732 00:42:05,570 --> 00:42:08,250 È inoltre possibile ottenere formato PNG o qualsiasi altra cosa. 733 00:42:08,250 --> 00:42:10,300 Un buon modo di pensare questo è per analogia 734 00:42:10,300 --> 00:42:16,620 è che LaTeX è un po 'come LillyPond, ma solo per composizione ordinaria. 735 00:42:16,620 --> 00:42:20,360 Così, invece di-- non è WYSIWYG, ciò che vedi 736 00:42:20,360 --> 00:42:22,960 È quello che ottieni, come, dire Finale è, o Sibelius, 737 00:42:22,960 --> 00:42:27,430 o Microsoft Word, in cui è possibile digitare in in tempo reale e progetti di cose in tempo reale 738 00:42:27,430 --> 00:42:31,340 e vedere i cambiamenti istantaneamente. 739 00:42:31,340 --> 00:42:32,140 >> Si basa testo. 740 00:42:32,140 --> 00:42:35,290 Devi compilare il i punteggi con un programma separato 741 00:42:35,290 --> 00:42:37,090 e uscire PDF più tardi. 742 00:42:37,090 --> 00:42:43,320 Questo è un po 'meno conveniente per l'uso, se siete 743 00:42:43,320 --> 00:42:46,520 cercando di scrivere direttamente in un punteggio e sei 744 00:42:46,520 --> 00:42:48,620 il tentativo di scrivere sul computer. 745 00:42:48,620 --> 00:42:50,830 Ma ci sono molti di vantaggi per esso. 746 00:42:50,830 --> 00:42:56,110 Uno, ha un aspetto molto più gradevole, perché LillyPond può effettivamente 747 00:42:56,110 --> 00:42:58,210 prendere il tempo di fare decisioni di layout correttamente, 748 00:42:58,210 --> 00:43:02,380 a differenza di Sibelius o Finale, che hanno a fare gli algoritmi così compromesse 749 00:43:02,380 --> 00:43:05,020 che possono visualizzare le cose in tempo reale. 750 00:43:05,020 --> 00:43:07,660 >> Allora, perché è LilyPond-- computer grafica è difficile. 751 00:43:07,660 --> 00:43:10,535 Se stai facendo qualcosa con la musica e si desidera scrivere colonne sonore, 752 00:43:10,535 --> 00:43:13,900 non si vuole scrivere fuori tutto da soli 753 00:43:13,900 --> 00:43:19,040 a partire da come disegnare personale e come disegnare blocchi per appunti. 754 00:43:19,040 --> 00:43:21,020 È molto difficile. E 'stato fatto prima. 755 00:43:21,020 --> 00:43:22,170 Stai bene. 756 00:43:22,170 --> 00:43:26,200 >> Se si desidera utilizzare Finale o Sibelius, i formati di file per quelle cose 757 00:43:26,200 --> 00:43:30,180 sono molto complicate, e non è possibile davvero usarli programmazione. 758 00:43:30,180 --> 00:43:35,020 È possibile aprire Sibelius con Finale e andare su File, Esporta in formato PDF te stesso, 759 00:43:35,020 --> 00:43:37,600 ma non si può davvero chiamare tale da uno script. 760 00:43:37,600 --> 00:43:40,440 LillyPond, è possibile chiamare da questi script. 761 00:43:40,440 --> 00:43:44,397 Si potrebbe facilmente iterare LillyPond con LaTeX. 762 00:43:44,397 --> 00:43:47,230 Non avrò molto tempo per andare in queste tecnologie in questo momento, 763 00:43:47,230 --> 00:43:48,321 ma esistono. 764 00:43:48,321 --> 00:43:50,070 Se si vuole guardare in un libro LillyPond, 765 00:43:50,070 --> 00:43:53,760 è un programma che viene fornito con la vostra distribuzione LillyPond, 766 00:43:53,760 --> 00:43:57,030 ed è per l'iterazione Frammenti LillyPond in LaTeX 767 00:43:57,030 --> 00:44:00,340 se si vuole fare qualcosa come un grande documento di Musicologia 768 00:44:00,340 --> 00:44:02,289 con esempi, per esempio. 769 00:44:02,289 --> 00:44:04,580 Ed è una buona abilità per vita se stai facendo qualcosa 770 00:44:04,580 --> 00:44:05,770 con la musica, non solo CS50. 771 00:44:05,770 --> 00:44:09,320 Ho usato LillyPond per tutti dei miei progetti di composizione 772 00:44:09,320 --> 00:44:11,880 da quando ero praticamente un liceo. 773 00:44:11,880 --> 00:44:13,455 >> Quindi, ecco alcuni semplici esempi. 774 00:44:13,455 --> 00:44:17,490 775 00:44:17,490 --> 00:44:21,060 Questo è fondamentalmente rappresentativa del livello di difficoltà 776 00:44:21,060 --> 00:44:23,481 che la maggior parte della gente affrontarlo stavano cercando 777 00:44:23,481 --> 00:44:24,980 usare LilyPond per progetti semplici. 778 00:44:24,980 --> 00:44:29,519 Questo primo è l'inizio per un preludio corale di Bach. 779 00:44:29,519 --> 00:44:31,810 Questo fondo è un estratto da una delle mie opere, 780 00:44:31,810 --> 00:44:34,650 ed è solo lì per mostrare voi le cose come [incomprensibile] 781 00:44:34,650 --> 00:44:38,550 mettendo più righe nella stessa personale, come lirica undersetting funziona. 782 00:44:38,550 --> 00:44:41,350 783 00:44:41,350 --> 00:44:46,110 Sottostrati testi sono una cosa che è molto facile da usare LilyPond per la musica corale. 784 00:44:46,110 --> 00:44:48,814 >> E così poi c'è ancora un po ' Esempi complicati. 785 00:44:48,814 --> 00:44:50,980 Tutti questi sono fatti in LilyPond e sono fattibili. 786 00:44:50,980 --> 00:44:55,280 Questo primo brano è da [Incomprensibile] di [incomprensibile]. 787 00:44:55,280 --> 00:44:58,860 E questo [incomprensibile] da un pezzo per contrabbasso solo 788 00:44:58,860 --> 00:45:03,550 flauto di [incomprensibile], che è un longtime-- che 789 00:45:03,550 --> 00:45:07,101 era un membro di lunga data del dipartimento di musica qui, credo. 790 00:45:07,101 --> 00:45:08,600 Io non sono sicuro di dove se n'è andato via a. 791 00:45:08,600 --> 00:45:12,410 Ma era il consigliere di Harvard Autori Associazione per lungo tempo. 792 00:45:12,410 --> 00:45:13,530 Uomo meraviglioso. 793 00:45:13,530 --> 00:45:16,920 E scrive una musica che ha molto notazione complicato che LillyPond 794 00:45:16,920 --> 00:45:20,500 può comunque gestire molto bene. 795 00:45:20,500 --> 00:45:26,030 >> Quindi, solo per darvi un senso di ciò che le capacità di questa cosa così are-- 796 00:45:26,030 --> 00:45:28,960 la struttura interna di LillyPond sono molto complicato. 797 00:45:28,960 --> 00:45:31,060 E lo si può utilizzare per molto tempo, includendo 798 00:45:31,060 --> 00:45:32,520 per alcuni piuttosto complicato le cose, senza realmente 799 00:45:32,520 --> 00:45:34,060 dover conoscere molto su di loro. 800 00:45:34,060 --> 00:45:38,720 Ma l'idea di base è che il livello più basso, gli atomi di LillyPonds 801 00:45:38,720 --> 00:45:39,970 sono le note. 802 00:45:39,970 --> 00:45:42,761 Le note contengono una Contesto chiamati voci. 803 00:45:42,761 --> 00:45:44,510 Così il contesto voce corrisponde sostanzialmente 804 00:45:44,510 --> 00:45:47,410 ad una singola linea di polifonia. 805 00:45:47,410 --> 00:45:49,410 E poi contesto può essere contenuta gerarchicamente 806 00:45:49,410 --> 00:45:53,590 in quelle di livello superiore che rappresentano il personale sul punteggio 807 00:45:53,590 --> 00:45:56,750 o raggruppamenti più grandi come personale di pianoforte o personale del coro, 808 00:45:56,750 --> 00:45:58,990 e poi alla fine interi contesti punteggio. 809 00:45:58,990 --> 00:46:02,260 E si può effettivamente comprendere più punteggi in un libro. 810 00:46:02,260 --> 00:46:05,770 >> E ogni contesto ha una numero di incisori collegati. 811 00:46:05,770 --> 00:46:08,340 Se si guarda attraverso il contenuti del contesto 812 00:46:08,340 --> 00:46:14,410 e stampare un certo simbolo o un certa classe di simboli come necessario. 813 00:46:14,410 --> 00:46:17,840 Quindi, per ogni contesto voce, c'è [incomprensibile] note 814 00:46:17,840 --> 00:46:24,270 incisore che è fondamentalmente una funzione o un oggetto che scrive tutte le note 815 00:46:24,270 --> 00:46:26,290 teste sulle parti destra della pagina. 816 00:46:26,290 --> 00:46:29,510 Poi c'è un incisore di fessura, che scrive fuori fessure sul personale. 817 00:46:29,510 --> 00:46:31,517 Poi c'è un metronomo incisore marchio che 818 00:46:31,517 --> 00:46:33,100 scrive fuori segni di metronomo in una partitura. 819 00:46:33,100 --> 00:46:36,410 E tutti questi si adattano abbastanza bene nella gerarchia. 820 00:46:36,410 --> 00:46:39,500 Ed è molto, molto, molto personalizzabile, che è necessario 821 00:46:39,500 --> 00:46:42,880 se si vuole ottenere cose del genere. 822 00:46:42,880 --> 00:46:45,730 >> Così tutti i contesti hanno un sacco di diversi attributi 823 00:46:45,730 --> 00:46:52,410 che è possibile modificare per ogni cosa dalla distanza di vari tipo di carattere 824 00:46:52,410 --> 00:46:54,942 selezione di dimensioni delle cose. 825 00:46:54,942 --> 00:46:56,900 Se si vuole fare anche le cose più complicate, 826 00:46:56,900 --> 00:46:59,210 c'è un linguaggio di scripting incorporato. 827 00:46:59,210 --> 00:47:01,820 Usano regime, che è il dialetto di LISP. 828 00:47:01,820 --> 00:47:04,960 Questi probabilmente non lo fanno significa qualcosa per te. 829 00:47:04,960 --> 00:47:06,900 Ma in fondo, di un regime un'altra funzionale 830 00:47:06,900 --> 00:47:09,500 linguaggio di programmazione, più o meno. 831 00:47:09,500 --> 00:47:10,800 >> STEPHEN Krewson: Il tie-in. 832 00:47:10,800 --> 00:47:12,690 >> CONNOR HARRIS: Sì. 833 00:47:12,690 --> 00:47:15,390 E 'un buon tie-in, suppongo. 834 00:47:15,390 --> 00:47:20,150 Ed è utilizzato come lingua di insegnamento, in realtà, giù Mass Ave. Al MIT. 835 00:47:20,150 --> 00:47:26,590 Ed è molto utile per LillyPond per varie ragioni tecniche. 836 00:47:26,590 --> 00:47:30,317 >> E così, se si vuole fare semplice tweaks dipendenti condizionali, 837 00:47:30,317 --> 00:47:32,900 per example-- c'è certo condizioni di un punteggio che ha incontrato, 838 00:47:32,900 --> 00:47:36,495 apportare modifiche al layout o whatnot-- poi 839 00:47:36,495 --> 00:47:37,620 quelle strutture ci sono. 840 00:47:37,620 --> 00:47:38,667 Sono complicato. 841 00:47:38,667 --> 00:47:40,250 Quindi, ecco un esempio di codice piuttosto semplice. 842 00:47:40,250 --> 00:47:43,810 E 'cinque righe. 843 00:47:43,810 --> 00:47:46,120 Fondamentalmente, io sto definendo due bastoni. 844 00:47:46,120 --> 00:47:46,904 E 'in 3/4. 845 00:47:46,904 --> 00:47:48,695 La prima personale ha un attaccato contrassegno tempo, 846 00:47:48,695 --> 00:47:51,110 ma che sta realmente accadendo per andare a tutta punteggio, 847 00:47:51,110 --> 00:47:54,960 perché segni di tempo sono al livello di punteggio. 848 00:47:54,960 --> 00:47:59,044 L'incisore segno di metronomo è attaccato a segnare contesto. 849 00:47:59,044 --> 00:48:01,460 Ci sono diverse chiavi, perché il [incomprensibile] incisore 850 00:48:01,460 --> 00:48:02,710 si allega il personale. 851 00:48:02,710 --> 00:48:04,441 Si può effettivamente fare è. 852 00:48:04,441 --> 00:48:06,190 Il campione che ho scritto è in realtà in do maggiore, 853 00:48:06,190 --> 00:48:07,990 ma è solo per dimostrare si può avere 854 00:48:07,990 --> 00:48:09,570 chiavi diverse in diversi stati maggiori. 855 00:48:09,570 --> 00:48:15,710 E la sintassi di base è che si scrive notare nomi con E, F, G, qualunque cosa. 856 00:48:15,710 --> 00:48:18,910 Se si vuole fare alterazioni, si suffisso è o ES. 857 00:48:18,910 --> 00:48:22,640 Questo è da olandese convegni musicologici. 858 00:48:22,640 --> 00:48:28,290 >> E per fare salti di ottava, devi usare questi segni di graduazione, virgola o apostrofo. 859 00:48:28,290 --> 00:48:30,580 Il relativo significa semplicemente ciò che avete una nota, 860 00:48:30,580 --> 00:48:34,080 esso verrà automaticamente plaec nel ottava più vicino a quello precedente. 861 00:48:34,080 --> 00:48:37,624 E se si vuole saltare oltre un fifth-- dire un quinto o more-- 862 00:48:37,624 --> 00:48:39,165 quindi è necessario utilizzare il [incomprensibile]. 863 00:48:39,165 --> 00:48:42,580 Ma per il resto, non c'è bisogno di specificare l'ottava di ogni singola nota. 864 00:48:42,580 --> 00:48:46,130 >> E relativo C, primo e C, è sufficiente specificare centrale C 865 00:48:46,130 --> 00:48:48,630 e base C, specialmente prime note. 866 00:48:48,630 --> 00:48:55,020 Poi ci sono i bastoni che organizzano queste due voci o campioni di musica, 867 00:48:55,020 --> 00:48:56,730 e si dispone di un punteggio. 868 00:48:56,730 --> 00:48:58,440 E che assomiglia a questo. 869 00:48:58,440 --> 00:49:01,780 870 00:49:01,780 --> 00:49:05,380 >> Se si vuole prendere il tempo di copiare quel campione di LillyPond 871 00:49:05,380 --> 00:49:07,530 codice sul precedente scivolare giù qui, e si 872 00:49:07,530 --> 00:49:09,030 può scrivere per LillyPond te. 873 00:49:09,030 --> 00:49:11,280 So che abbiamo qualcosa che sembra un po 'come questo. 874 00:49:11,280 --> 00:49:17,236 875 00:49:17,236 --> 00:49:19,610 Quindi c'è un'altra tecnologia chiamato XML Musica mantenuto 876 00:49:19,610 --> 00:49:22,030 da persone completamente diverse. 877 00:49:22,030 --> 00:49:28,150 XML è un dato testuale structure-- I Non dovrebbe dire dati structure-- dicono 878 00:49:28,150 --> 00:49:29,580 mappa metafora sorta di. 879 00:49:29,580 --> 00:49:33,800 Ed è progettato per contenere dati gerarchici molto bene. 880 00:49:33,800 --> 00:49:37,050 HTML, per esempio, è un tipo di XML. 881 00:49:37,050 --> 00:49:41,090 E si può dire XML perché avuto tutte le parentesi angolari e l'angolo 882 00:49:41,090 --> 00:49:44,700 marchi staffa di barra che i campi spettacolo dati. 883 00:49:44,700 --> 00:49:47,390 >> Non ho un codice Esempio da XML Music. 884 00:49:47,390 --> 00:49:50,450 Si possono trovare da soli. 885 00:49:50,450 --> 00:49:53,735 In sostanza, il motivo si potrebbe desiderare utilizzare XML come stadio intermedio 886 00:49:53,735 --> 00:49:55,980 è, prima di tutto, è un formato di interscambio 887 00:49:55,980 --> 00:50:02,301 praticamente per every-- non dovrei dirlo ogni, ma un sacco di punteggio diverso 888 00:50:02,301 --> 00:50:02,800 scrittori. 889 00:50:02,800 --> 00:50:04,966 Quindi, se si scrive in Musica XML, non solo può LillyPond 890 00:50:04,966 --> 00:50:08,080 letta con l'aiuto di questo auxilary programma chiamato XML Musica per LY, 891 00:50:08,080 --> 00:50:11,360 ma anche in grado di leggere Finale esso, Sibelius può leggerlo. 892 00:50:11,360 --> 00:50:14,770 A seconda di come il vostro oggetto interno Gerarchia lavora per rappresentare la musica, 893 00:50:14,770 --> 00:50:18,820 potrebbe essere più facile da scrivere XML musica piuttosto che LillyPond 894 00:50:18,820 --> 00:50:22,410 e fare affidamento solo su XML Musica a LY per eseguire la conversione. 895 00:50:22,410 --> 00:50:24,282 >> Non credo che [incomprensibile] ha XML Music. 896 00:50:24,282 --> 00:50:25,490 STEPHEN Krewson: Non è così. 897 00:50:25,490 --> 00:50:26,340 Qualcuno sta lavorando su di esso, però. 898 00:50:26,340 --> 00:50:27,090 >> CONNOR HARRIS: OK. 899 00:50:27,090 --> 00:50:31,040 Euterpea non ha un Funzione di output XML musica ancora. 900 00:50:31,040 --> 00:50:35,340 Se volete un idea finale del progetto, forse entrare in contatto con i ragazzi 901 00:50:35,340 --> 00:50:38,620 che Stefano conosce, e si potrebbe utilizzare il vostro aiuto. 902 00:50:38,620 --> 00:50:40,992 >> STEPHEN Krewson: Mi piacerebbe che. 903 00:50:40,992 --> 00:50:43,450 CONNOR HARRIS: Inoltre, in fondo, ogni linguaggi di programmazione 904 00:50:43,450 --> 00:50:46,610 che vale la pena il suo sale ha già una libreria XML, 905 00:50:46,610 --> 00:50:51,030 modo da poter convertire internamente tutto della vostra musica in un oggetto 906 00:50:51,030 --> 00:50:54,120 che la libreria XML può scrivere che richiederebbe meno 907 00:50:54,120 --> 00:50:57,470 modifiche alla vostra struttura interna per qualsiasi musica che gli oggetti 908 00:50:57,470 --> 00:51:00,310 voglio scrivere che scriverlo direttamente in LillyPond sarebbe. 909 00:51:00,310 --> 00:51:04,380 Poi basta stamparlo con XML con le librerie XML nella tua lingua, 910 00:51:04,380 --> 00:51:07,260 che garantisca che è sintatticamente corretto e tutto, 911 00:51:07,260 --> 00:51:08,720 e poi convertirlo in LillyPond. 912 00:51:08,720 --> 00:51:11,060 Quindi la tecnologia si potrebbe desiderare di esaminare se si sta facendo qualcosa 913 00:51:11,060 --> 00:51:11,650 come questo. 914 00:51:11,650 --> 00:51:14,490 915 00:51:14,490 --> 00:51:16,370 >> [Incomprensibile], un altro La tecnologia auxilarry. 916 00:51:16,370 --> 00:51:21,700 Questo è fondamentalmente Tech Opere o Tech Studio per LillyPond. 917 00:51:21,700 --> 00:51:25,380 Così offre aiuto sintassi, con i modelli 918 00:51:25,380 --> 00:51:28,770 per vari comuni combinazioni di strumenti. 919 00:51:28,770 --> 00:51:32,780 Permette split screen di visualizzazione in modo è possibile avere il codice in una finestra 920 00:51:32,780 --> 00:51:37,350 e PDF in un'altra finestra e clicca sui luoghi in PDF 921 00:51:37,350 --> 00:51:40,650 per passare al rispettivo punti in codice sorgente. 922 00:51:40,650 --> 00:51:45,330 Questo è più utile se si sta effettivamente scrittura LillyPond file te 923 00:51:45,330 --> 00:51:47,400 che se si sta generando a livello di programmazione. 924 00:51:47,400 --> 00:51:51,230 Ma ancora una volta, è qualcosa di utile da avere. 925 00:51:51,230 --> 00:51:51,970 >> Grande. 926 00:51:51,970 --> 00:51:55,860 Un'altra resources-- mi limiterò a passare attraverso questo molto rapidamente. 927 00:51:55,860 --> 00:52:01,270 LillyPond manuals-- LillyPond ha documentazione eccellente sul suo sito web. 928 00:52:01,270 --> 00:52:02,270 Hanno un tutorial. 929 00:52:02,270 --> 00:52:03,478 Essi hanno un riferimento sintassi. 930 00:52:03,478 --> 00:52:07,010 Hanno centinaia di frammenti per varie piccole cose 931 00:52:07,010 --> 00:52:09,930 yo potrebbe essere necessario fare per dimostrare varie capacità. 932 00:52:09,930 --> 00:52:12,250 Se si desidera utilizzare il linguaggio di scripting 933 00:52:12,250 --> 00:52:14,740 o rendere più ampia personalizzazioni, poi c'è 934 00:52:14,740 --> 00:52:16,730 interni riferimento a tale URL. 935 00:52:16,730 --> 00:52:21,950 Se si desidera utilizzare XML Musica, c'è tale URL, musicxml.com/tutorial. 936 00:52:21,950 --> 00:52:27,960 >> E poi se hai bisogno di imparare schema perché in realtà desidera utilizzare 937 00:52:27,960 --> 00:52:30,960 le strutture di scripting in LillyPond, poi c'è una [incomprensibile] chiamato 938 00:52:30,960 --> 00:52:32,918 Interpretazione strutturato dei programmi per computer, 939 00:52:32,918 --> 00:52:35,820 che non è solo la seconda più grande libro di testo CS mai written-- 940 00:52:35,820 --> 00:52:39,770 trovarmi in seguito se volete sapere quello che penso il più grande quello è-- 941 00:52:39,770 --> 00:52:43,580 ma è anche un ottimo introduzione alla lingua corretta. 942 00:52:43,580 --> 00:52:46,630 Non avrete bisogno di più di le prime sezioni. 943 00:52:46,630 --> 00:52:47,827 >> E questo è tutto. 944 00:52:47,827 --> 00:52:48,410 Qualsiasi domanda? 945 00:52:48,410 --> 00:52:54,068 946 00:52:54,068 --> 00:52:57,972 >> STUDENTE: Dove posso scaricare il tuo generato Frere Jacques 947 00:52:57,972 --> 00:53:01,050 così posso mettere sul mio iPod? 948 00:53:01,050 --> 00:53:07,574 >> STEPHEN Krewson: Beh, è ​​possibile scrivere fuori per un po 'di file wav in Euterpea. 949 00:53:07,574 --> 00:53:08,490 E tu hai il codice. 950 00:53:08,490 --> 00:53:10,000 E 'su GitHub. 951 00:53:10,000 --> 00:53:15,590 Fai le tue variazioni di Frere Jacques da CS50 mente alveare. 952 00:53:15,590 --> 00:53:17,095 Sarebbe fantastico. 953 00:53:17,095 --> 00:53:18,220 CONNOR HARRIS: Nessun altro? 954 00:53:18,220 --> 00:53:20,261 STEPHEN Krewson: Abbiamo bisogno una migliore grancassa, anche. 955 00:53:20,261 --> 00:53:21,935 E 'davvero male. 956 00:53:21,935 --> 00:53:26,565 >> STUDENTE: Euterpea non solo lato composizione, ma signal-- 957 00:53:26,565 --> 00:53:27,440 STEPHEN Krewson: Sì. 958 00:53:27,440 --> 00:53:30,100 Infatti, il lavoro che ha fatto in Euterpea quando ho 959 00:53:30,100 --> 00:53:33,450 ha preso questo-- c'è un laurea corso a Yale che 960 00:53:33,450 --> 00:53:35,900 utilizza it-- era in sintesi sonora. 961 00:53:35,900 --> 00:53:39,810 Quindi c'è una davvero bel modo usando le frecce 962 00:53:39,810 --> 00:53:46,150 e alcuni di notazione abbiamo visto comporre insieme le funzioni di segnalazione. 963 00:53:46,150 --> 00:53:50,610 In particolare, il basso per più di loro è solo una semplice onda sinusoidale. 964 00:53:50,610 --> 00:53:54,240 Ma se si inizia a comporre quelle in modi strani programmatiche, 965 00:53:54,240 --> 00:54:00,010 è possibile ottenere il suono pazzo effetti, come cascate strani. 966 00:54:00,010 --> 00:54:04,640 È possibile creare molto grintoso suona con un sacco di modulazione. 967 00:54:04,640 --> 00:54:07,730 >> Ho fatto un progetto su granulari sintesi, che è 968 00:54:07,730 --> 00:54:12,290 da qualche parte tra FM e campionamento. 969 00:54:12,290 --> 00:54:15,230 Si prende molto piccolo, piccoli campioni, e poi 970 00:54:15,230 --> 00:54:20,440 combinarle con una sorta di modulatore e costruire un suono più ricco. 971 00:54:20,440 --> 00:54:24,900 Abbiamo anche fatto la modellazione fisica, in modo cercando di pensare alla fisica 972 00:54:24,900 --> 00:54:29,410 e psicoacustica di qualcosa di simile una tromba, e pensare al modo 973 00:54:29,410 --> 00:54:32,320 il suono è rimbalzando la campana della tromba 974 00:54:32,320 --> 00:54:35,200 e l'acustica di la camera e modellazione 975 00:54:35,200 --> 00:54:40,195 che con gli oscillatori di base. 976 00:54:40,195 --> 00:54:47,690 977 00:54:47,690 --> 00:54:48,940 CONNOR HARRIS: Grazie mille. 978 00:54:48,940 --> 00:54:50,140 Grazie per essere venuti. 979 00:54:50,140 --> 00:54:52,400 E io sono sempre disposto a prendere le domande per email-- 980 00:54:52,400 --> 00:54:55,020 connorharris@college.harvard.edu. 981 00:54:55,020 --> 00:54:57,020 >> STEPHEN Krewson: Sì. stephen.krewson@yale.edu. 982 00:54:57,020 --> 00:54:58,810 983 00:54:58,810 --> 00:55:00,360 Raffreddare. 984 00:55:00,360 --> 00:55:01,667