CONNOR HARRIS: Hi. Unë jam Connor Harris. Unë jam një AK CS50 në Harvard. STEPHEN KREWSON: Jam Stephen Krewson. Unë jam një TF për CS50 në Yale. CONNOR HARRIS: Dhe ne jemi duke shkuar për të folur për disa teknologjive që ju mund të dëshironi të përdorni në qoftë se ju jeni të interesuar duke bërë një projekt përfundimtar ose të vërtetë asgjë me muzikë. Ne jemi duke shkuar për të fokusuar në një të parë gjuhë programimi i quajtur Haskell. Kjo është një funksional gjuhë, kështu paradigmë është shumë e ndryshme nga C ose PHP ose gjuhë të tjera imperativë që ju keni përdorur tashmë, dhe veçanërisht në një bibliotekë të shkruar në Haskell quajtur Euterpea, e cila mund të ndihmojë njerëzit me shkrim muzikë funksionalisht, në thelb. Dhe Stephen do të ecin përmes një shembull i madh i kësaj. Pas kësaj, unë do të prezantoj me diçka që quhet LillyPond, e cila është një teknologji për muzikë radhim. Kjo është lloj i si LaTeX për muzikë në qoftë se ndonjë nga ju kanë përdorur LaTeX për klasat e matematikës ose klasat e tjera P Set apo çfarë keni. Dhe kështu që unë do të ju jap, përsëri, disa shembuj të thjeshtë të cilat dhe të ju pikë në përgjithësi drejtimi i disa resurseve më të mira. STEPHEN KREWSON: Në Përveç kësaj, ne kemi menduar se do të ishte e ftohtë për të ngritur pak e lë të kuptohet drejt një tubacion midis Euterpea-generated MIDI fotografi në LillyPond, kështu që ne ofrojme disa udhëzim mbi Scripts për të bërë këtë se janë pajisur me LillyPond vetëm për të mbajtur atë burim të hapur dhe për të marrë një tubacion do. CONNOR HARRIS: Përsëri, ne duhet të theksojmë, këto dy teknologjive, ju nuk duhet të përdorin ato së bashku. Ata nuk janë projektuar për të punuar së bashku, edhe pse ata e bëjnë shumë të bukur. STEPHEN KREWSON: E drejta. Dhe krejtësisht falas. CONNOR HARRIS: Pra, mirënjohje, vetëm lexuar atë. STEPHEN KREWSON: rregullt në procesverbal. Në sajë të këtyre folks. Këtë unë do të zgjatem në vetëm për një moment. Procesi i instalimit është pak i ndërlikuar. Ne kemi një lexuar mua në Github që ju mund të merrni një vështrim në. Vetëm email mua nëse keni ndonjë pyetje. Por ne do të drejtuar këtë nën supozimin se kjo është duke punuar për të gjithë. CONNOR HARRIS: Dhe në qoftë se ju nuk mund të merrni LillyPond në punë, ndonjë gjë e madhe. Nuk ka përpilim gjallë që do të përfshirë, të paktën në fund tim. STEPHEN KREWSON: Haskell dhe LillyPond duhet të dy kanë instaluesit. Euterpea është shkarkuar si një paketë, kështu me radhë e kështu me radhë. Pra, ne jemi duke folur për muzikën e kompjuterit. Dhe kjo është vetëm një pamje shumë të 50.000-këmbë. Ka disa aspekte të ndryshme të saj. Dhe kjo është e përafërt dhe është do të errësojnë disa detaje. Por ne mund të mendojnë për diçka si përbërjen algorithmic, përdorur algoritme, duke përdorur kodin, për të gjeneruar disa lloj of-- ndoshta një vetë-ngjashëm Sekuenca e shënime, ose ndoshta shënimet nën një detyrim. Dhe pastaj ata mund të jenë kryer ose interpretuar me instrumente analoge apo diçka të tillë. Por përbërja ishte bërë algoritmikisht. Por sigurisht, ndoshta zona e muzikë kompjuter ose muzikë dixhitale ne jemi më të njohur me është dixhitale sintezë të shëndoshë ose marrjen e mostrave dixhital dhe regjistrimi dixhital. Një shumë e instrumentave dixhitale janë bëhet përmes marrjes së mostrave dixhital. Në fakt, ne do të jetë duke përdorur një nga ata që janë në formën e një biblioteke të shëndoshë font më vonë. Por ka edhe diçka që quhet sintezë dixhital që doli nga fund të viteve '70 dhe në '80 me Yamaha dhe John Chowning në Stanford duke bërë sinteza FM ose Modulimi sintezë Frekuenca, ku keni pasur një zgarë sinjal dhe një sinjal modulating si në spektrin audio. Por ajo që ne jemi fokusuar në sot është diçka që quhet MIDI, dhe natyrisht, përbërja algorithmic. Ne nuk jemi duke shkuar për të bërë instrumente, por ne jemi në vend të kësaj do të bëjë disa muzikë, dhe pastaj që do të interpretohet nga disa instrumente që janë conformant me standardi i përgjithshëm MIDI. Pra, çfarë është MIDI? Unë nuk jam duke shkuar për të marrë shumë thellë në të, por MIDI është protokoll transferimit të të dhënave. Kjo është një lloj i një udhëzues të gjithë kompani të ndryshme dhe industri për organizimin e tingujve ose patches. Pra, ne do të shohim se ka një standard MIDI për të gjithë goditje të ndryshme tinguj dhe rekomandimet MIDI për të gjitha llojet e ndryshme të Synth ose lloje të ndryshme të të gjitha instrumenteve të grupe në një orkestër, thonë. Ju ndoshta jeni njohur me 0 deri 127 mesazhet MIDI. Një sinjal MIDI është zakonisht një grimë treguar nëse kjo është një e të dhënave ose një pako statusin, dhe pastaj nuk ka shtatë pjesë të një sinjal. Dhe këto mund të kontrollojë çdo gjë nga vëllimi te veprimit ose presionin në një çelës të veçantë në qoftë se ju jeni duke kryer me një MIDI kontrollues si dhe, sigurisht, shënime. Dhe sigurisht, MIDI ka qenë jashtëzakonisht e dobishme, sepse kjo është një mënyrë për të tel së bashku ose zinxhir daisy një bandë e pajisjeve hardware MIDI. Unë kam shtatë ose tetë kthyer në shtëpinë time. Ajo merr komplikuar me të vërtetë, por kjo është me të vërtetë i fuqishëm. Dhe kjo është me të vërtetë e vjetër. Kjo është nga fillim '80s, dhe kjo është me të vërtetë e bukur dhe të vogla. CONNOR HARRIS: Po. Të gjitha Nintendo klasik video lojërat ndoshta do të kanë fotografi MIDI për muzikë, për shembull. STEPHEN KREWSON: Këtu është një Shembulli i MIDI përgjithshme, duke treguar MIDI si një lloj i protokollit të përgjithshëm. Dhe unë mendoj se ne mund të mendoj e Dallimi në mes specifikimit se nuk duhet të jetë diçka si këto instrument tingëllon dhe aktuale Realizimi i këtyre instrumenteve tingëllon në një font të shëndoshë apo një MIDI veçantë Synthesizer si ndryshimi ndërmjet ndoshta një typeface-- i cili thotë, në përgjithësi, kjo është projektimi i kjo mënyrë të veçantë për të përfaqësuar characters-- dhe një font të veçantë që ka një madhësi të veçantë dhe timbër, dhe nuk ka realizimi i the-- CONNOR HARRIS: Ndoshta një krahasim më të mirë do të të jetë standardi Unicode says-- ajo i jep një numër për çdo karakter, dhe me të vërtetë çdo gjuhë në botë, ose një grup i madh i Scripts të gjuhës në botë, dhe pastaj ato janë dhënë në diçka grafike nga paketa të ndryshme font. Dhe natyrisht, ju mund të mendoni MIDI si Unicode e shëndoshë. Dhe kjo është vetëm një listë of-- një lumë i madh e ngjarjeve dhe instrumenteve dhe gjësend, dhe ju duhet të keni një të veçantë program, si një typeface, që të merr atë në diçka që është audible. STEPHEN KREWSON: Pra, pse Haskell? Haskell është një programimit funksional gjuha, shumë të avancuara, shumë e ndryshme nga C, shumë e ndryshme nga PHP. Dhe ne jemi duke shkuar për të parë se ka një lehtësinë e përbërjes funksionit në Haskell që do të na lejojë të fllad përmes kompozimin ose shtypni lart, transkriptuar, diçka si Frere Jacques, kjo këngë e thjeshtë që ka një shumë të pjesëve në të cilat janë të vetë-ngjashme ose përsëritur. Pra, kjo do të jetë një prej motivimi pse ne jemi duke përdorur Haskell, në të cilën Funksionet janë qytetarë të klasit të parë. Dhe kam kërkuar për të zgjeruar kjo pak. Kjo është pak e lehtë për të notate Frere Jacques në Haskell. Por, çfarë nëse ne të kërkuar për shtoni një pjesë daulle për të? Çfarë ndodh nëse ne të kërkuar për të përpiqet të bëjë diçka si një Roland 808 apo 909 daulle makinë ku keni rreth 16 hapat e ndryshëm? Zakonisht këto janë mendohet e shënimeve si 16. Dhe ju mund të kontrollojë globale tempo, dhe ju mund të vini nga një bandë e pjesëve të ndryshme perkusion e daulle bas, një duartrokas, leqe ndryshme, kapele hapura dhe të mbyllura të lartë në këto lloj të kanaleve, dhe pastaj ju mund të eq apo rregulluar volumin e tyre. Dhe ne do të shohim një mënyrë të bukur në Haskell e përfaqëson këtë hap sequencer me të gjitha gjëra të ndryshme ftohtë në Haskell ne mund të bëjmë me gjenerimin e Listat dhe filtrim mbi listat, hartes mbi listat, mapping Funksionet mbi listat. Dhe një falje të shpejtë. Kjo është një shumë i përciptë dhe skicë tepër i shpejtë e disa prej aspekteve e Haskell dhe Euterpea, i cili është një domen specifik Gjuha e shkruar ngulitur në Haskell për lloje muzikore. Pra ju lutem mos shikoni kodin në internet. Ndez GHCI, që është Glasgow Haskell Compiler Interpreter. Dhe unë do të jetë duke bërë disa e kjo në pak kështu që ju mund të shihni se si është bërë. Dhe kjo ju lejon të ngarkesës në me the-- sintaksa është i zorrës së trashë dhe pastaj komanda. Ju mund të ngarkesës në fotografi. Ju mund të përdorni shfletoni në këto fotografi të parë të gjitha funksionet që ekzistojnë në një modul të veçantë. Dhe pastaj si ne do të shohim, llojet dhe llojin e Klasat janë kaq të rëndësishme në Haskell, kështu që ju gjithmonë mund të check-- veçanërisht në qoftë se ju jeni duke punuar në një DSCL ri si kjo, ajo që është një lloj muzikë? Unë e di në lidhje me mënyrën se numerike Llojet punojnë në Haskell, por unë nuk di shumë rreth muzikës. Por ju mund të eksplorojnë mënyra ata janë përcaktohet duke përdorur këtë lloj t apo komandën dhe pastaj duke e quajtur në një mënyrë të veçantë funksion ose një objekt të dhënave. CONNOR HARRIS: Po. Nëse keni menduar C dhe tingëllimë ishte hardass në lidhje me llojet, ju kanë asnjë ide për Haskell. Gjë e mirë për Haskell është se në qoftë se ju mund të merrni kodin tuaj për të hartuar dhe në qoftë se kontrolle të tipit Haskell, kjo është ndoshta e drejtë, për shkak se sistemi lloj është aq i rreptë. STEPHEN KREWSON: Po. Kështu që unë vetëm dua të shkoj through-- dhe përsëri, kjo nuk është duke bërë atë justice-- disa prej tiparet e Haskell që, të paktën për creators-- saj dhe ajo u krijua në fund të viteve 1980 nga një bandë e njerëzve, një komitet prej rreth 20 people-- mendonte se ishin të rëndësishme. Dhe gjëja e parë që ata të listuara në një letër që përshkruan zanafillën e Haskell gjatë 20 viteve të para apo më shumë ishte se ajo ishte dembel. Pra, çfarë do të thotë kjo? E pra, kjo do të thotë që kur ne kemi disa lloj e shprehjes, ne kemi nevojë për të vlerësuar atë. Dhe Haskell e bën këtë në një telefonatë me anë nevojë apo një mënyrë jo-të rreptë. Kjo është, në qoftë se ne kemi një bandë e komponentët e shprehjes sonë, ne përpiqemi për të vonuar vlerësimin e këtyre nënkomponentë deri në absolut minute-- fundit që është deri ne fakt nevojë për to. Pra, kjo means-- i cili është të vërtetë cool, sidomos në qoftë se ne jemi duke menduar për nxjerrjen një hap sequencer muzikore. Ju kthejnë atë në, dhe ju filloni drejtimin e një sequence-- hap në qoftë se keni punuar ndonjëherë me një daulle machine-- dhe vetëm ajo shkon përgjithmonë. Pra, kjo do të jetë me të vërtetë mirë në qoftë se ne mund të matem se në Haskell. Dhe ne mund të bëjmë atë me pafund Vlerat, në lista të veçanta pafund. Është shumë e lehtë për të tipit një Lista e pafund në Haskell. Ju mund të përdorni vetëm sintaksë poshtë këtu, ku ju shihni 1 deri 3, hiqni 3 1 Dot Dot, dhe kjo është një listë e pafund të gjithë numrave natyrore zgjeruar për aq sa ju mund të imagjinoni. Unë dua të prezantoj një Koncepti i folds menjëherë. Dhe përsëri, qëllimi i këtij seminari nuk është për të mësuar në lidhje me folds në Haskell ose funksionet më të larta rendit. Por unë vetëm dua të prezantoj atë në japin një kuptim të saktë të asaj se si i çuditshëm Haskell është dhe sa është i fuqishëm. Dhe në mënyrë të veçantë, ne jemi duke shkuar për be-- kur ne bëjmë të ndryshme tanë daulle pjesë, ne jemi duke shkuar për të manipuluar listat e numra, palosshme ato mbi njëri tjetrin. Dhe për ta bërë këtë, ne do të të jetë duke përdorur harta dhe folds. Ka një shoqerues e drejtë dele, e cila është kjo e drejtë një here-- 1 minus sasinë, 2 minus sasinë, 3 minus 0. Dhe sintaksa për një dele, ju jep një dele një vlerë bazë dhe pastaj një operation-- Në këtë rast, mbledhjen ose zbritjen. Unë kam treguar dy raste. Dhe pastaj nuk ka një akumulator që akumulon mbi të gjithë listën, duke aplikuar se plus ose operatorit minus, dhe pastaj të akumulojnë atë. Pra, kjo do të jetë the-- në qoftë se ajo u quajt me r dele plus e 0, duke filluar me 0, ne atëherë do të përmbledhur të gjithë numrat në atë listë. Dhe kjo është një listë nga 1 deri në 3. CONNOR HARRIS: Pra, për ta vënë atë një tjetër mënyrë, r dele merr tre argumente. Ka një funksion që Vetë merr dy argumente, atëherë ka një vlerë motorino, dhe ka një listë të vlerave. Dhe çfarë ju bëni është të merrni Vlera e motorino, vlera e së pari, vënë ato në funksion. Çfarë bëni ju të merrni jashtë, marrë atë, ushqyer që në funksion të Vlera e dytë, ajo që ju merrni jashtë, marrë atë, ushqyer që në të funksion të vlerës së tretë. Dhe pastaj në qoftë se ju shkoni poshtë kjo listë e tërë në këtë mënyrë, ju jeni do të merrni përfundimisht disa vlera njëjës kjo është i të njëjtit lloj e asaj që ju keni filluar me dhe i llojit të njëjtë si gjëra në listë, dhe pastaj kjo është rezultat kthimi i dele R. STEPHEN KREWSON: Pra, në mënyrë të veçantë, këto janë funksione të larta rendit, sepse ata janë duke marrë një tjetër funksion si një prej argumenteve. CONNOR HARRIS: Po. Nëse e keni përdorur disa të tjerë languages-- Unë e di R, [e padëgjueshme] gjuha e ka këtë, të quajtur Ulja. Ju mund të keni funksione të ngjashme në gjuhë të tjera, i quajtur vetëm gjëra të ndryshme. STEPHEN KREWSON: Dhe çfarë është e bukur për dele R në këtë rast është se fish R mund të punojnë me listat e pafundme. Pra, në këtë fund, këtë P5 është gjeneruar shënimet që janë kthyer më në hap sequencer për disa daulle pjesë, i pesti daulle pjesë, dhe ndoshta kjo është një Conga daulle apo diçka. Dhe kjo është një qëllimisht Mënyra mpirë e këtij shkrimi, por kjo është argëtim, sepse kjo tregon shumë e gjërave rreth Haskell dhe Euterpea. Pra, dele R i këtij zorrës së trashë është colon-- vetëm një operator që shtyn gjërat së bashku në një list-- quajtur në një bosh Lista, e cila është vetëm kllapa bosh. Dhe unë jam duke e quajtur atë në këtë listë të pafund. Kjo është në fakt dy lista shtuar së bashku këtu poshtë. Lista aktuale e 1 presje 6 dot pikë është 1, 6, 11, 16. Pra Haskell-- në vetëm disa karaktere, ju mund të gjenerojnë të tërë sekuencë të numrave që janë pesë numra përveç shtrihen në në pafundësi. Dhe unë prepend për atë kjo list-- shkurtër pak 3, 8, 21-- vetëm për të treguar se si ju mund të lidh listat. Dhe pastaj unë kam palosur në vetvete. Dhe kjo përfundon vetëm duke qenë një lloj i operacion identitetit, por kjo është e pafund. Dhe dele R mund ta bëjë këtë, sepse ajo lazily vlerëson, si në sipër. Në qoftë se ne kemi një 1 dhe një 2 dhe 3, ne mund të vetëm kllapa jashtë të gjithë pjesën tjetër të saj. Kjo nuk do të punojë për minus ose plus, por ajo do të punojë për këtë zorrës së trashë Operacioni identiteti në listë. Deri sa nuk kemi praktikisht të përdorin atë, nëse ne kanë një listë pafundësisht të gjatë të gjërave? E pra, Haskell siguron një shumë e functions-- dhe të kërkoni më shumë në këto në time-- juaj tilla si të marrë i cili thotë, OK, ne jemi gjenerimin këtë listë të pafund, por ne jemi vetëm duke shkuar për të marrë disa Numri i saj Dhe në këtë case-- ne do të shohim këtë më vonë në code-- ynë daulle makine GM është vetëm një lloj globale variable për numrin e hapave në sequencer. Në makinat roll-në I ju tregoi, kjo është në mënyrë tipike 16, por unë kam zbatuar atë me 32. Kjo nuk ka rëndësi. Haskell është gjithashtu i pastër, kështu që ajo ka të fortë shtypja statike që Connor përmendur tërthorazi. Pra funksionet janë matematikore në sensin ata janë më matematikore se ata janë të garantuara për të mos hyrë ose të ndryshojë çdo lloj variabël ose të kryejë të dhëna ose output. Pra, nëse ju keni një funksion, është determinist. Ajo gjithmonë do të kthehet e njëjtë vlera në gjendjen e programit ose të mbetet e njëjtë. Ka, natyrisht, përjashtime monadic për këtë, por kjo është përtej fushëveprimit tonë. CONNOR HARRIS: Po. Çfarë kjo do të thotë, megjithatë, është atje janë disa të rëndësishme [e padëgjueshme] Pasojat e kësaj. Njëra është se ajo është shumë e lehtë për të parallelize programe Haskell. Sepse në qoftë se ju keni, thonë se, një funksion të që ka nevojë për të vepruar në një milion vlerat, nëse ju e dini se funksioni do të gjithmonë japin të njëjtën vlerë nëse ju ushqejmë në një value-- caktuar në qoftë se ju jeni [e padëgjueshme] f nga 1, f të 2, më pas f prej 3 ose whatnot-- f nga 1 nuk është duke shkuar për të shkruar jashtë në një skedar apo të bëjë diçka që do të ndryshojnë vlerën e F2. Ju vetëm mund të ndahet këtë funksion në një milion makina të ndryshme ose një milion temat e ndryshme apo çfarëdo, marrë të gjitha përgjigjet prapa, të marrë të gjitha vlerat e kthimit prapa, dhe pastaj kjo është ajo. Aq shumë e lehtë për parallelize gjëra. The downside është se input dhe prodhimit sidomos përshtaten në sistemin e tipit në mënyra shumë të komplikuara. Ne nuk do të shkojë në atë të drejtë tani, por unë ju inkurajojmë që të shikojmë në disa burimeve online në qoftë se doni të mësoni në lidhje me atë. STEPHEN KREWSON: Pra, shkruani classes-- dhe kjo klasa was-- e llojeve ishin shpikur për të zgjidhur një problem i mbingarkesat operatorit. Pra, kemi dashur të kemi barazi në mes të llojeve të ndryshme të gjërave. Sigurisht, ne mund të mendojmë of-- barazia në mes të llojeve numerike është shumë e lehtë për të menduar rreth, por Po në lidhje me barazinë mes listat? Po në lidhje me barazinë ndërmjet pemë të dhënave këmbë strukturat? Dhe kjo është e gjitha e mundur në Haskell shkak të klasave të tipit. Pra, nëse ju të përcaktojë një të dhënave type-- caktuar dhe këtu, këto janë pitches muzikore. Ne jemi në fund duke marrë disa muzikë kompjuter. Pra, ne kemi C, C mprehtë, dhe kështu me radhë e kështu me radhë. Ata i përkasin një bandë e klasa të ndryshme lloji. EQ-- ata i përkasin klasës tipit EQ. Kjo do të thotë se ata mbështesin Operacionet e barazisë. Kështu që ju mund të vlerësojë nëse një Sekuenca e primitives muzikore është e njëjtë me një tjetër. Ata i përkasin klasës rendor. Kjo do të thotë se ka një urdhërimin për këto. D vjen pas C. C mprehtë vjen pas C, si edhe. Ata i përkasin klasës tregojnë, që do të thotë se ata mund të të jenë të shtypura në një tastierë apo terminal. Ata i përkasin të klasë renditura, të cilat do të thotë se edhe pse këto janë karaktere, ata kanë një numerike themelor Përfaqësimi duke filluar nga ora 0 dhe plaste nëpër megjithatë shumë gjëra këtu, 20 apo më shumë, ose 30 ose 40, ndoshta. CONNOR HARRIS: Kur ne kemi një lloj të dhënave që derives-- me atë fjalë "deriving--" një klasë të caktuar tip, kjo do të thotë se përpiluesit do të përpiqet për të ndërtuar diçka automatikisht. Pra, ndoshta ju do të dëshironi të të përcaktojë një cilësi ndryshe. Ju do të dëshironi të përcaktojë C mprehtë si të barabartë me D sheshtë, per shembull. Me këtë ndërtim këtu, unë nuk mendoj C mprehtë dhe D e sheshtë do të jetë e barabartë, sepse përpiluesit do të automatikisht thonë se çdo vlerë tjetër të mundshme është e ndryshme nga çdo tjetër. Pra, është e mundur për të shkelur Implementimi parazgjedhur nga këto lloje të klasave. Përsëri, shikoni në referencë nëse doni të mësoni në lidhje me atë. STEPHEN KREWSON: Dhe këtu, në fakt, kjo do të të jetë e dobishme për të, kur ne kodin më vonë. Ne shohim disa nga operatorët Infiks për përbërjen sekuencial përbërja paralele, dhe kështu me radhë, këto pluses dhe shenja të barabarta rrethuar nga colons. Kjo do të thotë që ne mund të luajnë këto ndryshme primitives muzikore njëri pas tjetrit. Kjo është përbërja vijues. Ose ne mund të luajnë ata në paralel në të njëjtën kohë. Kështu që unë mund të ketë një vlerë muzikore, dhe pastaj kjo barabartë dhe colons, Infiks operator paralele përbërjen, dhe ata luajnë si një lloj akord. Dhe ne jemi duke shkuar për të përdorur kjo kur ne të kombinuar daulle pjesa jonë me tonë pak këngë Frere Jacques për të luajtur këto dy sekuenca të Vlerat muzikore në të njëjtën kohë. Currying Curry is-- i fundit emri i Haskell Curry, i cili imazhi Haskell është emëruar pas. Dhe kjo na lejon një Hijeshi e bukur kur ne jemi shkruar të gjitha këto të ndryshëm funksione ose filtra që ne jemi do të jetë i hartës mbi listat tona. Një funksion i dy argumente të f i x dhe y-- mund të përfaqësohet si f e x aplikuar y. Pra, kjo është një funksion i një argument që kthehet Një tjetër funksion i një argument. Pra, kjo do të thotë që ne mund të hartë një Funksioni f e X mbi listën e y-së. CONNOR HARRIS: Dëshironi të jap një shembull të kësaj? STEPHEN KREWSON: Po. Unë kam një shembull të drejtë këtu nga disa nga gjërat që ne do të shkruaj. Pra replikuar 2-- mirë, përsëris do të marrë një vlerë, e cila eshte sa herë për të replikuar diçka, dhe pastaj ajo do të marrë një value-- zakonisht një listë apo diçka. Kështu që këtu, ne jemi hartës replikuar 2 mbi një tjetër listë. Pra, nëse ne hartë përsëris 2, në qoftë se ne përsëris 2 zbatohen të elementit të parë të kësaj list-- dhe këto janë listat e phrases-- muzikore do të prodhojë dy "ju sleeping--" kështu që po fle, po fle. Deri tani ne kemi dy. Por replikuar merr dy argumente, por sepse ne jemi currying dhe pastaj hartës, ne mund të përfaqësojë përsëris 2 si që janë kthyer si një funksion i një argument-- vetëm përsëritur dy herë. Dhe pastaj ne jemi duke aplikuar atë për çdo element në këtë listë të frazat. Dhe concat është një Haskell Operacioni për rrafshim një listë. Sepse replikuar 2 do të prodhuar një listë të listave. Dhe kjo është kjo formë e ndërmjetme këtu. Dhe kështu që atëherë ne mund të concat ose shkatërroj se nga dy herë. CONNOR HARRIS: Një thjeshtë shembull i currying, në qoftë se ju do të like-- imagjinoni f është vetëm një Funksioni i shumëzimit që merr dy argumentet dhe kthehet produktin e tyre. Pra, nëse ju keni një F 4 5, është 20. Por ju mund të mendoni për këtë si also-- ju keni një funksion f 4 që merr një argument dhe kthimit katër herë kjo argument-- vetëm aplikimi i pjesshëm i cili vetëm një argument 4. Dhe në qoftë se ju ushqejmë f nga 4 5, që do t'ju japë 20. Dhe kjo është një thjeshtë Shembulli i currying. Kjo është zakonisht një nga ato teksteve. STEPHEN KREWSON: Lambda shprehje ose funksionet anonim janë një tjetër shenjë dalluese Haskell. Pra, nëse ne kemi nevojë për të nxitur një pak funksion jeta replikuar, por thonë se kjo nuk është në biblioteka standarde, ne mund të përdorni një sintaksë të ngjashme me këto. Dhe ne do të fllad mbi këtë. Një gjë që ju do të shihni një shumë e në daulle makinë është që ne jemi duke bërë thirrje për diçka të quajtur filtër, i cili si më parë, është një hartë e një funksioni mbi një listë, por kjo është një hartë e një funksion Boolean. Kështu që ne kemi këtu një shembull e një një anonime funksion Boolean përcaktuar se merr vetëm vlerat çift. Kjo nuk është të thuash të drejtën një funksion anonim. Por kjo është të përcaktojë me që sintaksë për shkurtësi, dhe kjo vetëm merr x modul n-- CONNOR HARRIS: Po. Pra, f është një funksion i dy argumente n dhe p që kthen një funksion që është vetë një funksion i një argument, domethënë x. STEPHEN KREWSON: I Operatorët përmendura Infiks. Cilat janë operatorët Infiks? E pra, operatorët Infiks janë mënyrë normale ne përfaqësojmë operacionet, thonë se, në mathematics-- 2 plus 2 në vend të operatorit plus dhe pastaj dy argumente 2 dhe 2. CONNOR HARRIS: Ajo që quhet kundërt polish simbol, i cili është një term Dyshoj ndonjëri prej jush do të di. STEPHEN KREWSON: E drejta. Reverse polish ose prefiksin shënim. Por Haskell vendosi të përdorin operatorët Infiks. Pra, këto janë disa nga ato porosi që janë përcaktuar për Euterpea DSCL në Haskell. Pra, kjo ishte përbërje vijues. Kjo ishte përbërja paralele, dhe kjo u truncating përbërjen paralele. Dhe ne do të duhet që me daulle makinë tonë, sepse ne do të përdorim të fundit operator në atë tuple të vogël atje për të luajtur daulle makinë së bashku me Frere Jacques këngën tonë. Dhe daulle makinë tonë është do të jetë i pafund. Ajo thjesht luan përgjithmonë. Por kënga Frere Jacques nuk është. Kjo nuk është aq gjatë. Kjo është vetëm një bare pak. Pra, ne kemi nevojë për të ndaluar daulle makine si Sapo vjen vlera e shkurtër muzikore në një fund. Dhe kjo operator infixed është super e dobishme me atë. Dhe infiks simbol si kjo është lloj i bukur, sepse thonë se ju keni një funksion si të japin kuotën, i cili i jep ndarjen numër i plotë e x nga diçka else-- keq, që duhet të jetë një dhe b. Ju mund të shkruani atë si një kuotë e b. Pra, nëse ju element put-- është një tjetër shembull i kësaj. x element në disa listë, në qoftë se ju vendosni ajo në Backticks, ju mund ta përdorni atë. Edhe pse kjo nuk është një simbol si plus ose minus apo kohë, ju mund të përdorni emrin e një funksion si kjo në Backticks si operator Infiks, e cila është pretty cool. CONNOR HARRIS: Përsëri, kjo është të gjitha sheqer vetëm sintaktik, me të vërtetë. Kjo nuk ndikon në thelbin e gjuhës. STEPHEN KREWSON: Pra, ne shohim këtu për fraza e fundit e Frere Jacques këngës sonë, Kam luajtur disa chords të vogla ose tretat duke përbërjen paralel operatori. Kjo është një tjetër mënyrë për të thënë disa nga ajo që ne kemi qenë vetëm duke thënë. Kështu që ju mund të hartë funksionet e një argument mbi listat. CONNOR HARRIS: Përsëri, referencat për tekstet Haskell-- hyrëse do të ketë të gjitha këto në të. STEPHEN KREWSON: Kështu që këtu është një goxha Linja kryesore e hap sequencer ne do të hedhim një vështrim në përdorimin e një listë të kuptuarit. Dhe ne shohim këtu është se elementi në operator të caktuar në thonjëza prapa. Kështu që nëse x është një element i lista e x-së, atëherë ne do të thërrasë deri funksionet Perc. Pra Perc është vetëm një funksion trokitje. Ajo merr disa p vlerash që është një pjesë e të gjithë set kufizohet tingujt e ndryshme goditje që pamë në një rrëshqitje të mëparshme, dhe pastaj ajo i jep se Kohëzgjatja e një shënim çerek. Tjetër ajo jep një QNR, dhe QNR është vetëm një tjetër shënim çerek. Pra, kjo është ndërtuar diçka të mirë. Ne kemi një listë të elementeve, dhe ne do të lak mbi një listë nga një me vlerën max e hap sequencer tonë. Dhe kur ne jemi në një i veçantë në se lista e njërit në vlerën max, në qoftë se kjo i është një anëtar i kësaj set e krijuar në këtë funksion, mirë, atëherë ne kthejnë atë në një shënim goditje. Përndryshe, ne vetëm të luajë një tjetër, i cili do të thotë, ne vetëm heshtin. Dhe ne mund të shohim këtu se në kjo kuptuarit sintaksë listë, x është e populluar nga kjo Lista ndërtuar një të madhësisë globale të sequencer. CONNOR HARRIS: Po. Sintaksa themelor për comprehensions Lista është kllapa, vlera e përfshirë disa variabla, bar, vlerat e mundshme të variablave vetë, mbyllur kllapa. Dhe në qoftë se ju keni bërë vendosur ndërtues shënim në çdo lloj klasë të matematikës, ju mund të keni vendosur 2n tilla që n është në ose n eshte ne z. Ngjashëm thing-- këtë simbol është menduar të jetë në mendje e atij simbol matematikore. STEPHEN KREWSON: Dhe ju mund të zbatohen kallëzuesit të shumta dhe filtra të shumta në një listë kuptuarit, e cila është mjaft e bukur. Algjebrike ne types-- nuk do të zgjatem shumë kohë këtu. Nuk është një ide e mirë në Haskell ose një të mirë, nocion i dukshëm se si për të marrë, të themi, një default parametër në një funksion apo diçka. Në Python, kjo është mjaft e lehtë. Ju mund të them vetëm me barabartë në deklarimi i funksionit, një vlerë e parazgjedhur në Rasti asnjëri është furnizuar. Në Haskell, ju mund ndoshta përdorin ndoshta ndoshta lloji, i cili merr ose asgjë ose një vlerë e tipit vetëm një. Pra, ne shfrytëzuar këtë në daulle makinë të na lejojë të japin volum opsional parametrat në secilin prej daulle pjesë. Kështu që na jep një mënyrë për të pasurit EQ ose një vëllim në një kanal të veçantë. CONNOR HARRIS: Në shembuj të tjerë Haskell, ju mund të shihni përdorur ndoshta për funksionet që mund të dështojnë. Kjo është një e përbashkët. STEPHEN KREWSON: Dhe ju mund të furnizimit disa lloj mesazh gabimi si default. Dhe kjo është veçanërisht i dobishëm kur ju jeni duke bërë I / O në Haskell. Kjo mund të jetë truket. CONNOR HARRIS: ose për një shembull i ngjashëm, mendoj e një funksion që përfshin ndarjen e një parametër që mund të jetë 0. Dhe se funksioni mund kthehen ndoshta çfarëdo. Pra, nëse nuk ka ndarje nga 0, ajo do të kthehet vetëm çfarëdo. Dhe në qoftë se nuk ka ndarje nga 0, ajo do të kthehet asgjë si një mënyrë për të sinjalizuar gabim. Sepse një pasojë e Typing shumë i rreptë haskell është se nuk ka asnjë real-- përjashtime janë të vështirë, në thelb, trajtimin gabim është i vështirë. Dhe kjo është një shumë Mënyra e zakonshme e bërë atë. STEPHEN KREWSON: Deri tani kemi marrë për gjë tjetër mendje-bending rreth Haskell, e cila është model përputhen dhe funksion përkufizime. Unë ju tregoi në rrëshqitje e kaluar Deklarata e sekuencës hap funksion, e cila mori një vlerë ndoshta, pastaj një int, atëherë një listë e ints, atëherë kthen një sekuencë e Vlerat muzikore atje Annotated me të dyja katran dhe vëllimi. Pra, këto tre argumente mund të jenë model krahasohen në mënyrën e mëposhtme. Dhe ne gjithmonë duan të jenë të sigurt për të të bëjë një rast bazë apo rast daljen e parë. Dhe këto nënvizon vetëm mund të interpretohet të thotë çdo vlerë që është atje. Pra, në qoftë se ne të merrni një thirrje të hap rend me disa vlera, disa vlera të tjera, dhe pastaj lista bosh, ajo që ne duam për t'u kthyer është vetëm heshtje, një tjetër 0. Dhe në vend të kësaj duke qenë një listë bosh ose 0, kjo është një tjetër 0, sepse ne jemi që kanë të bëjnë me llojin e muzikës, dhe lista e zbrazët e muzikës lloj është vetëm një tjetër me kohëzgjatje. Nuk është muzikë. Dhe pastaj të shohim nëse ne të merrni një hap rend me një v për argument të vëllimit, p për instrumentin masë paraprake argumenti, dhe pastaj një listë e X-it. Atëherë ne bëjmë disa gjëra. Në veçanti, ne aplikojmë kjo kuptuarit listë, dhe ne të kryejnë disa Operacionet për vlerën ndoshta për ta kthyer atë në një vlerë numerike në mënyrë që ajo mund të numërohen më pas dhe të përdorura për të zgjedhur instrumentin. Përsëri, kjo është pak bit qëllimisht inconcise vetëm për të treguar të gjitha gjërat pazakontë ju mund të bëni në Haskell si ti të marrë një vështrim në atë në kohën tuaj. Në rregull. Pra, ne jemi më në fund duke marrë për bëni atë që ne kemi përcaktuar për të bërë, i cili është të bëjë disa muzikë kompjuter. Pra, ne jemi duke shkuar për të përpiqen për të bëjnë këngën Frere Jacques. Pra, ka sa frazat në Frere Jacques? Katër. I madh. Dhe çfarë është e bukur është se ata janë të gjithë përsëritet shuma e njëjtë herë, e cila është e dy. Pra, ne kemi katër fraza çdo përsëritet dy herë. Dhe në mënyrë të veçantë, ata janë në një raund. Dhe ka shumë, shumë mënyra për të zbatuar një raund që mund të jetë kënaqësi për të bërë. Unë e kam bërë atë në një goxha mënyrë e thjeshtë këtu, e cila është vetëm për construct-- linjën funksion merr një listë të vlerave të muzikës dhe e kthen atë në përbërjen e vijues duke aplikuar atë përbërjen vijues operatori. Dhe pastaj unë të vonojë pjesë të ndryshme duke i bërë ata të fillojë me një pushim. Kështu që unë të fillojë me një tjetër të dy masave, dhe pastaj një tjetër e katër masave, dhe pastaj një tjetër e gjashtë Masat, dhe pastaj raundi punon, si ne të gjithë e dimë këtë këngë. Ne shohim dy Annotations ose modifikimet e vlerave të muzikës që janë të përmbajtura në këtë vijues rregullimin e elementeve të muzikës. Ne kemi një vëllim shtoni. Ky është një funksion të Annotate muzikë me një vëllim të veçantë. Ky është një shembull i mirë e një sinjal MIDI running nga 0 deri në 127, shtatë pjesë të informacion që mund të kryhet. Dhe then-- pamë atë shumë shkurtimisht, por MIDI përgjithshme Lista e të gjitha instrumenteve të ndryshme. Dhe nuk është një tërësi shumë prej tyre. Në qoftë se ju përdorni një workstation digital audio, si Ableton Live apo Tools Pro, ka një gamë të gjerë tepër e sintisajzerë dhe instrumenteve VST. Por standardi MIDI vetëm ka një duzinë pak, apo disa. Dhe disa prej tyre janë qesharake. Mendova se do të ishte kënaqësi nëse kemi luajtur instrumenti instrument MIDI helikopter, dhe pastaj Mënyrë tjetër përmes raundit të, ne e bëmë një synth jastëk, dhe pastaj i kjo të çojë banal valë katror synth, dhe pastaj zë rrjedh, të cilat janë një pak i paqartë në MIDI mia të këqija Synthesizer, por ata OK. Dhe pastaj ne e shohim këtë le dhe në sintaksë nga Haskell, dhe pastaj ne jemi duke luajtur të gjitha këto pjesë së bashku me operatorin paralel përbërjen. Dhe ne me siguri mund të tregojmë disa nga kjo. Këtu është kodi. Dhe ju mund të shihni në C, atje do të jetë një shumë e pastrimit fyt dhe vendosjen kodi tryezë para jush mund të bëjë muzikë si kjo. Apo ndonjë tjetër programimi gjuhë, ju ndoshta do të duhet për të bashkëvepruar me një lloj të bibliotekë ose API dhe ngritur çdo gjë lart, dhe pastaj ju do të keni për të pastruar. Por këtu në Haskell është, unë mendoj se, një herë ju merrni ul receptorin e telefonit të tij, tepër të lexueshëm dhe shumë ekspresive. Pra, nuk është zbatimi e Frere Jacques. Në rregull. Tani ne duam të shtoni perkusion, dhe kjo është një çrregullt pak. Pra, le të marrin një vështrim në slides. Pra, ideja e madhe është që të bëjë një bandë e listave apo pjesë. Në ato roll-në makina, atje ishin zakonisht rreth ndoshta tetë 10 ritmin apo goditje pjesë. Dhe pastaj të përdorin një bandë e teknikave. Dhe ne kemi biseduar për these-- përdorimit folds, filtra, funksionet lambda, plotësisht mbi listat për të gjeneruar vlerat në një gamë 1 deri R, R është 16, ose 32 hapa në sequencer. Dhe pastaj në qoftë se ka një vlerë në atë listë si ne jemi kalon nëpër sequencer, running nëpërmjet saj mbi dhe mbi, ajo kthehet në atë shënim, dhe kjo mostër merr shkaktuar. Këtu janë të gjitha mënyrat e ndryshme të pazakontë Unë kam ardhur deri me të gjeneruar shënime. Provoni atë në vetë shumë tuaj gjysmë. Ajo do të tingëllojë ftohtë. Koha e lejuar, ne do të kalojnë nëpër këtë. Por për tani, unë mendoj ne duhet të demo atë që kemi. Le të shpresojmë se kjo shkon në rregull. Pra, kjo është GHCI. Dhe ne do të ngarkuar një fotografi Unë kam quajtur song.lhs, që është skedari unë vetëm ju tregoi. OK, e madhe. Siç Connor tha më parë, ajo përpiluar, ajo tipit kontrolluar, kështu që unë mund të marr frymë një shumë më e lehtë. Kjo nuk do të hedhur në erë mbi mua. Unë dua të ju tregojë diçka të dobishme. Ju mund të shihni se një Moduli ngarkuar quajtur 50. Ju mund te shfletoni këtë modul. Dhe kjo është aq e bukur për doing-- ndoshta çfarë ju jeni duke bërë në Haskell nuk është quajtur krijimin e programeve kompjuterike, por ju mund të bëni një shumë të gjëra të fun në tuaj. Dhe punës është me të vërtetë e bukur si në krahasim me shumë gjuhë të tjera, sepse ju mund të shihni në një të vërtetë mënyrë të lexueshme se çfarë po ndodh. Pra, ne shohim se ne kemi të gjitha këto fraza, të cilat janë listat e pitches muzikës, dhe pastaj ne ndërtuar këto deri në diçka më të madhe, e cila është një këngë muzikë. Kjo është një njësi muzikore. Dhe pastaj ne mund të luajë këtë të gjithë me një funksion të quajtur luajnë muzikë. Ju mund të shihni se këtu poshtë. E cila është vetëm luajnë. Unë duhet të say-- unë nuk flas për kjo shenjë dollar kjo është kudo. Shenjë Dollar është një tjetër operator infiks. Por ajo ka përparësi më të ulët e çdo operator, i cili në fakt do të thotë se çdo gjë në e majta e shenjës dollarit dhe e drejta e shenjës së dollarit, ne jemi duke shkuar për të vlerësuar para saj. Pra, kjo është lloj i si një tjetër Mënyra e shtuar kllapa. CONNOR HARRIS: Kjo është në thelb Përbërja funksion. Dhe siguron që ju të mos have-- nëse ju kanë funksione të dyja anët ose Infiks Operatorët në të dyja anët, ata nuk do të shoqërojnë të gjithë atë dhe ju jap Rezultatet e papritura. STEPHEN KREWSON: Pra, ne can-- përdorur atë, ne mund të telefononi. Së pari, ne do të luajnë atë pa bateri. Kjo është helikopter, helikopter MIDI. [Muzika] Ka vala katrore. Zëri rrjedh. Dhe ju mund të vërtetë të shkojnë të egra me këtë. I kap një të shumë e thjeshtë, sepse unë e dija se nuk duhet të kafshoj më shumë se unë mund të bëj. Vetëm mbani atë shumë e thjeshtë për të treguar idetë kryesore. Por pastaj unë kam qenë si, ne kemi mori për të shtoni disa bateri për këtë. Vetëm për shkak se kjo është një pak i padepërtueshëm, dhe unë nuk e ka përdorur Emri i daulle pjesë, Unë plotësisht, porsi sepse ata janë pjesë e asaj klase numerizuar, Unë plotësisht ato për ints. Njëra është si një daulle bas. Zero është si. Shtatë është një kapelë të lartë. Dhe poshtë në këtu ku Funksionet e merrni pak më shumë të rastit, këto janë si bateri conga. Pra, nëse ju mendoni se? Për ndoshta një mënyrë interesante për të zbatuar një makinë daulle është që të përdorin shumë rregullt modelet në bas daulle tuaj. Kështu për shembull, në filtrimin mbi të Lista me çdo gjë që i jep përsëri një 1 kur ajo është marrë modul 04. Kështu që unë të marrë 1, 5, 9, 13, 17-- kështu që kjo është mundi i parë i çdo mase. Dhe pastaj kjo është e njëjtë gjë zhvendosur gjatë dy hapa. Pra, kjo është Offbeat. Pra, kjo do të jetë diçka si një kapelë të lartë. Dhe pastaj përsëri, këtu poshtë, kjo është pak e rastit, sepse ne jemi duke bërë bateri Conga. Dhe unë kam disa maracas poshtë këtu, too. Kështu që unë mund të telefononi luajë daulle makine, por ajo do të vazhdojë përgjithmonë, dhe kjo mund të fillojnë grabbing deri të gjithë kujtesës në sistemin tim. Kështu që unë do të thërrasë këtë funksion të luajë muzikë, e cila si ne do të shohim, përdorin përbërjen paralele truncating për të luajtur pak këngën tonë Frere Jacques së bashku me këtë daulle makinë pazakontë. Pra, le të marrin një vështrim. Dhe ju lutem mos përmirësuar tim marrëveshje të gjitha pjesët e daulle. Jo specialiteti im, por unë pasur një shumë të fun bërë atë. [Muzika] Pra, natyrisht, kjo është e gjitha një jo pak si argëtim në qoftë se ne nuk mund ta kthyer atë në një rezultat kaq ndoshta atë mund të interpretohen nga një interpretues të njeriut. Kështu që unë nuk do të kandidojë atë këtu. Unë e kam gjeneruar tashmë dosjet. Ju mund të shihni se ka një dot LilyPond file-- dhe kjo do të jetë Segue tim mbi të Connor-- dhe një skedar dot MIDI, dhe një skedë PDF dot, e cila është ajo LilyPond në fund të fundit do të gjenerojë. Por këto janë ato Scripts, dhe unë do të vetëm drejtuar ata me mundësitë e tyre të ndihmojnë. Nëse ju merrni këto dhe drejtimin me Euterpea, ju mund të gjenerojnë një fotografi MIDI. Dhe pastaj nga file MIDI me këtë program MIDI 2LY, ju mund të gjenerojnë një Lily Skedar pellg, dhe pastaj ju mund të gjenerojnë një PDF rezultatin. Dhe ne duhet të hidhni një sy në këtë. Pra, Connor ndoshta do të tregojë se si të Annotate këtë më mirë, por kjo është Frere Jacques si gjeneruar nga mua në Euterpea. Është vetëm në C. unë duhet të ketë realizuar artistikisht se çfarë hack është e vërtetë në. Por që është gazsjellësi për si ju bëni atë me atë. Le të flasim më shumë për LilyPond. CONNOR HARRIS: OK Le të shohim. A e keni përmendur Mëso You Haskell? STEPHEN KREWSON: Oh yeah. Check out Mësoni Ju Haskell. Është në burimet. Kjo është se si kam filluar të mësuarit, dhe kjo është e madhe. Mësimi nuk memec. CONNOR HARRIS: Pra, kjo është online. Pra, një djalë i quajtur [e padëgjueshme] learnyouahaskell.com, nuk ka hapësira. Gramatika është i sëmurë. STEPHEN KREWSON: Kjo është ilustruar, too. CONNOR HARRIS: Pra, çfarë është LilyPond? Kjo është një programimit deklarative gjuhë për radhitje e muzikës. Kështu që ju mund të declarative-- mendoj për gjëra të tilla si HTML, ku ju nuk jeni saying-- HTML nuk do të thotë se si shfletues web duhet e bëjnë faqet e hap pas hapi. Kjo është vetëm duke thënë se kjo është një përshkrim tekstuale të asaj që ju dëshironi faqe duken si. Dhe pastaj kjo është gjithashtu një program që harton këtë gjuhë, ose lexuar në e saj dhe pastaj në fakt bën radhitje për ju, dhe ajo pështyn nga këto mrekullueshme në kërkim rezultatet PDF. Ju gjithashtu mund të merrni formatin PNG apo çfarëdo. Një mënyrë e mirë për të menduar e kjo është analogji është se LaTeX është lloj i si LillyPond, por vetëm për radhitje të zakonshëm. Pra, në vend of-- kjo nuk është WYSIWYG: Çfarë ju shikoni A është ajo që ju merrni, si, të themi Finale është, ose Sibelius, ose Microsoft Word, ku ju mund të shtypni në kohë reale dhe draft gjëra në kohë reale dhe të shohim ndryshime menjëherë. Ajo është e bazuar teksti. Ju duhet të përpilojnë tuaj rezultatet duke përdorur një program të veçantë dhe për të marrë jashtë PDF vonë. Kjo është pak më pak i përshtatshëm për përdorim në qoftë se ju jeni duke u përpjekur për të shkruar direkt në një rezultat dhe ju jeni duke u përpjekur të shkruaj në kompjuter. Por ka shumë avantazhe për të. Një, kjo nuk duket një shumë nicer, sepse LillyPond mund të vërtetë marrë kohë për të bërë Vendimet faqosje siç duhet, ndryshe nga Sibelius ose Finales, të cilat kanë për të bërë algoritme të kompromentuar kështu që ata mund të shfaqin gjërat në kohë reale. Pra, pse është LilyPond-- grafika kompjuterike është e vështirë. Nëse ju jeni duke bërë diçka me muzikë dhe ju doni të shkruani nga rezultatet, ju nuk doni të shkruani gjithçka me veten duke filluar me atë se si për të nxjerrë shtabet dhe sa për të nxjerrë notepads. Është shumë e vështirë. Ajo është bërë më parë. Ju jeni të mirë. Nëse ju doni të përdorni Finale ose Sibelius, Formatet e skedarëve për ato gjëra janë shumë të komplikuara, dhe ju nuk mund të me të vërtetë përdorin ato programuar. Ju mund të hapur deri Sibelius me Finales dhe shkoni tek File, Eksport si PDF veten, por ju nuk mund të vërtetë thirrur që nga një script. LillyPond, ju mund të telefononi nga ato Scripts. Ju mund lehtë të iterate LillyPond me latex. Unë nuk do të ketë se shumë kohë për të shkuar në këto teknologji të drejtë tani, por ato ekzistojnë. Nëse ju doni të shikoni në një libër LillyPond, është një program që vjen me Shpërndarja juaj LillyPond, dhe kjo është për iterating Fragmente LillyPond në LaTeX në qoftë se ju doni të bëni diçka si një dokument i madh muzikologji me shembuj, për shembull. Dhe kjo është një aftësi e mirë për Jeta në qoftë se ju jeni duke bërë diçka me muzikë, jo vetëm CS50. Unë e kam përdorur LillyPond për të gjithë nga projektet e mia përbërjen pasi që unë ishte në thelb një i lartë në shkollë të mesme. Pra, këtu janë disa shembuj të thjeshtë. Kjo është në thelb përfaqësues nga niveli i vështirësisë që shumica e njerëzve do të përballen me atë që ata ishin duke u përpjekur për të përdorur LilyPond për projekte të thjeshta. Kjo para është fillimi në një prelud Chorale nga Bach. Kjo në fund është një ekstrakt nga një nga veprat e mia, dhe kjo është vetëm atje për të treguar ju gjëra të tilla si [e padëgjueshme] vënë linja të shumta në të njëjtën Stafi, si lirike undersetting funksionon. Nënshtresat Lyric janë një gjë që është shumë e lehtë për t'u përdorur LilyPond për muzikën korale. Dhe kështu pastaj ka disa më shumë Shembuj të komplikuara këtu. Të gjitha këto janë bërë në LilyPond dhe ata janë të realizueshme. Ky ekstrakt i parë është nga [Padëgjueshme] nga [e padëgjueshme]. Dhe kjo [e padëgjueshme] nga një pjesë për bas solo flaut nga [e padëgjueshme], i cili është një longtime-- që ishte anëtar i vjetër i Departamenti muzikë këtu, unë mendoj. Unë nuk jam i sigurt ku ai ka shkuar jashtë për të. Por ai ishte këshilltar i Harvardit Shoqata kompozitorë për një kohë të gjatë. Njeri i mrekullueshëm. Ai shkruan disa muzikë që ka shumë simbol i komplikuar se LillyPond megjithatë mund të trajtojë shumë të bukur. Pra, vetëm për të ju jap një kuptim të asaj që aftësitë kjo gjë e are-- kështu brendësitë e LillyPond janë shumë të komplikuara. Dhe ju mund ta përdorni atë për një kohë të gjatë, duke përfshirë për disa goxha e komplikuar gjëra, pa të vërtetë pasur nevojë të dinë shumë rreth tyre. Por ideja themelore është se mbi Niveli më i ulët, atomet e LillyPonds janë shënimet. Shënimet përmbajnë një Konteksti quajtur zëra. Pra, në kontekstin e zërit kryesisht i korrespondon në një linjë të vetme të polifonisë. Dhe pastaj konteksti mund të jetë përmbante hierarkike në ato të nivelit të lartë që përfaqësojnë shtabet mbi rezultatin apo grupimet më të mëdha të tilla si shtabet piano apo shtabet choir, dhe pastaj përfundimisht tërë kontekste të shënuar. Dhe ju në fakt mund të përfshijë Rezultatet e shumta në një libër. Dhe çdo kontekst ka një Numri i engravers bashkangjitur. Nëse ju shikoni përmes Përmbajtja e një kontekst dhe printoni një simbol të caktuar ose një klasë të caktuar të simboleve si e nevojshme. Pra, për çdo kontekst zë, nuk ka [padëgjueshme] shënime gdhendës që është në thelb një funksion ose një objekt që shkruan nga të gjitha shënim të kokat mbi pjesët e drejtë të një faqe. Pastaj ka një gdhendës çarë, e cila shkruan nga të çarat në stafin. Pastaj ka një metronom Mark gdhendës se shkruan nga shenjat metronom në një rezultat. Dhe të gjitha këto të përshtaten mjaft edhe në hierarkinë. Dhe kjo është shumë, shumë, shumë përshtatshëm, të cilat ju duhet në qoftë se ju doni të merrni gjëra të tilla si se. Kështu që të gjitha kontekstet kanë një shumë e atributeve të ndryshme që ju mund të modifikoj për çdo gjë nga ndarje të ndryshme font Zgjedhja për të madhësive të gjërave. Nëse ju doni të bëni edhe gjëra më të komplikuara, ka një gjuhë e shkruar ngulitur. Ata përdorin skemë, e cila është dialekt i LISP. Këto ndoshta nuk thotë asgjë për ju. Por në thelb, një skemë tjetër funksional gjuhë programimi, pak a shumë. STEPHEN KREWSON: The kravatë-në. CONNOR HARRIS: Po. Kjo është një kravatë-në të mirë, unë mendoj. Dhe është përdorur si një gjuhë e mësimdhënies, në fakt, poshtë Mass Ave. Në MIT. Dhe kjo është shumë i dobishëm për LillyPond për arsye të ndryshme teknike. Dhe kështu që në qoftë se ju doni të bëni të thjeshtë tweaks varen nga conditionals, për example-- ka të caktuar gjendja e një rezultat që është plotësuar, të bëjë ndryshime në Layout ose whatnot-- atëherë këto objekte janë atje. Ata janë të komplikuara. Kështu që këtu është një mostër shumë e thjeshtë kod. Kjo është pesë linjat. Në thelb, unë jam duke përcaktuar dy shtabeve. Është në 3/4. Stafi i parë ka një bashkangjitur Mark tempo, por kjo është në të vërtetë ndodh për të shkuar në për të gjithë rezultatin, sepse shenjat tempo janë në nivelin rezultatin. Shenja metronom gdhendës është e bashkangjitur për të shënuar kontekstin. Nuk janë çelësat e ndryshme, për shkak të [e padëgjueshme] gdhendës është e bashkangjitur shtabet. Ju në fakt mund të bëni është. Mostra kam shkruar është në fakt në C të mëdha, por kjo është vetëm për të demonstrojnë ju mund të keni çelësat e ndryshme në shtabeve të ndryshme. Dhe sintaksa themelor është që ju shkruani shënim emrat me E, F, G, çfarëdo. Nëse ju doni të bëni accidentals, ju prapashtesë është apo ES. Kjo është nga holandisht konventat Muzikore. Dhe për të bërë hapa oktavë, ju duhet të përdorni këto shënoni Marks, presje apo apostrof. Relative thjesht do të thotë çdo gjë që ju të keni një shënim, kjo automatikisht do të plaec në oktavë më të afërt me atë të mëparshme. Dhe në qoftë se ju doni të hidhen më shumë se një fifth-- thonë se një e pesta ose more-- atëherë ju duhet të përdorni [e padëgjueshme]. Por përndryshe, ju nuk keni për të specifikojë oktavë e çdo notë të vetme. Dhe relative C, kryeministër, dhe C, ju vetëm të specifikojë mesme C dhe baza C, vë në dukje veçanërisht para. Atëherë ju keni këto shtabet që organizojnë këto dy zëra ose mostra të muzikës, dhe ju keni një rezultat. Dhe kjo duket si ky. Nëse ju doni të merrni kohë për të Kopjoni këtë mostër të LillyPond Kodi mbi mëparshme rreshqet këtu, dhe ju mund të shkruani atë për LillyPond veten. Unë e di se ne kemi marrë diçka që duket shumë si kjo. Pra, ka një tjetër teknologji quajtur XML Muzikë mirëmbahet nga persona krejtësisht të ndryshme. XML është një dhënat tekstuale structure-- unë nuk duhet të thonë se të dhënat e structure-- them metaforë Harta lloj. Dhe kjo është projektuar për të mbajtur të dhënave hierarkike shumë mirë. HTML, për shembull, është një lloj i XML. Dhe ju mund të thoni XML për shkak se ata kishte të gjitha kllapa kënd dhe kënd shënon kllapa Slash që fushat shfaqje të dhënave. Unë nuk kam një kod shembull nga Music XML. Ju mund të gjeni vetë. Në thelb, arsyeja që ju mund të dëshironi për t'u përdorur si XML fazën e ndërmjetme është, para së gjithash, kjo është një format shkëmbim për thelb every-- unë nuk duhet të them çdo, por një shumë e rezultatit të ndryshme shkrimtarë. Pra, nëse ju shkruani në Muzikë XML, jo vetëm që mund LillyPond lexojnë atë me ndihmën e këtij auxilary program të quajtur Muzikë XML për LY, por edhe Finale mund të lexoni ajo, Sibelius mund ta lexoni atë. Varësisht se si objektin tuaj të brendshme hierarki punon për përfaqësimin muzikë, ajo mund të jetë më e lehtë për të shkruar jashtë të Muzikës XML sesa të LillyPond dhe të mbështeten vetëm në Music XML të LY për të bërë konvertimin. Unë nuk mendoj se [e padëgjueshme] ka Muzikë XML. STEPHEN KREWSON: Kjo nuk ka. Dikush është duke punuar në të, edhe pse. CONNOR HARRIS: OK. Euterpea nuk ka një Muzikë XML funksion ende prodhimit. Nëse doni një ide përfundimtare të projektit, ndoshta merrni në kontakt me një vajzë se Stefani e di, dhe ata mund të përdorin ndihmën tuaj. STEPHEN KREWSON: Unë do të duan atë. CONNOR HARRIS: Gjithashtu, në thelb, çdo gjuhë programimi kjo është vlerë kripë e saj tashmë ka një bibliotekë XML, kështu që ju mund të brenda vendit të kthyer të gjitha e muzikës tuaj në një objekt se biblioteka XML mund të shkruajnë se do të kërkojë më pak ndryshimet në strukturën tuaj të brendshme për çfarëdo muzikë të objekteve dua të shkruaj se shkruar atë direkt në LillyPond do. Pastaj vetëm të shtypura it out me XML me bibliotekat XML në gjuhën tuaj, i cili do të garantojë se kjo është sintaksore korrekte dhe çdo gjë, dhe pastaj kthyer atë në LillyPond. Pra, teknologji ju mund të dëshironi të shikoni në qoftë se ju jeni duke bërë diçka si kjo. [Padëgjueshme], një tjetër teknologji auxilarry. Kjo është në thelb Tech Punon ose Tech Studio për LillyPond. Pra, ajo ofron ndihmë me Sintaksa, me templates për të përbashkët të ndryshme kombinime të instrumenteve. Kjo i lejon ekran të ndarë shikimin kështu ju mund të keni kodin tuaj në një dritare dhe PDF në një tjetër dritare dhe klikoni në vende në PDF të hidhen në përkatës spote në kodin tuaj burim. Kjo është më e dobishme në qoftë se ju jeni në të vërtetë shkrim LillyPond fotografi veten se në qoftë se ju jeni duke gjeneruar ata programuar. Por përsëri, kjo është diçka të dobishme që të ketë. I madh. Një tjetër resources-- unë vetëm do të kalojnë nëpër këtë shumë shpejt. LillyPond Manualet LillyPond ka Dokumentacioni i shkëlqyer në faqen e saj. Ata kanë një tutorial. Ata kanë një referencë sintaksë. Ata kanë qindra e copra për gjëra të ndryshme të vogla yo mund të kenë nevojë të bëni për të treguar aftësive të ndryshme. Nëse ju doni të përdorni gjuha e shkruar ose të bëjë më të gjera Përshtatje, atëherë nuk ka internals referencë në atë URL. Nëse ju doni të përdorni Muzikë XML, ka se URL, musicxml.com/tutorial. Dhe pastaj në qoftë se ju duhet të mësoni skemë sepse ju në fakt doni të përdorni objektet scripting në LillyPond, atëherë ka një [e padëgjueshme] quajtur Interpretimi Strukturuar e programeve kompjuterike, e cila nuk është vetëm e dytë më i madh teksti CS ndonjëherë written-- gjeni më pas në qoftë se ju doni të dini ajo që unë mendoj se më i madhi një is-- por kjo është edhe një shumë të mirë hyrje në gjuhën e duhur. Ju nuk do të duhet më shumë se Disa seksione të parë. Dhe kjo është ajo. Ndonje pyetje? STUDENT: Ku mund ta shkarkoni juaj gjeneruar Frere Jacques kështu që unë mund të vënë atë në iPod tim? STEPHEN KREWSON: E pra, ju mund të shkruani diku larg në një skedar wav në Euterpea. Dhe ju keni kodin. Është në Github. Bëni variacione tuaj të Frere Jacques nga CS50 mendjes koshere. Ajo do të jetë i madh. CONNOR HARRIS: Çdokush tjetër? STEPHEN KREWSON: Ne kemi nevojë për një bas daulle të mirë, too. Është me të vërtetë e keqe. STUDENT: Euterpea ka jo vetëm pala përbërja, por signal-- STEPHEN KREWSON: Po. Në fakt, puna unë bëri në Euterpea kur unë mori this-- ka një diplomuar kurs në Yale se përdor it-- ishte në sintezë të shëndoshë. Pra, ka një të vërtetë mënyrë e mirë për përdorimin e shigjeta dhe disa prej simbol pamë të kompozuar së bashku funksionet sinjal. Në veçanti, bas për më prej tyre është vetëm një valë sine thjeshtë. Por nëse ju filloni kompozimin ato në mënyra të pazakontë programore, ju mund të merrni tingëllojë si i çmendur Efektet, si kaskadat pazakontë. Ju mund të krijoni shumë prej rëre tingëllon me shumë ulje. Kam bërë një projekt në grimcuar sinteza, i cili është diku në mes FM dhe marrjen e mostrave. Ju merrni shumë të vogla, mostrat pak, dhe pastaj kombinuar ato me një lloj të modulator dhe për të ndërtuar një tingull më të pasur. Ne gjithashtu bëri modelimin fizik, kështu që duke u përpjekur të mendojnë për fizikës dhe psychoacoustics e diçka si borisë, dhe të menduarit në lidhje me mënyrën shëndoshë është kërcim off zilja e borisë dhe akustikë e dhomë dhe modelimit që me oscillators themelore. CONNOR HARRIS: Thanks so much. Faleminderit për të ardhur. Dhe unë jam gjithmonë të gatshëm për marrë pyetje nga email-- connorharris@college.harvard.edu. STEPHEN KREWSON: Po. stephen.krewson@yale.edu. Ftohtë.