CONNOR HARRIS: Hi. Rwy'n Connor Harris. Rwy'n CA CS50 yn Harvard. STEPHEN KREWSON: Rwy'n Stephen Krewson. Rwy'n TF ar gyfer CS50 yn Iâl. CONNOR HARRIS: Ac rydym yn mynd i siarad am rai technolegau sydd gallech chi eisiau ei ddefnyddio os oes gennych ddiddordeb mewn gwneud prosiect terfynol neu 'n sylweddol unrhyw beth sydd â cherddoriaeth. Rydym yn mynd i fod yn canolbwyntio ar sail y cyntaf iaith raglennu a elwir yn Haskell. Mae'n swyddogaethol iaith, felly mae'r patrwm yn wahanol iawn i C neu PHP neu ieithoedd hanfodol eraill eich bod wedi ei ddefnyddio yn barod, ac yn enwedig ar llyfrgell ysgrifennwyd yn Haskell Gelwir Euterpea, sy'n gallu helpu pobl gydag ysgrifennu cerddoriaeth swyddogaethol, yn y bôn. A bydd Stephen yn cerdded i chi drwy enghraifft wych o hynny. Ar ôl hyn, 'n annhymerus' yn eich cyflwyno i rywbeth o'r enw LillyPond, a oedd yn yn dechnoleg ar gyfer cerddoriaeth cysodi. Mae'n fath o fel LaTeX ar gyfer cerddoriaeth os unrhyw un ohonoch wedi defnyddio LaTeX ar gyfer dosbarthiadau mathemateg neu dosbarthiadau P set arall neu beth sydd gennych. Ac felly byddaf yn rhoi i chi, unwaith eto, rhai enghreifftiau syml o hynny ac yn pwyntio chi yn y gyffredinol cyfeiriad rhai adnoddau yn well. STEPHEN KREWSON: Yn Hefyd, rydym yn meddwl ei byddai'n cŵl i sefydlu ychydig o awgrymiadau tuag biblinell rhwng A gynhyrchir gan Euterpea ffeiliau MIDI yn LillyPond, felly rydym yn darparu rhywfaint o gyfarwyddyd ar sgriptiau i wneud hynny sy'n cael eu darparu gyda LillyPond dim ond i'w chadw ffynhonnell agored a chael biblinell yn mynd. CONNOR HARRIS: Unwaith eto, dylem bwysleisio, y ddau technolegau, yr ydych Nid oes rhaid eu defnyddio gyda'i gilydd. Nid ydynt yn cynllunio i weithio gyda'i gilydd, er eu bod yn gwneud iawn 'n glws. STEPHEN KREWSON: Iawn. Ac yn hollol rhad ac am ddim. CONNOR HARRIS: Felly cydnabyddiaethau, newydd ddarllen hynny. Nododd y bo'n briodol: STEPHEN KREWSON. Diolch i Folks hynny. Mae hyn yn 'n annhymerus' lechu ar ddim ond am eiliad. Mae'r broses gosod yn ychydig yn anodd. Rydym wedi yn fy ddarllen ar y GitHub y gallwch fwrw golwg ar. Dim ond e-bost ataf os oes gennych unrhyw gwestiynau. Ond byddwn yn rhedeg hwn o dan y rhagdybiaeth fod hyn yn gweithio i bawb. CONNOR HARRIS: Ac os nad ydych yn gallu cael LillyPond i weithio, dim llawer mawr. Does dim casgliad byw sy'n yn cymryd rhan, o leiaf ar fy mhen. STEPHEN KREWSON: Haskell a Dylai LillyPond ddau wedi osodwyr. Euterpea ei lawrlwytho fel pecyn, yn y blaen ac yn y blaen. Felly, rydym yn sôn am gerddoriaeth cyfrifiadurol. Ac mae hyn yn unig yw golygfa 50,000 troedfedd iawn. Mae ychydig o agweddau gwahanol ohono. Ac mae hyn yn arw ac yn mynd i guddio rhywfaint o fanylion. Ond gallem feddwl am rywbeth fel cyfansoddiad algorithmig, ddefnyddio algorithmau, gan ddefnyddio cod, i gynhyrchu rhyw fath o- efallai hunan-debyg dilyniant o nodau, neu efallai nodiadau o dan rai gyfyngiad. Ac yna gallai'r rheiny fod yn perfformio neu eu dehongli gydag offerynnau analog neu unrhyw beth fel 'na. Ond mae'r cyfansoddiad yn wneud algorithmically. Ond wrth gwrs, efallai arwynebedd cerddoriaeth cyfrifiadur neu gerddoriaeth ddigidol rydym yn fwy cyfarwydd â hi yw ddigidol synthesis sain neu samplu ddigidol a recordio digidol. Mae llawer o offerynnau digidol wneud drwy samplu digidol. Yn wir, byddwn yn defnyddio un o'r rhai mewn ar ffurf llyfrgell ffont gadarn yn ddiweddarach. Ond mae hefyd yn rhywbeth a elwir synthesis digidol a ddaeth allan o'r 70au ac i mewn i'r '80au hwyr gyda Yamaha a John Chowning yn Stanford gwneud synthesis FM neu Synthesis Modiwleiddio Amlder, lle'r oedd gennych gludydd signal a signal modulating yn y sbectrwm sain. Ond yr hyn rydym yn canolbwyntio ar heddiw yn rhywbeth o'r enw MIDI, ac wrth gwrs, cyfansoddiad algorithmig. Nid ydym yn mynd i wneud offerynnau, ond rydym yn lle hynny yn mynd i wneud rhai gerddoriaeth, ac yna bydd yn cael ei ddehongli gan rai offerynnau sy'n yn conformant i'r safon gyffredinol MIDI. Felly beth MIDI? Dydw i ddim yn mynd i mynd yn rhy ddwfn i mewn iddo, ond protocol trosglwyddo data Midi yw. Mae'n rhyw fath o ganllaw ar draws cwmnïau gwahanol a diwydiannau ar gyfer trefnu seiniau neu glytiau. Felly, byddwn yn gweld bod mae 'na safon MIDI ar gyfer yr holl offerynnau taro gwahanol synau ac argymhellion MIDI ar gyfer yr holl wahanol fathau o synth neu gwahanol fathau o holl offeryn grwpiau mewn cerddorfa, ddweud. Mae'n debyg eich bod yn gyfarwydd â 0 trwy 127 negeseuon MIDI. Mae signal MIDI yn nodweddiadol un bit sy'n dangos boed yn ddata neu paced statws, ac yna mae saith darnau o signal. A gall y rhain rheoli popeth o gyfrol at y camau neu bwysau ar allwedd arbennig os ydych yn perfformio gyda MIDI rheolwr yn ogystal â, wrth gwrs, nodiadau. Ac wrth gwrs, mae gan MIDI bod yn hynod o ddefnyddiol, oherwydd ei fod yn ffordd o wifren gyda'i gilydd neu gadwyn llygad y dydd criw o ddyfeisiau caledwedd MIDI. Mae gen i saith neu wyth yn ôl ar fy nhŷ. Mae'n mynd yn gymhleth mewn gwirionedd, ond mae'n wirioneddol bwerus. Ac mae'n wir yn hen. Mae'n o'r 80au cynnar ', a 'i' 'n sylweddol' n glws a bach. CONNOR HARRIS: Yeah. Mae pob un o'r Nintendo clasurol Byddai gemau fideo yn ôl pob tebyg rhaid i ffeiliau MIDI ar gyfer cerddoriaeth, er enghraifft. STEPHEN KREWSON: Dyma enghraifft o MIDI cyffredinol, yn dangos MIDI fel rhyw fath protocol cyffredinol. Ac yr wyf yn meddwl y gallwn ni feddwl am y gwahaniaeth rhwng y fanyleb y dylid cael rhywbeth fel offeryn hyn yn swnio'n a'r gwir gwireddu offerynnau hynny seiniau mewn ffont sain neu MIDI penodol syntheseisydd fel y gwahaniaeth rhwng efallai typeface-- sy'n dweud, yn gyffredinol, mae hyn yn y dyluniad y ffordd arbennig i gynrychioli characters-- a ffont arbennig sydd â maint ac ansawdd penodol, ac mae gwireddu the-- CONNOR HARRIS: Efallai Byddai gwell cymhariaeth fod y safon Unicode says-- mae'n rhoi rhif i bob cymeriad, ac yn wir pob iaith yn y byd, neu set helaeth o sgriptiau o iaith yn y byd, ac yna dyna'r rendro i mewn i rywbeth graffigol gan amryw o becynnau ffont. Ac yn amlwg, gallwch chi feddwl am MIDI fel Unicode o sain. Ac mae'n dim ond rhestr o- nant mawr o ddigwyddiadau ac offerynnau a whatnot, ac mae'n rhaid i chi gael ar wahân rhaglen, fel ffurfdeip, i rendro hynny i rhywbeth sy'n glywadwy. STEPHEN KREWSON: Felly pam Haskell? Haskell yn rhaglennu swyddogaethol iaith, ddatblygedig iawn, wahanol iawn i C, wahanol iawn i PHP. Ac rydym yn mynd i weld bod 'an rhwyddineb cyfansoddiad swyddogaeth yn Haskell a fydd yn ein galluogi i awel drwy cyfansoddi neu deipio i fyny, trawsgrifio, rhywbeth fel Frere Jacques, y gân syml y Mae gan lawer o rannau ynddi sy'n yn hunan-tebyg neu ailadrodd. Felly bydd hyn yn rhai o y cymhelliant dros pam rydym yn defnyddio Haskell, lle swyddogaethau yn ddinasyddion dosbarth cyntaf. Ac yr wyf yn awyddus i ymestyn mae hyn ychydig bach. Mae'n ychydig bach yn hawdd i'w nodiannu Frere Jacques yn Haskell. Ond beth os ydym yn awyddus i ychwanegu ran drwm iddo? Beth os ydym yn awyddus i geisio gwneud rhywbeth fel Roland 808 neu 909 drwm peiriant lle mae gennych tua 16 cam wahanol? Fel arfer mae'r rhain yn meddwl o nodiadau fel y 16eg. A gallwch reoli'r byd-eang tempo, a gallwch ddewis criw o wahanol rannau offerynnau taro o drwm bas, clap, gwahanol maglau, hetiau uchel agored a chaeedig ar y math yma o sianeli, ac yna gallwch EQ neu addasu eu cyfaint. A byddwn yn gweld ffordd braf yn Haskell o gynrychioli cam hwn dilyniannwr gyda'r holl amryw o bethau cŵl yn Haskell gallwn ei wneud gyda cynhyrchu rhestrau a hidlo dros rhestrau, mapio dros restrau, mapio swyddogaethau dros rhestrau. Ac ymddiheuriad gyflym. Mae hwn yn frysiog iawn a braslun rhy gyflym o rai o'r agweddau o Haskell a Euterpea, sydd yn benodol i barth ysgrifenedig iaith gwreiddio yn Haskell ar gyfer mathau cerddorol. Felly, os gwelwch yn dda peidiwch edrych ar y cod lein. Tân i fyny GHCI, sef y Glasgow Haskell Crynhoydd Dehonglydd. A byddaf yn gwneud rhywfaint o hyn mewn ychydig fel y gallwch weld sut y mae'n ei wneud. Ac mae hyn yn caniatáu i chi lwytho gyda the-- y gystrawen yn colon ac yna y gorchymyn. Gallwch lwytho mewn ffeiliau. Gallwch ddefnyddio bori ar y rhai ffeiliau i weld yr holl swyddogaethau y yn bodoli mewn modiwl penodol. Ac yna gan y byddwn yn gweld, mathau a math dosbarthiadau mor bwysig yn Haskell, er mwyn i chi bob amser yn check-- arbennig os ydych yn gweithio mewn DSCL newydd fel hyn, yr hyn yn fath gerddoriaeth? Yr wyf yn gwybod am y modd rhifol mathau gweithio yn Haskell, ond nid wyf yn gwybod llawer am gerddoriaeth. Ond gallwch edrych ar y ffordd y maent yn ddiffinio gan ddefnyddio t neu math hwn gorchymyn ac yna galw o ran manylyn swyddogaeth neu wrthrych data. CONNOR HARRIS: Yeah. Os ydych yn meddwl C a chlang Roedd hardass am fathau, nid oes gennych unrhyw syniad am Haskell. Y peth da am Haskell yw bod os gallwch gael eich cod i lunio ac os gwiriadau math Haskell, mae'n debyg iawn, oherwydd bod y system math mor llym. STEPHEN KREWSON: Yeah. Felly, Fi jyst eisiau mynd through-- ar ôl tro, nid yw hyn yn ei wneud justice-- rhai o'r nodweddion Haskell bod, o leiaf at ei creators-- a iddi gael ei chreu ar ddiwedd y 1980au gan griw o bobl, pwyllgor o tua 20 people-- meddwl oedd yn bwysig. A'r peth cyntaf y byddant yn rhestru mewn papur sy'n Disgrifiodd y genesis o Haskell dros yr 20 mlynedd cyntaf neu felly oedd ei fod yn ddiog. Felly beth mae hyn yn ei olygu? Wel, mae'n golygu pan fyddwn yn cael rhyw fath o fynegiant, mae angen i ni werthuso. Ac mae Haskell yn gwneud hyn mewn galwad gan angen ffordd neu'r ffordd nad yw'n llym. Hynny yw, os oes gennym griw o cydrannau o'n mynegiant, rydym yn ceisio oedi'r gwerthusiad o subcomponents rhai nes bod y minute-- olaf absoliwt hynny yw nes i ni mewn gwirionedd yn eu hangen. Felly yw-- hwn sydd yn 'n sylweddol oera, yn enwedig os ydym yn meddwl am y tyniad o dilyniannwr gam cerddorol. Rydych droi ymlaen, ac i chi ddechrau rhedeg sequence-- gam os ydych chi erioed wedi gweithio gydag drwm machine-- a 'i jyst yn mynd am byth. Felly byddai'n neis iawn os byddwn yn Gallai efelychu hynny mewn Haskell. A gallwn wneud hynny gyda ddiddiwedd gwerthoedd, yn rhestri anfeidraidd penodol. Mae'n hawdd iawn i deipio i Rhestr anfeidrol yn Haskell. Gallech jyst arfer 'r gystrawen i lawr yma, lle gwelwch 1 trwy 3, cael gwared ar y 3 1 dot dot, a hynny yn rhestr ddiddiwedd yr holl rifau naturiol yn ymestyn ar cyn belled ag y gallwch ddychmygu. Rwyf am gyflwyno cysyniad o plygiadau ar unwaith. Ac eto, mae'r pwrpas o beidio seminar hwn yw i ddysgu am plygion yn Haskell neu swyddogaethau uwch. Ond yr wyf am ei gyflwyno i rhoi ymdeimlad cywir o ba mor rhyfedd Haskell a pha mor bwerus y mae. Ac yn benodol, rydyn ni'n mynd i be-- pan fyddwn yn gwneud ein rhannau drwm gwahanol, rydym yn mynd i fod yn trin rhestrau o rhifau, eu plygu ar ei gilydd. Ac i wneud hynny, yr ydym chi helpu yn defnyddio mapiau a plygiadau. Mae 'na cysylltiadol cywir plygu, sydd yn yr un yma yn iawn Yma-- 1 llai'r swm, 2 llai'r swm, 3 llai 0. Ac mae'r cystrawen ar gyfer blygu, byddwch yn rhoi gwaith yn fwy gwerth sylfaenol ac yna operation-- yn yr achos hwn, adio neu dynnu. Rydw i wedi dangos y ddau achos. Ac yna mae 'na cronadur sy'n yn cronni dros y rhestr gyfan, gwneud cais bod gweithredwr plws neu minws, ac yna casglu iddo. Felly bydd hyn yn the-- petai'n cael ei alw gyda plygu r a mwy o 0, gan ddechrau gyda 0, byddem wedyn yn crynhoi pob y rhifau yn y rhestr honno. A dyna rhestr 1-3. CONNOR HARRIS: Felly, i roi un arall ffordd, plygu r cymryd tair dadleuon. Mae swyddogaeth sy'n ei hun yn cymryd dwy ddadl, Yna mae 'na gwerth cychwynnol, ac mae 'na restr o werthoedd. A beth ydych yn ei wneud yw eich bod yn cymryd gwerth cychwynnol, gwerth cyntaf, eu rhoi i mewn i'r swyddogaeth. Beth ydych chi'n ei gael allan, cymryd hynny, bwyd anifeiliaid sy'n i mewn i swyddogaeth y ail gwerth, yr hyn a gewch allan, cymryd hynny, yn bwydo hynny i mewn i'r swyddogaeth y trydydd werth. Ac yna os byddwch yn mynd i lawr y rhestr gyfan y modd hwn, rydych yn mynd i gael yn y pen draw rhywfaint o werth unigol sy'n o'r un math o beth i chi ddechrau allan gyda ac o'r un math fel y mae pethau yn y rhestr, ac yna dyna'r canlyniad dychwelyd R. plyg STEPHEN KREWSON: Felly, yn benodol, mae'r rhain yn swyddogaethau o radd uwch, oherwydd eu bod yn cymryd un arall swyddogaeth fel un o'r dadleuon. CONNOR HARRIS: Yeah. Os ydych chi wedi defnyddio rhai eraill languages-- wyf yn gwybod R, [Anghlywadwy] iaith wedi hyn, a elwir Lleihau. Efallai eich bod wedi swyddogaethau tebyg mewn ieithoedd eraill, dim ond enw pethau gwahanol. STEPHEN KREWSON: A beth sy'n neis am blygu R yn yr achos hwn yw bod gwaith yn fwy Gall R weithio gyda rhestrau ddiddiwedd. Felly, yn y gwaelod hwn, P5 hon yn cynhyrchu y nodiadau a yn cael eu troi ymlaen yn y dilyniannwr gam ar gyfer rhyw ran drwm, y bumed ran drwm, ac efallai ei fod yn conga drwm neu rywbeth. Ac mae hyn yn fwriadol ffordd aflem o ysgrifennu hwn, ond mae'n hwyl, oherwydd mae'n dangos llawer o bethau am Haskell a Euterpea. Felly blygu R o hyn colon colon-- yw dim ond gweithredydd sy'n gwthio pethau gyda'i gilydd ar list-- elwir ar gwag rhestr, sydd ychydig y cromfachau gwag. A dwi'n galw bod ar y rhestr anfeidrol. Mae hyn mewn gwirionedd dwy restr at ei gilydd i lawr fan hyn. Mae'r rhestr 1 atalnod 6 dot dot yn 1, 6, 11, 16. Felly Haskell-- mewn dim ond ychydig o gymeriadau, chi Gall gynhyrchu'r cyfan dilyniant o rifau sydd yn bum rhifau ar wahân ymestyn ymlaen i anfeidredd. Ac yr wyf yn prepend i hynny fach hon list-- fyrrach 3, 8, 21-- dim ond i ddangos i chi sut y gallwch concatenate rhestrau. Ac yna yr wyf wedi plygu ar ei hun. Ac mae hyn yn dod i ben i fyny dim ond bod rhyw fath o llawdriniaeth hunaniaeth, ond mae'n ddiddiwedd. A phlygu'r Gall R wneud hynny, gan ei fod yn lazily yn gwerthuso, fel yn yr uchod. Os oes gennym 1 a 2 a 3, y gallwn jyst braced oddi ar weddill cyfan ohono. Ni fydd yn gweithio i minws neu mwy, ond mae'n Bydd yn gweithio i colon hwn gweithrediad hunaniaeth ar y rhestr. Felly sut rydym yn defnyddio yn ymarferol os ydym gael rhestr anfeidrol hir o bethau? Wel, Haskell yn darparu llawer o functions-- ac yn edrych yn fwy i mewn i hyn eich adeg-- hunain megis cymryd sy'n dweud, OK, rydym yn cynhyrchu y rhestr anfeidrol, ond rydym yn jyst yn mynd i gymryd peth nifer ohono Ac yn achos-- hwn byddwn yn gweld hyn yn ddiweddarach yn ein code-- peiriant drwm GM yn unig yw rhyw fath o fyd-eang amrywiol ar gyfer y nifer o gamau yn y dilyniannwr. Ar y peiriannau rholio-yn I Dangosodd chi, mae hynny'n nodweddiadol 16, ond yr wyf wedi rhoi ar waith gyda 32. Nid oes llawer o bwys. Haskell hefyd yn bur, felly mae wedi gryf teipio statig sy'n Connor cyfeiriwyd ato. Felly swyddogaethau mathemategol yn y sense-- eu bod yn fwy mathemategol eu bod yn gwarantu i beidio cael mynediad na newid unrhyw fath o amrywiol neu berfformio mewnbwn neu allbwn. Felly, os oes gennych swyddogaeth, 'i' benderfynedig. Bydd bob amser yn dychwelyd yr un fath gwerth yn y cyflwr y rhaglen neu aros yr un fath. Mae yna, wrth gwrs, eithriadau monadic at hyn, ond mae hynny'n tu hwnt i'n gwmpas. CONNOR HARRIS: Yeah. Beth mae hyn yn ei olygu, fodd bynnag, yw bod rai pwysig [Anghlywadwy] canlyniadau hyn. Un yw ei fod yn hawdd iawn parallelize rhaglenni Haskell. Oherwydd os oes gennych, yn dweud, yn swyddogaeth i'r Mae angen gweithredu ar filiwn o werthoedd, os eich bod yn gwybod bod y swyddogaeth fydd bob amser rhoi un gwerth os rydych yn bwydo ar value-- benodol os ydych yn [Anghlywadwy] f o 1, f o 2, yna f o 3 neu whatnot-- f o 1 Nid yw mynd i ysgrifennu allan i ffeil neu wneud rhywbeth a fydd yn newid y gwerth F2. Alli jyst gwahanu swyddogaeth hon i miliwn beiriannau gwahanol neu i filiwn gwahanol edafedd neu beth bynnag, cael yr holl ymatebion yn ôl, cael yr holl werthoedd dychwelyd yn ôl, ac yna dyna ni. Felly hawdd iawn i'w parallelize pethau. Yr anfantais yw bod mewnbwn ac allbwn yn enwedig ffitio i mewn i'r system math mewn ffyrdd cymhleth iawn. Ni fyddwn yn mynd i mewn i hynny ar hyn o bryd, ond yr wyf yn eich annog i edrych ar rai adnoddau ar-lein os ydych am ddysgu am hynny. STEPHEN KREWSON: Felly teipiwch classes-- ac mae hyn dosbarthiadau was-- o fathau eu dyfeisio i ddatrys problem o gorlwytho gweithredwr. Felly, rydym yn awyddus i gael cydraddoldeb rhwng gwahanol fathau o bethau. Wrth gwrs, gallem feddwl o- cydraddoldeb rhwng mathau rhifol yn hawdd iawn i feddwl am, ond beth am gydraddoldeb rhwng y rhestrau? Beth am gydraddoldeb rhwng strwythurau data goes goeden? Ac mae hyn i gyd yn bosibl mewn Haskell oherwydd y dosbarthiadau fath. Felly, os ydych yn diffinio type-- data penodol ac yma, mae'r rhain yn lleiniau cerddorol. Rydym yn cael yn olaf ar gerddoriaeth cyfrifiadur. Felly, rydym wedi C, C miniog, ac yn y blaen ac yn y blaen. Maent yn perthyn i griw o gwahanol ddosbarthiadau math. EQ-- maent yn perthyn i'r dosbarth math EQ. Mae hynny'n golygu eu bod yn cefnogi gweithrediadau cydraddoldeb. Felly, gallwch werthuso a yw un dilyniant o primitives cerddorol yr un fath ag un gwahanol. Maent yn perthyn i'r dosbarth trefnolyn. Mae hynny'n golygu mae 'na archebu i'r rhain. D yn dod ar ôl C. C miniog dod ar ôl C hefyd. Maent yn perthyn i'r dosbarth dangos, sy'n golygu eu bod yn gallu yn cael ei argraffu at gonsol neu derfynell. Maent yn perthyn i'r wedi'u rhifo y dosbarth, a oedd yn yn golygu bod hyd yn oed er mae'r rhain yn gymeriadau, ganddynt rhifol sylfaenol cynrychiolaeth gan ddechrau ar 0 ac yn mynd i ffwrdd drwy fodd bynnag llawer o bethau yma, 20 neu hynny, neu 30 neu 40, efallai. CONNOR HARRIS: A phan mae gennym y math data hynny derives-- â'r gair allweddol Dosbarth fath penodol "deriving--", mae'n golygu y bydd y casglwr yn ceisio i adeiladu rhywbeth yn awtomatig. Felly efallai y byddwch eisiau diffinio ansawdd yn wahanol. Youll 'angen i ddiffinio C miniog yn gyfartal i fflat D, er enghraifft. Gyda hyn adeiladu yma, nid wyf yn credu C miniog a bydd y fflat D yn gyfartal, oherwydd y casglwr bydd yn awtomatig dweud pob gwerth posibl gwahanol yn wahanol i bob eraill. Felly, mae'n bosibl i droi'r fantol y gweithrediadau rhagosodedig o'r mathau hyn o ddosbarthiadau. Unwaith eto, yn edrych ar y cyfeirnod os ydych am ddysgu am hynny. STEPHEN KREWSON: A yma, mewn gwirionedd, bydd hyn yn ddefnyddiol i pan fyddwn yn cod yn nes ymlaen. Rydym yn gweld rhai o'r gweithredwyr infix ar gyfer cyfansoddiad dilyniannol, cyfansoddiad cyfochrog, ac yn y blaen allan, pwyntiau cadarnhaol hyn ac arwyddion cyfartal hamgylchynu gan colon. Mae hynny'n golygu y gallwn chwarae gwahanol hyn primitives cerddorol un ar ôl y llall. Dyna cyfansoddiad dilyniannol. Neu gallwn eu chwarae mewn yn gyfochrog ar yr un pryd. Felly yr wyf yn gallu cael gwerth cerddorol, ac yna mae hyn yn gyfwerth a colon, infix gweithredwr cyfansoddiad cyfochrog, ac yn eu chwarae fel rhyw fath o gord. Ac rydym yn mynd i ddefnyddio pan fydd hyn rydym yn cyfuno ein ddrwm rhan gyda'n ychydig iawn o gân Frere Jacques i chwarae y ddau dilyniannau o gwerthoedd cerddorol ar yr un pryd. Currying Cyri yw-- ddiwethaf enwi o Haskell Curry, pwy y ddelwedd Haskell ei enwi ar ôl. Ac mae hyn yn ein galluogi i ceinder braf pan rydym yn ysgrifennu hyn i gyd yn wahanol swyddogaethau neu hidlwyr ein bod mynd i fod mapio dros ein rhestrau. Swyddogaeth o ddau arguments-- f x ac y-- Gellir cael eu cynrychioli fel f x cymhwyso at y. Felly mae'n un o swyddogaethau un ddadl bod dychwelyd Swyddogaeth arall o un ddadl. Felly, mae hyn yn golygu y gallwn fapio ffwythiant f x dros restr o y o. CONNOR HARRIS: Eisiau i rhoi enghraifft o hyn? STEPHEN KREWSON: Yeah. Mae gennyf enghraifft yma o rhai o'r pethau y byddwn yn ysgrifennu. Felly ailadrodd 2-- yn dda, ailadrodd yn cymryd un gwerth, a dyna faint o weithiau i ailadrodd rhywbeth, ac yna bydd yn cymryd value-- Fel arfer, rhestr neu rywbeth. Felly dyma, rydym yn mapio ailadrodd 2 dros rhestr arall. Felly, os ydym yn ailadrodd mapio 2, os ydym yn ailadrodd 2 yn gymwys i'r elfen gyntaf list-- hwn a mae'r rhain yn rhestrau o phrases-- cerddorol Bydd yn cynhyrchu dau o "chi sleeping--" felly a ydych yn cysgu, a ydych yn cysgu. Felly nawr mae gennym ddau. Ond mae dyblygu yn cymryd dau dadleuon, ond oherwydd ein bod yn currying ac yna mapio, gallwn gynrychioli dyblygu 2 fel un sydd wedi'i ddychwelwyd fel swyddogaeth o un argument-- dim ond ailadrodd ddwywaith. Ac yna rydym yn gwneud cais bod i bob elfen o rhestr hon o ymadroddion. Ac concat yn Haskell gweithredu am ddymchwel restr. Oherwydd bod dyblygu 2 ewyllys gynhyrchu rhestr o restrau. Ac mae hyn yn y ffurflen canolradd yma. Ac felly yna gallwn concat neu gwastatáu hynny allan ddwywaith. CONNOR HARRIS: A symlach enghraifft o currying, os byddech yn like-- ddychmygu f yn unig yw swyddogaeth lluosi sy'n cymryd dau dadleuon a ffurflenni eu cynnyrch. Felly, os oes gennych f 4 5, 'i' 20. Ond gallwch feddwl am hyn fel also-- gennych ffwythiant f 4 sy'n cymryd dadl a ffurflenni bedair gwaith hwn argument-- unig Cais rhannol sy'n un ddadl yn unig 4. Ac os ydych yn bwydo f o 4 5, a fydd yn rhoi i chi 20. A dyna yn symlach enghraifft o currying. Fel arfer mae'n un o'r rhai gwerslyfr. STEPHEN KREWSON: Lambda ymadroddion neu swyddogaethau dienw yn nod amgen Haskell arall. Felly, os bydd angen i chwip i fyny ychydig iawn o ailadrodd bywyd swyddogaeth, ond dweud nad yw'n mewn y llyfrgell safonol, gallwn ddefnyddio cystrawen yn debyg i'r canlynol. A byddwn yn awel dros hyn. Un peth y byddwch yn gweld llawer o yn y peiriant drwm yn ein bod yn gwneud galwadau i rywbeth o'r enw hidlo, sydd, fel o'r blaen, yn mapio swyddogaeth dros rhestr, ond mae'n mapio swyddogaeth Boole. Felly gennym yma yn enghraifft o yn ddienw swyddogaeth Boole diffiniedig sy'n dim ond yn cymryd gwerthoedd cwpl. Nid yw hyn yn fanwl gywir swyddogaeth dienw. Ond mae'n diffinio gyda bod cystrawen ar gyfer crynoder, ac mae hyn yn cymryd dim ond x modiwl n-- CONNOR HARRIS: Yeah. Felly f yn ffwythiant dwy ddadl n ac p sy'n dychwelyd swyddogaeth sy'n ei hun un o swyddogaethau un ddadl, sef x. STEPHEN KREWSON: I gweithredwyr infix grybwyllwyd. Beth yw weithredwyr infix? Wel, gweithredwyr infix yw'r ffordd arferol ydym yn eu cynrychioli gweithrediadau, yn dweud, yn mathematics-- 2 a 2 lle'r gweithredwr plws ac yna dwy ddadl 2 a 2. CONNOR HARRIS: Mae'n cael ei alw cefn nodiant sglein, sef tymor yr wyf yn amau ​​y byddai unrhyw un ohonoch yn gwybod. STEPHEN KREWSON: Iawn. Reverse nodiant polish neu rhagddodiad. Ond penderfynodd Haskell i defnyddio gweithredwyr infix. Felly dyma rai o'r y rhai sy'n arfer yn cael eu diffinio ar gyfer y Euterpea DSCL yn Haskell. Felly roedd hyn yn cyfansoddiad dilyniannol. Roedd hwn cyfansoddiad cyfochrog, ac mae hyn Roedd truncating cyfansoddiad cyfochrog. A bydd angen i ni fod gyda'n peiriant drwm, oherwydd byddwn yn defnyddio'r ddiwethaf gweithredydd yn y tuple bach yno i chwarae'r peiriant drwm ar hyd gyda'n cân Frere Jacques. Ac mae ein peiriant drwm yn mynd i fod yn ddiddiwedd. 'I jyst yn chwarae am byth. Ond nid y gân Frere Jacques yw. Dyw hi ddim yn bod hir. Mae'n dim ond ychydig o fariau. Felly mae angen i atal y peiriant drwm fel gynted ag y bydd gwerth cerddorol byrrach yn dod i ben. A bod gweithredwr infixed yn super defnyddiol gyda hynny. Ac infix nodiant fel mae hyn yn fath o 'n glws, gan fod yn dweud bod gennych swyddogaeth tebyg dyfyniad, sy'n rhoi yr is-adran cyfanrif o x gan rywbeth else-- ddrwg gennym, dylai hynny fod yn a b. Gallech ysgrifennu fel dyfyniad o b. Felly, os ydych elfen put-- yw enghraifft arall o hyn. x elfen mewn rhyw rhestr, os ydych yn rhoi yn Backticks, gallwch ei ddefnyddio. Hyd yn oed er nad yw'n symbol fel plws neu finws neu amserau, gallwch ddefnyddio enw swyddogaeth fel 'na yn Backticks fel gweithredwr infix, sydd yn eithaf oer. CONNOR HARRIS: Unwaith eto, mae hyn yn pob siwgr yn unig cystrawennol, mewn gwirionedd. Nid yw'n effeithio ar y craidd o iaith. STEPHEN KREWSON: Felly gwelwn yma am yr ymadrodd olaf ein cân Frere Jacques, Yr wyf yn chwarae rhai cordiau ychydig neu ran o dair sy'n defnyddio'r cyfansoddiad cyfochrog gweithredwr. Mae hon yn ffordd arall o ddweud rhai o'r hyn yr ydym ni newydd ei ddweud. Felly rydych yn gallu map swyddogaethau o un ddadl dros rhestrau. CONNOR HARRIS: Unwaith eto, mae cyfeiriadau ar gyfer gwerslyfrau rhagarweiniol Haskell-- Bydd yn rhaid i hyn i gyd ynddo. STEPHEN KREWSON: Felly dyma 'n bert llinell allweddol y dilyniannwr cam byddwn yn edrych ar ddefnyddio mae dealltwriaeth y rhestr. Ac rydym yn gweld yma yw bod yr elfen mewn gweithredwr sefydlog mewn dyfynodau cefn. Felly os x yn elfen o y rhestr o x, yna byddwn yn alw i fyny swyddogaethau perc. Felly, dim ond swyddogaeth offerynnau taro perc yn. Mae'n cymryd rhywfaint o werth p sy'n rhan o'r set ffinio pob y gwahanol synau taro bod y gwelsom yn sleid blaenorol, ac yna mae'n rhoi bod hyd nodyn chwarter. Arall mae'n rhoi QNR iddo, a QNR yn unig yw gorffwys nodyn chwarter. Felly mae hyn yn adeiladu rhywbeth neis. Mae gennym restr o elfennau, a byddwn yn ddolen dros ryw rhestr o un at werth max ein dilyniannwr cam. A phan fyddwn ni'n ar ff penodol mewn bod rhestr o un i'r gwerth max, os bod fi yn aelod o hyn set creu yn y swyddogaeth hon, yn dda, yna rydym yn ei droi i mewn nodyn taro. Fel arall, rydym yn unig yn chwarae gorffwys, a oedd yn yw dweud, rydym yn unig aros yn dawel. A gallwn weld yma, mewn rhestr hon cystrawen a deall, x yn cael ei phoblogi gan hyn Rhestr adeiladwyd un i faint byd-eang y dilyniannwr. CONNOR HARRIS: Yeah. Mae cystrawen sylfaenol ar gyfer comprehensions rhestr hon yn braced, gwerth cynnwys rhai newidynnau, bar, Gwerthoedd posib o'r newidynnau eu hunain, ar gau braced. Ac os ydych chi wedi gwneud gosod nodiant adeiladwr mewn unrhyw fath o ddosbarth mathemateg, efallai y byddwch wedi gosod y fath 2n hynny n mewn neu n yn z. Tebyg thing-- nodiant hwn i fod i fod yn awgrymog o hynny nodiant mathemategol. STEPHEN KREWSON: A gallwch berthnasol predicates lluosog a hidlwyr lluosog mewn rhestr deall, sy'n eithaf 'n glws. Algebraidd rydym types-- Ni fydd linger hir yma. Does dim syniad da mewn Haskell neu syniad da, yn amlwg o sut i gymryd, dyweder, diofyn paramedr i swyddogaeth neu rywbeth. Yn Python, mae hyn yn eithaf hawdd. Alli jyst ddweud yn hafal ar y datganiad y swyddogaeth, gwerth diofyn yn nid oes yr un achos yn cael ei gyflenwi. Yn Haskell, gallech efallai Defnyddiwch efallai y efallai deipio, sy'n cymryd naill ai ddim byd neu werth o fath yn unig. Felly, rydym yn manteisio ar hyn yn y peiriant drwm i'n galluogi i roi cyfaint dewisol paramedrau i bob un o'r rhannau drwm. Felly mae hynny'n rhoi ffordd o gael EQ ni neu gyfrol ar sianel benodol. CONNOR HARRIS: Yn enghreifftiau Haskell eraill, efallai y byddwch yn gweld yn cael ei ddefnyddio efallai ar gyfer swyddogaethau a allai methu. Mae hwn yn un cyffredin. STEPHEN KREWSON: A gallwch gyflenwi rhyw fath o neges gwall fel diofyn. A dyna yn arbennig o ddefnyddiol pan rydych chi'n ei wneud y I / O yn Haskell. Gall hynny fod driciau. CONNOR HARRIS: Neu am Enghraifft debyg, yn meddwl swyddogaeth sy'n cynnwys is-adran o paramedr a allai fod yn 0. A gallai swyddogaeth honno dychwelyd efallai beth bynnag. Felly, os nad oes rhaniad 0, bydd yn dychwelyd yn union beth bynnag. Ac os oes is-adran gan 0, bydd yn dychwelyd dim byd fel ffordd o ddangos y camgymeriad. Oherwydd bod un canlyniad Teipio llym iawn Haskell yn yw nad oes dim real-- eithriadau yw lletchwith, yn y bôn, trin gwall yn lletchwith. Ac mae hyn yn un iawn ffordd gyffredin o wneud hynny. STEPHEN KREWSON: Felly nawr rydym yn cael i beth arall meddwl-blygu am Haskell, sef patrwm paru a swyddogaeth diffiniadau. Wyf yn dangos i chi yn y sleid olaf y datganiad o'r dilyniant cam swyddogaeth, a gymerodd efallai gwerth, yna int, yna restr o ints, Yna, yn dychwelyd dilyniant o Gwerthoedd cerddoriaeth anodedig yno gyda traw a chyfaint. Felly gall y rhai tri dadleuon yn patrwm cyfateb yn y modd canlynol. Ac rydym bob amser yn awyddus i fod yn sicr o gwneud achos sylfaenol neu achos allanfa gyntaf. Ac tanlinellau hyn gall dim ond eu dehongli i olygu unrhyw werth sy'n yno. Felly, os ydym yn cael galwad i gamu dilyniant gyda rhywfaint o werth, rhywfaint o werth arall, ac yna trefnir y rhestr yn wag, yr hyn yr ydym ei eisiau i ddychwelyd yw tawelwch yn unig, gorffwys 0. Ac yn lle hynny sef rhestr wag neu 0, ei fod yn gorffwys 0, oherwydd ein bod yn delio â'r math cerddoriaeth, a'r rhestr wag o'r gerddoriaeth math yn unig yw gweddill o ddim hyd. Nid yw'n gerddoriaeth. Ac yna rydym yn gweld os ydym yn cael cam trefnu gyda v ar gyfer dadl gyfrol, p ar gyfer yr offeryn rhagofal ddadl, ac yna rhestr o x yn. Yna, rydym yn ei wneud rhai pethau. Yn benodol, rydym yn gwneud cais Rhestr deall hyn, ac yr ydym yn perfformio rhai gweithrediadau ar werth efallai i droi i mewn i werth rhifol fel bod gellid ei wedyn restrir a'u defnyddio i ddewis offeryn. Unwaith eto, mae hyn yn ychydig yn bit yn fwriadol inconcise dim ond er mwyn dangos yr holl bethau rhyfedd gallwch ei wneud yn Haskell wrth i chi yn edrych ar ar eich amser eich hun. Iawn. Felly rydym yn diwedd yn cael i gwneud yr hyn yr ydym yn bwriadu ei wneud, sydd yn gwneud rhywfaint o gerddoriaeth cyfrifiadur. Felly rydym yn mynd i geisio yn gwneud y gân Frere Jacques. Felly mae yna sawl ymadroddion yn Frere Jacques? Pedwar. Great. A beth braf yw bod maen nhw i gyd dro ar ôl tro yr un faint o weithiau, sef dau. Felly mae gennym bedwar ymadroddion pob ailadrodd ddwy waith. Ac yn arbennig, eu bod mewn rownd. Ac mae yna lawer, llawer o ffyrdd i weithredu rownd a allai fod yn hwyl i'w wneud. Rydw i wedi gwneud hynny mewn 'n bert ffordd syml yma, sy'n cael ei dim ond i construct-- y llinell swyddogaeth yn cymryd rhestr o werthoedd cerddoriaeth ac yn troi i mewn i gyfansoddiad dilyniannol drwy gymhwyso y cyfansoddiad dilyniannol gweithredwr. Ac yna yr wyf yn oedi'r gwahanol rannau trwy eu gwneud yn dechrau gyda gweddill. Felly, byddaf yn dechrau gyda gweddill ddau fesur, ac yna gweddill y pedwar mesur, ac yna gweddill y chwech mesurau, ac yna y rownd gweithio, fel yr ydym i gyd yn gwybod y gân. Rydym yn gweld dau anodiadau neu addasiadau o werthoedd cerddoriaeth sy'n cael eu cynnwys yn ddilyniannol hon trefniant o elfennau cerddoriaeth. Mae gennym cyfaint ychwanegu. Mae hon yn swyddogaeth i anodi cerddoriaeth gyda chyfaint penodol. Mae hon yn enghraifft dda o redeg signal MIDI 0-127, y saith darnau o gwybodaeth y gellir eu cyflawni. A then-- gwelsom ei iawn yn fyr, ond mae'r MIDI cyffredinol rhestr o'r holl wahanol offerynnau. Ac nid oes llawer gyfan o ohonynt. Os ydych yn defnyddio gweithfan sain ddigidol, fel Ableton Live neu Pro Tools, mae 'na amrediad anhygoel o ehangach o syntheseisyddion ac offerynnau VST. Ond mae safon MIDI yn unig Mae gan ychydig, neu sawl dwsin. Ac mae rhai ohonynt yn ddoniol. Roeddwn i'n meddwl y byddai'n hwyl os byddwn yn ei chwarae yr offeryn yr offeryn MIDI hofrennydd, ac yna'r ffordd nesaf drwy'r cylch, gwnaethom synth pad, ac yna o arwain corny hwn synth tonnau sgwâr, ac yna lleisio ooze, sydd yn ychydig bach aneglur ar fy MIDI drwg syntheseisydd, ond maent yn OK. Ac yna rydym yn gweld osod hwn ac mewn cystrawen o Haskell, ac yna rydym yn chwarae bob rhan hyn at ei gilydd gyda'r gweithredwr chyfansoddiad cyfochrog. A gallem yn ôl pob tebyg yn dangos rhywfaint o hyn. Dyma y cod. A gallwch weld yn C, yna byddwn yn llawer o clirio gwddf a gosod y cod bwrdd cyn i chi Gallai greu cerddoriaeth fel hyn. Neu unrhyw rhaglenni eraill iaith, byddech yn ôl pob tebyg rhaid i ryngweithio gyda rhyw fath o llyfrgell neu API a gosod popeth i fyny, ac yna byddai'n rhaid i chi lanhau. Ond yma yn Haskell yw, yr wyf yn meddwl, unwaith byddwch yn cael y hongian ohono, anhygoel ddarllenadwy ac yn llawn mynegiant iawn. Felly mae gweithredu o Frere Jacques. Iawn. Nawr rydym am i ychwanegu offerynnau taro, ac mae hyn yn ychydig Messier ychydig. Felly, gadewch i ni edrych ar y sleidiau. Felly, y syniad mawr yw gwneud criw o restrau neu rannau. Ar beiriannau rholio-yn y rhai, mae yna Roedd yn nodweddiadol am efallai wyth i 10 rhythm neu offerynnau taro rhannau. Ac yna defnyddio criw o dechnegau. Ac rydym wedi siarad am these-- ddefnyddio corlannau, hidlwyr, swyddogaethau lamda, mapio dros rhestri i gynhyrchu gwerthoedd mewn rhyw ystod 1 i r, r yn 16, neu 32 cam yn y dilyniannwr. Ac yna os oes gwerth yn y rhestr gan ein bod yn rhedeg drwy'r dilyniannwr, rhedeg drwyddi drosodd a drosodd, mae'n troi ar y nodyn hwnnw, a sampl sy'n cael ei sbarduno. Dyma holl wahanol ffyrdd rhyfedd Fe ddes i fyny gyda i gynhyrchu nodiadau. Rhowch gynnig arni ar eich swm lled eich hun. Bydd yn swnio'n cŵl. Amser yn caniatáu, byddwn yn mynd drwy hyn. Ond am ar hyn o bryd, yr wyf yn dyfalu dylem demo hyn sydd gennym. Gobeithio hyn yn mynd OK. Felly mae hyn yn GHCI. A byddwn yn llwytho ffeil Mae gen i enw song.lhs, sef y ffeil Fi jyst yn dangos i chi. OK, mawr. Fel y dywedodd Connor yn gynharach, mae'n llunio, mae'n r math gwirio, fel y gallaf anadlu yn llawer haws. Nid yw'n mynd i chwythu i fyny ar mi. I ddim am ddangos rhywbeth defnyddiol i chi. Gallwch weld bod modiwl lwytho o'r enw 50. Gallwch bori y modiwl. Ac mae hyn yn mor neis am doing-- efallai beth rydych chi'n ei wneud yn peidio Haskell yw Gelwir datblygu meddalwedd, ond gallwch wneud llawer o stwff hwyliog ar eich pen eich hun. Ac y llif gwaith yn neis iawn fel o gymharu â llawer o ieithoedd eraill, oherwydd gallwch weld mewn gwirionedd ffordd ddarllenadwy beth sy'n digwydd. Felly rydym yn gweld bod gennym yr holl ymadroddion hyn, sy'n yn rhestrau o gaeau cerddoriaeth, ac yna rydym yn adeiladu'r rhain i fyny i rywbeth mwy o faint, sydd yn gân cerddoriaeth. Mae'n uned gerddorol. Ac yna gallwn chwarae hyn i gyd â swyddogaeth o'r enw gerddoriaeth chwarae. Gallwch weld bod i lawr yma. Pa yn unig chwarae. Dylwn say-- doeddwn i ddim yn siarad am yr arwydd doler sy'n mhob man. Arwydd doler yn weithredwr infix arall. Ond mae wedi y flaenoriaeth isaf unrhyw weithredydd, a oedd yn effeithiol yn golygu bod popeth ar i'r chwith o'r arwydd doler ac ar y dde o'r arwydd doler, rydym yn mynd i gael eu gwerthuso ger ei fron. Felly mae'n fath o fel arall ffordd o ychwanegu parenthesis. CONNOR HARRIS: Mae'n bôn cyfansoddiad swyddogaeth. Ac mae'n sicrhau nad ydych yn have-- os mae gennych swyddogaethau naill ochr neu'r infix gweithredwyr ar y naill ochr, ni fyddant gysylltu ar ei draws ac yn rhoi i chi canlyniadau annisgwyl. STEPHEN KREWSON: Felly, rydym can-- gan ddefnyddio hynny, gallwn alw. Yn gyntaf, byddwn yn ei chwarae heb y drymiau. Dyna yr hofrennydd, yr hofrennydd MIDI. [CHWARAE CERDDORIAETH] Mae y don sgwâr. Mae'r ooze llais. A gallwch chi wir yn mynd yn wyllt gyda hyn. Yr wyf yn codi yn un eithaf syml, am fy mod yn gwybod na ddylwn brathu i ffwrdd mwy nag y gallwn i cnoi. Dim ond yn cadw ei eithaf syml i ddangos y prif syniadau. Ond yna Roeddwn yn hoffi, rydym wedi rhaid i ychwanegu ychydig o drymiau at hyn. Dim ond gan fod hwn yn ychydig bach anhreiddiadwy, a doeddwn i ddim yn defnyddio'r enwi o'r rhannau drwm, Rwyf mapiwyd them-- am eu bod yn rhan yn y dosbarth hwnnw wedi'u rhifo, Yr wyf yn eu mapio i ints. Mae un yn fel drwm bas. Zero yn ogystal. Saith yn het uchel. Ac i lawr yn fan hyn lle mae'r swyddogaethau yn cael ychydig yn fwy ar hap, mae'r rhain yn debyg drymiau conga. Felly, os ydych yn meddwl about-- efallai ffordd hwyliog i weithredu peiriant drwm yw defnyddio drefnus iawn patrymau ar eich drwm bas. Felly, er enghraifft, ar ffiltro dros y rhestr gyda phopeth sy'n rhoi nôl o 1 pan mae wedi cymryd modiwl 04. Felly, yr wyf yn cael 1, 5, 9, 13, 17-- felly mae hyn yw curiad cyntaf o bob mesur. Ac yna mae hyn yr un fath beth symud dros dau gam. Felly dyna yr offbeat. Felly byddai hyn yn rhywbeth fel het uchel. Ac yna eto, i lawr yma, 'i' ychydig ar hap, oherwydd ein bod yn gwneud drymiau conga. Ac mae gennyf rai maracas i lawr yma, hefyd. Er mwyn imi alw peiriant drwm chwarae, ond byddai'n mynd ymlaen am byth, a gallai fod yn dechrau crafangio i fyny yr holl atgof yn fy system. Felly byddaf yn galw swyddogaeth hon chwarae cerddoriaeth, sydd, fel y byddwn yn gweld, defnyddiwch y cyfansoddiad cyfochrog truncating i chwarae ein cân bach Frere Jacques ynghyd â hyn pheiriant drwm 'n annaearol. Felly, gadewch i ni edrych. Ac os gwelwch yn dda yn gwella ar fy trefniant o holl rannau drwm. Nid yw fy arbenigedd, ond yr wyf yn wedi cael llawer o hwyl wrth wneud hynny. [CHWARAE CERDDORIAETH] Felly, wrth gwrs, mae hyn i gyd ychydig Nid yw mor hwyl os na allwn drosi at sgôr felly efallai ei gellid eu dehongli gan berfformiwr dynol. Felly, ni fyddaf yn rhedeg yma. Rwyf eisoes wedi cynhyrchu y ffeiliau. Gallwch weld bod yna dot LilyPond file-- ac mae hyn yn fydd fy segue drosodd i Connor-- a ffeil dot MIDI, a ffeil dot PDF, sef yr hyn Bydd LilyPond yn y pen draw yn cynhyrchu. Ond mae'r rhain yn sgriptiau hynny, a byddaf dim ond eu rhedeg gyda chymorth eu hopsiynau. Os ydych yn cael y rhain yn weithredol â Euterpea, gallwch greu ffeil MIDI. Ac yna o'r ffeil MIDI gyda'r rhaglen hon MIDI 2LY, gallwch greu Lily Ffeil pwll, ac yna rydych Gall creu PDF o'r sgôr. A dylem gymryd golwg ar hyn. Felly bydd Connor yn ôl pob tebyg yn dangos chi sut i anodi hyn yn well, ond mae hyn yn Frere Jacques fel a gynhyrchir gan mi yn Euterpea. Mae'n jyst yn C. Rwyf dylai fod wedi cyfrifedig yr hyn y mae'r darnia 'i' mewn gwirionedd yn. Ond dyna y gweill ar gyfer sut yr ydych yn gwneud hynny â hynny. Gadewch i ni siarad mwy am LilyPond. CONNOR HARRIS: OK Gadewch i ni weld. Wnaethoch chi sôn Dysgwch Chi Haskell? STEPHEN KREWSON: O ie. Edrychwch ar Dysgwch Chi Haskell. Mae yn yr adnoddau. Dyna sut yr wyf yn dechrau dysgu, ac mae'n wych. Dysgu Ddim yn fud. CONNOR HARRIS: Felly mae'n ar-lein. Felly a guy a enwir [Anghlywadwy] learnyouahaskell.com, dim mannau. Gramadeg yn sâl. STEPHEN KREWSON: Mae'n darluniadol, hefyd. CONNOR HARRIS: Felly beth yw LilyPond? Mae'n rhaglennu declarative iaith ar gyfer cysodi cerddoriaeth. Felly declarative-- gallwch meddwl am bethau fel HTML, lle nad ydych yn saying-- HTML nid yw'n dweud sut y dylai porwyr gwe rendro tudalennau gam wrth gam. Dim ond ei fod yn dweud hyn yn ddisgrifiad testunol o'r hyn yr ydych am i'r dudalen i edrych fel. Ac yna mae hefyd yn rhaglen sy'n llunio iaith hon, neu ei fod yn darllen ei mewn ac yna mewn gwirionedd mae'r cysodi ar eich rhan, ac mae'n poeri allan y rhain hyfryd yn edrych sgoriau PDF. Gallwch hefyd gael fformat PNG neu beth bynnag. Ffordd dda i feddwl o hyn yw trwy gydweddiad yw bod LaTeX yn fath o fel LillyPond, ond am ychydig cysodi cyffredin. Felly, yn lle o- nid yw'n WYSIWYG, Beth chi'n ei weld A yw hyn a gewch, fel, yn dweud Finale, neu Sibelius, neu Microsoft Word, lle gallwch deipio i mewn amser real a drafft pethau mewn amser real ac yn gweld newidiadau ar unwaith. Mae wedi ei seilio testun. Mae'n rhaid i chi lunio eich sgorau ddefnyddio rhaglen ar wahân ac ewch allan ffeiliau PDF yn ddiweddarach. Mae hwn yn dipyn llai gyfleus i'w defnyddio os ydych yn ceisio ysgrifennu yn uniongyrchol i mewn sgôr ac rydych yn ceisio cyfansoddi ar y cyfrifiadur. Ond mae yna lawer o fanteision ar ei gyfer. Un, mae'n edrych yn llawer brafiach, oherwydd gall LillyPond mewn gwirionedd cymryd yr amser i wneud penderfyniadau cynllun yn iawn, yn wahanol i Sibelius neu Finale, sydd wedi i wneud algorithmau cyfaddawdu felly eu bod yn gallu arddangos pethau mewn amser real. Felly pam mae LilyPond-- graffeg cyfrifiadurol yn galed. Os ydych yn gwneud unrhyw beth gyda cherddoriaeth a'ch bod am i ysgrifennu allan sgorau, nad ydych am i ysgrifennu allan bopeth gan eich hun gan ddechrau gyda sut i dynnu staff a sut i dynnu llyfrau nodiadau. Mae'n anodd iawn. Mae wedi ei wneud o'r blaen. Eich bod yn iawn. Os ydych am ddefnyddio Finale neu Sibelius, y fformatau ffeil ar gyfer y pethau hynny yn gymhleth iawn, ac ni allwch 'n sylweddol yn eu defnyddio programmatically. Gallwch agor Sibelius gyda Finale ac yn mynd i File, Allforio fel PDF eich hun, ond ni allwch mewn gwirionedd yn galw hynny o sgript. LillyPond, gallwch ffonio o sgriptiau hynny. Gallech yn hawdd ailadrodd LillyPond gyda LaTeX. Ni fydd gennyf bod llawer o amser i fynd i mewn i technolegau hyn ar hyn o bryd, ond maent yn bodoli. Os ydych chi eisiau edrych mewn llyfr LillyPond, ei fod yn rhaglen sy'n dod gyda eich dosbarthiad LillyPond, a 'i' i ailadrodd Darnau LillyPond i mewn i LaTeX os ydych chi am wneud rhywbeth fel dogfen cerddoleg mawr gydag enghreifftiau, er enghraifft. Ac mae'n sgil da ar gyfer bywyd os ydych yn gwneud unrhyw beth gyda cherddoriaeth, nid dim ond CS50. Rwyf wedi defnyddio LillyPond ar gyfer yr holl fy prosiectau cyfansoddi ers i mi fod yn y bôn yn uwch yn yr ysgol uwchradd. Felly dyma rai enghreifftiau syml. Mae hyn yn cynrychioli y bôn o lefel o anhawster bod y rhan fwyaf o bobl y byddai wynebu'r peth yr oeddent yn ceisio'i i ddefnyddio LilyPond ar gyfer prosiectau syml. Mae'r un cyntaf yn y dechrau i rhagarweiniad corâl gan Bach. Mae hyn yn un gwaelod yn dyfyniad o un o fy gwaith eu hunain, ac mai dim ond yno i ddangos chi pethau fel [Anghlywadwy] rhoi llinellau lluosog yn yr un staff, pa mor delynegol undersetting gweithio. Underlays telynegol yn beth sy'n iawn hawdd i'w defnyddio LilyPond ar gyfer cerddoriaeth gorawl. Ac felly yna mae rhai yn fwy enghreifftiau cymhleth yma. Mae'r rhain i gyd yn cael eu gwneud mewn LilyPond ac maent yn ddichonadwy. Mae'r dyfyniad cyntaf yn dod o [Anghlywadwy] gan [Anghlywadwy]. Ac mae hyn [Anghlywadwy] o darn ar gyfer unawd bas ffliwt gan [Anghlywadwy], sy'n longtime-- sy'n Roedd yn aelod longtime o'r adran gerddoriaeth yma, yr wyf yn meddwl. Dydw i ddim yn siwr ble mae'n mynd i ffwrdd i. Ond yr oedd y cynghorydd y Harvard Cymdeithas Cyfansoddwyr am amser hir. Dyn gwych. Ac mae'n ysgrifennu rhywfaint o gerddoriaeth sydd wedi iawn nodiant gymhleth sy'n LillyPond serch hynny yn gallu ymdrin iawn 'n glws. Felly, dim ond i roi ymdeimlad o chi beth galluoedd y peth hyn yn yw-- felly y mewnolion o LillyPond yn gymhleth iawn. A gallwch ei ddefnyddio ar gyfer amser hir, gan gynnwys ar gyfer rhai 'n bert gymhleth pethau, heb wir gorfod gwybod llawer am iddynt. Ond mae'r syniad sylfaenol yw y ar y lefel isaf, mae'r atomau o LillyPonds yn y nodiadau. Mae'r nodiadau yn cynnwys cyd-destun o'r enw lleisiau. Felly y cyd-destun llais bôn cyfateb i un llinell o polyffoni. Ac yna gall fod yn gyd-destun cynnwys hierarchaidd mewn rhai lefel uwch sy'n yn cynrychioli staff ar y sgôr neu grwpiau mwy fel staff piano neu staff côr, ac yna yn y pen draw cyd-destunau sgôr cyfan. A gallwch gwmpasu mewn gwirionedd lluosog sgorau mewn llyfr. A phob cyd-destun yn cael nifer y engrafwyr ynghlwm. Os ydych yn edrych trwy'r gynnwys y cyd-destun ac argraffu symbol penodol neu ddosbarth penodol o symbolau yn ôl yr angen. Felly, i bob cyd-destun llais, mae [Anghlywadwy] Nodiadau ysgythrwr sydd yn y bôn yn swyddogaeth neu gwrthrych sy'n ysgrifennu allan yr holl nodyn pennau ar y rhannau cywir o'r dudalen. Yna mae 'na ysgythrwr hollt, a oedd yn ysgrifennu allan holltau ar y staff. Yna mae metronome marc ysgythrwr sy'n ysgrifennu allan marciau metronom at sgôr. Ac mae'r rhain i gyd yn cyd-fynd 'n bert ymhell i mewn i'r hierarchaeth. Ac mae'n iawn, iawn, iawn customizable, a oedd ei angen arnoch os ydych chi am gael pethau fel 'na. Felly yr holl gyd-destunau yn cael llawer o nodweddion gwahanol eich bod yn gallu addasu ar gyfer popeth o'r gofod i wahanol ffont Detholiad i feintiau o bethau. Os ydych am wneud hyd yn oed pethau'n fwy cymhleth, mae 'na iaith sgriptio wreiddio. Maent yn defnyddio cynllun, a yn dafodiaith o Lisp. Mae'r rhain yn debyg nad yn ei wneud golygu unrhyw beth i chi. Ond yn y bôn, cynllun swyddogaethol arall iaith raglennu, fwy neu lai. STEPHEN KREWSON: Y clymu i mewn. CONNOR HARRIS: Yeah. Mae'n tei-mewn da, mae'n debyg. Ac mae'n cael ei ddefnyddio fel iaith addysgu, mewn gwirionedd, i lawr Offeren Ave. Yn MIT. Ac mae'n handi iawn ar gyfer LillyPond am wahanol resymau technegol. Ac felly os ydych am wneud yn syml tweaks ddibynnol ar conditionals, am example-- mae rhai cyflwr sgôr sy'n cael ei bodloni, gwneud newidiadau i'r cynllun neu whatnot-- yna cyfleusterau hynny yno. Maent yn gymhleth. Felly dyma sampl cod eithaf syml. Mae'n bum llinell. Yn y bôn, dw i'n diffinio dau o staff. Mae yn 3/4. Roedd y staff cyntaf yn cael ynghlwm marc tempo, ond sy'n mynd mewn gwirionedd i fynd ymlaen i'r sgôr cyfan, oherwydd bod marciau tempo ar y lefel sgôr. Mae'r ysgythrwr marc metronome ynghlwm i sgorio cyd-destun. Mae gwahanol allweddi, oherwydd bod y [Anghlywadwy] ysgythrwr Atodir y staff. Alli 'n weithredol wneud yw. Roedd y sampl Ysgrifennais yn mewn gwirionedd yn C fwyaf, ond mae'r un i arddangos y gallwch gael gwahanol allweddi mewn gwahanol o staff. Ac mae'r gystrawen sylfaenol yw i ysgrifennu yn nodi enwau â E, F, G, beth bynnag. Os ydych am wneud hapnodau, chi-ddodiad IS neu ES. Mae hyn yn dod o Iseldiroedd confensiynau musicological. Ac i wneud neidiau wythfed, rhaid i chi ddefnyddio mae'r rhain ticiwch marciau, coma neu collnod. Mae'r berthynas yn unig yn golygu beth bynnag yr ydych gael nodyn, bydd yn cael ei plaec yn awtomatig yn y wythfed agosaf at yr un blaenorol. Ac os ydych chi am i neidio mwy na a fifth-- dweud pumed neu more-- yna rhaid i chi ddefnyddio'r [Anghlywadwy]. Ond fel arall, nid oes rhaid i chi pennu'r wythfed o bob un nodyn. Ac yn gymharol C, cysefin, a C, 'ch jyst yn nodi canol C a sylfaen C, nodiadau arbennig yn gyntaf. Yna mae gennych staff hyn sy'n trefnu y ddau lleisiau neu samplau o gerddoriaeth, a bod gennych sgôr. A bod yn edrych fel hyn. Os ydych am gymryd yr amser i copïo sampl hwnnw o LillyPond cod ar y blaenorol llithro i lawr yma, ac yr ydych Gall ysgrifennu am LillyPond eich hun. Yr wyf yn gwybod ein bod wedi cael rhywbeth sy'n edrych yn llawer fel hyn. Felly mae technoleg arall Gelwir XML Cerddoriaeth a gynhelir gan hollol wahanol bobl. XML yn testunol data structure-- wyf Ni ddylai ddweud structure-- data dweud math map trosiad o. Ac mae'n cynllunio i ddal data hierarchaidd yn dda iawn. HTML, er enghraifft, yn fath o XML. A allwch chi ddweud XML am eu bod yn roedd gan y holl cromfachau ongl a ongl marciau slaes braced bod meysydd sioe data. Nid oes gennyf cod enghraifft o Gerddoriaeth XML. Gallwch ddod o hyd eich hun. Yn y bôn, y rheswm efallai y byddwch am i ddefnyddio XML fel y cam canolradd yw, yn gyntaf oll, mae'n fformat cyfnewidfa am y bôn every-- na ddylwn ddweud pob, ond mae llawer o sgôr gwahanol awduron. Felly, os byddwch yn ysgrifennu mewn Cerddoriaeth XML, nid yn unig y gall LillyPond ei ddarllen gyda chymorth auxilary hwn rhaglen o'r enw XML Cerddoriaeth i LY, ond gall hefyd Finale ddarllen hynny, gall Sibelius ddarllen. Yn dibynnu ar sut y mae eich gwrthrych mewnol hierarchaeth yn gweithio i gynrychioli cerddoriaeth, efallai y byddai'n haws i ysgrifennu allan i XML Cerddoriaeth nag i LillyPond a dim ond yn dibynnu ar XML Cerddoriaeth i LY i wneud y trawsnewid. Nid wyf yn credu [Anghlywadwy] Mae XML Cerddoriaeth. STEPHEN KREWSON: Nid Mae'n gwneud. Mae rhywun yn gweithio arno, er. CONNOR HARRIS: OK. Nid oes gan Euterpea a Swyddogaeth allbwn XML Music eto. Os ydych am gael syniad prosiect terfynol, efallai i chi gysylltu â guys bod Stephen yn gwybod, ac gallent ddefnyddio eich cymorth. STEPHEN KREWSON: Byddwn wrth fy modd bod. CONNOR HARRIS: Hefyd, yn y bôn, pob rhaglennu ieithoedd sy'n werth ei halen Mae gan lyfrgell XML yn barod, er mwyn i chi yn fewnol drosi i gyd eich cerddoriaeth i mewn i ryw wrthrych y gall y llyfrgell XML ysgrifennu allan y byddai angen llai o newidiadau i'ch strwythur mewnol am ba bynnag cerddoriaeth gwrthrychau chi am ysgrifennu nag ysgrifennu ei yn uniongyrchol yn LillyPond byddai. Yna, dim ond ei hargraffu gyda XML gyda llyfrgelloedd XML yn eich iaith, a fydd yn gwarantu ei fod yn syntactically gywir a phopeth, ac yna ei newid i'r LillyPond. Felly technoleg efallai y byddwch am edrych i mewn os ydych yn gwneud rhywbeth fel hyn. [Anghlywadwy], un arall technoleg auxilarry. Mae hyn yn y bôn Gwaith Tech neu Tech Studio i LillyPond. Felly mae'n cynnig help gyda cystrawen, gyda thempledi ar gyfer gwahanol cyffredin cyfuniadau o offerynnau. Mae'n caniatáu sgrîn hollt gwylio hynny gallwch gael eich cod mewn un ffenestr a PDF mewn ffenestr arall ac cliciwch ar leoedd yn y PDF i neidio i'r perthnasol mannau yn eich cod ffynhonnell. Mae hyn yn fwy defnyddiol os ydych mewn gwirionedd ysgrifennu LillyPond ffeiliau eich hun nag os ydych yn cynhyrchu nhw programmatically. Ond unwaith eto, 'i' rhywbeth ddefnyddiol cael. Great. Resources-- arall 'n annhymerus' jyst fynd drwy hyn yn gyflym iawn. LillyPond manuals-- LillyPond wedi dogfennaeth ragorol ar ei wefan. Mae ganddynt tiwtorial. Mae ganddynt cyfeirnod cystrawen. Maent wedi cannoedd o bytiau ar gyfer gwahanol bethau bach Efallai y bydd angen yo ei wneud i ddangos galluoedd amrywiol. Os ydych am ddefnyddio yr iaith sgriptio neu wneud helaethach customizations, yna mae mewnolion cyfeirio at y URL. Os ydych am ddefnyddio XML Cerddoriaeth, mae ' hynny URL, musicxml.com/tutorial. Ac yna os bydd angen cynllun i ddysgu oherwydd eich bod mewn gwirionedd am ei ddefnyddio cyfleusterau sgriptio yng LillyPond, Yna mae 'na [Anghlywadwy] a elwir yn Dehongli Strwythuredig Rhaglenni Cyfrifiadur, sydd nid yn unig yr ail gwerslyfr CS mwyaf erioed written-- dod o hyd i mi wedyn os ydych eisiau gwybod yr hyn yr wyf yn credu bod y un yw-- mwyaf ond mae hefyd yn dda iawn Cyflwyniad i'r iaith priodol. Ni fydd angen i chi fwy nag yr ychydig adran gyntaf. A dyna ni. Unrhyw gwestiynau? MYFYRIWR: Ble alla i lwytho i lawr eich gynhyrchir Frere Jacques fel y gallaf roi ar fy iPod? STEPHEN KREWSON: Wel, gallwch ysgrifennu allan i ryw ffeil wav yn Euterpea. Ac mae gennych yr cod. Mae'n ar GitHub. Gwnewch eich hun o amrywiadau Frere Jacques gan feddwl cwch gwenyn CS50. Byddai'n wych. CONNOR HARRIS: Unrhyw un arall? STEPHEN KREWSON: Mae angen drwm bas yn well, hefyd. Mae'n wirioneddol ddrwg. MYFYRIWR: Euterpea nid yn unig wedi yr ochr cyfansoddiad, ond signal-- STEPHEN KREWSON: Ydw. Yn wir, mae'r gwaith yr wyf yn gwnaeth yn Euterpea pan fyddaf yn Cymerodd this-- mae 'na cwrs yn graddio yn Iâl sy'n defnyddio iddo-- oedd ar synthesis gadarn. Felly mae 'na' n sylweddol ffordd braf ddefnyddio saethau a rhai o'r nodiant a welsom o cyfansoddi ynghyd swyddogaethau signal. Yn benodol, mae'r bas gyfer y rhan fwyaf ohonynt yn unig yw ton sin syml. Ond os byddwch yn dechrau cyfansoddi rhai mewn ffyrdd rhaglennol 'n annaearol, gallwch gael sain crazy effeithiau, megis rhaeadrau 'n annaearol. Gallwch greu gritty iawn swnio gyda llawer o fodiwleiddio. Fe wnes prosiect ar gronynnog synthesis, sef rhywle yn y canol FM a samplo. Byddwch yn cymryd fach iawn, samplau bach, ac yna yn eu cyfuno â rhyw fath o modulator a cronni sain cyfoethocach. Rydym hefyd yn gwneud modelu ffisegol, felly ceisio meddwl am y ffiseg a psychoacoustics o rhywbeth fel utgorn, a meddwl am y ffordd y sain yn bownsio oddi ar y gloch yr utgorn ac acwsteg yr ystafell a modelu hynny gyda'r oscillators sylfaenol. CONNOR HARRIS: Diolch cymaint. Diolch am ddod. A dwi'n bob amser yn barod i cymryd cwestiynau gan email-- connorharris@college.harvard.edu. STEPHEN KREWSON: Yeah. stephen.krewson@yale.edu. Cool.