CONNOR HARRIS: Tere. Ma olen Connor Harris. Ma olen CS50 CA Harvardi. STEPHEN KREWSON: ma olen Stephen Krewson. Ma olen TF CS50 Yale'i. CONNOR HARRIS: Ja me ei kavatse rääkida mõningate tehnoloogiate, mida võiks soovite kasutada, kui olete huvitatud tehes lõpliku projekti või tõesti midagi muusikaga. Me läheme tuleb keskendudes esmalt programmeerimiskeelt nimega Haskell. See on funktsionaalne keeles, nii et paradigma on väga erinev C või PHP või muu hädavajalik keeles et olete kasutanud juba, ja eriti kohta raamatukogu kirjutatud Haskell nimetatakse Euterpea, mis aitab inimesi kirjutamiseni muusika funktsionaalselt põhimõtteliselt. Ja Stephen sõelub läbi hea näide sellest. Pärast seda, ma tutvustada teile midagi, mida nimetatakse LillyPond, mis on tehnoloogia ladumise muusika. See on omamoodi nagu LaTeX muusika, kui keegi teist on kasutatud LaTeX matemaatika klassi või teiste P varaklassidesse või mida iganes. Ja nii ma annan sulle taas, mõned lihtsad näited, mis ja punkti sind üldiselt suunas mõned paremad vahendid. STEPHEN KREWSON: In Lisaks arvasime oleks lahe luua natuke vihjed poole gaasijuhe Euterpea loodud MIDI faile in LillyPond, et pakume mõned juhiseid skripte mida teha, et see on varustatud LillyPond lihtsalt hoida avatud lähtekoodiga ja saada gaasijuhe läheb. CONNOR HARRIS: Jällegi, me peaks rõhutama, need kaks tehnoloogiat, siis pole neid kasutada koos. Nad ei loodud töötama koos, kuigi nad väga kenasti. STEPHEN KREWSON: Right. Ja täiesti tasuta. CONNOR HARRIS: Nii tunnustused, just lugesin seda. STEPHEN KREWSON: täpselt ära märkida. Tänu neile inimesed. See ma jõlkuma vaid hetkeks. Paigaldamise käigus on natuke keeruline. Oleme lugemiseks mind github et võite võtta pilk. Lihtsalt kirjuta mulle, kui teil on mingeid küsimusi. Aga me käivitada eeldusel et see töötab kõigi jaoks. CONNOR HARRIS: Ja kui sa ei saa saada LillyPond tööd, ei ole suur asi. Ei ole live koostamine, mis osaleb vähemalt minu lõpp. STEPHEN KREWSON: Haskell ja LillyPond peaks nii olema paigaldajad. Euterpea laaditakse kui pakett, nii edasi ja nii edasi. Nii et me räägime arvuti muusikat. Ja see on lihtsalt väga 50.000 jala arvates. Seal on mõned eri aspektide üle. Ja see on karm ja on läheb segaseks üsna üksikasjalikult. Aga me võiksime mõelda midagi nagu algoritmilise koosseisu, kasutades algoritme, kasutades koodi, et luua teatud tüüpi of-- võibolla enesesarnaste nootide jada, või äkki märkmed mõnele piirang. Ja siis need võiksid olla läbi või tõlgendada analoog vahendid või midagi sellist. Aga koostis oli teha algoritmiliselt. Aga muidugi, võibolla valdkonnas arvuti muusikat või digitaalse muusika me oleme rohkem tuttavad on digitaalne heli sünteesi või digitaalset andmekogumis- ja digitaalset salvestamist. Palju digitaalsete vahendite on teinud läbi digitaalset andmekogumis-. Tegelikult oleme me kasutada üht need kujul heli kirjasinkirjaston hiljem. Aga seal on ka midagi, mida nimetatakse digitaalse sünteesi, mis tuli välja on 70ndate arvesse "80s Yamaha ja John Chowning Stanfordi teeme FM sünteesi või Sagedusmodulatsioon sünteesi, kus sa olid vedaja signaali ja moduleeriva nii audio spektri. Aga mida me keskendunud täna on midagi, mida nimetatakse MIDI, ja muidugi algoritmilise koosseisu. Me ei kavatse teha vahendeid, kuid me mitte kavatse teha mõned muusika, ja siis saavad tõlgendada mõned vahendid, et on sobi kokku üldiselt MIDI standard. Mis siis MIDI? Ma ei hakka liiga sügavale see, kuid MIDI on andmevahetusprotokolliga. See on mingi juhend üle erinevate ettevõtete ja tööstuste korraldamiseks helisid või plaastrid. Nii me näeme, et seal on MIDI standard kõik erinevad löökpillid heli ja MIDI soovitused Kõigi erinevate süntesaatorit või eri tüüpi kõiki seadme rühmade orkester, öelda. Sa oled ilmselt kursis 0 kuni 127 MIDI sõnumeid. MIDI signaal on tavaliselt üks natuke näitab kas see on andmed või staatus pakettaknad, ja siis on seitsme bitti signaali. Ja neid on võimalik kontrollida kõike maht kaebusele või surve konkreetse võti kui sa esinedes MIDI controller samuti loomulikult märkmeid. Ja muidugi, MIDI on olnud väga kasulik, sest see on võimalus juhe koos või ketjuttaa kamp MIDI riistvara. Mul on seitse või kaheksa tagasi oma maja. Läheb tõesti keeruline, aga see on tõesti võimas. Ja see on tõesti vana. See on alates 80ndate alguses, ja see on tõesti kena ja väike. CONNOR HARRIS: Jah. Kõik klassikaline Nintendo video mängud oleks ilmselt on MIDI failid muusika, näiteks. STEPHEN KREWSON: Siin on Näiteks üldise MIDI, näitab MIDI omamoodi Üldise protokoll. Ja ma arvan, et me ei mõtle vahe spetsifikatsioon et tuleks midagi Nende instrument kõlab ja tegeliku realiseerimise nende instrumentide helid tugevas fondi või teatud MIDI süntesaator, nagu oleks vahe vahel võibolla typeface-- mis ütleb, üldiselt, see on disain see konkreetne võimalus esindada characters-- ja konkreetse fondi mis on konkreetse suuruse ja tämber, ja seal on realiseerimise the-- CONNOR HARRIS: Võib-olla parem oleks võrdlus olla Unicode standardi says-- see annab Numbri iga tegelane ja tõesti Iga keel maailmas, või suur hulk skripte keel maailmas ning seejärel need on sulatatud millekski graafiline erinevate font paketid. Ja muidugi, sa ei mõtle MIDI kui Unicode heli. Ja see on lihtsalt nimekiri of-- suur vool sündmuste ja instrumendid ja tühi-tähi, ja sa pead olema eraldi programmi, nagu kirjatüüp, muuta, et võtta midagi, mis on kuuldav. STEPHEN KREWSON: Miks Haskell? Haskell on funktsionaalne programmeerimine keelt, väga hästi arenenud, väga erinev C, väga erinevad PHP. Ja me näeme, et seal on lihtsus Liitfunktsioon Haskell mis võimaldab meil tuul läbi koostamisel või kirjutades üles, transkribeerivate, midagi Frere Jacques, Selle lihtsa laulu on palju osi nii, et on ise sarnast või korratakse. Nii et see on osa motivatsiooni, miks me kasutame Haskell, kus funktsioonid on esimese klassi kodanikud. Ja ma tahtsin, et laiendada see natuke. See on natuke lihtne noodistada Frere Jacques Haskell. Aga mis siis, kui me tahtsime lisada trumliosaga on? Mis siis, kui me tahtsime proovida teha midagi Roland 808 või 909 trumm masin, kus teil on umbes 16 eri etappe? Tavaliselt on need mõelnud kui 16. märkmeid. Ja saate kontrollida globaalse tempo, ja te saate noppida hunnik erinevaid löökpille osad bass trumm, plaksutama, erinevad püünised, avatud ja suletud suure mütsid Nende omamoodi kanalite ja siis saate EQ kohandada oma mahust. Ja me näeme kena viis Haskell esindada seda sammu sequencer kõik erinevate lahedaid asju Haskell me saame teha teeniva nimekirjad ja filtreerimine üle nimekirju, kaardistamine üle nimekirju, kaardistamine funktsioonid üle nimekirju. Ja kiire vabandust. See on väga pealiskaudne ja liiga kiire visand Mõnede aspektid of Haskell ja Euterpea, mis on valdkonnapõhised varjatud keeles kirjutatud Haskell muusikaline tüüpi. Nii et palun ärge vaadake kood online. Käivita GHCI, mis on Glasgow Haskell tõlkija tõlk. Ja ma tulen teeme mõned Käesoleva in natuke nii näed, kuidas see on tehtud. Ja see võimaldab teil laadida sisse the-- süntaks on koolon ja seejärel käsk. Võite laadida faile. Võite kasutada sirvida neid faile et näha kõiki funktsioone, eksisteerida konkreetse mooduli. Ja siis, kui me näeme, liigid ja liigid Klassid on nii oluline Haskell, nii saad alati kontroll-- eriti kui te töötate uue DSCL nagu see, mida on muusika tüübist? Ma tean, kuidas numbriline tüüpi tööd Haskell, aga ma ei tea, palju muusikat. Aga võite uurida, kuidas nad määratletud, kasutades seda t või tüübi käsk ja siis helistab teatud funktsiooni või andmeid objekti. CONNOR HARRIS: Jah. Kui oled mõelnud, C ja rõkkama oli hardass umbes tüüpi, sul pole aimugi Haskell. Hea asi Haskell on see, et kui saad oma koodi kompileerida ja kui Haskell tüübi kontroll, see on ilmselt õige, kuna tüüpi süsteem on nii ranged. STEPHEN KREWSON: Jah. Nii et ma tahan minna through-- ja jälle, see ei tee seda justice-- mõned funktsioonid Haskell, et vähemalt oma creators-- ja see loodi 1980ndate lõpus kamp inimesi, komitee umbes 20 people-- mõelnud olid olulised. Ja esimene asi, mida nad loetletud paber, kirjeldatud genees Haskell üle esimesed 20 aastat või nii oli see, et laisk. Mida see tähendab? Noh, see tähendab, kui meil on mingi sõnavabadus, peame hindama seda. Ja Haskell teeb seda kõnet mida vaja nii või mitte-range viis. See tähendab, et kui meil on kamp osad meie väljendus, püüame viivitada hindamisega nende komponente kuni absoluutse viimase minute-- see on kuni me tegelikult vajame neid. Nii et see means-- mis on väga lahe, eriti Kui me mõtleme võtmiseks muusikaline samm sequence. See on sisse lülitatud, ja hakkate töötab samm sequence-- kui sa kunagi töötanud trummi machine-- ja ta lihtsalt läheb igavesti. Seega oleks tore, kui me mida jäljendada, et Haskell. Ja me ei saa seda teha lõpmatu väärtused, eriti lõpmatu nimekirjad. See on väga lihtne tippida lõputu nimekiri Haskell. Sa võid lihtsalt kasutada süntaksi alla siin, kus sa näed 1 kuni 3, eemaldada 3 1 dot dot ning mis on lõpmatu nimekirja kõik füüsilised näitajad laiendada kohta nii palju kui võite kujutada. Ma tahan, et kehtestada mõiste voldid kohe. Ja jälle, eesmärgiga Seminari pole õppida voldid Haskell või kõrgemat järku funktsioonid. Aga ma tahan seda tutvustama andma täpse ettekujutuse imelik Haskell on ja kui võimas see on. Ja eriti, me ei kavatse olla-- kui me teeme oma erinevate drum osad, me ei kavatse olla manipuleerides nimekirjad numbrid, kokkuklapitavad neid üksteise peale. Ja seda, et me tulen kasutad kaartide ja voldid. Seal on õigus assotsiatiivne korda, mis on see üks õige siin-- 1 miinus kogus, 2 miinus kogus, 3 miinus 0. Ja süntaksit korda, annad korda algväärtuseks ja siis operation-- sel juhul, lisamine või lahutamine. Olen näidanud mõlemal juhul. Ja siis seal on aku, mis koguneb kogu nimekirja kohaldamisel, et operaator pluss või minus, ja siis kuhjuvad. Nii et see on the-- kui ta kutsuti voldiga r pluss 0, alustades 0, me siis Kokkuvõttes kõik numbrid, mida nimekirjas. Ja see nimekiri 1-3. CONNOR HARRIS: Nii teisisõnu Nii korda r kolme argumenti. Seal on funktsioon, mis ise kaht argumenti, siis seal on starter väärtus, ja seal on väärtuste nimekirja. Ja mida sa teed on teil võtta starter väärtus, esimene väärtus, neid ellu funktsiooni. Mida sa välja, võtta, et sööda viiakse funktsiooni teine ​​väärtus, mida sa välja, võtta, et toita seda arvesse funktsiooni kolmanda väärtuse. Ja siis, kui sa lähed mööda kogu see nimekiri nii, sa lähed, et saada lõpuks mõned ainsuses väärtus, mis on sama tüüpi, mida sa alustasid välja ja sama tüüpi kui asjad nimekirjas ja seejärel see on tagastamise tulemusena kordne R. STEPHEN KREWSON: Nii eelkõige need on kõrgemat järku funktsioonid, sest nad võtavad mingit muud funktsioneerivad ühe argumendi. CONNOR HARRIS: Jah. Kui olete kasutanud teatud teisi languages-- Tean R, [kuuldamatu] keel on see, mida nimetatakse Vähendada. Sul võib olla sarnased ülesanded teistes keeltes, just helistas erinevaid asju. STEPHEN KREWSON: Ja Mis tore kordne R antud juhul on see, et fold R suudab töötada lõpmatu nimekirjad. Nii see põhja, see P5 tekitab lisades, et on sisse lülitatud samm sequence mõned trumliosaga viies trumliosaga, ja võibolla on see conga trummel või midagi. Ja see on sihilikult nüri, kuidas kirjutada seda, aga see on tore, sest see näitab palju asju Haskell ja Euterpea. Nii korda R selle colon-- Koolon lihtsalt operaator, kes vajutab asju koostööd vastastikuse list-- nimetatakse tühja nimekirja, mis on lihtsalt tühi sulgudes. Ja ma helistan, et Selle lõputu nimekiri. See on tegelikult kahe nimekirja liita siia. Nimekirja 1 komaga 6 dot dot on 1, 6, 11, 16. Nii Haskell-- vaid mõned tegelased, siis võib tekitada kogu numbrijada mis on viis numbrit peale venitades kohta lõpmatusse. Ja ma ülaloleva sellele seda lühemat vähe list-- 3, 8, 21-- lihtsalt näidata teile kuidas saab concatenate nimekirjad. Ja siis ma olen volditud ise. Ja see jõuab lihtsalt on selline identiteedi operatsioon, kuid see on lõpmatu. Ja korda R saa seda teha, sest see Laiskasti hindab, nagu eespool. Kui meil on 1 ja 2 ja 3, saame lihtsalt sulg ära kogu ülejäänud seda. See ei tööta miinus või pluss, kuid see töötab selles käärsoole identiteedi operatsioon nimekirja. Niisiis, kuidas me praktiliselt kasutada, et kui me on lõpmatult pikk nimekiri asjadest? Noh, Haskell annab palju functions-- ja uurida täpsemalt neid oma AEG_ nagu võtta mis ütleb, OK, me oleme teeniva see lõputu nimekiri, aga me lihtsalt aega võtab mõned number see ja selles case-- me näeme seda hiljem meie drum masin code-- GM on lihtsalt mingi ülemaailmne muutuja sammude arv on sequence. Roll-in masinad Ma näitasin teile, see on tavaliselt 16, kuid olen rakendanud 32. See ei ole tegelikult küsimus. Haskell on ka puhta, nii et see on tugev staatiline kirjutades, et Connor vihjas. Nii funktsioonid matemaatika on sense-- nad enam matemaatiliste et nad tagatud mitte kasutada või muuta mis tahes muutuja või täita sisendi või väljundi. Nii et kui teil on funktsioon, see on determineeritud. Ta on alati tagasi samal väärtus riik programmi või jäävad samaks. On muidugi monaadilist erandeid sellele, kuid see on väljaspool meie ulatust. CONNOR HARRIS: Jah. See tähendab, kuigi on olemas on mõned olulised [kuuldamatu] tagajärgi. Üks on see, et see on väga lihtne paralleelseks Haskell programme. Sest kui sul on, öelda, funktsioon, mis peab toimima miljoni väärtusi, kui sa tead, et funktsioon on alati anna sama väärtusega kui toida teatud value-- kui sa oled [kuuldamatu] f 1, f 2, siis f on 3 või whatnot-- f 1 ei kavatse kirjutada faili või midagi mis muudab väärtust f2. Sa võid lahku seda funktsiooni miljonit erinevaid masinaid või miljon erinevad teemad või mida iganes, saad kõik vastused tagasi, saad kõik tagasipöördumist väärtused tagasi, ja siis ongi kõik. Nii väga lihtne paralleelseks asju. Negatiivne külg on, et sisend ja väljund eriti sobituvad tüüpi süsteem väga keeruline viisil. Me ei hakka, et just nüüd, aga ma Julgustame teid mõningaid ressursse Internetis kui tahad õppida seda. STEPHEN KREWSON: Nii kirjuta classes-- ja selle was-- klasside liike leiutati lahendada probleem käitaja ülekoormus. Nii et me tahtnud võrdõiguslikkuse eri liiki asjadest. Muidugi võiks mõelda of-- võrdõiguslikkuse numbriline tüüpi on väga lihtne mõelda, kuid Aga võrdõiguslikkuse nimekirjad? Aga võrdõiguslikkus puu jala andmestruktuurid? Ja see kõik on võimalik Haskell sest tüübi klassi. Nii et kui oled määranud teatud andmete liik-- ja siin on need muusikalised noodid. Me lõpuks ometi mõned arvuti muusikat. Nii et meil on C, C teravad, ja nii edasi ja nii edasi. Nad kuuluvad kamp Erinevat tüüpi klasse. EQ-- nad kuuluvad EQ tüübi klassi. See tähendab, et nad toetavad võrdõiguslikkuse operatsioone. Nii saab hinnata, kas üks jada muusikaline primitiivid on sama erinev. Nad kuuluvad ordinal klassi. See tähendab, et seal on tellimise neid. D tuleb pärast C. C teravad tuleb pärast C samuti. Nad kuuluvad klassi näidata, mis tähendab, et nad saavad trükitakse konsooli või terminal. Nad kuuluvad klassi küsitletud, mis tähendab, et kuigi need tegelased, nad on aluseks numbrilise esindatuse alguseks 0 ja läheb välja läbi aga paljud asjad on siin, 20 või nii, või 30 või 40, võib-olla. CONNOR HARRIS: Ja kui meil on andmetüüp et derives-- selle märksõna "deriving--" teatud tüüpi klass, see tähendab, et koostaja püüab ehitada midagi automaatselt. Ehk tahad määratleda kvaliteedi erinevalt. Sa tahad, et määratleda C teravad nagu võrdne D lame, näiteks. Selle ehitus siin, ma ei usu, C teravad ja D korter on võrdsed, sest koostaja automaatselt öelda iga erinevat võimalik väärtus erineb iga teine. Seega on võimalik, et alistada Vaikimisi rakendused Sellist tüüpi klassidesse. Jällegi, vaadata viide, kui sa tahad õppida sellest. STEPHEN KREWSON: Ja siin, tegelikult see tulen kasulik, kui me koodi hiljem. Me näeme mõnede Siseliidete ettevõtjad järjestikuse koosseisu, Paralleelselt koosseisu, ja nii edasi, need plussid ja võrdse märke ümbritsetud kooloniga. See tähendab, et me saame mängida neid erinevaid muusikaliste primitiivide üksteise järel. See on järjestikune koosseisu. Või saame mängida neid paralleelsed samaaegselt. Nii et ma ei ole muusikalist väärtust, ja siis see võrdub ja kooloniga, Siseliidete paralleelselt koosseisu operaator, ja mängida neid mingi akord. Ja me ei kavatse kasutada see, kui me ühendame Meie trumliosaga meie vähe Frere Jacques laul mängida need kaks järjestused muusikaline väärtused samal ajal. Currying on-- Curry Viimane nimetus Haskell Curry, kes Haskell pilt on nime saanud. Ja see võimaldab meil kena elegants, kui me oleme kirjalikult kõik need erinevad funktsioone või filtreid, et me oleme saab olema kaardistamine üle meie nimekirju. Funktsioon kahe arguments-- f kohal x ja y-- võib olla esindatud f x rakendatud y. Nii et see on funktsioon üks argument, mis tagastab teise funktsiooni üks argument. Nii see tähendab, et saame kaardistatakse funktsioon f x üle nimekirja y. CONNOR HARRIS: Tahad Nii näiteks seda? STEPHEN KREWSON: Jah. Mul on näiteks siin on mõned asjad, mida me ei kirjuta. Nii imiteerida 2-- hästi, imiteerida võtab üks väärtus, mis on mitu korda korrata midagi, ja siis ta võtab value-- Tavaliselt nimekirja või midagi. Nii et siin me oleme kaardistamine imiteerida 2 teisele nimekirja. Nii et kui me map imiteerida 2, kui me imiteerida 2 kohaldatakse esimesele element käesoleva list-- ja need nimekirjad muusikaline phrases-- hakkab tootma kaks "sa sleeping--" nii te magate, te magate. Nüüd on meil kaks. Aga imiteerida võtab kaks argumente, kuid kuna me oleme currying ja siis kaardistamine, saame esindada imiteerida 2 nagu oleks tagastatud funktsioonina üks argument-- lihtsalt imitatsiooniga kaks korda. Ja siis me kohaldamisel, et iga element selle väljendite loetelu. Ja concat on Haskell operatsiooni lamedamad nimekirja. Kuna imiteerida 2 tahet koostada nimekirja nimekirjad. Ja see on see vahe vorm siin. Ja nii siis saame CONCAT või lamedamaks, et kaks korda. CONNOR HARRIS: lihtsam näide currying, Kui soovite like-- kujutada f on lihtsalt korrutamine funktsioon, mis võtab kaks argumente ja naaseb oma toodet. Nii et kui teil on f 4 5, see on 20. Aga sa ei mõtle seda also-- teil on funktsiooni f 4 mis võtab argumendiks ja naaseb neli korda seda argument-- lihtsalt osaline rakendus, mis lihtsalt üks argument 4. Ja kui te toita f 4 5, mis annab sulle 20. Ja see on lihtsam näide currying. See on tavaliselt üks õpik ones. STEPHEN KREWSON: Lambda väljendid või anonüümseid funktsioone on teise Haskell tunnuseks. Nii et kui me peame klopsima vähe funktsiooni elu imiteerida, aga öelda, et see ei ole standard raamatukogu saame kasutada süntaks sarnaseid järgmine. Ja me imelihtne üle selle. Üks asi, mida sa näed, palju on drum masin me helistamisel et midagi, mida nimetatakse filtreerida, mis näeb ette, on kaardistada funktsioon Üle nimekirja, kuid see on kaardistada Boole'i ​​funktsiooni. Nii et meil on siin üks näide on anonüümselt määratletud Boole'i ​​funktsiooni, mis võtab kõigest paar väärtusi. See ei ole rangelt võttes anonüümne funktsioon. Aga see on seaduses määratletakse et süntaks lühiduse, ja see lihtsalt võtab x moodul n-- CONNOR HARRIS: Jah. Nii f on funktsioon kaks argumenti n ja p mis tagastab funktsioon, mis on iseenesest funktsioon üks argument, nimelt x. STEPHEN KREWSON: Ma mainitud Siseliidete ettevõtjad. Mis on Siseliidete ettevõtjad? Noh, Siseliidete ettevõtjad on tavalisel viisil me esindame toimingud, öelda, in mathematics-- 2 pluss 2 asemel operaatori pluss ja siis kaks argumenti 2 ja 2. CONNOR HARRIS: Seda nimetatakse reverse Poola märke, mis on termin ma kahtlen keegi teist teab. STEPHEN KREWSON: Right. Tagurpidi Poola või eesliite märke. Aga Haskell otsustanud kasuta Siseliidete ettevõtjad. Nii et need on vaid mõned Kohandatud need, mis kasutamiseks määratletakse Euterpea DSCL Haskell. Nii et see oli järjestikuse koosseisu. See oli paralleelselt koosseisu, ja see oli kärpimisel paralleelselt koosseisu. Ja me vajame, et meie drum masin, sest me kasutame viimase operaator, et vähe korteež seal mängida trummi masin mööda meie Frere Jacques laulu. Ja meie drum masin saab olema lõpmatu. See lihtsalt mängib igavesti. Aga Frere Jacques laulu ei ole. See ei ole nii pikk. See on ainult mõned baarid. Nii et me peame lõpetama drum masin Niipea kui lühem muusikaline väärtus on lõpetamiseks. Ja et infixed operaator on super abivalmis sellega. Ja Siseliidete märke nagu see on selline kena, sest et teil on funktsioon nagu tsitaat, mis annab täisarvu jagamine x miski else-- kahju, et peaks olema a ja b. Sa võid kirjutada seda quote b. Nii et kui sa put-- element on Teise näite korral. x element mõnes nimekirjas, kui paned see Backticks, saab seda kasutada. Kuigi see ei ole sümbol nagu pluss või miinus või korda, saate nimi funktsiooni niimoodi Backticks kui infiksoperaator, mis on päris lahe. CONNOR HARRIS: Ka see on kõik lihtsalt süntaktiliste suhkrut, tõesti. See ei mõjuta tuum keeles. STEPHEN KREWSON: Nii näeme siia viimase lause meie Frere Jacques laulu, Mängisin mõned vähe akorde või kolmandikku kasutades paralleelselt koosseisu operaator. See on üks viis öelda mõned mida oleme lihtsalt öeldes. Nii saab kaardistada funktsioonid Ühe tüli nimekirjad. CONNOR HARRIS: Jälle viited jaoks Haskell-- sissejuhatav õpikud on see kõik see. STEPHEN KREWSON: Nii et siin on päris võti rida samm sequence heidame pilgu abil nimekirja arusaamist. Ja me näeme siin, et element fikseeritud operaator tagasi hinnapakkumisi. Nii et kui x on element nimekirja X, siis me kutsume üles perc funktsioone. Nii perc on lihtsalt löökpillid funktsiooni. See võtab mõned väärtus p, mis on osa piirneb k~oigi Erinevate löökpillide helide et me nägime eelmise slaidi, ja siis see annab, et kestus veerand märkuse. Else see annab talle qnr-valguga ja qnr-valguga on lihtsalt veerandnootidega puhata. Nii et see on rajada midagi ilusat. Meil on elementide loetelu ja jagame loop üle mõned nimekirja ühest max väärtus meie sammu sequence. Ja kui me oleme kindlal i et nimekiri ühe max väärtus, kui see i kuulub see komplekt on loodud seda funktsiooni, noh, siis lülitage see arvesse löökpillid märkuse. Muidu lihtsalt mängida puhata, mis See tähendab, et me lihtsalt vaikida. Ja me näeme siin, et Selles nimekirjas arusaamise süntaks, x on asustatud käesoleva nimekirja ehitatud ühe globaalsele suurus sekvenaatorisse. CONNOR HARRIS: Jah. Põhiline süntaks nimekirja arusaamadele on sulg, väärtus, mis hõlmab mõned muutujad, baar, võimalikult muutujate väärtused ise, suletud sulg. Ja kui sa oled teinud seatud ehitaja märke aastal mingit matemaatika klassi, sa oleks võinud seada 2n sellised et n on sisse või n on z. Sarnased asi-- selle märke on mõeldud sugestiivne Selle matemaatilist. STEPHEN KREWSON: Ja saate kohaldavad mitut öeldisi ja mitu filtrit nimekirja arusaamine, mis on üsna kena. Algebraic types-- me ei jõlkuma kaua siin. Seal ei ole hea idee in Haskell või hea, selge arusaam kuidas võtta, ütleme, vaikimisi parameetrit funktsioonile või midagi. Python, see on üsna lihtne. Sa võid öelda võrdub kohta tunnistamise funktsioon, vaikeväärtuses Juhul ükski tarnitakse. Haskell, siis võiks olla kasuta võibolla äkki kirjutad, mis võtab kas midagi või väärtuse tüüp lihtsalt. Nii me kasutavad seda ära trumli masin et saaksime anda vabatahtlik maht parameetrid igale trumliosa. Nii et see annab meile viis, mille EQ või mahu konkreetse kanali. CONNOR HARRIS: In teiste Haskell näiteid, Võite näha võibolla kasutada funktsioonid ei pruugi ühtida. See on ühine. STEPHEN KREWSON: Ja te võite anda mingi veateate kui default. Ja see on eriti mugav, kui sa teed I / O Haskell. See võib olla trikke. CONNOR HARRIS: Or jaoks sarnane näiteks arvavad, et funktsiooni, mis hõlmab jagunemine parameetri, mis võiksid olla 0. Ja see funktsioon võiks tagasi võibolla mis iganes. Nii et kui pole jagunemise 0, siis taastub ainult iganes. Ja kui on jagunemist 0, siis taastub midagi kui viis signalisatsiooni viga. Kuna üks tagajärg Haskell on väga ranged kirjutades on see, et seal ei ole real-- Erandiks on ebamugav, põhimõtteliselt veatöötluse on ebamugav. Ja see on üks väga levinum viis seda teha. STEPHEN KREWSON: Nüüd saame teise Raske asi umbes Haskell, mis on muster sobitamise ja funktsiooni mõisted. Ma näitasin teile viimase slaidile deklaratsiooni sammjuhtimise funktsioon, mis võttis äkki väärtus, siis int, siis nimekiri ints, Seejärel tagastab jada muusika väärtusi on kommenteeritud nii pigi ja maht. Nii et need kolm argumenti võib olla mustrit sobitada järgmisel viisil. Ja me alati tahame olla kindlad, et teha aluspõhimõtted või väljumise korral esimest. Ja need allkriipsud lihtsalt tõlgendada et igasugune väärtus, mis on seal. Nii et kui me kõne samm jada mõned väärtus, mõnda muud väärtust, ja siis tühja nimekirja, mida me tahame tagasi on vaid vaikus, puhata 0. Ja selle asemel, et on tühja nimekirja või 0, see on ülejäänud 0, sest me oleme tegeleb muusika tüübile, ja tühja nimekirja muusika tüüp on lihtsalt mujal ei ajaks. Pole muusika. Ja siis me näeme, kui me samm jadaks v helitugevuse argument, p ettevaatusabinõu instrument argument, ja siis nimekirja x on. Siis me teeme mõned asjad. Eelkõige me rakendame Selles nimekirjas mõistmine, ja me täita mõned toiminguid ehk väärtus muuta see arvväärtus et seda võib siis loendati ja ko valida instrument. Ka see on veidi natuke tahtlikult inconcise lihtsalt näidata kõiki imelikke asju saate teha Haskell kui heita pilk see oma aja. Hästi. Nii et me lõpuks saada seda, mida me ette teha, mis on teha mõned arvuti muusikat. Nii et me läheme püüdma teha Frere Jacques laulu. Seega on olemas mitu laused Frere Jacques? Neli. Hea. Ja mis on tore, et nad kõik korduvad sama koguse korda, mis on kaks. Nii et meil on neli laused Iga korratakse kaks korda. Ja eriti, nad on ümmargune. Ja seal on palju, palju võimalusi, kuidas rakendada ümmargune, et oleks lõbus teha. Ma olen teinud seda päris lihtne viis siin, mis on lihtsalt konstrueerida-- rida Funktsioon nimekirja muusikat väärtused ja muudab see järjestikuse koosseisu kohaldades, et järjestikune koosseisu operaator. Ja siis ma viivitada eri paigus muutes need algavad puhata. Nii et ma alustada ülejäänud kaks meedet, ja siis ülejäänud neli meetmeid, ja siis ülejäänud kuus meetmed, ja siis edasi töötab, nagu me kõik teame, et see laul. Me näeme kahte annotatsioone või muudatused muusika väärtuste mis sisalduvad selles järjestikuseks paigutus muusika elemente. Meil on kohevaks. See on funktsioon, märkmete muusika konkreetse ruumala. See on hea näide on MIDI signaali jooksmine 0-127, seitse bitti teavet, mis võib toimuda. Ja then-- nägime seda väga lühidalt, kuid üldiselt MIDI loetelu erinevaid vahendeid. Ja seal ei ole palju neist. Kui kasutate digitaalset audio tööjaama, nagu Ableton Live või Pro Tools, seal on uskumatult laiemat süntesaatorite ja VST instrumendid. Aga MIDI standard ainult on vähe, või mitukümmend. Ja mõned neist on naljakas. Ma arvasin, et oleks tore, kui me mängisime instrumendi MIDI instrumendi helikopter, ja seejärel Järgmine võimalus läbi ringi, tegime pad süntesaatorit, ja seejärel see kulunud plii ruutlaine süntesaatorit, ja siis väljendada löga, mis on natuke segane minu halb MIDI süntesaator, kuid nad OK. Ja siis me näeme seda let ja süntaks on Haskell, ja siis me oleme mänginud kõik need osad kokku kusjuures samaaegselt koosseisu operaator. Ja me võiks ilmselt näidata osa sellest. Siin on kood. Ja näete C, siis oleksin palju köhatamist ja seadistus Tabeli kood, enne kui võiks teha sarnast muusikat. Või mõni muu programmeerimine keel, siis tahaks ilmselt on suhelda mingisugune raamatukogu või API ja seada kõik üles, ja siis sa pead puhastada. Aga siin Haskell on, ma arvan, kui sa saad aru saama sellest, uskumatult loetav ja väga väljendusrikas. Seega on rakendamise of Frere Jacques. Hästi. Nüüd tahame lisada löökpillid, ja see on natuke segasem. Võtame pilk libiseb. Nii suur idee on teha kamp nimekirju või osad. Esitatud roll-masinates, seal olid tavaliselt umbes võibolla kaheksa 10 rütmi ja löökpillid osad. Ja siis kasutada kamp tehnikaid. Ja me rääkisime these-- kasutades voldid, filtrid, lambda funktsioone, kaardistati üle nimekirju luua väärtusi Mõnes vahemikus 1 kuni r, r on 16, või 32 samme sekvenaatorisse. Ja siis, kui seal on väärtus, mida nimekirjas kui meil hakkab läbi sequence, voolab läbi üle ja üle, see sõltub, et märkus, ja et proovi aktiveerub. Siin on kõik erinevad imelik viise Tulin koos, et luua märkmeid. Proovi ise pool summast. Seda saad tunduda lahe. Aeg lubab, läheme läbi selle. Aga just nüüd, ma arvan peaksime demo mis meil on. Loodame seda läheb OK. Nii et see on GHCI. Ja me laadida faili Mul on kutsutud song.lhs, mis on fail ma näitasin teile. OK, suur. Nagu Connor ütles varem, et koostatud, siis tippige kontrollida, nii et ma ei hinga palju lihtsam. Ta ei kavatse õhkima mind. Ma ei taha, et sulle midagi kasulikku. Näete, et moodul koormatud nn 50. Saate sirvida, et moodul. Ja see on nii kena umbes doing-- äkki mida sa teed Haskell ei ole nimetatakse tarkvara arendamiseks, kuid mida saate teha palju lõbusaid asju ise. Ja töökorraldus on tõesti kena, kui Võrreldes paljude teiste keelte sest näete tõesti loetaval viisil, mis toimub. Nii näeme, et meil on kõik need laused, mis on nimekirjad muusika noodid ja siis me ehitada neid millekski suuremaks mis on muusika laul. See on muusikaline seade. Ja siis me saame mängida kõik funktsiooniga nimetatakse mängida muusikat. Te näete, et siin. Kumb on lihtsalt mängida. Ma peaks say-- ma ei räägi Selle dollari märk, et on kõikjal. Dollar märk on teine ​​infiksoperaator. Aga see on madalaim tähtsam mis tahes ettevõtja, mis tegelikult tähendab, et kõike vasakul dollari märk ja paremal dollari märk, me ei kavatse saada hinnatud enne seda. Nii et see on omamoodi nagu teise lisamise viis sulgudes. CONNOR HARRIS: See on põhimõtteliselt Liitfunktsioon. Ja see tagab, et te ei have-- kui sul on funktsioonid mõlemal pool või Siseliidete ettevõtjad mõlemal pool, nad ei seostada kogu seda ja teile ootamatuid tulemusi. STEPHEN KREWSON: Nii me can-- kasutades, et me saame helistada. Esiteks, me mängida ilma trummid. See on helikopter, MIDI helikopter. [Muusika mängib] Seal on ruutlaine. Hääl löga. Ja te võite tõesti minna loodusesse seda. Ma valisin päris lihtne, sest ma teadsin, et ma ei peaks hammustada rohkem kui ma võiks närida. Lihtsalt see päris lihtne näitama peamised ideed. Aga siis ma olin nagu oleme sain lisada mõned trummid sellele. Just, sest see on natuke arusaamatu, ja ma ei kasutanud nimi trumli osad, Ma kaardistatud them--, sest nad on osa, mis loenduratribuudi klassi, Ma kaardistatud neid ints. Üks on nagu trumm. Zero on samuti. Seitse on suur müts. Ja maha siin, kus funktsioonid natuke rohkem juhuslik, Need on nagu conga trummid. Nii et kui te arvate about-- võibolla lõbusalt rakendada drum masin on kasutada väga korrektsel mustrid oma trumm. Nii näiteks filtreerimiseks üle nimekirja kõike, mis annab tagasi 1, kui see on võetud moodul 04. Nii et ma saan 1, 5, 9, 13, 17-- nii et see on esimene võita iga meede. Ja siis see on sama asi nihkunud kahe etapi. Nii et Pentsik. Nii et see oleks midagi suurt mütsi. Ja siis jälle siin, see on natuke juhuslik, sest me teeme conga trummid. Ja mul on mõned maracad maha ka siin. Nii et ma võiks nimetada mängida trummi masin, kuid see kesta igavesti, ja see võib hakata haarates üles kõik mälu minu süsteemi. Nii et ma kutsun seda funktsiooni mängida muusikat, mis, nagu me näeme, kasutada kärpimisel paralleelselt koosseisu mängida meie väike Frere Jacques laul koos see imelik drum masin. Võtame pilk. Ja palun ärge parandada minu paigutus kõik trumliosa. Pole minu eriala, kuid ma oli lõbus seda teha. [Muusika mängib] Nii et loomulikult, see on kõik natuke mitte nii lõbus Kui me ei saa muuta selle et skoor nii äkki see võib tõlgendada inimese poolt esineja. Nii et ma ei hakka seda siin. Olen juba loodud faile. Te näete, et seal on dot LilyPond file-- ja selle on minu Segue üle Connor-- ja dot MIDI faili, ja dot PDF-faili, mis on see, mida LilyPond lõppkokkuvõttes luua. Aga need on need skriptid, ja ma lihtsalt käivitada neid nende abiga võimalusi. Kui sa need üles ja töötab Euterpea, saate luua MIDI faili. Ja siis alates MIDI faili Selle MIDI 2LY programmi saate luua Lily Tiigi faili, ja siis võib tekitada PDF skoori. Ja me peaks võtma pilk see. Nii Connor ilmselt näidata kuidas märke sellest parem, kuid see on Frere Jacques nagu loodud mulle Euterpea. See on lihtsalt C. Ma oleks pidanud arvasin välja, mida häkkida see tegelikult. Aga see on torujuhtme kuidas sa seda, et. Räägime lähemalt LilyPond. CONNOR HARRIS: OK Vaatame. Kas sa mainida Loe Sa Haskell? STEPHEN KREWSON: Oh yeah. Tutvu Loe Sa Haskell. See on ka ressursse. See, kuidas ma hakkasin õppida, ja see on suurepärane. Mitte loll õppimist. CONNOR HARRIS: Nii et see on online. Nii mees nimega [kuuldamatu] learnyouahaskell.com, tühikuid. Grammatika on haige. STEPHEN KREWSON: See on illustreeritud ka. CONNOR HARRIS: Mis on LilyPond? See on deklaratiivne programmeerimine keele muusika ladumiseks. Nii declarative-- saate mõtle asju nagu HTML, kus sa ei ole saying-- HTML ei saa öelda, kuidas veebibrauserid peaksid muuta lehekülgi samm-sammult. See on lihtsalt öeldes see on tekstiline kirjeldus mida sa tahad lehel nägema. Ja siis see on ka programmi mis koostab selle keele, või siis lugeda tema kohta ja siis tegelikult teeb ladumise teile, ja see sülitab välja need Imeline otsin PDF hinded. Samuti saate PNG või mis iganes. Hea võimalus mõelda Käesoleva on analoogiline on see, et LaTeX on omamoodi nagu LillyPond, kuid just tavaline ladumiseks. Nii et selle asemel of-- see ei ole WYSIWYG, mida näed Millised on teile, nagu, ütleme Finale on, või Sibelius, või Microsoft Word, kus saab sisestada reaalajas ja eelnõu asju reaalajas ja vaata muutused koheselt. See on tekst põhineb. Sa pead koguma oma hinded kasutades eraldi programm ja välja tulla PDF hiljem. See on natuke vähem mugav kasutada, kui olete üritan kirjutada otse arvesse skoor ja sa oled üritab kirjutada arvutis. Aga seal on palju eeliseid see. Üks, ta ei vaata palju kenamaks, sest LillyPond saab tegelikult võtta aega, et teha paigutusotsustel korralikult, Erinevalt Sibelius või Finale, mis on teha kahjustusega algoritme nii et nad saaksid kuvada asju reaalajas. Miks on LilyPond-- arvutigraafika on raske. Kui sa teed midagi muusika ja sa tahad kirjutada hinded, sa ei taha kirjutada kõike ise alustades kuidas juhtida staabid ja kuidas juhtida märkmikud. See on väga raske. See on olnud varem teinud. Sa oled hea. Kui soovid kasutada Finale või Sibelius, failivormingute jaoks need asjad on väga keeruline, ja sa ei saa tõesti neid kasutada programmiliselt. Võite avada Sibelius koos Finale ja minge File, Ekspordi PDF ise, Aga sa ei saa tõesti helistada, et skripti. LillyPond, võite helistada omadest skripte. Sa võid kergesti itereerima LillyPond LaTeX. Ma ei ole nii palju aega, et minna arvesse nende tehnoloogiate kohe, kuid nad on olemas. Kui te soovite vaadata arvesse LillyPond raamat, see on programm, mis on varustatud Sinu LillyPond jaotus, ja see on ette iterating LillyPond fragmendid LaTeX kui sa tahad midagi teha nagu suur muusikateaduse dokument näidetega, näiteks. Ja see on hea oskus elu kui sa teed midagi muusika, mitte ainult CS50. Olen kasutanud LillyPond kõik minu koosseisu projektid sest ma olin põhimõtteliselt vanem keskkoolis. Nii et siin on mõned lihtsad näited. See on põhimõtteliselt esindaja ja raskusaste et enamik inimesi ausad nad üritasid kasutada LilyPond lihtsaid projekte. See esimene on algusest kuni Urkukoraali Bachi. See alumine on väljavõte ühest oma tööd, ja see on lihtsalt seal näidata sa asjad [kuuldamatu] pannes mitmes reas sama personal, kuidas lüürilise undersetting toimib. Lyric aluskihid on asi, mis on väga lihtne kasutada LilyPond eest koorimuusika. Ja nii siis seal on veel mõned keeruline näited siin. Kõik need on tehtud LilyPond ja nad teostatav. Esimene katkend on pärit [Kuuldamatu] poolt [kuuldamatu]. Ja see [kuuldamatu] alates tükk soolo bass flööt poolt [kuuldamatu] kes on longtime-- kes oli kauaaegne liige muusikaosakond siin, ma arvan. Ma ei tea, kus ta on läinud ära. Aga ta oli nõunik Harvard Heliloojate Liit pikka aega. Wonderful mees. Ja ta kirjutab muusikat, mis on väga keeruline märke, et LillyPond saab siiski hakkama väga kenasti. Nii lihtsalt teile tunnet, mida see asi võimete are-- nii sisemust LillyPond on väga keerulised. Ja te võite seda kasutada kaua, sealhulgas mõned päris keeruline asju, ilma tõesti võttes teada palju neid. Aga põhiline mõte on selles, et madalaimale tasemele, aatomid LillyPonds on märkmeid. Lisad sisaldavad kontekstis nimetatakse hääli. Nii hääle kontekstis põhimõtteliselt vastab ühe rea polüfoonia. Ja siis kontekstis saab sisalduvad hierarhiliselt kõrgema taseme need, mis esindavad staabid kaotusseisu või suurematesse rühmadesse, nagu klaver staabid või koori staabid, ja siis lõpuks Kogu skoor kontekstis. Ja te võite tegelikult hõlmab Mitme hinded raamatusse. Ja igas kontekstis on arvu kinnitatud graveerijad. Kui sa vaatad läbi sisu kontekstis ja printida teatud sümbol või teatud liiki sümbolid nagu vaja. Nii et iga hääl kontekstis seal on [kuuldamatu] märkmed graveerija, et on põhimõtteliselt funktsiooni või objekt, mis kirjutab kõik märkus pead paremale osad lehel. Siis on lõhki graveerija, mis kirjutab välja clefts töötajate kohta. Siis on metronoom märgi graveerija, et kirjutab välja metronoom kaubamärkide skoor. Ja kõik need sobivad päris hästi hierarhia. Ja see on väga, väga, väga kohandatav, mis teil on vaja Kui sa tahad saada asju. Nii et kõik kontekstides on palju erinevaid atribuute et saate muuta kõike alates vahed erinevate fontide Valiku suurused asju. Kui sa tahad teha isegi keerulisem asju, seal on sisseehitatud skript keel. Nad kasutavad süsteemi, mis on dialekt Lisp. Need ilmselt ei sulle midagi. Aga põhimõtteliselt, kava teise funktsionaalse programmeerimiskeele suuremal või vähemal määral. STEPHEN KREWSON: Tie-in. CONNOR HARRIS: Jah. See on hea tie-in, ma arvan. Ja seda kasutatakse õpetamise keel, tegelikult, alla Mass Ave. MIT. Ja see on väga mugav LillyPond erinevat tehnilistel põhjustel. Ja kui sa tahad teha lihtsaid tweaks sõltub conditionals, jaoks example-- seal teatud seisund skoor mis on täidetud, teha muudatusi, et paigutus või whatnot-- siis need võimalused on olemas. Nad on keeruline. Nii et siin on päris lihtne koodi proovi. See on viis rida. Põhimõtteliselt ma määratlemisel kaks staabid. See on 3/4. Esimene töötajad on lisatud tempo märk, kuid mis on tegelikult toimub minna kogu tulemus, sest tempo märgid olete jaole. Metronoom märk graveerija on lisatud skoor kontekstis. On erinevaid võtmeid, sest [kuuldamatu] graveerija on lisatud staabid. Tegelikult võite seda teha on. Proovi kirjutasin on tegelikult C-duur, aga see on lihtsalt näitama sul võib olla erinevaid võtmeid erinevate staabid. Ja põhiline süntaks on teile kirjutan tähele nimed E, F, G, mida iganes. Kui sa tahad teha alteratsioonimärgid, sa liidet või ES. See on Hollandi Muusikateaduse konventsioone. Ja teha oktaavi hüpped, sa pead kasutama Nende märgistuste, koma või ülakoma. Suhteline tähendab lihtsalt mida iganes sa pead tähele, see automaatselt plaec on oktaav lähim eelmine. Ja kui sa tahad hüpata üle fifth-- öelda viiendik või more-- siis sa pead kasutama [kuuldamatu]. Aga muidu, sa ei pea täpsustada oktaavi iga noot. Ja suhteline C, peaminister ja C, sa lihtsalt määrata keset C ja C alust, eriti esimestest nootidest. Siis on need staabid, et korraldada Nende kahe hääle või proovid muusika, ja teil on tulemus. Ja see näeb välja selline. Kui soovite võtta aeg kopeerida, et proovi LillyPond kood eelmise lükake siia alla, ja sa saab kirjutada seda LillyPond ise. Ma tean, et meil midagi mis näeb välja palju nagu see. Nii on teine ​​tehnoloogia nimetatakse Muusika XML säilitada täiesti erinevad inimesed. XML on tekstiline andmed structure-- ma ei peaks ütlema andmed structure-- öelda metafoor kaart omamoodi. Ja see on kavandatud korraldada hierarhiliste andmete väga hästi. HTML, näiteks on teatud tüüpi XML. Ja te võite öelda, XML, sest nad olid kõik noolsulgudes ja nurk sulg kaldkriipsuga märgid et näidata andmeväljad. Ma ei ole koodi näiteks Music XML. Leiate selle ise. Põhimõtteliselt põhjust võiksite kasutada XML nagu vaheetapp on, esiteks, see on andmevahetuse vorming jaoks põhimõtteliselt every-- ma ei peaks ütlema iga, kuid on palju erinevaid skoor kirjanikud. Nii et kui te kirjutate Muusika XML, mitte ainult ei LillyPond lugeda abiga see auxilary programmi nimega Music XML Ly, vaid ka Finale saab lugeda see, Sibelius seda lugeda. Sõltuvalt sellest, kuidas teie sisemine objekti hierarhia töötab esindavad muusika, see võib olla lihtsam kirjutada Muusika XML kui LillyPond ja lihtsalt tugineda Muusika XML Ly teha muutmist. Ma ei usu, et [kuuldamatu] on muusika XML. STEPHEN KREWSON: see ei ole. Keegi kallal, kuigi. CONNOR HARRIS: OK. Euterpea ei ole Muusika XML väljund funktsioon veel. Kui soovite lõpliku projekti idee, võibolla võtke poisid et Stephen teab, ja nad võiksid kasutada oma abi. STEPHEN KREWSON: Ma armastan seda. CONNOR HARRIS: Ka põhimõtteliselt, Iga programmeerimiskeelte mis on väärt oma soolast Juba on XML raamatukogu siis võite sisemiselt teisendada kõik oma muusikat mingi objekti et XML raamatukogu saab kirjutada meelde, et oleks vaja vähem muudatusi oma sisemist struktuuri mingil muusika objektid tahan kirjutada kui kirjutamist otse LillyPond oleks. Siis lihtsalt printida välja XML XML raamatukogudesse oma keel, mis tagab, et see on süntaktiliselt õigesti ja kõike, ja seejärel teisendada see LillyPond. Nii tehnoloogia võiksite uurima, kui sa teed midagi nagu nii. [Kuuldamatu], teise auxilarry tehnoloogia. See on põhimõtteliselt Tech Works või Tech Studio LillyPond. Seega pakub abi süntaks, malle erinevat ühise kombinatsioone vahendeid. See võimaldab poolitatud ekraanil vaatamise nii sul võib olla oma koodi ühes aknas ja PDF teises aknas ja kliki kohti PDF hüpata vastavale täpid lähtekoodi. See on kasulikum, kui sa oled tegelikult kirjalikult LillyPond failid ise kui siis, kui sa oled teeniva neid programmiliselt. Aga jälle, see on midagi kasulikku on. Hea. Teine resources-- ma lihtsalt läbida seda väga kiiresti. LillyPond manuals-- LillyPond on väga hea dokumentatsiooni oma kodulehel. Nad on ka juhendaja. Nad on syntaksiviite. Nad on sadu klippe erinevat väikestest asjadest yo vajada teha, et näidata erinevaid võimalusi. Kui soovid kasutada skriptimiskeel või laialdasemalt kohandused, siis pole siseosad viide, et URL. Kui soovid kasutada Muusika XML, seal on et URL, musicxml.com/tutorial. Ja siis, kui teil on vaja õppida kava sest sa tegelikult soovid kasutada skriptimise rajatiste LillyPond, siis seal on [kuuldamatu] nimetatakse Struktureeritud tõlgendamine arvutiprogrammide, mis ei ole ainult teise Suurim CS õpik kunagi written-- Leia mind hiljem, kui tahad teada ma arvan, et suurim ühe on-- aga see on ka väga hea Sissejuhatus keele õige. Te ei pea enam kui Esimese paari lõigud. Ja see ongi kõik. Kas küsimusi on? Üliõpilane: Kust alla laadida Sinu loodud Frere Jacques nii et ma ei pane see minu iPod? STEPHEN KREWSON: Noh, võite kirjutada välja mõned wav faili Euterpea. Ja sul on kood. See aasta github. Tee oma variatsioonid Frere Jacques poolt CS50 taru meelt. See oleks tore. CONNOR HARRIS: Keegi teine? STEPHEN KREWSON: Vajame parem bass trumm, liiga. See on tõesti halb. Üliõpilane: Euterpea ei ole mitte ainult koosseisu poolel, kuid signal-- STEPHEN KREWSON: Jah. Tegelikult tööd ma tegi Euterpea kui ma võttis see-- seal on magistriõppes Yale, et kasutab see-- oli heli sünteesi. Nii et tõesti kena viis kasutades nooli ja mõned märke nägime kohta komponeerimise koos signaali funktsioone. Eelkõige bassi kõige neist on lihtsalt siinus. Aga kui te hakkate neid in imelik programmilisi võimalusi, saad hull heli mõju, nagu imelik kaskaadid. Võite luua väga sõmer kõlab palju ümbersuunamine. Ma tegin projekti granuleeritud süntees, mis on kusagil vahepeal FM ja proovide võtmist. Võtad väga väike, vähe proove ja seejärel kombineerima need mingisugune modulaator ja luua rikkama heli. Samuti tegi füüsilise modelleerimine, nii üritan mõelda füüsika ja psühhoakustikast midagi sellist trompet, ja mõtlema, kuidas heli on kopsakas off kella trompet ja akustika ruumi ja modelleerimine et põhiliste ostsillaatorid. CONNOR HARRIS: Tänu nii palju. Tänan, et tulid. Ja ma olen alati valmis võtta küsimustele email-- connorharris@college.harvard.edu. STEPHEN KREWSON: Jah. stephen.krewson@yale.edu. Cool.