CONNOR HARRIS: Hei. Olen Connor Harris. Olen CS50 CA Harvardin. STEPHEN KREWSON: Olen Stephen Krewson. Olen TF CS50 Yalen. CONNOR HARRIS: Ja me aiomme puhua joitakin tekniikoita, jotka saatat haluat käyttää jos olet kiinnostunut tekemään opinnäytetyön tai oikeastaan mitään musiikkia. Aiomme keskittyvän ensin ohjelmointikieli nimeltään Haskell. Se on toiminnallinen kieli, joten paradigma on hyvin erilainen kuin C tai PHP tai muu välttämätöntä kielillä että olet käyttänyt jo, ja erityisesti on kirjasto kirjoitettu Haskell nimeltään Euterpea, joka voi auttaa ihmisiä kanssa säveltämisen toiminnallisesti, pohjimmiltaan. Ja Stephen käydään kautta hyvä esimerkki siitä. Tämän jälkeen, minä esitellä sinulle jotain kutsutaan LillyPond, joka on tekniikka ladonta musiikkia. Se on tavallaan kuin LaTeX musiikin jos joku teistä ovat käyttäneet LaTeX matematiikan luokkia tai muut P joukko luokkia tai mitä olet. Ja niin minä annan sinulle, taas, muutamia yksinkertaisia ​​esimerkkejä, jotka ja kohta sinua yleisen suuntaan joitakin parempia resursseja. STEPHEN KREWSON: In Lisäksi ajattelimme, että olisi siistiä perustaa hieman vihjeitä kohti putki välillä Euterpea syntyvän MIDI-tiedostoja vuonna LillyPond, joten tarjoamme joitakin ohjeita skriptejä tehdä niin, että ovat varustettu LillyPond vain pitää se avoimen lähdekoodin ja saada putki menossa. CONNOR HARRIS: Jälleen, meidän pitäisi korostaa, nämä kaksi tekniikkaa, sinua ei tarvitse käyttää niitä yhdessä. He eivät suunniteltu toimimaan yhdessä, vaikka he tekevät erittäin hienosti. STEPHEN KREWSON: Oikea. Ja täysin ilmainen. CONNOR HARRIS: Niin kuittaukset, vain lukea, että. Stephen KREWSON: Asianmukaisesti huomattava. Kiitos niille seudullamme. Tämä minä viipyä vain hetken. Asennus on vähän hankala. Olemme lukea minua GitHub että voit vilkaista. Vain sähköpostia minulle, jos sinulla on kysyttävää. Mutta me suorittaa tämän olettaen että tämä toimii kaikille. CONNOR HARRIS: Ja jos et voi saada LillyPond töihin, no big deal. Ei ole eläviä kokoelma että on mukana, ainakin minun pää. STEPHEN KREWSON: Haskell ja LillyPond olisi molemmilla on asentajat. Euterpea on ladattavissa paketti, niin edelleen ja niin edelleen. Joten puhumme tietokonemusiikkia. Ja tämä on vain hyvin 50000-jalka näkymä. Siellä on muutama eri puolia. Ja tämä on karkea ja on menossa peittää joitakin yksityiskohtia. Mutta voisimme ajatella jotain kuten algoritmeihin koostumus, algoritmeja käyttäen, käyttämällä koodia, tuottaa tietyntyyppinen of-- ehkä itse samanlainen peräkkäisistä nuoteista, tai ehkä muistiinpanoja joissakin rajoitus. Ja sitten ne voivat olla suoritettu tai tulkita analoginen välineet tai jotain sellaista. Mutta koostumus oli tehty algoritmisesti. Mutta tietenkin, ehkä alue tietokone musiikkia tai digitaalisen musiikin olemme enemmän tuttuja on digitaalinen äänen synteesi tai digitaalinen näytteenotto ja digitaalisen tallennuksen. Paljon digitaalisia välineitä tapahtuu digitaalinen näytteenotto. Itse asiassa, me olla jollakin kuin muodossa äänen kirjasinkirjaston myöhemmin. Mutta on myös jotain kutsutaan digitaalinen synteesi, joka tuli ulos on 70-luvun lopulla ja osaksi 80-luvun kanssa Yamaha ja John Chowning Stanfordin tekee FM synteesi tai FM-synteesi, jossa piti harjoittaja signaali ja modulointisignaali sekä äänen taajuuksia. Mutta mitä me keskittyneet tänään on jotain kutsutaan MIDI, ja tietenkin, algoritmeihin koostumus. Emme aio tehdä välineitä, mutta olemme sen sijaan aikoo tehdä musiikkia, ja sitten, että saa tulkitaan joidenkin välineitä, ovat vaatimustenmukaisten että General MIDI standardi. Niin mitä MIDI? En aio saada liian syvälle sitä, mutta MIDI on tiedonsiirron protokolla. Se on eräänlainen opas poikki eri yritysten ja toimialojen järjestämisestä ääniä tai laikkuja. Joten näemme, että siellä MIDI-standardi kaikkien eri lyömäsoittimet ääniä ja MIDI suositukset Kaikkien erityyppisten syntetisaattori tai eri instrumentin kaikki ryhmien orkesteri, sano. Olet todennäköisesti tuttu 0 kautta 127 MIDI viestejä. MIDI signaali on tyypillisesti yksi bitti, joka osoittaa onko se tietoja tai tilapaketti, ja sitten on Seitsemän bittiä signaalin. Ja nämä voivat valvoa kaiken tilavuus toimelle tai painetta tietyn avaimen jos olet suorittaa kanssa MIDI ohjain sekä tietenkin, toteaa. Ja tietenkin, MIDI on ollut erittäin hyödyllinen, koska se on tapa lanka yhdessä tai ketjuttaa nippu MIDI laitteita. Minulla on seitsemän tai kahdeksan takaisin kotiini. Se saa todella monimutkainen, mutta se on todella voimakas. Ja se on todella vanha. Se on peräisin 80-luvun alussa, ja se on todella mukava ja pieni. CONNOR HARRIS: Joo. Kaikki klassinen Nintendo videopelit olisi luultavasti on MIDI-tiedostoja musiikkia, esimerkiksi. STEPHEN KREWSON: Tässä esimerkki General MIDI, osoittavat MIDI eräänlaisena Yleisen protokollaa. Ja mielestäni voimme ajatella ominaisuuksien eroista että pitäisi olla jotain nämä soitinääniä ja todellinen toteutuminen näiden välineiden ääniä in ääni fontti tai tietyn MIDI syntetisaattori olevan ero välillä ehkä typeface-- jossa sanotaan, Yleensä tämä on suunnittelu tämä erityisesti tapa esittää characters-- ja tietyn fontin että on tietty koko ja äänenväri, ja siellä on toteutumista the-- CONNOR HARRIS: Ehkä parempi vertailu olisi olla Unicode standardi says-- se antaa numeron jokainen merkki, ja todella jokainen kieli maailmassa, tai valtava joukko skriptejä kielen maailmassa, ja sitten ne ovat sulatettu jotain graafinen eri fontti paketteja. Ja tietenkin, voit ajatella MIDI kuin Unicode äänen. Ja se on vain lista of-- iso virta tapahtumia ja välineiden ja vaikka mitä, ja sinulla on oltava erillinen ohjelma, kuten kirjasintyyppi, tehdä sen osaksi jotain, joka on kuultavissa. STEPHEN KREWSON: Miksi Haskell? Haskell on funktionaalinen ohjelmointi kieli, hyvin kehittynyt, hyvin erilainen kuin C, hyvin erilainen kuin PHP. Ja aiomme nähdä, että siellä Helppokäyttöinen yhdistetty funktio Haskell että antaa meille mahdollisuuden tuulta kautta säveltäminen tai kirjoittamalla ylös, puhtaaksi, jotain Frere Jacques, tämä yksinkertainen laulu että on paljon osia siinä, että ovat itse samanlaisia ​​tai toistuva. Joten tämä on joitakin motivaatio miksi käytämme Haskell, jossa toiminnot ovat ensimmäisen luokan kansalaisia. Ja halusin jatkaa tämä vähän. Se on hieman helppo notate Frere Jacques Haskell. Mutta mitä jos halusimme lisätä rummun osa sitä? Mitä jos halusimme yrittää tehdä jotain Roland 808 tai 909 rumpu koneessa, jossa on noin 16 eri vaiheet? Yleensä nämä ovat mielletään 16. toteaa. Ja voit ohjata maailmanlaajuisen tempo, ja voit valita joukko eri lyömäsoittimet osat ja bassorumpu, taputus, eri ansat, avoin ja suljettu korkea hatut Näiden lajitella kanavia, ja sitten voit EQ tai säätää niiden äänenvoimakkuutta. Ja näemme mukava tapa Haskell edustaa tämän vaiheen sekvensseri kanssa kaikki eri hienoja asioita Haskell voimme tehdä tuottavan luettelot ja suodatus yli luettelot, kartoitus yli luettelot, kartoitus toiminnot yli luetteloista. Ja nopea anteeksipyynnön. Tämä on hyvin pintapuolinen ja liian nopea luonnos joitakin näkökohtia Haskell ja Euterpea, joka on domain-specific upotettu kieli kirjoitettu Haskell musiikki tyyppejä. Joten älä tutustu koodi verkossa. Tuli jopa GHCI, joka on Glasgow'n Haskell Compiler tulkki. Ja minä tehdä joitakin Tämän vuonna hieman niin näet miten se tehdään. Ja tämän avulla voit ladata sisään the-- syntaksi on kaksoispiste ja sitten komento. Voit ladata tiedostoja. Voit käyttää Selaa niihin tiedostot nähdä kaikki toiminnot, olemassa tietty moduuli. Ja sitten näemme, tyypit ja tyyppi luokat ovat niin tärkeitä Haskell, joten voit aina check-- erityisesti jos olet työskennellyt uuden DSCL kuten tämä, mikä on musiikkia tyyppi? Tiedän miten numeerinen tyypit työskentelevät Haskell, mutta en tiedä paljon musiikista. Mutta voit tutustua, miten he määriteltävä käyttäen t tai kirjoita command ja sitten soittaa tietyn toiminto tai tieto-objektin. CONNOR HARRIS: Joo. Jos olet ajatellut C ja kalahtaa oli hardass tyyppejä, sinulla ei ole aavistustakaan siitä, Haskell. Hyvä asia Haskell on, että jos saat koodin koota ja jos Haskell tyyppi tarkastuksia, se on luultavasti oikeassa, koska tyyppinen järjestelmä on niin tiukka. STEPHEN KREWSON: Joo. Joten haluan vain mennä through-- ja uudelleen, tämä ei tee sitä justice-- muutamia piirteet Haskell, että ainakin sen creators-- ja se luotiin 1980-luvun lopulla, jonka joukko ihmisiä, komitea noin 20 people-- ajatteli olivat tärkeitä. Ja ensimmäinen asia, he luetellut paperi kuvattu syntyhistoria Haskell ensimmäisten 20 vuotta tai niin oli, että se oli laiska. Mitä tämä tarkoittaa? No, se tarkoittaa, kun meillä on jonkinlainen ilmaisun, meidän on arvioitava sitä. Ja Haskell tekee tämän puhelun jonka tarve tavalla tai ei-tiukasti. Eli jos meillä on joukko komponentit meidän ilmaisun, yritämme viivyttää arviointi näistä alakomponentteja kunnes absoluuttinen viime minute-- eli siihen asti, me todella tarvitsemme niitä. Joten tämä means--, joka on todella siistiä, varsinkin jos ajattelemme, abstraktio musiikillinen askelsekvensseri. Se kytketään päälle, ja aloitat käynnissä vaiheen sequence-- jos koskaan työskennellyt rummun machine-- ja se vain menee ikuisesti. Joten se olisi todella mukavaa, jos me voi jäljitellä että Haskell. Ja voimme tehdä sen kanssa ääretön arvot, erityisesti ääretön luetteloihin. Se on erittäin helppo kirjoittaa ääretön lista Haskell. Voisit vain käyttää syntaksia alas täällä, jossa näet 1 kautta 3, poistaa 3 1 piste piste, ja että on ääretön lista kaikki luonnolliset luvut ulottuvat on niin pitkälle kuin voitte kuvitella. Haluan esitellä käsite taittuu heti. Ja vielä, tarkoitus Seminaarin ei ole oppia taittuu Haskell tai korkeamman asteen toiminnot. Mutta haluan esitellä sen antaa tarkan käsityksen siitä, miten outo Haskell on ja kuinka voimakas se on. Ja erityisesti, aiomme be-- kun teemme eri rummun osia, aiomme olla manipuloimalla luettelot numeroita, taittamalla päällekkäin. Ja tehdä niin, käymme käyttää karttoja ja taittuu. On oikeus assosiatiivisia kertaiseksi, mikä on tämä oikeus here-- 1 miinus määrä, 2 miinus määrä, 3 vähennettynä 0. Ja syntaksi kertainen, annat kertaiseksi perusarvo ja sitten operation-- tässä tapauksessa, lisäys tai vähennys. Olen osoittanut molemmissa tapauksissa. Ja sitten on akkuja, kertyy koko lista, soveltamalla että operaattori plus tai miinus, ja sitten kertynyt se. Joten tämä on the-- jos se oli nimeltään käännettävät r plus 0 alkaen 0, me sitten tiivistää kaikki numeroita luetteloon. Ja että luettelo 1-3. CONNOR HARRIS: Joten laittaa se toiseen Näin kertainen r kestää kolme väitettä. On toiminto itse ottaa kaksi argumenttia, sitten on käynnistin arvo, ja siellä on lista arvoja. Ja mitä teet on otat käynnistin arvo, ensimmäinen arvo, laittaa ne toiminto. Mitä saat ulos, ottaa, että rehulla osaksi toimintaa toinen arvo, mitä saat ulos, ottaa, että rehu että otetaan funktio kolmas arvo. Ja sitten jos mennä alas tämä koko lista tällä tavalla, aiot saada lopulta jotkut yksikkö arvo, joka on samantyyppisiä, mitä olet aloittanut ulos ja samantyyppisiin kuten asiat luettelossa, ja sitten se paluu tulos kertainen R. STEPHEN KREWSON: Eli erityisesti, nämä ovat korkeamman asteen toiminnot, koska he jotakin muuta toiminta yhtenä argumentteja. CONNOR HARRIS: Joo. Jos olet käyttänyt tiettyjä muita languages-- Tiedän R, [kuulumaton] kieli on tämä, kutsutaan Vähennä. Saatat olla samankaltaisia ​​tehtäviä muilla kielillä, soitti juuri eri asiat. STEPHEN KREWSON: Ja mikä on mukavaa noin kertainen R tässä tapauksessa on, että kansi R voi työskennellä ääretön luetteloita. Joten tässä pohjalle, tämä P5 on tuottaa toteaa, että kytketään päälle askelsekvensseri varten jotkut rummun osa, viides rummun osa, ja ehkä se conga rumpu tai jotain. Ja tämä on tarkoituksella tylppä tapa kirjoittaa tämän, mutta se on hauskaa, koska se osoittaa paljon asioita noin Haskell ja Euterpea. Joten kertainen R Tämän colon-- paksusuolen on vain toimija, joka työntää asiat yhdessä list-- kehotti tyhjä luettelo, joka on vain tyhjä suluissa. Ja Soitan että tässä ääretön luetteloon. Tämä on itse asiassa kaksi luettelot lasketaan yhteen tänne. Listan 1 pilkku 6 piste piste on 1, 6, 11, 16. Joten Haskell-- vain muutama merkki, voit voi tuottaa koko numerosarja jotka ovat viisi numeroa toisistaan venyttely on äärettömyyteen. Ja minä alkuun lisättävä kyseisen tämä lyhyempi pieni list-- 3, 8, 21-- vain näyttää miten voit liität listoja. Ja sitten olen taitettu itse. Ja tämä päätyy vain on eräänlainen identiteetti toiminta, mutta se on ääretön. Ja fold R voi tehdä sitä, koska se laiskasti arvioi, kuten edellä. Jos meillä on 1 ja 2 ja 3, voimme vain bracket pois koko loput siitä. Se ei toimi miinus tai plus, mutta se toimii tämän paksusuolen identiteetti toiminta luettelossa. Miten siis käytännössä käyttää, että jos me on äärettömän pitkä lista asioita? No, Haskell tarjoaa paljon functions-- ja näyttää enemmän osaksi näitä oma time-- kuten ottaa joka sanoo, OK, olemme aikaan tätä ääretön lista, mutta me vain vie jonkin lukumäärä se Ja tässä case-- näemme tämän myöhemmin meidän rumpukone code-- GM on vain jonkinlainen maailmanlaajuinen muuttuja useita vaiheita SEQUENCER. Telan Koneet I osoitimme, se on tyypillisesti 16, mutta olen toteuttanut sen 32. Se ei ole oikeastaan ​​väliä. Haskell on myös puhdasta, joten se on vahva staattinen tyypitys että Connor viittasi. Joten toiminnot ovat matemaattisia sense-- he enemmän matemaattisia että he taattu jotta ei pääse tai muuttaa minkäänlaista muuttuja tai suorittaa tulo tai lähtö. Joten jos sinulla on toiminto, se on deterministinen. Se palaa aina sama arvo osavaltiossa ohjelman tai pysyy samana. On, tietenkin, monadisen poikkeuksia tähän, mutta se ole meidän soveltamisalaan. CONNOR HARRIS: Joo. Mitä tämä tarkoittaa, vaikka on olemassa on muutamia tärkeitä [äänetön] seuraukset. Yksi on, että se on erittäin helppo yhdensuuntaistettua Haskell ohjelmia. Koska jos sinulla on, sanoa, funktio, joka tarvitsee toimivat miljoonan arvoista, jos tiedät, että toiminto aina anna sama arvo, jos syötät tietyllä value-- jos olet [äänetön] f 1, f 2, niin f 3 tai whatnot-- f 1 ei aio kirjoittaa tiedostoon tai tehdä jotain että muuttavat arvoa F2. Voit vain jakaa tämä toiminto miljoonaa eri koneita tai miljoona eri langalla tai mitä tahansa, saada kaikki vastaukset takaisin, saada kaikki paluuarvot takaisin, ja sitten se on siinä. Niin kovin helppo yhdensuuntaistettua asioita. Huonona puolena on, että panos ja ulostulo erityisesti sovi tyyppinen järjestelmä hyvin monimutkainen tavalla. Emme aio mennä, että juuri nyt, mutta olen Kannustamme sinua katsomaan joitakin resursseja verkossa, jos haluat oppia siitä. STEPHEN KREWSON: Niin kirjoita classes-- ja tämä was-- luokat tyyppien keksittiin ratkaista ongelma operaattorin ylikuormitus. Joten halusimme saada tasa erityyppisten asioita. Tietenkin voisimme ajatella of-- välisen tasa-arvon numeerinen tyypit on hyvin helppo ajatella, mutta Entä tasa-arvosta lista? Entä tasa-arvosta puu jalka tietorakenteita? Ja tämä on kaikki mahdollista Haskell koska tyypin luokkiin. Joten jos määrittelee tiettyjä tietoja type-- ja täällä, nämä ovat musikaalisia kentillä. Olemme vihdoin Joidenkin tietokoneen musiikkia. Meillä on siis C, C terävä, ja niin edelleen ja niin edelleen. Ne kuuluvat nippu erityyppisiä luokissa. EQ-- ne kuuluvat EQ tyyppi luokan. Tämä tarkoittaa, että ne tukevat tasa toimintaa. Joten voit arvioida, onko yksi sekvenssi musikaali primitives on sama kuin toista. Ne kuuluvat järjestysluku luokan. Se tarkoittaa, että on tilaus näihin. D tulee sen jälkeen C. cis tulee sen jälkeen C samoin. Ne kuuluvat luokkaan osoittavat, mikä tarkoittaa, että ne voivat tulostetaan konsoliin tai terminaaliin. Ne kuuluvat luokan haastateltu, joka tarkoittaa sitä, että vaikka nämä ovat merkkejä, heillä taustalla numeerinen edustus alkaen 0 ja menee pois läpi kuitenkin monet asiat ovat täällä, 20 tai niin, tai 30 tai 40, ehkä. CONNOR HARRIS: Ja kun meillä tietotyyppi että derives-- kanssa avainsanan "Deriving--" tietyntyyppistä luokka, se tarkoittaa, että kääntäjä yrittää rakentaa jotain automaattisesti. Joten ehkä sinun kannattaa määritellä laatu eri tavalla. Sinun kannattaa määritellä cis tasavertaisina D tasainen, esimerkiksi. Tällä rakenteella täällä, en usko cis ja D tasainen on sama, koska kääntäjä automaattisesti say jokainen erilaisia ​​mahdollisia arvo eroaa kaikista muista. Joten on mahdollista ohittaa oletuksena toteutukset tämäntyyppisiä luokkiin. Jälleen, katso viite jos haluat oppia siitä. STEPHEN KREWSON: Ja täällä, itse asiassa, tämä will olla avuksi, kun koodin myöhemmin. Näemme joitakin infix toimijoiden peräkkäiseen koostumus, rinnakkainen kokoonpano, ja niin edelleen, nämä plussia ja yhtäsuuruusmerkit ympäröi kaksoispisteet. Tämä tarkoittaa, että voimme pelata näitä eri musiikki primitiivit yksi toisensa jälkeen. Se on juokseva koostumus. Tai voimme pelata niitä yhdensuuntainen samaan aikaan. Jotta voin olla musiikillinen arvo, ja sitten tämä vastaa ja kaksoispistettä, Infix rinnakkain koostumus operaattori, ja toistaa niitä eräänlaisena sointu. Ja aiomme käyttää tämä kun yhdistämme meidän rummun osa meidän pikku Frere Jacques laulu pelata nämä kaksi sekvenssit musiikillisen arvot samaan aikaan. Currying is-- Curry on viimeksi nimi Haskell Curry, joka Haskell kuva on nimetty. Ja tämä antaa meille mukava eleganssi kun olemme kirjallisesti kaikki nämä eri toimintoja tai suodattimet, jotka olemme tulee kartoitus yli meidän luetteloita. Funktio kaksi arguments-- f x ja y-- voidaan esittää f x soveltaa y. Joten se on tehtävä yksi argumentti joka palauttaa toinen funktio yksi argumentti. Joten tämä tarkoittaa, että voimme kartta funktio f x yli lista y n. CONNOR HARRIS: Haluatko antaa esimerkin tästä? STEPHEN KREWSON: Joo. Minulla on esimerkiksi oikeus täällä joitakin asioita me kirjoittaa. Joten jäljitellä 2-- hyvin, jäljitellä vie yksi arvo, joka on se, kuinka monta kertaa jäljitellä jotain, ja sitten se vie value-- yleensä lista tai jotain. Joten tässä, olemme kartoitus jäljitellä 2 yli toiseen listaan. Joten jos me kartta jäljitellä 2, jos me jäljitellä 2 sovelletaan ensimmäiseen osa tätä list-- ja nämä ovat luettelot musiikin phrases-- tuottaa kaksi "sinua sleeping--" joten sinä nukut, olet nukkumassa. Joten nyt meillä on kaksi. Mutta rinnakkaisia ​​kestää kaksi perustelut, mutta koska olemme currying ja sitten kartoitus, Voimme edustaa jäljitellä 2 että ne on palautettu funktiona yksi argument-- vain jäljittelevän kahdesti. Ja sitten me soveltamalla että kuhunkin osa tätä luetteloa lauseita. Ja concat on Haskell operaation madaltuminen lista. Koska rinnakkaisia ​​2 tahtoa tuottaa luettelo luetteloista. Ja tämä on tämä välimuoto täällä. Ja niin sitten voimme concat tai tasaamaan että kahdesti. CONNOR HARRIS: yksinkertaisempi esimerkki Parkitus, jos olisit like-- kuvitella f on vain kertomistoimintalohkoon, joka ottaa kaksi argumentteja ja palauttaa niiden tuote. Joten jos sinulla on f 4 5, se on 20. Mutta voit ajatella tätä also-- sinulla funktio f 4 joka vie lausumat ja palauttaa neljä kertaa tämä argument-- vain osittainen sovellus, joka vain yksi argumentti 4. Ja jos rehu f 4 5, joka antaa sinulle 20. Ja se on yksinkertaisempi esimerkki Parkitus. Se on yleensä yksi oppikirja niistä. STEPHEN KREWSON: Lambda ilmaisuja tai anonyymejä toimintoja ovat toinen Haskell tunnusmerkki. Joten jos tarvitsemme lietsoa pikku toiminto elämä rinnakkaisia, mutta sanovat, että se ei ole standardin kirjasto, voimme käyttää syntaksia samanlainen seuraavan. Ja me tuulta tänä. Yksi asia näet paljon vuonna rumpu kone olemme soittaessaan niin sanotun suodatin, joka kuten ennen, on kartoitus toiminto yli lista, mutta se on kartoitus Boolen funktio. Joten olemme täällä esimerkki of nimettömänä määritellään Boolen toiminto vain ottaa pari arvoja. Tämä ei ole varsinaisesti anonyymi toiminto. Mutta se on määritellä kanssa että syntaksi lyhyys, ja tämä vie vain X moduuli n- CONNOR HARRIS: Joo. Joten f on funktio kaksi argumenttia n ja p joka palauttaa toiminnon, joka ei itse funktio yksi argumentti, nimittäin x. STEPHEN KREWSON: I mainitussa infix toimijoille. Mitä infix toimijoita? No, infix operaattorit ovat normaalisti me edustamme toimintaa, sanoa, vuonna mathematics-- 2 plus 2 sijasta operaattorin plus ja sitten kaksi perustelua 2 ja 2. CONNOR HARRIS: Sitä kutsutaan Käänteinen puolalainen notaatio, joka on termi Epäilen tahansa te tiedätte. STEPHEN KREWSON: Oikea. Käänteinen puolalainen tai etuliite notaatio. Mutta Haskell päätti Käytä infix toimijoille. Joten nämä ovat joitakin Custom ne, jotka määritellään Euterpea DSCL Haskell. Joten tämä oli juokseva koostumus. Tämä tapahtui rinnakkain koostumus, ja tämä oli truncating rinnakkain koostumus. Ja me tarvitsemme, että meidän rumpukone, koska käytämme viimeinen operaattori että pikku monikko siellä pelata rumpukone pitkin meidän Frere Jacques lauluun. Ja meidän rumpukone on olemaan ääretön. Se vain toistaa ikuisesti. Mutta Frere Jacques laulu ei ole. Se ei ole pitkä. Se on vain muutamia baareja. Joten meidän täytyy pysähtyä rumpukone kuin Heti lyhyempi musiikillinen arvo tulee lopettamiseksi. Ja että infixed operaattori on erittäin hyödyllinen kanssa. Ja infix merkintätapa kuten tämä on tavallaan mukavaa, koska että sinulla on toiminto kuten lainaus, joka antaa kokonaislukujaolla x jotain else-- pahoillani, että pitäisi olla ja b. Voisit kirjoittaa sen lainaus b. Joten jos put-- elementti on Toinen esimerkki tästä. X elementti joissakin luetteloon, jos laitat se Backticks, voit käyttää sitä. Vaikka se ei ole symboli kuten plus tai miinus tai kertaa, voit käyttää nimeä toiminto kuten että Backticks kuten infix operaattori, joka on aika siistiä. CONNOR HARRIS: Tämäkin on kaikki vain syntaktinen sokeri, todella. Se ei vaikuta ydin kielen. STEPHEN KREWSON: Näemme täällä viimeinen lause meidän Frere Jacques laulu, Olen pelannut joitakin pikku sointuja tai kolmasosaa käytetään rinnakkain koostumus operaattori. Tämä on toinen tapa sanoa joidenkin mitä olemme juuri sanoneet. Joten voit Karttatoiminnot yhden argumentin yli luetteloista. CONNOR HARRIS: Jälleen viitteet varten Haskell-- johdanto oppikirjat on kaikki tämän siinä. STEPHEN KREWSON: Joten tässä on aika keskeinen linja askelsekvensseri me katsomaan käyttäen lista ymmärtäminen. Ja näemme täällä on, että elementti kiinteän operaattori takaisin lainausmerkkejä. Joten jos x on osa luettelon X: n, niin soitamme ylös perc toimintoja. Joten perc on vain lyömäsoittimet toiminto. Kestää jonkin arvon p, joka on osa rajoitettu joukko kaikki eri lyömäsoittimet äänet että näimme Edellinen dia, ja sitten se antaa että kesto neljäsosanuotti. Ja muuten se antaa sille QNR, ja QNR on vain neljäsosa Tauko. Joten tämä on rakentaa jotain mukavaa. Meillä on luettelo tekijöistä, ja käymme silmukka joistakin lista yhdestä Max arvoa meidän askelsekvensseri. Ja kun olemme tietyllä I että luettelo yhdestä max, jos se i on jäsen tässä joka on luotu tämän toiminnon, hyvin, niin me käännä se osaksi lyömäsoittimet huomautus. Muuten, me vain pelata levätä, joka sanoen, me vain vaieta. Ja voimme nähdä täällä, että tämä lista ymmärtäminen syntaksi, X on asuttu tässä lista rakennettu yksi maailmanlaajuiseen koko sekvensserin. CONNOR HARRIS: Joo. Perus syntaksi lista käsityksiä on kiinnike, arvo liittyy jotkut muuttujia, baari, mahdolliset arvot muuttujien itse, suljettu kiinnike. Ja jos olet tehnyt asettanut rakentaja merkintätapa kaikesta sellaisesta matematiikan luokan, ehkä asettanut 2n kuten että n on tai n on z. Samanlaisia ​​thing-- tämä merkintätapa on tarkoitus olla viittaavia Kyseisen matemaattinen. STEPHEN KREWSON: Ja voit sovelletaan useita predikaatteja ja useita suodattimia luettelossa ymmärtäminen, joka on varsin mukava. Algebrallinen types-- me ei viipyä pitkään täällä. Ei ole hyvä käsitettä Haskell tai hyvä, selvä käsite miten ottaa vaikkapa oletus parametrin toiminnon tai jotain. Python, tämä on melko helppoa. Voit vain sanoa vastaa siitä ilmoitus toiminto, oletusarvo tapauksessa ei mitään toimitetaan. Haskell, voisit ehkä Käytä ehkä ehkä tyyppi, joka vie joko mitään tai arvo tyyppiä vain. Joten me hyödyntää tätä rumpukone jotta voimme antaa valinnainen tilavuus parametrit jokaisen rummun osista. Niin että antaa meille tapa, jolla EQ tai tilavuus tietyllä kanavalla. CONNOR HARRIS: In muut Haskell esimerkkejä, Saatat nähdä ehkä käyttää toiminnot saattavat epäonnistua. Tämä on yhteinen. STEPHEN KREWSON: Ja voit toimittaa jonkinlainen virheilmoituksen oletuksena. Ja se on erityisen kätevä, kun teet I / O-Haskell. Tämä voi olla temppuja. CONNOR HARRIS: Tai samankaltaisia ​​esimerkiksi ajatella funktion, johon jako parametrin, joka saattaa olla 0. Ja että toiminta voisi palata ehkä mitä tahansa. Joten jos ei ole jako 0, se palaa vain mitä. Ja jos on jakautumisella 0, se palauttaa mitään keinona signalointi virheen. Koska yksi seuraus Haskell n erittäin tiukkoja kirjoittamalla on, että ei ole real-- Poikkeuksia ovat hankalia, pohjimmiltaan, virheiden käsittelyä on hankala. Ja tämä on yksi hyvin yhteinen tapa tehdä se. STEPHEN KREWSON: Joten nyt saamme toiseen aistiharhoja juttu noin Haskell, joka on malli matching ja toiminto määritelmät. Näytin teille viimeisen dian ilmoitus vaiheen sekvenssin toiminto, joka kesti ehkä arvo, sitten int, niin luettelo ints, sitten palauttaa sekvenssin musiikki arvot siellä selityksin sekä äänenkorkeutta ja voimakkuutta. Joten ne kolme seikkaa voivat olla kuvio Hyväksytty seuraavalla tavalla. Ja haluamme aina olla varma do perustapauksen tai poistu tapauksessa ensin. Ja nämä alaviivoja voi vain tulkita tarkoittavan mitään arvoa, joka on siellä. Joten jos saamme puhelun vaiheeseen järjestyksessä joidenkin arvo jokin muu arvo, ja sitten tyhjän listan, mitä haluamme palata on vain hiljaisuus, levätä 0. Ja sen sijaan, että on tyhjän listan tai 0, se levätä 0, koska olemme tekemisissä musiikin tyyppi, ja tyhjän listan musiikin tyyppi on vain muualla ole kestoa. Se ei ole musiikki. Ja sitten näemme, jos saamme askel sekvenssi V tilavuus argumentti, p varotoimi väline väitteen, ja sitten luettelon X: n. Sitten tehdä joitakin juttuja. Erityisesti sovellamme Tässä lista ymmärtäminen, ja teemme joitakin operaatioita ehkä arvosta tehdä siitä numeerinen arvo niin, että se voitaisiin sitten haastateltu ja käytetyt Valitse instrumentti. Tämäkin on pieni bittinen tarkoituksella inconcise vain näyttää kaikki outoja asioita voit tehdä Haskell kun katsomaan sitä omaa aikaa. Selvä. Joten olemme vihdoin päästä mitä ryhdyimme tekemään, joka on tehdä joitakin tietokoneen musiikkia. Joten aiomme yrittää tehdä Frere Jacques laulun. Joten on kuinka monta lauseita Frere Jacques? Neljä. Suuri. Ja mitä mukavaa on, että he kaikki toistuvat sama määrä kertoja, joka on kaksi. Joten meillä on neljä lauseita kukin toistettiin kaksi kertaa. Ja erityisesti, he ovat pyöreä. Ja on monia, monia tapoja toteuttaa kierros, joka voisi olla hauskaa tehdä. Olen tehnyt sen melko yksinkertainen tapa täällä, joka on vain construct-- linja Funktio ottaa luettelon musiikin arvojen ja muuntaa sen juokseva koostumus levittämällä että peräkkäinen koostumus operaattori. Ja sitten viivyttää eri osat tekemällä niistä alkavat levätä. Joten aloitan levätä kahdesta toimenpiteestä, ja sitten loput neljä toimenpidettä, ja sitten loput kuusi toimenpiteitä, ja sitten kierros toimii, kuten me kaikki tiedämme tämän laulun. Näemme kaksi merkintöjä tai muutoksia musiikin arvojen jotka sisältyvät tähän peräkkäisessä järjestely musiikin elementtejä. Meillä lisätä äänenvoimakkuutta. Tämä on toiminto käsinkirjoittaa musiikkia tiettyä tilavuutta. Tämä on hyvä esimerkki MIDI signaalin käynnissä 0-127, seitsemän bittiä tietoja, joita voidaan suorittaa. Ja then-- näimme sen hyvin lyhyesti, mutta yleinen MIDI luettelo kaikista eri välineitä. Ja siellä ei ole paljon niitä. Jos käytät digitaalista ääntä työasema, kuten Ableton Liven tai Pro Tools, siellä uskomattoman laajemmin syntetisaattorit ja VST välineitä. Mutta MIDI standardi vain on muutamia, tai useita kymmeniä. Ja jotkut niistä ovat hauskoja. Ajattelin että olisi hauskaa, jos soitimme väline MIDI instrumentti helikopteri, ja sitten seuraava läpi pyöreä, teimme pad syntikka, ja sitten tämä korni johtaa kanttia syntetisaattori, ja sitten ääni tihkua, jotka ovat hieman epäselvä minun huono MIDI syntetisaattori, mutta ne OK. Ja sitten me näemme tämän let ja syntaksi Haskell, ja sitten me pelaamme kaikki nämä osat yhteen kanssa rinnakkain koostumuksen operaattori. Ja voisimme ehkä näyttää joitakin tämän. Tässä koodi. Ja voit nähdä C, ei halua olla paljon kurkun selvitys ja asetus pöytä koodi ennen voisi tehdä musiikkia näin. Tai muu ohjelmointi kieli, haluat luultavasti on vuorovaikutuksessa jonkinlainen kirjasto tai API ja asettaa kaiken ylös, ja sitten sinun täytyy siivota. Mutta täällä Haskell on mielestäni kerran saat roikkua sitä, uskomattoman luettavissa ja hyvin ilmeikäs. Joten siellä on täytäntöönpano on Frere Jacques. Selvä. Nyt haluamme lisätä lyömäsoittimet, ja tämä on vähän Messier. Joten katsomaan dioja. Joten iso idea on tehdä nippu luetteloita tai osia. Näillä rulla-koneissa, siellä olivat tyypillisesti noin ehkä kahdeksan 10 rytmi tai lyömäsoittimet osia. Ja sitten käyttää joukko tekniikoita. Ja olemme puhuneet these-- käyttäen taittuu, suodattimet, lambda toiminnot, kartoitettu yli luettelot tuottaa arvoja joissakin alueella 1 R, R on 16, tai 32 vaiheet sekvensseri. Ja sitten jos on arvo kyseisessä luettelossa kuten olemme kulkee sekvensseri, juoksee läpi yli ja yli, se syttyy että huomata, ja että näyte saa laukaista. Tässä ovat kaikki eri outo tavoin Päädyin tuottaa muistiinpanoja. Kokeile sitä itse semi summa. Se tulee kuulostaa viileä. Jos aika sallii, me läpi tämän. Mutta juuri nyt, kai meidän pitäisi demo, mitä meillä on. Toivotaan tämä menee OK. Joten tämä on GHCI. Ja me ladata tiedoston Olen kutsunut song.lhs, joka on tiedosto minä vain näytin teille. OK, suuri. Kuten Connor sanoi aiemmin, se koottu, se kirjoittamasi tarkastetaan, jotta voin hengittää paljon helpompaa. Se ei tule räjäyttää minua. En halua näyttää sinulle jotain hyödyllistä. Voit nähdä, että moduuli ladataan kutsutaan 50. Voit selata, että moduuli. Ja tämä on niin mukava noin doing-- ehkä mitä teet Haskell ei ole nimeltään ohjelmistojen kehittäminen, mutta voit tehdä paljon hauskaa itse. Ja työnkulku on todella mukavaa kuin verrattuna paljon muita kieliä, koska näet todella luettavalla tavalla, mitä tapahtuu. Näemme siis, että meillä on kaikki näitä lauseita, jotka ovat luettelot musiikin kentillä, ja sitten me rakentaa näitä ylös jotain suurempaa, joka on musiikin laulu. Se on musikaali yksikkö. Ja sitten voimme pelata tämä kaikki jossa toiminto nimeltään toistaa musiikkia. Voit nähdä, että täällä. Joka on vain leikkiä. Haluan say-- etten puhu tämä dollarin merkki, joka on kaikkialla. Dollarin merkki on toinen infix operaattori. Mutta se on pienin ensisijainen tahansa toimijan, joka tehokkaasti tarkoittaa sitä, että kaiken vasemmalla dollarin merkki ja oikealle dollarin merkki, aiomme saada arvioida ennen sitä. Joten se on tavallaan kuin toinen tapa lisätä sulkuja. CONNOR HARRIS: Se on pohjimmiltaan yhdistetty funktio. Ja se varmistaa, että et have-- jos sinulla on toimintoja molemmin puolin tai infix operaattorit kummallakin puolella, ne eivät liittää sen poikki ja antaa sinulle odottamattomia tuloksia. STEPHEN KREWSON: Joten meidän can-- käyttäen, että voimme kutsua. Ensinnäkin, me pelata ilman rumpuja. Se on helikopteri, MIDI helikopteri. [Musiikkia] On kanttia. Ääni vuotaa. Ja voit todella mennä villi tämän. Otin melko yksinkertainen, koska tiesin ei pitäisi purra enemmän kuin voisin pureskella. Vain pitää se melko yksinkertainen näyttää keskeiset ajatukset. Mutta sitten olin kuin, olemme sai lisätä joitakin rumpuja tähän. Vain koska tämä on vähän käsittämätön, ja en käyttänyt nimi rummun osia, Olen kartoitettu them-- koska he osa että Lueteltujen luokka, Minä kartoitettu ne ints. Yksi on kuin bassorumpu. Zero on samoin. Seitsemän on korkea hattu. Ja alas täällä, missä toiminnot saada hieman enemmän satunnaisia, nämä ovat kuin conga rummut. Joten jos luulet about-- ehkä hauska tapa toteuttaa rumpukone on käyttää hyvin järjestelmällisesti kuvioita teidän bassorumpu. Niin esimerkiksi suodatukseen yli lista kaikella, antaa takaisin 1, kun se otetaan moduuli 04. Niin saan 1, 5, 9, 13, 17-- joten tämä on ensimmäisellä vastatuuliosuudella jokaisen toimenpiteen. Ja sitten tämä on sama asia siirretään kahdesta vaiheesta. Joten se omituinen. Joten tämä olisi jotain korkea hattu. Ja sitten taas, tänne, se on vähän satunnainen, koska me teemme conga rummut. Ja minulla on joitakin maracas täällä, myös. Niin voisin kutsua pelata rumpukone, mutta se ikuisesti, ja se voi aloittaa tarttumalla ylös kaikki muisti minun järjestelmään. Joten Soitan tätä toimintoa toistaa musiikkia, joka kuten näemme, Käytä lyhennetty rinnakkain koostumus pelata pikku Frere Jacques laulu yhdessä tämän outo rumpukone. Joten katsomaan. Ja älä parantaa minun järjestely kaikkien rummun osat. Ei minun erikoisuus, mutta minä oli hauskaa tehdä sitä. [Musiikkia] Niin tietenkin, tämä on kaikki vähän ei niin hauskaa jos emme voi muuntaa sen jotta pisteet niin ehkä se voidaan tulkita jota ihmisen esiintyjä. Joten en suorita sitä täällä. Olen jo syntyy tiedostoja. Voit nähdä, että on olemassa dot LilyPond file-- ja tämä on minun segue yli Connor-- ja piste MIDI-tiedoston, ja piste PDF-tiedosto, joka on mitä LilyPond tuottaa ajan mittaan. Mutta nämä ovat ne skriptejä, ja minä vain ajaa heitä apua vaihtoehtoja. Jos saat nämä vauhtiin Euterpea, voit luoda MIDI-tiedoston. Ja sitten MIDI-tiedoston Tämän MIDI 2LY ohjelma, voit luoda Lily Lampi tiedosto, ja sitten voi tuottaa PDF pisteet. Ja meidän pitäisi katsoa tätä. Joten Connor luultavasti näyttää miten voit merkitä tämän paremmin, mutta tämä on Frere Jacques kuin tuottamat minua Euterpea. Se on vain C. olisin tajunnut mitä hakata se on todella. Mutta se on valmisteilla miten teet sen kanssa. Katsotaanpa puhua enemmän LilyPond. CONNOR HARRIS: OK Katsotaanpa. Oletko mainita Lue Olet Haskell? STEPHEN KREWSON: Ai niin. Tutustu Opi Voit Haskell. Se on resursseja. Niin aloin oppiminen, ja se on hienoa. Ei tyhmä oppiminen. CONNOR HARRIS: Joten se on verkossa. Joten kaveri nimeltä [äänetön] learnyouahaskell.com, ei välilyöntejä. Kielioppi on sairas. STEPHEN KREWSON: Se on kuvitettu, liian. CONNOR HARRIS: Mikä on LilyPond? Se on declarative ohjelma kieli musiikin ladonta. Joten declarative-- voit ajatella asioita, kuten HTML, jossa et ole saying-- HTML ei sanoa, kuinka selaimet pitäisi tehdä sivuja askel askeleelta. Se on vain sano tätä on sanallisesti mitä haluat sivun näyttää. Ja sitten se on myös ohjelma joka kokoaa tällä kielellä, tai se lukea sen ja sitten itse tekee ladonta sinulle, ja se sylkee nämä ihana näköinen PDF tulokset. Voit myös saada PNG-muodossa tai mitä tahansa. Hyvä tapa ajatella Tämän on vastaavasti että LaTeX on tavallaan kuin LillyPond, mutta vain tavallisia ladonta. Joten sen sijaan of-- se ei ole WYSIWYG, mitä näet On mitä saat, kuten vaikkapa Finaali on, tai Sibelius, tai Microsoft Word, jossa voit kirjoittaa reaaliaikainen ja luonnos asioita reaaliajassa ja nähdä muutokset välittömästi. Se on teksti perustuu. Sinun täytyy kääntää saanut käyttää erillistä ohjelmaa ja ulos PDF myöhemmin. Tämä on hieman vähemmän kätevä käyttää, jos olet yrittävät kirjoittaa suoraan osaksi pisteet ja olet yrittää säveltää tietokoneen. Mutta on paljon etuja sitä. Yksi, se näyttää paljon mukavampaa, koska LillyPond voi todella ottaa aikaa tehdä layout päätökset oikein, toisin kuin Sibelius tai Finale, joka on tehdä vaarantunut algoritmeja niin että ne voidaan näyttää asiat reaaliajassa. Joten miksi on LilyPond-- tietokonegrafiikka on kova. Jos teet mitään musiikkia ja haluat kirjoittaa pois tulokset, et halua kirjoittaa pois kaiken itse alkaen miten tehdä esikunnat ja miten tehdä lehtiöt. Se on hyvin vaikeaa. Se on ollut tehnyt ennen. Olet hieno. Jos haluat käyttää Finale tai Sibelius, tiedostomuotoja niitä asioita ovat hyvin monimutkaisia, ja et voi todella käyttää niitä ohjelmallisesti. Voit avata Sibeliuksen kanssa Finale ja mene Tiedosto, Vie PDF itse, mutta et voi oikeastaan soittaa että käsikirjoituksen. LillyPond, voit soittaa näistä skriptejä. Voit helposti kerrata LillyPond LaTeX. En ole niin paljon aikaa mennä näitä tekniikoita juuri nyt, mutta ne ovat olemassa. Jos haluat etsiä osaksi LillyPond kirja, se on ohjelma, joka tulee sinun LillyPond jakelu, ja se on varten iteroimalla LillyPond fragmentit osaksi LaTeX jos haluat tehdä jotain kuin iso musiikkitiede asiakirja esimerkkejä, esimerkiksi. Ja se on hyvä taito elämä jos teet mitään musiikkia, ei vain CS50. Olen käyttänyt LillyPond kaikille minun koostumus hankkeiden koska olin periaatteessa vanhempi lukiossa. Joten tässä on muutamia yksinkertaisia ​​esimerkkejä. Tämä on pohjimmiltaan tyypillinen ja vaikeustaso että useimmat ihmiset puhuen he yrittävät käyttää LilyPond yksinkertaisiin hankkeisiin. Tämä ensimmäinen on alku jotta urkukoraali Bachin. Tämä pohja yksi on ote yhdeltä minun omia teoksia ja se on vain siellä näyttää sinulle asioita, kuten [mahdoton kuulla] laskemisesta useita rivejä samassa henkilökunta, kuinka lyyrinen undersetting toimii. Lyyrinen aluskatteet ovat asia, joka on hyvin helppokäyttöinen LilyPond varten kuoromusiikin. Ja niin sitten on joitakin enemmän monimutkainen esimerkkejä tästä. Kaikki nämä ovat tehneet LilyPond ja he toteutettavissa. Tämä ensimmäinen ote on peräisin [Äänetön] mukaan [kuultavissa]. Ja tämä [äänetön] alkaen pala yksin basso huilu [kuulumaton], joka on longtime-- joka oli pitkäaikainen jäsen musiikki osasto täällä, luulen. En ole varma missä hän on mennyt pois. Mutta hän oli neuvonantaja Harvardin Säveltäjät ry pitkään. Ihana mies. Ja hän kirjoittaa musiikkia, joka on hyvin monimutkainen merkintä että LillyPond voi kuitenkin käsitellä erittäin hienosti. Joten vain antaa sinulle tunteen mitä tämä asia kyvyistä are-- niin sisäosat LillyPond ovat erittäin monimutkaisia. Ja voit käyttää sitä pitkään, mukaan lukien joidenkin melko monimutkainen asioita, ilman todella ottaa tietää paljon niistä. Mutta perusajatus on, että alin taso, atomit LillyPonds ovat liitetiedoissa. Liitetiedot sisältävät yhteydessä kutsutaan ääniä. Joten ääni yhteydessä pohjimmiltaan vastaa että riviäkään polyfonia. Ja sitten yhteydessä voi olla sisälsi hierarkkisesti korkeamman tason niitä, jotka edustavat esikunnat on pisteet tai suuremmiksi kokonaisuuksiksi kuten piano esikunnat tai kuoro esikunnat, ja sitten lopulta koko pisteet yhteyksissä. Ja voit itse käsittää Useiden tulokset kirjan. Ja kaikissa tilanteissa on lukumäärä liitteenä kaivertajat. Jos katsot läpi sisällön yhteydessä ja tulostaa tietty symboli tai tietyn luokan symbolien tarpeen. Joten jokainen ääni yhteydessä, siellä [äänetön] muistiinpanoja kaivertaja että on pohjimmiltaan toiminto tai objekti, joka kirjoittaa pois kaikki setelin päitä oikeaa osaa sivun. Sitten on halkeama kaivertajan, joka kirjoittaa ulos Halkioiden henkilökuntaan. Sitten on metronomi Mark kaivertaja että kirjoittaa pois metronomi tavaramerkit pisteet. Ja kaikki nämä sopivat melko pitkälle hierarkia. Ja se on hyvin, hyvin, hyvin muokattavissa, johon tarvitset jos haluat saada tuollaista. Joten kaikki yhteyksissä on paljon erilaisia ​​ominaisuuksia että voit muokata kaiken alkaen väli eri fontin valinta koot asioita. Jos haluat tehdä vielä enemmän monimutkaisia ​​asioita, siellä upotettu skriptikieli. He käyttävät järjestelmää, joka on murre LISP. Nämä luultavasti eivät merkitse mitään sinulle. Mutta pohjimmiltaan, järjestelmä toinen toiminnallinen ohjelmointikieli, enemmän tai vähemmän. STEPHEN KREWSON: oheistuote. CONNOR HARRIS: Joo. Se on hyvä tie-in, oletan. Ja sitä käytetään opetuskielenä, todella, alas Mass Ave. MIT. Ja se on erittäin kätevä LillyPond eri teknisistä syistä. Joten jos haluat tehdä yksinkertaisia hienosäädön riippuvainen conditionals, sillä example-- olemassa tiettyjä kunto pisteet, joka on täytetty, tehdä muutoksia asettelun tai whatnot-- sitten nämä palvelut ovat siellä. He monimutkainen. Joten tässä on melko yksinkertainen mallikoodi. Se on viisi riviä. Periaatteessa olen määritellään kaksi esikunnat. Se on 3/4. Ensimmäinen henkilökunta on liitteenä tempo merkki, mutta se on todella menossa mennä koko pisteet, koska tempo tavaramerkit ovat pelin tasoissa. Metronomi merkki kaivertaja kiinnitetään pisteet yhteydessä. On olemassa erilaisia ​​avaimia, koska [äänetön] kaivertaja kiinnitetään esikunnat. Voit itse tehdä on. Näyte Kirjoitin on todella C-duuri, mutta se on vain osoittaa voit olla eri avaimet eri esikunnat. Ja Syntaksi on kirjoitat Huomaa nimet E, F, G, riippumatta. Jos haluat tehdä etumerkkiä, te pääte on tai ES. Tämä on kohteesta Dutch musiikkitieteellistä yleissopimukset. Ja tehdä oktaavin hyppyjä, sinun on käytettävä Näiden asteikkomerkkejä, pilkku tai heittomerkki. Suhteellinen tarkoittaa vain mitä sinulla on huomata, se automaattisesti plaec vuonna oktaavi lähinnä edelliseen. Ja jos haluat hypätä yli fifth-- sanoa viidesosa tai more-- sitten sinun täytyy käyttää [kuultavissa]. Mutta muuten, sinun ei tarvitse määrittää oktaavin jokaisen nuotin. Ja suhteellisen C, prime, ja C, sinun vain määrittää keski-C ja pohja C, varsinkin ensimmäiset tahdit. Sitten on nämä esikunnat, jotka järjestävät nämä kaksi ääntä tai näytteitä musiikin, ja olet pisteet. Ja että näyttää tältä. Jos haluat ottaa aikaa kopioida että näyte LillyPond koodi edellisestä liukua alas täällä, ja te voi kirjoittaa sitä LillyPond itse. Tiedän, että meillä on jotain joka näyttää paljon kuin tämä. Joten on toinen tekniikka nimeltään Music XML ylläpidetään mukaan täysin eri ihmiset. XML on sanallista tietoa structure-- I ei pitäisi sanoa tietoja structure-- sanoa metafora kartta tavallaan. Ja se on suunniteltu pitämään hierarkkinen tietojen hyvin. HTML, esimerkiksi, on eräänlainen XML. Ja voit kertoa XML koska ne oli kaikki kulmasulkeiden ja kulma kiinnike slash merkit että Näytä tietokentät. Minulla ei ole koodia Esimerkiksi Music XML. Voit löytää sen itse. Pohjimmiltaan, syy kannattaa käyttää XML välivaiheessa on ensinnäkin, se on Interchange Format sillä pohjimmiltaan every-- minun ei pitäisi sanoa jokainen, mutta paljon erilaisia ​​pisteet kirjailijoita. Joten jos kirjoitat Musiikki XML, ei vain voi LillyPond lukea sen avulla tämän auxilary ohjelma nimeltä Music XML LY, mutta myös Finale voi lukea se, Sibelius voi lukea sitä. Riippuen siitä, miten sisäinen objekti hierarkia toimii edustavat musiikin, se saattaa olla helpompi kirjoittaa pois Music XML kuin LillyPond ja vain luottaa Musiikki XML ja LY tehdä muuntaminen. En usko, että [äänetön] on Music XML. STEPHEN KREWSON: ei. Joku on työn alla, vaikka. CONNOR HARRIS: OK. Euterpea ei ole Musiikki XML toiminto vielä. Jos haluat opinnäytetyö idea, ehkä saada yhteyttä kaverit että Stephen tietää, ja he voisivat käyttää apuasi. STEPHEN KREWSON: Haluaisin että. CONNOR HARRIS: Lisäksi, periaatteessa, joka ohjelmointikielet se on arvoinen suola jo on XML kirjasto, joten voit sisäisesti muuntaa kaikki musiikin johonkin esine että XML kirjasto voi kirjoittaa että vaatisi vähemmän muutokset sisäistä rakennetta jostain musiikki esineet sinua halua kirjoittaa kuin kirjoittamisesta suoraan LillyPond olisi. Sitten vain tulostaa sen XML kanssa XML kirjastot kieli, joka takaa, että se on syntaktisesti oikein ja kaikki, ja sitten muuntaa sen LillyPond. Joten tekniikka kannattaa tutkia jos teet jotain kuten tämä. [Äänetön], toinen auxilarry tekniikkaa. Tämä on pohjimmiltaan Tech Works tai Tech Studio LillyPond. Joten se tarjoaa apua syntaksi, malleja eri yhteisten yhdistelmiä välineitä. Se mahdollistaa jaetun ruudun katselu niin voit saada koodin yhdessä ikkunassa ja PDF toiseen ikkunaan ja klikkaa paikkoja PDF hypätä asiaa paikkoja lähdekoodia. Tämä on enemmän hyötyä, jos olet todella kirjallisesti LillyPond tiedostot itse kuin jos olet tuottavan ne ohjelmallisesti. Mutta jälleen kerran, se on jotain hyödyllistä saada. Suuri. Toinen resources-- Otan vain käydä läpi tätä hyvin nopeasti. LillyPond manuals-- LillyPond on erinomainen asiakirjat verkkosivuillaan. Heillä on opetusohjelma. Heillä on syntaksin viite. Heillä on satoja katkelmia eri pieniä asioita yo ehkä tehdä osoitettava eri ominaisuuksia. Jos haluat käyttää skriptikieli tai tehdä laajempi mukautukset, sitten on sisäosat viite tuohon URL. Jos haluat käyttää musiikki XML, siellä että URL, musicxml.com/tutorial. Ja sitten jos sinun täytyy oppia järjestelmään koska te todella haluavat käyttää Scripting tilat LillyPond, sitten on [äänetön] nimeltään Strukturoidut Tulkinta Tietokoneohjelmien, joka ei ole vain toinen suurin CS oppikirja koskaan written-- löytää minulle jälkeenpäin, jos haluat tietää mielestäni suurin yksi is-- mutta se on myös erittäin hyvä johdatus kielen oikea. Et tarvitse enempää kuin muutaman ensimmäisen kohdat. Ja se on siinä. Kysymyksiä? Opiskelija: Mistä voin ladata sinun syntyy Frere Jacques joten voin laittaa sen iPodiin? STEPHEN KREWSON: No, voit kirjoittaa ulos joitakin wav tiedosto Euterpea. Ja sinulla on koodi. Se GitHub. Tee oma muunnelmia Frere Jacques mukaan CS50 pesää mieli. Se olisi hienoa. CONNOR HARRIS: Kukaan muu? STEPHEN KREWSON: Tarvitsemme parempi bassorumpu, liian. Se on todella huono. Opiskelija: Euterpea ei ole pelkästään koostumus puolella, mutta signal-- STEPHEN KREWSON: Kyllä. Itse työ I teki Euterpea kun otti this-- siellä jatko kurssi Yalen että käyttää it-- oli äänen synteesi. Joten siellä on todella mukava tapa käyttää nuolet ja jotkut merkintä näimme säveltäminen yhdessä signaalin toimintoja. Erityisesti basso useimpien niistä on vain yksinkertainen siniaalto. Mutta jos alat kirjoittaa ne in outo ohjelmallinen tavoin, voit saada hullu ääni vaikutuksia, kuten outo porrastetusti. Voit luoda erittäin hiekkainen kuulostaa paljon modulaatio. Tein hankkeen rakeinen synteesi, joka on jossain välissä FM ja näytteenottoa. Otat hyvin pieni, vähän näytteitä, ja sitten yhdistää ne jonkinlainen modulaattori ja rakentaa rikkaampi ääni. Teimme myös fyysinen mallinnus, joten yrittää ajatella fysiikan ja psykoakustiikkaa on jotain trumpetti, ja miettiä, miten ääni pomppii pois kelloa trumpetti ja akustiikkaa huone ja mallinnus että perus oskillaattorit. CONNOR HARRIS: Kiitos paljon. Kiitos, että tulit. Ja olen aina valmis ottaa kysymyksiin Email connorharris@college.harvard.edu. STEPHEN KREWSON: Joo. stephen.krewson@yale.edu. Viileä.