CONNOR HARRIS: Sveiki. Aš Connor Harris. Aš CS50 CA Harvarde. STEPHEN KREWSON: Aš Stephenas Krewson. Aš už CS50 Jeilio TF. CONNOR HARRIS: Ir mes ketiname kalbėti apie kai technologijų, kad jums gali norite naudoti, jei jus domina daro galutinę projekto ar tikrai nieko su muzika. Mes ketiname būti sutelkiant dėmesį į pirmą A programavimo kalba, vadinama "Haskell. Tai funkcinis kalba, todėl paradigma labai skiriasi nuo C ar PHP arba kitų įpareigojančių kalbos kad jūs naudojote jau, o ypač ant bibliotekoje parašytas Haskell vadinamas Euterpea, kuri gali padėti žmonėms su raštu muzika funkciškai, iš esmės. Steponas padės jums per puikus pavyzdys, kad. Po to, aš jums pristatyti kažkas vadinamas LillyPond, kuris yra už leidybą muzikos technologijas. Tai tarsi kaip LaTeX muzikos, jei kas nors iš jūsų naudojo lateksas matematikos klases arba kitas P rinkinys klasės ar ką turime jums. Ir taip aš duosiu jums, vėlgi, keletas paprastų pavyzdžių, kad ir jus nukreipti į bendrą kryptis geresnius išteklius. STEPHEN KREWSON: Be Be to, mes ją maniau būtų cool įsteigti šiek tiek užuominų link tarp vamzdyno Euterpea sukurtas MIDI failai į LillyPond, todėl mes teikiame kai kurie scenarijai instrukcija padaryti kad yra aprūpinti LillyPond tiesiog laikyti jį atviro kodo ir gauti dujotiekį vyksta. CONNOR HARRIS: Vėlgi, turėtume pabrėžti, Šios dvi technologijos, jums neturi juos naudoti kartu. Jie nėra skirti dirbti kartu, nors jie labai gražiai. STEPHEN KREWSON: Teisė. Ir visiškai nemokama. CONNOR HARRIS: Taigi Padėka, tik skaityti, kad. STEPHEN KREWSON: Tinkamai pažymėti. Dėka šių žmonių. Tai aš svyruos nuo tik akimirkai. Diegimo procesas yra šiek tiek sudėtinga. Mes turime skaityti mane ant GitHub kad jūs galite pažvelgti. Tiesiog rašykite man, jei turite kokių nors klausimų. Bet mes paleisti tai darant prielaidą, kad tai yra darbo visiems. CONNOR HARRIS: Ir jei jūs negalite gauti LillyPond dirbti, ne big deal. Nėra Live kompiliacija, kad bus įtraukti, bent jau savo gale. STEPHEN KREWSON: Haskell ir LillyPond turėtų abu turi montuotojams. Euterpea atsisiųsti kaip paketas, taip toliau ir taip toliau. Taigi mes kalbame apie kompiuterio muzikos. Ir tai tik labai 50.000 pėdų vaizdas. Yra keletas skirtingų jos aspektų. Ir tai yra grubus ir yra ketina paslėpti šiek tiek išsamiau. Bet mes galime galvoti apie ką nors kaip algoritminės kompozicijos, naudojant algoritmus, naudojant kodą, generuoti kai tipo of-- gal savarankiškai panašus seka pastabose, arba gal pastabose pagal tam tikrą suvaržymą. Ir tada tuos galėtų būti atliekama arba aiškinamos su analoginių instrumentų ar kas nors panašaus. Tačiau sudėtis buvo padaryta algoritmiškai. Bet, žinoma, gal iš plotas Kompiuteris Muzika ir skaitmeninės muzikos mes labiau susipažinę su yra skaitmeninis garso sintezė arba skaitmeninis atranka ir skaitmeninio įrašymo. Skaitmeninių priemonių daug yra daroma per skaitmeninio atranka. Tiesą sakant, mes būsime naudojant vieną iš tų, patikimos šrifto bibliotekoje forma vėliau. Bet ten taip pat kažkas vadinamas skaitmeninis sintezė kad išėjo iš vėlai '70s ir į 80-ųjų su Yamaha ir Jonas Chowning Stanfordo daro FM sintezės arba Dažnio moduliavimas sintezė, kur turėjo vežėjas signalas ir moduliuojantis signalas tiek garso spektre. Bet ką mes sutelktas į šiandien yra kažkas vadinamas MIDI, Ir, žinoma, algoritminės kompozicijos. Mes neketiname padaryti priemones, bet mes vietoj ketinate padaryti šiek tiek muzikos, ir tada, kad bus gauti aiškinama kai kurių priemonių, kad yra conformant į Apskritai MIDI standartą. Taigi, kas yra MIDI? Nesiruošiu gauti per giliai į jį, bet MIDI yra duomenų perdavimo protokolas. Tai iš gidu rūšies visoje skirtingų bendrovių ir pramonės organizuoti garsus ar pleistrai. Taigi mes matome, kad ten MIDI standartą visų skirtingų mušamųjų Garsai ir MIDI rekomendacijos visų skirtingų tipų sintezatoriumi arba skirtingų tipų visą priemonę grupės orkestru, pasakyti. Jūs tikriausiai susipažinęs su 0 per 127 MIDI pranešimai. MIDI signalas paprastai yra bitas rodo, ar tai duomenų arba statusas paketas, ir tada ten septynios bitai signalu. Ir tai gali kontroliuoti viskas nuo kiekio su veiksmais ar spaudimo tam tikrą raktą jei jūs grojo su MIDI valdiklis, taip pat, žinoma, raštas. Ir, žinoma, MIDI turi buvo labai naudinga, nes tai būdas vielos kartu arba Ziedlapķēde iš MIDI aparatūros įrenginių krūva. Turiu septynis ar aštuonis atgal į mano namus. Tai bus tikrai sudėtinga, bet tai tikrai galingas. Ir tai tikrai senas. Tai iš ankstyvųjų 80-ųjų, ir tai tikrai gražus ir mažas. CONNOR HARRIS: Taip. Visi klasikinis Nintendo video žaidimai tikriausiai turi MIDI failus muzika, pvz. STEPHEN KREWSON: Štai pavyzdys bendro MIDI, rodo MIDI kaip rūšies bendro protokolą. Ir aš manau, mes galime galvoti iš skirtumas tarp specifikacijos kad turėtų būti kažkas panašaus tai priemonė garsų ir faktinis realizavimas šių priemonių skamba į garso šriftu arba konkretaus MIDI sintezatorius kaip skirtumas tarp gal typeface-- kuris sako, apskritai, tai yra konstrukcija Tai ypač būdas atstovauti characters-- ir ypač šrifto kad turi specifinį dydį ir tembrą, ir ten realizavimas the-- CONNOR HARRIS: Gal geriau būtų palyginimas būti Unicode standartas says-- ji suteikia numeris kiekvienam charakterio, ir tikrai Kiekviena kalba pasaulyje, arba didžioji rinkinys scenarijus kalbos pasaulyje, ir tada yra tie, lydyti į kažką grafinių įvairių šriftų paketai. Ir žinoma, galite galvoti apie MIDI kaip garso Unicode. Ir tai tik of-- didelis srautas sąrašas renginių ir priemonių ir Papuošalą, ir jūs turite turėti atskirą programa, kaip šriftu, teikti, kad į kažkas, kad yra girdimi. STEPHEN KREWSON: Tad kodėl "Haskell? Haskell yra funkcinis programavimas kalba, labai pažengęs, labai skiriasi nuo C, labai skiriasi nuo PHP. Ir mes ketiname pamatyti, kad ten yra Lengva funkcija sudėties Haskell kuris leis mums vėjas per rašyti ar spausdinti aukštyn, perrašymo, kažkas panašaus FRERE Jacques, Šis paprastas daina turi daug dalių, kad į jį yra savaime panašios arba kartoti. Taigi tai bus kai už, kodėl motyvacija mes naudojame Haskell, kurioje funkcijos yra pirmos klasės piliečiai. Ir aš norėjau pratęsti Tai truputį. Tai šiek tiek lengva užrašyti sutartiniais ženklais FRERE Jacques į Haskell. Bet kas, jei mes norėjome pridėti būgno dalį į jį? Ką daryti, jei mes norėjome pabandyti padaryti kažkas panašaus į Roland 808 arba 909 būgno mašina, kur jūs turite apie 16 skirtingų žingsniai? Paprastai tai yra suvokiami kaip 16-pastabose. Ir jūs galite kontroliuoti pasaulio Tempas, ir jūs galite pasirinkti iš skirtingų mušamųjų dalių krūva iš būgno A ploti, įvairių spąstai, atviros ir uždaros aukštos kepurės Dėl šių kanalų rūšiuoti, ir tada jūs galite EQ arba pritaikyti savo apimtis. Ir mes pamatysime gražią kelią Haskell atstovauti šį žingsnį sequencer su visais įvairių cool dalykų Haskell mes galime padaryti su gamybos sąrašai ir filtravimas per sąrašus, kartografavimo per sąrašus, kartografavimo funkcijos per sąrašus. Ir greitai atsiprašymas. Tai labai paviršutiniškas ir pernelyg greitas eskizas kai kurie iš aspektų iš Haskell ir Euterpea, kuris yra domeno-specifinė integruotas kalba parašyta į Haskell muzikinių tipų. Taigi prašome patikrinti kodą internete. Paleiskite GHCI, kuri yra Glazgas Haskell Kompiliatorius vertėją. Ir aš daryti kai tai yra šiek tiek todėl jūs galite pamatyti, kaip tai daroma. Ir tai leidžia jums įkelti su the-- sintaksė yra dvitaškis ir tada komanda. Jūs galite įkelti į failus. Jūs galite naudoti naršyti tų failų pamatyti visas funkcijas, egzistuoja tam tikroje modulyje. Ir tada, kaip matysime, tipus ir rūšis klasės yra toks svarbus Haskell, todėl jūs visada galite check-- ypač Jei dirbate naują DSCL kaip tai, kas yra muzika tipas? Aš žinau apie tai, kaip skaitmeninis tipai dirbti Haskell, bet aš nežinau daug apie muziką. Bet jūs galite ištirti, kaip jie apibrėžta naudojant šią T arba įrašykite komandą ir tada skambina tam tikroje funkcija arba duomenų objektas. CONNOR HARRIS: Taip. Jei manote, kad C ir klingsėti buvo hardass apie tipus, jūs neturite apie Haskell idėją. Šis geras dalykas apie Haskell yra tai, kad jei jūs galite gauti savo kodą sudaryti ir jei Haskell tipo patikrinimus, tai tikriausiai teisinga, nes tipo sistema yra tokia griežta. STEPHEN KREWSON: Taip. Taigi, aš tiesiog noriu eiti through-- ir vėl, tai yra ne daro tai justice-- iš nedaugelio Šio Haskell funkcijos, kurios, bent jau jo creators-- ir jis buvo sukurtas 1980-ųjų pabaigoje pagal krūva žmonių, iš apie 20 komitetas people-- maniau buvo svarbūs. Ir pirmas dalykas, kurį jie išvardyti popieriaus, kad apibūdino Haskell genezę per pirmuosius 20 metų, arba tiek buvo ta, kad tingus. Taigi, ką tai reiškia? Na, tai reiškia, kai mes turime tam tikros rūšies išraiškos, turime ją įvertinti. Ir Haskell tai daro pokalbio pagal poreikį taip arba ne griežtai būdu. Tai yra, jei turime krūva komponentai mūsų išraiškos mes stengiamės atidėti vertinimą iš tų smulkesnių iki absoliutaus paskutinio minute-- tai kol mes iš tikrųjų reikia. Taigi tai means-- kuris yra tikrai cool, ypač jei mes galvoti apie abstrakcijos iš muzikinio žingsnio sequencer. Jūs jį įjungti ir pradėdami veikia žingsnis sequence-- jei jūs kada nors dirbo su būgnu machine-- ir jis tiesiog eina amžinai. Taigi būtų tikrai malonu, jei mes gali mėgdžioti, kad Haskell. Ir mes galime tai padaryti su begalinis vertės, ypač begalinis sąrašus. Tai labai paprasta Norėdami įvesti begalinis sąrašas Haskell. Jūs galite tiesiog naudoti sintaksės žemyn čia, kur jūs matote nuo 1 iki 3, pašalinti 3 1 dot dot, ir kad yra begalinis sąrašas visų natūralių skaičių išplečiant ant kiek jūs galite įsivaizduoti. Noriu pristatyti koncepcija raukšlės karto. Ir vėl, tikslas Šio seminaro nėra sužinoti apie sulankstyto Haskell ar aukštesnės eilės funkcijos. Bet aš tik noriu pristatyti jį į suteikti tikslią prasmę, kaip keistai Haskell yra ir kaip galinga ji yra. Ir visų pirma, mes ketiname be-- kai mes darome mūsų skirtingų būgno dalys, mes ketiname būti manipuliuoti sąrašus numeriai, lankstymo juos į vienas kitą. Ir tai padaryti, mes būti naudojant žemėlapius ir raukšlės. Yra teisė asociatyvus užlenkti, kuris yra tai vienas į dešinę here-- 1 atėmus kiekį, 2 atėmus kiekį, 3 atėmus 0. Ir dėl sintaksė kartus, jūs suteikiate kartus bazinis vertė ir tada operation-- Šiuo atveju to ar skirtumą. Aš parodė abu atvejus. Ir tada ten yra akumuliatorius, kuris kaupiasi per visą sąrašą, Taikant tas operatorius plius arba atėmus, tada kaupti ją. Taigi tai bus the-- jei jis buvo vadinamas su kartus r plius 0, pradedant nuo 0, mes tada Apibendrinant visus į šį sąrašą numeriai. Ir tai yra sąrašas nuo 1 iki 3. CONNOR HARRIS: Taigi įdėti ją kita būdas, susilanksto r trunka tris argumentus. Yra funkcija, kuri Pati trunka du argumentus, tada ten starteris vertė, ir ten vertybių sąrašą. Ir ką jūs darote, yra išgėrėte starteris vertė, pirmoji vertė, įdėti juos į funkciją. Ką jūs gaunate iš, imtis, kad pašarų, kad į funkciją, Antroji vertybė, ką jūs gaunate iš, imtis, kad pašarų, kad į funkcija trečią vertę. Ir tada, jei jūs einate žemyn Visa šiame sąraše tokiu būdu, jūs ketinate gauti galiausiai kai vienaskaitos vertė tai tos pačios rūšies, ką pradėjo out su ir yra tokio paties tipo kaip dalykų sąrašas, o vėliau tai grąža rezultatas kartus R. STEPHEN KREWSON: Taigi, visų pirma, tai yra aukštesnės eilės funkcijos, nes jie vartojate kitą veikia kaip vienas iš argumentų. CONNOR HARRIS: Taip. Jei naudojamas tam tikrų kitų languages-- Žinau R, [nesigirdi] kalba turi tai, vadinamas Sumažinti. Galbūt panašias funkcijas kitomis kalbomis, tiesiog vadinamas skirtingi dalykai. STEPHEN KREWSON: Ir kas malonu apie kartų R šiuo atveju yra tai, kad dangtelis R gali dirbti su begalinis sąrašus. Taigi šioje apačioje, šio P5 yra generuoti pažymi, kad yra įjungtas žingsnio sequencer už kai būgnas dalis, penktas būgno dalis, o gal tai konga Pamiršti ar kažką. Ir tai yra sąmoningai bukas būdas tai rašau, bet tai smagu, nes jis parodo daug dalykų apie Haskell ir Euterpea. Taigi fold R šio colon-- dvitaškis yra tik operatorius, verčia dalykus kartu ant list-- paragino tuščias sąrašas, kuris yra tik tuščios skliausteliuose. Ir aš skambina, kad šiame begalinis sąrašą. Tai iš tikrųjų yra du sąrašai sudedami žemyn čia. Į sąrašą 1 kablelis 6 taškų dot yra 1, 6, 11, 16. Taigi Haskell-- vos keli personažai, jums gali generuoti visą skaičių seka kad yra penki numeriai, išskyrus tempimas ant į begalybę. Ir aš pridėkite į tą tai trumpesnis mažai list-- 3, 8, 21-- tiesiog parodyti jums, kaip jūs galite Jungiant sąrašus. Ir tada aš sulankstyti į save. Ir tai baigiasi tiesiog yra natūra tapatybė operacija, bet tai begalinis. Ir nusimesti R gali padaryti, nes juo tingiai įvertina, kaip ir pirmiau. Jei mes turime A 1 ir A 2 ir 3 mes galime tik laikiklis išjungti visą likusį jo. Tai neveiks atėmus arba pridėjus, bet jis dirbs už šią storosios žarnos tapatybė operacija sąraše. Taigi, kaip mes praktiškai naudoti, kad jei mes turi be galo ilgą sąrašą dalykų? Na, Haskell suteikia iš functions-- daug ir atrodo daugiau į juos, jūsų pačių LAIKĄ_ pavyzdžiui, imtis kurie sako, gerai, mes generuoti šį begalinį sąrašą, bet mes tik ketina imtis tam Taškų IT ir šiame case-- matysime vėliau, šis Mūsų būgnų mašina code-- GM yra tik keletas pasaulio natūra kintamasis žingsnių skaičius į sequencer. Dėl salė mašinų aš parodė jums, tai paprastai 16, bet aš ją įgyvendino su 32. Jis tikrai ne klausimas. Haskell yra grynas, todėl jis turi didelį statinio rašyti, kad Connor užsiminė. Taigi, funkcijos yra matematinis į sense-- jie labiau matematinis kad jie garantuoja ne atidaryti ar pakeisti bet kokios rūšies kintamasis ar atlikti įvesties ir išvesties. Taigi, jei turite tam tikrą funkciją, tai deterministinis. Jis visada sugrįš tas pats vertė programos būklę arba lieka ta pati. Yra, žinoma, monadic išimtys tai, bet tai ne mūsų sritį. CONNOR HARRIS: Taip. Tai reiškia,, nors, yra ten Yra keletas svarbių [nesigirdi] pasekmės tai. Vienas iš jų yra, kad tai labai lengva lygiagretinimui Haskell programas. Nes jei turite, pasakyti, to funkcija turi veikti ant milijono vertes, jei žinote, kad funkcija visada apdalinti tą pačią vertę, jei jūs maitinate tam tikru value-- jei esate [nesigirdi] f 1, f 2, tada f 3 ar whatnot-- f 1 nesiruošia rašyti į failą arba kažką daryti , kad bus pakeisti f2 vertę. Jūs galite tiesiog išskaidyti šią funkciją iki A milijonas įvairių mašinų grupe arba milijono įvairių temas ar kas, gauti visus atsakymus atgal, gauti visas grąžinimo vertybes atgal, ir tada viskas. Taigi labai lengva lygiagretinimui dalykų. Neigiama yra tai, kad įėjimo ir išėjimo ypač tilptų į tipo sistemos labai sudėtingų būdų. Mes neisime į tą dabar, bet aš rekomenduojame jums pažvelgti į kai kurių išteklių internete, jei norite sužinoti apie tai. STEPHEN KREWSON: Taigi įrašykite classes-- ir tai was-- klasių tipų buvo išrastas išspręsti iš operatoriaus perkrovos problema. Taigi, mes norėjo turėti lygias tarp skirtingų tipų dalykus. Žinoma, mes galime galvoti of-- lygybė skaitinių tipų yra labai lengva galvoti apie, bet ką apie lygybės sąrašus? Ką apie lygybės medžių kojos duomenų struktūros? Ir tai yra įmanoma, visi Haskell, nes tipo klases. Taigi, jei jums apibrėžti tam tikrą duomenų type-- ir čia, tai yra muzikos aikštelių. Mes pagaliau gauti tam tikru kompiuteriu muzikai. Taigi, mes turime su C, C Sharp, ir taip toliau ir taip toliau. Jie priklauso krūva įvairus klasės. EQ-- jie priklauso EQ tipo klasėje. Tai reiškia, kad jie palaiko lygybės operacijos. Taigi, galite įvertinti, ar viena seka muzikos primityvų yra tokia pati, kaip kitu. Jie priklauso ORDINAL klasės. Tai reiškia, kad ten yra Rikiavimas į juos. D ateina po C. cis ateina po C taip pat. Jie priklauso klasei parodyti, o tai reiškia, jie gali būti spausdinama konsolės ar terminalą. Jie priklauso klasė išvardijo, kuris tai reiškia, kad nors tai yra simbolių, jie turi pagrindine skaitmeniniai atstovavimas pradedant 0 ir nenukryptų per bet daug dalykų čia, 20 ar taip, arba 30 ar 40, o gal. CONNOR HARRIS: Ir kai mes turime duomenų tipą kad derives-- su šiuo raktažodžiu "deriving--" tam tikro tipo klasė, tai reiškia, kad kompiliatorius bandys statyti kažką automatiškai. Taigi gal jūs norite apibrėžti kokybę skirtingai. Jūs norite nustatyti cis kaip lygus D plokščia, pavyzdžiui. Su šios konstrukcijos čia, aš nemanau, kad cis ir D plokščia bus lygus, nes kompiliatorius automatiškai sako kiekvieną skirtingą galimą vertę skiriasi nuo visų kitų. Taigi, tai yra įmanoma, kad nepaisytų numatytieji diegimas Šių klasių tipų. Vėlgi, pažvelgti į nuorodą, jei norite sužinoti apie tai. STEPHEN KREWSON: Ir čia iš tikrųjų, tai bus būti naudinga, kai mes koduoti vėliau. Matome kai infix operatorių nuosekliam kompozicijos, lygiagrečiai kompozicija, ir taip pirmyn, šie pliusai ir lygios ženklai apsuptas dvitaškius. Tai reiškia, kad mes galime žaisti šių skirtingų Muzikos primityvai vienas po kito. Štai eilės sudėtis. Arba mes galime žaisti juos lygiagrečiai tuo pačiu metu. Taigi aš galiu turėti muzikinį vertę, ir tai prilygsta ir dvitaškius, infix lygiagrečiai sudėtis operatorius, ir žaisti juos kaip styga natūra. Ir mes ketiname naudoti tai, kai mes deriname Mūsų būgno dalis su mūsų mažai Frere Jacques daina žaisti šiuos du sekas Muzikos vertės tuo pačiu metu. Išdirbimas is-- Curry paskutinį kartą buvo Pavadinimas Haskell Curry, kuris Haskell vaizdo pavadintas. Ir tai leidžia mums gražus elegancija, kai mes raštu visa tai skiriasi funkcijas arba filtrai, kad mes bus žemėlapių virš mūsų sąrašus. Dviejų funkcija arguments-- f x ir y-- gali būti atstovaujama kaip f x taikomas y. Taigi, tai funkcijos vienas argumentas, kad grįžta kitas vienas argumentas funkcija. Taigi tai reiškia, kad mes galime susieti funkcija f x per sąrašą Y-aisiais. CONNOR HARRIS: Noriu duoti Tokio pavyzdį? STEPHEN KREWSON: Taip. Turiu pavyzdį čia nuo keletas dalykų, mes rašyti. Taigi atkartoti 2-- gerai, atkartoti užtruks viena vertė, kuri yra kiek kartų atkartoti kažką, ir tada ji imsis value-- paprastai sąrašą ar kažką. Taigi čia mes kartografavimo atkartoti 2 per kitą sąrašą. Taigi, jei mes map atkartoti 2, jei mes atkartoti 2 dalys taikomos į pirmojo elemento šio list-- ir tai yra sąrašai muzikos phrases-- gamins du "Jūs sleeping--" taip miegate, miegate. Taigi dabar mes turime du. Bet pakartoja trunka du argumentai, bet todėl, kad mes išdirbimas ir tada kartografavimo, galime atstovauti atkartoti 2 kaip buvo grąžintas kaip funkcija vienas argument-- tik pakartoti du kartus. Ir tada mes, taikydamos šią kiekvienam elementas šio įrašų sąrašo. Ir CONCAT yra Haskell operacija plokštesnės sąrašą. Kadangi pakartoja 2 valiai gaminti sąrašų sąrašą. Ir tai yra tai tarpinis forma čia. Ir taip, tada mes galime CONCAT ar priploti, kad du kartus. CONNOR HARRIS: Paprastesnis pavyzdys išdirbimas, jei norite like-- įsivaizduoti f yra tik daugyba funkcija, kuri trunka dvi argumentai ir grąžina savo produktą. Taigi, jei turite F 4 5, tai 20. Bet jūs galite galvoti apie tai, kaip also-- turite funkcija F 4 kad mano argumentas ir grįžta keturis kartus tai argument-- tik dalinė programa, kuri tik vienas argumentas 4. Ir jei jūs maitinate f 4 5, kad duos jums 20. Ir tai yra paprastesnis pavyzdys išdirbimas. Tai paprastai yra vienas iš vadovėlių tie. STEPHEN KREWSON: Lambda " išraiškos arba anoniminių funkcijos yra dar vienas "Haskell bruožas. Taigi, jei mes turime pakelti mažai funkcija gyvenimas pakartoja bet sako, kad tai ne standartinis biblioteka, mes galime naudoti sintaksės panašus į kitą. Ir mes vėjas per tai. Vienas dalykas, jūs pamatysite daug ir į būgnų mašina yra mes skambinti kažką vadinama kuri, kaip prieš filtruoti,, yra funkcija kartografavimas per sąrašą, tačiau tai iš Būlio funkcija žemėlapių. Taigi, mes turime čia pavyzdį iš Kurių anonimiškai apibrėžta Bulio funkcija, tereikia pora vertybes. Tai nėra griežtai kalbant anoniminis funkcija. Bet tai apibrėžti su kad sintaksė glaustumo, ir tai tik mano x modulį n-- CONNOR HARRIS: Taip. Taigi f yra funkcija du argumentai n ir p kad grąžina funkcija, kuri pati per vieną argumentas funkcija, būtent, x. STEPHEN KREWSON: Aš minėtų infix operatoriai. Kas yra infix operatorių? Na, infix operatoriai yra normalus būdas mes atstovaujame operacijas, pasakyti, kad mathematics-- 2 plius 2, o ne nuo operatoriaus plius ir tada du argumentai 2 ir 2. CONNOR HARRIS: Tai vadinama pakeisti lako notacijos, kuris yra terminas abejoju kas nors iš jūsų žinos. STEPHEN KREWSON: Teisė. Atvirkštinė lako ar priešdėlio notacijos. Bet Haskell nusprendė naudoti infix operatorius. Taigi tai tik keletas pasirinktiniai tie, kurie yra apibrėžiama Euterpea DSCL į Haskell. Taigi tai buvo nuoseklus sudėtis. Tai buvo lygiagrečiai kompozicija, ir tai buvo nutraukiant lygiagrečiai sudėtį. Ir mes turime, kad mūsų būgnų mašina, nes mes naudosime paskutinis operatorius, kad mažai kortežą ten žaisti būgnų mašina kartu mūsų Frere Jacques daina. Ir mūsų būgnų mašina yra bus begalinis. Jis tiesiog groja amžinai. Bet Frere Jacques daina nėra. Tai nereiškia, kad ilgai. Tai tik keli barai. Taigi, mes turime sustabdyti būgnų mašina, kaip tik trumpesnis muzikinė vertė ateina į pabaigą. Ir tai infixed operatorius yra super naudingas, kad. Ir Iestiprināt žymėjimas kaip tai rūšies gražus, nes sako, kad jūs turite kaip funkcija citata, kuri suteikia sveikasis padalinį x kažką else-- Atsiprašome, kad turėtų būti a ir b. Jūs galite rašyti jį kaip b citata. Taigi, jei jūs put-- elementas yra kitą pavyzdys. x elementas tikru sąrašą, jei jūs įtraukėte jį atvirkštiniai apostrofai, galite jį naudoti. Nors tai ne simbolis kaip plius ar minus ar laikais, galite naudoti pavadinimo funkcionuoja kaip kad atvirkštiniai apostrofai kaip infix operatoriaus, kuris yra gana kietas. CONNOR HARRIS: Vėlgi, tai yra visi tik sintaksinė cukraus, tikrai. Tai neturi įtakos kalbos branduolį. STEPHEN KREWSON: Taigi čia matome, kad paskutinis sakinys mūsų Frere Jacques daina, Aš grojo kai mažai akordai arba trečdaliai naudojant lygiagretų sudėtį operatorius. Tai dar vienas būdas pasakyti kai kas mes ką tik buvo sakoma. Taigi galite map funkcijas vieno argumento per sąrašus. CONNOR HARRIS: Vėlgi, nuorodos už Haskell-- įvadinių vadovėlių turės visa tai į jį. STEPHEN KREWSON: Taigi čia yra gana pagrindinis linija žingsnio sequencer mes priimsime naudojant išvaizdą sąrašas supratimas. Ir mes matome, kad čia yra elementas fiksuotoje operatoriaus nugaros kabučių. Taigi, jei x yra iš sąrašo elementas x 's, tada mes iškviesti perc funkcijas. Taigi perc yra tik perkusija funkcija. Tai užtrunka šiek vertės psl, kad yra dalis apribotoje rinkinio visi skirtingų mušamųjų garsai kad mes matėme ankstesniame skaidrę, ir tada jis suteikia, kad trukmė ketvirtį dėmesį. Dar ji suteikia jai QNR ir QNR yra tik ketvirtadalis pastaba poilsio. Taigi tai yra kurti kažką gražaus. Mes turime elementų sąrašą ir Mes kilpa per tam tikrą iš vieno sąrašo iki max vertės mūsų žingsnio sequencer. Ir kai mes tam tikru i kad vieno iki max vertės, sąrašas jei, kad i yra šio nario rinkinys sukurtas šią funkciją, gerai, tada mes savo ruožtu ją į mušamųjų dėmesį. Priešingu atveju, mes tiesiog žaisti pailsėti, kuris Kitaip tariant, mes tiesiog tylėti. Ir mes galime pamatyti čia, kad Šis sąrašas supratimas sintaksė, x yra apgyvendintos tai Sąrašas pastatyti vieną pasaulinės dydžio sekwensera. CONNOR HARRIS: Taip. Pagrindinis sintaksė Sąrašas comprehensions yra laikiklis, vertė įtraukiant kai kintamieji, baras, Galimos reikšmės kintamųjų patys, uždarytas laikiklį. Ir jei jūs padaryti nustatyti statybininkas notacijos bet Matematikos klasės rūšiuoti, jums gali tekti nustatyti 2n tokių kad n yra arba n yra z. Panašus thing-- šį formatą yra skirtas būti įtaigus tos matematinės žymėjimo. STEPHEN KREWSON: ir jūs galite taikyti kelis predikatai ir daug filtrai sąrašą supratimas, kuris yra gana gražus. Algebrinė types-- mes nebus svyruos ilgai čia. Čia nėra geras samprata Haskell ar geras, akivaizdu samprata kaip priimti, tarkim, nevykdymo parametras funkcijos ar kažką. Be Python, tai yra gana lengva. Jūs galite tiesiog pasakyti Lygu Iš funkcija deklaracija, numatytoji reikšmė atveju nė tiekiamas. Be Haskell, galite gal naudoti gal gal tipo, kuris trunka arba nieko arba vertę, kuri yra tipo tik. Taigi, mes išnaudoti tai būgno mašinos leisti mums suteikti papildomą apimtį parametrai kiekvienam iš būgno dalių. Taigi, kad suteikia mums turėti EQ būdas arba tam tikrame kanale apimtis. CONNOR HARRIS: Be kiti Haskell pavyzdžiai, jūs galite pamatyti gal naudojama funkcijos, kurios gali žlugti. Tai yra bendra vienas. STEPHEN KREWSON: Ir galite pateikti kai klaidos pranešimą rūšiuoti kaip numatytąjį. Ir tai ypač patogu, kai darote I / O į Haskell. Tai gali būti gudrybės. CONNOR HARRIS: ar už Panašus pavyzdys, manau, iš funkcijos, kuri apima dalijimąsi parametro, kuri gali būti 0. Ir tai funkcija galėtų grįžti gal dar ką nors. Taigi, jei nėra kvadratas 0, jis grįš tik ką. Ir jei yra skaidymas 0, tai bus nieko grįžti kaip signalizacijos klaidą būdu. Nes viena pasekmė Haskell anketa labai griežti rašyti yra tai, kad nėra real-- Išimtys yra nepatogios, iš esmės, klaida tvarkymas yra nepatogu. Ir tai yra vienas labai paplitęs būdas tai daryti. STEPHEN KREWSON: Taigi, dabar mes gauname kitam proto-lenkimo dalykas apie Haskell, kuri yra modelio Identiški ir funkcijų apibrėžimai. Aš parodžiau jums paskutinio masteliu deklaracija žingsnio seka funkcija, kuri paėmė gal vertę, tada int, tada iš int sąrašas, tada grąžina seka Muzika vertės nėra komentuojami tiek aikštelėje ir apimties. Taigi šie trys argumentai gali būti modelis atitiko tokiu būdu. Ir mes visada norime būti tikri, kad padaryti pirmiausia bazinę bylą arba EXIT bylą. Ir šie pabraukimo tiesiog gali būti aiškinama reiškia kokią nors vertę, kad ten. Taigi, jei mes gauname skambutį žingsnis seka su tam tikru vertės, kai kurios kitos vertės, ir tada tuščia sąrašas, ką mes norime grįžti tik tyla, poilsio 0. Ir vietoj, kad yra tuščias sąrašą arba 0, tai likusi 0, nes mes susijusius su muzikos rūšis, ir tuščia sąrašas muzika tipas yra tiesiog be trukmę poilsio. Tai ne muzika. Ir tada mes pamatyti, jei mes gauname dar vieną žingsnį sekoje V už tūrio argumentas, P Atsargumo priemonės argumentas, tada iš x sąrašą. Tada mes ką nors kita. Visų pirma, mes taikyti Šis sąrašas supratimas, ir mes atlikti kai kurias operacijas gal vertės ją paversti skaitinę reikšmę taip, kad ji galėtų būti tada išvardijo ir naudojami pasirinkti priemonę. Vėl, tai yra šiek tiek tiek sąmoningai inconcise tiesiog parodyti visus keistus dalykus jūs galite padaryti Haskell, kaip jums į ją pažvelgti į savo laiką. Gerai. Taigi mes pagaliau gauti su daryti tai, ką mes, nustatytus siekiant daryti, kuris yra padaryti šiek tiek kompiuterinę muziką. Taigi mes ketiname pabandyti padaryti Frere Jacques dainą. Taigi yra kiek frazių FRERE Jacques? Keturi. Didysis. Ir kas malonu yra tai, kad jie visi kartojami ta pati suma kartų, kuris yra du. Taigi, mes turime keturis frazės kiekvienas pakartota du kartus. Ir visų pirma, jie yra apvalios. Ir čia yra daug tokių, daug būdų, kaip įgyvendinti apvalus, kad gali būti smagu daryti. Aš padariau jį gana paprastas būdas čia kuris yra tiesiog construct-- liniją funkcija užima muzikos vertybių sąrašą ir paverčia jį į eilės sudėties taikant šią eilės sudėtį operatorius. Ir tada aš atidėti skirtingų dalių padarydami jas pradėti su poilsio. Taigi, aš pradėti su dviejų priemonių poilsio, ir tada iš keturių priemonių, poilsis, ir tada iš šešių poilsio priemonės, ir tada apvalios veikia, kaip mes visi žinome šią dainą. Mes matome dvi komentarus arba modifikacijos muzikos vertybių kurios yra pateiktos ši nuosekliųjų sutvarkome muzikos elementų. Mes turime pridėti apimtis. Tai yra funkcija komentuoti muzikos su konkrečiu apimties. Tai yra geras pavyzdys iš MIDI signalas veikia nuo 0 iki 127, septynios bitai informacija, kuri gali būti atliekamas. Ir then-- matėme ją labai ir trumpai, tačiau bendra MIDI sąrašas visų skirtingų priemonių. Ir ten ne visai daug iš jų. Jei naudojate skaitmeninę garso stotis, kaip Ableton Live arba Pro Tools, ten yra neįtikėtinai įvairesnių iš sintezatorių ir VST instrumentų. Bet tik MIDI standartą turi keletą ar keliasdešimt. Ir kai kurie iš jų yra juokinga. Aš maniau, kad būtų smagu, jei mes žaidėme priemonė MIDI instrumentas Sraigtasparnis, ir tada Kitas būdas, per raundą, Mes padarėme padas sintezatorius, ir tada, tai banaliai švino stačiakampės bangos synth, ir tada balso sunktis, kurie yra šiek tiek neryškus mano blogas MIDI sintezatorius, bet jie Gerai. Ir tada mes matome šį let ir sintaksės nuo Haskell, ir tada mes žaisti Visos šios dalys kartu su lygiagrečiai sudėties operatorius. Ir mes turbūt galėtų parodyti kai apie tai. Štai kodas. Ir jūs galite pamatyti C, ten būčiau daug gerklės kliringo ir nustatymas Lentelėje kodas prieš jus gali kurti muziką, kaip šis. Arba bet kokia kita programavimo kalba, jūs tikriausiai turi bendrauti su kažkokia bibliotekos arba API ir nustatyti viską aukštyn, ir tada jūs turite išvalyti. Bet čia Haskell, manau, kai gausite pakabinti jį, neįtikėtinai skaitoma ir labai išraiškingas. Taigi yra įgyvendinimas iš FRERE Jacques. Gerai. Dabar mes norime pridėti perkusija, ir tai yra šiek tiek Messier. Taigi leiskite pažvelgti skaidrių išvaizdą. Taigi didelis idėja yra padaryti iš sąrašų arba jų dalių krūva. Remdamasis šiais gyvūnais mašinos, ten paprastai buvo apie gal aštuonių 10 ritmą arba mušamųjų dalių. Ir tada naudoti įvairius metodus, krūva. Ir mes kalbėjome apie these-- naudojant susilanksto, filtrai, Lambda funkcijų, priskirti daugiau nei sąrašus generuoti vertybes kai nuo 1 iki R, R yra 16, arba 32 žingsniai sequencer. Ir tada, jei yra vertybė tame sąraše kaip mes dirbate per sequencer, veikia per jį vėl ir daugiau, ji atsigręžia į šią pastabą, ir kad mėginys bus užfiksuojamas. Čia yra visi skirtingi keistam būdai Aš atėjau su generuoti pastabas. Pabandykite jį savo pusiau suma. Tai bus skamba kietas. Laikas leisti, mes pereiti per tai. Bet dabar, manau, turėtume demo, ką turime. Tikėkimės tai eina Gerai. Taigi tai yra GHCI. Ir mes įkelti failą Aš šaukiau song.lhs, kuris yra bylos Aš tiesiog parodė jums. Gerai, puiku. Kaip Connor sakė anksčiau, parengta, ji tipo patikrinti, todėl galiu kvėpuoti daug lengviau. Jis nesiruošia susprogdinti ant manęs. Aš noriu parodyti jums kažką naudingo. Jūs galite pamatyti, kad modulis pakrautas vadinamas 50. Jūs galite naršyti tą modulį. Ir tai taip malonu apie doing-- gal kas Jūs darote Haskell nėra vadinama programinės įrangos kūrimas, bet jūs galite padaryti daug atrakcionus savo. Ir darbo eiga yra tikrai gražus, kaip palyginti su kitų kalbomis daug, nes jūs galite pamatyti tikrai skaitoma būdas, kas vyksta. Taigi matome, kad turime Visos šios frazės, kurios yra sąrašai muzikos aikštelės, ir tada mes statyti jų iki į kažką didesnio, kuri yra muzikos daina. Tai muzikinis vienetas. Ir tada mes galime žaisti visa tai su funkcija vadinama klausytis muzikos. Galite matyti, kad žemyn čia. Kuris yra tiesiog žaisti. Turėčiau say-- aš ne kalbėti apie Ši doleris ženklas, kad visur. Dolerio ženklas yra dar Iestiprināt operatorius. Bet tai yra mažiausias pirmenybė Bet operatorius, kuris efektyviai reiškia, kad viską dolerio ženklas kairėje o dolerio ženklas teisę, mes ketiname gauti įvertintas prieš jį. Taigi, tai tarsi kita būdas pridėti skliaustų. CONNOR HARRIS: Tai iš esmės funkcija sudėtis. Ir tai užtikrina, kad jūs neturite have-- jei turite funkcijas abiejų pusių arba infix operatoriai abiejose pusėse, jie nebus susieti per jį ir duoti jums netikėti rezultatai. STEPHEN KREWSON: Taigi mes can-- naudojant, kad mes galime skambinti. Pirma, mes jį žaisti be būgnų. Štai sraigtasparnis, Midi sraigtasparnis. [Muzikos grojimo] Yra kvadratinės bangos. Balso išskyros. Ir jūs tikrai gali eiti laukinių tai. Paėmiau gana paprasta, nes aš žinojau, neturėtų atsikąsti daugiau, nei galėjau kramtyti. Tiesiog laikyti jį gana paprasta parodyti pagrindinius idėjas. Bet tada aš buvo, pavyzdžiui, mes turiu pridėti keletą būgnus tai. Tiesiog todėl, kad tai yra šiek tiek nepereinamas, ir aš ne naudoti Pavadinimas būgnų dalys, Aš priskirti them--, nes jie dalis, kad juos išvardijant klases, Aš priskirti juos int. Vienas iš jų yra tarsi būgno. Nulis, taip pat. Septynios yra aukštos skrybėlę. Ir žemyn čia, kur funkcijos gauti šiek tiek daugiau atsitiktinių, tai kaip konga būgnai. Taigi, jei jūs manote about-- gal įdomus būdas įgyvendinti būgnų mašina yra naudoti labai tvarkingai modeliai jūsų būgno. Taigi, pavyzdžiui, ant filtravimo virš sąrašas su viskuo, kuri suteikia atgal A 1, kai jis ėmėsi modulis 04. Taigi gaunu 1, 5, 9, 13, 17-- todėl šis yra pirmasis plakimas kiekvieną priemonę. Ir tada tai yra tas pats dalykas perėjo per du žingsnius. Taigi tai toks nestandartinių. Taigi, tai būtų kažkas panašaus aukšto skrybėlę. Ir tada vėl žemyn čia tai šiek tiek atsitiktinai, nes mes darome konga būgnai. Ir aš turiu keletą marakasais žemyn čia. Taigi galėčiau skambinti play būgnų mašina, bet tai tęstis amžinai, ir jis gali pradėti greiferiniai iki visi mano sistemos atminties. Taigi aš kviesiu šią funkciją groti muziką, kuri, kaip matysime, naudoti trumpinimą lygiagrečiai sudėtį Kad galėtumėte žaisti mūsų mažai Frere Jacques dainą kartu su šiuo keistai būgnų mašina. Taigi leiskite pažvelgti. Ir prašome pagerinti savo išdėstymas visų būgno dalių. Ne mano specialybė, tačiau aš turėjo smagi daro. [Muzikos grojimo] Taigi, žinoma, tai yra all šiek tiek ne taip smagu jei mes negalime konvertuoti jį į rezultatą, tai gal ją gali būti aiškinamas pagal žmogaus atlikėjas. Taigi aš ne paleisti jį čia. Aš jau generuoja failus. Jūs galite pamatyti, kad yra dot LilyPond file-- ir tai bus mano Segue perkelti į Connor-- ir taškas MIDI failą, ir taškas PDF failą, o tai, ką LilyPond galiausiai generuoti. Tačiau tai yra tie scenarijai, ir aš tiesiog paleisti juos su jų pagalba variantų. Jei jūs gaunate tai ir veikia su Euterpea, galite sukurti MIDI failą. Ir tada iš MIDI failą su šiuo MIDI 2LY programos, galite sukurti Lily Tvenkinys failą, ir tada jūs gali generuoti komandos PDF. Ir mes turėtume atsižvelgti į tai žiūrėti. Taigi Connor tikriausiai rodo jums, kaip komentuoti tai geriau, bet tai Frere Žakas kaip generuoja man Euterpea. Tai tiesiog C turėčiau jau suprato , ką nulaužti tai iš tikrųjų. Bet, kad yra skirtas vamzdynas kaip jūs darote, kad su tuo. Pakalbėkime daugiau apie LilyPond. CONNOR HARRIS: Gerai Pažiūrėkime. Ar jūs paminėti Sužinokite You Haskell? STEPHEN KREWSON: Oh yeah. Check out Sužinokite Jums Haskell. Tai į išteklius. Štai kaip aš pradėjau mokymosi, ir tai puiku. Ne kvailas mokymąsi. CONNOR HARRIS: Taigi tai internete. Taigi vyrukas vardu [nesigirdi] learnyouahaskell.com, be tarpų. Gramatika yra ligonis. STEPHEN KREWSON: Tai iliustruotas, taip pat. CONNOR HARRIS: Taigi, kas yra LilyPond? Tai deklaratyvi programavimo kalbos muzikos leidybą. Taigi declarative-- galite galvoti apie tokius dalykus kaip HTML kur jūs nesate saying-- HTML nesako, kaip žiniatinklio naršyklės turėtų teikiantiems puslapiai žingsnis po žingsnio. Tai tiesiog pasakyti tai yra tekstinė aprašymas ką norite puslapis atrodyti. Ir tada jis taip pat programa kad kaupia šią kalbą, ar jis perskaitė savo ir tada iš tikrųjų veikia Tekstų rinkimas už jus, ir jis išspjauna juos puikus ieškote PDF balus. Jūs taip pat galite gauti PNG formatu ar whatever. Geras būdas galvoti tai yra analogiškai yra tai, kad LaTeX yra tarsi LillyPond, bet tik įprastą tekstų. Taigi vietoj of-- tai ne WYSIWYG, ką matote Ar ką jūs gaunate, kaip, tarkim, Finale yra arba Sibelijaus, arba "Microsoft Word", kur galite įvesti realiu laiku ir projektai dalykų realiu laiku ir pamatyti pokyčius akimirksniu. Tai tekstinis. Jūs turite sukompiliuoti savo balų, naudojant atskirą programą ir išeiti PDF vėliau. Tai yra šiek tiek mažesnis patogu naudoti, jei esate bando rašyti tiesiai į rezultatą ir jūs bando sukomponuoti kompiuteryje. Tačiau yra daug privalumų už jį. Vienas iš jų, ji atrodo daug gražiau, nes LillyPond tikrųjų gali laiko tai padaryti išdėstymo sprendimai tinkamai skirtingai nuo Sibelius ar Finale, kuris turi kad pažeista algoritmus taip , kad jie gali rodyti viskas realiu laiku. Tad kodėl LilyPond-- kompiuterinė grafika yra sunku. Jei jūs darote ką nors su muzika ir norite rašyti balus, jūs nenorite rašyti iš visko sau pradedant, kaip atkreipti štabų ir kaip padaryti bloknotai. Tai labai sunku. Tai buvo daroma anksčiau. Jūs gerai. Jei norite naudoti Finale ar Sibelius, failų formatai tų dalykų, yra labai sudėtinga, ir jūs negalite tikrai naudoti juos programiškai. Jūs galite atverti Sibelius su Finale ir eiti į File, Eksportas kaip PDF sau, bet jūs tikrai negali skambinti, kad iš scenarijų. LillyPond, galite skambinti iš tų scenarijų. Jūs galite lengvai pakartoti LillyPond lateksu. Aš ne, kad daug laiko eiti į šias technologijas dabar, tačiau jie egzistuoja. Jei norite ieškoti į LillyPond knygos tai programa, kuri ateina su Jūsų LillyPond platinimas, ir tai už Iteracja LillyPond fragmentai į LaTeX Jei norite padaryti kažką kaip didelis Muzikologijos dokumento su pavyzdžiuose. Ir tai yra geras įgūdžių gyvenimą, jei jūs darote ką nors su muzika, o ne tik CS50. Aš naudojau LillyPond visiems mano sudėties projektus nes buvau iš esmės vyresnysis vidurinėje mokykloje. Taigi, čia yra keletas paprastų pavyzdžių. Tai iš esmės atstovas iš sunkumų lygiu kad dauguma žmonių būtų Pripažinkime jie bando naudoti LilyPond paprastų projektų. Tai pirmasis yra pradžia į choralas preliudija Bacho. Tai apatinė viena ištrauka viena iš mano pačių darbų, ir tai tik tam, kad parodyti, jūs tokie dalykai kaip [nesigirdi] išleisti keletą eilučių toje pačioje darbuotojai, kaip lyrinis undersetting veikia. Lyric paklotai yra dalykas, kad labai lengva naudoti LilyPond už chorinio muzikos. Ir taip, tada yra keletas daugiau Sudėtingesni pavyzdžiai čia. Visa tai yra daroma LilyPond ir jie įmanomas. Ši pirmoji ištrauka iš [Nesigirdi] iki [nesigirdi]. Ir tai [nesigirdi] nuo gabalas solo boso fleita iki [nesigirdi], kuris yra longtime--, kuris buvo ilgametis narys iš Muzika departamentas čia, manau. Aš nesu įsitikinęs, kur jis dingo išjungti. Bet jis buvo Harvardo patarėjas Kompozitoriai asociacija ilgą laiką. Nuostabus žmogus. Ir jis rašo šiek tiek muzikos, kad turi labai sudėtinga notacija, kad LillyPond vis dėlto gali dirbti labai gražiai. Taigi tiesiog duoti jums jausmą, ką Šis dalykas pajėgumus are-- taip Iš LillyPond vidinės yra labai sudėtinga. Ir jūs galite naudoti ją ilgas laikas, įskaitant kai gana sudėtinga dalykų, be tikrai turintys žinoti apie juos daug. Bet pagrindinė idėja yra ta, kad dėl Mažiausia lygmeniu LillyPonds atomai yra pastabos. Pastabos būti įrašyta kontekstas vadinami balsus. Taigi balso kontekste iš esmės atitinka į vieną eilutę polifonijos. Ir tada kontekstas gali būti esančius hierarchiškai aukštojo lygmens tuos, kurie atstovauti štabų nuo balų ar didesnes grupes, pavyzdžiui, fortepijono štabai ar choro štabų, ir tada galiausiai ištisos rezultatas kontekstai. Ir jūs iš tikrųjų galite aprėpti keli balai knygą. Ir kiekvienas kontekstas turi skaičius pridedamų graviravimo. Jei jums atrodo per turinys kontekste ir spausdinti tam tikrą simboliu, arba tam tikra klasė simbolių, kaip reikia. Taigi kiekvienam balso kontekste, ten [nesigirdi] Pastabos graveris, kad iš esmės yra funkcija arba objektas, kuris išrašo visą dėmesį Vadovai Dešinėje puslapio dalis. Tada ten kiškio graveris, kuris išrašo plyšiuose ant darbuotojų. Tada ten metronomas ženklas graveris, kad išrašo metronomas ženklus vagele. Ir visa tai telpa gana gerai į hierarchijoje. Ir tai labai, labai, labai pritaikoma, kurį reikia jei norite gauti dalykų, pavyzdžiui, kad. Taigi visi kontekstai turėti daug skirtingų savybių kad jūs galite pakeisti viską iš įvairių šrifto tarpai atranka dydžių dalykų. Jei norite padaryti, net daugiau sudėtingų dalykų, ten yra integruotas skriptų kalba. Jie naudoja schemą, kuri yra tarmės Lisp. Tai tikriausiai ne reiškia nieko jums. Bet iš esmės, schema kitas funkcinis programavimo kalba, daugiau ar mažiau. STEPHEN KREWSON: kaklaraištis-in. CONNOR HARRIS: Taip. Tai geras kaklaraištis, aš manau. Ir jis naudojamas kaip mokymo kalba iš tikrųjų, žemyn masinio pr MIT. Ir tai labai patogu LillyPond dėl įvairių techninių priežasčių. Ir todėl, jei norite, kad paprastas tweaks, priklausomi nuo sąlyginių, už example-- ten tikras būklė vagele, kad manimi susitiko, padaryti pakitimai, išdėstymas ar whatnot-- tada Tos patalpos yra ten. Jie sudėtinga. Taigi čia gana paprasta kodo pavyzdį. Tai penkių eilučių. Iš esmės, aš apibrėžti du štabų. Jis yra 3/4. Pirmasis darbuotojai has an pridedamas Tempo ženklas, bet tai iš tikrųjų ketiname eiti į visą rezultatą, nes tempo ženklų yra ant rezultato lygiu. Metronome ženklas graveris pridedamas prie rezultatas kontekstą. Yra įvairių raktų, nes [nesigirdi] graverio pridedamas štabus. Jūs iš tikrųjų galite padaryti, tai. Mėginys parašiau yra faktiškai C-dur, bet tai tik įrodyti jūs galite turėti skirtingi raktai skirtingų štabų. Ir pagrindinis sintaksė rašote dėmesį vardus su E, F, G, nesvarbu. Jei norite padaryti, accidentals, Jūs priesaga yra, arba ES. Tai iš olandų muzikologų konvencijas. Ir daryti Octave šuolį, turite naudoti tai brūkšnius, kablelį ar kabutes. Santykinis tiesiog reiškia, ką jūs turite dėmesį, ji bus automatiškai plaec į oktavos arčiausiai ankstesnės. Ir jei norite peršokti daugiau nei fifth-- pasakyti penkta ar more-- tada jūs turite naudoti [nesigirdi]. Bet kitaip, jūs neturite nurodykite kiekvieną pastabą oktava. Ir santykinis C pirmininkas ir C, jums tiesiog nurodyti vidurinį C ir bazės, C, ypač pirmieji pastebi. Tada jūs turite šiuos štabų, kad organizuoti Šie du balsai ar pavyzdžiai muzika, ir jūs turite rezultatą. Ir tai atrodo taip. Jei norite imtis laiko nukopijuoti, kad LillyPond mėginį kodą Ankstesnis skaidrę žemyn čia, ir jūs gali ją parašyti LillyPond sau. Aš žinau, mes turime kažką kad atrodo daug, kaip šis. Taigi dar vienas technologija vadinama muzika XML išlaikytas iki visiškai skirtingų žmonių. XML yra tekstinių duomenų structure-- aš neturėtų sakyti duomenys structure-- pasakyti metafora žemėlapis rūšiuoti. Ir tai skirta laikyti hierarchinės duomenų labai gerai. HTML, pavyzdžiui, yra XML tipo. Ir jūs galite pasakyti, XML, nes jie visą laužtiniuose skliaustuose kampas laikiklis pasvirasis brūkšnys ženklai kad parodyti duomenų laukai. Aš neturiu kodą Pavyzdys iš muzikos XML. Jūs galite rasti jį patys. Iš esmės, priežastis, jūs galbūt norėsite naudoti XML kaip tarpinio etapo yra, visų pirma, tai , perdavimo formatas už iš esmės every-- turėčiau nesako kiekvienas, bet iš skirtingų rezultatą daug rašytojų. Taigi, jei rašote muzikos XML, ne tik gali LillyPond skaityti ją su šio Pagalbiniai pagalba programa, vadinama muzikos XML LY, bet Finale gali skaityti IT, Sibelijaus gali jį perskaityti. Priklausomai nuo to, kaip savo vidaus objektą hierarchija dirba atstovaujanti muzikos, tai gali būti lengviau rašyti Muzikos XML nei į LillyPond ir tiesiog remtis muzikos XML į LY padaryti konversiją. Nemanau [nesigirdi] turi Music XML. STEPHEN KREWSON: Tai nėra. Kažkas su juo dirbti, nors. CONNOR HARRIS: Gerai. Euterpea neturi Muzika XML išvesties funkcija dar. Jei norite galutinę projekto idėją, gal užmegzti ryšį su vaikinai kad Stephenas žino ir jie gali naudoti savo pagalbą. STEPHEN KREWSON: Aš norėčiau, kad. CONNOR HARRIS: Be to, iš esmės, kas programavimo kalbos kad verta jo druskos jau turi XML biblioteką, todėl jūs galite viduje konvertuoti visus savo muziką į kokį nors objektą kad XML biblioteka gali rašyti , kad reikės mažiau pakitimai, savo vidaus struktūrą dėl kokios muzikos objektus, kuriuos noriu rašyti, nei jį raštu tiesiogiai LillyPond būtų. Tada tiesiog atsispausdinti jį su XML su XML bibliotekas savo kalba, kuris garantuos, kad tai sintaksiškai teisingas ir viskas, ir tada konvertuoti jį į LillyPond. Taigi technologiją galbūt norėsite pažvelgti į, jei jūs darote kažką kaip šitas. [Nesigirdi], kita auxilarry technologija. Tai iš esmės Tech darbai arba Technika Studio LillyPond. Taigi jis siūlo pagalbą su sintaksė, su šablonais įvairioms bendra deriniai priemones. Tai leidžia padalinti ekraną žiūrint taip Jūs galite turėti savo kodą viename lange ir PDF kitame lange ir spustelėkite vietų PDF peršokti į atitinkamas dėmės Jūsų kodo. Tai yra daugiau naudinga, jei jūs iš tikrųjų Rašymas LillyPond failus sau nei jei jūs generuoti juos programiškai. Bet vėl, tai kažkas naudinga turėti. Didysis. Kitas resources-- aš tiesiog eiti per tai labai greitai. LillyPond manuals-- LillyPond turi puikus dokumentus savo interneto svetainėje. Jie turi pamoka. Jie turi sintaksės nuorodą. Jie turi šimtus fragmentus įvairių mažų dalykų Yo gali tekti daryti įrodyti įvairios galimybės. Jei norite naudoti skriptų kalba arba padaryti plačiau tinkinimo, tada ten vidinės nuoroda tuo URL. Jei norite naudoti muzikos XML, ten kad URL musicxml.com/tutorial. Ir tada, jei jums reikia sužinoti schemą nes jūs iš tikrųjų norite naudoti skriptų įrenginių LillyPond, tada yra [nesigirdi] vadinamas Struktūrinis aiškinimas kompiuterinių programų, kuris yra ne tik antrasis Didžiausias CS vadovėlis kada written-- rasti mane vėliau, jei norite sužinoti ką aš manau didžiausių vieną is-- bet tai taip pat labai geras Įvadas į kalbos tinkamai. Jums nereikės daugiau nei Pirmieji keli skyriai. Ir tai viskas. Turite klausimų? STUDENTŲ: Kur galiu atsisiųsti Jūsų sukurtas Frere Jacques'as todėl galiu įdėti jį į savo iPod? STEPHEN KREWSON: Na, galite parašyti iš tam tikru wav failą Euterpea. Ir jūs turite kodą. Tai ant GitHub. Padarykite savo variantus Frere Jacques iki CS50 avilio galvoje. Būtų puiku. CONNOR HARRIS: Visi kiti? STEPHEN KREWSON: Turime geriau būgnas, taip pat. Tai tikrai blogai. STUDENTŲ: Euterpea turi ne tik sudėtis pusė, tačiau signal-- STEPHEN KREWSON: Taip. Tiesą sakant, darbas man padarė Euterpea kai aš paėmė this-- ten absolventas kursinį Jeilio kad naudoja it-- buvo garso sintezę. Taigi ten tikrai gražus būdas naudojant rodykles ir kai žymėjimo mes matėme iš komponavimo kartu signalų funkcijas. Visų pirma, dėl labiausiai boso iš jų yra tiesiog paprastas sinusinės bangos. Bet jei jums pradėti rašyti tie, į keistam programinių būdais, Jūs galite gauti beprotiškas garsas poveikis, kaip keistam kaskadomis. Jūs galite kurti labai smėlinis skamba su moduliavimo daug. Aš padariau projektą GRANULIŲ sintezė, kuris yra kažkur tarp FM ir atranka. Jūs imtis labai mažas, mažai mėginiai, ir tada juos sujungti su kažkokia moduliatoriaus ir kurti turtingesnį garsą. Mes taip pat padarė fizinis modeliavimas, todėl bando galvoti apie fizikos ir Psychoakustyka apie kažką panašaus trimitą ir galvoti apie tai, kaip garsas yra šoktelėti nuo trimito varpas ir akustika kambarys ir modeliavimas kad su pagrindiniais generatoriai. CONNOR HARRIS: Labai ačiū. Ačiū, kad atvykote. Ir aš visada pasiruošęs imtis Klausimus email-- connorharris@college.harvard.edu. STEPHEN KREWSON: Taip. stephen.krewson@yale.edu. Saunus.