CONNOR HARRIS: Hi. Es esmu Connor Harris. Es esmu CS50 CA Hārvardas. STEPHEN KREWSON: es esmu Stephen Krewson. Es esmu TF par CS50 at Yale. CONNOR HARRIS: Un mēs runāsim par kādu tehnoloģijas, kas jums varētu vēlaties izmantot, ja jūs interesē darot galīgo projektu, vai tiešām kaut kas ar mūziku. Mēs ejam, lai būtu pievēršoties vispirms programmēšanas valoda sauc Haskell. Tā ir funkcionāla valoda, tāpēc paradigma ir ļoti atšķirīga no C vai PHP vai citām sevišķi valodas ka jūs esat jau izmanto, un jo īpaši uz bibliotēku rakstīta Haskell sauc Euterpea, kas var palīdzēt cilvēkiem ar rakstot mūziku funkcionāli, būtībā. Un Stephen būs staigāt jums caur lielisks piemērs, ka. Pēc tam, es jūs iepazīstināt ar kaut ko sauc LillyPond, kas ir tehnoloģija salikums mūziku. Tas ir veida, piemēram, LaTeX mūzikai, ja kāds no jums ir izmantoti LaTeX par matemātikas klasēs vai pārējie P komplekts klases vai ko jūs esat. Un tāpēc es došu jums, atkal, daži vienkārši piemēri, kas un norādīt Jums vispārējā virziens kādu labāku resursu. STEPHEN KREWSON: In Turklāt, mēs domājām to būtu forši izveidot mazliet mājieni uz cauruļvadu starp Euterpea radīto MIDI failus in LillyPond, tāpēc mēs piedāvājam daži instrukcija par skripti to darīt, kas ir nodrošināti ar LillyPond tikai, lai saglabātu to open source un iegūt cauruļvadu iet. CONNOR HARRIS: Atkal, mums vajadzētu uzsvērt, šīs divas tehnoloģijas, jūs nav tās izmantot kopā. Viņi nav paredzēta darbam kopā, lai gan tie ir ļoti labi. STEPHEN KREWSON: Right. Un pilnīgi bez maksas. CONNOR HARRIS: So pateicības, tikko izlasīju, ka. STEPHEN KREWSON: Pienācīgi atzīmēts. Pateicoties šiem ļaudīm. To es ņemšu ievelkas tikai uz brīdi. Instalācijas process ir mazliet viltīgs. Mums ir izlasījis mani uz GitHub ka jūs varat to apskatīt. Tikai e-pastu man, ja jums ir kādi jautājumi. Bet mēs rādīsim šo saskaņā ar pieņēmumu ka tas strādā visiem. CONNOR HARRIS: Un, ja jūs nevarat nokļūt LillyPond uz darbu, nav liels darījumu. Nav live kompilācija ka tiks iesaistīts, vismaz manā galā. STEPHEN KREWSON: Haskell un LillyPond vajadzētu gan ir uzstādītājiem. Euterpea tiek lejupielādēts kā paketi, tā tālāk un tā tālāk. Tātad mēs runājam par datora mūziku. Un tas ir tikai ļoti 50.000 pēdu skats. Tur ir daži dažādi aspekti no tā. Un tas ir raupja un ir gatavojas aizēnot kādu detaļu. Bet mēs varētu domāt par kaut ko tāpat algoritmiskās kompozīcijas, izmantojot algoritmus, izmantojot kodu, lai radītu kaut kāda veida of-- varbūt self-līdzīgs secība piezīmes, vai varbūt piezīmes ar dažiem ierobežojumiem. Un tad tie varētu būt veic vai interpretēts ar analogo instrumentiem vai kaut kā tā. Bet sastāvs bija darīts algoritmiski. Bet, protams, varbūt platība dators mūzika vai digitālās mūzikas mēs esam vairāk pazīstami ar ir digitālais skaņas sintēze vai digitālais izlases un digitālās ierakstu. Vairāki digitālo instrumentu partijas ir darīts, izmantojot digitālo paraugus. Patiesībā, mēs būsim, izmantojot vienu no tiem, forma skaņas fontu bibliotēku vēlāk. Bet tur ir arī kaut kas ko sauc Digitālā sintēze, kas iznāca par vēlu '70s un uz' 80s ar Yamaha un John Chowning Stenfordas darot FM sintēze vai Frekvences modulācija sintēze, kur jums bija pārvadātājs signālu un Modulējošais signāls gan audio spektrā. Bet tas, ko mēs esam vērsti uz šodien ir kaut kas ko sauc MIDI, un, protams, algoritmiskā kompozīcija. Mēs nebrauksim, lai padarītu instrumentus, bet mēs tā vietā gatavojas veikt kādu mūziku, un tad, ka saņems interpretēts daži instrumenti, kas ir conformant uz Kopumā MIDI standarts. Tātad, kas ir MIDI? Es neesmu gatavojas saņemt pārāk dziļi tajā, bet MIDI ir datu pārraides protokols. Tā ir sava veida ceļvedi pāri dažādi uzņēmumi un nozares organizēšanai skaņas vai plāksteri. Tātad mēs redzam, ka tur ir MIDI standarts par visu dažādām sitaminstrumentiem skaņas un MIDI ieteikumi visiem dažādu veidu synth vai dažāda veida visu instrumenta grupas orķestri, saka. Jūs, iespējams, iepazinies ar 0 līdz 127 MIDI ziņas. MIDI signāls parasti viens bits norādot vai tas ir datu vai statuss pakešu, un tad tur ir septiņi biti signāla. Un tie var kontrolēt viss no tilpuma uz darbības vai spiediens uz īpašu atslēgu ja jūs, kas veic ar MIDI kontrolieris, kā arī, protams, piezīmes. Un, protams, ir MIDI bijusi ļoti noderīga, jo tas ir veids, kā vadu kopā vai ziedlapķēde ķekars MIDI aparatūras ierīcēm. Man ir septiņi vai astoņi atpakaļ pie manas mājas. Tas kļūst patiešām sarežģīta, bet tas ir patiešām spēcīgs. Un tas ir patiešām vecs. Tas ir no sākumā '80s, un tas ir patiešām jauki un mazi. CONNOR HARRIS: Jā. Visas klasiskās Nintendo video spēles, iespējams, ir MIDI failus mūziku, piemēram. STEPHEN KREWSON: Lūk piemērs vispārējās MIDI, parādot MIDI kā sava veida vispārējās protokolu. Un es domāju, ka mēs varam domāt par Starpība starp specifikācijas ka vajadzētu būt kaut kas līdzīgs šie instrumentu skaņas un faktisko realizācija šo instrumentu skaņas ar skaņu fontu vai konkrētu MIDI sintezators kā starpība starp varbūt typeface-- kas saka, vispār, tas ir konstrukcija šis konkrētais veids, kā pārstāvēt characters-- un īpašu fontu kas ir īpaša izmēra un tembrs, un tur ir realizācija the-- CONNOR HARRIS: Varbūt labāk būtu salīdzinājums būt Unicode standarts says-- tas dod vairāki katram raksturs, un patiešām katrs valoda pasaulē, vai plašs kopums skriptu valodas pasaulē, un pēc tam tie ir padarīti par kaut ko grafiskā dažādi fontu paketes. Un, protams, jūs varat iedomāties MIDI kā Unicode skaņas. Un tas ir tikai saraksts of-- lielā straumē Pasākumu un instrumentu un plauktiņš, un jums ir atsevišķa programmas, piemēram, burtveidolu, padarīt kas stājas kaut kas ir dzirdamas. STEPHEN KREWSON: Tad kāpēc Haskell? Haskell ir funkcionāla programmēšana valoda, ļoti attīstītas, ļoti atšķirīgs no C, ļoti atšķiras no PHP. Un mēs ejam, lai redzētu, ka tur ir Vienkārša funkciju sastāvu Haskell kas ļaus mums brīze, izmantojot komponēšanu vai rakstīt uz augšu, pārrakstot, kaut kas līdzīgs FRERE Jacques, Tas vienkārši dziesma, kas ir daudz daļu tajā, ka ir self-līdzīgas vai atkārtojas. Tātad tas būs daži motivācija, kāpēc mēs esam izmantojot Haskell, kurā funkcijas ir pirmās šķiras pilsoņiem. Un es gribēju, lai paplašinātu Tas mazliet. Tas ir mazliet viegli notate FRERE Jacques in Haskell. Bet ko tad, ja mēs vēlējāmies pievienot bungu daļu, lai to? Ko darīt, ja mēs vēlējāmies, lai mēģinātu padarīt kaut kas līdzīgs Roland 808 vai 909 bungas mašīna, kur jums ir aptuveni 16 dažādi pasākumi? Parasti tie ir uzlūkot kā 16 piezīmes. Un jūs varat kontrolēt globālās tempo, un jūs varat izlasīt ķekars dažādu sitamie daļām no basa bungas, kokvilna, dažādi lamatas, atvēršanas un aizvēršanas augstās cepures uz šiem kanāliem veida, un tad jūs varat EQ vai pielāgot to apjomu. Un mēs redzēsim skaistu ceļu Haskell pārstāvēt šo soli sequencer ar visiem dažādas atdzist lietas Haskell mēs varam darīt ar radot saraksti un filtrēšana nekā sarakstiem, kartēšana pa sarakstiem, kartēšana funkcijām, sarakstos. Un ātri atvainošanos. Tas ir ļoti virspusējas un pārāk ātri skice daži no aspektiem no Haskell un Euterpea, kas ir Domēnspecifiskās iegultās valoda rakstisks in Haskell par mūzikas veidiem. Tāpēc, lūdzu, pārbaudiet kodu tiešsaistē. Uguns GHCI, kas ir Glāzgova Haskell Compiler Tulks. Un es būs darīt dažas Tas ir mazliet lai jūs varētu redzēt, kā tas ir darīts. Un tas ļauj ielādēt ar the-- sintakse ir resnās zarnas un tad komanda. Jūs varat ielādēt failus. Jūs varat izmantot pārlūkot uz šiem failiem lai redzētu visas funkcijas, kas pastāvēt konkrētā modulī. Un tad, kā mēs redzēsim, veidi un veids klases ir tik svarīgi Haskell, lai jūs vienmēr varat check-- īpaši ja jūs strādājat ar jaunu DSCL piemēram, tas, kāda ir mūzikas veids? Es zinu par to, kā Numeric veidi strādā Haskell, bet es nezinu daudz par mūziku. Bet jūs varat izpētīt, kā viņi ir noteikts, izmantojot šo t vai tipa komandu un pēc tam aicinot konkrēts funkcija vai datu objekts. CONNOR HARRIS: Jā. Ja jūs domāja, C un šķindēt bija hardass par veidiem, Jums nav ne jausmas par Haskell. Laba lieta par Haskell ir tas, ka ja jūs varat saņemt savu kodu, lai apkopotu un ja Haskell tipa pārbaudēm, tas ir iespējams, ir taisnība, jo tipa sistēma ir tik stingra. STEPHEN KREWSON: Jā. Tāpēc es vienkārši gribu iet through-- un atkal, tas nedara tā justice-- daži iezīmes Haskell ka, vismaz tā creators-- un tā tika izveidota 1980. gadu beigās ar ķekars cilvēku, komiteja no aptuveni 20 people-- domāja, bija svarīgi. Un pirmais, ko viņi uzskaitīti papīra, kas aprakstīja ģenēzi Haskell pirmajos 20 gados, vai arī tā bija, ka tā bija slinks. Tātad, ko tas nozīmē? Nu, tas nozīmē, kad mums ir sava veida izpausmes, mums ir nepieciešams, lai novērtētu to. Un Haskell dara ar zvanu ar nepieciešamību veidā vai bez stingri veidā. Tas ir, ja mums ir ķekars sastāvdaļas mūsu izpausmes, mēs cenšamies, lai aizkavētu novērtējumu Šo apakškategorijās līdz absolūtam pēdējā minute-- tas ir līdz brīdim, kad mēs tiešām ir nepieciešams tos. Tātad šis means-- kas ir tiešām foršs, jo īpaši ja mēs domājat par ieguves muzikāla solis sequencer. Jūs to ieslēgtu, un jūs sākat darbojas solis sequence-- Ja jūs kādreiz strādājis ar bungām machine-- un tas tikai iet uz visiem laikiem. Tātad, tas būtu patiešām jauki, ja mēs varētu sacensties ka Haskell. Un mēs varam darīt to ar bezgalīgu vērtībām, jo ​​īpaši bezgalīgs sarakstos. Tas ir ļoti viegli, lai ievadītu bezgalīgs saraksts Haskell. Jūs varētu vienkārši izmantot sintakse leju Šeit, kur jūs redzat no 1 līdz 3, noņemt 3 1 dot dot, un ka ir bezgalīgs saraksts Visu dabas numuriem pagarinot par cik jūs varat iedomāties. Es gribu ieviest jēdziens krokas uzreiz. Un atkal, mērķis Šī semināra nav lai uzzinātu par krokām Haskell vai augstākas pakāpes funkcijas. Bet es tikai gribu, lai ieviestu to sniedz precīzu sajūtu cik dīvaini Haskell ir un cik spēcīgs tas ir. Un jo īpaši, mēs ejam, lai be-- kad mēs mūsu dažādas bungas daļas, mēs spēsim tikt manipulējot sarakstus numuri, locīšanas tos uz otru. Un, lai to izdarītu, mēs būt izmantojot kartes un krokām. Tur ir tiesības asociatīvais reizes, kas ir šī viena tiesības here-- 1 mīnus daudzums, 2 mīnus daudzums, 3 mīnus 0. Un sintakse priekšlikums fold, jūs piešķirat reizes bāzes vērtība un tad operation-- Šajā gadījumā saskaitīšanas vai atņemšanas. Esmu parādīts abos gadījumos. Un tad tur ir akumulators, kas uzkrājas visā sarakstā, piemērojot šo operatora plus vai mīnus, un pēc tam uzkrājot to. Tātad tas būs the-- ja tā sauca ar reizes R plus 0, sākot ar 0, mēs tad summa visu skaitļi šajā sarakstā. Un tas ir saraksts, no 1 līdz 3. CONNOR HARRIS: Tātad, lai to otru veids, fold r aizņem trīs argumentus. Tur ir funkcija, kas pati aizņem divus argumentus, tad tur ir starteris vērtību, un tur ir saraksts ar vērtībām. Un ko jūs darāt, ir jūs lietojat starteris vērtību, pirmkārt vērtība, nodot tos funkciju. Ko jūs saņemsiet out, pieņemt, ka, barību, kas uz funkcija no otrkārt vērtība, ko jūs izkļūt, pieņemt, ka, barības kas stājas funkcija no trešās vērtības. Un tad, ja jums iet uz leju Tas viss saraksts šādā veidā, jūs gatavojas saņemt beidzot daži vienskaitlī vērtība, kas ir tāda paša veida, ko jūs sākās ārā ar un no tā paša tipa kā lietām sarakstā un pēc tam tas ir atgriešanās rezultāts reizes R. STEPHEN KREWSON: Tātad, jo īpaši, tie ir augstāki funkcijas, jo viņi lieto citu funkcija kā vienu no argumentus. CONNOR HARRIS: Jā. Ja jūs esat izmantojis dažu citu languages-- Es zinu, R, [nedzirdama] valoda ir tas, ko sauc samazināt. Jums varētu būt līdzīgas funkcijas citās valodās, vienkārši sauc dažādas lietas. STEPHEN KREWSON: And kas ir jauka par kārtīgu R šajā gadījumā ir tas, ka fold R var strādāt ar bezgalīgu sarakstiem. Tātad šajā apakšdaļā, šī P5 ir radīt uzdevumus, kurus tiek ieslēgts solis sequencer daži bungas daļa, piektā daļa bungas, un varbūt tas ir Conga bungas vai kaut ko. Un tas ir apzināti stulbs veids, kā rakstot šo, bet tas ir jautri, jo tas parāda daudz no lietas par Haskell un Euterpea. Tātad reizes R Šīs colon-- resnās ir tikai uzņēmējs, kas nospiež lietas kopā ar list-- sauc par tukšu saraksts, kas ir tikai tukšas iekavās. Un es esmu aicinot ka par šo bezgalīgo sarakstā. Tas ir tiešām divi saraksti saskaitot kopā uz leju šeit. Sarakstā 1 komats 6 dot dot ir 1, 6, 11, 16. Tik Haskell-- tikai dažas rakstzīmes, jums var radīt visu vielas secība numuriem ka ir pieci skaitļi intervālu stiepjas tālāk uz bezgalību. Un es prepend to, ka Tas īsāks maz list-- 3, 8, 21-- tikai, lai parādītu jums kā jūs varat saķēdēt sarakstus. Un tad es esmu salocīta uz sevi. Un tas beidzas tikai to sava veida identitāte operācija, bet tas ir bezgalīgs. Un kārtīgi R var darīt, jo tas laiski izvērtē, kā iepriekš. Ja mums ir 1 un 2 un 3, mēs varam vienkārši stiprinājuma pie visu pārējo tā. Tas nestrādās plus vai mīnus, bet tas strādās šajā kolu identitāte darbību sarakstā. Tātad, kā mēs praktiski izmantot, ka, ja mēs ir bezgala garš saraksts ar lietām? Nu, Haskell sniedz daudz functions-- un izskatās vairāk par šos savu LAIKU_ piemēram, veikt kas saka, OK, mēs esam radot šo bezgalīgo sarakstu, bet mēs esam tikai gatavojas veikt kādu skaits no tā, un šajā case-- mēs redzēsim šo vēlāk Mūsu bungu mašīna code-- GM ir tikai sava veida pasaules mainīgais pakāpju skaitu, kas šajā sequencer. Par roll-in mašīnām I parādīja jums, tas ir parasti 16, bet man ir īstenojušas to ar 32. Tas nav īsti jautājums. Haskell ir arī tīrs, tāpēc tas ir spēcīgs statisks rakstīt, ka Connor pieminēja. Tātad funkcijas matemātisko In sense-- viņi vairāk matemātiskās ka viņi garantēti to nevar piekļūt vai mainīt jebkādu mainīgs vai veikt ieeju vai izeju. Tātad, ja jums ir funkcija, tas ir determinēti. Tā vienmēr atgriežas pats vērtība stāvoklī programmas vai nemainās. Ir, protams, izņēmumi monadic uz šo, bet tas ir ārpus mūsu darbības jomu. CONNOR HARRIS: Jā. Ko tas nozīmē, lai gan, ir tur ir daži svarīgi [nedzirdama] sekas. Viens ir tas, ka tas ir ļoti viegli parallelize Haskell programmas. Jo, ja jums ir, teikt, funkcija, kas vajag darboties miljons vērtībām, ja jūs zināt, ka funkcija būs vienmēr dot tādu pašu vērtību, ja jūs barību noteiktā value-- ja tu esi no 1 [nedzirdama] f, f 2, tad f no 3 vai whatnot-- f no 1 nav gatavojas rakstīt out uz failu vai kaut ko darīt kas mainīt vērtību f2. Jūs varat sadalīt šo funkciju miljonus dažādu mašīnas miljons dažādi diegi vai neatkarīgi, iegūt visu atbildes atpakaļ, saņemt visus atgriešanās vērtības atpakaļ, un tad tas arī viss. Tik ļoti viegli parallelize lietas. Negatīvie ir tas, ka ieejas un izejas, jo īpaši iederas tipa sistēmas ļoti sarežģītos veidos. Mēs ne iedziļināties, ka tieši tagad, bet es aicinam jūs apskatīt dažas resursu tiešsaistē, ja jūs vēlaties, lai uzzinātu par to. STEPHEN KREWSON: So ierakstiet classes-- un tas was-- klases veidu tika izgudrots, lai atrisinātu problēma operatora pārslodzes. Tāpēc mēs vēlējāmies, lai būtu vienlīdzība starp dažāda veida lietām. Protams, mēs varētu domāt of-- vienlīdzība starp skaitlisko veidiem ir ļoti viegli domāt par, bet Kas par vienlīdzību starp sarakstiem? Kas par līdztiesību koka kāja datu struktūras? Un tas ir viss iespējams Haskell jo tipa klasēs. Tātad, ja jūs definētu noteiktu datu type-- un šeit, tie ir mūzikas laukumi. Mēs esam beidzot kļūst zināmā datora mūziku. Tāpēc mums ir C, C asu, un tā tālāk, un tā tālāk. Tie pieder pie ķekars dažāda veida nodarbības. EQ-- tie pieder pie EQ tipa klasi. Tas nozīmē, ka viņi atbalsta līdztiesības operācijas. Tātad jūs varat novērtēt, vai viens secība mūzikas primitīvas ir tāds pats kā cits. Viņi pieder pie kārtas klasē. Tas nozīmē, tur ir pasūtīšana uz tiem. D nāk pēc C. C asas nāk pēc C, kā arī. Tie pieder klasei parādīt, kas nozīmē, ka tie var uzdrukā uz konsole vai terminālī. Viņi pieder pie klase uzskaitīti, kas nozīmē, ka, pat ja tie ir simboli, tie ir pamatā skaitlisku pārstāvība sākot 0 un iet off tomēr cauri daudzas lietas ir šeit, 20, vai arī tā, vai 30 vai 40, varbūt. CONNOR HARRIS: Un kad mums ir datu tipu ka derives-- ar šo atslēgvārdu "deriving--" noteikta veida klase, tas nozīmē, ka kompilators centīsies būvēt kaut ko automātiski. Tātad, varbūt jūs vēlaties noteikt kvalitāti atšķirīgi. Jūs vēlaties, lai definētu C asu kā vienāds ar D plakana, piemēram. Ar šo būvniecību šeit, es nedomāju, ka C asa un D dzīvoklis būs vienāda, jo kompilators automātiski teikt katru citu iespējamo vērtību atšķiras no katru otro. Tātad tas ir iespējams ignorēt noklusējuma implementāciju Šo nodarbību veidiem. Atkal, apskatīt atskaites, ja jūs vēlaties, lai uzzinātu par to. STEPHEN KREWSON: And šeit, patiesībā, tas ņemšu būt noderīgi, ja mēs kodu vēlāk. Mēs redzam dažas no infikss operatoru secīgai sastāvu, paralēli kompozīcija, un tā tālāk, šie plusi un vienādas pazīmes ieskauj kolonnas. Tas nozīmē, ka mēs varam spēlēt šīs dažādās mūzikas primitīvi viens pēc otra. Tas ir secīga sastāvs. Vai arī mēs varam spēlēt tos paralēli tajā pašā laikā. Lai es varētu būt mūzikas vērtība, un tad tas ir vienāds un kolonnas, infikss paralēli sastāvu operators, un atskaņot tos kā sava veida akordu. Un mēs ejam, lai izmantotu Tas kad mēs apvienojam Mūsu bungas daļa ar mūsu maz Frere Jacques dziesma spēlēt šīs divas sekvences mūzikas vērtības, tajā pašā laikā. Currying is-- Curry pēdējo reizi Nosaukums Haskell Karija, kurš Haskell attēls tiek nosaukta. Un tas ļauj mums jauki, elegance, kad mēs esam rakstiski Visi šie dažādie funkcijas vai filtri, ka mēs esam būs kartēšanu pār mūsu sarakstos. Funkcija no diviem arguments-- f X un y-- var tikt attēlots kā f x piemērots y. Tātad, tas ir atkarīgs no viens arguments, kas atgriež cita funkcija vienu argumentu. Tātad tas nozīmē, ka mēs varam karte funkcija f X pār saraksta y s. CONNOR HARRIS: Vēlaties, lai sniegt piemēru citiem? STEPHEN KREWSON: Jā. Man ir piemērs tepat no dažas no lietām, mēs rakstīsim. Tātad atkārtot 2-- labi, atkārtot ņems viena vērtība, kas ir, cik daudz reizes atkārtot kaut ko, un tad tas prasīs value-- parasti saraksts vai kaut ko. Tātad šeit, mēs esam kartēšana atkārtot 2 pār citu sarakstu. Tātad, ja mēs karte atkārtot 2, ja mēs atkārtot 2 piemērot uz šīs list-- pirmā elementa un tie saraksti mūzikas phrases-- ražos divi "tu sleeping--" Tātad jūs guļ, jūs miega. Tāpēc tagad mums ir divi. Bet kopija aizņem divas argumenti, bet tāpēc, ka mēs esam currying un tad kartēšana, mēs varam pārstāvēt atkārtot 2 tādu, kas atpakaļ, kā funkcija no viens argument-- tikai atdarināt divreiz. Un tad mēs esam piemērojot ka katram Šā saraksta frāzes elements. Un concat ir Haskell operācija līdzināšanas sarakstu. Jo kopija 2 gribas sagatavot sarakstu sarakstus. Un tas ir tas starpprodukts šeit. Un tā tad mēs varam concat vai saplacināt kas divas reizes. CONNOR HARRIS: vienkāršāks piemērs currying, ja jūs vēlaties like-- iedomāties f ir tikai reizināšanas funkcija, kas notiek divas argumenti un atgriež savu produktu. Tātad, ja jums ir F 4 5, tas ir 20. Bet jūs varat domāt par to kā also-- jums ir funkcija F 4 kas ņem paskaidrojumi un atdevi četras reizes tas argument-- tikai daļēja pieteikumu, kas tikai viens arguments 4. Un, ja jūs barības f no 4 5, kas dos jums 20. Un tas ir vienkāršāk piemērs currying. Tas parasti ir viens no mācību grāmatu ones. STEPHEN KREWSON: Lambda izteiksmes vai anonīmi funkcijas Ir vēl viens Haskell pazīme. Tātad, ja mums ir nepieciešams, lai sakult līdz maz funkcija dzīve kopija, bet saka, tas nav standartnovirze bibliotēka, mēs varam izmantot sintakse līdzīgs uz šādiem jautājumiem. Un mēs brīze pār to. Viena lieta, jūs redzēsiet daudz In bungu mašīna mēs zvanu lai kaut ko sauc filtrē, kas tāpat kā līdz šim, ir kartēšana funkcijas pa sarakstu, bet tas ir kartēšana Būla funkcijas. Tāpēc mums ir šeit piemērs Of A anonīmi definēts Būla funkcija, kas tikai aizņem pāris vērtības. Tas nav strikti runājot anonīms funkcija. Bet tas ir definēt ar ka sintakse īsuma, un tas tikai aizņem x modulis N- CONNOR HARRIS: Jā. Tātad f ir funkcija divi argumenti n un p kas atgriež funkcija, kas ir sevi funkcija vienu argumentu, proti x. STEPHEN KREWSON: I iepriekš minētie infikss operatori. Kādi ir infikss uzņēmēji? Nu, infikss uzņēmēji ir normāls veids, kā mēs pārstāvam operācijas, proti, mathematics-- 2 plus 2, nevis operatora plus un tad divi argumenti 2 un 2. CONNOR HARRIS: To sauc Reverss poļu notācija, kas ir termins es šaubos kāds no jums varētu zināt. STEPHEN KREWSON: Right. Reverss poļu vai prefiksu notācija. Bet Haskell nolēma izmantot infikss operatorus. Tātad šie ir daži no tad pasūtījuma tie, kas Ir paredzētas Euterpea DSCL in Haskell. Tātad tas bija kārtas sastāvs. Šī bija paralēli kompozīcija, un šis tika truncating paralēli kompozīciju. Un mums būs nepieciešams, ka ar mūsu bungu mašīna, jo mēs izmantosim pēdējais operators ka maz Tuple tur spēlēt bungu mašīnu gar ar mūsu Frere Jacques dziesmu. Un mūsu bungu mašīna ir būs bezgalīgs. Tas vienkārši spēlē uz visiem laikiem. Bet Frere Jacques dziesma nav. Tas nav tik garš. Tas ir tikai daži bāri. Tāpēc mums ir nepieciešams, lai apturētu bungu mašīna kā Tiklīdz īsāks muzikālā vērtība nāk uz beigām. Un tas infixed operators ir super noderīga ar to. Un Infikss notācija tāpat Tas ir sava veida jauki, jo teikt, jums ir funkcija, piemēram, citāts, kas dod veselu sadalījumu x kaut else-- žēl, ka ir jābūt a un b. Jūs varētu uzrakstīt to kā citātu no b. Tātad, ja jūs put-- elements ir vēl viens piemērs. x elements kādā sarakstā, ja jūs nodot tā in Backticks, jūs varat to izmantot. Pat ja tas nav simbols piemēram, plus vai mīnus vai laikos, Jūs varat izmantot nosaukumu funkcija, piemēram, ka Backticks kā infikss operators, kas ir diezgan vēss. CONNOR HARRIS: Atkal, tas ir visi vienkārši sintaktisko cukurs, tiešām. Tas neietekmē kodolu valodā. STEPHEN KREWSON: Tātad mēs redzam šeit, lai Pēdējā frāze no mūsu Frere Jacques dziesmu, Es spēlēju daži maz akordi vai trešdaļas izmantojot paralēlo sastāvu operators. Tas ir vēl viens veids, kā pateikt dažus par to, ko mēs esam tikko saka. Tātad jūs varat karti funkcijas Viena argumenta pār sarakstos. CONNOR HARRIS: Atkal, atsauces par Haskell-- ievada mācību grāmatām būs tas viss tajā. STEPHEN KREWSON: Tātad šeit ir diezgan Galvenais līnija solis sequencer mēs ņemšu apskatīt, izmantojot saraksts izpratne. Un mēs redzam šeit, ka elements fiksētā operatora muguras pēdiņām. Tātad, ja x ir no saraksta elements x s, tad mēs izsaukt PERC funkcijas. Tātad Perc ir tikai perkusijas funkcija. Tas aizņem dažas vērtība p, kas ir daļa, ko ierobežo kopuma visi dažādi sitamie skaņas ka mēs redzējām iepriekšējā slaidā, un tad tas dod, ka ilgums ceturkšņa piezīmi. Else tas dod tai QNR, un QNR ir tikai ceturtā piezīme atpūtu. Tātad šis ir veidot kaut ko jauku. Mums ir saraksts ar elementiem, un Mēs cilpa pār kādu sarakstu no viena uz max vērtību mūsu solis sequencer. Un, kad mēs esam pie konkrētā i ka saraksts viens uz max vērtību, ja tas man ir biedrs šis komplekts izveidots šo funkciju, labi, tad mēs savukārt to par percussion piezīmi. Pretējā gadījumā mēs vienkārši spēlēt atpūtu, kas Proti, mēs vienkārši klusēt. Un mēs varam redzēt šeit, ka šis saraksts izpratne sintakse, x valda šis saraksts konstruēta viena uz globālo lielumu sequencer. CONNOR HARRIS: Jā. Pamata sintakse saraksts comprehensions ir kronšteins, vērtība iesaistot daži mainīgie, bārs, iespējamās vērtības mainīgajiem paši, slēgta kronšteinu. Un, ja jūs esat darījuši kas celtnieks notācija jebkura veida matemātikas klasē, Jums varētu būt noteikti 2n piemēram ka n ir vai n ir ar z. Līdzīgi thing-- Šajā apzīmējumā ir domāts, lai būtu ierosinošs Minētās matemātisko papildinājumiem. STEPHEN KREWSON: Un jūs varat izmato vairākas predikātu un vairākus filtrus sarakstā izpratne, kas ir diezgan jauki. Algebrisko types-- mums nebūs kavēties ilgi šeit. Tur nav labs jēdziens Haskell vai labs, skaidrs jēdziens par to, kā veikt, teiksim, noklusējuma parametrs līdz funkcijai vai kaut ko. Python, tas ir diezgan viegli. Jūs varat vienkārši pateikt ar vienāds par deklarācija funkcijas, noklusējuma vērtība lieta neviens nav piegādāta. In Haskell, jūs varētu varbūt izmantot varbūt varbūt rakstīt, kas notiek vai nu neko vai vērtība tipa tikai. Tātad mēs izmantot šo ar bungu mašīna lai ļautu mums, lai sniegtu papildu apjomu parametrus, lai katru no drum daļām. Tā, ka dod mums ceļu, kam EQ vai apjoma par konkrētu kanālu. CONNOR HARRIS: In citi Haskell piemēri, Jūs varētu redzēt varbūt izmantots funkcijas, kas varētu neizdoties. Tas ir kopīgs viens. STEPHEN KREWSON: Un jūs varat piegādāt dažas kļūdas ziņojuma veida kā noklusējuma. Un tas ir īpaši ērts, ja jūs darāt I / O Haskell. Kas var būt trikiem. CONNOR HARRIS: vai par Līdzīgs piemērs, domāju, ka par funkciju, kas ietver sadalījumu no parametra, kas varētu būt 0. Un šī funkcija varētu atgriezties varbūt kāds. Tātad, ja tur nav dalījums pa 0, tas atgriezīsies tikai neatkarīgi. Un, ja ir sadalījums pa 0, tas atgriezīsies neko kā veids, signalizācijas kļūdu. Jo viens sekas Haskell ir ļoti stingra mašīnrakstīšanas ir tā, ka tur nav real-- Izņēmumi ir neērts, būtībā, kļūdu apstrādi ir neērts. Un tas ir viens ļoti kopīgs veids, kā darīt to. STEPHEN KREWSON: Tāpēc tagad mēs citam prāta saliekuma lieta par Haskell, kas ir modelis saskaņošanas un funkciju definīcijas. Es parādīja jums pēdējā Bīdiet deklarācija solis secība funkcija, kas paņēma varbūt vērtību, tad int, tad saraksts ints, tad atgriež secība mūzikas vērtībām tur atzīmes gan ar piķi un apjoma. Tātad šie trīs argumenti var būt modelis saskaņota šādā veidā. Un mēs vienmēr vēlamies būt pārliecināti, lai do bāzes lietu vai izceļošanas gadījumā vispirms. Un šie pasvītras var vienkārši tikt interpretēts nozīmē jebkuru vērtību, kas ir tur. Tātad, ja mēs iegūtu aicinājumu pastiprināt secību ar kādu vērtību, kāda cita vērtība, un tad tukša saraksts, ko mēs gribam atgriezt ir tikai klusums, atpūtas 0. Un tā vietā, lai ir tukša saraksts vai 0, tā ir atpūta 0, jo mēs esam nodarbojas ar mūzikas veidu, un tukšs saraksts no mūzikas tips ir tikai pārējā nav ilguma. Tas nav mūzika. Un tad mēs redzam, ja mēs iegūtu soli secība ar v skaļuma argumentu, p par piesardzības instrumentam arguments, un tad saraksts krustiņus. Tad mēs daži sīkumi. It īpaši, mēs piemērot šis saraksts izpratne, un mēs veiktu dažus operācijas ar varbūt vērtību to pārvērst skaitlisko vērtību tā, ka tas varētu būt tad uzskaitītas un izmantotas lai izvēlētos instrumentu. Atkal, tas ir maz bit apzināti inconcise tikai, lai parādītu visus dīvaini lietas jūs varat darīt, Haskell, kā jūs to apskatīt to par savu laiku. Viss kārtībā. Tātad mēs esam beidzot kļūst darīt to, ko mēs noteikti, lai darīt, kas ir veikt dažas datora mūziku. Tātad mēs ejam, lai mēģinātu padarīt Frere Žaks dziesmu. Tātad tur ir, cik daudz frāzes FRERE Jacques? Four. Liels. Un, kas ir jauki, ir tas, ka viņi visi atkārtoja tikpat daudz reizes, kas ir divi. Tāpēc mums ir četras frāzes katrs atkārto divas reizes. Un jo īpaši, viņi tādā kārtā. Un tur ir daudz, daudzi veidi, lai īstenotu apaļas, kas varētu būt jautri darīt. Es esmu darījusi to tādā diezgan vienkāršs veids šeit, kas ir tikai construct-- līniju funkcija ņem sarakstu mūzikas vērtībām un pārvērš to secīgu sastāvā piemērojot šo secīgo sastāvs operators. Un tad es aizkavēt dažādās daļas padarot tos sākt ar atpūtu. Tāpēc es sāktu ar pārējo divu pasākumu, un tad pārējie četri pasākumiem, un tad pārējie seši pasākumus, un pēc tam kārta darbojas, kā mēs visi zinām, šo dziesmu. Mēs redzam divas anotācijas vai modifikācijas mūzikas vērtībām kas ir ietverti šajā secīgus izkārtojums mūzikas elementiem. Mums ir pievienotu apjomu. Šī ir funkcija, lai anotēt mūzika ar konkrētu tilpumu. Tas ir labs piemērs no MIDI signāla darbojas no 0 līdz 127, septiņas biti informācija, kas var veikt. Un then-- mēs redzējām, ka ir ļoti īsi, bet kopumā MIDI saraksts ar dažādiem instrumentiem. Un tur nav visai daudz no tiem. Ja jūs izmantojat digitālo audio darbstacijas, piemēram, Ableton Live vai Pro Tools, tur ir neticami plašāks klāsts no sintezatoriem un VST instrumentiem. Bet MIDI standarts vienīgais ir maz, vai arī vairāki desmiti. Un daži no tiem ir smieklīgi. Es domāju, ka būtu jautri, ja mēs spēlējām instruments MIDI instruments helikopters, un pēc tam Nākamais veids caur kārtā, mēs veicām spilventiņu synth, un tad, Tas ražīgs svina kvadrātveida vilnis synth, un pēc tam balss izdalījušos šķidrumu, kas ir Mazliet neskaidrs par manu sliktu MIDI sintezatoru, bet tie OK. Un tad mēs redzam šo let un sintaksi no Haskell, un tad mēs esam spēlē Visas šīs daļas kopā ar paralēlo sastāvu operators. Un mēs droši vien varētu parādīt dažus no šo. Šeit ir kods. Un jūs varat redzēt C, ka gribētu būt no rīkles klīringa un iestatījumu daudz galds kods pirms jums varētu muzicēt, kā šis. Vai jebkuru citu programmēšanas valoda, jūs, iespējams, ir sadarboties ar kādu no veida bibliotēku vai API un noteikt viss uz augšu, un tad jūs ir sakopt. Bet šeit Haskell ir, es domāju, reiz jūs saņemsiet pakārt par to, neticami lasāma un ļoti izteiksmīga. Tātad pastāv īstenošana no FRERE Jacques. Viss kārtībā. Tagad mēs vēlamies, lai pievienotu perkusijas, un tas ir mazliet Mesjē. Tātad, pieņemsim to apskatīt slaidiem. Tik liels ideja ir padarīt ķekars sarakstos vai daļām. Ar šādu roll-in mašīnām, tur parasti bija aptuveni varbūt astoņi 10 ritma vai sitamie daļām. Un pēc tam izmantot ķekars paņēmienus. Un mēs esam runājuši par these-- izmantojot locījumi, filtri, Lambda funkciju, samērot pār sarakstos, lai radītu vērtības kādā intervālā no 1 līdz r, r ir 16, vai 32 soļi sequencer. Un tad, ja tur ir vērtība šajā sarakstā jo mēs esam darbojas caur sequencer, darbojas caur to atkal un pāri, izrādās uz šo piezīmi, un ka paraugs tiek iedarbināts. Šeit ir visi dažādi dīvaini veidi Man nāca klajā ar, lai radītu piezīmes. Izmēģiniet to savā daļēji summu. Tas būs skaņas atdzist. Laiks atļauj, mēs iet caur šo. Bet tieši tagad, es domāju, mums ir demo, kas mums ir. Cerēsim, ka tas iet OK. Tātad šis ir GHCI. Un mēs ielādēt failu Man ir sauc song.lhs, kas ir fails es tikko parādīja tevi. Labi, lieliski. Kā Connor teicu iepriekš, tas apkopoti, tas tipa pārbaudīts, lai es varētu elpot daudz vieglāk. Tas nav gatavojas uzspridzināt par mani. Es tā gribu jums parādīt kaut ko noderīgu. Jūs varat redzēt, ka modulis piekrauts sauc 50. Jūs varat pārlūkot šo moduli. Un tas ir tik jauki par doing-- varbūt ko jūs darāt Haskell nav sauc programmatūras izstrāde, bet jūs varat darīt daudz fun stuff par savu. Un darbplūsma ir patiešām jauka kā salīdzinot ar daudz citās valodās, jo jūs varat redzēt patiešām lasāmā veidā, kas notiek. Tātad mēs redzam, ka mums ir Visas šīs frāzes, kas Ir saraksti mūzikas piķi, un tad mēs veidot tos augšup kaut ko lielāku, kas ir mūzikas dziesma. Tā ir muzikāla vienība. Un tad mēs varam spēlēt visu ar funkciju sauc spēlēt mūziku. Jūs varat redzēt, ka uz leju šeit. Kas ir tikai spēlēt. Es būtu say-- man nav runāt par Tas dolāra zīme, ka ir visur. Dollar apzīmējums ir vēl viens infiksa operators. Bet tas ir viszemākais prioritāte jebkura operatora, kas efektīvi nozīmē, ka viss par kreisi no dolāra zīmi un tiesības dolāra zīmi, mēs ejam, lai saņemtu jāizvērtē, pirms tā. Tātad, tas ir sava veida kā cits veids, kā pievienot iekavas. CONNOR HARRIS: Tas būtībā funkcija sastāvs. Un tas nodrošina, ka jums nav have-- ja Jums ir funkcijas vai nu pusē vai infikss operatori abās pusēs, tie nav asociēt pāri un dot jums negaidīti rezultāti. STEPHEN KREWSON: Tātad mēs can-- izmantojot, ka mēs varam zvanīt. Pirmkārt, mēs spēlēt to bez bungām. Tas ir helikopters, MIDI helikopters. [Mūzikas atskaņošanai] Tur kvadrātveida vilnis. Balss tecēšana. Un jūs tiešām var iet savvaļas ar to. Es paņēmu diezgan vienkāršs, jo es zināju, ka man nevajadzētu nokost vairāk, nekā es varētu košļāt. Tikai glabāt to diezgan vienkārši parādīt galvenās idejas. Bet tad man bija, piemēram, mēs esam got pievienot dažas bungas šim. Tieši tāpēc, ka tas ir mazliet nesaprotama, un es neizmantoja Nosaukums cilindrs daļām, Es samērot them-- jo viņi daļa no šīs uzskaitījuma klasē, Es plānots tos ints. Viens no tiem ir, piemēram, basa bungas. Zero ir kā labi. Septiņi ir augsts cepure. Un noteikti šeit, kur funkcijas iegūt mazliet vairāk izlases, Tie ir, piemēram Conga bungas. Tātad, ja jūs domājat, ka about-- varbūt jautri veids, kā īstenot bungu mašīna ir izmantot ļoti sakārtotu modeļus savā basa bungas. Tā, piemēram, uz filtrēšanas pār saraksts ar visu, kas dod atpakaļ 1, ja tas ir pieņemts modulis 04. Tāpēc man 1, 5, 9, 13, 17-- tāpēc šis ir pirmais pārspēt katra pasākuma. Un tad tas ir tas pats lieta pārvietoti vairāk nekā divos posmos. Tātad tas ir Netradicionālā. Tātad tas būtu kaut kā augstu cepuri. Un tad atkal, noteikti šeit, tas ir mazliet izlases, jo mēs darām Conga bungas. Un man ir daži marakasi uz leju šeit, too. Tāpēc es varētu aicināt spēlēt bungu mašīna, bet tas iet uz visiem laikiem, un tas varētu sākt satveršanas up viss atmiņas manā sistēmā. Tāpēc es saukšu šo funkciju atskaņot mūziku, kas, kā mēs redzēsim, izmantot truncating paralēli sastāvu spēlēt mūsu maz Frere Jacques dziesmu kopā ar šo dīvaini bungu mašīna. Tātad, pieņemsim to apskatīt. Un, lūdzu, uzlabot manu izkārtojums visu drum daļām. Nav mana specialitāte, bet es bija daudz jautrības darot to. [Mūzikas atskaņošanai] Tātad, protams, tas ir viss mazliet ne tik jautri ja mēs nevaram pārvērst to uz rezultātu varbūt to var interpretēt ar cilvēka izpildītājs. Tāpēc es ne palaist to šeit. Esmu jau radīts failus. Jūs varat redzēt, ka tur ir dot LilyPond file-- un tas būs mans segue pār Connor-- un dot MIDI failu, un dot PDF fails, kas ir tas, ko LilyPond galu galā radīt. Bet tie ir tie skripti, un es ņemšu vienkārši palaist tos ar viņu palīdzību iespējām. Ja jums šie izveidota un darbojas ar Euterpea, jūs varat radīt MIDI failu. Un tad no MIDI failu ar šo MIDI 2LY programmu, Jūs varat radīt Lily Dīķis failu, un tad jūs var radīt PDF no rezultātu. Un mums vajadzētu to apskatīt šo. Tātad Connor, iespējams, parādīs jums, kā komentēt šo labāk, bet tas ir Frere Jacques kā ko rada mani Euterpea. Tas ir tikai C. es sapratu , kāda kapāt tas ir faktiski. Bet tas ir cauruļvads, lai kā jūs darīt ar to. Parunāsim vairāk par LilyPond. CONNOR HARRIS: OK Paskatīsimies. Vai jūs pieminēt Uzzināt You Haskell? STEPHEN KREWSON: Ak jā. Pārbaudiet Uzzināt Jūs Haskell. Tas ir resursiem. Tas ir, kā es sāku mācīšanās, un tas ir lieliski. Ne mēms mācīšanās. CONNOR HARRIS: Tātad tas ir tiešsaistē. Tātad puisis nosauca [nedzirdama] learnyouahaskell.com, bez atstarpēm. Gramatika ir slims. STEPHEN KREWSON: Tas ir Ilustrētās, too. CONNOR HARRIS: Tātad, kas ir LilyPond? Tas ir deklaratīvs programmēšana valoda mūzikas salikums. Tātad declarative-- jūs varat domā par lietām, piemēram, HTML, kur tu neesi saying-- HTML nav pateikt, cik interneta pārlūkiem būtu padara lapas soli pa solim. Tas ir vienkārši sakot ir teksta apraksts par to, ko jūs vēlaties, lapas izskatās. Un tad tas ir arī programma kas apkopo šo valodu, vai tas lasīt savu un tad faktiski dara salikums jums, un tas atklepo šiem brīnišķīgi meklē PDF rādītājus. Jūs varat arī saņemt PNG formātā vai neatkarīgi. Labs veids, kā domāt Tas ir pēc analoģijas ir tas, ka LaTeX ir veida, piemēram LillyPond, bet tikai parastā salikums. Tā vietā of-- tas nav WYSIWYG, ko jūs redzat Vai tas, kas jums, tāpat kā, teiksim Finale ir, vai Sibelius, vai Microsoft Word, kur jūs varat ierakstīt reālā laika un projektu lietas reālajā laikā un redzēt izmaiņas uzreiz. Tās pamatā ir teksts. Jums ir apkopot jūsu rādītāji, izmantojot atsevišķu programmu un izkļūt PDF vēlāk. Tas ir nedaudz mazāk ērts lietošanai, ja esat cenšos rakstīt tieši uz rezultātu, un jūs esat mēģinot komponēt uz datora. Bet ir daudz priekšrocības attiecībā uz to. Viens, tas izskatās daudz nicer, jo LillyPond faktiski var to laiku, lai darīt izkārtojums lēmumi pareizi, atšķirībā Sibeliusa vai Finale, kas ir padarīt apdraudēta algoritmus, lai ka tie var attēlot lietas reālajā laikā. Tātad, kāpēc ir LilyPond-- datorgrafika ir grūti. Ja jūs darāt kaut ko ar mūziku un jūs vēlaties rakstīt out punktus, Jūs nevēlaties, lai rakstītu ārā viss ar sevi sākot ar to, kā izdarīt štābu un kā to izdarīt bloknoti. Tas ir ļoti grūti. Tas darīts pirms tam. Jūs esat labi. Ja vēlaties izmantot Finale vai Sibelius, failu formāti šīm lietām ir ļoti sarežģīta, un jūs nevarat tiešām tos izmantot programmatiski. Jūs varat atvērt Sibelius ar Finale un doties uz File, Eksportēt kā PDF sevi, bet jūs nevarat patiešām zvanīt, ka no skriptu. LillyPond, jūs varat zvanīt No šiem skriptiem. Jūs varētu viegli atkārtot LillyPond ar lateksa. Man nebūs, ka daudz laika, lai dotos šajās tehnoloģijās tieši tagad, bet tie pastāv. Ja jūs vēlaties meklēt uz LillyPond grāmatā, Tā ir programma, kas nāk ar Jūsu LillyPond izplatīšana, un tas ir par atkārtojot LillyPond fragmenti lateksā Ja jūs vēlaties kaut ko darīt kā liels muzikoloģijā dokumentu ar piemēriem, piemēram. Un tas ir labs prasme dzīve, ja jūs darāt kaut ko ar mūziku, ne tikai CS50. Esmu izmantojis LillyPond visiem no maniem sastāva projektu jo man bija pamatā vecākais vidusskolā. Tātad, šeit ir daži vienkārši piemēri. Tas ir galvenokārt reprezentatīvs no grūtības pakāpes ka lielākā daļa cilvēku sejas tā viņi centās izmantot LilyPond vienkāršiem projektiem. Tas pirmais ir sākums uz korālis prelūdija ar Baha. Tas dibens viens ir izvilkums no viena no manām darbiem, un tas ir tikai tur, lai parādītu jums lietas, piemēram, [nedzirdama] liekot vairākas līnijas pats personāls, kā lirisks undersetting darbi. Lyric segumi ir lieta, kas ir ļoti viegli lietot LilyPond par kora mūziku. Un tā tad tur ir dažas vairāk sarežģītu piemēri šeit. Visi šie ir darīts LilyPond un viņi iespējams. Šis pirmais fragments no [Dzirdams] līdz [nedzirdama]. Un tas [nedzirdama] no gabals solo bass flauta ar [nedzirdama] kurš ir kurš longtime-- bija ilggadējais loceklis, Mūzikas nodaļa šeit, es domāju. Es neesmu pārliecināts, kur viņš ir aizgājis off. Bet viņš bija konsultants no Harvard Komponisti Asociācija uz ilgu laiku. Wonderful cilvēks. Un viņš raksta kādu mūziku, kas ir ļoti sarežģīts notācija ka LillyPond tomēr var rīkoties ļoti labi. Tik vienkārši, lai dotu jums sajūtu par to, kas Šī lieta ir iespējas are-- tik iekšējās no LillyPond ir ļoti sarežģīti. Un jūs varat to izmantot, lai ilgu laiku, tai skaitā dažiem diezgan sarežģīti lietas, bez tiešām kam jāzina daudz par tiem. Bet pamatideja ir tāda, ka uz zemākais līmenis, atomi LillyPonds ir piezīmes. Šīs piezīmes ir iekļauts jauns konteksts sauc par balsis. Tātad balss kontekstā būtībā atbilst uz vienas līnijas daudzbalsības. Un tad konteksts var būt ietverti hierarhiski augstāka līmeņa uzņēmumiem, kas pārstāvēt štābu par rezultātu vai lielākas grupas, piemēram, klavieres personāls vai koris štābu, un tad beidzot Visa rādītājs kontekstos. Un jūs faktiski var ietvert vairāki rādītāji grāmatā. Un katrs konteksts has a skaits pievienoto gravieri. Ja jūs meklēt, izmantojot saturs kontekstā un izdrukāt noteiktu simbolu vai noteiktu klasi simboliem nepieciešams. Tātad katram balss kontekstā tur ir [nedzirdama] piezīmes graviera kas ir būtībā funkcija vai objekts, kas raksta no visu piezīmi galvas labajā pusē, daļām lapā. Tad tur ir plaisa graviera, kas raksta ārā šķeltņu uz darbiniekiem. Tad tur ir metronoms zīme graviera ka raksta ārā metronoms zīmes rezultātu. Un visi šie fit diezgan arī vērā hierarhijā. Un tas ir ļoti, ļoti, ļoti pielāgojamas, kas jums ir nepieciešams ja jūs vēlaties, lai iegūtu lietas, piemēram, ka. Tātad visi konteksti have a Dažādu atribūtiem daudz ka jūs varat mainīt visu, no atstatuma dažādiem fonts atlase uz izmēriem lietām. Ja jūs vēlaties darīt pat sarežģītāka lietas, tur ir iestrādāta skriptu valoda. Viņi izmanto shēmu, kas ir dialekts LISP. Tie, iespējams, nav nozīmē kaut ko jums. Bet būtībā, shēma cits funkcionāls programmēšanas valoda, vairāk vai mazāk. STEPHEN KREWSON: The tie-in. CONNOR HARRIS: Jā. Tā ir laba tie-in, man domāt. Un tas ir izmantots kā mācību valodu, tiešām, uz leju masu Ave. MIT. Un tas ir ļoti ērts, lai LillyPond dažādu tehnisku iemeslu dēļ. Un tā, ja jūs vēlaties, lai vienkārši tweaks atkarīgi conditionals, par example-- tur ir zināma nosacījums partitūru, kas ir izpildīti, veikt izmaiņas uz Pirmās izkārtojums vai whatnot-- tad šie objekti ir tur. Viņi sarežģīta. Tātad, šeit ir diezgan vienkāršs koda paraugs. Tas ir piecas līnijas. Būtībā, es esmu nosakot divus štābiem. Tas ir 3/4. Pirmais darbinieki ir pievienots tempo zīme, bet kas patiesībā notiek doties uz visu rezultātu, tāpēc tempo zīmēm ir uz neizšķirts. Metronoms zīme graviera ir pievienots vārtus kontekstu. Ir dažādi taustiņi, jo [nedzirdama] graviera tiek pievienoti štābiem. Jūs faktiski var darīt, ir. Paraugs es uzrakstīju ir faktiski mažorā, bet tas ir tikai, lai pierādītu, jūs varat būt dažādi taustiņi dažādās štābu. Un pamata sintakse ir jums rakstīt ņemiet vērā vārdus, E, F, G, neatkarīgi. Ja jūs vēlaties darīt accidentals, Jūs piedēklis vai ES. Tas ir no holandiešu musicological konvencijām. Un darīt oktāvu lēcieniem, jums ir izmantot šie ērču zīmes, komatu vai apostrofu. Relatīvais tikai nozīmē kāds jums ir piezīmi, tas automātiski tiks plaec In oktāvas vistuvāk iepriekšējo. Un, ja jūs vēlaties, lai pārietu vairāk nekā fifth-- teikt piekto vai more-- tad jums ir izmantot [nedzirdama]. Bet citādi, jums nav precizēt oktāvu par katru piezīmi. Un relatīvais C, prime, un C, jūs vienkārši norādīt vidējā C un bāzes C, sevišķi pirmās piezīmes. Tad jums ir šīs štābu, kas organizē šīs divas balsis vai paraugus mūziku, un jums ir rezultāts. Un tas izskatās šādi. Ja jūs vēlaties, lai ņemtu laiku, lai kopēt, ka paraugu LillyPond kods uz iepriekšējā slaidu uz leju šeit, un jūs var rakstīt to LillyPond sevi. Es zinu, ka mēs esam ieguvuši kaut ko kas izskatās daudz, kā šis. Tātad tur ir cita tehnoloģija sauc Music XML uzturēta ko pilnīgi dažādi cilvēki. XML ir teksta datus structure-- I nedrīkst teikt dati structure-- teikt metafora karte veida. Un tas ir konstruētas, lai noturētu hierarhiskās dati ļoti labi. HTML, piemēram, ir veids XML. Un jūs varat pateikt, XML, jo tie bija visas leņķa iekavas un leņķis kronšteins slīpsvītra zīmes ka šovs datu lauki. Man nav kodu Piemērs no mūzikas XML. Jūs varat atrast to pats. Būtībā, iemesls, jūs varētu vēlēties lietot XML kā starpstāvokļa ir, pirmkārt, tas ir savstarpējas apmaiņas formāts jo būtībā every-- es neteikšu katrs, bet daudz dažādu rezultātu rakstnieki. Tātad, ja jūs rakstīt Mūzika XML, ne tikai var LillyPond lasīt to ar palīdzību šo auxilary programmu, ko sauc Music XML LY, bet arī Finale var izlasīt tas, Sibelius var izlasīt. Atkarībā no jūsu iekšējā objekta hierarhija darbi pārstāv mūziku, tas varētu būt vieglāk rakstīt uz mūzikas XML nekā LillyPond un tikai paļauties uz Music XML to LY darīt konversiju. Es nedomāju, ka [dzirdams] ir mūzika XML. STEPHEN KREWSON: Tā nav. Kāds strādā pie tā, lai gan. CONNOR HARRIS: OK. Euterpea nav Mūzikas XML izejas funkcija vēl. Ja vēlaties galīgo projekta ideju, varbūt sazināties ar puišiem ka Stephen zina, un viņi varētu izmantot jūsu palīdzību. STEPHEN KREWSON: Es mīlu to. CONNOR HARRIS: Arī, būtībā, ik programmēšanas valodas ka ir vērts tās sāls jau ir XML bibliotēka, lai jūs varētu iekšēji pārvērst visu Jūsu mūziku kādu objektu ka XML bibliotēka var uzrakstīt , ka būtu nepieciešams mazāk Izmaiņas savu iekšējo struktūru kāda mūzika objektus, kurus gribu rakstīt par to rakstīt tieši LillyPond būtu. Tad vienkārši izdrukāt to ārā ar XML ar XML bibliotēkas jūsu valodā, kas garantēs, ka tas ir sintaktiski pareiza un viss, un tad konvertēt to uz LillyPond. Tātad tehnoloģija jūs varētu vēlēties, lai ieskatīties, ja jūs darāt kaut ko kā šis. [Dzirdams], cits auxilarry tehnoloģija. Tas ir galvenokārt Tech Works vai Tech Studio LillyPond. Tātad tas piedāvā palīdzību ar sintakse, ar veidnes par dažādiem kopējā kombinācijas instrumentu. Tas ļauj split ekrāna skatīšanās tik Jums var būt jūsu kodu vienā logā un PDF citā logā un noklikšķiniet uz vietām PDF lai pārietu uz attiecīgo plankumi jūsu avota kodu. Tas ir vairāk noderīgs, ja jūs patiešām rakstīšana LillyPond failus sevi nekā tad, ja jūs esat radot tos programmiski. Bet atkal, tas ir kaut kas noderīgi, lai būtu. Liels. Vēl resources-- Es ņemšu tikai iet caur šo ļoti ātri. LillyPond manuals-- LillyPond ir lielisks dokumentāciju savā tīmekļa vietnē. Viņi ir apmācība. Viņi ir sintakses atsauces. Tie ir simtiem fragmentus dažādām mazām lietām yo var būt nepieciešams darīt, lai pierādītu dažādas iespējas. Ja vēlaties izmantot skriptu valoda vai padarīt plašāku pielāgojumi, tad tur ir iekšējās atsauces šajā URL. Ja vēlaties izmantot Music XML, tur ir ka URL, musicxml.com/tutorial. Un tad, ja jums ir nepieciešams, lai uzzinātu shēmu jo jūs tiešām vēlaties izmantot skriptu atvieglojumus LillyPond, tad tur ir [nedzirdama] aicināja Strukturētais Interpretācija datorprogrammu, kas ir ne tikai otrā lielākais CS mācību grāmata jebkad written-- atrast mani pēc tam, ja jūs vēlaties zināt tas, ko es domāju, ka vislielāko vienu is-- bet tas ir arī ļoti labs ievads valodas pareizas. Jums nav nepieciešams vairāk nekā pirmais pāris posmi. Un tas arī viss. Kādi jautājumi? STUDENT: Kur es varu lejupielādēt Jūsu radīts Frere Jacques lai es varētu nodot to uz manu iPod? STEPHEN KREWSON: Nu, jūs varat rakstīt out zināmā wav failu Euterpea. Un jums ir kodu. Tas ir par GitHub. Padariet savu variācijas Frere Jacques ar CS50 stropu prātā. Tas būtu lieliski. CONNOR HARRIS: Kāds cits? STEPHEN KREWSON: Mums ir nepieciešams labāks bass bungas, too. Tas ir patiešām slikti. STUDENT: Euterpea ir ne tikai sastāvu pusē, bet signal-- STEPHEN KREWSON: Jā. Patiesībā darbs I darīja Euterpea kad es ņēma this-- tur ir absolvents kursu Yale ka izmanto it-- bija skaņas sintēzi. Tātad tur ir patiešām jauks veids, kā, izmantojot bultas un daži mēs redzējām no notācija komponēšanu kopā signālu funkcijas. Jo īpaši, bass visvairāk no tiem ir tikai vienkāršs sine wave. Bet, ja jūs sākat rakstīt tiem dīvaini programmatisko veidos, jūs varat saņemt traks skaņu efekti, piemēram, dīvaini kaskādēm. Jūs varat izveidot ļoti graudaini skaņas ar daudz modulācijas. I did projektu par granulu sintēze, kas ir kaut kur starp FM un paraugu ņemšanu. Tu ņem ļoti mazs, maz paraugi, un pēc tam kombinēt tos ar kaut kāda veida modulators un veidot bagātāku skaņu. Mēs arī fizisko modelēšana, tāpēc cenšas domāt par fiziku un psychoacoustics par kaut ko līdzīgu trompete, un domāt par to, kā skaņa ir veselīgs off zvans no trompete un akustikai telpu un modelēšana ka ar pamata oscilatoriem. CONNOR HARRIS: Paldies tik daudz. Paldies, ka atnācāt. Un es esmu vienmēr gatavs ņemt jautājumus ar email-- connorharris@college.harvard.edu. STEPHEN KREWSON: Jā. stephen.krewson@yale.edu. Cool.