1 00:00:00,000 --> 00:00:05,180 2 00:00:05,180 --> 00:00:05,930 CONNOR Harris: Hi. 3 00:00:05,930 --> 00:00:06,820 Ek is Connor Harris. 4 00:00:06,820 --> 00:00:09,729 Ek is 'n CS50 CA by Harvard. 5 00:00:09,729 --> 00:00:11,270 STEPHEN KREWSON: Ek is Stephen Krewson. 6 00:00:11,270 --> 00:00:12,582 Ek is 'n TF vir CS50 by Yale. 7 00:00:12,582 --> 00:00:15,790 CONNOR Harris: En ons gaan om te praat oor 'n paar tegnologie wat jy dalk 8 00:00:15,790 --> 00:00:18,880 wil gebruik as jy belangstel doen 'n finale projek of werklik 9 00:00:18,880 --> 00:00:20,920 enigiets met musiek. 10 00:00:20,920 --> 00:00:24,400 Ons gaan fokus op die eerste 'n programmeertaal genoem Haskell. 11 00:00:24,400 --> 00:00:26,280 Dit is 'n funksionele taal, sodat die paradigma 12 00:00:26,280 --> 00:00:29,620 is baie verskillend van C of PHP of ander noodsaaklik tale 13 00:00:29,620 --> 00:00:33,450 wat jy reeds gebruik het, en veral op 'n biblioteek geskryf in Haskell 14 00:00:33,450 --> 00:00:40,240 genoem Euterpea, wat mense kan help met die skryf van musiek funksioneel, 15 00:00:40,240 --> 00:00:40,780 basies. 16 00:00:40,780 --> 00:00:43,400 En Stephen sal loop jy deur 'n groot voorbeeld. 17 00:00:43,400 --> 00:00:46,423 >> Na hierdie, sal ek jou bekend te stel aan iets genoem LillyPond, wat 18 00:00:46,423 --> 00:00:48,370 is 'n tegnologie vir setwerk musiek. 19 00:00:48,370 --> 00:00:50,830 Dit is soort van soos LaTeX musiek indien enige van julle 20 00:00:50,830 --> 00:00:57,530 het LaTeX gebruik word vir wiskunde klasse of ander P stel klasse of wat jy het. 21 00:00:57,530 --> 00:01:00,440 En so sal ek aan julle gee, weer, 'n paar eenvoudige voorbeelde van die 22 00:01:00,440 --> 00:01:03,640 en wys wat jy in die algemene rigting van 'n paar beter hulpbronne. 23 00:01:03,640 --> 00:01:04,319 >> STEPHEN KREWSON: In Daarbenewens het ons gedink dit 24 00:01:04,319 --> 00:01:06,720 sou cool wees om die opstel wees 'n bietjie van wenke 25 00:01:06,720 --> 00:01:10,780 na 'n pypleiding tussen -Euterpea gegenereer MIDI-lêers 26 00:01:10,780 --> 00:01:13,910 in LillyPond, sodat ons 'n opdrag op die skrifte 27 00:01:13,910 --> 00:01:16,310 daardie wat doen voorsien LillyPond 28 00:01:16,310 --> 00:01:19,160 net om dit open source hou en kry 'n pypleiding gaan. 29 00:01:19,160 --> 00:01:20,910 CONNOR Harris: Weereens, Ons moet beklemtoon, 30 00:01:20,910 --> 00:01:23,100 hierdie twee tegnologie, jy nie om hulle te gebruik. 31 00:01:23,100 --> 00:01:25,370 Hulle is nie ontwerp om te werk saam, al is hulle baie mooi. 32 00:01:25,370 --> 00:01:26,362 >> STEPHEN KREWSON: Right. 33 00:01:26,362 --> 00:01:30,116 En heeltemal gratis. 34 00:01:30,116 --> 00:01:32,240 CONNOR Harris: So erkennings, lees net dat. 35 00:01:32,240 --> 00:01:33,406 STEPHEN KREWSON: Behoorlik opgemerk. 36 00:01:33,406 --> 00:01:36,360 Danksy dié mense. 37 00:01:36,360 --> 00:01:39,180 Dit sal ek vertoef op die net vir 'n oomblik. 38 00:01:39,180 --> 00:01:41,560 Die installasie proses is 'n bietjie bietjie lastig. 39 00:01:41,560 --> 00:01:45,420 Ons het 'n lees my op die GitHub dat jy 'n blik op kan plaasvind. 40 00:01:45,420 --> 00:01:47,840 Net my e-pos as jy enige vrae het. 41 00:01:47,840 --> 00:01:52,829 Maar ons sal hierdie hardloop onder die aanname dat dit werk vir almal. 42 00:01:52,829 --> 00:01:55,620 CONNOR Harris: En as jy nie kan nie kry LillyPond om te werk, geen groot deal. 43 00:01:55,620 --> 00:02:00,139 Daar is geen live samestelling wat betrokke sal wees, ten minste op my einde. 44 00:02:00,139 --> 00:02:02,930 STEPHEN KREWSON: Haskell en LillyPond moet albei installeerders. 45 00:02:02,930 --> 00:02:08,497 Euterpea afgelaai as 'n pakket, so aan en so voort. 46 00:02:08,497 --> 00:02:10,080 So ons praat oor die rekenaar musiek. 47 00:02:10,080 --> 00:02:12,990 En dit is net 'n baie 50.000-voet oog. 48 00:02:12,990 --> 00:02:15,700 Daar is 'n paar verskillende aspekte van dit. 49 00:02:15,700 --> 00:02:18,120 En dit is rof en is gaan 'n paar detail verduister. 50 00:02:18,120 --> 00:02:22,090 Maar ons kon dink aan iets soos algoritmiese komposisie, 51 00:02:22,090 --> 00:02:24,920 met behulp van algoritmes, die gebruik van kode te genereer 52 00:02:24,920 --> 00:02:30,280 'n soort of-- miskien 'n self-soortgelyke volgorde van note, of dalk notas 53 00:02:30,280 --> 00:02:33,330 onder 'n beperking. 54 00:02:33,330 --> 00:02:35,350 En dan diegene wees verrig of geïnterpreteer 55 00:02:35,350 --> 00:02:38,390 met analoog instrumente of iets soos dit. 56 00:02:38,390 --> 00:02:42,010 Maar die samestelling was algoritmies gedoen. 57 00:02:42,010 --> 00:02:45,120 >> Maar natuurlik, miskien is die gebied van die rekenaar musiek of digitale musiek 58 00:02:45,120 --> 00:02:48,870 ons is meer vertroud met digitaal klank sintese of digitale sampling 59 00:02:48,870 --> 00:02:51,160 en digitale opname. 60 00:02:51,160 --> 00:02:55,650 Daar is baie van digitale instrumente gedoen deur middel van digitale steekproefneming. 61 00:02:55,650 --> 00:03:00,110 In werklikheid, sal ons met een van dié in die vorm van 'n gesonde font biblioteek later. 62 00:03:00,110 --> 00:03:02,850 >> Maar daar is ook iets genoem digitale sintese wat uitgetrek het, 63 00:03:02,850 --> 00:03:08,650 van die laat 70's en in die 80's met Yamaha en John Chowning by Stanford 64 00:03:08,650 --> 00:03:11,990 doen FM sintese of Frekwensiemodulasie sintese, 65 00:03:11,990 --> 00:03:15,100 waar jy 'n draer het sein en 'n modulasiesein 66 00:03:15,100 --> 00:03:18,270 beide in die klank spektrum. 67 00:03:18,270 --> 00:03:22,570 Maar wat ons gefokus op vandag is iets genoem MIDI, 68 00:03:22,570 --> 00:03:25,040 en natuurlik, algoritmiese komposisie. 69 00:03:25,040 --> 00:03:30,940 >> Ons gaan nie om instrumente te maak, maar ons plaas gaan 'n paar musiek te maak, 70 00:03:30,940 --> 00:03:33,940 en dan wat sal kry geïnterpreteer deur sommige instrumente wat 71 00:03:33,940 --> 00:03:38,300 is conformant die algemene MIDI standaard. 72 00:03:38,300 --> 00:03:40,830 So, wat is MIDI? 73 00:03:40,830 --> 00:03:45,550 Ek is nie van plan om te diep in dit, maar MIDI is data-oordrag protokol. 74 00:03:45,550 --> 00:03:49,250 Dit is 'n soort van 'n gids oor verskillende maatskappye en nywerhede 75 00:03:49,250 --> 00:03:52,250 vir die organisering van klanke of kolle. 76 00:03:52,250 --> 00:03:54,170 So ons sal sien dat daar is 'n MIDI standaard 77 00:03:54,170 --> 00:03:57,500 vir al die verskillende perkussie klanke en MIDI aanbevelings 78 00:03:57,500 --> 00:04:01,360 vir al die verskillende tipes synth of verskillende tipes al die instrument 79 00:04:01,360 --> 00:04:03,650 groepe in 'n orkes, sê. 80 00:04:03,650 --> 00:04:08,916 >> Is jy waarskynlik vertroud met 0 127 deur MIDI boodskappe. 81 00:04:08,916 --> 00:04:12,920 A MIDI sein is tipies 'n bietjie aan te dui 82 00:04:12,920 --> 00:04:16,130 of dit 'n data of 'n status pakkie, en dan is daar 83 00:04:16,130 --> 00:04:18,589 sewe stukkies van 'n sein. 84 00:04:18,589 --> 00:04:21,430 En dit kan beheer alles van volume 85 00:04:21,430 --> 00:04:25,330 om die aksie of druk op 'n spesifieke sleutel 86 00:04:25,330 --> 00:04:29,400 as jy die verrigting met 'n MIDI kontroleerder asook, natuurlik, 87 00:04:29,400 --> 00:04:31,250 notas. 88 00:04:31,250 --> 00:04:33,450 En natuurlik, MIDI het was uiters nuttig, 89 00:04:33,450 --> 00:04:37,550 want dit is 'n manier om die draad saam of daisy chain 90 00:04:37,550 --> 00:04:41,570 'n klomp van MIDI hardeware toestelle. 91 00:04:41,570 --> 00:04:44,050 Ek het sewe of agt terug by my huis. 92 00:04:44,050 --> 00:04:46,610 Dit raak ingewikkeld, maar dit is werklik 'n kragtige. 93 00:04:46,610 --> 00:04:47,460 En dit is regtig oud. 94 00:04:47,460 --> 00:04:51,117 Dit is uit die vroeë 80's, en dit is regtig mooi en klein. 95 00:04:51,117 --> 00:04:51,950 CONNOR Harris: Ja. 96 00:04:51,950 --> 00:04:54,230 Al die klassieke Nintendo video speletjies sou waarskynlik 97 00:04:54,230 --> 00:04:56,088 het MIDI-lêers vir musiek, byvoorbeeld. 98 00:04:56,088 --> 00:04:59,550 99 00:04:59,550 --> 00:05:01,740 >> STEPHEN KREWSON: Hier is 'n voorbeeld van algemene MIDI, 100 00:05:01,740 --> 00:05:06,520 wat as 'n soort MIDI algemene protokol. 101 00:05:06,520 --> 00:05:13,280 En ek dink ons ​​kan dink van die verskil tussen die spesifikasie 102 00:05:13,280 --> 00:05:17,830 dat daar iets soos moet wees hierdie instrument klanke en die werklike 103 00:05:17,830 --> 00:05:21,740 verwesenliking van die instrumente klink in 'n gesonde font of 'n bepaalde MIDI 104 00:05:21,740 --> 00:05:25,740 sintetiseerder as die verskil tussen miskien 'n typeface-- wat sê 105 00:05:25,740 --> 00:05:30,350 in die algemeen, is dit die ontwerp van hierdie spesifieke manier om verteenwoordig 106 00:05:30,350 --> 00:05:35,907 characters-- en 'n spesifieke lettertipe wat 'n spesifieke grootte en timbre, 107 00:05:35,907 --> 00:05:37,240 en daar is besef van the-- 108 00:05:37,240 --> 00:05:39,156 >> CONNOR Harris: Miskien is 'n beter vergelyking sou 109 00:05:39,156 --> 00:05:43,430 wees die Unicode standaard says-- dit gee 'n nommer aan elke karakter, en regtig 110 00:05:43,430 --> 00:05:46,830 elke taal in die wêreld, of 'n groot versameling van skrifte van taal 111 00:05:46,830 --> 00:05:51,310 in die wêreld, en dan diegene is gelewer in iets grafiese 112 00:05:51,310 --> 00:05:53,710 deur verskeie font pakkette. 113 00:05:53,710 --> 00:05:56,630 En natuurlik, kan jy dink MIDI as die Unicode van klank. 114 00:05:56,630 --> 00:06:03,250 En dit is net 'n lys of-- 'n groot stroom van gebeure en instrumente en noem maar op, 115 00:06:03,250 --> 00:06:06,090 en jy het om 'n aparte het program, soos 'n lettertipe, 116 00:06:06,090 --> 00:06:08,537 om te lewer wat in iets wat hoorbaar. 117 00:06:08,537 --> 00:06:12,360 118 00:06:12,360 --> 00:06:13,780 >> STEPHEN KREWSON: So hoekom Haskell? 119 00:06:13,780 --> 00:06:19,110 Haskell is 'n funksionele programmering taal, baie gevorderde, 120 00:06:19,110 --> 00:06:22,770 baie anders C, baie anders PHP. 121 00:06:22,770 --> 00:06:28,120 En ons gaan om te sien dat daar 'n gemak van funksie samestelling in Haskell 122 00:06:28,120 --> 00:06:37,640 wat ons sal toelaat om deur wind komponeer of tik op, transkribering, 123 00:06:37,640 --> 00:06:42,160 iets soos Frere Jacques, hierdie eenvoudige liedjie wat 124 00:06:42,160 --> 00:06:46,815 het 'n baie van die dele in dit wat is self-soortgelyke of herhaal. 125 00:06:46,815 --> 00:06:49,740 126 00:06:49,740 --> 00:06:53,250 So sal dit wees 'n paar van die motivering vir waarom 127 00:06:53,250 --> 00:06:59,400 ons gebruik Haskell, waarin funksies is eerste klas burgers. 128 00:06:59,400 --> 00:07:01,120 >> En ek wou uit te brei dit 'n bietjie. 129 00:07:01,120 --> 00:07:08,800 Dit is 'n bietjie maklik om noteer Frere Jacques in Haskell. 130 00:07:08,800 --> 00:07:12,100 Maar wat as ons wou voeg 'n drom deel dit? 131 00:07:12,100 --> 00:07:17,320 Wat as ons wou probeer om iets soos 'n Roland 808 of 909 drom 132 00:07:17,320 --> 00:07:20,970 masjien waar jy ongeveer 16 verskillende stappe? 133 00:07:20,970 --> 00:07:24,590 Gewoonlik is hierdie gedink as 16 notas. 134 00:07:24,590 --> 00:07:28,640 En jy kan beheer die globale tempo, en jy kan kies uit 135 00:07:28,640 --> 00:07:34,620 'n klomp van verskillende perkussie dele van die bas drom, 'n klap, verskillende strikke, 136 00:07:34,620 --> 00:07:37,540 oop en geslote hoë hoede hierdie soort van kanale, 137 00:07:37,540 --> 00:07:41,600 en dan kan jy EQ of hul volume te verstel. 138 00:07:41,600 --> 00:07:45,290 >> En ons sal 'n mooi manier in te sien Haskell te verteenwoordig hierdie stap 139 00:07:45,290 --> 00:07:48,810 sequencer met al die verskeie koel dinge in Haskell 140 00:07:48,810 --> 00:07:53,100 ons kan doen met die opwekking lyste en filter oor lyste 141 00:07:53,100 --> 00:07:56,060 kartering oor lyste, kartering funksies oor lyste. 142 00:07:56,060 --> 00:07:59,530 143 00:07:59,530 --> 00:08:00,760 En 'n vinnige verskoning. 144 00:08:00,760 --> 00:08:05,300 Dit is 'n baie oorsigtelike en té vinnige skets 145 00:08:05,300 --> 00:08:07,620 van sommige van die aspekte van Haskell en Euterpea, 146 00:08:07,620 --> 00:08:11,760 wat is 'n domein-spesifieke ingebed taal geskryf 147 00:08:11,760 --> 00:08:14,970 in Haskell vir musikale tipes. 148 00:08:14,970 --> 00:08:17,350 So moet asseblief check die kode aanlyn. 149 00:08:17,350 --> 00:08:22,404 Brand GHCI, wat is die Glasgow Haskell Compiler Interpreter. 150 00:08:22,404 --> 00:08:24,320 En Ek sal 'n paar doen van hierdie in 'n bietjie 151 00:08:24,320 --> 00:08:25,880 sodat jy kan sien hoe dit gedoen word. 152 00:08:25,880 --> 00:08:31,021 >> En dit kan jy in te laai met the-- die sintaksis is kolon en dan 153 00:08:31,021 --> 00:08:31,520 die opdrag. 154 00:08:31,520 --> 00:08:33,510 Jy kan laai in lêers. 155 00:08:33,510 --> 00:08:36,840 Jy kan blaai gebruik op die lêers om al die funksies sien dat 156 00:08:36,840 --> 00:08:39,169 bestaan ​​in 'n bepaalde module. 157 00:08:39,169 --> 00:08:43,850 En dan as ons sal sien, tipes en tipe klasse is so belangrik in Haskell, 158 00:08:43,850 --> 00:08:48,850 sodat jy kan altyd veral check-- As jy werk in 'n nuwe lig gebring 159 00:08:48,850 --> 00:08:51,600 soos hierdie, wat is 'n soort musiek? 160 00:08:51,600 --> 00:08:55,114 Ek weet oor die manier waarop numeriese tipes werk in Haskell, 161 00:08:55,114 --> 00:08:56,530 maar ek weet nie veel oor musiek. 162 00:08:56,530 --> 00:09:01,280 Maar jy kan die manier waarop hulle is verken gedefinieer deur die gebruik van hierdie t of tik 'n bevel 163 00:09:01,280 --> 00:09:04,577 en dan roep in 'n bepaalde funksie of 'n data voorwerp. 164 00:09:04,577 --> 00:09:05,410 CONNOR Harris: Ja. 165 00:09:05,410 --> 00:09:09,820 As jy gedink het C en klang was hardass oor tipes, 166 00:09:09,820 --> 00:09:11,230 jy het geen idee oor Haskell. 167 00:09:11,230 --> 00:09:14,230 Die goeie ding omtrent Haskell is dat as jy jou kode kan kry om saam te stel 168 00:09:14,230 --> 00:09:16,790 en as Haskell tipe tjeks, dit is waarskynlik reg, 169 00:09:16,790 --> 00:09:18,675 omdat die tipe stelsel is so streng. 170 00:09:18,675 --> 00:09:20,090 >> STEPHEN KREWSON: Ja. 171 00:09:20,090 --> 00:09:21,980 So ek wil net om te gaan through-- en weer 172 00:09:21,980 --> 00:09:27,160 dit is nie om dit te doen 'n paar van die justice-- die kenmerke van Haskell dat ten minste 173 00:09:27,160 --> 00:09:31,780 om sy creators-- en dit is geskep in die laat 1980's deur 'n klomp van die mense, 174 00:09:31,780 --> 00:09:34,610 'n komitee van ongeveer 20 people-- gedink het belangrik is. 175 00:09:34,610 --> 00:09:36,850 En die eerste ding wat hulle in 'n vraestel gelys wat 176 00:09:36,850 --> 00:09:41,890 beskryf die ontstaan ​​van Haskell oor die eerste 20 jaar of so 177 00:09:41,890 --> 00:09:43,390 was dat dit lui. 178 00:09:43,390 --> 00:09:44,990 So, wat beteken dit? 179 00:09:44,990 --> 00:09:49,860 >> Wel, dit beteken as ons het 'n soort van uitdrukking, moet ons om dit te evalueer. 180 00:09:49,860 --> 00:09:54,390 En Haskell doen dit in 'n oproep van behoefte manier of 'n nie-streng manier. 181 00:09:54,390 --> 00:09:57,250 Dit is, as ons 'n klomp van die komponente van ons uitdrukking, 182 00:09:57,250 --> 00:10:00,660 ons probeer om die evaluering te vertraag van daardie subkomponente 183 00:10:00,660 --> 00:10:05,300 totdat die absolute laaste minute-- dit is totdat ons hulle werklik nodig het. 184 00:10:05,300 --> 00:10:08,480 >> So hierdie means-- wat regtig cool, veral 185 00:10:08,480 --> 00:10:13,200 as ons dink oor die onttrekking van 'n musikale stap sequencer. 186 00:10:13,200 --> 00:10:16,740 Jy draai dit op, en jy begin hardloop 'n stap sequence-- 187 00:10:16,740 --> 00:10:20,010 As jy al ooit saam met 'n drom machine-- en dit gaan net vir ewig. 188 00:10:20,010 --> 00:10:24,650 So sou dit regtig lekker wees as ons kon navolg wat in Haskell. 189 00:10:24,650 --> 00:10:31,040 En ons kan dit doen met 'n oneindige waardes, in die besonder oneindige lyste. 190 00:10:31,040 --> 00:10:35,860 Dit is baie maklik om 'n tik oneindige lys Haskell. 191 00:10:35,860 --> 00:10:39,230 Jy kan net gebruik die sintaksis af hier, waar jy sien 1 deur middel van 3, 192 00:10:39,230 --> 00:10:42,440 verwyder die 3 1 dot dot, en dit is 'n oneindige lys 193 00:10:42,440 --> 00:10:46,960 van al die natuurlike getalle uit te brei op so ver as jy kan dink. 194 00:10:46,960 --> 00:10:49,925 >> Ek wil 'n stel konsep van voue dadelik. 195 00:10:49,925 --> 00:10:51,800 En weer, die doel van hierdie seminaar is nie 196 00:10:51,800 --> 00:10:55,770 om te leer oor voue in Haskell of hoër funksies orde. 197 00:10:55,770 --> 00:10:59,640 Maar ek wil net om dit bekend te stel aan gee 'n akkurate begrip van hoe vreemd 198 00:10:59,640 --> 00:11:03,700 Haskell is en hoe sterk dit is. 199 00:11:03,700 --> 00:11:08,000 En in die besonder, ons gaan be-- wanneer ons dit doen ons verskillende drom dele, 200 00:11:08,000 --> 00:11:12,790 ons gaan word manipuleer lyste van getalle, vou hulle op mekaar. 201 00:11:12,790 --> 00:11:17,290 En om dit te doen, sal ons wees gebruik van kaarte en voue. 202 00:11:17,290 --> 00:11:21,770 >> Daar is 'n reg assosiatiewe vou, wat is hierdie een reg 203 00:11:21,770 --> 00:11:26,990 here-- 1 minus die hoeveelheid, 2 minus die hoeveelheid, 3 minus 0. 204 00:11:26,990 --> 00:11:29,170 En die sintaksis vir 'n vou, jy 'n vou gee 205 00:11:29,170 --> 00:11:34,680 'n basis waarde en dan 'n operation-- in hierdie geval, optelling of aftrekking. 206 00:11:34,680 --> 00:11:36,280 Ek het beide gevalle getoon. 207 00:11:36,280 --> 00:11:41,760 En dan is daar 'n akkumulator wat ophoop oor die hele lys, 208 00:11:41,760 --> 00:11:46,330 die toepassing van daardie operateur plus of minus, en dan opbou nie. 209 00:11:46,330 --> 00:11:52,680 So hierdie the-- sal wees as dit genoem met vou r plus 0, wat begin met 0, 210 00:11:52,680 --> 00:11:54,720 sou ons dan al som die getalle in die lys. 211 00:11:54,720 --> 00:11:57,134 En dit is 'n lys 1-3. 212 00:11:57,134 --> 00:12:00,050 CONNOR Harris: So om dit 'n ander plaas manier, vou r neem drie argumente. 213 00:12:00,050 --> 00:12:02,540 Daar is 'n funksie wat self neem twee argumente, 214 00:12:02,540 --> 00:12:05,400 dan is daar 'n voorgereg waarde en daar is 'n lys van waardes. 215 00:12:05,400 --> 00:12:08,570 En wat jy doen, is jy neem voorgereg waarde eerste waarde, 216 00:12:08,570 --> 00:12:09,850 sit dit in die funksie. 217 00:12:09,850 --> 00:12:11,607 Wat kry jy uit neem, voer wat 218 00:12:11,607 --> 00:12:13,940 in die funksie van die tweede waarde wat jy kry, 219 00:12:13,940 --> 00:12:16,690 neem, te voed wat in die funksie van die derde waarde. 220 00:12:16,690 --> 00:12:18,740 En dan as jy gaan af hierdie hele lys op hierdie manier, 221 00:12:18,740 --> 00:12:22,970 jy gaan om uiteindelik sommige enkelvoud waarde wat 222 00:12:22,970 --> 00:12:25,720 van dieselfde tipe wat jy begin met en van dieselfde soort 223 00:12:25,720 --> 00:12:29,147 as dinge in die lys, en dan dit is die terugkeer gevolg van vou R. 224 00:12:29,147 --> 00:12:31,980 STEPHEN KREWSON: So in die besonder, dit is hoër orde funksies, 225 00:12:31,980 --> 00:12:34,460 omdat hulle met 'n ander funksie as een van die argumente. 226 00:12:34,460 --> 00:12:34,770 >> CONNOR Harris: Ja. 227 00:12:34,770 --> 00:12:37,820 As jy sekere ander gebruik het languages-- Ek weet R, [onhoorbaar] 228 00:12:37,820 --> 00:12:41,510 taal het dit genoem te verminder. 229 00:12:41,510 --> 00:12:45,460 Jy kan soortgelyke funksies in ander tale, net genoem 230 00:12:45,460 --> 00:12:48,160 verskillende dinge. 231 00:12:48,160 --> 00:12:50,680 >> STEPHEN KREWSON: En wat is lekker oor vou R 232 00:12:50,680 --> 00:12:53,880 in hierdie geval is dat vou R kan werk met 'n oneindige lyste. 233 00:12:53,880 --> 00:12:59,490 So in hierdie bodem, hierdie P5 genereer die notas wat 234 00:12:59,490 --> 00:13:03,120 is aangeskakel in die stap sequencer vir sommige drom deel, die vyfde drom deel, 235 00:13:03,120 --> 00:13:05,480 en miskien is dit 'n conga drom of iets. 236 00:13:05,480 --> 00:13:09,719 En dit is 'n doelbewus stomp manier skryf van hierdie, 237 00:13:09,719 --> 00:13:11,510 maar dit is pret, want dit blyk 'n baie 238 00:13:11,510 --> 00:13:14,460 dinge oor Haskell en Euterpea. 239 00:13:14,460 --> 00:13:20,650 >> So vou R van hierdie colon-- kolon net 'n operateur dat dinge stoot 240 00:13:20,650 --> 00:13:25,700 saam op 'n list-- beroep op 'n leë lys, wat net die leë hakies. 241 00:13:25,700 --> 00:13:28,250 En ek vra dat op hierdie oneindige lys. 242 00:13:28,250 --> 00:13:31,570 Dit is eintlik twee lyste bymekaar getel hier af. 243 00:13:31,570 --> 00:13:37,150 Die lys 1 komma 6 dot dot is 1, 6, 11, 16. 244 00:13:37,150 --> 00:13:39,750 So Haskell-- in net 'n paar karakters, kan jy 245 00:13:39,750 --> 00:13:42,420 kan die hele genereer volgorde van getalle 246 00:13:42,420 --> 00:13:46,240 dat vyf nommers is uitmekaar strek oor na oneindig. 247 00:13:46,240 --> 00:13:49,860 En ek prefix om daardie hierdie korter bietjie list-- 248 00:13:49,860 --> 00:13:54,370 3, 8, 21-- net om jou te wys hoe kan jy lyste koppel. 249 00:13:54,370 --> 00:13:55,790 >> En dan het ek gevou op homself. 250 00:13:55,790 --> 00:14:01,510 En dit eindig net 'n soort van identiteit operasie, maar dit is oneindig. 251 00:14:01,510 --> 00:14:06,070 En vou R kan dit doen, want dit lui evalueer, soos in die bogenoemde. 252 00:14:06,070 --> 00:14:10,582 As ons 'n 1 en 'n 2 en 3, wat ons kan net hakies af die hele res van dit. 253 00:14:10,582 --> 00:14:12,290 Dit sal nie werk vir minus of plus, maar dit 254 00:14:12,290 --> 00:14:17,760 sal werk vir hierdie kolon identiteit werking op die lys. 255 00:14:17,760 --> 00:14:24,620 >> So hoe kan ons prakties gebruik dat as ons 'n oneindig lang lys van dinge? 256 00:14:24,620 --> 00:14:26,500 Wel, Haskell bied 'n baie functions-- 257 00:14:26,500 --> 00:14:29,450 en meer in hierdie kyk in jou eie time-- soos neem 258 00:14:29,450 --> 00:14:32,200 wat sê: OK, ons is genereer die oneindige lys 259 00:14:32,200 --> 00:14:35,950 maar ons gaan net 'n paar te neem aantal en dit in hierdie case-- 260 00:14:35,950 --> 00:14:38,410 ons sal dit sien later in ons drum machine code-- 261 00:14:38,410 --> 00:14:43,740 GM is net 'n soort van globale veranderlike vir die aantal stappe 262 00:14:43,740 --> 00:14:44,610 in die sequencer. 263 00:14:44,610 --> 00:14:47,630 Op die roll-in masjiene ek het jy, dis tipies 16, 264 00:14:47,630 --> 00:14:51,475 maar ek het dit geïmplementeer met 32. 265 00:14:51,475 --> 00:14:54,470 Dit maak nie regtig saak nie. 266 00:14:54,470 --> 00:15:00,230 >> Haskell is ook suiwer, so dit het 'n sterk statiese tik wat Connor verwys na. 267 00:15:00,230 --> 00:15:03,220 So funksies wiskundige in die sense-- 268 00:15:03,220 --> 00:15:06,600 hulle is meer wiskundige dat hulle gewaarborg 269 00:15:06,600 --> 00:15:11,530 om nie toegang tot of verander enige soort veranderlike of verrig inset of uitset. 270 00:15:11,530 --> 00:15:14,420 So as jy 'n funksie het, dit is deterministiese. 271 00:15:14,420 --> 00:15:17,400 Dit sal altyd dieselfde terugkeer waarde in die staat van die program 272 00:15:17,400 --> 00:15:19,310 of bly dieselfde. 273 00:15:19,310 --> 00:15:22,940 Daar is natuurlik uitsonderings monad ische test hierdie, maar dit is buite ons omvang. 274 00:15:22,940 --> 00:15:23,900 >> CONNOR Harris: Ja. 275 00:15:23,900 --> 00:15:26,946 Wat dit beteken, al is, is daar is 'n paar belangrike [onhoorbaar] 276 00:15:26,946 --> 00:15:27,820 gevolge van hierdie. 277 00:15:27,820 --> 00:15:30,940 Een daarvan is dat dit is baie maklik om te paralleliseer Haskell programme. 278 00:15:30,940 --> 00:15:32,773 Want as jy het, sê, 'n funksie van die 279 00:15:32,773 --> 00:15:36,064 om te werk op 'n miljoen waardes, as jy weet dat die funksie sal altyd 280 00:15:36,064 --> 00:15:39,280 gee uit dieselfde waarde indien jy voed op 'n sekere value-- 281 00:15:39,280 --> 00:15:43,055 as jy [onhoorbaar] f van 1, f van 2, dan is f van 3 of whatnot-- f van 1 282 00:15:43,055 --> 00:15:45,180 gaan nie uit te skryf na 'n lêer of iets te doen 283 00:15:45,180 --> 00:15:46,850 wat sal die waarde van f2 verander. 284 00:15:46,850 --> 00:15:50,220 Jy kan net verdeel hierdie funksie om 'n miljoen verskillende masjiene of 'n miljoen 285 00:15:50,220 --> 00:15:54,720 verskillende drade of wat ook al, kry al die antwoorde terug, 286 00:15:54,720 --> 00:15:56,900 kry al die terugkeer waardes terug, en dan dit is dit. 287 00:15:56,900 --> 00:15:59,780 So baie maklik om dinge paralleliseer. 288 00:15:59,780 --> 00:16:03,140 >> Die nadeel is dat insette en uitset veral 289 00:16:03,140 --> 00:16:05,720 pas in die tipe stelsel in 'n baie ingewikkelde maniere. 290 00:16:05,720 --> 00:16:09,010 Ons sal nie in daardie reg nou gaan, maar ek u aanmoedig om te kyk na 'n paar hulpbronne 291 00:16:09,010 --> 00:16:11,175 aanlyn as jy wil om te leer oor dit. 292 00:16:11,175 --> 00:16:13,960 293 00:16:13,960 --> 00:16:16,550 >> STEPHEN KREWSON: So tik classes-- en dit 294 00:16:16,550 --> 00:16:21,610 was-- klasse tipes is uitgevind om op te los 295 00:16:21,610 --> 00:16:24,160 'n probleem van operateur oorlading. 296 00:16:24,160 --> 00:16:27,590 So ons wou gelykheid tussen verskillende tipes van die dinge. 297 00:16:27,590 --> 00:16:31,040 Natuurlik, kan ons dink of-- gelykheid tussen numeriese tipes 298 00:16:31,040 --> 00:16:34,720 is baie maklik om te dink oor, maar Wat van gelykheid tussen lyste? 299 00:16:34,720 --> 00:16:37,610 Wat van gelykheid tussen boom been data strukture? 300 00:16:37,610 --> 00:16:43,130 En dit is alles moontlik in Haskell gevolg van die tipe klasse. 301 00:16:43,130 --> 00:16:48,000 >> So as jy 'n sekere data type-- definieer en hier, dit is musikale plekke. 302 00:16:48,000 --> 00:16:50,960 Ons uiteindelik om om 'n paar rekenaar musiek. 303 00:16:50,960 --> 00:16:57,420 So ons het C, C skerp en so aan en so voort. 304 00:16:57,420 --> 00:17:01,080 Hulle behoort aan 'n klomp van die verskillende tipe klasse. 305 00:17:01,080 --> 00:17:03,510 EQ-- hulle behoort aan die tipe EQ klas. 306 00:17:03,510 --> 00:17:06,780 Dit beteken dat hulle ondersteun bedrywighede gelykheid. 307 00:17:06,780 --> 00:17:12,650 Sodat jy kan evalueer of een volgorde van musikale primitiewes 308 00:17:12,650 --> 00:17:15,400 is dieselfde as 'n ander een. 309 00:17:15,400 --> 00:17:17,280 >> Hulle behoort aan die ordinale klas. 310 00:17:17,280 --> 00:17:19,479 Dit beteken daar is 'n bestel hierdie. 311 00:17:19,479 --> 00:17:27,670 D kom nadat C. C skerp kom nadat C as well. 312 00:17:27,670 --> 00:17:29,840 Hulle behoort tot die klas wys, wat beteken dat hulle kan 313 00:17:29,840 --> 00:17:33,000 gedruk om 'n konsole of terminale. 314 00:17:33,000 --> 00:17:36,090 Hulle behoort aan die klas vervat, wat 315 00:17:36,090 --> 00:17:39,770 beteken dat selfs al dit is karakters, 316 00:17:39,770 --> 00:17:45,340 hulle het 'n onderliggende numeriese verteenwoordiging begin by 0 317 00:17:45,340 --> 00:17:48,960 en gaan af deur egter baie dinge is hier, 20 of so, 318 00:17:48,960 --> 00:17:51,770 of 30 of 40, miskien. 319 00:17:51,770 --> 00:17:54,259 >> CONNOR Harris: En toe ons het 'n tipe data 320 00:17:54,259 --> 00:17:57,050 dat derives-- met die navraag "deriving--" 'n sekere tipe klas, 321 00:17:57,050 --> 00:18:01,160 beteken dit dat die samesteller sal probeer outomaties iets te bou. 322 00:18:01,160 --> 00:18:05,120 So miskien sal jy wil definieer 'n kwaliteit anders. 323 00:18:05,120 --> 00:18:09,450 Jy sal wil hê om C skerp definieer as gelyk aan D plat, byvoorbeeld. 324 00:18:09,450 --> 00:18:11,560 Met hierdie konstruksie hier, dink ek nie C skerp 325 00:18:11,560 --> 00:18:14,940 en D plat gelyk wees, want samesteller sal outomaties 326 00:18:14,940 --> 00:18:19,670 sê elke verskillende moontlike waarde is te onderskei van al die ander. 327 00:18:19,670 --> 00:18:22,930 >> Dit is so moontlik om te ignoreer die standaard implementering 328 00:18:22,930 --> 00:18:25,730 van hierdie tipe klasse. 329 00:18:25,730 --> 00:18:28,640 Weereens, kyk na die verwysing indien jy wil om te leer oor dit. 330 00:18:28,640 --> 00:18:31,767 331 00:18:31,767 --> 00:18:33,600 STEPHEN KREWSON: En hier, eintlik, sal hierdie 332 00:18:33,600 --> 00:18:36,930 wees nuttig vir wanneer ons later kodeer. 333 00:18:36,930 --> 00:18:42,150 Ons sien 'n paar van die infix operateurs vir sekwensiële samestelling, 334 00:18:42,150 --> 00:18:46,570 parallel samestelling, en so weer, hierdie plus punte en gelyke tekens 335 00:18:46,570 --> 00:18:48,620 omring deur dubbelpunte. 336 00:18:48,620 --> 00:18:53,330 Dit beteken dat ons hierdie verskillende speel musikale primitiewes die een na die ander. 337 00:18:53,330 --> 00:18:54,590 Dit is sekwensiële samestelling. 338 00:18:54,590 --> 00:18:57,170 >> Of ons kan hulle speel in parallel op dieselfde tyd. 339 00:18:57,170 --> 00:19:05,100 So kan ek 'n musikale waarde, en dan is dit gelyk en dubbelpunte, 340 00:19:05,100 --> 00:19:09,669 infix parallel samestelling operateur, en hulle speel as 'n soort van koord. 341 00:19:09,669 --> 00:19:11,460 En ons gaan om te gebruik wanneer ons saam 342 00:19:11,460 --> 00:19:15,080 ons drom deel met ons bietjie Frere Jacques lied 343 00:19:15,080 --> 00:19:19,460 om hierdie twee rye speel musikale waardes op dieselfde tyd. 344 00:19:19,460 --> 00:19:24,520 345 00:19:24,520 --> 00:19:29,250 >> Currying is-- Curry was verlede Naam van Haskell Curry, wat 346 00:19:29,250 --> 00:19:31,850 beeld Haskell vernoem is. 347 00:19:31,850 --> 00:19:34,330 En dit laat ons 'n nice elegansie wanneer ons 348 00:19:34,330 --> 00:19:36,880 skryf al hierdie verskillende funksies of filters dat ons 349 00:19:36,880 --> 00:19:39,330 gaan kartering wees oor ons lyste. 350 00:19:39,330 --> 00:19:42,810 'N funksie van twee arguments-- f van x en y-- 351 00:19:42,810 --> 00:19:46,630 kan word as f van x toegepas y. 352 00:19:46,630 --> 00:19:49,800 So dit is 'n funksie van een argument dat terug 353 00:19:49,800 --> 00:19:51,240 'n ander funksie van een argument. 354 00:19:51,240 --> 00:19:56,962 So dit beteken dat ons kan karteer n funksie f van x oor lys van y se. 355 00:19:56,962 --> 00:19:58,920 CONNOR Harris: wil gee 'n voorbeeld van hierdie? 356 00:19:58,920 --> 00:19:59,836 STEPHEN KREWSON: Ja. 357 00:19:59,836 --> 00:20:05,390 Ek het 'n voorbeeld hier uit sommige van die dinge wat ons sal skryf. 358 00:20:05,390 --> 00:20:10,500 So herhaal 2-- goed, herhaal sal neem 359 00:20:10,500 --> 00:20:13,040 een waarde wat hoeveel keer om iets te herhaal, 360 00:20:13,040 --> 00:20:16,690 en dan sal dit 'n value-- neem gewoonlik 'n lys of iets. 361 00:20:16,690 --> 00:20:23,450 So hier, ons is kartering herhaal 2 oor 'n ander lys. 362 00:20:23,450 --> 00:20:27,440 >> So as ons karteer herhaal 2, as ons herhaal 2 van toepassing 363 00:20:27,440 --> 00:20:31,890 om die eerste element van hierdie list-- en dit is lyste van musikale phrases-- 364 00:20:31,890 --> 00:20:37,650 sal produseer twee van "jy sleeping--" so jy slaap, slaap jy. 365 00:20:37,650 --> 00:20:40,040 So nou het ons twee. 366 00:20:40,040 --> 00:20:42,570 Maar herhaal neem twee argumente, maar omdat ons 367 00:20:42,570 --> 00:20:47,100 currying en dan kartering, Ons kan herhaal 2 verteenwoordig 368 00:20:47,100 --> 00:20:52,310 as mense wat teruggekeer as 'n funksie van een argument-- net twee keer replicerende. 369 00:20:52,310 --> 00:20:57,010 En dan is ons die toepassing van daardie aan elke element van hierdie lys van frases. 370 00:20:57,010 --> 00:21:01,900 >> En concat is 'n Haskell operasie vir plat te slaan 'n lys. 371 00:21:01,900 --> 00:21:04,400 Omdat herhaal 2 wil produseer 'n lys van lyste. 372 00:21:04,400 --> 00:21:06,660 En dit is hier intermediêre vorm. 373 00:21:06,660 --> 00:21:10,365 En so kan ons dan concat of plat dat uit twee keer. 374 00:21:10,365 --> 00:21:12,240 CONNOR Harris: 'N eenvoudiger voorbeeld van currying, 375 00:21:12,240 --> 00:21:15,323 as jy wil like-- dink f is net 'n vermenigvuldiging funksie wat twee neem 376 00:21:15,323 --> 00:21:16,840 argumente en keer terug van hul produk. 377 00:21:16,840 --> 00:21:19,320 So as jy 'n f 4 5, dit is 20. 378 00:21:19,320 --> 00:21:22,670 Maar jy kan dink van hierdie as also-- jy het 'n funksie f 4 379 00:21:22,670 --> 00:21:25,560 wat neem 'n argument en opbrengste vier keer die argument-- net 380 00:21:25,560 --> 00:21:27,870 gedeeltelike aansoek wat net een argument 4. 381 00:21:27,870 --> 00:21:31,182 En as jy voed f van 4 5, wat sal jy 20 gee. 382 00:21:31,182 --> 00:21:32,890 En dit is 'n eenvoudiger voorbeeld van currying. 383 00:21:32,890 --> 00:21:34,473 Dit is gewoonlik een van die handboek kinders. 384 00:21:34,473 --> 00:21:38,860 385 00:21:38,860 --> 00:21:42,110 >> STEPHEN KREWSON: Lambda uitdrukkings of anonieme funksies 386 00:21:42,110 --> 00:21:47,330 is 'n ander kenmerk Haskell. 387 00:21:47,330 --> 00:21:51,242 So as ons nodig het om 'n sweep bietjie funksie lewe herhaal, 388 00:21:51,242 --> 00:21:52,950 maar sê dit is nie in die standaard biblioteek, 389 00:21:52,950 --> 00:21:56,150 kan ons 'n sintaksis gebruik soortgelyk aan die volgende. 390 00:21:56,150 --> 00:21:58,730 En ons sal wind oor hierdie. 391 00:21:58,730 --> 00:22:02,160 Een ding wat jy sal sien 'n baie in die drom masjien ons die maak van oproepe 392 00:22:02,160 --> 00:22:05,790 om iets genoem filter, wat net soos voorheen, 393 00:22:05,790 --> 00:22:08,185 is 'n afbeelding van 'n funksie oor 'n lys, maar dit is 394 00:22:08,185 --> 00:22:10,260 'n afbeelding van 'n Boole-funksie. 395 00:22:10,260 --> 00:22:13,390 >> Dus het ons hier 'n voorbeeld van 'n 'n anoniem 396 00:22:13,390 --> 00:22:19,150 gedefinieer Boole funksie wat neem net 'n paar waardes. 397 00:22:19,150 --> 00:22:22,990 Dit is nie streng gesproke 'n anonieme funksie. 398 00:22:22,990 --> 00:22:25,850 Maar dit is te definieer met dat sintaksis vir bondigheid, 399 00:22:25,850 --> 00:22:28,007 en dit neem net x module n-- 400 00:22:28,007 --> 00:22:28,840 CONNOR Harris: Ja. 401 00:22:28,840 --> 00:22:31,330 So f is 'n funksie van twee argumente N en P 402 00:22:31,330 --> 00:22:35,440 dat 'n funksie wat op sigself terug 'n funksie van een argument, naamlik x. 403 00:22:35,440 --> 00:22:38,815 404 00:22:38,815 --> 00:22:40,690 STEPHEN KREWSON: Ek Bogenoemde infix operateurs. 405 00:22:40,690 --> 00:22:42,642 Wat is infix operateurs? 406 00:22:42,642 --> 00:22:45,710 Wel, infix operateurs is die normale manier waarop ons bedrywighede verteenwoordig, 407 00:22:45,710 --> 00:22:49,910 sê in mathematics-- 2 plus 2 in plaas van die operateur plus 408 00:22:49,910 --> 00:22:51,202 en dan twee argumente 2 en 2. 409 00:22:51,202 --> 00:22:53,701 CONNOR Harris: Dit is genoem reverse polish notasie, wat 410 00:22:53,701 --> 00:22:55,330 'n term wat ek twyfel enige van julle sal weet. 411 00:22:55,330 --> 00:22:56,288 >> STEPHEN KREWSON: Right. 412 00:22:56,288 --> 00:22:58,290 Reverse polish of voorvoegsel notasie. 413 00:22:58,290 --> 00:23:01,412 Maar Haskell besluit om gebruik infix operateurs. 414 00:23:01,412 --> 00:23:03,120 So dit is 'n paar van die persoonlike diegene wat 415 00:23:03,120 --> 00:23:07,770 gedefinieer vir die Euterpea lig gebring in Haskell. 416 00:23:07,770 --> 00:23:10,730 So was hierdie sekwensiële samestelling. 417 00:23:10,730 --> 00:23:16,340 Dit was parallel samestelling, en dit is truncating parallel samestelling. 418 00:23:16,340 --> 00:23:18,710 En ons sal nodig het dat met ons drom masjien, 419 00:23:18,710 --> 00:23:22,640 want ons sal gebruik om die laaste operateur in daardie klein tuple daar 420 00:23:22,640 --> 00:23:26,330 om die drom masjien speel saam met ons Frere Jacques liedjie. 421 00:23:26,330 --> 00:23:28,650 En ons drom masjien is gaan oneindig wees. 422 00:23:28,650 --> 00:23:30,920 Dit speel net vir ewig. 423 00:23:30,920 --> 00:23:32,692 Maar die Frere Jacques lied is nie. 424 00:23:32,692 --> 00:23:33,510 Dit is nie so lank. 425 00:23:33,510 --> 00:23:36,610 Dit is net 'n paar bars. 426 00:23:36,610 --> 00:23:43,030 Sodat ons na die drom masjien te stop as nodig Sodra die korter musikale waarde kom 427 00:23:43,030 --> 00:23:43,700 tot 'n einde. 428 00:23:43,700 --> 00:23:46,980 En dat infixed operateur is super nuttig met dit. 429 00:23:46,980 --> 00:23:50,090 >> En infix notasie soos dit is soort van mooi, 430 00:23:50,090 --> 00:23:57,095 omdat jy sê 'n funksie soos het quote, wat die afdeling heelgetal gee 431 00:23:57,095 --> 00:24:01,010 van x deur iets else-- jammer, wat moet a en b. 432 00:24:01,010 --> 00:24:04,740 Jy kan dit skryf as 'n kwotasie van b. 433 00:24:04,740 --> 00:24:09,670 So as jy put-- element is nog 'n voorbeeld van hierdie. 434 00:24:09,670 --> 00:24:14,730 x element in sommige lys, as jy dit in Backticks, kan jy dit gebruik. 435 00:24:14,730 --> 00:24:20,400 Selfs al is dit nie 'n simbool soos plus of minus of tye, 436 00:24:20,400 --> 00:24:24,630 kan jy die naam van 'n gebruik funksie soos wat in Backticks 437 00:24:24,630 --> 00:24:27,045 as infix operateur, wat is pretty cool. 438 00:24:27,045 --> 00:24:29,670 CONNOR Harris: Weereens, dit is almal net sintaktiese suiker, regtig. 439 00:24:29,670 --> 00:24:32,310 Dit affekteer nie die kern van taal. 440 00:24:32,310 --> 00:24:37,440 >> STEPHEN KREWSON: So sien ons hier vir die laaste frase van ons Frere Jacques lied, 441 00:24:37,440 --> 00:24:45,740 Ek het 'n paar klein akkoorde of derdes met behulp van die parallelle samestelling 442 00:24:45,740 --> 00:24:46,240 operateur. 443 00:24:46,240 --> 00:24:50,680 444 00:24:50,680 --> 00:24:54,950 Dit is 'n ander manier om te sê sommige van wat ons het net gesê. 445 00:24:54,950 --> 00:24:59,986 So kan jy die kaart funksies een argument oor lyste. 446 00:24:59,986 --> 00:25:02,860 CONNOR Harris: Weereens, verwysings vir Haskell-- inleidende handboeke 447 00:25:02,860 --> 00:25:04,680 sal al hierdie te hê in dit. 448 00:25:04,680 --> 00:25:07,790 >> STEPHEN KREWSON: So hier is 'n mooi sleutel lyn van die stap sequencer 449 00:25:07,790 --> 00:25:12,820 ons sal 'n blik op die gebruik van te neem 'n lys begrip. 450 00:25:12,820 --> 00:25:17,810 En ons sien hier is dat element in vaste operateur in die rug aanhalingstekens. 451 00:25:17,810 --> 00:25:23,030 So as x is 'n element van die lys van x, dan sal ons 'n beroep op slagw funksies. 452 00:25:23,030 --> 00:25:25,100 So slagw is net 'n perkussie-funksie. 453 00:25:25,100 --> 00:25:30,200 Dit neem 'n bietjie waarde p dis deel van die versameling van alle begrensde 454 00:25:30,200 --> 00:25:35,310 die verskillende perkussie klanke wat ons gesien het in 'n vorige skyfie, 455 00:25:35,310 --> 00:25:38,840 en dan gee dit dat duur van 'n kwart noot. 456 00:25:38,840 --> 00:25:43,190 Anders dit gee dit 'n QNR en QNR is net 'n kwart nota rus. 457 00:25:43,190 --> 00:25:44,970 >> So, dit is die opbou van iets mooi. 458 00:25:44,970 --> 00:25:52,110 Ons het 'n lys van die elemente en ons sal loop oor 'n paar van die een lys 459 00:25:52,110 --> 00:25:54,540 tot die maksimum waarde van ons stap sequencer. 460 00:25:54,540 --> 00:25:58,290 En wanneer ons op 'n bepaalde i in dat die lys van die een na die maksimum waarde, 461 00:25:58,290 --> 00:26:02,970 as dit i is 'n lid van hierdie stel geskep in hierdie funksie, 462 00:26:02,970 --> 00:26:06,040 Wel, dan draai ons dit in 'n perkussie noot. 463 00:26:06,040 --> 00:26:10,960 Andersins, het ons net 'n rus, speel wat is om te sê, het ons net stil bly. 464 00:26:10,960 --> 00:26:16,050 En ons kan hier sien dat in hierdie lys begrip sintaksis, 465 00:26:16,050 --> 00:26:20,030 x word bevolk deur hierdie lys gebou een 466 00:26:20,030 --> 00:26:22,462 om die globale omvang van die sequencer. 467 00:26:22,462 --> 00:26:23,295 CONNOR Harris: Ja. 468 00:26:23,295 --> 00:26:26,340 Die basiese sintaks vir lys begripstoetse is 469 00:26:26,340 --> 00:26:30,810 bracket, waarde wat sommige veranderlikes, bar, 470 00:26:30,810 --> 00:26:34,260 moontlike waardes van die veranderlikes hulself, gesluit bracket. 471 00:26:34,260 --> 00:26:38,545 En as jy versamelingskeurdernotasie gedoen het in enige soort van wiskunde klas, 472 00:26:38,545 --> 00:26:45,999 jy dalk 2n sulke gestel N is in of n is in z. 473 00:26:45,999 --> 00:26:48,290 Soortgelyke thing-- hierdie notasie bedoel suggestief te wees 474 00:26:48,290 --> 00:26:49,630 van daardie wiskundige simbole. 475 00:26:49,630 --> 00:26:51,880 STEPHEN KREWSON: en jy kan verskeie predicaten toepassing 476 00:26:51,880 --> 00:26:56,250 en verskeie filters in 'n lys begrip, wat baie mooi. 477 00:26:56,250 --> 00:27:01,800 Algebraïese types-- ons sal nie lank hier vertoef. 478 00:27:01,800 --> 00:27:04,840 Daar is nie 'n goeie idee in Haskell of 'n goeie, duidelike idee 479 00:27:04,840 --> 00:27:10,720 hoe om te neem, sê, 'n standaard parameter om 'n funksie of iets. 480 00:27:10,720 --> 00:27:13,370 In Python, dit is baie maklik. 481 00:27:13,370 --> 00:27:18,460 Jy kan net sê met gelykes op die verklaring van die funksie, 482 00:27:18,460 --> 00:27:21,420 'n standaard waarde in geval geen voorsien. 483 00:27:21,420 --> 00:27:27,010 >> In Haskell, kon jy dalk gebruik miskien die miskien tik, 484 00:27:27,010 --> 00:27:32,190 wat neem óf niks of 'n waarde van net 'n soort. 485 00:27:32,190 --> 00:27:38,630 Sodat ons ontgin dit in die drom masjien sodat ons opsionele volume te gee 486 00:27:38,630 --> 00:27:40,730 parameters aan elk van die drom dele. 487 00:27:40,730 --> 00:27:46,160 488 00:27:46,160 --> 00:27:54,680 So dit gee ons 'n manier om EQ of 'n volume op 'n spesifieke kanaal. 489 00:27:54,680 --> 00:27:56,440 >> CONNOR Harris: In ander Haskell voorbeelde, 490 00:27:56,440 --> 00:28:00,450 jy kan sien dalk gebruik word vir funksies wat kan misluk. 491 00:28:00,450 --> 00:28:03,470 Dit is 'n algemene een. 492 00:28:03,470 --> 00:28:07,010 >> STEPHEN KREWSON: En jy kan lewer 'n soort van fout boodskap as 'n standaard. 493 00:28:07,010 --> 00:28:11,020 En dit is veral handig wanneer jy doen die I / O in Haskell. 494 00:28:11,020 --> 00:28:12,044 Dit kan wees truuks. 495 00:28:12,044 --> 00:28:13,960 CONNOR Harris: Of vir 'n soortgelyke voorbeeld, dink 496 00:28:13,960 --> 00:28:17,460 van 'n funksie wat verdeeldheid behels van 'n parameter wat dalk 0. 497 00:28:17,460 --> 00:28:20,020 En daardie funksie kan terugkeer miskien ook al. 498 00:28:20,020 --> 00:28:22,802 So as daar geen verdeeldheid met 0, dit sal net alles terug te keer. 499 00:28:22,802 --> 00:28:25,010 En as daar is deling deur 0, sal dit niks terug 500 00:28:25,010 --> 00:28:26,910 as 'n manier van sein die fout. 501 00:28:26,910 --> 00:28:30,330 Want 'n mens as gevolg van Haskell se baie streng tik 502 00:28:30,330 --> 00:28:34,100 is dat daar is geen real-- uitsonderings is ongemaklik, basies, 503 00:28:34,100 --> 00:28:36,160 fout hantering is ongemaklik. 504 00:28:36,160 --> 00:28:39,440 En dit is 'n baie algemene manier om dit te doen. 505 00:28:39,440 --> 00:28:42,990 >> STEPHEN KREWSON: So nou kry ons na 'n ander gedagte-buiging ding 506 00:28:42,990 --> 00:28:49,160 oor Haskell, wat is patroon ooreenstem en funksie definisies. 507 00:28:49,160 --> 00:28:53,390 Ek het julle in die laaste skyfie die verklaring van die stap volgorde 508 00:28:53,390 --> 00:28:58,170 funksie, wat 'n waarde het dalk, dan 'n int, dan 'n lys van SY, 509 00:28:58,170 --> 00:29:03,850 dan terug 'n reeks van musiek waardes daar geannoteerde 510 00:29:03,850 --> 00:29:05,375 met beide toonhoogte en volume. 511 00:29:05,375 --> 00:29:08,030 512 00:29:08,030 --> 00:29:11,820 >> So die drie argumente kan wees patroon ooreenstem in die volgende manier. 513 00:29:11,820 --> 00:29:16,660 En ons wil altyd om seker te wees om doen 'n basis geval of uitgang geval eerste. 514 00:29:16,660 --> 00:29:19,690 En dit onderstreping kan net geïnterpreteer 515 00:29:19,690 --> 00:29:22,340 om enige waarde wat is daar beteken. 516 00:29:22,340 --> 00:29:26,580 So as ons 'n oproep om te stap volgorde met 'n paar waarde, sommige ander waarde, 517 00:29:26,580 --> 00:29:32,210 en dan die leë lys wat ons wil om terug te keer is net stilte, rus 0. 518 00:29:32,210 --> 00:29:35,110 >> En in plaas van dat om 'n leë lys of 0, 519 00:29:35,110 --> 00:29:38,150 dit is 'n rus 0, want ons is die hantering van die tipe musiek, 520 00:29:38,150 --> 00:29:43,230 en die leë lys van die musiek tipe is net 'n res van geen duur. 521 00:29:43,230 --> 00:29:45,680 Dit is geen musiek. 522 00:29:45,680 --> 00:29:51,460 En dan sien ons as ons 'n stap volgorde met 'n V vir volume argument, 523 00:29:51,460 --> 00:29:57,290 p vir voorsorgmaatreël instrument argument, en dan 'n lys van x se. 524 00:29:57,290 --> 00:29:58,360 >> Dan 'n paar dinge wat ons doen. 525 00:29:58,360 --> 00:30:01,290 In die besonder, ons pas hierdie lys begrip, 526 00:30:01,290 --> 00:30:05,700 en ons voer 'n paar bedrywighede op die miskien waarde 527 00:30:05,700 --> 00:30:10,050 om dit te omskep in 'n numeriese waarde sodat dit kan dan vervat en gebruik 528 00:30:10,050 --> 00:30:12,300 om die instrument te kies. 529 00:30:12,300 --> 00:30:16,730 Weereens, dit is 'n bietjie bietjie doelbewus inconcise 530 00:30:16,730 --> 00:30:20,580 net om al die vreemde dinge wys wat jy kan doen in Haskell soos jy 531 00:30:20,580 --> 00:30:23,170 'n blik op dit op jou eie tyd. 532 00:30:23,170 --> 00:30:23,802 >> Alles reg. 533 00:30:23,802 --> 00:30:26,010 So ons is uiteindelik om na doen wat ons het om te doen, 534 00:30:26,010 --> 00:30:28,820 wat is maak 'n paar rekenaar musiek. 535 00:30:28,820 --> 00:30:32,250 So ons gaan om te probeer om maak die Frere Jacques liedjie. 536 00:30:32,250 --> 00:30:35,220 So is daar hoeveel frases 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 Groot. 540 00:30:40,460 --> 00:30:42,490 En wat is lekker is dat hulle is almal herhaal 541 00:30:42,490 --> 00:30:46,990 dieselfde bedrag van die tye, wat twee. 542 00:30:46,990 --> 00:30:50,730 >> So het ons vier frases elke herhaal twee keer. 543 00:30:50,730 --> 00:30:53,590 En in die besonder, hulle is in 'n ronde. 544 00:30:53,590 --> 00:30:55,340 En daar is baie, baie maniere om te implementeer 545 00:30:55,340 --> 00:30:57,520 'n ronde wat pret om te doen kan wees. 546 00:30:57,520 --> 00:31:00,260 Ek het dit gedoen in 'n mooi eenvoudige manier hier 547 00:31:00,260 --> 00:31:05,760 wat net die lyn construct-- funksie neem 'n lys van waardes musiek 548 00:31:05,760 --> 00:31:10,390 en draai dit in opeenvolgende samestelling deur die toepassing van daardie sekwensiële samestelling 549 00:31:10,390 --> 00:31:13,000 operateur. 550 00:31:13,000 --> 00:31:19,540 >> En dan vertraag Ek die verskillende dele deur hulle begin met 'n res. 551 00:31:19,540 --> 00:31:22,770 So ek begin met 'n res van twee mate, en dan 'n res van vier maatreëls, 552 00:31:22,770 --> 00:31:26,160 en dan 'n res van ses maatreëls, en dan die ronde 553 00:31:26,160 --> 00:31:32,290 werk, soos ons almal weet hierdie liedjie. 554 00:31:32,290 --> 00:31:37,180 Ons sien twee notas of wysigings van die musiek waardes 555 00:31:37,180 --> 00:31:43,150 wat vervat is in hierdie opeenvolgende reëling van die musiek elemente. 556 00:31:43,150 --> 00:31:44,810 Ons het 'n add volume. 557 00:31:44,810 --> 00:31:48,960 Dit is 'n funksie om te annoteer musiek met 'n bepaalde volume. 558 00:31:48,960 --> 00:31:51,320 Dit is 'n goeie voorbeeld van 'n MIDI sein hardloop 559 00:31:51,320 --> 00:31:57,510 0-127, die sewe stukkies inligting wat uitgevoer kan word. 560 00:31:57,510 --> 00:32:00,650 >> En then-- ons het dit baie kortliks, maar die algemene MIDI 561 00:32:00,650 --> 00:32:02,310 n lys van al die verskillende instrumente. 562 00:32:02,310 --> 00:32:04,450 En daar is nie 'n hele klomp van hulle. 563 00:32:04,450 --> 00:32:11,230 As jy 'n digitale klank werkstasie gebruik, soos Ableton Live of Pro Tools, 564 00:32:11,230 --> 00:32:17,560 daar is 'n ongelooflike groter verskeidenheid van synthesizers en VST instrumente. 565 00:32:17,560 --> 00:32:21,510 Maar die MIDI standaard net het 'n paar, of 'n paar dosyn. 566 00:32:21,510 --> 00:32:22,799 En sommige van hulle is snaaks. 567 00:32:22,799 --> 00:32:25,840 Ek het gedink dit sou pret wees as ons gespeel die instrument die MIDI instrument 568 00:32:25,840 --> 00:32:30,550 helikopter, en dan die volgende pad deur die ronde, 569 00:32:30,550 --> 00:32:37,980 ons het 'n pad synth, en dan van hierdie corny lood vierkante golf synth, 570 00:32:37,980 --> 00:32:44,240 en dan stem modder, wat is 'n bietjie onduidelik op my slegte MIDI 571 00:32:44,240 --> 00:32:46,410 sintetiseerder, maar hulle OK. 572 00:32:46,410 --> 00:32:50,030 >> En dan sien ons hierdie laat en in sintaksis van Haskell, 573 00:32:50,030 --> 00:32:54,030 En dan is ons speel al hierdie dele saam 574 00:32:54,030 --> 00:32:56,265 met die parallel samestelling operateur. 575 00:32:56,265 --> 00:33:00,260 576 00:33:00,260 --> 00:33:02,296 En ons kan waarskynlik toon 'n paar van hierdie. 577 00:33:02,296 --> 00:33:07,674 578 00:33:07,674 --> 00:33:08,340 Hier is die kode. 579 00:33:08,340 --> 00:33:14,960 En jy kan sien in C, sou daar 'n baie van die keel skoonmaak en omgewing 580 00:33:14,960 --> 00:33:19,760 die tafel kode voordat jy kon musiek te maak soos hierdie. 581 00:33:19,760 --> 00:33:22,080 Of enige ander ontwikkeling taal, sou jy waarskynlik 582 00:33:22,080 --> 00:33:27,210 het om met 'n soort van biblioteek of API en alles op, 583 00:33:27,210 --> 00:33:28,725 en dan sal jy het om skoon te maak. 584 00:33:28,725 --> 00:33:33,810 Maar hier in Haskell is, dink ek, sodra jy kry die hang van dit, ongelooflik 585 00:33:33,810 --> 00:33:35,770 leesbare en baie ekspressiewe. 586 00:33:35,770 --> 00:33:38,930 587 00:33:38,930 --> 00:33:43,240 Daar is so die implementering van Frere Jacques. 588 00:33:43,240 --> 00:33:43,740 Alles reg. 589 00:33:43,740 --> 00:33:47,557 Nou wil ons perkussie voeg, en dit is 'n bietjie morsig. 590 00:33:47,557 --> 00:33:49,015 So laat ons neem 'n blik op die skyfies. 591 00:33:49,015 --> 00:33:56,880 592 00:33:56,880 --> 00:34:00,540 So die groot idee is om 'n klomp van die lyste of dele. 593 00:34:00,540 --> 00:34:04,140 Op dié roll-in masjiene, is daar was tipies oor miskien agt 594 00:34:04,140 --> 00:34:08,670 10 ritme of perkussie dele. 595 00:34:08,670 --> 00:34:10,159 En gebruik dan 'n klomp van tegnieke. 596 00:34:10,159 --> 00:34:14,889 En ons het gepraat oor die gebruik van these-- voue, filters, lambda funksies, 597 00:34:14,889 --> 00:34:19,429 gekarteer oor lyste waardes genereer in sommige reeks 1 tot r, r is 16, 598 00:34:19,429 --> 00:34:20,699 of 32 stappe in die sequencer. 599 00:34:20,699 --> 00:34:23,810 600 00:34:23,810 --> 00:34:29,920 >> En dan as daar is 'n waarde in die lys as ons loop deur die sequencer, 601 00:34:29,920 --> 00:34:34,190 loop deur dit oor en oor, dit blyk op daardie noot, 602 00:34:34,190 --> 00:34:36,060 en daardie monster kry veroorsaak. 603 00:34:36,060 --> 00:34:42,810 604 00:34:42,810 --> 00:34:47,110 Hier is al die verskillende maniere weird Ek het met notas te genereer. 605 00:34:47,110 --> 00:34:48,940 Probeer dit op jou eie semi som. 606 00:34:48,940 --> 00:34:50,360 Dit sal cool klink. 607 00:34:50,360 --> 00:34:53,066 608 00:34:53,066 --> 00:34:54,690 Toelaat tyd, sal ons gaan deur middel van hierdie. 609 00:34:54,690 --> 00:34:59,200 Maar vir nou, dink ek Ons moet demo wat ons het. 610 00:34:59,200 --> 00:35:01,380 Kom ons hoop dit gaan OK. 611 00:35:01,380 --> 00:35:02,670 >> So dit is GHCI. 612 00:35:02,670 --> 00:35:06,580 613 00:35:06,580 --> 00:35:09,121 En ons sal 'n lêer te laai Ek het genoem song.lhs, 614 00:35:09,121 --> 00:35:10,620 wat is die lêer ek jou net gewys. 615 00:35:10,620 --> 00:35:11,470 OK, groot. 616 00:35:11,470 --> 00:35:15,010 As Connor vroeër gesê het, dit saamgestel, tik dit nagegaan word, 617 00:35:15,010 --> 00:35:18,380 so ek kan 'n baie makliker asem te haal. 618 00:35:18,380 --> 00:35:20,010 Dit gaan nie om op te blaas op my. 619 00:35:20,010 --> 00:35:22,720 >> Ek wou hê jy iets nuttig om te wys. 620 00:35:22,720 --> 00:35:25,900 Jy kan sien dat 'n module gelaai genoem 50. 621 00:35:25,900 --> 00:35:28,240 Jy kan blaai daardie module. 622 00:35:28,240 --> 00:35:32,092 En dit is so lekker oor doing-- miskien wat 623 00:35:32,092 --> 00:35:34,550 jy doen in Haskell is nie genoem sagteware-ontwikkeling, 624 00:35:34,550 --> 00:35:36,980 maar jy kan 'n baie te doen pret dinge op jou eie. 625 00:35:36,980 --> 00:35:42,410 En die workflow is regtig mooi as in vergelyking met 'n baie ander tale, 626 00:35:42,410 --> 00:35:45,872 omdat jy kan sien in 'n baie leesbare manier wat aangaan. 627 00:35:45,872 --> 00:35:47,830 So sien ons dat ons al hierdie frases, wat 628 00:35:47,830 --> 00:35:53,760 lyste van musiek plekke, en dan sal ons bou hierdie up in iets groter, 629 00:35:53,760 --> 00:35:55,220 wat is 'n musiek song. 630 00:35:55,220 --> 00:35:58,450 Dit is 'n musikale eenheid. 631 00:35:58,450 --> 00:36:05,545 En dan kan ons dit alles speel met 'n funksie genoem speel musiek. 632 00:36:05,545 --> 00:36:09,040 Jy kan hier sien dat down. 633 00:36:09,040 --> 00:36:11,310 Wat net speel. 634 00:36:11,310 --> 00:36:15,040 >> Ek moet say-- ek nie praat oor hierdie dollar teken dat is oral. 635 00:36:15,040 --> 00:36:17,980 Dollar-teken is 'n ander infix operateur. 636 00:36:17,980 --> 00:36:22,500 Maar dit het die laagste voorrang enige operateur, wat effektief 637 00:36:22,500 --> 00:36:24,960 beteken dat alles op die linkerkant van die dollar teken 638 00:36:24,960 --> 00:36:28,460 en die reg van die dollar teken ons gaan om ontslae te evalueer voordat dit. 639 00:36:28,460 --> 00:36:31,430 So dit is soort van soos 'n ander manier van die toevoeging van hakies. 640 00:36:31,430 --> 00:36:33,980 641 00:36:33,980 --> 00:36:36,220 >> CONNOR Harris: Dit is basies funksie komposisie. 642 00:36:36,220 --> 00:36:40,026 En dit verseker dat jy nie have-- as jy het funksies weerskante of infix 643 00:36:40,026 --> 00:36:42,900 operateurs aan weerskante, sal hulle nie assosieer daaroor en gee jou 644 00:36:42,900 --> 00:36:46,030 onverwagte resultate. 645 00:36:46,030 --> 00:36:49,790 >> STEPHEN KREWSON: So ons can-- die gebruik van daardie, ons kan noem. 646 00:36:49,790 --> 00:36:51,415 Eerstens, sal ons dit speel sonder die tromme. 647 00:36:51,415 --> 00:37:00,330 648 00:37:00,330 --> 00:37:03,170 Dit is die helikopter, die MIDI helikopter. 649 00:37:03,170 --> 00:37:05,495 >> [Speel van musiek] 650 00:37:05,495 --> 00:37:08,525 651 00:37:08,525 --> 00:37:09,525 Daar is die vierkante golf. 652 00:37:09,525 --> 00:37:24,520 653 00:37:24,520 --> 00:37:25,490 Die stem modder. 654 00:37:25,490 --> 00:37:27,630 En jy kan regtig gaan wild met hierdie. 655 00:37:27,630 --> 00:37:30,872 Ek pluk 'n mooi eenvoudige een, want ek het geweet ek moet nie byt af 656 00:37:30,872 --> 00:37:31,830 meer as wat ek kan kou. 657 00:37:31,830 --> 00:37:36,460 Hou dit net eenvoudig om die hoofgedagtes te wys. 658 00:37:36,460 --> 00:37:39,952 Maar dan was ek wil, ons het het 'n paar dromme te voeg tot hierdie. 659 00:37:39,952 --> 00:37:41,910 Net omdat dit is 'n bietjie ondeurdringbare, 660 00:37:41,910 --> 00:37:45,790 en ek het nie die gebruik van die Naam van die drom dele, 661 00:37:45,790 --> 00:37:49,490 Ek gekarteer them-- want hulle is deel van daardie versyferde klas, 662 00:37:49,490 --> 00:37:51,500 Ek gekarteer hulle SY. 663 00:37:51,500 --> 00:37:53,120 Een daarvan is soos 'n bas drom. 664 00:37:53,120 --> 00:37:54,370 Zero is so goed. 665 00:37:54,370 --> 00:37:56,000 Sewe is 'n hoë hoed. 666 00:37:56,000 --> 00:38:00,920 En af in die hier waar funksies kry 'n bietjie meer random, 667 00:38:00,920 --> 00:38:02,100 dit is soos 'n conga tromme. 668 00:38:02,100 --> 00:38:08,360 >> So as jy dink miskien 'n about-- prettige manier om 'n drom masjien te implementeer 669 00:38:08,360 --> 00:38:12,830 is baie ordelike gebruik patrone op jou bas drom. 670 00:38:12,830 --> 00:38:17,640 So byvoorbeeld, op te filter oor die lys met alles wat terug gee 671 00:38:17,640 --> 00:38:20,590 'n 1 wanneer dit geneem module 04. 672 00:38:20,590 --> 00:38:27,190 So ek kry 1, 5, 9, 13, so dit 17-- is die eerste pols van elke maat. 673 00:38:27,190 --> 00:38:32,860 >> En dan is dit dieselfde ding verskuif oor twee stappe. 674 00:38:32,860 --> 00:38:33,850 So wat is die offbeat. 675 00:38:33,850 --> 00:38:37,480 So sal dit wees iets soos 'n hoë hoed. 676 00:38:37,480 --> 00:38:39,640 En hier dan weer, af, dit is 'n bietjie random, 677 00:38:39,640 --> 00:38:41,080 want ons doen conga tromme. 678 00:38:41,080 --> 00:38:44,180 En ek het 'n paar maracas af ook hier. 679 00:38:44,180 --> 00:38:50,280 >> So ek kon speel drom masjien te roep, maar dit sou vir ewig gaan 680 00:38:50,280 --> 00:38:53,700 en dit kan begin gryp up al die geheue in my stelsel. 681 00:38:53,700 --> 00:38:57,090 So ek sal hierdie funksie noem speel musiek, wat as ons sal sien, 682 00:38:57,090 --> 00:39:02,020 gebruik die truncating parallel samestelling om ons klein Frere Jacques liedjie te speel 683 00:39:02,020 --> 00:39:04,200 saam met die vreemde drom masjien. 684 00:39:04,200 --> 00:39:06,190 So laat ons neem 'n blik. 685 00:39:06,190 --> 00:39:10,920 En moet asseblief verbeter op my plasing van al die drom dele. 686 00:39:10,920 --> 00:39:13,375 Nie my spesialiteit nie, maar ek het 'n baie pret om dit te doen. 687 00:39:13,375 --> 00:39:17,678 688 00:39:17,678 --> 00:39:20,654 >> [Speel van musiek] 689 00:39:20,654 --> 00:39:52,260 690 00:39:52,260 --> 00:39:56,980 >> So natuurlik, dit is alles 'n bietjie nie as pret 691 00:39:56,980 --> 00:40:01,100 As ons nie kan dit omskep om 'n telling so miskien is dit 692 00:40:01,100 --> 00:40:04,650 vertolk kan word deur 'n menslike performer. 693 00:40:04,650 --> 00:40:06,535 So sal Ek dit nie hier te hardloop. 694 00:40:06,535 --> 00:40:07,910 Ek het reeds gegenereer die lêers. 695 00:40:07,910 --> 00:40:10,280 Jy kan sien dat daar 'n dot LilyPond file-- en dit 696 00:40:10,280 --> 00:40:14,500 sal my segue oor wees om Connor-- en 'n dot MIDI-lêer, 697 00:40:14,500 --> 00:40:18,610 en 'n dot PDF-lêer, en dit is wat LilyPond sal uiteindelik genereer. 698 00:40:18,610 --> 00:40:23,770 >> Maar dit is die skrifte, en ek sal hulle net loop met hulle hulp opsies. 699 00:40:23,770 --> 00:40:28,090 As jy dit op en hardloop met Euterpea, kan jy 'n MIDI-lêer te genereer. 700 00:40:28,090 --> 00:40:31,160 En dan van die MIDI-lêer met hierdie MIDI 2LY program, 701 00:40:31,160 --> 00:40:34,930 jy kan 'n Lily genereer Dam lêer, en dan moet jy 702 00:40:34,930 --> 00:40:37,974 kan 'n PDF van die telling op te wek. 703 00:40:37,974 --> 00:40:39,390 En ons moet 'n blik op te neem. 704 00:40:39,390 --> 00:40:52,599 705 00:40:52,599 --> 00:40:55,140 So Connor sal waarskynlik wys hoe om dit beter te annoteer, 706 00:40:55,140 --> 00:41:02,570 maar dit is Frere Jacques as deur my gegenereer in Euterpea. 707 00:41:02,570 --> 00:41:07,300 Dit is net in C. Ek moet uitgepluis uit te vind wat die hack dit is eintlik in. 708 00:41:07,300 --> 00:41:11,090 Maar dit is die pyplyn vir hoe jy dit met dit te doen. 709 00:41:11,090 --> 00:41:12,950 Kom ons praat meer oor LilyPond. 710 00:41:12,950 --> 00:41:15,780 >> CONNOR Harris: OK Kom ons kyk. 711 00:41:15,780 --> 00:41:19,480 712 00:41:19,480 --> 00:41:21,419 Het jy noem jy leer Haskell? 713 00:41:21,419 --> 00:41:22,460 STEPHEN KREWSON: O ja. 714 00:41:22,460 --> 00:41:23,480 Check jy leer Haskell. 715 00:41:23,480 --> 00:41:24,410 Dit is in die hulpbronne. 716 00:41:24,410 --> 00:41:26,830 Dit is hoe ek begin leer, en dit is 'n groot. 717 00:41:26,830 --> 00:41:27,580 Nie dom leer. 718 00:41:27,580 --> 00:41:28,829 >> CONNOR Harris: So is dit aanlyn. 719 00:41:28,829 --> 00:41:34,760 So 'n man met die naam [onhoorbaar] learnyouahaskell.com, geen spasies. 720 00:41:34,760 --> 00:41:37,065 Grammatika is siek. 721 00:41:37,065 --> 00:41:38,690 STEPHEN KREWSON: Dis geïllustreerde ook. 722 00:41:38,690 --> 00:41:39,440 CONNOR Harris: So, wat is LilyPond? 723 00:41:39,440 --> 00:41:42,480 Dit is 'n verklarende programmeertaal taal vir musiek setwerk. 724 00:41:42,480 --> 00:41:45,480 So declarative-- jy kan dink dinge soos HTML, 725 00:41:45,480 --> 00:41:50,900 waar jy nie sê om HTML nie sê hoe webblaaiers moet 726 00:41:50,900 --> 00:41:52,180 lewer bladsye stap vir stap. 727 00:41:52,180 --> 00:41:54,096 Dit is hierdie net sê is 'n tekstuele beskrywing 728 00:41:54,096 --> 00:41:56,100 van wat jy wil hê dat die bladsy te lyk. 729 00:41:56,100 --> 00:41:59,310 >> En dan is dit ook 'n program wat stel hierdie taal, 730 00:41:59,310 --> 00:42:02,300 of dit sy in lees en dan eintlik doen die setwerk vir jou, 731 00:42:02,300 --> 00:42:05,570 en dit spoeg hierdie wonderlike soek PDF tellings. 732 00:42:05,570 --> 00:42:08,250 Jy kan ook PNG formaat of wat ook al. 733 00:42:08,250 --> 00:42:10,300 'N goeie manier om te dink hiervan is deur analogie 734 00:42:10,300 --> 00:42:16,620 is dat LaTeX is soort van soos LillyPond, maar net gewone setwerk. 735 00:42:16,620 --> 00:42:20,360 So in plaas of-- dit is nie WYSIWYG, wat jy sien 736 00:42:20,360 --> 00:42:22,960 Is wat jy kry, soos, sê Finale is, of Sibelius, 737 00:42:22,960 --> 00:42:27,430 of Microsoft Word, waar jy kan tik in reële tyd en die ontwerp dinge in reële tyd 738 00:42:27,430 --> 00:42:31,340 en kyk veranderinge onmiddellik. 739 00:42:31,340 --> 00:42:32,140 >> Dit is die teks gebaseer is. 740 00:42:32,140 --> 00:42:35,290 Jy moet jou opstel tellings met behulp van 'n aparte program 741 00:42:35,290 --> 00:42:37,090 en uit PDFs later. 742 00:42:37,090 --> 00:42:43,320 Dit is 'n bietjie minder gerieflik vir gebruik as jy 743 00:42:43,320 --> 00:42:46,520 probeer om direk te skryf in 'n telling en jy 744 00:42:46,520 --> 00:42:48,620 probeer om te komponeer op die rekenaar. 745 00:42:48,620 --> 00:42:50,830 Maar daar is 'n baie voordele vir dit. 746 00:42:50,830 --> 00:42:56,110 Een, lyk dit 'n baie mooier, omdat LillyPond kan eintlik 747 00:42:56,110 --> 00:42:58,210 die tyd neem om te doen uitleg besluite behoorlik, 748 00:42:58,210 --> 00:43:02,380 teenstelling Sibelius of Finale, wat het om gedrang algoritmes te maak sodat 749 00:43:02,380 --> 00:43:05,020 dat hulle kan vertoon dinge in real time. 750 00:43:05,020 --> 00:43:07,660 >> So hoekom is LilyPond-- rekenaargrafika is hard. 751 00:43:07,660 --> 00:43:10,535 As jy iets met musiek doen en jy wil tellings uit te skryf, 752 00:43:10,535 --> 00:43:13,900 jy wil nie om te skryf alles deur jouself 753 00:43:13,900 --> 00:43:19,040 begin met hoe om te trek personeel en hoe om te trek notaboeke. 754 00:43:19,040 --> 00:43:21,020 Dit is baie moeilik. Dit is al voorheen gedoen. 755 00:43:21,020 --> 00:43:22,170 Jy is fine. 756 00:43:22,170 --> 00:43:26,200 >> As jy wil Finale of Sibelius gebruik, die lêer formate vir die dinge 757 00:43:26,200 --> 00:43:30,180 is baie ingewikkeld, en jy kan nie hulle regtig programmaties gebruik. 758 00:43:30,180 --> 00:43:35,020 Jy kan oopmaak Sibelius met Finale en gaan na File, Uitvoer as PDF jouself, 759 00:43:35,020 --> 00:43:37,600 Maar jy kan nie regtig noem dat vanuit 'n script. 760 00:43:37,600 --> 00:43:40,440 LillyPond, kan jy bel van dié skrifte. 761 00:43:40,440 --> 00:43:44,397 Jy kan maklik Itereer LillyPond met LaTeX. 762 00:43:44,397 --> 00:43:47,230 Ek sal nie veel tyd om te gaan in hierdie tegnologie op die oomblik, 763 00:43:47,230 --> 00:43:48,321 maar hulle bestaan ​​nie. 764 00:43:48,321 --> 00:43:50,070 As jy wil om te kyk in 'n LillyPond boek, 765 00:43:50,070 --> 00:43:53,760 dit is 'n program wat kom met jou LillyPond verspreiding, 766 00:43:53,760 --> 00:43:57,030 en dit is vir iterating LillyPond fragmente in LaTeX 767 00:43:57,030 --> 00:44:00,340 as jy wil om iets te doen soos 'n groot musiekwetenskap dokument 768 00:44:00,340 --> 00:44:02,289 met voorbeelde, byvoorbeeld. 769 00:44:02,289 --> 00:44:04,580 En dit is 'n goeie vaardigheid lewe as jy iets doen 770 00:44:04,580 --> 00:44:05,770 met musiek, en nie net CS50. 771 00:44:05,770 --> 00:44:09,320 Ek het gebruik LillyPond vir alle van my samestelling projekte 772 00:44:09,320 --> 00:44:11,880 want ek was basies 'n senior in die hoërskool. 773 00:44:11,880 --> 00:44:13,455 >> So hier is 'n paar eenvoudige voorbeelde. 774 00:44:13,455 --> 00:44:17,490 775 00:44:17,490 --> 00:44:21,060 Dit is basies verteenwoordigend van die vlak van die probleme 776 00:44:21,060 --> 00:44:23,481 dat die meeste mense sou face it hulle probeer 777 00:44:23,481 --> 00:44:24,980 om LilyPond gebruik vir eenvoudige projekte. 778 00:44:24,980 --> 00:44:29,519 Die eerste een is die begin om 'n koraal voorspel deur Bach. 779 00:44:29,519 --> 00:44:31,810 Dit onderste een is 'n uittreksel van een van my eie werke, 780 00:44:31,810 --> 00:44:34,650 en dit is net daar om te wys jy dinge soos [onhoorbaar] 781 00:44:34,650 --> 00:44:38,550 om verskeie reëls in dieselfde personeel, hoe liriek undersetting werk. 782 00:44:38,550 --> 00:44:41,350 783 00:44:41,350 --> 00:44:46,110 Liriek ondergrond is 'n ding wat baie maklik om te gebruik vir LilyPond koormusiek. 784 00:44:46,110 --> 00:44:48,814 >> En so dan is daar 'n paar meer ingewikkelde voorbeelde hier. 785 00:44:48,814 --> 00:44:50,980 Al hierdie is gedoen in LilyPond en hulle is haalbaar. 786 00:44:50,980 --> 00:44:55,280 Die eerste uittreksel is uit Deur [onhoorbaar] [onhoorbaar]. 787 00:44:55,280 --> 00:44:58,860 En dit [onhoorbaar] uit 'n stuk vir solo bass 788 00:44:58,860 --> 00:45:03,550 fluit deur [onhoorbaar], wat 'n longtime-- wat 789 00:45:03,550 --> 00:45:07,101 was 'n jarelange lid van die Departement Musiek hier, dink ek. 790 00:45:07,101 --> 00:45:08,600 Ek is nie seker waar hy afgegaan om. 791 00:45:08,600 --> 00:45:12,410 Maar hy die raadgewer van die Harvard was Komponiste Vereniging vir 'n lang tyd. 792 00:45:12,410 --> 00:45:13,530 Wonderlike man. 793 00:45:13,530 --> 00:45:16,920 En hy skryf 'n paar musiek wat baie het ingewikkelde notasie wat LillyPond 794 00:45:16,920 --> 00:45:20,500 kan tog hanteer baie mooi. 795 00:45:20,500 --> 00:45:26,030 >> So net om jou 'n gevoel van gee wat se vermoëns hierdie ding are-- so 796 00:45:26,030 --> 00:45:28,960 die internals van LillyPond is baie ingewikkeld. 797 00:45:28,960 --> 00:45:31,060 En jy kan dit gebruik vir 'n lang tyd, insluitend 798 00:45:31,060 --> 00:45:32,520 vir 'n paar mooi ingewikkeld dinge, sonder om werklik 799 00:45:32,520 --> 00:45:34,060 met 'n baie van hulle weet. 800 00:45:34,060 --> 00:45:38,720 Maar die basiese idee is dat die laagste vlak, die atome van LillyPonds 801 00:45:38,720 --> 00:45:39,970 is die notas. 802 00:45:39,970 --> 00:45:42,761 Die notas bevat 'n konteks genoem stemme. 803 00:45:42,761 --> 00:45:44,510 So die stem konteks ooreenstem basies 804 00:45:44,510 --> 00:45:47,410 om 'n enkele lyn van polifonie. 805 00:45:47,410 --> 00:45:49,410 En dan konteks kan hiërargies vervat 806 00:45:49,410 --> 00:45:53,590 in 'n hoër vlak diegene wat verteenwoordig personeel op die telling 807 00:45:53,590 --> 00:45:56,750 of groter groeperings soos klavier personeel of koor personeel, 808 00:45:56,750 --> 00:45:58,990 en dan uiteindelik hele telling kontekste. 809 00:45:58,990 --> 00:46:02,260 En jy kan eintlik behels verskeie tellings in 'n boek. 810 00:46:02,260 --> 00:46:05,770 >> En elke konteks het 'n aantal aangeheg graveerders. 811 00:46:05,770 --> 00:46:08,340 As jy kyk deur die inhoud van 'n konteks 812 00:46:08,340 --> 00:46:14,410 en druk 'n sekere simbool of 'n sekere klas van simbole as wat nodig is. 813 00:46:14,410 --> 00:46:17,840 So om elke stem konteks, daar is [onhoorbaar] notas 814 00:46:17,840 --> 00:46:24,270 graveur wat is basies 'n funksie of 'n voorwerp wat skryf al die note 815 00:46:24,270 --> 00:46:26,290 koppe op die regte dele van 'n bladsy. 816 00:46:26,290 --> 00:46:29,510 Dan is daar 'n gesplete graveur, wat skryf uit splinters op die personeel. 817 00:46:29,510 --> 00:46:31,517 Dan is daar 'n metronoom merk dat graveur 818 00:46:31,517 --> 00:46:33,100 skryf uit metronoom punte in 'n telling. 819 00:46:33,100 --> 00:46:36,410 En al hierdie pas mooi ver in die hiërargie. 820 00:46:36,410 --> 00:46:39,500 En dit is baie, baie, baie aanpas, wat jy nodig het 821 00:46:39,500 --> 00:46:42,880 as jy wil om dinge soos dat. 822 00:46:42,880 --> 00:46:45,730 >> So al die kontekste het 'n baie verskillende eienskappe 823 00:46:45,730 --> 00:46:52,410 wat jy kan verander vir alles uit die spasiëring verskeie font 824 00:46:52,410 --> 00:46:54,942 keuring tot groottes van die dinge. 825 00:46:54,942 --> 00:46:56,900 As jy wil, selfs doen meer ingewikkeld dinge, 826 00:46:56,900 --> 00:46:59,210 daar is 'n ingeboude skrip taal. 827 00:46:59,210 --> 00:47:01,820 Hulle gebruik skema, wat is dialek van LISP. 828 00:47:01,820 --> 00:47:04,960 Hierdie waarskynlik nie vir jou iets beteken. 829 00:47:04,960 --> 00:47:06,900 Maar basies, 'n skema 'n ander funksionele 830 00:47:06,900 --> 00:47:09,500 programmeertaal, min of meer. 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 Dit is 'n goeie tie-in, dink ek. 834 00:47:15,390 --> 00:47:20,150 En dit is wat gebruik word as 'n onderrigtaal, eintlik, af Mass Ave. By MIT. 835 00:47:20,150 --> 00:47:26,590 En dit is baie handig vir LillyPond vir verskeie tegniese redes. 836 00:47:26,590 --> 00:47:30,317 >> En so as jy wil eenvoudige maak tweaks afhanklik conditionals, 837 00:47:30,317 --> 00:47:32,900 vir example-- daar is sekere toestand van 'n telling wat is ontmoet, 838 00:47:32,900 --> 00:47:36,495 maak veranderings aan die uitleg of whatnot-- dan 839 00:47:36,495 --> 00:47:37,620 daardie fasiliteite is daar. 840 00:47:37,620 --> 00:47:38,667 Hulle is ingewikkeld. 841 00:47:38,667 --> 00:47:40,250 So hier is 'n redelik eenvoudige kode monster. 842 00:47:40,250 --> 00:47:43,810 Dit is vyf lyne. 843 00:47:43,810 --> 00:47:46,120 Basies, ek definieer twee stokke. 844 00:47:46,120 --> 00:47:46,904 Dit is in 3/4. 845 00:47:46,904 --> 00:47:48,695 Die eerste personeel het 'n aangeheg tempo merk, 846 00:47:48,695 --> 00:47:51,110 maar dit is eintlik gaan om voort te gaan om die hele telling, 847 00:47:51,110 --> 00:47:54,960 omdat tempo punte op die telling vlak. 848 00:47:54,960 --> 00:47:59,044 Die metronoom merk graveur verbonde aan konteks aan te teken. 849 00:47:59,044 --> 00:48:01,460 Daar is verskillende sleutels, omdat die [onhoorbaar] graveur 850 00:48:01,460 --> 00:48:02,710 is die personeel verbonde. 851 00:48:02,710 --> 00:48:04,441 Jy kan eintlik doen is. 852 00:48:04,441 --> 00:48:06,190 Die monster wat ek geskryf het, is eintlik in C majeur, 853 00:48:06,190 --> 00:48:07,990 maar dit is net om demonstreer wat jy kan hê 854 00:48:07,990 --> 00:48:09,570 verskillende sleutels in verskillende personeel. 855 00:48:09,570 --> 00:48:15,710 En die basiese sintaks is wat jy skryf daarop name met E, F, G, wat ook al. 856 00:48:15,710 --> 00:48:18,910 As jy wil toevallige doen, jy agtervoegsel IS of ES. 857 00:48:18,910 --> 00:48:22,640 Dit is uit die Nederlandse musikologiese konvensies. 858 00:48:22,640 --> 00:48:28,290 >> En oktaaf ​​spronge doen, moet jy om te gebruik hierdie merk punte, kommas of afkappingsteken. 859 00:48:28,290 --> 00:48:30,580 Die relatiewe beteken net alles wat jy het 'n noot, 860 00:48:30,580 --> 00:48:34,080 dit sal outomaties plaec in die oktaaf ​​naaste aan die vorige een. 861 00:48:34,080 --> 00:48:37,624 En as jy wil meer as spring 'n fifth-- sê 'n vyfde of more-- 862 00:48:37,624 --> 00:48:39,165 dan moet jy die [onhoorbaar] gebruik. 863 00:48:39,165 --> 00:48:42,580 Maar andersins, het jy nie hoef te spesifiseer die oktaaf ​​van elke enkele noot. 864 00:48:42,580 --> 00:48:46,130 >> En relatiewe C, eerste, en C, jy moet net spesifiseer middel C 865 00:48:46,130 --> 00:48:48,630 en base C, veral eerste note. 866 00:48:48,630 --> 00:48:55,020 Dan het jy hierdie personeel wat te organiseer hierdie twee stemme of monsters van musiek, 867 00:48:55,020 --> 00:48:56,730 en jy het 'n telling. 868 00:48:56,730 --> 00:48:58,440 En wat lyk soos hierdie. 869 00:48:58,440 --> 00:49:01,780 870 00:49:01,780 --> 00:49:05,380 >> As jy wil om die tyd te neem kopieer daardie monster van LillyPond 871 00:49:05,380 --> 00:49:07,530 kode op die vorige gly hier af, en jy 872 00:49:07,530 --> 00:49:09,030 kan dit skryf vir jouself LillyPond. 873 00:49:09,030 --> 00:49:11,280 Ek weet ons het iets gekry wat lyk 'n baie soos hierdie. 874 00:49:11,280 --> 00:49:17,236 875 00:49:17,236 --> 00:49:19,610 So is daar 'n ander tegnologie genoem Musiek XML gehandhaaf 876 00:49:19,610 --> 00:49:22,030 deur heeltemal verskillende mense. 877 00:49:22,030 --> 00:49:28,150 XML is 'n tekstuele data structure-- ek moet nie sê data structure-- sê 878 00:49:28,150 --> 00:49:29,580 metafoor kaart soort van. 879 00:49:29,580 --> 00:49:33,800 En dit is ontwerp om te hou hiërargiese data baie goed. 880 00:49:33,800 --> 00:49:37,050 HTML, byvoorbeeld, is 'n tipe van XML. 881 00:49:37,050 --> 00:49:41,090 En jy kan XML vertel omdat hulle het al die hoek en die hoek tussen hakies 882 00:49:41,090 --> 00:49:44,700 bracket slash punte wat wys data velde. 883 00:49:44,700 --> 00:49:47,390 >> Ek het nie 'n kode het voorbeeld uit Musiek XML. 884 00:49:47,390 --> 00:49:50,450 Jy kan dit vind jouself. 885 00:49:50,450 --> 00:49:53,735 Basies, die rede waarom jy dalk wil XML gebruik as die intermediêre fase 886 00:49:53,735 --> 00:49:55,980 is die eerste van alles, dit is 'n wisselaar formaat 887 00:49:55,980 --> 00:50:02,301 vir basies every-- Ek moet sê nie elke, maar 'n baie verskillende telling 888 00:50:02,301 --> 00:50:02,800 skrywers. 889 00:50:02,800 --> 00:50:04,966 So as jy skryf in Musiek XML, nie net kan LillyPond 890 00:50:04,966 --> 00:50:08,080 lees dit met die hulp van hierdie auxilary program genaamd Musiek XML te LY, 891 00:50:08,080 --> 00:50:11,360 maar ook Finale kan lees dit kan Sibelius dit te lees. 892 00:50:11,360 --> 00:50:14,770 Afhangende van hoe jou interne voorwerp hiërargie werk vir wat musiek, 893 00:50:14,770 --> 00:50:18,820 dit dalk makliker wees om uit te skryf om Music XML as om LillyPond 894 00:50:18,820 --> 00:50:22,410 en net staatmaak op Musiek XML om LY om die omskakeling te doen. 895 00:50:22,410 --> 00:50:24,282 >> Ek dink nie [onhoorbaar] het Musiek XML. 896 00:50:24,282 --> 00:50:25,490 STEPHEN KREWSON: Dit maak nie. 897 00:50:25,490 --> 00:50:26,340 Iemand is besig met dit, al is. 898 00:50:26,340 --> 00:50:27,090 >> CONNOR Harris: OK. 899 00:50:27,090 --> 00:50:31,040 Euterpea nie 'n het Musiek XML nog uitset funksie. 900 00:50:31,040 --> 00:50:35,340 As jy wil 'n finale projek idee, Miskien kry in voeling met ouens 901 00:50:35,340 --> 00:50:38,620 dat Stephen weet, en hulle kon jou hulp gebruik. 902 00:50:38,620 --> 00:50:40,992 >> STEPHEN KREWSON: Ek sou graag dat. 903 00:50:40,992 --> 00:50:43,450 CONNOR Harris: Ook, basies, elke programmeertale 904 00:50:43,450 --> 00:50:46,610 dit is wat sy sout werd het reeds 'n XML biblioteek, 905 00:50:46,610 --> 00:50:51,030 sodat jy kan intern sit al van jou musiek in 'n paar voorwerp 906 00:50:51,030 --> 00:50:54,120 dat die XML-biblioteek kan skryf dat minder sou vereis 907 00:50:54,120 --> 00:50:57,470 veranderings aan jou interne struktuur vir watter musiek jy voorwerpe 908 00:50:57,470 --> 00:51:00,310 wil skryf as om dit te skryf direk in LillyPond sou. 909 00:51:00,310 --> 00:51:04,380 Dan net druk dit uit met XML met die XML biblioteke in jou taal, 910 00:51:04,380 --> 00:51:07,260 wat sal verseker dat dit sintakties korrekte en alles, 911 00:51:07,260 --> 00:51:08,720 en sit dit dan LillyPond. 912 00:51:08,720 --> 00:51:11,060 So tegnologie wat jy dalk wil kyk na as jy iets doen 913 00:51:11,060 --> 00:51:11,650 soos hierdie. 914 00:51:11,650 --> 00:51:14,490 915 00:51:14,490 --> 00:51:16,370 >> [Onhoorbaar], 'n ander auxilarry tegnologie. 916 00:51:16,370 --> 00:51:21,700 Dit is basies Tech Werke of Tech Studio vir LillyPond. 917 00:51:21,700 --> 00:51:25,380 So dit bied hulp met sintaksis, met templates 918 00:51:25,380 --> 00:51:28,770 vir verskeie algemene kombinasies van instrumente. 919 00:51:28,770 --> 00:51:32,780 Dit laat gesplete skerm lees so kan jy jou kode het in 'n venster 920 00:51:32,780 --> 00:51:37,350 en in 'n ander PDF venster en Klik op plekke in die PDF 921 00:51:37,350 --> 00:51:40,650 om te spring na die betrokke kolle in jou bronkode. 922 00:51:40,650 --> 00:51:45,330 Dit is meer nuttig as jy eintlik is skriftelik LillyPond lêers jouself 923 00:51:45,330 --> 00:51:47,400 as wanneer jy genereer hulle programmaties. 924 00:51:47,400 --> 00:51:51,230 Maar weereens, dit is iets nuttig om te hê. 925 00:51:51,230 --> 00:51:51,970 >> Groot. 926 00:51:51,970 --> 00:51:55,860 Nog resources-- ek sal net gaan deur hierdie baie vinnig. 927 00:51:55,860 --> 00:52:01,270 LillyPond manuals-- LillyPond het uitstekende dokumentasie op sy webwerf. 928 00:52:01,270 --> 00:52:02,270 Hulle het 'n handleiding. 929 00:52:02,270 --> 00:52:03,478 Hulle het 'n sintaksis verwysing. 930 00:52:03,478 --> 00:52:07,010 Hulle het honderde brokkies vir verskeie klein dingetjies 931 00:52:07,010 --> 00:52:09,930 yo dalk nodig doen om te demonstreer verskeie vermoëns. 932 00:52:09,930 --> 00:52:12,250 As jy wil gebruik die script taal 933 00:52:12,250 --> 00:52:14,740 of maak meer uitgebreide veranderinge, dan is daar 934 00:52:14,740 --> 00:52:16,730 internals verwys op daardie URL. 935 00:52:16,730 --> 00:52:21,950 As jy wil Musiek XML gebruik, is daar ' dat URL, musicxml.com/tutorial. 936 00:52:21,950 --> 00:52:27,960 >> En dan as jy nodig het om te leer skema omdat jy eintlik wil gebruik 937 00:52:27,960 --> 00:52:30,960 die script fasiliteite in LillyPond, dan is daar 'n [onhoorbaar] genoem 938 00:52:30,960 --> 00:52:32,918 Gestruktureerde Interpretasie van rekenaarprogramme, 939 00:52:32,918 --> 00:52:35,820 wat nie net die tweede grootste CS handboek ooit written-- 940 00:52:35,820 --> 00:52:39,770 vind my daarna as jy wil weet wat ek dink die grootste een is-- 941 00:52:39,770 --> 00:52:43,580 maar dit is ook 'n baie goeie inleiding tot die taal behoorlike. 942 00:52:43,580 --> 00:52:46,630 Jy sal nie meer as nodig die eerste paar afdelings. 943 00:52:46,630 --> 00:52:47,827 >> En dit is dit. 944 00:52:47,827 --> 00:52:48,410 Enige vrae? 945 00:52:48,410 --> 00:52:54,068 946 00:52:54,068 --> 00:52:57,972 >> STUDENT: Waar kan ek aflaai jou gegenereer Frere Jacques 947 00:52:57,972 --> 00:53:01,050 so ek kan dit op my iPod? 948 00:53:01,050 --> 00:53:07,574 >> STEPHEN KREWSON: Wel, kan jy skryf uit 'n paar wav lêer in Euterpea. 949 00:53:07,574 --> 00:53:08,490 En jy het die kode. 950 00:53:08,490 --> 00:53:10,000 Dit is op GitHub. 951 00:53:10,000 --> 00:53:15,590 Maak jou eie variasies van Frere Jacques deur CS50 korf gedagte. 952 00:53:15,590 --> 00:53:17,095 Dit sou wonderlik wees. 953 00:53:17,095 --> 00:53:18,220 CONNOR Harris: Iemand anders? 954 00:53:18,220 --> 00:53:20,261 STEPHEN KREWSON: Ons moet 'n beter bass drum, ook. 955 00:53:20,261 --> 00:53:21,935 Dit is regtig 'n slegte. 956 00:53:21,935 --> 00:53:26,565 >> STUDENT: Euterpea het nie net die samestelling kant nie, maar signal-- 957 00:53:26,565 --> 00:53:27,440 STEPHEN KREWSON: Ja. 958 00:53:27,440 --> 00:53:30,100 In werklikheid, die werk wat ek het in Euterpea toe ek 959 00:53:30,100 --> 00:53:33,450 het this-- daar is 'n gradueer kursus by Yale dat 960 00:53:33,450 --> 00:53:35,900 gebruik it-- was op gesonde sintese. 961 00:53:35,900 --> 00:53:39,810 So is daar 'n baie mooi manier met behulp van pyle 962 00:53:39,810 --> 00:53:46,150 en 'n paar van die notasie wat ons gesien het van saam komponeer sein funksies. 963 00:53:46,150 --> 00:53:50,610 In die besonder, die bas vir die meeste van hulle is net 'n eenvoudige sinusgolf. 964 00:53:50,610 --> 00:53:54,240 Maar as jy begin komponeer diegene in vreemde programmatiese maniere, 965 00:53:54,240 --> 00:54:00,010 kan jy gek klank te kry effekte, soos vreemde cascades. 966 00:54:00,010 --> 00:54:04,640 Jy kan baie gritty skep klink met 'n baie modulasie. 967 00:54:04,640 --> 00:54:07,730 >> Ek het 'n projek oor korrel sintese, wat 968 00:54:07,730 --> 00:54:12,290 iewers tussen FM en monsterneming. 969 00:54:12,290 --> 00:54:15,230 Jy neem baie klein, bietjie monsters, en dan 970 00:54:15,230 --> 00:54:20,440 kombineer hulle met 'n soort van modulator en die opbou van 'n ryker klank. 971 00:54:20,440 --> 00:54:24,900 Ons het ook 'n fisiese modellering, so probeer om te dink oor die fisika 972 00:54:24,900 --> 00:54:29,410 en psycho van iets soos 'n basuin, en dink oor die manier waarop 973 00:54:29,410 --> 00:54:32,320 die klank weerkaats die klok van die basuin 974 00:54:32,320 --> 00:54:35,200 en die akoestiek van die kamer en modellering 975 00:54:35,200 --> 00:54:40,195 dat met die basiese ossillators. 976 00:54:40,195 --> 00:54:47,690 977 00:54:47,690 --> 00:54:48,940 CONNOR Harris: Baie dankie. 978 00:54:48,940 --> 00:54:50,140 Dankie vir die kom. 979 00:54:50,140 --> 00:54:52,400 En ek is altyd bereid om te vrae te neem deur 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 Koel. 984 00:55:00,360 --> 00:55:01,667