1 00:00:00,000 --> 00:00:05,180 2 00:00:05,180 --> 00:00:05,930 CONNOR HARRIS: Hallo. 3 00:00:05,930 --> 00:00:06,820 Ich bin Connor Harris. 4 00:00:06,820 --> 00:00:09,729 Ich bin ein CS50 CA an der Harvard. 5 00:00:09,729 --> 00:00:11,270 STEPHEN Krewson: Ich bin Stephen Krewson. 6 00:00:11,270 --> 00:00:12,582 Ich bin ein TF für CS50 an der Yale. 7 00:00:12,582 --> 00:00:15,790 CONNOR HARRIS: Und wir sprechen über einige Technologien, die Sie 8 00:00:15,790 --> 00:00:18,880 zu verwenden, wenn Sie daran interessiert sind möchten dabei eine endgültige Projekt oder wirklich 9 00:00:18,880 --> 00:00:20,920 nichts mit Musik. 10 00:00:20,920 --> 00:00:24,400 Wir werden auf zunächst ein Schwerpunkt werden Programmiersprache namens Haskell. 11 00:00:24,400 --> 00:00:26,280 Es ist eine funktionelle Sprache, so das Paradigma 12 00:00:26,280 --> 00:00:29,620 ist sehr verschieden von C oder PHP oder andere imperativen Sprachen 13 00:00:29,620 --> 00:00:33,450 dass Sie bereits verwendet haben, und vor allem auf einer Bibliothek in Haskell geschrieben 14 00:00:33,450 --> 00:00:40,240 genannt Euterpea, die Menschen helfen können mit Musik zu schreiben funktional, 15 00:00:40,240 --> 00:00:40,780 im Grunde. 16 00:00:40,780 --> 00:00:43,400 Und Stephen sind Sie zu Fuß durch ein großartiges Beispiel dafür, dass. 17 00:00:43,400 --> 00:00:46,423 >> Danach werde ich Ihnen vorstellen etwas namens LillyPond, die 18 00:00:46,423 --> 00:00:48,370 ist eine Technologie zur Satz Musik. 19 00:00:48,370 --> 00:00:50,830 Es ist irgendwie wie LaTeX für die Musik, wenn einer von euch 20 00:00:50,830 --> 00:00:57,530 haben LaTeX für Mathe Klassen verwendet oder andere P set-Klassen oder was auch immer. 21 00:00:57,530 --> 00:01:00,440 Und so gebe ich Ihnen wieder einige einfache Beispiele, dass 22 00:01:00,440 --> 00:01:03,640 und zeigen Sie in die allgemeine Richtung einigen besseren Ressourcen. 23 00:01:03,640 --> 00:01:04,319 >> STEPHEN Krewson: In Darüber hinaus ist es dachte, wir 24 00:01:04,319 --> 00:01:06,720 wäre cool einzurichten ein bisschen von Hinweise 25 00:01:06,720 --> 00:01:10,780 in Richtung einer Rohrleitung zwischen Euterpea generierte MIDI-Dateien 26 00:01:10,780 --> 00:01:13,910 in LillyPond, so bieten wir einige Kurse vor Skripten 27 00:01:13,910 --> 00:01:16,310 derjenigen, die es tun, mit LillyPond bereitgestellt 28 00:01:16,310 --> 00:01:19,160 nur um es zu halten, Open-Source- und eine Rohrleitung gehen. 29 00:01:19,160 --> 00:01:20,910 CONNOR HARRIS: Wieder sollten wir betonen, 30 00:01:20,910 --> 00:01:23,100 Diese beiden Technologien, die Sie nicht haben, um sie gemeinsam zu nutzen. 31 00:01:23,100 --> 00:01:25,370 Sie sind nicht darauf ausgelegt, zu arbeiten zusammen, obwohl sie sehr schön. 32 00:01:25,370 --> 00:01:26,362 >> STEPHEN Krewson: Richtig. 33 00:01:26,362 --> 00:01:30,116 Und völlig kostenlos. 34 00:01:30,116 --> 00:01:32,240 CONNOR HARRIS: So Bestätigungen, gerade gelesen, dass. 35 00:01:32,240 --> 00:01:33,406 STEPHEN Krewson: Zur Kenntnis genommen. 36 00:01:33,406 --> 00:01:36,360 Dank dieser Leute. 37 00:01:36,360 --> 00:01:39,180 Dies werde ich auf nur für einen Moment zu verweilen. 38 00:01:39,180 --> 00:01:41,560 Der Installationsprozess ist ein wenig kompliziert. 39 00:01:41,560 --> 00:01:45,420 Wir haben eine auf der GitHub las mir dass Sie einen Blick auf zu nehmen. 40 00:01:45,420 --> 00:01:47,840 Emailen Sie mich einfach, wenn Sie irgendwelche Fragen haben. 41 00:01:47,840 --> 00:01:52,829 Aber wir werden diese unter der Annahme ausgeführt dass dies für alle arbeiten. 42 00:01:52,829 --> 00:01:55,620 CONNOR HARRIS: Und wenn Sie nicht können bekommen LillyPond zu arbeiten, keine große Sache. 43 00:01:55,620 --> 00:02:00,139 Es gibt keine Live-Zusammenstellung, beteiligt sein werden, zumindest auf meinem Ende. 44 00:02:00,139 --> 00:02:02,930 STEPHEN Krewson: Haskell und LillyPond sollten beide haben Installateure. 45 00:02:02,930 --> 00:02:08,497 Euterpea ist als Download Paket, so weiter und so fort. 46 00:02:08,497 --> 00:02:10,080 Also wir über Computermusik im Gespräch. 47 00:02:10,080 --> 00:02:12,990 Und dies ist nur eine sehr 50.000-Fuß-Ansicht. 48 00:02:12,990 --> 00:02:15,700 Es gibt ein paar verschiedene Aspekte davon. 49 00:02:15,700 --> 00:02:18,120 Und das ist rau und ist wird einige Details zu verschleiern. 50 00:02:18,120 --> 00:02:22,090 Aber wir etwas einfallen könnte wie algorithmische Komposition, 51 00:02:22,090 --> 00:02:24,920 unter Verwendung von Algorithmen, Verwendung von Code, um zu erzeugen 52 00:02:24,920 --> 00:02:30,280 eine Art von-- vielleicht eine selbstähnliche Tonfolge, oder vielleicht Notizen 53 00:02:30,280 --> 00:02:33,330 unter einem Zwang. 54 00:02:33,330 --> 00:02:35,350 Und dann diejenigen, könnte ausgeführt oder interpretiert 55 00:02:35,350 --> 00:02:38,390 mit analogen Instrumenten oder so etwas. 56 00:02:38,390 --> 00:02:42,010 Jedoch war die Zusammensetzung algorithmisch durchgeführt. 57 00:02:42,010 --> 00:02:45,120 >> Aber natürlich, vielleicht der Bereich der Computer-Musik oder digitale Musik 58 00:02:45,120 --> 00:02:48,870 wir sind besser vertraut mit digital Klangsynthese oder digitale Abtastung 59 00:02:48,870 --> 00:02:51,160 und Digital-Aufnahme. 60 00:02:51,160 --> 00:02:55,650 Viele digitale Instrumente sind durch digitale Abtastung erfolgt. 61 00:02:55,650 --> 00:03:00,110 In der Tat, werden wir mit einer der in die Form einer Soundfont-Bibliothek später. 62 00:03:00,110 --> 00:03:02,850 >> Aber es gibt auch so etwas wie digitale Synthese, die herauskamen 63 00:03:02,850 --> 00:03:08,650 der späten 70er und in den 80er Jahren mit Yamaha und John Chowning an der Stanford 64 00:03:08,650 --> 00:03:11,990 Dabei FM-Synthese oder FM-Synthese, 65 00:03:11,990 --> 00:03:15,100 wo Sie einen Träger hatte Signal und ein Modulationssignal 66 00:03:15,100 --> 00:03:18,270 sowohl im Audiospektrum. 67 00:03:18,270 --> 00:03:22,570 Aber was wir auf konzentriert heute ist die so genannte MIDI, 68 00:03:22,570 --> 00:03:25,040 und natürlich, algorithmische Komposition. 69 00:03:25,040 --> 00:03:30,940 >> Wir gehen nicht, um Instrumente zu machen, aber wir stattdessen gehen, um etwas Musik zu machen, 70 00:03:30,940 --> 00:03:33,940 und dann, dass interpretiert bekommen von einigen Instrumenten, 71 00:03:33,940 --> 00:03:38,300 sind konform zu den allgemeine MIDI-Standard. 72 00:03:38,300 --> 00:03:40,830 Also, was ist MIDI? 73 00:03:40,830 --> 00:03:45,550 Ich werde nicht zu tief in sie zu erhalten, aber MIDI ist Datenübertragungsprotokoll. 74 00:03:45,550 --> 00:03:49,250 Es ist eine Art von einem Führer über verschiedenen Unternehmen und Branchen 75 00:03:49,250 --> 00:03:52,250 für die Organisation von Klängen oder Patches. 76 00:03:52,250 --> 00:03:54,170 Also werden wir sehen, dass es gibt eine MIDI-Standard 77 00:03:54,170 --> 00:03:57,500 für all die verschiedenen Percussion- Sounds und MIDI-Empfehlungen 78 00:03:57,500 --> 00:04:01,360 für alle unterschiedlichen Arten von Synthesizer oder verschiedene Arten von allen Instrumenten 79 00:04:01,360 --> 00:04:03,650 Gruppen in einem Orchester, zu sagen. 80 00:04:03,650 --> 00:04:08,916 >> Du bist wahrscheinlich kennen 0 bis 127 MIDI-Meldungen. 81 00:04:08,916 --> 00:04:12,920 Ein MIDI-Signal ist in der Regel ein Bit anzeigt, 82 00:04:12,920 --> 00:04:16,130 ob es sich um ein Daten oder eine Statuspaket, und dann gibt es 83 00:04:16,130 --> 00:04:18,589 sieben Bits eines Signals. 84 00:04:18,589 --> 00:04:21,430 Und diese steuern können alles von Volumen 85 00:04:21,430 --> 00:04:25,330 der Wirkung oder Druck auf einem bestimmten Schlüssel 86 00:04:25,330 --> 00:04:29,400 Wenn Sie mit einem MIDI gerade ausführen Controller sowie natürlich 87 00:04:29,400 --> 00:04:31,250 Noten. 88 00:04:31,250 --> 00:04:33,450 Und natürlich hat MIDI war äußerst nützlich, 89 00:04:33,450 --> 00:04:37,550 denn es ist ein Weg, um Draht zusammen oder Daisy-Chain- 90 00:04:37,550 --> 00:04:41,570 eine Reihe von MIDI-Hardware-Geräte. 91 00:04:41,570 --> 00:04:44,050 Ich habe sieben oder acht wieder bei mir zu Hause. 92 00:04:44,050 --> 00:04:46,610 Es wird wirklich kompliziert, aber es ist wirklich mächtig. 93 00:04:46,610 --> 00:04:47,460 Und es ist wirklich alt. 94 00:04:47,460 --> 00:04:51,117 Es ist aus den frühen 80er Jahren, und es ist wirklich schön und klein. 95 00:04:51,117 --> 00:04:51,950 CONNOR HARRIS: Ja. 96 00:04:51,950 --> 00:04:54,230 All die klassischen Nintendo Videospiele würde wahrscheinlich 97 00:04:54,230 --> 00:04:56,088 haben MIDI-Dateien für die Musik, zum Beispiel. 98 00:04:56,088 --> 00:04:59,550 99 00:04:59,550 --> 00:05:01,740 >> STEPHEN Krewson: Hier ist ein Beispiel der allgemeinen MIDI, 100 00:05:01,740 --> 00:05:06,520 zeigt MIDI als eine Art allgemeine Protokoll. 101 00:05:06,520 --> 00:05:13,280 Und ich denke, dass wir von der denken kann, Unterschied zwischen der Spezifikation 102 00:05:13,280 --> 00:05:17,830 dass es so etwas wie diese Instrumentenklänge und die tatsächliche 103 00:05:17,830 --> 00:05:21,740 Umsetzung dieser Instrumente klingt in einem Soundfont oder einen bestimmten MIDI- 104 00:05:21,740 --> 00:05:25,740 Synthesizer als Differenz zwischen vielleicht ein typeface--, die besagt, 105 00:05:25,740 --> 00:05:30,350 in der Regel ist dies die Gestaltung der diese besondere Art und Weise zu vertreten 106 00:05:30,350 --> 00:05:35,907 characters-- und eine bestimmte Schriftart dass eine spezifische Größe und Klangfarbe, 107 00:05:35,907 --> 00:05:37,240 und es gibt Realisierung the-- 108 00:05:37,240 --> 00:05:39,156 >> CONNOR HARRIS: Vielleicht ein besserer Vergleich wäre 109 00:05:39,156 --> 00:05:43,430 werden die Unicode-Standard says-- sie gibt eine Zahl, die jedem Charakter, und wirklich 110 00:05:43,430 --> 00:05:46,830 jede Sprache in der Welt, oder eine große Sammlung von Skripten der Sprache 111 00:05:46,830 --> 00:05:51,310 in der Welt, und das sind in etwas grafische gemacht 112 00:05:51,310 --> 00:05:53,710 durch verschiedene Font-Pakete. 113 00:05:53,710 --> 00:05:56,630 Und natürlich können Sie denken MIDI als Unicode des Klangs. 114 00:05:56,630 --> 00:06:03,250 Und es ist nur eine Liste von-- einem großen Strom Veranstaltungen und Instrumente und so weiter, 115 00:06:03,250 --> 00:06:06,090 und Sie verfügen über einen separaten haben Programm, wie ein Schriftbild, 116 00:06:06,090 --> 00:06:08,537 zu, dass in machen etwas, das hörbar ist. 117 00:06:08,537 --> 00:06:12,360 118 00:06:12,360 --> 00:06:13,780 >> STEPHEN Krewson: Warum Haskell? 119 00:06:13,780 --> 00:06:19,110 Haskell ist eine funktionale Programmiersprache Sprache, sehr weit fortgeschritten, 120 00:06:19,110 --> 00:06:22,770 sehr verschieden von C, sehr verschieden von PHP. 121 00:06:22,770 --> 00:06:28,120 Und wir werden sehen, dass es eine einfache Funktions Zusammensetzung in Haskell 122 00:06:28,120 --> 00:06:37,640 das wird es uns ermöglichen, durch die Brise Zusammenstellung oder die Eingabe auf, Transkription, 123 00:06:37,640 --> 00:06:42,160 so etwas wie Frere Jacques, Dieses einfache Lied, 124 00:06:42,160 --> 00:06:46,815 hat viele Teile in ihm, sind selbstähnlich oder Wiederholen. 125 00:06:46,815 --> 00:06:49,740 126 00:06:49,740 --> 00:06:53,250 So wird dies einige sein die Motivation, warum 127 00:06:53,250 --> 00:06:59,400 wir verwenden Haskell, in denen Funktionen sind Bürger erster Klasse. 128 00:06:59,400 --> 00:07:01,120 >> Und ich wollte, um zu verlängern diese ein wenig. 129 00:07:01,120 --> 00:07:08,800 Es ist ein bisschen einfach, notieren Frere Jacques in Haskell. 130 00:07:08,800 --> 00:07:12,100 Aber was, wenn wir wollten, fügen Sie ein Drum-Part, um es? 131 00:07:12,100 --> 00:07:17,320 Was ist, wenn wir wollten, um zu versuchen, so etwas wie eine Roland 808 oder 909 Trommel 132 00:07:17,320 --> 00:07:20,970 Rechner, auf dem Sie etwa 16 verschiedene Schritte? 133 00:07:20,970 --> 00:07:24,590 Normalerweise sind diese dachte an als 16tel-Noten. 134 00:07:24,590 --> 00:07:28,640 Und Sie können die globale Kontrolle Tempo, und Sie können herausgreifen 135 00:07:28,640 --> 00:07:34,620 eine Reihe von verschiedenen Schlagteile der Bass-Drum, ein Klatschen, verschiedene Schlingen, 136 00:07:34,620 --> 00:07:37,540 offenen und geschlossenen Hoch Hüte auf diese Art von Kanälen, 137 00:07:37,540 --> 00:07:41,600 und dann können Sie EQ oder passen ihre Lautstärke. 138 00:07:41,600 --> 00:07:45,290 >> Und wir werden eine schöne Art und Weise zu sehen Haskell vertreten Sie diesen Schritt 139 00:07:45,290 --> 00:07:48,810 Sequenzer mit allen verschiedene coole Dinge in Haskell 140 00:07:48,810 --> 00:07:53,100 wir mit der Erzeugung tun können Listen und Filtern über Listen, 141 00:07:53,100 --> 00:07:56,060 Mapping über Listen, Kartierung Funktionen über Listen. 142 00:07:56,060 --> 00:07:59,530 143 00:07:59,530 --> 00:08:00,760 Und eine schnelle Entschuldigung. 144 00:08:00,760 --> 00:08:05,300 Dies ist eine sehr oberflächliche und übermäßig schnelle Skizze 145 00:08:05,300 --> 00:08:07,620 einiger der Aspekte von Haskell und Euterpea, 146 00:08:07,620 --> 00:08:11,760 die eine domänenspezifische ist Embedded-Sprache geschrieben 147 00:08:11,760 --> 00:08:14,970 in Haskell für Musikarten. 148 00:08:14,970 --> 00:08:17,350 Also bitte überprüfen Sie den Code online. 149 00:08:17,350 --> 00:08:22,404 Starten Sie GHCI, die die Glasgow Haskell Compiler-Interpreter. 150 00:08:22,404 --> 00:08:24,320 Und ich werde tun, einige von diesem in ein wenig 151 00:08:24,320 --> 00:08:25,880 damit Sie sehen können, wie es geht. 152 00:08:25,880 --> 00:08:31,021 >> Und das können Sie mit Last in the-- die Syntax ist Doppelpunkt und dann 153 00:08:31,021 --> 00:08:31,520 der Befehl. 154 00:08:31,520 --> 00:08:33,510 Sie können Dateien zu laden in. 155 00:08:33,510 --> 00:08:36,840 Sie können Ordner durchsuchen auf diese Dateien verwenden um alle Funktionen sehen, dass 156 00:08:36,840 --> 00:08:39,169 bestehen in einem bestimmten Modul. 157 00:08:39,169 --> 00:08:43,850 Und dann, als wir, die Art und die Art zu sehen Klassen sind so wichtig in Haskell, 158 00:08:43,850 --> 00:08:48,850 so können Sie immer besonders check-- wenn Sie in einem neuen DSCL Arbeits 159 00:08:48,850 --> 00:08:51,600 wie dieses, was ist eine Musikrichtung? 160 00:08:51,600 --> 00:08:55,114 Ich weiß, über die Art, numerische Typen arbeiten in Haskell, 161 00:08:55,114 --> 00:08:56,530 aber ich weiß nicht viel über Musik. 162 00:08:56,530 --> 00:09:01,280 Aber Sie können die Art und Weise sie zu erkunden indem Sie dieses T oder Typ-Befehl definiert 163 00:09:01,280 --> 00:09:04,577 und dann in einem bestimmten Aufruf Funktion oder ein Datenobjekt. 164 00:09:04,577 --> 00:09:05,410 CONNOR HARRIS: Ja. 165 00:09:05,410 --> 00:09:09,820 Wenn Sie C und Clang dachte, war hardass über Typen, 166 00:09:09,820 --> 00:09:11,230 Sie haben keine Ahnung von Haskell. 167 00:09:11,230 --> 00:09:14,230 Die gute Sache über Haskell ist, dass Wenn Sie Ihren Code zu kompilieren 168 00:09:14,230 --> 00:09:16,790 und wenn Haskell Typprüfungen, es ist wohl richtig, 169 00:09:16,790 --> 00:09:18,675 weil die Art System ist so streng. 170 00:09:18,675 --> 00:09:20,090 >> STEPHEN Krewson: Ja. 171 00:09:20,090 --> 00:09:21,980 Also ich will nur gehen through-- wieder 172 00:09:21,980 --> 00:09:27,160 dies nicht tun es ein paar von justice-- Die Merkmale der Haskell, dass zumindest 173 00:09:27,160 --> 00:09:31,780 seine creators-- und es erstellt wurde in den späten 1980er Jahren durch eine Gruppe von Leuten, 174 00:09:31,780 --> 00:09:34,610 ein Komitee von etwa 20 people-- dachte, waren wichtig. 175 00:09:34,610 --> 00:09:36,850 Und das erste, was sie in einem Papier aufgelistet, 176 00:09:36,850 --> 00:09:41,890 beschrieben die Entstehung der Haskell über die ersten 20 Jahre oder so 177 00:09:41,890 --> 00:09:43,390 war, dass es faul. 178 00:09:43,390 --> 00:09:44,990 Also, was bedeutet das? 179 00:09:44,990 --> 00:09:49,860 >> Nun, es bedeutet, wenn wir über eine Art des Ausdrucks, müssen wir es bewerten. 180 00:09:49,860 --> 00:09:54,390 Und Haskell tut dies in einem Call- nach Bedarf Weg oder ein nicht-strenge Art und Weise. 181 00:09:54,390 --> 00:09:57,250 Das heißt, wenn wir haben eine Reihe von Bestandteile unserer Ausdruck, 182 00:09:57,250 --> 00:10:00,660 wir versuchen, die Auswertung zu verzögern dieser Subkomponenten 183 00:10:00,660 --> 00:10:05,300 bis die absolut letzte minute-- das heißt, bis wir tatsächlich benötigen. 184 00:10:05,300 --> 00:10:08,480 >> Also das ist die means-- wirklich cool, vor allem 185 00:10:08,480 --> 00:10:13,200 wenn wir über die Abstraktion denken einer musikalischen Step-Sequenzer. 186 00:10:13,200 --> 00:10:16,740 Sie schalten Sie ihn ein, und Sie beginnen läuft ein Schritt sequence-- 187 00:10:16,740 --> 00:10:20,010 wenn Sie überhaupt mit einer Trommel bearbeitet machine-- und es geht einfach immer. 188 00:10:20,010 --> 00:10:24,650 So wäre es wirklich schön, wenn wir könnte, dass in Haskell zu emulieren. 189 00:10:24,650 --> 00:10:31,040 Und wir können sie mit unendlicher tun Werte, insbesondere unendlich Listen. 190 00:10:31,040 --> 00:10:35,860 Es ist sehr einfach, ein Typ unendliche Liste in Haskell. 191 00:10:35,860 --> 00:10:39,230 Sie könnten nur die Syntax nach unten hier, wo Sie durch 3 siehe 1, 192 00:10:39,230 --> 00:10:42,440 entfernen Sie den 3 1 dot dot und , dass es eine unendliche Liste 193 00:10:42,440 --> 00:10:46,960 aller natürlichen Zahlen, die sich auf so weit wie Sie sich vorstellen können. 194 00:10:46,960 --> 00:10:49,925 >> Ich möchte eine Einführung Konzept der Falten sofort. 195 00:10:49,925 --> 00:10:51,800 Und wieder, der Zweck dieses Seminars ist es nicht 196 00:10:51,800 --> 00:10:55,770 über Falten in Haskell lernen oder Funktionen höherer Ordnung. 197 00:10:55,770 --> 00:10:59,640 Aber ich möchte nur, um es zu präsentieren, geben eine genaue Vorstellung davon, wie komisch 198 00:10:59,640 --> 00:11:03,700 Haskell ist und wie stark es ist. 199 00:11:03,700 --> 00:11:08,000 Und vor allem werden wir be-- wenn wir unsere verschiedenen Drum-Parts, 200 00:11:08,000 --> 00:11:12,790 werden wir manipulieren Listen Zahlen, falten Sie sie auf einander. 201 00:11:12,790 --> 00:11:17,290 Und um das zu tun, werden wir werden mit Karten und Falten. 202 00:11:17,290 --> 00:11:21,770 >> Es gibt einen richtigen assoziative falten, die dieses Recht ist 203 00:11:21,770 --> 00:11:26,990 hier-- 1 minus die Menge, 2 abzüglich der Menge, minus 3 0. 204 00:11:26,990 --> 00:11:29,170 Und die Syntax für eine Falte, eine Falte geben Ihnen 205 00:11:29,170 --> 00:11:34,680 ein Grundwert und dann eine operation-- in diesem Fall wird die Addition oder Subtraktion. 206 00:11:34,680 --> 00:11:36,280 Ich habe beide Fälle gezeigt. 207 00:11:36,280 --> 00:11:41,760 Und dann gibt es ein Akkumulator, sammelt sich über die gesamte Liste, 208 00:11:41,760 --> 00:11:46,330 Anwendung dieser Operator plus oder minus und dann anfall es. 209 00:11:46,330 --> 00:11:52,680 So wird diese the-- sein, wenn es hieß mit Klapp r Plus von 0, beginnend mit 0, 210 00:11:52,680 --> 00:11:54,720 wir würden dann summieren alle die Zahlen in dieser Liste. 211 00:11:54,720 --> 00:11:57,134 Und das ist eine Liste von 1 bis 3. 212 00:11:57,134 --> 00:12:00,050 CONNOR HARRIS: Also, um es zu einem anderen setzen So dauert fach r drei Argumente. 213 00:12:00,050 --> 00:12:02,540 Es gibt eine Funktion, selbst nimmt zwei Argumente, 214 00:12:02,540 --> 00:12:05,400 dann gibt es ein Starter-Wert, und es gibt eine Liste von Werten. 215 00:12:05,400 --> 00:12:08,570 Und was Sie tun, ist nehmen Sie Starterwert, erster Wert, 216 00:12:08,570 --> 00:12:09,850 setzen sie in der Funktion. 217 00:12:09,850 --> 00:12:11,607 Was bekommen Sie heraus, Nimm das, Futter, 218 00:12:11,607 --> 00:12:13,940 in die Funktion der zweiter Wert, was Sie bekommen, 219 00:12:13,940 --> 00:12:16,690 nehmen, dass, zu füttern, die in die in Abhängigkeit von dem dritten Wert. 220 00:12:16,690 --> 00:12:18,740 Und dann, wenn Sie unten gehen Diese ganze Liste auf diese Weise, 221 00:12:18,740 --> 00:12:22,970 Wirst du irgendwann bist einige singuläre Wert, der ist 222 00:12:22,970 --> 00:12:25,720 des gleichen Typs von dem, was Sie begonnen mit und vom gleichen Typ 223 00:12:25,720 --> 00:12:29,147 wie die Dinge in der Liste, und dann das ist die Rückkehr aufgrund der Falte R. 224 00:12:29,147 --> 00:12:31,980 STEPHEN Krewson: Also insbesondere, dies sind Funktionen höherer Ordnung, 225 00:12:31,980 --> 00:12:34,460 weil sie unter einem anderen Funktion als eines der Argumente. 226 00:12:34,460 --> 00:12:34,770 >> CONNOR HARRIS: Ja. 227 00:12:34,770 --> 00:12:37,820 Wenn Sie bestimmte andere verwendet haben languages-- Ich weiß, R, [unverständlich] 228 00:12:37,820 --> 00:12:41,510 Sprache hat diese, genannt reduzieren. 229 00:12:41,510 --> 00:12:45,460 Sie könnten ähnliche Funktionen haben in anderen Sprachen, gerade angerufen 230 00:12:45,460 --> 00:12:48,160 verschiedene Dinge. 231 00:12:48,160 --> 00:12:50,680 >> STEPHEN Krewson: Und Das Schöne an Falte R 232 00:12:50,680 --> 00:12:53,880 in diesem Fall ist, dass Falte R kann mit unendlichen Listen zu arbeiten. 233 00:12:53,880 --> 00:12:59,490 Also in diesem Boden, dieser P5 wird die Erzeugung der stellt fest, dass 234 00:12:59,490 --> 00:13:03,120 werden in der Step-Sequenzer für eingeschaltet einige Drum-Part, der fünfte Drum-Part, 235 00:13:03,120 --> 00:13:05,480 und vielleicht ist es ein conga Trommel oder so etwas. 236 00:13:05,480 --> 00:13:09,719 Und dies ist eine absichtlich stumpfen Art des Schreibens dieses, 237 00:13:09,719 --> 00:13:11,510 aber es macht Spaß, weil es viel demonstriert 238 00:13:11,510 --> 00:13:14,460 Dinge über Haskell und Euterpea. 239 00:13:14,460 --> 00:13:20,650 >> So klappen R dieser colon-- Doppelpunkt ist nur ein Operator, der die Dinge drückt 240 00:13:20,650 --> 00:13:25,700 zusammen auf einem list-- auf nüchternen genannt Liste, die nur die leere Klammern. 241 00:13:25,700 --> 00:13:28,250 Und ich rufe, dass auf dieser unendliche Liste. 242 00:13:28,250 --> 00:13:31,570 Dies ist eigentlich zwei Listen addiert hier unten. 243 00:13:31,570 --> 00:13:37,150 Die Liste 1 Komma 6 dot Punkt 1, 6, 11, 16. 244 00:13:37,150 --> 00:13:39,750 In gerade so Haskell-- ein paar Zeichen, die Sie 245 00:13:39,750 --> 00:13:42,420 kann die gesamte Erzeugung Zahlenfolge 246 00:13:42,420 --> 00:13:46,240 , die fünf Zahlen voneinander entfernt sind Stretching auf in die Unendlichkeit. 247 00:13:46,240 --> 00:13:49,860 Und ich voranstellen, um die Diese kürzere kleine list-- 248 00:13:49,860 --> 00:13:54,370 3, 8, 21-- nur um zu zeigen wie Sie Listen zu verketten. 249 00:13:54,370 --> 00:13:55,790 >> Und dann habe ich mich auf sich selbst gefaltet. 250 00:13:55,790 --> 00:14:01,510 Und das endet einfach nur eine Art von Identität Betrieb, aber es ist unendlich. 251 00:14:01,510 --> 00:14:06,070 Und falten R kann das tun, weil es träge auswertet, wie es in der oben genannten. 252 00:14:06,070 --> 00:14:10,582 Wenn wir eine 1 und eine 2 und 3, können wir nur Halter aus dem ganzen Rest davon. 253 00:14:10,582 --> 00:14:12,290 Das wird nicht für die Arbeit Minus oder Plus, aber es 254 00:14:12,290 --> 00:14:17,760 wird für diese Doppelpunkt arbeiten Identität Operation auf der Liste. 255 00:14:17,760 --> 00:14:24,620 >> Wie können wir also praktisch zu verwenden, wenn wir eine unendlich lange Liste der Dinge? 256 00:14:24,620 --> 00:14:26,500 Nun, bietet Haskell eine Menge functions-- 257 00:14:26,500 --> 00:14:29,450 und sehen eher in diese in Ihr eigenes Zeit-- wie nehmen 258 00:14:29,450 --> 00:14:32,200 die sagt, OK, wir sind Erzeugen dieses unendliche Liste, 259 00:14:32,200 --> 00:14:35,950 aber wir sind gerade dabei, einige nehmen Anzahl der es Und in diesem Fall-- 260 00:14:35,950 --> 00:14:38,410 Wir werden dies später zu sehen unsere Drum-Machine code-- 261 00:14:38,410 --> 00:14:43,740 GM ist nur eine Art von globaler Variable für die Anzahl von Schritten 262 00:14:43,740 --> 00:14:44,610 im Sequenzer. 263 00:14:44,610 --> 00:14:47,630 Auf den roll-in-Maschinen I Sie zeigten, das ist in der Regel 16, 264 00:14:47,630 --> 00:14:51,475 aber ich habe es mit 32 implementiert. 265 00:14:51,475 --> 00:14:54,470 Es spielt eigentlich keine Rolle. 266 00:14:54,470 --> 00:15:00,230 >> Haskell ist auch rein, so hat es starke statische Typisierung, die Connor spielte auf. 267 00:15:00,230 --> 00:15:03,220 So Funktionen mathematischen im sense-- 268 00:15:03,220 --> 00:15:06,600 sie sind mehr mathematische dass sie garantiert sind 269 00:15:06,600 --> 00:15:11,530 um nicht zugreifen oder ändern jede Art von variable oder führen Eingang oder Ausgang. 270 00:15:11,530 --> 00:15:14,420 Also, wenn Sie eine Funktion haben, es ist deterministisch. 271 00:15:14,420 --> 00:15:17,400 Es wird immer das gleiche zurück Wert in dem Zustand des Programms 272 00:15:17,400 --> 00:15:19,310 oder gleich bleiben. 273 00:15:19,310 --> 00:15:22,940 Es gibt natürlich Ausnahmen monadic dies, aber das ist jenseits unserer Möglichkeiten. 274 00:15:22,940 --> 00:15:23,900 >> CONNOR HARRIS: Ja. 275 00:15:23,900 --> 00:15:26,946 Was dies bedeutet, ist jedoch, da sind ein paar wichtige [unverständlich] 276 00:15:26,946 --> 00:15:27,820 Folgen davon. 277 00:15:27,820 --> 00:15:30,940 Einer ist, dass es sehr einfach ist, parallelisieren Haskell-Programme. 278 00:15:30,940 --> 00:15:32,773 Weil, wenn Sie haben, dh eine Funktion, dass 279 00:15:32,773 --> 00:15:36,064 muss sich auf eine Million Werte zu betreiben, wenn Sie wissen, dass die Funktion wird immer 280 00:15:36,064 --> 00:15:39,280 geben den gleichen Wert, wenn Sie zu einem bestimmten value-- füttern 281 00:15:39,280 --> 00:15:43,055 wenn Sie [unverständlich] f von 1 sind, f 2, dann ist f von 3 oder whatnot-- f von 1 282 00:15:43,055 --> 00:15:45,180 ist nicht zu schreiben, in eine Datei oder etwas tun, 283 00:15:45,180 --> 00:15:46,850 dass den Wert F2 zu verändern. 284 00:15:46,850 --> 00:15:50,220 Sie können einfach spalten diese Funktion, um eine Millionen verschiedene Maschinen oder eine Million 285 00:15:50,220 --> 00:15:54,720 verschiedenen Threads oder was auch immer, erhalten Sie alle Antworten zurück, 286 00:15:54,720 --> 00:15:56,900 erhalten Sie alle Rückgabewerte zurück, und das ist es. 287 00:15:56,900 --> 00:15:59,780 So sehr einfach, Dinge zu parallelisieren. 288 00:15:59,780 --> 00:16:03,140 >> Der Nachteil ist, dass die Eingangs und Ausgangs insbesondere 289 00:16:03,140 --> 00:16:05,720 passen in das Typsystem in sehr komplizierte Art und Weise. 290 00:16:05,720 --> 00:16:09,010 Wir werden nun in dieses Recht, aber ich Sie ermutigen, auf einige Ressourcen zu suchen 291 00:16:09,010 --> 00:16:11,175 online, wenn Sie darüber wissen willst. 292 00:16:11,175 --> 00:16:13,960 293 00:16:13,960 --> 00:16:16,550 >> STEPHEN Krewson: So Geben classes-- und dies 294 00:16:16,550 --> 00:16:21,610 was-- Klassen von Typen wurden erfunden, um zu lösen 295 00:16:21,610 --> 00:16:24,160 ein Problem der Überladen von Operatoren. 296 00:16:24,160 --> 00:16:27,590 Also für die Gleichstellung haben wollten wir zwischen verschiedenen Arten von Dingen. 297 00:16:27,590 --> 00:16:31,040 Natürlich könnten wir denken von-- Gleichstellung von numerischen Typen 298 00:16:31,040 --> 00:16:34,720 ist sehr einfach zu denken, aber was ist die Gleichstellung von Listen? 299 00:16:34,720 --> 00:16:37,610 Wie sieht es mit der Gleichstellung von Baum Bein Datenstrukturen? 300 00:16:37,610 --> 00:16:43,130 Und das ist alles möglich in Haskell wegen der Typklassen. 301 00:16:43,130 --> 00:16:48,000 >> Also, wenn Sie eine bestimmte Daten Typ-- definieren und hier handelt es sich um musikalische Tonhöhen. 302 00:16:48,000 --> 00:16:50,960 Wir sind endlich bis zu einem gewissen Computermusik. 303 00:16:50,960 --> 00:16:57,420 So haben wir C, Cis, und so weiter und so fort. 304 00:16:57,420 --> 00:17:01,080 Sie gehören zu einer Reihe von verschiedene Typklassen. 305 00:17:01,080 --> 00:17:03,510 EQ-- sie gehören zu den EQ-Typ-Klasse. 306 00:17:03,510 --> 00:17:06,780 Das heißt, sie zu unterstützen Gleichheit Operationen. 307 00:17:06,780 --> 00:17:12,650 Schauen Sie, ob man auswerten kann Abfolge der musikalischen Grundelemente 308 00:17:12,650 --> 00:17:15,400 ist die gleiche wie eine andere. 309 00:17:15,400 --> 00:17:17,280 >> Sie gehören zu den Ordnungs Klasse. 310 00:17:17,280 --> 00:17:19,479 Das heißt, es gibt eine Bestellung auf diese. 311 00:17:19,479 --> 00:17:27,670 D kommt nach C Cis kommt nach C als gut. 312 00:17:27,670 --> 00:17:29,840 Sie gehören zu der Klasse zeigen, was bedeutet, sie können 313 00:17:29,840 --> 00:17:33,000 zu einer Konsole oder Terminal ausgedruckt werden. 314 00:17:33,000 --> 00:17:36,090 Sie gehören zu den Klasse aufgezählt, die 315 00:17:36,090 --> 00:17:39,770 bedeutet, dass, obwohl Das sind Zeichen, 316 00:17:39,770 --> 00:17:45,340 sie eine zugrunde liegende numerische haben Darstellung ab 0 317 00:17:45,340 --> 00:17:48,960 und Abheben durch jedoch viele Dinge sind hier, 20 oder so, 318 00:17:48,960 --> 00:17:51,770 oder 30 oder 40, vielleicht. 319 00:17:51,770 --> 00:17:54,259 >> CONNOR HARRIS: Und wenn wir haben einen Datentyp 320 00:17:54,259 --> 00:17:57,050 dass derives-- mit diesem Stichwort "deriving--" eine bestimmte Art Klasse, 321 00:17:57,050 --> 00:18:01,160 es bedeutet, dass der Compiler versuchen, automatisch etwas zu konstruieren. 322 00:18:01,160 --> 00:18:05,120 Also vielleicht wirst du zu wollen, definieren eine Qualität unterschiedlich. 323 00:18:05,120 --> 00:18:09,450 Sie wollen definieren, Cis- als gleich D flat, zum Beispiel. 324 00:18:09,450 --> 00:18:11,560 Mit dieser Konstruktion Hier, glaube ich nicht Cis denken 325 00:18:11,560 --> 00:18:14,940 und D flat gleich sein werden, denn der Compiler automatisch 326 00:18:14,940 --> 00:18:19,670 sagen alle verschiedenen möglichen Wert unterscheidet sich von jedem anderen. 327 00:18:19,670 --> 00:18:22,930 >> So ist es möglich, zu überschreiben die Standardimplementierungen 328 00:18:22,930 --> 00:18:25,730 diese Arten von Klassen. 329 00:18:25,730 --> 00:18:28,640 Auch bei der Referenz wenn aussehen Sie darüber wissen willst. 330 00:18:28,640 --> 00:18:31,767 331 00:18:31,767 --> 00:18:33,600 STEPHEN Krewson: Und hier, eigentlich, diese werde 332 00:18:33,600 --> 00:18:36,930 hilfreich sein, wenn wir Code später. 333 00:18:36,930 --> 00:18:42,150 Wir sehen einige der Infixoperatoren zur sequentiellen Komposition, 334 00:18:42,150 --> 00:18:46,570 parallel Zusammensetzung usw. her, diese Vor-und Gleichheitszeichen 335 00:18:46,570 --> 00:18:48,620 umgeben durch Doppelpunkte. 336 00:18:48,620 --> 00:18:53,330 Das bedeutet, dass wir diese verschiedenen spielen Musik Primitiven nacheinander. 337 00:18:53,330 --> 00:18:54,590 Das ist, sequentielle Komposition. 338 00:18:54,590 --> 00:18:57,170 >> Oder wir können sie in zu spielen parallel zur gleichen Zeit. 339 00:18:57,170 --> 00:19:05,100 So kann ich einen musikalischen Wert haben, und dann wird diese gleich und Doppelpunkte, 340 00:19:05,100 --> 00:19:09,669 Infix parallel Zusammensetzung Betreiber, und spielt sie als eine Art von Akkord. 341 00:19:09,669 --> 00:19:11,460 Und wir werden zu bedienen dies, wenn wir kombinieren 342 00:19:11,460 --> 00:19:15,080 unsere Drum-Part mit unseren wenig Frere Jacques Song 343 00:19:15,080 --> 00:19:19,460 um diese beiden Sequenzen spielen Notenwerten gleichzeitig. 344 00:19:19,460 --> 00:19:24,520 345 00:19:24,520 --> 00:19:29,250 >> Currying ist-- Curry wurde zuletzt Name des Haskell Curry, der 346 00:19:29,250 --> 00:19:31,850 die Haskell Bild ist benannt nach. 347 00:19:31,850 --> 00:19:34,330 Und dies ermöglicht uns eine schöne Eleganz, wenn wir 348 00:19:34,330 --> 00:19:36,880 Schreiben all diese verschiedenen Funktionen oder Filter, die wir sind 349 00:19:36,880 --> 00:19:39,330 werde Mapping über unsere Listen sein. 350 00:19:39,330 --> 00:19:42,810 Funktion zweier arguments-- f x und Y- 351 00:19:42,810 --> 00:19:46,630 kann dargestellt werden als f von x zu y aufgetragen. 352 00:19:46,630 --> 00:19:49,800 Es ist also eine Funktion von ein Argument, das zurückkehrt 353 00:19:49,800 --> 00:19:51,240 Eine weitere Funktion eines Arguments. 354 00:19:51,240 --> 00:19:56,962 Dies bedeutet also, wir können eine Karte Funktion f von x über Liste von y ist. 355 00:19:56,962 --> 00:19:58,920 CONNOR HARRIS: Möchten Sie ein Beispiel dafür? 356 00:19:58,920 --> 00:19:59,836 STEPHEN Krewson: Ja. 357 00:19:59,836 --> 00:20:05,390 Ich habe ein Beispiel rechts hier von einige der Dinge, die wir schreiben. 358 00:20:05,390 --> 00:20:10,500 So replizieren 2-- gut, replizieren dauern wird, 359 00:20:10,500 --> 00:20:13,040 ein Wert, der ist, wie viele Mal etwas zu replizieren, 360 00:20:13,040 --> 00:20:16,690 und dann wird es eine value-- nehmen in der Regel eine Liste oder so etwas. 361 00:20:16,690 --> 00:20:23,450 So, hier sind wir Mapping replizieren 2 über eine andere Liste. 362 00:20:23,450 --> 00:20:27,440 >> Wenn wir also map replizieren 2, wenn wir replizieren 2 gelten 363 00:20:27,440 --> 00:20:31,890 auf das erste Element dieser list-- und das sind Listen von Musik phrases-- 364 00:20:31,890 --> 00:20:37,650 werden zwei zu produzieren "Sie sleeping--" so werden Sie schlafen, werden Sie schlafen. 365 00:20:37,650 --> 00:20:40,040 So, jetzt haben wir zwei. 366 00:20:40,040 --> 00:20:42,570 Aber Replikation dauert zwei Argumente, sondern weil wir sind 367 00:20:42,570 --> 00:20:47,100 currying und dann Zuordnung, Wir können Replikat 2 stellen 368 00:20:47,100 --> 00:20:52,310 As mit als Funktion zurückgegeben einem argument-- nur replizierende zweimal. 369 00:20:52,310 --> 00:20:57,010 Und dann werden wir die Anwendung, die jedem Element dieser Liste von Phrasen. 370 00:20:57,010 --> 00:21:01,900 >> Und concat ist ein Haskell Betrieb zum Abflachen einer Liste. 371 00:21:01,900 --> 00:21:04,400 Weil Replikat 2 Willen produzieren eine Liste von Listen. 372 00:21:04,400 --> 00:21:06,660 Und das ist hier, diese Zwischenform. 373 00:21:06,660 --> 00:21:10,365 Und so ist, dann wir können concat oder flach, dass zweimal. 374 00:21:10,365 --> 00:21:12,240 CONNOR HARRIS: Eine einfachere Beispiel currying, 375 00:21:12,240 --> 00:21:15,323 wenn Sie like-- mir vorstellen, f ist nur ein Multiplikationsfunktion, die zwei Takes 376 00:21:15,323 --> 00:21:16,840 Argumente und ihr Produkt zurückgibt. 377 00:21:16,840 --> 00:21:19,320 Also, wenn Sie ein F haben 4 5, es ist 20. 378 00:21:19,320 --> 00:21:22,670 Aber Sie dies als denken können also-- Sie eine Funktion f 4 haben 379 00:21:22,670 --> 00:21:25,560 , dass ein Argument und kehrt viermal diese argument-- gerade 380 00:21:25,560 --> 00:21:27,870 Teil Anwendung, nur ein Argument 4. 381 00:21:27,870 --> 00:21:31,182 Und wenn Sie f von 4 füttern 5, das wird Ihnen 20. 382 00:21:31,182 --> 00:21:32,890 Und das ist eine einfachere Beispiel currying. 383 00:21:32,890 --> 00:21:34,473 Es ist normalerweise eine der Lehrbuch Einsen. 384 00:21:34,473 --> 00:21:38,860 385 00:21:38,860 --> 00:21:42,110 >> STEPHEN Krewson: Lambda Ausdrücke oder anonyme Funktionen 386 00:21:42,110 --> 00:21:47,330 sind ein weiteres Markenzeichen Haskell. 387 00:21:47,330 --> 00:21:51,242 Also, wenn wir brauchen zu schüren ein kleine Funktion Leben replizieren, 388 00:21:51,242 --> 00:21:52,950 aber sagen, dass es nicht in die Standardbibliothek, 389 00:21:52,950 --> 00:21:56,150 können wir ein Syntax verwenden ähnlich der folgenden. 390 00:21:56,150 --> 00:21:58,730 Und wir werden über diese Brise. 391 00:21:58,730 --> 00:22:02,160 Eine Sache, du wirst eine Menge in den Stuhl Drum Machine ist wir machen Anrufe 392 00:22:02,160 --> 00:22:05,790 In den so genannten Filter, der wie zuvor, 393 00:22:05,790 --> 00:22:08,185 ist eine Abbildung einer Funktion über eine Liste, ist aber 394 00:22:08,185 --> 00:22:10,260 eine Abbildung einer Booleschen Funktion. 395 00:22:10,260 --> 00:22:13,390 >> So haben wir hier ein Beispiel der eine ein anonym 396 00:22:13,390 --> 00:22:19,150 definierte Boolesche Funktion, dauert nur ein paar Werte. 397 00:22:19,150 --> 00:22:22,990 Dies ist streng genommen nicht um eine anonyme Funktion. 398 00:22:22,990 --> 00:22:25,850 Aber es ist zu definieren mit dass Syntax für Kürze, 399 00:22:25,850 --> 00:22:28,007 und dies dauert nur x-Modul N- 400 00:22:28,007 --> 00:22:28,840 CONNOR HARRIS: Ja. 401 00:22:28,840 --> 00:22:31,330 Also f eine Funktion zwei Argumente n und p 402 00:22:31,330 --> 00:22:35,440 , dass eine Funktion, die selbst ist zurück eine Funktion von einem vor, nämlich x. 403 00:22:35,440 --> 00:22:38,815 404 00:22:38,815 --> 00:22:40,690 STEPHEN Krewson: I genannten Infixoperatoren. 405 00:22:40,690 --> 00:22:42,642 Was sind Infixoperatoren? 406 00:22:42,642 --> 00:22:45,710 Nun, Infixoperatoren die normale Weise, die wir repräsentieren Operationen, 407 00:22:45,710 --> 00:22:49,910 sagen, in mathematics-- 2 plus 2 anstelle des Betreibers sowie 408 00:22:49,910 --> 00:22:51,202 und dann zwei Argumente 2 und 2. 409 00:22:51,202 --> 00:22:53,701 CONNOR HARRIS: Es heißt Umgekehrte Polnische Notation, das ist, 410 00:22:53,701 --> 00:22:55,330 ein Begriff, ich bezweifle, dass jemand von euch wissen würde. 411 00:22:55,330 --> 00:22:56,288 >> STEPHEN Krewson: Richtig. 412 00:22:56,288 --> 00:22:58,290 Umgekehrte Polnische Notation oder Präfix. 413 00:22:58,290 --> 00:23:01,412 Aber Haskell beschlossen, benutzen Infixoperatoren. 414 00:23:01,412 --> 00:23:03,120 Das sind also einige der die benutzerdefinierten diejenigen, 415 00:23:03,120 --> 00:23:07,770 werden für die definierte Euterpea DSCL in Haskell. 416 00:23:07,770 --> 00:23:10,730 Das war also sequentiellen Komposition. 417 00:23:10,730 --> 00:23:16,340 Dies war parallel Zusammensetzung, und das wurde Abschneiden parallel Komposition. 418 00:23:16,340 --> 00:23:18,710 Und wir müssen, dass mit unseren Drum-Machine, 419 00:23:18,710 --> 00:23:22,640 weil wir die letzte verwenden Betreiber in diesem kleinen Tupel gibt 420 00:23:22,640 --> 00:23:26,330 um die Drum-Machine zusammen spielen Mit unseren Frere Jacques Lied. 421 00:23:26,330 --> 00:23:28,650 Und unsere Drum-Machine ist gehen unendlich zu sein. 422 00:23:28,650 --> 00:23:30,920 Er spielt einfach immer. 423 00:23:30,920 --> 00:23:32,692 Aber die Frere Jacques Song nicht. 424 00:23:32,692 --> 00:23:33,510 Es ist nicht so lang. 425 00:23:33,510 --> 00:23:36,610 Es ist nur ein paar Bars. 426 00:23:36,610 --> 00:23:43,030 Also brauchen wir, um die Trommel Maschine zu stoppen Sobald die kürzere musikalischen Wert kommt 427 00:23:43,030 --> 00:23:43,700 zu einem Ende. 428 00:23:43,700 --> 00:23:46,980 Und das Infix Betreiber ist super hilfsbereit, dass. 429 00:23:46,980 --> 00:23:50,090 >> Und Infix-Notation wie Das ist ganz nett, 430 00:23:50,090 --> 00:23:57,095 denn, Sie haben eine Funktion wie haben Zitat, das die Ganzzahl-Division gibt 431 00:23:57,095 --> 00:24:01,010 von x durch etwas else-- sorry, dass sein sollte a und b. 432 00:24:01,010 --> 00:24:04,740 Man könnte es als Zitat von b zu schreiben. 433 00:24:04,740 --> 00:24:09,670 Also, wenn Sie put-- Element ein weiteres Beispiel. 434 00:24:09,670 --> 00:24:14,730 x Element in irgendeiner Liste, wenn du es in Backticks, können Sie es verwenden. 435 00:24:14,730 --> 00:24:20,400 Auch wenn es kein Symbol wie plus oder minus oder Zeiten, 436 00:24:20,400 --> 00:24:24,630 können Sie den Namen eines verwenden Funktion wie die in Backticks 437 00:24:24,630 --> 00:24:27,045 als Infix-Operator, was ziemlich cool ist. 438 00:24:27,045 --> 00:24:29,670 CONNOR HARRIS: Wiederum ist dies alles nur syntaktischer Zucker, wirklich. 439 00:24:29,670 --> 00:24:32,310 Es beeinflusst nicht den Kern der Sprache. 440 00:24:32,310 --> 00:24:37,440 >> STEPHEN Krewson: So sehen wir hier für die letzten Satz unserer Frere Jacques Song, 441 00:24:37,440 --> 00:24:45,740 Ich einige kleine Akkorde oder Drittel über die parallele Komposition 442 00:24:45,740 --> 00:24:46,240 Operator. 443 00:24:46,240 --> 00:24:50,680 444 00:24:50,680 --> 00:24:54,950 Dies ist eine andere Art zu sagen, einige von dem, was wir gerade gesagt. 445 00:24:54,950 --> 00:24:59,986 So können Sie Funktionen zuordnen von einem Streit über Listen. 446 00:24:59,986 --> 00:25:02,860 CONNOR HARRIS: Wieder Referenzen für Haskell-- Einführungslehrbücher 447 00:25:02,860 --> 00:25:04,680 wird all dies haben in ihm. 448 00:25:04,680 --> 00:25:07,790 >> STEPHEN Krewson: Also hier ist ein hübsches Schlüssel Zeile des Step-Sequenzer 449 00:25:07,790 --> 00:25:12,820 Wir werden einen Blick auf mit zu nehmen eine Liste Verständnis. 450 00:25:12,820 --> 00:25:17,810 Und wir sehen hier, dass Element in festBetreiber zurück Anführungszeichen. 451 00:25:17,810 --> 00:25:23,030 Also, wenn x ein Element von der Liste der x ist, dann werden wir perc Funktionen aufrufen. 452 00:25:23,030 --> 00:25:25,100 So perc ist nur ein Schlagfunktion. 453 00:25:25,100 --> 00:25:30,200 Es dauert einige Wert p, der ist Teil der beschränkten Menge aller 454 00:25:30,200 --> 00:25:35,310 die verschiedenen Percussion-Sounds dass wir in einem vorherigen Folie sah, 455 00:25:35,310 --> 00:25:38,840 und dann gibt es, dass Dauer einer Viertelnote. 456 00:25:38,840 --> 00:25:43,190 Sonst gibt es es eine QNR und QNR ist nur eine Viertelnote Ruhe. 457 00:25:43,190 --> 00:25:44,970 >> Das ist also Aufbau etwas Schönes. 458 00:25:44,970 --> 00:25:52,110 Wir haben eine Liste von Elementen, und wir werden Schleife über einige Liste von einer 459 00:25:52,110 --> 00:25:54,540 auf den max Wert unserer Step-Sequenzer. 460 00:25:54,540 --> 00:25:58,290 Und wenn wir an einem bestimmten i bist diese Liste von einem bis zu dem Maximalwert, 461 00:25:58,290 --> 00:26:02,970 wenn das i ist ein Mitglied dieser Satz in dieser Funktion erstellt, 462 00:26:02,970 --> 00:26:06,040 gut, dann biegen wir es in ein Perkussions. 463 00:26:06,040 --> 00:26:10,960 Ansonsten haben wir eine Pause, spielen nur die ist zu sagen, wir haben nur schweigen. 464 00:26:10,960 --> 00:26:16,050 Und wir hier, dass in sehen können Diese Liste Verständnis Syntax, 465 00:26:16,050 --> 00:26:20,030 x durch dieses besiedelt Liste konstruiert ein 466 00:26:20,030 --> 00:26:22,462 zum globalen Größe des Sequenzers. 467 00:26:22,462 --> 00:26:23,295 CONNOR HARRIS: Ja. 468 00:26:23,295 --> 00:26:26,340 Die grundlegende Syntax für Liste Leseverständnis ist 469 00:26:26,340 --> 00:26:30,810 Halterung, Wert mit einige Variablen, Bar, 470 00:26:30,810 --> 00:26:34,260 mögliche Werte der Variablen selbst, geschlossen Halterung. 471 00:26:34,260 --> 00:26:38,545 Und wenn Sie gesetzt Bauer Notation gemacht in jeder Art von Mathematik-Klasse, 472 00:26:38,545 --> 00:26:45,999 Sie könnte 2n derart festgelegt haben dass n oder n in z. 473 00:26:45,999 --> 00:26:48,290 Ähnliche thing-- dieser Notation ist gemeint, suggestive sein 474 00:26:48,290 --> 00:26:49,630 dieser mathematischen Notation. 475 00:26:49,630 --> 00:26:51,880 STEPHEN Krewson: Und du kannst gelten mehrere Prädikate 476 00:26:51,880 --> 00:26:56,250 und mehrere Filter in einer Liste Verstehen, was sehr nett ist. 477 00:26:56,250 --> 00:27:01,800 Algebraische types-- wir nicht verweilen lange hier. 478 00:27:01,800 --> 00:27:04,840 Es ist keine gute Idee in Haskell oder eine gute, klar Vorstellung 479 00:27:04,840 --> 00:27:10,720 wie zu nehmen, sagen wir, einen Standard Parameter an eine Funktion oder so etwas. 480 00:27:10,720 --> 00:27:13,370 In Python ist dies ganz einfach. 481 00:27:13,370 --> 00:27:18,460 Sie können einfach sagen, mit gleich auf die Deklaration der Funktion, 482 00:27:18,460 --> 00:27:21,420 ein Standardwert in Falls keiner zugeführt wird. 483 00:27:21,420 --> 00:27:27,010 >> In Haskell, könnten Sie vielleicht benutzen vielleicht die vielleicht geben, 484 00:27:27,010 --> 00:27:32,190 was braucht entweder gar nichts oder ein Wert vom Typ gerade ein. 485 00:27:32,190 --> 00:27:38,630 So nutzen wir diese in der Drum-Machine um uns zu erlauben optional Volumen zu geben 486 00:27:38,630 --> 00:27:40,730 Parameter zu jedem der Trommelteile. 487 00:27:40,730 --> 00:27:46,160 488 00:27:46,160 --> 00:27:54,680 So dass gibt uns eine Möglichkeit, mit EQ oder ein Volumen auf einem bestimmten Kanal. 489 00:27:54,680 --> 00:27:56,440 >> CONNOR HARRIS: In andere Haskell Beispiele 490 00:27:56,440 --> 00:28:00,450 Sie könnte vielleicht für benutzt sehen Funktionen, die ausfallen könnten. 491 00:28:00,450 --> 00:28:03,470 Dies ist ein allgemeines. 492 00:28:03,470 --> 00:28:07,010 >> STEPHEN Krewson: Und Sie liefern kann eine Art von Fehlermeldung als Standard. 493 00:28:07,010 --> 00:28:11,020 Und das ist besonders praktisch, wenn Sie tun das I / O in Haskell. 494 00:28:11,020 --> 00:28:12,044 Das kann Tricks. 495 00:28:12,044 --> 00:28:13,960 CONNOR HARRIS: oder für eine ähnliches Beispiel, denken 496 00:28:13,960 --> 00:28:17,460 einer Funktion, die Teilung beinhaltet eines Parameters, der 0 sein kann. 497 00:28:17,460 --> 00:28:20,020 Und das funktionieren könnte Rück vielleicht was auch immer. 498 00:28:20,020 --> 00:28:22,802 Also, wenn es keine Division durch 0, es wird nur, was auch immer zurück. 499 00:28:22,802 --> 00:28:25,010 Und wenn es eine Division durch 0, wird nichts zurück 500 00:28:25,010 --> 00:28:26,910 als Mittel zur Signalisierung des Fehlers. 501 00:28:26,910 --> 00:28:30,330 Weil einer Folge Haskell ist sehr strikte Typisierung 502 00:28:30,330 --> 00:28:34,100 ist, dass es keine real-- Ausnahmen sind umständlich, im Grunde, 503 00:28:34,100 --> 00:28:36,160 Fehlerbehandlung ist umständlich. 504 00:28:36,160 --> 00:28:39,440 Und dies ist eine sehr gemeinsamer Weg, es zu tun. 505 00:28:39,440 --> 00:28:42,990 >> STEPHEN Krewson: So, jetzt kommen wir an einen anderen knifflige Sache 506 00:28:42,990 --> 00:28:49,160 über Haskell, das Muster ist Matching und Funktionsdefinitionen. 507 00:28:49,160 --> 00:28:53,390 Zeigte ich Ihnen in der letzten Folie der Erklärung der Schrittkette 508 00:28:53,390 --> 00:28:58,170 Funktion, die einen vielleicht Wert nahm, dann ein int, dann eine Liste von Ganzzahlen, 509 00:28:58,170 --> 00:29:03,850 gibt dann eine Folge von Musik-Werte gibt kommentierten 510 00:29:03,850 --> 00:29:05,375 sowohl mit Tonhöhe und Lautstärke. 511 00:29:05,375 --> 00:29:08,030 512 00:29:08,030 --> 00:29:11,820 >> Also diese drei Argumente kann Muster in folgender Weise aufeinander abgestimmt. 513 00:29:11,820 --> 00:29:16,660 Und wir wollen immer sicher sein, zuerst tun einen Basisfall oder Ausgangsfall. 514 00:29:16,660 --> 00:29:19,690 Und diese Unterstriche kann nur interpretiert werden, 515 00:29:19,690 --> 00:29:22,340 um einen Wert, dass es meine. 516 00:29:22,340 --> 00:29:26,580 Wenn wir also einen Anruf mit Schritt-Sequenz mit einigen Wert, einen anderen Wert, 517 00:29:26,580 --> 00:29:32,210 und dann wird die leere Liste, was wir wollen, Rückkehr ist nur Stille, eine Ruhe 0. 518 00:29:32,210 --> 00:29:35,110 >> Und anstatt dass wobei eine leere Liste oder 0, 519 00:29:35,110 --> 00:29:38,150 es ist ein Rest 0, weil wir Umgang mit der Musik-Typ, 520 00:29:38,150 --> 00:29:43,230 und die leere Liste der Musik Typ ist nur ein Rest ohne Dauer. 521 00:29:43,230 --> 00:29:45,680 Es ist keine Musik. 522 00:29:45,680 --> 00:29:51,460 Und dann sehen wir, wenn wir einen Schritt erhalten Sequenz mit einer V für Volumen Argument, 523 00:29:51,460 --> 00:29:57,290 p für vorsorglich Instrument Argument und dann eine Liste von x ist. 524 00:29:57,290 --> 00:29:58,360 >> Dann tun wir ein paar Sachen. 525 00:29:58,360 --> 00:30:01,290 Insbesondere wenden wir Diese Liste Verständnis, 526 00:30:01,290 --> 00:30:05,700 und wir führen einige Operationen an der vielleicht Wert 527 00:30:05,700 --> 00:30:10,050 um es in einen numerischen Wert, so dass drehen es könnte dann aufgezählten verwendet werden und 528 00:30:10,050 --> 00:30:12,300 um das Gerät auszuwählen. 529 00:30:12,300 --> 00:30:16,730 Wiederum ist dies ein wenig bit absichtlich inconcise 530 00:30:16,730 --> 00:30:20,580 nur um alle seltsame Dinge zeigen Sie in Haskell, wie Sie tun können 531 00:30:20,580 --> 00:30:23,170 Schauen Sie sich auf Ihrem eigenen Zeit. 532 00:30:23,170 --> 00:30:23,802 >> Gut. 533 00:30:23,802 --> 00:30:26,010 Also werden wir endlich zu tun, was wir vorgenommen haben, 534 00:30:26,010 --> 00:30:28,820 was machen einige Computermusik. 535 00:30:28,820 --> 00:30:32,250 Also werden wir versuchen, machen den Frere Jacques Lied. 536 00:30:32,250 --> 00:30:35,220 Es gibt also, wie viele Sätze in Frere Jacques? 537 00:30:35,220 --> 00:30:38,790 538 00:30:38,790 --> 00:30:39,680 Vier. 539 00:30:39,680 --> 00:30:40,460 Groß. 540 00:30:40,460 --> 00:30:42,490 Und was schön ist, dass sie alle wiederholt 541 00:30:42,490 --> 00:30:46,990 dieselbe Menge an Zeit, die zwei ist. 542 00:30:46,990 --> 00:30:50,730 >> So haben wir vier Sätze jeweils zweimal wiederholt. 543 00:30:50,730 --> 00:30:53,590 Insbesondere sind sie in einer Runde. 544 00:30:53,590 --> 00:30:55,340 Und es gibt viele, viele Möglichkeiten zur Implementierung von 545 00:30:55,340 --> 00:30:57,520 ein runder, die Spaß zu tun sein könnte. 546 00:30:57,520 --> 00:31:00,260 Ich habe es in einem getan ziemlich einfache Weise hier ist, 547 00:31:00,260 --> 00:31:05,760 das ist genau das, um die Linie construct-- Funktion nimmt eine Liste von Musikwerte 548 00:31:05,760 --> 00:31:10,390 und wandelt es in sequentielle Komposition indem diese sequentielle Komposition 549 00:31:10,390 --> 00:31:13,000 Operator. 550 00:31:13,000 --> 00:31:19,540 >> Und dann habe ich die verschiedenen Teile zu verzögern indem er sie mit einer Ruhe beginnen. 551 00:31:19,540 --> 00:31:22,770 So beginne ich mit einem Rest der beiden Maßnahmen, und dann eine Pause von vier Maßnahmen, 552 00:31:22,770 --> 00:31:26,160 und dann eine Pause von sechs Maßnahmen, und dann wird das Rund 553 00:31:26,160 --> 00:31:32,290 funktioniert, wie wir alle wissen, das Lied. 554 00:31:32,290 --> 00:31:37,180 Wir sehen zwei Anmerkungen oder Modifikationen der Musikwerte 555 00:31:37,180 --> 00:31:43,150 die in dieser sequentiellen enthalten sind Anordnung der Musik-Elemente. 556 00:31:43,150 --> 00:31:44,810 Wir haben ein Add Volumen. 557 00:31:44,810 --> 00:31:48,960 Dies ist eine Funktion, um zu kommentieren Musik mit einem bestimmten Volumen. 558 00:31:48,960 --> 00:31:51,320 Dies ist ein gutes Beispiel ein MIDI-Signal Lauf 559 00:31:51,320 --> 00:31:57,510 0-127, die sieben Bits Informationen, die getragen werden kann. 560 00:31:57,510 --> 00:32:00,650 >> Und then-- wir es sahen sehr kurz, aber die allgemeine MIDI 561 00:32:00,650 --> 00:32:02,310 Liste von verschiedenen Instrumenten. 562 00:32:02,310 --> 00:32:04,450 Und es gibt nicht eine ganze Menge von ihnen. 563 00:32:04,450 --> 00:32:11,230 Wenn Sie eine digitale Audio-Workstation zu verwenden, wie Ableton Live oder Pro Tools, 564 00:32:11,230 --> 00:32:17,560 Es ist ein unglaublich breitere Palette von Synthesizern und VST-Instrumente. 565 00:32:17,560 --> 00:32:21,510 Aber nur die MIDI-Standard hat ein paar oder mehrere Dutzend. 566 00:32:21,510 --> 00:32:22,799 Und einige von ihnen sind lustig. 567 00:32:22,799 --> 00:32:25,840 Ich dachte, es würde Spaß machen, wenn wir gespielt das Instrument das MIDI-Instrument 568 00:32:25,840 --> 00:32:30,550 Hubschrauber, und dann das nächsten Wege durch die Runde, 569 00:32:30,550 --> 00:32:37,980 wir haben ein Pad Synthesizer, und dann der dies abgedroschen Blei Rechteck synth, 570 00:32:37,980 --> 00:32:44,240 und dann äußern Schlamm, der eine etwas undeutlich auf mein schlechtes MIDI 571 00:32:44,240 --> 00:32:46,410 Synthesizer, aber sie OK. 572 00:32:46,410 --> 00:32:50,030 >> Und dann sehen wir dieses let und in der Syntax von Haskell, 573 00:32:50,030 --> 00:32:54,030 und dann spielen wir diese Teile zusammen 574 00:32:54,030 --> 00:32:56,265 mit der parallelen Komposition Betreiber. 575 00:32:56,265 --> 00:33:00,260 576 00:33:00,260 --> 00:33:02,296 Und wir könnten wahrscheinlich zeigen einige dieser. 577 00:33:02,296 --> 00:33:07,674 578 00:33:07,674 --> 00:33:08,340 Hier ist der Code. 579 00:33:08,340 --> 00:33:14,960 Und Sie können in C sehen, es würde sein ein viel Räuspern und Einstellung 580 00:33:14,960 --> 00:33:19,760 der Tisch-Code, bevor Sie könnte Musik wie diese machen. 581 00:33:19,760 --> 00:33:22,080 Oder jede andere Programmiersprache Sprache, würden Sie wahrscheinlich 582 00:33:22,080 --> 00:33:27,210 müssen mit einer Art interagieren Bibliothek oder API und setzen alles auf, 583 00:33:27,210 --> 00:33:28,725 und dann müssten Sie, um aufzuräumen. 584 00:33:28,725 --> 00:33:33,810 Aber hier in Haskell ist, denke ich, sobald Sie den Dreh raus zu bekommen von ihm, unglaublich 585 00:33:33,810 --> 00:33:35,770 lesbar und sehr ausdrucksvoll. 586 00:33:35,770 --> 00:33:38,930 587 00:33:38,930 --> 00:33:43,240 So gibt es die Umsetzung von Frere Jacques. 588 00:33:43,240 --> 00:33:43,740 Gut. 589 00:33:43,740 --> 00:33:47,557 Jetzt Percussion wollen wir, und das ist ein bisschen unordentlicher. 590 00:33:47,557 --> 00:33:49,015 Werfen wir also einen Blick auf die Folien. 591 00:33:49,015 --> 00:33:56,880 592 00:33:56,880 --> 00:34:00,540 Die große Idee ist, zu machen eine Reihe von Listen oder von Teilen. 593 00:34:00,540 --> 00:34:04,140 Aus diesen roll-in Maschinen gibt waren in der Regel etwa vielleicht acht 594 00:34:04,140 --> 00:34:08,670 bis 10 Rhythmus- oder Percussion-Parts. 595 00:34:08,670 --> 00:34:10,159 Und verwenden Sie dann eine Reihe von Techniken. 596 00:34:10,159 --> 00:34:14,889 Und wir these-- mit gesprochen haben Falten, Filter, Lambda-Funktionen, 597 00:34:14,889 --> 00:34:19,429 Überlisten auf Werte erzeugen kartiert in einem gewissen Bereich von 1 bis r, r 16, 598 00:34:19,429 --> 00:34:20,699 oder 32 Schritte in der Ablaufkette. 599 00:34:20,699 --> 00:34:23,810 600 00:34:23,810 --> 00:34:29,920 >> Und dann, wenn es einen Wert in dieser Liste als wir durch den Sequenzer laufen, 601 00:34:29,920 --> 00:34:34,190 , die durch sie immer und über, stellt sich in diesem Sinne, 602 00:34:34,190 --> 00:34:36,060 und dass die Probe ausgelöst wird. 603 00:34:36,060 --> 00:34:42,810 604 00:34:42,810 --> 00:34:47,110 Hier sind all die verschiedenen Möglichkeiten, seltsame Ich kam mit, um Notizen zu generieren. 605 00:34:47,110 --> 00:34:48,940 Versuchen Sie es auf Ihrer eigenen halb Summe. 606 00:34:48,940 --> 00:34:50,360 Es wird cool klingen. 607 00:34:50,360 --> 00:34:53,066 608 00:34:53,066 --> 00:34:54,690 Zeit erlaubt, werden wir durch diese gehen. 609 00:34:54,690 --> 00:34:59,200 Aber für jetzt, ich denke, wir sollten Demo, was wir haben. 610 00:34:59,200 --> 00:35:01,380 Hoffen wir, dass dies geht auf OK. 611 00:35:01,380 --> 00:35:02,670 >> Das ist also GHCI. 612 00:35:02,670 --> 00:35:06,580 613 00:35:06,580 --> 00:35:09,121 Und wir werden eine Datei zu laden Ich habe angerufen song.lhs, 614 00:35:09,121 --> 00:35:10,620 das ist die Datei, die ich Ihnen gezeigt, nur. 615 00:35:10,620 --> 00:35:11,470 OK, groß. 616 00:35:11,470 --> 00:35:15,010 Als Connor sagte, es kompiliert, wird geprüft Typ, 617 00:35:15,010 --> 00:35:18,380 so kann ich viel leichter zu atmen. 618 00:35:18,380 --> 00:35:20,010 Es wird nicht auf mich zu sprengen. 619 00:35:20,010 --> 00:35:22,720 >> Ich wollte Sie etwas Nützliches zu zeigen. 620 00:35:22,720 --> 00:35:25,900 Sie können sehen, dass ein Modul geladen genannte 50. 621 00:35:25,900 --> 00:35:28,240 Sie können dieses Modul zu durchsuchen. 622 00:35:28,240 --> 00:35:32,092 Und das ist so schön, über doing-- vielleicht, was 623 00:35:32,092 --> 00:35:34,550 Sie tun in Haskell nicht genannte Software-Entwicklung, 624 00:35:34,550 --> 00:35:36,980 aber Sie eine Menge tun können, fun stuff auf eigene Faust. 625 00:35:36,980 --> 00:35:42,410 Und der Workflow ist wirklich nett, wie im Vergleich zu vielen anderen Sprachen, 626 00:35:42,410 --> 00:35:45,872 weil Sie in einem wirklich sehen können, erkennen, was vor sich geht. 627 00:35:45,872 --> 00:35:47,830 So sehen wir, dass wir alle diese Sätze, die 628 00:35:47,830 --> 00:35:53,760 sind Listen von Musikstandplätze, und dann werden wir bauen diese bis in etwas größeren, 629 00:35:53,760 --> 00:35:55,220 Das ist ein Musik-Lied. 630 00:35:55,220 --> 00:35:58,450 Es ist eine musikalische Einheit. 631 00:35:58,450 --> 00:36:05,545 Und dann können wir das alles zu spielen mit einer Funktion namens spielen Musik. 632 00:36:05,545 --> 00:36:09,040 Sie können, dass hier unten zu sehen. 633 00:36:09,040 --> 00:36:11,310 Das ist einfach nur spielen. 634 00:36:11,310 --> 00:36:15,040 >> Ich sollte sagen-- ich nicht darüber reden Diese Dollar-Zeichen, die überall ist. 635 00:36:15,040 --> 00:36:17,980 Dollar-Zeichen ist ein weiterer Infix-Operator. 636 00:36:17,980 --> 00:36:22,500 Aber es hat die niedrigste Priorität hat von jedem Betreiber, die effektiv 637 00:36:22,500 --> 00:36:24,960 bedeutet, dass alles, was auf die links von der Dollarzeichen 638 00:36:24,960 --> 00:36:28,460 und das Recht der Dollar-Zeichen, wir werden, bevor es ausgewertet zu werden. 639 00:36:28,460 --> 00:36:31,430 Also ist es ein bisschen wie ein anderer Weg, indem Klammern. 640 00:36:31,430 --> 00:36:33,980 641 00:36:33,980 --> 00:36:36,220 >> CONNOR HARRIS: Es ist im Grunde Funktion Komposition. 642 00:36:36,220 --> 00:36:40,026 Und es stellt sicher, dass Sie nicht, wenn have-- Sie funktioniert auf jeder Seite oder infix 643 00:36:40,026 --> 00:36:42,900 Betreiber auf beiden Seiten, werden sie nicht assoziieren über sie und geben Ihnen 644 00:36:42,900 --> 00:36:46,030 unerwartete Ergebnisse. 645 00:36:46,030 --> 00:36:49,790 >> STEPHEN Krewson: Also wir can-- mit, dass, können wir rufen. 646 00:36:49,790 --> 00:36:51,415 Zuerst werden wir es ohne Schlagzeug zu spielen. 647 00:36:51,415 --> 00:37:00,330 648 00:37:00,330 --> 00:37:03,170 Das ist der Hubschrauber, die MIDI-Hubschrauber. 649 00:37:03,170 --> 00:37:05,495 >> [Musikwiedergabe] 650 00:37:05,495 --> 00:37:08,525 651 00:37:08,525 --> 00:37:09,525 Da ist der Rechteckwelle. 652 00:37:09,525 --> 00:37:24,520 653 00:37:24,520 --> 00:37:25,490 Die Stimme sickern. 654 00:37:25,490 --> 00:37:27,630 Und man kann wirklich wild gehen mit diesem. 655 00:37:27,630 --> 00:37:30,872 Ich nahm eine ziemlich einfache, weil ich wusste, ich sollte nicht abbeißen 656 00:37:30,872 --> 00:37:31,830 mehr als ich kauen konnte. 657 00:37:31,830 --> 00:37:36,460 Nur halten sie ziemlich einfach um die wichtigsten Ideen zu zeigen. 658 00:37:36,460 --> 00:37:39,952 Aber dann dachte ich, wir haben haben einige Trommeln diesem hinzufügen. 659 00:37:39,952 --> 00:37:41,910 Gerade weil es sich um ein wenig undurchdringlich, 660 00:37:41,910 --> 00:37:45,790 und ich habe nicht mit dem Name des Drum-Parts, 661 00:37:45,790 --> 00:37:49,490 I zugeordnet them--, weil sie Teil dieser Aufzählungsklasse, 662 00:37:49,490 --> 00:37:51,500 Ich kartiert sie ints. 663 00:37:51,500 --> 00:37:53,120 Man ist wie ein Bass-Drum. 664 00:37:53,120 --> 00:37:54,370 Zero ist als gut. 665 00:37:54,370 --> 00:37:56,000 Seven ist ein Hi-Hat. 666 00:37:56,000 --> 00:38:00,920 Und unten in hier, wo die Funktionen bekommen ein wenig mehr zufällig, 667 00:38:00,920 --> 00:38:02,100 Diese sind wie Congas. 668 00:38:02,100 --> 00:38:08,360 >> Also, wenn Sie denken, vielleicht ein about-- Spaßweise, einen Drumcomputer zu implementieren 669 00:38:08,360 --> 00:38:12,830 ist sehr ordentlich zu bedienen Muster auf Bass-Drum. 670 00:38:12,830 --> 00:38:17,640 So zum Beispiel, auf das Filtern über die Liste mit allem, was zurückgibt 671 00:38:17,640 --> 00:38:20,590 a 1, wenn es Modul 04 übernommen. 672 00:38:20,590 --> 00:38:27,190 So bekomme ich 1, 5, 9, 13, so dass diese 17-- ist der erste Schlag jedes Taktes. 673 00:38:27,190 --> 00:38:32,860 >> Und dann ist dies das gleiche Sache verschoben über zwei Stufen. 674 00:38:32,860 --> 00:38:33,850 Also das ist die offbeat. 675 00:38:33,850 --> 00:38:37,480 Also das wäre so etwas wie einen hohen Hut. 676 00:38:37,480 --> 00:38:39,640 Und hier dann wieder, nach unten, es ist ein wenig zufällig, 677 00:38:39,640 --> 00:38:41,080 weil wir tun Congatrommeln. 678 00:38:41,080 --> 00:38:44,180 Und ich habe einige Maracas sich auch hier. 679 00:38:44,180 --> 00:38:50,280 >> So konnte ich spielen Drum Machine rufen, aber es würde ewig so weitergehen, 680 00:38:50,280 --> 00:38:53,700 und es könnte zu starten Grabbing up der gesamte Speicher in meinem System. 681 00:38:53,700 --> 00:38:57,090 Also werde ich diese Funktion aufrufen spielen Musik, die wie wir sehen werden, 682 00:38:57,090 --> 00:39:02,020 verwenden Sie das Abschneiden parallel Zusammensetzung in unserem kleinen Frere Jacques Song zu spielen 683 00:39:02,020 --> 00:39:04,200 zusammen mit diesem seltsamen Drum-Machine. 684 00:39:04,200 --> 00:39:06,190 Werfen wir also einen Blick. 685 00:39:06,190 --> 00:39:10,920 Und bitte Verbesserung auf meinem Anordnung aller Drum-Parts. 686 00:39:10,920 --> 00:39:13,375 Nicht meine Spezialität, aber ich hatten viel Spaß dabei. 687 00:39:13,375 --> 00:39:17,678 688 00:39:17,678 --> 00:39:20,654 >> [Musikwiedergabe] 689 00:39:20,654 --> 00:39:52,260 690 00:39:52,260 --> 00:39:56,980 >> Also selbstverständlich ist dies alles etwas nicht so viel Spaß 691 00:39:56,980 --> 00:40:01,100 wenn wir nicht konvertieren zu einem Ergebnis, so ist es vielleicht 692 00:40:01,100 --> 00:40:04,650 könnte interpretiert werden durch einen menschlichen Darsteller. 693 00:40:04,650 --> 00:40:06,535 Also werde ich es nicht ausführen Sie hier. 694 00:40:06,535 --> 00:40:07,910 Ich habe bereits die Dateien generiert. 695 00:40:07,910 --> 00:40:10,280 Sie können sehen, dass es eine dot LilyPond file-- und dies 696 00:40:10,280 --> 00:40:14,500 meine segue zu sein über Connor-- und ein Punkt MIDI-Datei, 697 00:40:14,500 --> 00:40:18,610 und ein Punkt PDF-Datei, die das, was ist LilyPond wird letztlich zu generieren. 698 00:40:18,610 --> 00:40:23,770 >> Aber das sind diese Skripte, und ich werde nur laufen sie mit ihren Hilfeoptionen. 699 00:40:23,770 --> 00:40:28,090 Wenn Sie diese zum Laufen zu bringen mit Euterpea, können Sie eine MIDI-Datei zu erzeugen. 700 00:40:28,090 --> 00:40:31,160 Und dann von der MIDI-Datei Mit diesem MIDI 2LY Programm, 701 00:40:31,160 --> 00:40:34,930 können Sie eine Lilie zu erzeugen Pond-Datei, und Sie 702 00:40:34,930 --> 00:40:37,974 können Sie eine PDF der Partitur zu erzeugen. 703 00:40:37,974 --> 00:40:39,390 Und wir sollten einen Blick auf diese zu nehmen. 704 00:40:39,390 --> 00:40:52,599 705 00:40:52,599 --> 00:40:55,140 So Connor wird wahrscheinlich zeigen Ihnen, wie Sie kommentieren das besser, 706 00:40:55,140 --> 00:41:02,570 aber dies ist Frere Jacques als von mir in Euterpea generiert. 707 00:41:02,570 --> 00:41:07,300 Es ist nur in C. Ich sollte herausgefunden haben herauszufinden, was das hacken es ist eigentlich in. 708 00:41:07,300 --> 00:41:11,090 Aber das ist die Pipeline für wie Sie, dass zu tun. 709 00:41:11,090 --> 00:41:12,950 Reden wir mehr über LilyPond. 710 00:41:12,950 --> 00:41:15,780 >> CONNOR HARRIS: OK Mal sehen. 711 00:41:15,780 --> 00:41:19,480 712 00:41:19,480 --> 00:41:21,419 Haben Sie erwähnen Erfahren Sie Haskell? 713 00:41:21,419 --> 00:41:22,460 STEPHEN Krewson: Oh ja. 714 00:41:22,460 --> 00:41:23,480 Schauen Sie Erfahren Sie Haskell. 715 00:41:23,480 --> 00:41:24,410 Es ist in den Ressourcen. 716 00:41:24,410 --> 00:41:26,830 Das ist, wie ich anfing, lernen, und es ist toll. 717 00:41:26,830 --> 00:41:27,580 Nicht dumm Lernen. 718 00:41:27,580 --> 00:41:28,829 >> CONNOR HARRIS: So ist es online. 719 00:41:28,829 --> 00:41:34,760 So ein Mann namens [unverständlich] learnyouahaskell.com, keine Leerzeichen. 720 00:41:34,760 --> 00:41:37,065 Grammatik ist krank. 721 00:41:37,065 --> 00:41:38,690 STEPHEN Krewson: Es ist veranschaulicht, auch. 722 00:41:38,690 --> 00:41:39,440 CONNOR HARRIS: Also, was ist LilyPond? 723 00:41:39,440 --> 00:41:42,480 Es ist eine deklarative Programmierung Sprache für Notensatz. 724 00:41:42,480 --> 00:41:45,480 So declarative-- möglich denken Sie an Dinge wie HTML, 725 00:41:45,480 --> 00:41:50,900 wo du nicht bist saying-- HTML sagt nicht, wie Web-Browser sollte 726 00:41:50,900 --> 00:41:52,180 Render-Seiten Schritt für Schritt. 727 00:41:52,180 --> 00:41:54,096 Es ist nur das sage ist eine Textbeschreibung 728 00:41:54,096 --> 00:41:56,100 von dem, was Sie wollen, dass die Seite aussehen soll. 729 00:41:56,100 --> 00:41:59,310 >> Und dann ist es auch ein Programm dass kompiliert diese Sprache, 730 00:41:59,310 --> 00:42:02,300 oder er seinen eingelesen und dann tatsächlich funktioniert die Schriftsatz für Sie, 731 00:42:02,300 --> 00:42:05,570 und es spuckt diese wunderbare aussehende PDF-Partituren. 732 00:42:05,570 --> 00:42:08,250 Sie können auch PNG-Format oder was auch immer. 733 00:42:08,250 --> 00:42:10,300 Eine gute Möglichkeit zu denken, dieser ist in Analogie 734 00:42:10,300 --> 00:42:16,620 ist, dass LaTeX ist so etwas wie LillyPond, sondern für ganz normale Schriftsatz. 735 00:42:16,620 --> 00:42:20,360 Also statt von-- es nicht WYSIWYG, was Sie See 736 00:42:20,360 --> 00:42:22,960 Was Sie erhalten, wie, sagen, Finale oder Sibelius, 737 00:42:22,960 --> 00:42:27,430 oder Microsoft Word, wo Sie geben Echtzeit und Entwurf Dinge in Echtzeit 738 00:42:27,430 --> 00:42:31,340 und Änderungen zu sehen augenblicklich. 739 00:42:31,340 --> 00:42:32,140 >> Es ist textbasiert. 740 00:42:32,140 --> 00:42:35,290 Sie müssen Ihre kompilieren Noten mit einem separaten Programm 741 00:42:35,290 --> 00:42:37,090 und raus PDFs später. 742 00:42:37,090 --> 00:42:43,320 Dies ist etwas weniger bequem für den Einsatz, wenn Sie 743 00:42:43,320 --> 00:42:46,520 versuchen, direkt schreiben in eine Partitur und du bist 744 00:42:46,520 --> 00:42:48,620 versuchen, auf den Computer zu komponieren. 745 00:42:48,620 --> 00:42:50,830 Aber es gibt viele Vorteile dafür. 746 00:42:50,830 --> 00:42:56,110 One, es sieht viel schöner, weil LillyPond kann tatsächlich 747 00:42:56,110 --> 00:42:58,210 die Zeit nehmen, zu tun Layout-Entscheidungen richtig, 748 00:42:58,210 --> 00:43:02,380 im Gegensatz zu Sibelius oder Finale, das haben kompromittiert Algorithmen so stellen 749 00:43:02,380 --> 00:43:05,020 dass sie angezeigt werden kann Dinge in Echtzeit. 750 00:43:05,020 --> 00:43:07,660 >> Also, warum ist LilyPond-- Computergrafik ist hart. 751 00:43:07,660 --> 00:43:10,535 Wenn Sie alles, was mit Musik zu tun und Sie zu schreiben, Partituren möchten, 752 00:43:10,535 --> 00:43:13,900 Sie wollen nicht zu schreiben alles selbst 753 00:43:13,900 --> 00:43:19,040 beginnend mit, wie man zeichnet Mitarbeiter und wie man Notizblöcke ziehen. 754 00:43:19,040 --> 00:43:21,020 Es ist sehr schwer. Es ist zuvor getan. 755 00:43:21,020 --> 00:43:22,170 Du bist in Ordnung. 756 00:43:22,170 --> 00:43:26,200 >> Wenn Sie Finale oder Sibelius verwenden möchten, die Dateiformate für die Dinge 757 00:43:26,200 --> 00:43:30,180 sind sehr kompliziert, und Sie können nicht wirklich nutzen sie programmatisch. 758 00:43:30,180 --> 00:43:35,020 Sie können sich mit Finale öffnen Sibelius und gehen Sie auf Datei, Exportieren als PDF Sie sich, 759 00:43:35,020 --> 00:43:37,600 aber man kann nicht wirklich rufen, daß aus einem Skript. 760 00:43:37,600 --> 00:43:40,440 LillyPond, können Sie anrufen aus diesen Skripten. 761 00:43:40,440 --> 00:43:44,397 Man könnte leicht zu iterieren Mit LaTeX LillyPond. 762 00:43:44,397 --> 00:43:47,230 Ich werde nicht so viel Zeit zu gehen in gerade dieser Technologien, 763 00:43:47,230 --> 00:43:48,321 aber sie existieren. 764 00:43:48,321 --> 00:43:50,070 Wenn Sie wollen, um zu suchen in eine LillyPond Buch 765 00:43:50,070 --> 00:43:53,760 es ist ein Programm, das mit stammt Ihre LillyPond Verteilung, 766 00:43:53,760 --> 00:43:57,030 und es ist für die Iteration LillyPond Fragmente in LaTeX 767 00:43:57,030 --> 00:44:00,340 wenn Sie etwas tun wollen wie ein großer Musikwissenschaft Dokument 768 00:44:00,340 --> 00:44:02,289 Beispiele, zum Beispiel. 769 00:44:02,289 --> 00:44:04,580 Und es ist eine gute Fähigkeit zur Leben, wenn Sie etwas zu tun, 770 00:44:04,580 --> 00:44:05,770 mit Musik, nicht nur CS50. 771 00:44:05,770 --> 00:44:09,320 Ich habe LillyPond für alle verwendeten meiner Komposition Projekte 772 00:44:09,320 --> 00:44:11,880 da ich war im Grunde ein Senior in der High School. 773 00:44:11,880 --> 00:44:13,455 >> Also hier sind einige einfache Beispiele. 774 00:44:13,455 --> 00:44:17,490 775 00:44:17,490 --> 00:44:21,060 Dieses ist im Allgemeinen repräsentativ der Schwierigkeitsgrad 776 00:44:21,060 --> 00:44:23,481 , dass die meisten Leute würden ehrlich sie versuchten, 777 00:44:23,481 --> 00:44:24,980 LilyPond für einfache Projekte zu verwenden. 778 00:44:24,980 --> 00:44:29,519 Dieser erste ist der Beginn zu einer Choralvorspiel von Bach. 779 00:44:29,519 --> 00:44:31,810 Das untere ist ein Auszug von einem meiner eigenen Werke, 780 00:44:31,810 --> 00:44:34,650 und es ist nur da, um zu zeigen, Sie Dinge wie [unverständlich] 781 00:44:34,650 --> 00:44:38,550 Putting mehrere Zeilen in der gleichen Personal, wie lyrische undersetting funktioniert. 782 00:44:38,550 --> 00:44:41,350 783 00:44:41,350 --> 00:44:46,110 Lyric Unterlagen sind eine Sache, die sehr ist leicht zu LilyPond für Chormusik zu verwenden. 784 00:44:46,110 --> 00:44:48,814 >> Und so dann ist da noch etwas mehr komplizierte Beispiele. 785 00:44:48,814 --> 00:44:50,980 Alle diese sind in getan LilyPond und sie sind machbar. 786 00:44:50,980 --> 00:44:55,280 Diese erste Auszug stammt aus [Unverständlich] durch [unverständlich]. 787 00:44:55,280 --> 00:44:58,860 Und das [unverständlich] aus ein Stück für Solo-Bass 788 00:44:58,860 --> 00:45:03,550 Flöte durch [unverständlich], der ein longtime-- ist, die 789 00:45:03,550 --> 00:45:07,101 war ein langjähriges Mitglied der Musik-Abteilung hier, denke ich. 790 00:45:07,101 --> 00:45:08,600 Ich bin nicht sicher, wo er weg gegangen. 791 00:45:08,600 --> 00:45:12,410 Aber er ist der Berater der Harvard war Komponistenverband für eine lange Zeit. 792 00:45:12,410 --> 00:45:13,530 Wundervoller Mann. 793 00:45:13,530 --> 00:45:16,920 Und er etwas Musik, die sehr hat schreibt komplizierte Notation, LillyPond 794 00:45:16,920 --> 00:45:20,500 Trotzdem kann die hand sehr schön. 795 00:45:20,500 --> 00:45:26,030 >> Also, nur um Ihnen ein Gefühl von zu geben, was Funktionen dieses Ding ist so sind-- 796 00:45:26,030 --> 00:45:28,960 die Interna von LillyPond sind sehr kompliziert. 797 00:45:28,960 --> 00:45:31,060 Und Sie können es verwenden eine lange Zeit, einschließlich 798 00:45:31,060 --> 00:45:32,520 für einige ziemlich kompliziert Dinge, ohne wirklich zu 799 00:45:32,520 --> 00:45:34,060 mit zu viel über sie wissen. 800 00:45:34,060 --> 00:45:38,720 Aber die Grundidee ist, die auf dem untersten Ebene die Atome LillyPonds 801 00:45:38,720 --> 00:45:39,970 sind die Noten. 802 00:45:39,970 --> 00:45:42,761 Der Anhang enthält eine Kontext aufgerufen Stimmen. 803 00:45:42,761 --> 00:45:44,510 Also die Stimme Kontext Grundsätzlich entspricht 804 00:45:44,510 --> 00:45:47,410 um eine einzelne Zeile der Polyphonie. 805 00:45:47,410 --> 00:45:49,410 Und dann Zusammenhang kann hierarchisch enthalten 806 00:45:49,410 --> 00:45:53,590 in höheren Ebene diejenigen, stellen Mitarbeiter an der Partitur 807 00:45:53,590 --> 00:45:56,750 oder größere Gruppen, wie Klavierstäbe oder Chor Mitarbeiter, 808 00:45:56,750 --> 00:45:58,990 und dann schließlich gesamte Partitur Kontexten. 809 00:45:58,990 --> 00:46:02,260 Und Sie umfassen eigentlich kann mehrere Noten in einem Buch. 810 00:46:02,260 --> 00:46:05,770 >> Und jeder hat einen Rahmen Anzahl der angeschlossenen Graveure. 811 00:46:05,770 --> 00:46:08,340 Wenn Sie durch das aussehen Inhalte eines Kontext 812 00:46:08,340 --> 00:46:14,410 und drucken Sie ein bestimmtes Symbol oder eine bestimmte Klasse von Symbolen als notwendig. 813 00:46:14,410 --> 00:46:17,840 Also, um jede Stimme Zusammenhang gibt es [unverständlich] Notizen 814 00:46:17,840 --> 00:46:24,270 Kupferstecher, die im Grunde eine Funktion oder ein Objekt, das alle die Notiz schreibt 815 00:46:24,270 --> 00:46:26,290 Köpfe auf die richtigen Teile einer Seite. 816 00:46:26,290 --> 00:46:29,510 Dann gibt es eine Spalte Kupferstecher, die schreibt Spalten auf das Personal. 817 00:46:29,510 --> 00:46:31,517 Dann gibt es ein Metronom Zeichen Graveur, dass 818 00:46:31,517 --> 00:46:33,100 schreibt Metronomangaben in einer Partitur. 819 00:46:33,100 --> 00:46:36,410 Und all diese passen ziemlich gut in der Hierarchie. 820 00:46:36,410 --> 00:46:39,500 Und es ist sehr, sehr, sehr kundengerecht, die Sie brauchen 821 00:46:39,500 --> 00:46:42,880 wenn Sie wollen, um Dinge wie das zu bekommen. 822 00:46:42,880 --> 00:46:45,730 >> Also alle Kontexte ein Viele verschiedene Attribute 823 00:46:45,730 --> 00:46:52,410 dass Sie für alles ändern kann aus dem Abstand, um verschiedene Schrift 824 00:46:52,410 --> 00:46:54,942 Auswahl an Größen der Dinge. 825 00:46:54,942 --> 00:46:56,900 Wenn Sie noch tun wollen kompliziertere Dinge, 826 00:46:56,900 --> 00:46:59,210 gibt es eine eingebettete Skriptsprache. 827 00:46:59,210 --> 00:47:01,820 Sie nutzen Regelung, die ist Lisp-Dialekt. 828 00:47:01,820 --> 00:47:04,960 Dies tun, wahrscheinlich nicht bedeutet nichts für Sie. 829 00:47:04,960 --> 00:47:06,900 Aber im Grunde eine Regelung andere funktionelle 830 00:47:06,900 --> 00:47:09,500 Programmiersprache, mehr oder weniger. 831 00:47:09,500 --> 00:47:10,800 >> STEPHEN Krewson: Die tie-in. 832 00:47:10,800 --> 00:47:12,690 >> CONNOR HARRIS: Ja. 833 00:47:12,690 --> 00:47:15,390 Es ist eine gute tie-in, nehme ich an. 834 00:47:15,390 --> 00:47:20,150 Und es als Unterrichtssprache verwendet wird, tatsächlich, sich Massen Ave. Am MIT. 835 00:47:20,150 --> 00:47:26,590 Und es ist sehr praktisch für LillyPond aus verschiedenen technischen Gründen. 836 00:47:26,590 --> 00:47:30,317 >> Und so, wenn Sie einfach zu machen möchten Tweaks abhängig conditionals, 837 00:47:30,317 --> 00:47:32,900 für example-- es gibt bestimmte Bedingung einer Punktzahl, die erfüllt ist, 838 00:47:32,900 --> 00:47:36,495 machen Änderungen an der Layout oder whatnot-- dann 839 00:47:36,495 --> 00:47:37,620 diese Einrichtungen sind dort. 840 00:47:37,620 --> 00:47:38,667 Sie sind kompliziert. 841 00:47:38,667 --> 00:47:40,250 Also hier ist ein ziemlich einfaches Codebeispiel. 842 00:47:40,250 --> 00:47:43,810 Es ist fünf Zeilen. 843 00:47:43,810 --> 00:47:46,120 Grundsätzlich bin ich, die zwei Mitarbeiter. 844 00:47:46,120 --> 00:47:46,904 Es ist in 3/4. 845 00:47:46,904 --> 00:47:48,695 Der erste Mitarbeiter hat eine befestigt Tempobezeichnung, 846 00:47:48,695 --> 00:47:51,110 aber das ist eigentlich los weiter zu gehen, um die ganze Partitur, 847 00:47:51,110 --> 00:47:54,960 weil Tempo Marken sind auf den Schuss. 848 00:47:54,960 --> 00:47:59,044 Die Metronom-Stecher ist an dem Rahmen punkten. 849 00:47:59,044 --> 00:48:01,460 Es gibt verschiedene Schlüssel, weil die [unverständlich] Stecher 850 00:48:01,460 --> 00:48:02,710 Ist der Mitarbeiter angebracht. 851 00:48:02,710 --> 00:48:04,441 Sie können tatsächlich zu tun ist. 852 00:48:04,441 --> 00:48:06,190 Die Probe schrieb ich ist tatsächlich in C-Dur, 853 00:48:06,190 --> 00:48:07,990 aber es ist einfach zu zeigen, die Sie haben können 854 00:48:07,990 --> 00:48:09,570 verschiedene Schlüssel in verschiedenen Mitarbeiter. 855 00:48:09,570 --> 00:48:15,710 Und die grundlegende Syntax ist Ihnen zu schreiben beachten Sie Namen mit E, F, G, was auch immer. 856 00:48:15,710 --> 00:48:18,910 Wenn Sie Vorzeichen tun wollen, Sie Suffix oder ES. 857 00:48:18,910 --> 00:48:22,640 Dies ist aus dem Niederländischen musikwissenschaftliche Kongresse. 858 00:48:22,640 --> 00:48:28,290 >> Und Oktavsprüngen zu tun, zu benutzen müssen Sie diese Markierungen, Komma oder Apostroph. 859 00:48:28,290 --> 00:48:30,580 Die relative bedeutet nur, was auch immer Sie eine Notiz, 860 00:48:30,580 --> 00:48:34,080 es wird automatisch in die plaec werden Oktave in der Nähe des vorhergehenden. 861 00:48:34,080 --> 00:48:37,624 Und wenn Sie mehr als springen möchten a fifth-- sagen, ein Fünftel oder more-- 862 00:48:37,624 --> 00:48:39,165 dann müssen Sie die [unverständlich] zu verwenden. 863 00:48:39,165 --> 00:48:42,580 Aber sonst, die Sie nicht haben, um geben Sie die Oktave jeder einzelnen Note. 864 00:48:42,580 --> 00:48:46,130 >> Und relative C, Prime und C, müssen Sie nur angeben, mittlere C 865 00:48:46,130 --> 00:48:48,630 und Basis C, insbesondere ersten Noten. 866 00:48:48,630 --> 00:48:55,020 Dann können Sie diese Mitarbeiter, die zu organisieren diese beiden Stimmen oder Proben von Musik, 867 00:48:55,020 --> 00:48:56,730 und Sie haben eine Punktzahl. 868 00:48:56,730 --> 00:48:58,440 Und das sieht so aus. 869 00:48:58,440 --> 00:49:01,780 870 00:49:01,780 --> 00:49:05,380 >> Wenn Sie sich die Zeit nehmen wollen Kopie, die Probe von LillyPond 871 00:49:05,380 --> 00:49:07,530 Code auf dem vorherigen schieben Sie hier, und Sie 872 00:49:07,530 --> 00:49:09,030 kann es für LillyPond selbst schreiben. 873 00:49:09,030 --> 00:49:11,280 Ich weiß, wir haben etwas das sieht aus wie diese. 874 00:49:11,280 --> 00:49:17,236 875 00:49:17,236 --> 00:49:19,610 So gibt es eine andere Technologie heißt Music XML gepflegt 876 00:49:19,610 --> 00:49:22,030 von ganz anderen Personen. 877 00:49:22,030 --> 00:49:28,150 XML ist ein Textdaten structure-- I sollte nicht sagen Daten structure-- sagen 878 00:49:28,150 --> 00:49:29,580 Metapher Karte Art. 879 00:49:29,580 --> 00:49:33,800 Und es wurde entwickelt, um zu halten hierarchische Daten sehr gut. 880 00:49:33,800 --> 00:49:37,050 HTML, zum Beispiel, ist eine Art von XML. 881 00:49:37,050 --> 00:49:41,090 Und Sie können XML, weil sie sagen hatte alle Montagewinkel und Winkel 882 00:49:41,090 --> 00:49:44,700 Bügel Schrägstriche die zeigen Datenfelder. 883 00:49:44,700 --> 00:49:47,390 >> Ich habe nicht einen Code haben Beispiel aus der Musik-XML. 884 00:49:47,390 --> 00:49:50,450 Sie können es sich selbst finden. 885 00:49:50,450 --> 00:49:53,735 Grundsätzlich ist der Grund, möchten Sie vielleicht um XML als Zwischenstufe verwenden 886 00:49:53,735 --> 00:49:55,980 ist vor allem, es ein Austauschformat 887 00:49:55,980 --> 00:50:02,301 für die im Grunde every-- Ich sollte nicht sagen jeder, aber eine Menge verschiedener Punktzahl 888 00:50:02,301 --> 00:50:02,800 Schriftsteller. 889 00:50:02,800 --> 00:50:04,966 Also, wenn Sie in der Musik zu schreiben XML, nicht nur LillyPond können 890 00:50:04,966 --> 00:50:08,080 lesen Sie es mit Hilfe dieses auxilary Programm namens Musik XML zu LY, 891 00:50:08,080 --> 00:50:11,360 sondern auch Finale lesen es, Sibelius kann es lesen. 892 00:50:11,360 --> 00:50:14,770 Je nachdem, wie Sie Ihre interne Objekt Hierarchie arbeitet für die Darstellung von Musik, 893 00:50:14,770 --> 00:50:18,820 könnte es einfacher sein zu schreiben, Musik XML als LillyPond 894 00:50:18,820 --> 00:50:22,410 und nur auf Musik XML vertrauen um LY, um die Konvertierung zu tun. 895 00:50:22,410 --> 00:50:24,282 >> Ich glaube nicht, dass [unverständlich] hat Musik XML. 896 00:50:24,282 --> 00:50:25,490 STEPHEN Krewson: Es ist nicht. 897 00:50:25,490 --> 00:50:26,340 Jemand arbeitet daran, though. 898 00:50:26,340 --> 00:50:27,090 >> CONNOR HARRIS: OK. 899 00:50:27,090 --> 00:50:31,040 Euterpea nicht über eine Noch Musik XML-Ausgabefunktion. 900 00:50:31,040 --> 00:50:35,340 Wenn Sie möchten, eine endgültige Projektidee, vielleicht haben Sie in Kontakt mit Jungs 901 00:50:35,340 --> 00:50:38,620 dass Stephen kennt und sie deine Hilfe gebrauchen könnte. 902 00:50:38,620 --> 00:50:40,992 >> STEPHEN Krewson: Ich würde gerne, dass. 903 00:50:40,992 --> 00:50:43,450 CONNOR HARRIS: Auch grundsätzlich alle Programmiersprachen 904 00:50:43,450 --> 00:50:46,610 das ist sein Salz wert verfügt bereits über eine XML-Bibliothek, 905 00:50:46,610 --> 00:50:51,030 so können Sie intern alle konvertieren Ihrer Musik in eine Objekt 906 00:50:51,030 --> 00:50:54,120 , dass die XML-Bibliothek können schreiben darauf hin, dass würde weniger erfordern 907 00:50:54,120 --> 00:50:57,470 Änderungen an Ihrem inneren Struktur für was auch immer Sie musik nachrichten 908 00:50:57,470 --> 00:51:00,310 schreiben wollen, als es zu schreiben direkt im LillyPond würden. 909 00:51:00,310 --> 00:51:04,380 Dann einfach drucken Sie es aus mit XML mit die XML-Bibliotheken in Ihrer Sprache, 910 00:51:04,380 --> 00:51:07,260 welcher garantiert, dass es syntaktisch korrekt und alles, 911 00:51:07,260 --> 00:51:08,720 und dann wandeln Sie es in LillyPond. 912 00:51:08,720 --> 00:51:11,060 So Technologie, um möchten Sie vielleicht Blick in, wenn Sie etwas zu tun, 913 00:51:11,060 --> 00:51:11,650 so was. 914 00:51:11,650 --> 00:51:14,490 915 00:51:14,490 --> 00:51:16,370 >> [Unverständlich], ein anderer auxilarry Technologie. 916 00:51:16,370 --> 00:51:21,700 Dies ist im Grunde Tech Works oder Tech Studio für LillyPond. 917 00:51:21,700 --> 00:51:25,380 So bietet es Hilfe bei Syntax, mit Vorlagen 918 00:51:25,380 --> 00:51:28,770 für verschiedene gemeinsame Kombinationen von Instrumenten. 919 00:51:28,770 --> 00:51:32,780 Es ermöglicht Split-Screen-Anzeige, so können Sie Ihren Code in einem Fenster haben 920 00:51:32,780 --> 00:51:37,350 und PDF in einem anderen Fenster und klicken Sie Orte in der PDF- 921 00:51:37,350 --> 00:51:40,650 bei der zuständigen springen Spots in Ihrem Quellcode. 922 00:51:40,650 --> 00:51:45,330 Dies ist besonders nützlich, wenn Sie tatsächlich sind Schreiben LillyPond Dateien selbst 923 00:51:45,330 --> 00:51:47,400 als wenn Sie erzeugen sind sie programmatisch. 924 00:51:47,400 --> 00:51:51,230 Aber noch einmal, es ist etwas Nützliches zu müssen. 925 00:51:51,230 --> 00:51:51,970 >> Groß. 926 00:51:51,970 --> 00:51:55,860 Ein weiterer resources-- Ich werde einfach sehr schnell gehen durch diese. 927 00:51:55,860 --> 00:52:01,270 LillyPond manuals-- LillyPond hat ausgezeichnete Dokumentation auf ihrer Website. 928 00:52:01,270 --> 00:52:02,270 Sie haben ein Tutorial. 929 00:52:02,270 --> 00:52:03,478 Sie haben eine Syntaxreferenz. 930 00:52:03,478 --> 00:52:07,010 Sie haben Hunderte von Snippets für verschiedene Kleinigkeiten 931 00:52:07,010 --> 00:52:09,930 yo Möglicherweise müssen tun, um zu zeigen, verschiedene Fähigkeiten. 932 00:52:09,930 --> 00:52:12,250 Wenn Sie verwenden möchten, Die Skriptsprache 933 00:52:12,250 --> 00:52:14,740 oder kreiere umfassen Anpassungen, dann gibt es 934 00:52:14,740 --> 00:52:16,730 Interna Referenz zu dieser URL. 935 00:52:16,730 --> 00:52:21,950 Wenn Sie Musik XML verwenden möchten, gibt es dass URL, musicxml.com/tutorial. 936 00:52:21,950 --> 00:52:27,960 >> Und dann, wenn Sie brauchen, um zu lernen Schema weil Sie tatsächlich verwenden möchten 937 00:52:27,960 --> 00:52:30,960 die Skriptmöglichkeiten in LillyPond, dann gibt es eine [unverständlich] genannt 938 00:52:30,960 --> 00:52:32,918 Strukturierte Interpretation von Computerprogrammen, 939 00:52:32,918 --> 00:52:35,820 Das ist nicht nur das zweite größten CS Lehrbuch je written-- 940 00:52:35,820 --> 00:52:39,770 finden Sie mich danach, wenn Sie wissen wollen, was ich denke, der Größte ist-- 941 00:52:39,770 --> 00:52:43,580 aber es ist auch eine sehr gute Einführung in die Sprache richtig. 942 00:52:43,580 --> 00:52:46,630 Sie werden nicht mehr als brauchen die ersten paar Abschnitte. 943 00:52:46,630 --> 00:52:47,827 >> Das ist schon alles. 944 00:52:47,827 --> 00:52:48,410 Irgendwelche Fragen? 945 00:52:48,410 --> 00:52:54,068 946 00:52:54,068 --> 00:52:57,972 >> STUDENT: Wo kann ich Ihre generierten Frere Jacques 947 00:52:57,972 --> 00:53:01,050 so kann ich es auf meinem iPod zu setzen? 948 00:53:01,050 --> 00:53:07,574 >> STEPHEN Krewson: Nun, können Sie schreiben bis zu einem gewissen wav-Datei in Euterpea. 949 00:53:07,574 --> 00:53:08,490 Und Sie haben den Code. 950 00:53:08,490 --> 00:53:10,000 Es ist auf GitHub. 951 00:53:10,000 --> 00:53:15,590 Machen Sie Ihre eigenen Variationen Frere Jacques von CS50 hive mind. 952 00:53:15,590 --> 00:53:17,095 Es wäre toll. 953 00:53:17,095 --> 00:53:18,220 CONNOR HARRIS: Wer sonst? 954 00:53:18,220 --> 00:53:20,261 STEPHEN Krewson: Wir brauchen eine bessere Bass-Drum, auch. 955 00:53:20,261 --> 00:53:21,935 Es ist wirklich schlecht. 956 00:53:21,935 --> 00:53:26,565 >> STUDENT: Euterpea hat nicht nur die Masseseite, aber signal-- 957 00:53:26,565 --> 00:53:27,440 STEPHEN Krewson: Ja. 958 00:53:27,440 --> 00:53:30,100 In der Tat, das Werk I in Euterpea tat, als ich 959 00:53:30,100 --> 00:53:33,450 nahm this-- es gibt eine Aufbaustudium an der Yale, dass 960 00:53:33,450 --> 00:53:35,900 verwendet es-- war auf Klangsynthese. 961 00:53:35,900 --> 00:53:39,810 Es gibt also eine wirklich nette Art mit Pfeilen 962 00:53:39,810 --> 00:53:46,150 und einige der Notation wir sahen Komponieren zusammen Signalfunktionen. 963 00:53:46,150 --> 00:53:50,610 Insbesondere Bass für die meisten von ihnen ist nur eine einfache Sinuswelle. 964 00:53:50,610 --> 00:53:54,240 Aber wenn Sie komponieren diejenigen starten in seltsamen programmatische Möglichkeiten, 965 00:53:54,240 --> 00:54:00,010 Sie verrückte Sound zu bekommen Effekte, wie seltsam Kaskaden. 966 00:54:00,010 --> 00:54:04,640 Sie können sehr kiesig erstellen Töne mit einer Menge von Modulation. 967 00:54:04,640 --> 00:54:07,730 >> Ich habe ein Projekt auf körnigen Synthese, die ist 968 00:54:07,730 --> 00:54:12,290 irgendwo zwischen FM und Probenahme. 969 00:54:12,290 --> 00:54:15,230 Sie nehmen sehr klein, kleine Proben, und dann 970 00:54:15,230 --> 00:54:20,440 kombinieren sie mit irgendeiner Art von Modulator und den Aufbau einer volleren Klang. 971 00:54:20,440 --> 00:54:24,900 Wir haben auch physikalische Modellierung, so versuchen, über die Physik zu denken 972 00:54:24,900 --> 00:54:29,410 und Psychoakustik von so etwas wie eine Trompete, und zum Nachdenken über die Art und Weise 973 00:54:29,410 --> 00:54:32,320 der Ton wird abprallen die Glocke der Trompete 974 00:54:32,320 --> 00:54:35,200 und die Akustik das Zimmer und Modellierung 975 00:54:35,200 --> 00:54:40,195 daß die Grund Oszillatoren. 976 00:54:40,195 --> 00:54:47,690 977 00:54:47,690 --> 00:54:48,940 CONNOR HARRIS: Vielen Dank. 978 00:54:48,940 --> 00:54:50,140 Danke fürs Kommen. 979 00:54:50,140 --> 00:54:52,400 Und ich bin immer bereit, nehmen Fragen 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: Ja. stephen.krewson@yale.edu. 982 00:54:57,020 --> 00:54:58,810 983 00:54:58,810 --> 00:55:00,360 Cool. 984 00:55:00,360 --> 00:55:01,667