CONNOR HARRIS: Hi.
Ako Connor Harris.
Ako ay CS50 CA sa Harvard.
STEPHEN KREWSON: Ako Stephen Krewson.
Ako TF para sa CS50 sa Yale.
CONNOR HARRIS: At kami ay pagpunta sa makipag-usap tungkol sa ilang mga teknolohiya na maaari ka
nais mong gamitin sa kung interesado ka sa paggawa ng isang pangwakas na proyekto o talagang
anumang bagay na may musika.
Kami ay pagpunta sa ay nagbibigay-diin sa unang isang programming language na tinatawag Haskell.
Ito ay isang functional wika, kaya ang tularan
ay ibang-iba mula sa C o PHP o iba pang mga kinakailangan mga wika
na ginamit mo na, at lalo na sa isang library na nakasulat sa Haskell
tinatawag Euterpea, na maaaring makatulong sa mga tao sa pagsusulat ng musika pagtakbo,
talaga.
At si Esteban ay ituturo sa iyo sa pamamagitan ng isang mahusay na halimbawa ng na.
>> Pagkatapos nito, makikita ba kitang ipakilala sa isang bagay na tinatawag LillyPond, na
ay isang teknolohiya para sa typesetting music.
Ito ay uri ng tulad ng LaTeX para sa musika kung anuman sa iyo
may ginagamit LaTeX para sa mga klase sa matematika o iba pang P set klase o kung ano ang mayroon ka.
At kaya Bibigyan kita, muli, ang ilang mga simpleng halimbawa ng mga na
at ituro sa iyo sa pangkalahatan direksyon ng ilang mas mahusay na mga mapagkukunan.
>> STEPHEN KREWSON: In Bilang karagdagan, naisip namin na ito
magiging cool upang i-set up isang maliit na piraso ng mga pahiwatig
patungo sa isang tubo sa pagitan ng Euterpea-generated Midi file
sa LillyPond, kaya nagbibigay kami ang ilang mga pagtuturo sa mga script
upang gawin iyon na ibinigay sa LillyPond
lamang panatilihin ito open source at makakuha ng isang pipeline ng pagpunta.
CONNOR HARRIS: Muli, dapat naming bigyang-diin,
mga ito ng dalawang mga teknolohiya, ikaw ay Hindi mo na kailangang gamitin ang mga ito nang magkakasama.
Hindi sila ay dinisenyo upang gumana sama-sama, kahit na gawin nila sa lalong mabuti.
>> STEPHEN KREWSON: Kanan.
At talagang libre.
CONNOR HARRIS: So Pasasalamat, basahin lamang na.
STEPHEN KREWSON: Gaya ng nararapat nabanggit.
Salamat sa mga kamag-anak.
Ito Kukunin ko nagtatagal sa lamang sa isang sandali.
Ang proseso ng pag-install ay isang maliit na bit mapanlinlang.
Kami ay isang read ako sa GitHub na maaari mong tingnan sa.
Mag-email lang sa akin kung mayroon kang anumang mga katanungan.
Ngunit kami ay tumakbo na ito sa ilalim ng mga palagay na ito ay gumagana para sa lahat ng tao.
CONNOR HARRIS: At kung ikaw ay hindi maaaring makakuha LillyPond sa trabaho, hindi sang-ayon.
Walang mga live na compilation na ay kasangkot, hindi bababa sa aking pagtatapos.
STEPHEN KREWSON: Haskell at LillyPond dapat pareho kayong may mga installer.
Euterpea ay nai-download bilang package, kaya sa at iba pa.
Kaya pinag-uusapan natin ang tungkol sa computer na musika.
At ito ay lamang ng isang very view ng 50,000-foot.
Mayroong ilang iba't-ibang mga aspeto ng mga ito.
At ito ay hindi pantay na lupa at ito ay pagpunta sa makaharang sa ilang mga detalye.
Ngunit kami ay maaaring sa tingin ng isang bagay tulad ng algorithmic komposisyon,
gamit ang algorithm, gamit ang code, upang bumuo ng
ilang uri of-- marahil ng isang self-katulad pagkakasunod-sunod ng mga tala, o marahil tala
sa ilalim ng ilang pagpilit.
At pagkatapos ay ang mga maaaring maging ginanap o wangis
sa analog instrumento o anumang bagay na tulad ng.
Ngunit ang komposisyon ay tapos algorithm.
>> Pero siyempre, siguro sa lugar ng computer na musika o mga digital na musika
kami ay mas pamilyar sa ay digital sound synthesis o digital sampling
at mga digital na-record.
Ang isang pulutong ng mga digital na instrumento ay gawin sa pamamagitan ng digital sampling.
Sa katunayan, kami ay magiging gamit ang isa sa mga nasa sa anyo ng isang sound library font mamaya.
>> Ngunit mayroon ding isang bagay na tinatawag na digital synthesis na nagmula sa labas
ng late '70s at sa' 80s sa Yamaha at John Chowning sa Stanford
ginagawa FM pagbubuo o Dalas modulasyon synthesis,
kung saan mo ay nagkaroon ng isang carrier signal at isang modulating signal
parehong sa audio spectrum.
Ngunit kung ano ang kami ay nakatutok sa araw na ito ay isang bagay na tinatawag MIDI,
at siyempre, algorithmic komposisyon.
>> Hindi namin pagpunta upang gumawa ng mga instrumento, ngunit sa halip kami ay pagpunta sa gumawa ng ilang musika,
at pagkatapos na makakuha ng naisalin sa pamamagitan ng ilang mga instrumento na
mga conformant sa pangkalahatang MIDI standard.
Kaya kung ano ang MIDI?
Hindi ako pupunta upang makakuha ng masyadong malalim sa mga ito, ngunit MIDI ay ang data transfer protocol.
Ito ay isang uri ng isang gabay sa kabuuan iba't-ibang mga kompanya at industriya
para sa pag-aayos ng mga tunog o mga patch.
Kaya makikita namin makita na mayroong isang standard MIDI
para sa lahat ng iba't ibang percussion tunog at MIDI rekomendasyon
para sa lahat ng iba't ibang uri ng synth o iba't ibang uri ng lahat ng mga instrumento
mga pangkat sa isang orkestra, sabihin.
>> Ikaw ay malamang na pamilyar sa 0 hanggang 127 MIDI mensahe.
A signal MIDI ay kadalasang isa bit na nagpapahiwatig
kung ito ay isang data o isang status packet, at pagkatapos ay mayroong
pitong mga piraso ng isang signal.
At ang mga ito ay maaaring kontrolin lahat mula sa dami
sa pagkilos o presyon sa isang partikular na key
kung ikaw ay gumaganap na may isang MIDI controller bilang pati na rin, siyempre,
mga tala.
At siyempre, MIDI ay ay lubhang kapaki-pakinabang,
dahil sa ito ay isang paraan upang wire sama-sama o daisy chain
ng grupo ng mga MIDI aparato ng hardware.
Mayroon akong pito o walong pabalik sa aking bahay.
Ito ay makakakuha ng tunay na kumplikado, ngunit ito ay talagang malakas.
At ito ay tunay na gulang.
Ito ay mula sa unang bahagi ng '80s, at ito ay talagang maganda at maliit.
CONNOR HARRIS: Oo.
Lahat ng mga klasikong nintendo video games ay marahil
Mayroon Midi file para sa musika, halimbawa.
>> STEPHEN KREWSON: Narito ang isang halimbawa ng pangkalahatang MIDI,
Ipinapakita MIDI bilang isang uri ng pangkalahatang protocol.
At sa tingin ko maaari naming isipin ng mga pagkakaiba sa pagitan ng ang mga detalye
na dapat ay isang bagay na tulad doon mga tunog ng instrumento at ang aktwal na
pagsasakatuparan ng mga instrumento ng tunog sa isang sound font o isang partikular na MIDI
synthesizer bilang ng mga pagkakaiba pagitan siguro ng typeface-- na nagsasabing,
sa pangkalahatan, ito ay ang disenyo ng ang partikular na paraan upang kumatawan
characters-- at isang partikular na font na may isang tiyak na laki at uri ng tono,
at mayroong pagsasakatuparan ng the--
>> CONNOR HARRIS: Maaari isang mas mahusay na paghahambing ng gagawin
ang watawat Unicode says-- ito ay nagbibigay sa isang numero sa bawat karakter, at talagang
lahat ng wika sa mundo, o sa isang malawak na hanay ng mga script ng mga wika
sa mundo, at pagkatapos ay ang mga ito ay render sa isang bagay na graphical
sa pamamagitan ng iba't-ibang mga pakete font.
At malinaw naman, maaari mong isipin MIDI bilang Unicode ng tunog.
At ito ay isang listahan lamang of-- isang malaking stream ng mga kaganapan at mga instrumento at watnat,
at kailangan mong magkaroon ng isang hiwalay na programa, tulad ng isang typeface,
upang mag-render na sa isang bagay na naririnig.
>> STEPHEN KREWSON: Kaya bakit Haskell?
Haskell ay isang functional programming wika, napaka-advanced,
ibang-iba mula C, ibang-iba mula sa PHP.
At kami ay pagpunta upang makita na mayroong isang kadalian ng function na komposisyon sa Haskell
na magbibigay-daan sa amin upang Breeze sa pamamagitan ng aakda o pag-type up, pag-transcribe,
isang bagay tulad ng Frere Jacques, ito simpleng kanta na
ay may maraming mga bahagi sa loob nito na ay self-katulad o paulit-ulit.
Kaya ito ay ang ilan sa ang pag-uudyok para sa kung bakit
aming ginagamit Haskell, kung saan function ay unang klase mamamayan.
>> At Nais kong i-extend ito nang kaunti.
Ito ay isang maliit na piraso madaling notate Frere Jacques sa Haskell.
Ngunit paano kung gusto naming magdagdag ng isang drum part na ito?
Paano kung gusto naming subukan na gumawa isang bagay tulad ng isang Roland 808 o 909 drum
machine kung saan mayroon kang tungkol sa 16 iba't-ibang mga hakbang na ito?
Karaniwan ang mga ito ay iisip ng mga bilang 16 mga tala.
At maaari mong makontrol ang global tempo, at maaari kang pumili ng
ng grupo ng mga iba't-ibang bahagi percussion ng bass drum, isang tunog ng kulog, iba't-ibang mga bitag,
bukas at sarado high hats sa mga uri ng mga channels,
at pagkatapos ay maaari mong EQ o ayusin ang kanilang lakas ng tunog.
>> At kami na makita ng isang magandang paraan sa Haskell ng kumakatawan sa hakbang na ito
sequencer sa lahat ng mga iba't-ibang mga cool na bagay sa Haskell
maaari naming gawin sa pagbuo ng listahan at filtering higit sa listahan,
mapping sa paglipas ng mga listahan, paggawa ng mga mapa function sa paglipas ng mga listahan.
At isang mabilis na paghingi ng tawad.
Ito ay isang napaka madalian at labis na mabilis na sketch
ng ilan sa mga aspeto ng Haskell at Euterpea,
kung saan ay isang domain na tukoy sa nakasulat na naka-embed wika
sa Haskell para sa musical uri.
Kaya mangyaring huwag tingnan ang code sa online.
Sunog up GHCI, na kung saan ay ang Glasgow Haskell Compiler Interpreter.
At Kukunin ko ay ang paggawa ng ilang ng mga ito sa ilang sandali
sa gayon maaari mong makita kung paano ito gawin.
>> At ito ay nagbibigay-daan sa iyo upang i-load sa sa the-- ang syntax ay colon at pagkatapos ay
ang utos.
Maaari mong i-load sa mga file.
Maaari mong gamitin ang browse sa mga file upang makita ang lahat ng mga function na
umiiral sa isang partikular na module.
At pagkatapos ay bilang namin makita, mga uri at uri mga klase ay kaya mahalaga sa Haskell,
sa gayon maaari mong check-- palaging lalo kung ikaw ay nagtatrabaho sa isang bagong DSCL
tulad nito, kung ano ang isang uri ng musika?
Alam ko ang tungkol sa mga paraan numeric uri ng trabaho sa Haskell,
ngunit hindi magkano ang tungkol sa musika ko alam.
Ngunit maaari mong galugarin ang mga paraan na ang mga ito na tinukoy sa pamamagitan ng paggamit na ito t o uri ng command
at pagkatapos ay pagtawag sa isang partikular na function o isang data object.
CONNOR HARRIS: Oo.
Kung naisip mo C at Clang ay hardass tungkol sa mga uri,
wala kang ideya tungkol sa Haskell.
Ang magandang bagay tungkol Haskell ay na kung maaari mong makuha ang iyong code sa sumulat ng libro
at kung type Haskell tseke, marahil ito ay karapatan,
dahil ang uri ng sistema ay kaya mahigpit.
>> STEPHEN KREWSON: Oo.
Kaya gusto ko lang pumunta through-- at muli,
ito ay hindi ginagawa ito justice-- ng ilang sa ang mga tampok ng Haskell na, hindi bababa sa
upang creators-- nito at ito ay nilikha sa huli 1980s sa pamamagitan ng isang grupo ng mga tao,
isang komite ng mga 20 Akala people-- ay mahalaga.
At ang unang bagay na kanilang na nakalista sa isang papel na
inilarawan sa simula ng Haskell sa loob ng unang 20 taon o kaya
ay na ito ay tamad.
Kaya kung ano ang ibig sabihin nito?
>> Well, ang ibig sabihin nito kapag kami ay may ilang mga uri sa pagpapahayag ng damdamin, kailangan namin upang suriin ito.
At Haskell Ginagawa ito sa isang tawag sa pamamagitan ng kailangan na paraan o sa isang di-mahigpit na paraan.
Iyon ay, kung kami ay may isang bungkos ng mga mga bahagi ng aming pagpapahayag,
subukan namin upang antalahin ang pagsusuri mga subcomponents
hanggang sa ganap na huling minute-- iyon ay hanggang talagang kailangan namin ang mga ito.
>> Kaya ito means-- na kung saan ay talagang cool na, lalo na
kung pinag-iisipan namin ang tungkol sa abstraction ng isang musikal step sequencer.
I-on mo ito sa, at simulan mo pagpapatakbo ng isang hakbang sequence--
kung ikaw ba nagtrabaho sa isang drum machine-- at ito lamang ay pumunta sa habang panahon.
Kaya magiging talagang maganda kung tayo ay tularan na sa Haskell.
At maaari naming gawin ito na may walang hangganang mga halaga, sa mga partikular na mga walang katapusan na mga listahan.
Ito ay tunay madali na mag-type ng isang walang katapusan na listahan sa Haskell.
Maaari mo lamang gamitin ang syntax pababa dito, kung saan nakikita mo ang 1 hanggang 3,
alisin ang 3 1 dot dot, at iyon ay isang walang-katapusang listahan
ng lahat ng mga natural na mga numero ng pagpapalawak on tulad ng maaari mong isipin.
>> Gusto kong ipakilala ang isang konsepto ng mga kulungan kaagad.
At muli, ang layunin ng seminar na ito ay hindi
upang malaman ang tungkol kulungan sa Haskell o mas mataas function order.
Ngunit Gusto ko lang ipakilala ito sa magbigay ng isang tumpak na pananaw kung ang kakaibang
Haskell ay at kung paano malakas na ito.
At sa partikular, kami ay pagpunta sa be-- kapag ginagawa namin ang aming iba't-ibang bahagi drum,
kami ay pupunta sa pagmamanipula ng mga listahan ng mga numero, natitiklop ang mga ito papunta sa bawat isa.
At upang gawin iyon, ipapakita namin ay gumagamit ng mga mapa at mga kulungan.
>> May isang tamang-uugnay kulungan ng mga tupa, na kung saan ay ang isang ito karapatan
here-- 1 minus ang dami, 2 minus ang dami, 3 minus 0.
At ang syntax para sa isang fold, magbibigay sa iyo ng fold
basehan ng halaga at pagkatapos ay isang operation-- sa kasong ito, karagdagan o pagbabawas.
Ipinapakita ko na parehong kaso.
At pagkatapos ay may isang nagtitipon na accumulates sa buong listahan,
nag-aaplay na operator plus o minus, at pagkatapos ay magtamo ito.
Kaya ito ay magiging the-- kung ito ay tinatawag na may fold r plus ng 0, na nagsisimula sa 0,
Gusto namin pagkatapos sum ang lahat ng ang mga numero sa listahan.
At iyon ang isang listahan mula 1 hanggang 3.
CONNOR HARRIS: So ilagay ito sa ibang paraan, fold r tumatagal ng tatlong argumento.
May isang function na mismo ay tumatagal ng dalawang argumento,
pagkatapos ay may isang halaga ng starter, at mayroong isang listahan ng mga halaga.
At ano ang gagawin mo ay magdadala sa iyo starter halaga, unang halaga,
ilagay ang mga ito sa function.
Ano ang makukuha mo sa labas, tumagal na, feed na
sa pag-andar ng second na halaga, kung ano ang iyong makakuha ng out,
tumagal na, feed na papunta sa function ng ikatlong halaga.
At pagkatapos ay kung ikaw ay pupunta pababa ito buong listahan sa ganitong paraan,
ikaw ay pagpunta upang makakuha ng sa huli ilang isahan halaga na
ng parehong uri ng kung ano ang iyong sinimulan out sa at ng parehong uri
bilang mga bagay sa listahan, at pagkatapos ay iyon ang return resulta ng R. fold
STEPHEN KREWSON: So sa partikular, ang mga ito ay mas mataas na pag-andar order,
dahil ito ay ang pagkuha ng isa pang function na bilang isa sa mga argumento.
>> CONNOR HARRIS: Oo.
Kung nagamit mo na ang ilang mga iba pang languages-- alam ko R, [hindi marinig]
Wala ang wikang ito, na tinatawag na Bawasan.
Maaari mong magkaroon ng katulad na pag-andar sa iba pang mga wika, na tinatawag lamang
iba't ibang bagay.
>> STEPHEN KREWSON: At kung ano ang magaling tungkol fold R
sa pagkakataong ito ay na fold R ay maaaring gumana sa mga walang katapusan na mga listahan.
Kaya sa ibaba, ito P5 ay ang pagbuo ng mga tala na
ay naka-on sa hakbang sequencer para sa ilang drum ng bahagi, ang ika-limang drum bahagi,
at marahil ito ay isang conga dram o isang bagay.
At ito ay isang sadyang mahina ang isip ng paraan ng pagsulat na ito,
ngunit ito ay masaya, dahil ito ay nagpapakita ng maraming
ng mga bagay-bagay tungkol sa Haskell at Euterpea.
>> Kaya fold R ng colon-- colon ay lamang ng isang operator na tinutulak bagay
magkasama sa isang list-- tinatawag sa walang lamang listahan, na kung saan ay lamang ang walang laman na mga braket.
At ako ng pagtawag na na ito sa mga walang katapusan na listahan.
Ito ay talagang dalawang mga listahan pinagsama-sama dito sa ibaba.
Ang listahan 1 comma 6 dot tuldok ay 1, 6, 11, 16.
Kaya Haskell-- sa loob lamang ng ilang mga character, ikaw
maaaring bumuo ang buong pagkakasunod-sunod ng numero
na ang limang mga numero ng sandata lumalawak sa sa kawalang-hanggan.
At prepend ko sa na ito mas maikli maliit list--
3, 8, 21-- upang ipakita sa iyo kung paano maaari mong pagdugtungin list.
>> At pagkatapos mo ako nakatiklop sa mismo.
At ito ay nauuwi sa pagiging lamang ng isang uri ng operasyon identity, ngunit ito ay walang hanggan.
At fold R maaaring gawin na, dahil ito lazily sinusuri, tulad ng sa itaas.
Kung kami ay may isang 1 at 2 at 3, maaari naming bracket lang off ang buong natitirang bahagi ng ito.
Iyon ay hindi gagana para sa minus o plus, ngunit ito
gagana para sa colon operasyon identity sa listahan.
>> Kaya paano talaga naming gamitin na kung tayo magkaroon ng isang walang hanggan mahabang listahan ng mga bagay na ito?
Well, Haskell nagbibigay isang pulutong ng mga functions--
at tumingin pa sa mga in iyong sariling time-- tulad ng tumagal
na nagsasabing, OK, hindi namin pagbuo ng walang katapusan na listahan,
ngunit lamang namin ang pagpunta sa tumagal ng ilang bilang ng mga ito At sa ganitong case--
kami ay makita ito sa ibang pagkakataon sa aming drum machine code--
Gm ay ilan lamang uri ng global variable para sa bilang ng mga hakbang
sa sequencer.
Sa machine roll-in ako ay nagpakita sa iyo, na ang karaniwang 16,
ngunit kami ay ipinatupad ko ito sa 32.
Ito ay hindi talagang mahalaga.
>> Haskell ding dalisay, sa gayon ito ay may malakas na static na pag-type na Connor tinutukoy.
Kaya function ay mathematical sa sense--
ang mga ito ay mas mathematical na sila ay garantisadong
upang hindi ma-access o baguhin ang anumang uri ng variable o magsagawa ng input o output.
Kaya kung mayroon kang isang function, ito ay deterministic.
Ito ay palaging bumalik sa parehong halaga sa estado ng programa
o mananatiling pareho.
May, siyempre, monadic eksepsiyon sa mga ito, ngunit iyan ay lampas sa aming mga nasasakupan.
>> CONNOR HARRIS: Oo.
Ano ang ibig sabihin nito, bagaman, ay mayroong mga ilang mahalagang [hindi marinig]
kahihinatnan ng mga ito.
Ang isa ay na ito ay tunay madali upang parallelize Haskell programs.
Dahil kung mayroon ka, sabihin, ang isang function ng na
pangangailangan upang gumana sa isang milyong mga halaga, kung Alam mo ba na ang pag-andar ay palaging
ibigay ang parehong halaga kung feed mo sa isang tiyak na value--
kung ikaw [hindi marinig] f ng 1 mo, f ng 2, pagkatapos f ng 3 o whatnot-- f ng 1
ay hindi pagpunta upang isulat ang sa isang file o gawin ang isang bagay
na baguhin ang halaga ng F2.
Maaari mo lamang maghiwalay ang function na ito sa isang milyong iba't ibang machine o isang milyong
iba't-ibang mga thread o anumang, makakuha ng lahat ng kasagutan sa likod,
makakuha ng lahat ng mga halaga ng pagbabalik likod, at pagkatapos na ito.
Kaya mas madali upang parallelize bagay.
>> Ang downside ay input na at output lalo
magkasya sa uri ng sistema sa napaka-komplikadong paraan.
Hindi namin pumunta sa na sa ngayon, ngunit ko Hinihikayat ka upang tingnan ang ilang mga mapagkukunan
online kung gusto mong malaman ang tungkol sa na.
>> STEPHEN KREWSON: So type classes-- at ito
was-- klase ng mga uri ay likha upang malutas
isang problema ng operator labis na pasanin.
Kaya gusto naming magkaroon ng pagkakapantay-pantay pagitan ng iba't ibang mga uri ng mga bagay-bagay.
Siyempre, maaari naming isipin of-- pagkakapantay-pantay sa pagitan numeric uri
Napakadaling mag-isip tungkol sa, ngunit ano ang tungkol sa pagkakapantay-pantay sa pagitan ng mga listahan?
Ano ang tungkol sa pagkakapantay-pantay sa pagitan ng puno data leg istruktura?
At ito ay ang lahat ng posibleng sa Haskell dahil sa klase ng uri.
>> Kaya kung tinukoy mo ang isang tiyak na type-- data at dito, ang mga ito ay musical pag-alok.
Sa wakas Kami ay nakakakuha sa ilang mga computer na musika.
Kaya kami C, C matalim, at iba pa.
Nabibilang sila sa isang grupo ng mga iba't ibang klase ng uri.
EQ-- pag-aari nila ang uri EQ class.
Ito ay nangangahulugan na sila ay sumusuporta sa operations pagkakapantay-pantay.
Kaya maaari mong suriin kung ang isang pagkakasunod-sunod ng musical primitives
ay ang parehong bilang ng iba.
>> Nabibilang sila sa ORDINAL class.
Ito ay nangangahulugan na may isang pag-order sa mga ito.
D dumating pagkatapos C. C matalim pagdating pati na rin pagkatapos C.
Nabibilang sila sa klase ipakita, na nangangahulugan na maaari nilang
ipi-print sa isang console o terminal.
Nabibilang sila sa klase inisa-isa, na
nangangahulugan na kahit na ang mga ito ay mga character,
mayroon silang isang batayan numeric representasyon simula sa 0
at pagpunta off sa pamamagitan gayunpaman maraming bagay ang narito, 20 o kaya,
o 30 o 40, marahil.
>> CONNOR HARRIS: At kapag kami ay may isang uri ng data
na derives-- sa keyword na iyon "deriving--" sa isang tiyak na klase ng uri,
ito ay nangangahulugan na ang tagatala ay susubukan upang awtomatikong bumuo ng isang bagay.
Kaya marahil ay gusto ninyong tukuyin ang isang kalidad na naiiba.
Makikita mo nais na tukuyin C matalim bilang katumbas ng D flat, halimbawa.
Gamit ang construction dito, Hindi sa tingin ko C matalim
at D flat ay katumbas, dahil awtomatikong ang tagatala ay
sabihin sa bawat iba't ibang mga posibleng halaga ay naiiba mula sa bawat isa.
>> Kaya ito ay posible na i-override ang default na pagpapatupad
sa mga uri ng mga klase.
Muli, tingnan ang reference kung gusto mong malaman ang tungkol sa na.
STEPHEN KREWSON: At dito, talaga, ito idedetalye
maging kapaki-pakinabang para sa kapag ang code namin mamaya.
Nakikita natin ang ilan sa mga itanim operator para sequential komposisyon,
parallel komposisyon, at iba pa, mga plus at pantay-pantay na mga palatandaan
napapalibutan ng tutuldok.
Iyon ay nangangahulugang maaari naming i-play ang mga iba't-ibang musical primitives isa pagkatapos ng isa.
Iyan ay sequential komposisyon.
>> O maaari naming i-play ang mga ito sa kahanay sa parehong oras.
Kaya ang maaari kong magkaroon ng isang halaga musical, at pagkatapos na ito ay katumbas ng at tutuldok,
itanim parallel komposisyon operator, at i-play ang mga ito bilang isang uri ng chord.
At kami ay pagpunta upang gamitin ang ito kapag pinagsama natin
aming drum bahagi sa aming maliit Frere Jacques kanta
upang i-play ito ng dalawang mga pagkakasunud-sunod ng mga musical halaga sa parehong oras.
>> Currying is-- Curry ay huling na pangalan ng Haskell Curry, na
ang Haskell imahe ay pinangalanang matapos.
At ito ay nagbibigay-daan sa amin ng isang gandang gilas kapag kami ay
pagsulat ng lahat ng mga iba't-ibang function o mga filter na hindi namin
magiging mapping sa paglipas ng aming mga listahan.
Ang isang function ng dalawang arguments-- f ng x at y--
maaaring kinakatawan bilang f ng x inilapat sa y.
Kaya ito ay isang function ng isang argument na nagbabalik
isa pang pag-andar ng isang argument.
Kaya ito ay nangangahulugan na maaari naming i-map ang isang function f ng x sa ibabaw ng listahan ng y ni.
CONNOR HARRIS: Gusto mong magbigay ng isang halimbawa ng mga ito?
STEPHEN KREWSON: Oo.
Mayroon akong isang halimbawa dito mula mismo sa ilan sa mga bagay kami magsulat.
Kaya ginagaya 2-- rin, magtiklop ay magdadala
isang halaga, na kung saan ay kung gaano karaming beses sa magtiklop ang isang bagay,
at pagkatapos ay aabutin ng value-- karaniwang isang listahan o isang bagay.
Kaya dito, hindi namin mapping magtiklop 2 sa ibabaw ng isa pang listahan.
>> Kaya kung mapa namin ginagaya 2, kung ginagaya namin 2-apply
sa unang elemento ng list-- at ang mga ito ay mga listahan ng mga musical phrases--
ay gumawa ng dalawang ng "sleeping-- iyo" kaya ikaw ay natutulog, natutulog ka.
Kaya ngayon kami ay may dalawang.
Ngunit magtiklop ay tumatagal ng dalawang arguments, ngunit dahil hindi namin
currying at pagkatapos ay paggawa ng mga mapa, maaari naming kumatawan magtiklop 2
bilang pagiging ibinalik bilang isang katangian ng isa argument-- lang Kinokopya dalawang beses.
At pagkatapos ay nag-aaplay namin na sa bawat elemento ng listahan na ito ng mga parirala.
>> At concat ay isang Haskell operasyon para sa pagyupi isang listahan.
Dahil magtiklop 2 kalooban gumawa ng isang listahan ng mga listahan.
At ito ay ang intermediate form dito.
At kaya pagkatapos ay maaari naming concat o patagin na out nang dalawang beses.
CONNOR HARRIS: Isang simple halimbawa ng currying,
kung gusto mo like-- isipin f ay lamang ng isang pagpaparami function na tumatagal ng dalawang
argumento at nagbabalik ng kanilang mga produkto.
Kaya kung mayroon kang isang f 4 5, ito ay 20.
Ngunit maaari mong isipin na ito bilang also-- mayroon kang isang function f 4
na tumatagal ng isang argument at nagbabalik apat na beses na ito argument-- lamang
bahagyang application na lamang ng isang argument 4.
At kung ikaw feed f ng 4 5, na ay magbibigay sa iyo ng 20.
At iyon ay isang mas simple halimbawa ng currying.
Ito ay karaniwang ang isa sa mga iyan textbook.
>> STEPHEN KREWSON: Lambda expression o hindi kilalang function
ay isa pang Haskell tatak ng kadalisayan.
Kaya kung kailangan namin upang gumawa ng isang maliit na function buhay magtiklop,
ngunit sabihin ito ay wala sa ang standard na library,
Maaari naming gamitin ang isang syntax katulad ng mga sumusunod.
At kami na simoy sa paglipas ng ito.
Ang isang bagay na makikita mo ang isang pulutong ng sa drum machine ay ginagawa namin tawag
sa isang bagay na tinatawag na i-filter, na tulad ng dati,
ay isang mapping ng isang function higit sa isang listahan, ngunit ito ay
isang pagmamapa ng isang Boolean function.
>> Kaya kami dito ng isang halimbawa ng isang isang hindi nagpapakilala
tinukoy Boolean function na Ito lamang ay tumatagal ng ilang mga halaga.
Ito ay hindi mahigpit na nagsasalita sa isang hindi nakikilalang function.
Ngunit ito ay tukuyin ang may na syntax para sa kaiklian,
at ito lamang ay tumatagal ng x module n--
CONNOR HARRIS: Oo.
Kaya f ay isang function ng dalawang argumento n at p
na nagbabalik ng isang function na ay ang sarili isang function ng isang argument, katulad x.
STEPHEN KREWSON: I nabanggit itanim operator.
Ano itanim operator?
Well, itanim operator ay ang mga normal na paraan ay kumakatawan sa aming mga pagpapatakbo,
sabihin, sa mathematics-- 2 plus 2 sa halip ng operator plus
at pagkatapos ay dalawang argumento 2 at 2.
CONNOR HARRIS: Ito ay tinatawag baligtarin polish notation, na kung saan ay
isang kataga duda ako mayroon sa inyo na malaman.
>> STEPHEN KREWSON: Kanan.
Baligtarin polish o prefix notation.
Ngunit nagpasya Haskell sa gamitin itanim operator.
Kaya ang mga ito ay ilan sa mga ang pasadyang mga na
ay tinukoy para sa Euterpea DSCL sa Haskell.
Kaya ito ay sequential komposisyon.
Ito ay parallel komposisyon, at ito ay pinuputol parallel komposisyon.
At kami ay kailangan na sa aming drum machine,
dahil gagamitin namin ang huling operator sa maliit tuple doon
maglaro ng drum machine kasama sa aming Frere Jacques song.
At ang aming drum machine ay magiging walang hanggan.
Ito ay gumaganap lamang magpakailanman.
Ngunit ang Frere Jacques kanta ay hindi.
Ito ay hindi na mahaba.
Ito ay lamang ng ilang mga bar.
Kaya kailangan namin upang ihinto ang drum machine bilang Sa sandali na ang mas maikling musical halaga ay dumating
sa isang dulo.
At na infixed operator ay sobrang helpful sa mga iyon.
>> At itanim notation tulad ito ay uri ng nice,
dahil sabihin nating mayroon kang isang function tulad ng quote, na kung saan ay nagbibigay sa mga integer division
ng x sa pamamagitan ng isang bagay else-- Paumanhin, na dapat ay isang at b.
Maaari kang sumulat ng mga ito bilang isang quote ng b.
Kaya't kung ikaw put-- elemento ay isa pang halimbawa ng mga ito.
x na sangkap sa ilang mga listahan, kung inilagay mo ito sa Backticks, maaari mong gamitin ito.
Kahit na ito ay hindi isang simbolo tulad ng plus o minus o beses,
maaari mong gamitin ang pangalan ng isang function na tulad nang sa Backticks
bilang itanim operator, na kung saan ay medyo cool.
CONNOR HARRIS: Muli, ito ay lahat lamang sintaktik asukal, talaga.
Hindi nito naaapektuhan ang core ng wika.
>> STEPHEN KREWSON: Kaya nakikita natin dito para sa huling parirala ng aming Frere Jacques song,
Nilalaro ko ang ilang mga maliit na chords o thirds gamit ang parallel na komposisyon
operator.
Ito ay isa pang paraan ng sinasabi ng ilang ng kung ano lamang namin ay sinasabi namin.
Kaya maaari mong i-map function ng isa argument sa listahan.
CONNOR HARRIS: Muli, ang mga sanggunian para Haskell-- pambungad aklat-aralin
ay magkakaroon ng lahat ng mga ito sa loob nito.
>> STEPHEN KREWSON: Kaya narito ang isang pretty key line ng step sequencer
kami ay kumuha ng isang pagtingin sa gamit isang listahan ng intindi.
At nakita namin dito ay sangkap na sa takdang operator sa quotes likod.
Kaya kung x ay isang elemento ng listahan ng mga x, at pagkatapos ay makikita tumawag up namin perc function.
Kaya perc ay lamang ng isang percussion function.
Ito ay tumatagal ng ilang mga halaga p iyan ay bahagi ng bounded hanay ng lahat ng
ang iba't ibang mga tunog percussion na nakita natin sa isang naunang slide,
at pagkatapos ito ay nagbibigay na tagal ng isang isang-kapat na nota.
Iba Pa ito ay nagbibigay ito ng isang QNR, at QNR ay lamang ng isang sangkapat pahinga.
>> Kaya ito ay gusali up ng isang bagay nice.
Kami ay may isang listahan ng mga sangkap na ito, at bibigyan namin ng loop sa paglipas ng ilang mga listahan mula sa isang
to the max na halaga ng aming step sequencer.
At kapag hindi namin sa isang partikular na i in na listahan ng isa sa max na halaga,
kung na i ay isang miyembro ng mga ito nilikha sa function na ito set,
well, pagkatapos ay i-namin ito sa isang percussion note.
Kung hindi man, i-play lamang kami ng pahinga, kung saan sa mga sinasabi, mananatiling lamang namin tahimik.
At maaari naming makita dito na sa ito listahan intindi syntax,
x ay populated na sa pamamagitan ng ito list na itinayo sa isa
sa pandaigdigang sukat ng sequencer.
CONNOR HARRIS: Oo.
Ang mga pangunahing syntax para sa comprehensions listahan ay
bracket, ang halaga na kinasasangkutan ang ilang mga variable, bar,
posibleng halaga ng variable kanilang sarili, nakasara bracket.
At kung nagawa mo na i-set notation builder nasa anumang uri ng matematika klase,
maaari mong na-set 2 n tulad na ang n ay sa o sa n nasa z.
Katulad thing-- pagtatanda na ito ay sinadya upang maging pasaring
ng na notation sa matematika.
STEPHEN KREWSON: At maaari mong ilapat ang maramihang mga predicates
at mga maramihang mga filter sa isang listahan intindi, na kung saan ay lubos na nice.
Algebraic types-- namin hindi nagtatagal mahaba dito.
May hindi isang magandang ideya sa Haskell o ng isang magandang, halata paniwala
ng kung paano kumuha ng, sabihin nating, isang default parameter sa isang function o isang bagay.
Sa Python, ito ay medyo madali.
Maaari mo lamang sabihin na may katumbas sa deklarasyon ng function,
isang default na halaga sa none kaso ay ibinibigay.
>> Sa Haskell, maaari mong marahil gamitin siguro ang siguro type,
na kumukuha ng alinman sa wala o ng isang halaga ng type lang a.
Kaya pagsamantalahan namin ito sa drum machine na nagpapahintulot sa amin upang magbigay ng mga opsyonal na volume
parameter sa bawat isa sa mga bahagi drum.
Kaya na nagbibigay sa amin ng isang paraan ng pagkakaroon ng EQ o isang lakas ng tunog sa isang partikular na channel.
>> CONNOR HARRIS: In iba pang mga Haskell halimbawa,
maaari mong makita ang marahil na ginagamit para sa mga function na ito ay maaaring mabibigo.
Ito ay isang pangkaraniwang isa.
>> STEPHEN KREWSON: At maaari mong supply ilang uri ng mga error na mensahe bilang default.
At iyan ay partikular na madaling gamitin kapag ikaw ay gumagawa ng I / O sa Haskell.
Iyon ay maaaring maging tricks.
CONNOR HARRIS: O para sa isang katulad halimbawa, sa tingin
ng isang function na nagsasangkot ng dibisyon ng isang parameter na ito ay maaaring maging 0.
At na function na maaaring bumalik marahil kahit na ano.
Kaya kung walang division sa pamamagitan ng 0, ito ay babalik kahit anong lamang.
At kung may division sa pamamagitan ng 0, ito ay babalik sa wala
bilang isang paraan ng pagbibigay ng senyas ng error.
Dahil isa kinahinatnan ng Masyadong mahigpit na pag-type Haskell
ay na walang real-- eksepsiyon ay mahirap, talaga,
paghawak ng error ay hindi akma.
At ito ay isa sa tunay karaniwang paraan ng paggawa nito.
>> STEPHEN KREWSON: Kaya ngayon kami makakuha ng sa isa pang isip-baluktot na bagay
tungkol sa Haskell, na kung saan ay pattern pagtutugma at pag-andar sa mga kahulugan.
Ipinakita ko sa inyo sa mga huling slide ang deklarasyon ng mga hakbang na pagkakasunod-sunod
function, na kinuha ng isang siguro na halaga, pagkatapos ay isang int, at pagkatapos ng isang listahan ng mga ints,
pagkatapos ay nagbabalik ng isang pagkakasunod-sunod ng mga halaga ng musika may annotation
may parehong mga pitch at lakas ng tunog.
>> Kaya mga tatlong argumento ay maaaring maging tumugma sa sumusunod na paraan pattern.
At kami ay laging nais na maging sigurado na gawin ang isang base kaso o exit kaso.
At ang mga underscore Maaari lamang bigyang-kahulugan
na nangangahulugan na ang anumang halaga na doon.
Kaya kung makuha namin ang isang tawag sa hakbang sequence may ilang mga halaga, ang ilang iba pang mga halaga,
at pagkatapos ay ang walang laman na listahan, kung ano ang gusto namin upang bumalik lamang katahimikan, isang pahinga 0.
>> At sa halip na na pagiging isang walang laman na listahan o 0,
ito ay isang natitirang 0, dahil hindi namin pakikitungo sa mga uri ng musika,
at ang walang laman na listahan ng musika type lamang ang natitira sa walang duration.
Ito ay walang musika.
At pagkatapos ay nakita namin kung makuha namin ng isang hakbang pagkakasunud-sunod sa isang v para argument lakas ng tunog,
p para sa instrumento iingat argument, at pagkatapos ng isang listahan ng mga x ni.
>> Pagkatapos gawin namin ang ilang mga bagay-bagay.
Sa partikular, mag-apply namin listahang ito unawa,
at magsagawa ng namin ang ilang mga operasyon sa siguro halaga
upang buksan ito sa isang numerong halaga sa gayon ay ito ay maaaring pagkatapos ay inisa-isa at ginagamit
upang piliin ang mga instrumento.
Muli, ito ay isang maliit na bit sadyang inconcise
upang ipakita lamang ang lahat ng mga kakaiba mga bagay maaari mong gawin sa Haskell bilang ka
tingnan ang mga ito sa iyong sariling oras.
>> Lahat tama.
Kaya kami ay sa wakas pagkuha sa gawin kung ano ang aming set out na gawin,
na kung saan ay gumawa ng ilang mga computer na musika.
Kaya kami ay pagpunta sa subukan upang gawin ang Frere Jacques song.
Kaya may mga gaano karaming parirala sa Frere Jacques?
Four.
Great.
At kung ano ang magaling na lahat sila ay paulit-ulit na
sa parehong halaga ng mga beses, na kung saan ay dalawang.
>> Kaya kami ay may apat na mga parirala bawat paulit-ulit ng dalawang beses.
At sa partikular, ang mga ito ay sa isang round.
At doon ay marami, maraming mga paraan upang ipatupad
isang ikot na maaaring maging masaya na gawin.
Ginawa ko na ito sa isang pretty simpleng paraan dito,
na kung saan ay lamang na construct-- linya function na tumatagal ng isang listahan ng mga halaga ng musika
at lumiliko ito sa sequential komposisyon sa pamamagitan ng paglalapat na sequential komposisyon
operator.
>> At pagkatapos ay antalahin ko ang iba't-ibang bahagi sa pamamagitan ng paggawa ng mga ito magsimula sa isang pahinga.
Kaya sisimulan ko na may isang natitirang bahagi ng dalawang hakbang, at pagkatapos ay isang natitirang bahagi ng apat na hakbang,
at pagkatapos ng pahinga ng anim na hakbang, at pagkatapos ay ang pag-ikot
gumagana, dahil alam namin ang lahat ng kanta na ito.
Nakakakita kami ng dalawang mga anotasyon o pagbabago ng mga halaga ng musika
na nakapaloob sa ito sequential aayos ng mga elemento ng musika.
Kami ay may isang dami ng add.
Ito ay isang function upang i-annotate ng musika sa isang partikular na lakas ng tunog.
Ito ay isang magandang halimbawa ng isang tumatakbong MIDI signal
0-127, ang pitong mga piraso ng impormasyon na maaaring isinasagawa.
>> At then-- nakita natin ito masyadong sa madaling sabi, ngunit ang pangkalahatang MIDI
listahan ng lahat ng iba't ibang instrumento.
At doon ay hindi isang buong pulutong ng mga ito.
Kung gumamit ka ng isang digital audio workstation, tulad Ableton Live o Tools Pro,
mayroong isang hindi kapani-paniwalang mas malawak na hanay ng synthesizers at VST instrumento.
Ngunit ang mga karaniwang Midi lamang ay may ilang, o ilang dosena.
At ang ilan sa kanila ay nakakatawa.
Akala ko magiging masaya kung kami nag-play ang mga instrumento ng Midi instrumento
helicopter, at pagkatapos ay ang susunod na paraan sa pamamagitan ng pag-ikot,
ginawa namin ang isang pad synth, at pagkatapos ng ito mabutil humantong square wave synth,
at pagkatapos ay boses ng tumagas, na kung saan ay isang Medyo malabo sa aking masamang MIDI
synthesizer, ngunit sila OK.
>> At pagkatapos ay nakita namin na ito ay hahayaan at sa syntax mula sa Haskell,
at pagkatapos kami ay naglalaro ang lahat ng mga bahagi ng magkasama
may parallel komposisyon operator.
At maaari naming malamang na ipakita ang ilan sa mga ito.
Narito ang code.
At makikita mo sa C, may gusto maging isang pulutong ng lalamunan clearing at setting
talahanayan ng code bago mo ay maaaring gumawa ng music tulad nito.
O anumang iba pang programming wika, gusto mong malamang
kung makipag-ugnay sa ilang mga uri ng aklatan o API at itakda ang lahat ng bagay up,
at pagkatapos ay gusto may upang linisin ang.
Ngunit dito sa Haskell ay, tingin ko, sa sandaling kumuha ang hang ng mga ito, hindi kapani-paniwalang
nababasa at napaka makahulugan.
Kaya doon ay ang pagpapatupad ng Frere Jacques.
Lahat tama.
Ngayon gusto naming idagdag percussion, at ito ay isang maliit na bit Messier.
Kaya sabihin kumuha ng isang pagtingin sa mga slide.
Kaya ang malaking ideya ay upang gumawa ng grupo ng mga listahan o mga bahagi.
Sa mga machine roll-in, may ay karaniwang tungkol siguro walong
hanggang 10 ritmo o percussion bahagi.
At pagkatapos ay gamitin ang isang bungkos ng mga diskarte.
At kami uusapang tungkol these-- gamit kulungan, filter, lambda function,
nakamapang sa paglipas ng mga listahan upang bumuo ng mga halaga sa ilang mga hanay na 1 hanggang r, r ay 16,
o 32 hakbang sa sequencer.
>> At pagkatapos ay kung may isang halaga na sa listahan bilang kami ay tumatakbo sa pamamagitan ng sequencer,
tumatakbo sa pamamagitan ng ito sa loob at sa ibabaw, ito ay lumiliko sa na tala,
at sample na maipo-trigger.
Narito ang lahat ng iba't ibang mga kakaibang paraan Ako ay dumating sa upang bumuo ng mga tala.
Subukan ito sa iyong sariling mga semi sum.
Makikita ito tunog cool.
Oras na nagpapahintulot, kami ay pumunta sa pamamagitan na ito.
Ngunit para sa ngayon, ako hulaan dapat naming demo kung ano ang mayroon kami.
Tayo'y umaasa na ito ay napupunta OK Hayaan.
>> Kaya ito ay GHCI.
At kami na mag-load ng file Mayroon akong tinawag song.lhs,
kung saan ay ang file na lang ako nagpakita sa iyo.
OK, malaki.
Tulad ng mas maaga sinabi Connor, ito pinagsama-sama, ito type naka-check,
kaya ang maaari kong huminga ng maraming mas madali.
Ito ay hindi pagpunta sa pumutok sa akin.
>> Ko nais na ipakita sa iyo ang isang bagay na kapaki-pakinabang.
Maaari mong makita na ang isang module load tinatawag 50.
Maaari mong i-browse ang module na iyon.
At ito ay kaya maganda tungkol doing-- siguro kung ano
ang iyong ginagawa sa Haskell ay hindi tinatawag na pag-unlad ng software,
ngunit maaari mong gawin ang isang pulutong ng nakakatuwang bagay sa inyong sarili.
At ang workflow ay talagang maganda bilang kumpara sa isang pulutong ng iba pang mga wika,
dahil maaari mong makita sa isang talagang nababasa paraan kung ano ang nangyayari sa.
Kaya makikita natin na mayroon kami lahat ng mga parirala, kung saan
ay mga listahan ng mga pag-alok ng musika, at pagkatapos namin bumuo ng mga up sa isang bagay na mas malaki,
na kung saan ay isang awit ng musika.
Ito ay isang yunit ng musical.
At pagkatapos ay maaari naming i-play ang lahat ng ito may isang function na tinatawag na pag-play ng musika.
Maaari mong makita na pababa dito.
Na kung saan ay i-play lamang.
>> Dapat kong say-- Hindi ko makipag-usap tungkol ito dollar sign na sa lahat ng dako.
Dollar sign ay isa pang itanim operator.
Ngunit ito ay ang pinakamababang mauuna ng anumang operator, na epektibong
ay nangangahulugan na ang lahat ng bagay sa sa kaliwa ng dollar sign
at ang mga karapatan ng dollar sign, kami ay pagpunta upang makakuha ng sinusuri bago ito.
Kaya ito ay uri ng tulad ng iba pang paraan ng pagdaragdag ng panaklong.
>> CONNOR HARRIS: Ito ay isa lamang function na komposisyon.
At ito ay nagsisiguro na hindi mo have-- kung ikaw ay may mga pag-andar magkabilang gilid o itanim
operator sa magkabilang panig, ang mga ito ay hindi iugnay sa kabuuan nito at bigyan ka ng
hindi inaasahang resulta.
>> STEPHEN KREWSON: So can-- namin gamit na, maaari naming tawagan.
Una, kakailanganin naming i-play ito nang walang drums.
Iyan ang helicopter, mga MIDI helicopter.
>> [MUSIC nagpe-play]
Mayroong ang square wave.
Ang tinig dumaloy.
At maaari mong talagang pumunta sa wild ito.
Ako pumili ng isang pretty simpleng isa, dahil alam ko na hindi ko dapat kumagat off
marami sa kaya kong ngumunguya.
Lamang panatilihin ito medyo simple upang ipakita ang mga pangunahing ideya.
Ngunit pagkatapos ay ako ay tulad ng, na namin Nakakuha upang magdagdag ng ilang drums na ito.
Dahil lang sa ito ay isang Medyo hindi malalampasan,
at hindi ko alam gamitin ang pangalan ng mga bahagi drum,
Nakamapang ako them-- dahil ang mga ito bahagi ng na enumerated class,
Nakamapang ko sa kanila na ints.
Ang isa ay tulad ng isang bass drum.
Zero ay pati na rin.
Pitong ay isang mataas na sumbrero.
At pababa sa dito kung saan ang function makakuha ng kaunti pa random,
ang mga ito ay tulad ng conga drums.
>> Kaya kung sa tingin mo about-- marahil isang masaya na paraan upang ipatupad ang isang drum machine
ay ang paggamit ng tunay maayos pattern sa iyong bass drum.
Kaya halimbawa, sa pag-filter sa ibabaw ng listahan ng lahat ng bagay na nagbibigay sa likod
isang 1 kapag ito ay kinuha module 04.
Kaya kumuha ako ng 1, 5, 9, 13, 17-- kaya ito ay ang unang matalo ng bawat hakbang.
>> At pagkatapos na ito ay ang parehong bagay Paglipat sa loob ng dalawang hakbang.
Kaya iyon ang offbeat.
Kaya ito ay magiging isang bagay tulad ng isang mataas na sumbrero.
At pagkatapos ay muli, down dito, ito ay isang maliit random,
dahil ang aming ginagawa conga drums.
At ako ay may ilang mga maracas down dito, masyadong.
>> Kaya maaari kong tumawag sa drum machine play, ngunit ito ay pumunta sa magpakailanman,
at maaari na itong magsimula daklot up lahat ng memory sa aking system.
Kaya Tatawag ako ng function na ito play ng musika, na kung saan ang bilang namin makita,
gamitin ang truncating parallel komposisyon upang i-play ang aming maliit Frere Jacques kanta
kasama ang mga ito kakaiba drum machine.
Kaya sabihin tumagal ng isang pagtingin.
At mangyaring huwag mapabuti sa aking pag-aayos ng lahat ng mga bahagi drum.
Hindi ang aking specialty, ngunit ako nagkaroon ng maraming masaya paggawa nito.
>> [MUSIC nagpe-play]
>> Kaya ng mga kurso, ito ay ang lahat ng Medyo hindi na masaya
kapag hindi namin na-convert ito sa isang puntos kaya marahil ito
maaaring bigyang-kahulugan sa pamamagitan ng isang tao kumanta.
Kaya ako ay hindi tatakbo ito dito.
Kayo ay nakagawa na nabuo ko ang file.
Maaari mong makita na mayroong isang dot LilyPond file-- at ito
ay higit sa aking segue sa Connor-- at isang tuldok MIDI file,
at isang tuldok PDF file, na kung saan ay kung ano ang LilyPond ay ganap na bumuo.
>> Ngunit ang mga ito ay ang mga script, at idedetalye ko lamang tumakbo ang mga ito sa kanilang mga pagpipilian sa tulong.
Kung makuha na ninyo ang mga up at tumatakbo sa Euterpea, maaari kang bumuo ng isang Midi file.
At pagkatapos ay mula sa MIDI file na may ganitong MIDI 2LY program,
maaari kang bumuo ng isang Lily Pond file, at pagkatapos ay sa iyo
maaaring bumuo ng isang PDF ng score.
At tayo ay dapat kumuha ng isang pagtingin sa ito.
Kaya Connor ay malamang na ipakita sa iyo kung paano i-annotate ito ng mas mahusay,
ngunit ito ay Frere Jacques bilang binuo sa pamamagitan ng sa akin sa Euterpea.
Ito lang sa C. ang dapat kong magkaroon ng korte kung ano ang sumibak ito ay sa tunay na.
Ngunit iyon ay mga tubo para sa kung paano mo gawin iyon na iyon.
Makipag-usap nang higit pa tungkol LilyPond Hayaan.
>> CONNOR HARRIS: Tingnan natin OK Hayaan.
Banggitin mo ba Ikaw Dagdagan Haskell?
STEPHEN KREWSON: Oh oo.
Tingnan Matuto kang Haskell.
Ito ay sa mga resources.
Iyon ang dahilan kung paano ako nagsimula pag-aaral, at ito ay mahusay.
Hindi pipi aaral.
>> CONNOR HARRIS: Kaya ito ay online.
Kaya ang isang tao na may pangalang [hindi marinig] learnyouahaskell.com, walang mga puwang.
Grammar ay may sakit.
STEPHEN KREWSON: Ito ay isinalarawan, masyadong.
CONNOR HARRIS: Kaya kung ano ang LilyPond?
Ito ay isang paturol programming wika para sa typesetting music.
Kaya declarative-- maaari mong mag-isip ng mga bagay tulad ng HTML,
kung saan ikaw ay hindi saying-- HTML Hindi sinasabi kung paano web browser ay dapat na
render pahina hakbang-hakbang.
Sinasabi Ito lamang ito ay isang paglalarawan textual
ng kung ano ang nais mo ang pahina sa hitsura.
>> At pagkatapos ito ay din ng isang programa na compiles ang wikang ito,
o ito basahin sa kanyang at pagkatapos ay talagang gumagana ang typesetting para sa iyo,
at ito spits out ang mga ito kahanga-hangang naghahanap score PDF.
Maaari ka ring makakuha PNG format o anuman.
Ang isang mahusay na paraan upang isipin ng mga ito ay sa pamamagitan ng pagkakatulad
ay na LaTeX ay uri ng tulad LillyPond, ngunit para lamang ordinaryong pampalimbagan.
Kaya sa halip of-- ito ay hindi WYSIWYG, Ano Tingnan mo
Ay Ano Kumuha ka, tulad ng, sabihin Finale ay, o Sibelius,
o Microsoft Word, kung saan maaari mong i-type sa tunay na oras at draft bagay sa real time
at makita ang mga pagbabago agad.
>> Ito ay batay text.
Mayroon kang upang itala ang iyong marka ng paggamit ng isang hiwalay na programa
at lumabas ang mga PDF sa ibang pagkakataon.
Ito ay mas mababa ng kaunti maginhawa para sa paggamit kung ikaw ay
sumusubok na magsulat ng direkta sa isang puntos at ikaw ay
sinusubukan mong gumawa ng sulat sa computer.
Ngunit may isang pulutong ng mga pakinabang para sa mga ito.
One, ito ay ang hitsura ng isang pulutong nicer, dahil LillyPond maaaring aktwal
maglaan ng oras upang gawin layout desisyon ng maayos,
hindi katulad ng Sibelius o Finale, na kung saan ay may upang gumawa ng mga nakompromisong algorithm upang
na maaari nilang ipakita mga bagay-bagay sa real time.
>> Kaya bakit LilyPond-- computer graphics ay mahirap.
Kung ikaw ay gumagawa ng anumang bagay na may musika at nais mong isulat ang mga marka,
hindi mo nais na magsulat ang lahat ng bagay sa iyong sarili
na nagsisimula sa kung paano gumuhit staffs at kung paano gumuhit ng notepads.
Ito ay lubhang mahirap. Ito ay nagawa bago.
Ikaw ang fine.
>> Kung nais mong gamitin ang Finale o Sibelius, ang mga format ng file para sa mga bagay-bagay
ay masyadong kumplikado, at hindi ka maaaring talagang gamitin ang mga ito ng programming.
Maaari mong buksan up Sibelius sa Finale at pumunta sa File, I-export bilang PDF sa iyong sarili,
ngunit hindi ka maaaring talagang tumawag na mula sa isang script.
LillyPond, maaari kang tumawag mula sa mga script.
Maaari mong madaling umulit LillyPond sa LaTeX.
Hindi ako ay magkakaroon ng maraming oras upang pumunta sa mga teknolohiyang ito sa ngayon,
ngunit sila ay umiiral.
Kung nais mong tingnan ang sa isang LillyPond book,
ito ay isang programa na nanggagaling sa iyong pamamahagi LillyPond,
at ito ay para iterating LillyPond fragment sa LaTeX
kung gusto mong gawin ang isang bagay tulad ng isang malaking dokumento musicology
may mga halimbawa, halimbawa.
At ito ay isang mahusay na kasanayan para sa buhay kung ikaw ay gumagawa ng anumang bagay
gamit ang musika, hindi CS50 lamang.
Ginagamit ko na LillyPond para sa lahat sa aking mga proyekto komposisyon
dahil ako ay isa lamang senior sa mataas na paaralan.
>> Kaya narito ang ilang mga simpleng halimbawa.
Ito ay isa lamang na kinatawan ng antas ng kahirapan
na ang karamihan sa mga tao na gusto mukha ito sila ay sinusubukan
gamitin LilyPond para sa simpleng mga proyekto.
Ang unang isa ay ang simula sa isang chorale pagpapakilala sa pamamagitan ng Bach.
Ito ang isa sa ibaba ang isang sipi mula sa isa sa aking mga gawa,
at ito ay doon lamang upang ipakita ka ng mga bagay tulad ng [hindi marinig]
paglagay ng maramihang mga linya sa parehong mga kawani, kung paano lyric gumagana undersetting.
Lyric underlays ay isang bagay na masyadong madaling gamitin LilyPond para koro musika.
>> At kaya pagkatapos ay may ilang mga mas kumplikado halimbawa dito.
Lahat ng ito ay tapos na sa LilyPond at sila hindi magagawa.
Ang unang sipi ay mula sa [Hindi marinig] sa pamamagitan ng [hindi marinig].
At ito [hindi marinig] mula isang piraso para sa solo bass
flute pamamagitan [hindi marinig], sino ang isang longtime-- na
ay isang matagal nang miyembro ng department musika dito, tingin ko.
Hindi ako sigurado kung saan siya ay nawala off sa.
Ngunit siya ang tagapayo ng Harvard Composers Association para sa isang mahabang panahon.
Kahanga-hangang tao.
At magsusulat siya ng ilang musika na may tunay kumplikado notasyon na LillyPond
gayunman ay maaaring hawakan sa lalong mabuti.
>> Kaya lamang upang mabigyan ka ng isang katinuan kung ano kakayahan ang bagay na ito ni are-- kaya
internals ng LillyPond ay masyadong kumplikado.
At maaari mong gamitin ito para sa sa isang mahabang panahon, kabilang ang
para sa ilang mga medyo kumplikado mga bagay-bagay, na walang tunay
hindi na malaman ng maraming tungkol sa mga ito.
Ngunit ang mga pangunahing ideya ay na sa pinakamababang antas, ang mga atom ng LillyPonds
ang mga tala.
Maglaman ang mga tala ng isang context na tinatawag na boses.
Kaya ang tinig konteksto talaga ay tumutugon
sa isang solong linya ng polyphony.
At pagkatapos ay ang konteksto ay maaaring maging nakapaloob hierarchically
mas mataas na mga antas na kumakatawan staffs sa puntos
o mas malaki pagpapangkat tulad piano staffs o koro staffs,
at pagkatapos ay sa wakas buong iskor konteksto.
At maaari mong aktwal na pumaligid maramihang mga marka sa isang libro.
>> At sa bawat konteksto ay may isang bilang ng mga naka-attach engravers.
Kung tumingin ka sa pamamagitan ng mga nilalaman ng isang konteksto
at i-print ang isang tiyak na simbolo o ng isang tiyak na uri ng mga simbolo tulad ng kinakailangan.
Kaya sa bawat tinig konteksto, mayroong [hindi marinig] tala
ukit na ay karaniwang isang function o isang bagay na nagsusulat out ang lahat ng mga tala
ulo sa kanang bahagi ng isang pahina.
Pagkatapos ay mayroong isang bitak-ukit, kung saan nagsusulat out bitak sa mga kawani.
Pagkatapos ay may isang metronom mark-ukit na
nagsusulat out metronome marka sa isang puntos.
At ang lahat ng magkasya pretty rin sa hierarchy.
At ito ay tunay, tunay, tunay nako-customize na, na kung saan kailangan mo
kung gusto mong makakuha ng mga bagay na tulad ng.
>> Kaya ang lahat ng mga konteksto ay may isang maraming iba't ibang mga katangian
na maaari mong baguhin sa lahat ng bagay mula sa spacing sa iba't-ibang mga font
pagpili sa mga sukat ng mga bagay-bagay.
Kung nais mong gawin kahit na bagay na mas kumplikado,
may isang naka-embed scripting wika.
Gumagamit sila ng pamamaraan, na ay diyalekto ng pagkabulol.
Ang mga malamang na hindi ibig sabihin kahit ano sa inyo.
Pero talaga, sa isang scheme isa pang functional
programming language, mas marami o mas kaunti.
>> STEPHEN KREWSON: Ang kurbatang-in.
>> CONNOR HARRIS: Oo.
Ito ay isang magandang itali-in, ipagpalagay ko.
At ito ay ginagamit bilang isang pagtuturo ng wika, talaga, down Mass Ave. Sa MIT.
At ito ay tunay magaling para LillyPond para sa iba't-ibang mga teknikal na dahilan.
>> At kaya kung nais mong gumawa ng mga simpleng mga pag-aayos na nakasalalay sa conditionals,
para example-- mayroong tiyak kalagayan ng isang marka na nakilala,
gumawa ng mga pagbabago sa layout o whatnot-- pagkatapos
mga facility doon.
Ang mga ito ay kumplikado.
Kaya narito ang isang magandang simpleng code sample.
Ito ay limang linya.
Talaga, ako pagtukoy ng dalawang tungkod.
Ito ay sa 3/4.
May isang Ang unang staff nakalakip tempo mark,
ngunit na ang aktwal na pagpunta upang pumunta sa sa buong score,
dahil tempo marks ay nasa antas ng kalidad.
Ang metronome mark-ukit ay naka-attach sa iskor na konteksto.
Mayroong iba't ibang mga susi, dahil ang [hindi marinig] ukit
ay naka-attach sa mga staffs.
Maaari mong talagang gawin ay.
Ang sample na sinulat ko ay talagang sa C major,
ngunit ito lamang sa ipakita maaari kang magkaroon ng
iba't-ibang mga pindutan sa iba't ibang mga staffs.
At ang basic syntax ay mong isulat tandaan mga pangalan sa E, F, G, ano man.
Kung nais mong gawin accidentals, hulapi mo AY o ES.
Ito ay mula sa Dutch musicological balarila.
>> At upang gawin octave leaps, kailangan mong gamitin ang mga tick mark, comma o kudlit.
Kamag-anak Ang lamang ay nangangahulugan kahit anong mayroon ka ng isang tala,
ito ay awtomatikong plaec sa oktaba pinakamalapit sa ang nakaraang isa.
At kung gusto mong tumalon higit sa isang fifth-- sabihin ang ikalimang o more--
pagkatapos ay kailangan mong gamitin ang [hindi marinig].
Ngunit kung hindi man, hindi mo na kailangang tukuyin ang octave ng bawat isang note.
>> At kamag C, kalakasan, at C, tukuyin mo lamang middle C
at base C, lalo na unang tala.
Pagkatapos ay mayroon kang mga staffs na maisaayos ang dalawang tinig o mga halimbawa ng musika,
at ikaw ay may isang puntos.
At na ganito ang hitsura.
>> Kung nais mong maglaan ng panahon upang kopyahin na sample ng LillyPond
code sa nakaraang slide down dito, at ikaw ay
maaaring isulat ito para LillyPond iyong sarili.
Alam ko namin nakuha ng isang bagay na hitsura ng maraming tulad nito.
Kaya may isa pang teknolohiya tinatawag XML Music pinananatili
sa pamamagitan ng ganap na naiibang mga tao.
XML ay isang textual data structure-- ko hindi dapat sabihin data structure-- sabihin
talinghaga sort mapa ng.
At ito ay dinisenyo upang i-hold hierarchical data nang mahusay.
HTML, halimbawa, ay isang uri ng XML.
At maaari mong sabihin XML dahil sila Nagkaroon ang lahat ng mga anggulo bracket at anggulo
bracket slash marks na patlang show data.
>> Hindi ko magkaroon ng isang code halimbawa mula sa Music XML.
Maaari mong mahanap ito sa iyong sarili.
Karaniwang, ang dahilan baka gusto gamitin ang XML bilang ang intermediate yugto
ay, una sa lahat, ito ay isang format interchange
para talaga every-- hindi ko dapat sabihin bawat, ngunit isang pulutong ng mga iba't ibang mga puntos
manunulat.
Kaya't kung ikaw ay sumulat sa Musika XML, hindi lamang maaaring LillyPond
basahin ito sa tulong ng mga ito auxilary programa na tinatawag na Musika XML na LY,
ngunit maaari ring basahin Finale ito, maaaring basahin ito Sibelius.
Depende sa kung paano ang iyong panloob na object gumagana hierarchy para sa kumakatawan sa musika,
ito ay maaaring maging mas madaling isulat out sa Music XML kaysa sa LillyPond
at umasa lamang sa Music XML sa LY para gawin ang mga conversion.
>> Hindi sa tingin ko [hindi marinig] Wala Music XML.
STEPHEN KREWSON: Ito ay hindi.
Ang isang tao ay nagtatrabaho sa mga ito, kahit na.
>> CONNOR HARRIS: OK.
Euterpea hindi magkaroon ng isang Music XML output pa function.
Kung nais mo ng isang pangwakas na proyekto ideya, siguro makipag-ugnay sa isang lalaki
na nakakaalam si Esteban, at sila ay maaaring gamitin ang iyong tulong.
>> STEPHEN KREWSON: Gusto ko ibig na iyon.
CONNOR HARRIS: Gayundin, talaga, bawat programming languages
na nagkakahalaga ng kanyang asin ay mayroon ng isang XML library,
para makita mo ang panloob convert ang lahat ng ng iyong musika sa ilang mga bagay
na ang XML library ay maaaring sumulat out na nangangailangan ng mas kaunting
babaguhin sa iyong panloob na istraktura para sa kahit anong bagay ka ng musika
nais na magsulat sa pagsulat ito direkta sa LillyPond gusto.
Pagkatapos i-print lamang ito sa mga XML na may ang XML aklatan sa inyong wika,
na kung saan ay garantiya na ito ay syntactically tama at lahat ng bagay,
at pagkatapos ay i-convert ito sa LillyPond.
Kaya technology maaari mong tumingin sa kung ikaw ay gumagawa ng isang bagay
ganito.
>> [Hindi marinig], ang isa pang auxilarry teknolohiya.
Ito ay isa lamang Tech Works o Tech Studio para LillyPond.
Kaya ito ay nag-aalok ng tulong sa syntax, na may mga template
para sa iba't ibang mga karaniwang mga kumbinasyon ng mga instrumento.
Ito ay nagpapahintulot sa split screen sa pagtingin kaya Maaari kang magkaroon ng iyong code sa isang window
at PDF sa ibang window at mag-click sa mga lugar sa PDF
upang lumaktaw sa mga may-katuturang spot sa iyong source code.
Ito ay mas kapaki-pakinabang kung ikaw ay talagang pagsulat LillyPond file sa iyong sarili
kaysa sa kung ikaw ay pagbuo ng ang mga ito ng programming.
Ngunit muli, ito ay isang bagay na kapaki-pakinabang na magkaroon.
>> Great.
Isa pang resources-- kukunin ko na lang pumunta sa pamamagitan ng masyadong mabilis.
LillyPond manuals LillyPond ay mahusay na dokumentasyon sa website nito.
Mayroon silang isang tutorial.
Sila ay may isang reference syntax.
Sila ay may daan-daang mga snippets para sa iba't-ibang maliliit na bagay
Maaaring kailanganin yo gawin upang ipakita ang iba't-ibang mga kakayahan.
Kung nais mong gamitin ang ang scripting wika
o gumawa ng mas malawak na mga pagpapasadya, pagkatapos ay mayroong
internals isangguni sa URL na iyon.
Kung nais mong gamitin ang Music XML, may na URL, musicxml.com/tutorial.
>> At pagkatapos ay kung kailangan mong matuto scheme dahil ang tunay na nais na gumamit ng
ng mga pasilidad scripting in LillyPond, pagkatapos ay mayroong isang tinatawag na [hindi marinig]
Nakabalangkas Interpretasyon ng Programa ng Computer,
na kung saan ay hindi lamang ang pangalawang pinakadakilang CS textbook kailanman written--
mahanap ako pagkatapos kung nais mong malaman kung ano sa tingin ko ang pinakamalaking isa is--
ngunit ito ay isang napakahusay na din pagpapakilala sa wika tamang.
Hindi mo na kailangan ng higit sa ang unang ilang mga seksyon.
>> At na ito.
May tanong?
>> MAG-AARAL: Saan ko maaaring i-download iyong binuo Frere Jacques
kaya ko bang ilagay sa aking iPod?
>> STEPHEN KREWSON: Well, maaari mong isulat out sa ilang mga wav file sa Euterpea.
At mayroon ka ng code.
Ito ay sa GitHub.
Gumawa ng iyong sariling mga pagkakaiba-iba ng Frere Jacques pamamagitan CS50 isip pugad.
Ito ay magiging malaki.
CONNOR HARRIS: Kahit sino pa?
STEPHEN KREWSON: Kailangan namin isang mas mahusay na bass drum, masyadong.
Ito ay ganap na hindi maayos.
>> MAG-AARAL: Euterpea ay hindi lamang gilid komposisyon, ngunit signal--
STEPHEN KREWSON Oo.
Sa katunayan, ang gawa ko ginawa sa Euterpea kapag ako
Kinuha this-- mayroong isang graduate course sa Yale na
ay gumagamit ng it-- ay sa sound synthesis.
Kaya doon ay isang tunay na magandang paraan ng paggamit ng mga arrow
at ang ilan sa pagtatanda ng nakita natin ng aakda magkasama function signal.
Sa partikular, ang bass para sa karamihan ng mga ito ay lamang ng isang simpleng sine wave.
Ngunit kung sinimulan mo ang pagbuo ng mga sa kakaibang programmatic paraan,
maaari kang makakuha ng mabaliw tunog effects, tulad ng kakaibang cascades.
Maaari kang lumikha ng napaka-magaspang tunog na may isang pulutong ng modulasyon.
>> Ako ay isang proyekto sa butil-butil synthesis, na kung saan ay
saanman sa pagitan ng FM at sampling.
Kumuha ka ng maliit, maliit na mga halimbawa, at pagkatapos ay
pagsamahin ang mga ito na may ilang mga uri ng moduleitor at bumuo ng isang mas mayamang tunog.
Ginawa din kami ng pisikal na modeling, kaya sinusubukang mag-isip tungkol sa physics
at psychoacoustics ng isang bagay tulad ng pakakak, at ang pag-iisip tungkol sa mga paraan
ang tunog ay nagba-bounce off ang kampana ng trumpeta
at ang acoustics ng ang mga kuwarto at modeling
na may mga pangunahing oscillators.
CONNOR HARRIS: Salamat kaya magkano.
Salamat sa pagpunta.
At ako ay laging handa na kumuha ng mga katanungan sa pamamagitan ng email--
connorharris@college.harvard.edu.
>> STEPHEN KREWSON: Oo. stephen.krewson@yale.edu.
Cool.