CONNOR Harris: Hi.
Ek is Connor Harris.
Ek is 'n CS50 CA by Harvard.
STEPHEN KREWSON: Ek is Stephen Krewson.
Ek is 'n TF vir CS50 by Yale.
CONNOR Harris: En ons gaan om te praat oor 'n paar tegnologie wat jy dalk
wil gebruik as jy belangstel doen 'n finale projek of werklik
enigiets met musiek.
Ons gaan fokus op die eerste 'n programmeertaal genoem Haskell.
Dit is 'n funksionele taal, sodat die paradigma
is baie verskillend van C of PHP of ander noodsaaklik tale
wat jy reeds gebruik het, en veral op 'n biblioteek geskryf in Haskell
genoem Euterpea, wat mense kan help met die skryf van musiek funksioneel,
basies.
En Stephen sal loop jy deur 'n groot voorbeeld.
>> Na hierdie, sal ek jou bekend te stel aan iets genoem LillyPond, wat
is 'n tegnologie vir setwerk musiek.
Dit is soort van soos LaTeX musiek indien enige van julle
het LaTeX gebruik word vir wiskunde klasse of ander P stel klasse of wat jy het.
En so sal ek aan julle gee, weer, 'n paar eenvoudige voorbeelde van die
en wys wat jy in die algemene rigting van 'n paar beter hulpbronne.
>> STEPHEN KREWSON: In Daarbenewens het ons gedink dit
sou cool wees om die opstel wees 'n bietjie van wenke
na 'n pypleiding tussen -Euterpea gegenereer MIDI-lêers
in LillyPond, sodat ons 'n opdrag op die skrifte
daardie wat doen voorsien LillyPond
net om dit open source hou en kry 'n pypleiding gaan.
CONNOR Harris: Weereens, Ons moet beklemtoon,
hierdie twee tegnologie, jy nie om hulle te gebruik.
Hulle is nie ontwerp om te werk saam, al is hulle baie mooi.
>> STEPHEN KREWSON: Right.
En heeltemal gratis.
CONNOR Harris: So erkennings, lees net dat.
STEPHEN KREWSON: Behoorlik opgemerk.
Danksy dié mense.
Dit sal ek vertoef op die net vir 'n oomblik.
Die installasie proses is 'n bietjie bietjie lastig.
Ons het 'n lees my op die GitHub dat jy 'n blik op kan plaasvind.
Net my e-pos as jy enige vrae het.
Maar ons sal hierdie hardloop onder die aanname dat dit werk vir almal.
CONNOR Harris: En as jy nie kan nie kry LillyPond om te werk, geen groot deal.
Daar is geen live samestelling wat betrokke sal wees, ten minste op my einde.
STEPHEN KREWSON: Haskell en LillyPond moet albei installeerders.
Euterpea afgelaai as 'n pakket, so aan en so voort.
So ons praat oor die rekenaar musiek.
En dit is net 'n baie 50.000-voet oog.
Daar is 'n paar verskillende aspekte van dit.
En dit is rof en is gaan 'n paar detail verduister.
Maar ons kon dink aan iets soos algoritmiese komposisie,
met behulp van algoritmes, die gebruik van kode te genereer
'n soort of-- miskien 'n self-soortgelyke volgorde van note, of dalk notas
onder 'n beperking.
En dan diegene wees verrig of geïnterpreteer
met analoog instrumente of iets soos dit.
Maar die samestelling was algoritmies gedoen.
>> Maar natuurlik, miskien is die gebied van die rekenaar musiek of digitale musiek
ons is meer vertroud met digitaal klank sintese of digitale sampling
en digitale opname.
Daar is baie van digitale instrumente gedoen deur middel van digitale steekproefneming.
In werklikheid, sal ons met een van dié in die vorm van 'n gesonde font biblioteek later.
>> Maar daar is ook iets genoem digitale sintese wat uitgetrek het,
van die laat 70's en in die 80's met Yamaha en John Chowning by Stanford
doen FM sintese of Frekwensiemodulasie sintese,
waar jy 'n draer het sein en 'n modulasiesein
beide in die klank spektrum.
Maar wat ons gefokus op vandag is iets genoem MIDI,
en natuurlik, algoritmiese komposisie.
>> Ons gaan nie om instrumente te maak, maar ons plaas gaan 'n paar musiek te maak,
en dan wat sal kry geïnterpreteer deur sommige instrumente wat
is conformant die algemene MIDI standaard.
So, wat is MIDI?
Ek is nie van plan om te diep in dit, maar MIDI is data-oordrag protokol.
Dit is 'n soort van 'n gids oor verskillende maatskappye en nywerhede
vir die organisering van klanke of kolle.
So ons sal sien dat daar is 'n MIDI standaard
vir al die verskillende perkussie klanke en MIDI aanbevelings
vir al die verskillende tipes synth of verskillende tipes al die instrument
groepe in 'n orkes, sê.
>> Is jy waarskynlik vertroud met 0 127 deur MIDI boodskappe.
A MIDI sein is tipies 'n bietjie aan te dui
of dit 'n data of 'n status pakkie, en dan is daar
sewe stukkies van 'n sein.
En dit kan beheer alles van volume
om die aksie of druk op 'n spesifieke sleutel
as jy die verrigting met 'n MIDI kontroleerder asook, natuurlik,
notas.
En natuurlik, MIDI het was uiters nuttig,
want dit is 'n manier om die draad saam of daisy chain
'n klomp van MIDI hardeware toestelle.
Ek het sewe of agt terug by my huis.
Dit raak ingewikkeld, maar dit is werklik 'n kragtige.
En dit is regtig oud.
Dit is uit die vroeë 80's, en dit is regtig mooi en klein.
CONNOR Harris: Ja.
Al die klassieke Nintendo video speletjies sou waarskynlik
het MIDI-lêers vir musiek, byvoorbeeld.
>> STEPHEN KREWSON: Hier is 'n voorbeeld van algemene MIDI,
wat as 'n soort MIDI algemene protokol.
En ek dink ons ​​kan dink van die verskil tussen die spesifikasie
dat daar iets soos moet wees hierdie instrument klanke en die werklike
verwesenliking van die instrumente klink in 'n gesonde font of 'n bepaalde MIDI
sintetiseerder as die verskil tussen miskien 'n typeface-- wat sê
in die algemeen, is dit die ontwerp van hierdie spesifieke manier om verteenwoordig
characters-- en 'n spesifieke lettertipe wat 'n spesifieke grootte en timbre,
en daar is besef van the--
>> CONNOR Harris: Miskien is 'n beter vergelyking sou
wees die Unicode standaard says-- dit gee 'n nommer aan elke karakter, en regtig
elke taal in die wêreld, of 'n groot versameling van skrifte van taal
in die wêreld, en dan diegene is gelewer in iets grafiese
deur verskeie font pakkette.
En natuurlik, kan jy dink MIDI as die Unicode van klank.
En dit is net 'n lys of-- 'n groot stroom van gebeure en instrumente en noem maar op,
en jy het om 'n aparte het program, soos 'n lettertipe,
om te lewer wat in iets wat hoorbaar.
>> STEPHEN KREWSON: So hoekom Haskell?
Haskell is 'n funksionele programmering taal, baie gevorderde,
baie anders C, baie anders PHP.
En ons gaan om te sien dat daar 'n gemak van funksie samestelling in Haskell
wat ons sal toelaat om deur wind komponeer of tik op, transkribering,
iets soos Frere Jacques, hierdie eenvoudige liedjie wat
het 'n baie van die dele in dit wat is self-soortgelyke of herhaal.
So sal dit wees 'n paar van die motivering vir waarom
ons gebruik Haskell, waarin funksies is eerste klas burgers.
>> En ek wou uit te brei dit 'n bietjie.
Dit is 'n bietjie maklik om noteer Frere Jacques in Haskell.
Maar wat as ons wou voeg 'n drom deel dit?
Wat as ons wou probeer om iets soos 'n Roland 808 of 909 drom
masjien waar jy ongeveer 16 verskillende stappe?
Gewoonlik is hierdie gedink as 16 notas.
En jy kan beheer die globale tempo, en jy kan kies uit
'n klomp van verskillende perkussie dele van die bas drom, 'n klap, verskillende strikke,
oop en geslote hoë hoede hierdie soort van kanale,
en dan kan jy EQ of hul volume te verstel.
>> En ons sal 'n mooi manier in te sien Haskell te verteenwoordig hierdie stap
sequencer met al die verskeie koel dinge in Haskell
ons kan doen met die opwekking lyste en filter oor lyste
kartering oor lyste, kartering funksies oor lyste.
En 'n vinnige verskoning.
Dit is 'n baie oorsigtelike en té vinnige skets
van sommige van die aspekte van Haskell en Euterpea,
wat is 'n domein-spesifieke ingebed taal geskryf
in Haskell vir musikale tipes.
So moet asseblief check die kode aanlyn.
Brand GHCI, wat is die Glasgow Haskell Compiler Interpreter.
En Ek sal 'n paar doen van hierdie in 'n bietjie
sodat jy kan sien hoe dit gedoen word.
>> En dit kan jy in te laai met the-- die sintaksis is kolon en dan
die opdrag.
Jy kan laai in lêers.
Jy kan blaai gebruik op die lêers om al die funksies sien dat
bestaan ​​in 'n bepaalde module.
En dan as ons sal sien, tipes en tipe klasse is so belangrik in Haskell,
sodat jy kan altyd veral check-- As jy werk in 'n nuwe lig gebring
soos hierdie, wat is 'n soort musiek?
Ek weet oor die manier waarop numeriese tipes werk in Haskell,
maar ek weet nie veel oor musiek.
Maar jy kan die manier waarop hulle is verken gedefinieer deur die gebruik van hierdie t of tik 'n bevel
en dan roep in 'n bepaalde funksie of 'n data voorwerp.
CONNOR Harris: Ja.
As jy gedink het C en klang was hardass oor tipes,
jy het geen idee oor Haskell.
Die goeie ding omtrent Haskell is dat as jy jou kode kan kry om saam te stel
en as Haskell tipe tjeks, dit is waarskynlik reg,
omdat die tipe stelsel is so streng.
>> STEPHEN KREWSON: Ja.
So ek wil net om te gaan through-- en weer
dit is nie om dit te doen 'n paar van die justice-- die kenmerke van Haskell dat ten minste
om sy creators-- en dit is geskep in die laat 1980's deur 'n klomp van die mense,
'n komitee van ongeveer 20 people-- gedink het belangrik is.
En die eerste ding wat hulle in 'n vraestel gelys wat
beskryf die ontstaan ​​van Haskell oor die eerste 20 jaar of so
was dat dit lui.
So, wat beteken dit?
>> Wel, dit beteken as ons het 'n soort van uitdrukking, moet ons om dit te evalueer.
En Haskell doen dit in 'n oproep van behoefte manier of 'n nie-streng manier.
Dit is, as ons 'n klomp van die komponente van ons uitdrukking,
ons probeer om die evaluering te vertraag van daardie subkomponente
totdat die absolute laaste minute-- dit is totdat ons hulle werklik nodig het.
>> So hierdie means-- wat regtig cool, veral
as ons dink oor die onttrekking van 'n musikale stap sequencer.
Jy draai dit op, en jy begin hardloop 'n stap sequence--
As jy al ooit saam met 'n drom machine-- en dit gaan net vir ewig.
So sou dit regtig lekker wees as ons kon navolg wat in Haskell.
En ons kan dit doen met 'n oneindige waardes, in die besonder oneindige lyste.
Dit is baie maklik om 'n tik oneindige lys Haskell.
Jy kan net gebruik die sintaksis af hier, waar jy sien 1 deur middel van 3,
verwyder die 3 1 dot dot, en dit is 'n oneindige lys
van al die natuurlike getalle uit te brei op so ver as jy kan dink.
>> Ek wil 'n stel konsep van voue dadelik.
En weer, die doel van hierdie seminaar is nie
om te leer oor voue in Haskell of hoër funksies orde.
Maar ek wil net om dit bekend te stel aan gee 'n akkurate begrip van hoe vreemd
Haskell is en hoe sterk dit is.
En in die besonder, ons gaan be-- wanneer ons dit doen ons verskillende drom dele,
ons gaan word manipuleer lyste van getalle, vou hulle op mekaar.
En om dit te doen, sal ons wees gebruik van kaarte en voue.
>> Daar is 'n reg assosiatiewe vou, wat is hierdie een reg
here-- 1 minus die hoeveelheid, 2 minus die hoeveelheid, 3 minus 0.
En die sintaksis vir 'n vou, jy 'n vou gee
'n basis waarde en dan 'n operation-- in hierdie geval, optelling of aftrekking.
Ek het beide gevalle getoon.
En dan is daar 'n akkumulator wat ophoop oor die hele lys,
die toepassing van daardie operateur plus of minus, en dan opbou nie.
So hierdie the-- sal wees as dit genoem met vou r plus 0, wat begin met 0,
sou ons dan al som die getalle in die lys.
En dit is 'n lys 1-3.
CONNOR Harris: So om dit 'n ander plaas manier, vou r neem drie argumente.
Daar is 'n funksie wat self neem twee argumente,
dan is daar 'n voorgereg waarde en daar is 'n lys van waardes.
En wat jy doen, is jy neem voorgereg waarde eerste waarde,
sit dit in die funksie.
Wat kry jy uit neem, voer wat
in die funksie van die tweede waarde wat jy kry,
neem, te voed wat in die funksie van die derde waarde.
En dan as jy gaan af hierdie hele lys op hierdie manier,
jy gaan om uiteindelik sommige enkelvoud waarde wat
van dieselfde tipe wat jy begin met en van dieselfde soort
as dinge in die lys, en dan dit is die terugkeer gevolg van vou R.
STEPHEN KREWSON: So in die besonder, dit is hoër orde funksies,
omdat hulle met 'n ander funksie as een van die argumente.
>> CONNOR Harris: Ja.
As jy sekere ander gebruik het languages-- Ek weet R, [onhoorbaar]
taal het dit genoem te verminder.
Jy kan soortgelyke funksies in ander tale, net genoem
verskillende dinge.
>> STEPHEN KREWSON: En wat is lekker oor vou R
in hierdie geval is dat vou R kan werk met 'n oneindige lyste.
So in hierdie bodem, hierdie P5 genereer die notas wat
is aangeskakel in die stap sequencer vir sommige drom deel, die vyfde drom deel,
en miskien is dit 'n conga drom of iets.
En dit is 'n doelbewus stomp manier skryf van hierdie,
maar dit is pret, want dit blyk 'n baie
dinge oor Haskell en Euterpea.
>> So vou R van hierdie colon-- kolon net 'n operateur dat dinge stoot
saam op 'n list-- beroep op 'n leë lys, wat net die leë hakies.
En ek vra dat op hierdie oneindige lys.
Dit is eintlik twee lyste bymekaar getel hier af.
Die lys 1 komma 6 dot dot is 1, 6, 11, 16.
So Haskell-- in net 'n paar karakters, kan jy
kan die hele genereer volgorde van getalle
dat vyf nommers is uitmekaar strek oor na oneindig.
En ek prefix om daardie hierdie korter bietjie list--
3, 8, 21-- net om jou te wys hoe kan jy lyste koppel.
>> En dan het ek gevou op homself.
En dit eindig net 'n soort van identiteit operasie, maar dit is oneindig.
En vou R kan dit doen, want dit lui evalueer, soos in die bogenoemde.
As ons 'n 1 en 'n 2 en 3, wat ons kan net hakies af die hele res van dit.
Dit sal nie werk vir minus of plus, maar dit
sal werk vir hierdie kolon identiteit werking op die lys.
>> So hoe kan ons prakties gebruik dat as ons 'n oneindig lang lys van dinge?
Wel, Haskell bied 'n baie functions--
en meer in hierdie kyk in jou eie time-- soos neem
wat sê: OK, ons is genereer die oneindige lys
maar ons gaan net 'n paar te neem aantal en dit in hierdie case--
ons sal dit sien later in ons drum machine code--
GM is net 'n soort van globale veranderlike vir die aantal stappe
in die sequencer.
Op die roll-in masjiene ek het jy, dis tipies 16,
maar ek het dit geïmplementeer met 32.
Dit maak nie regtig saak nie.
>> Haskell is ook suiwer, so dit het 'n sterk statiese tik wat Connor verwys na.
So funksies wiskundige in die sense--
hulle is meer wiskundige dat hulle gewaarborg
om nie toegang tot of verander enige soort veranderlike of verrig inset of uitset.
So as jy 'n funksie het, dit is deterministiese.
Dit sal altyd dieselfde terugkeer waarde in die staat van die program
of bly dieselfde.
Daar is natuurlik uitsonderings monad ische test hierdie, maar dit is buite ons omvang.
>> CONNOR Harris: Ja.
Wat dit beteken, al is, is daar is 'n paar belangrike [onhoorbaar]
gevolge van hierdie.
Een daarvan is dat dit is baie maklik om te paralleliseer Haskell programme.
Want as jy het, sê, 'n funksie van die
om te werk op 'n miljoen waardes, as jy weet dat die funksie sal altyd
gee uit dieselfde waarde indien jy voed op 'n sekere value--
as jy [onhoorbaar] f van 1, f van 2, dan is f van 3 of whatnot-- f van 1
gaan nie uit te skryf na 'n lêer of iets te doen
wat sal die waarde van f2 verander.
Jy kan net verdeel hierdie funksie om 'n miljoen verskillende masjiene of 'n miljoen
verskillende drade of wat ook al, kry al die antwoorde terug,
kry al die terugkeer waardes terug, en dan dit is dit.
So baie maklik om dinge paralleliseer.
>> Die nadeel is dat insette en uitset veral
pas in die tipe stelsel in 'n baie ingewikkelde maniere.
Ons sal nie in daardie reg nou gaan, maar ek u aanmoedig om te kyk na 'n paar hulpbronne
aanlyn as jy wil om te leer oor dit.
>> STEPHEN KREWSON: So tik classes-- en dit
was-- klasse tipes is uitgevind om op te los
'n probleem van operateur oorlading.
So ons wou gelykheid tussen verskillende tipes van die dinge.
Natuurlik, kan ons dink of-- gelykheid tussen numeriese tipes
is baie maklik om te dink oor, maar Wat van gelykheid tussen lyste?
Wat van gelykheid tussen boom been data strukture?
En dit is alles moontlik in Haskell gevolg van die tipe klasse.
>> So as jy 'n sekere data type-- definieer en hier, dit is musikale plekke.
Ons uiteindelik om om 'n paar rekenaar musiek.
So ons het C, C skerp en so aan en so voort.
Hulle behoort aan 'n klomp van die verskillende tipe klasse.
EQ-- hulle behoort aan die tipe EQ klas.
Dit beteken dat hulle ondersteun bedrywighede gelykheid.
Sodat jy kan evalueer of een volgorde van musikale primitiewes
is dieselfde as 'n ander een.
>> Hulle behoort aan die ordinale klas.
Dit beteken daar is 'n bestel hierdie.
D kom nadat C. C skerp kom nadat C as well.
Hulle behoort tot die klas wys, wat beteken dat hulle kan
gedruk om 'n konsole of terminale.
Hulle behoort aan die klas vervat, wat
beteken dat selfs al dit is karakters,
hulle het 'n onderliggende numeriese verteenwoordiging begin by 0
en gaan af deur egter baie dinge is hier, 20 of so,
of 30 of 40, miskien.
>> CONNOR Harris: En toe ons het 'n tipe data
dat derives-- met die navraag "deriving--" 'n sekere tipe klas,
beteken dit dat die samesteller sal probeer outomaties iets te bou.
So miskien sal jy wil definieer 'n kwaliteit anders.
Jy sal wil hê om C skerp definieer as gelyk aan D plat, byvoorbeeld.
Met hierdie konstruksie hier, dink ek nie C skerp
en D plat gelyk wees, want samesteller sal outomaties
sê elke verskillende moontlike waarde is te onderskei van al die ander.
>> Dit is so moontlik om te ignoreer die standaard implementering
van hierdie tipe klasse.
Weereens, kyk na die verwysing indien jy wil om te leer oor dit.
STEPHEN KREWSON: En hier, eintlik, sal hierdie
wees nuttig vir wanneer ons later kodeer.
Ons sien 'n paar van die infix operateurs vir sekwensiële samestelling,
parallel samestelling, en so weer, hierdie plus punte en gelyke tekens
omring deur dubbelpunte.
Dit beteken dat ons hierdie verskillende speel musikale primitiewes die een na die ander.
Dit is sekwensiële samestelling.
>> Of ons kan hulle speel in parallel op dieselfde tyd.
So kan ek 'n musikale waarde, en dan is dit gelyk en dubbelpunte,
infix parallel samestelling operateur, en hulle speel as 'n soort van koord.
En ons gaan om te gebruik wanneer ons saam
ons drom deel met ons bietjie Frere Jacques lied
om hierdie twee rye speel musikale waardes op dieselfde tyd.
>> Currying is-- Curry was verlede Naam van Haskell Curry, wat
beeld Haskell vernoem is.
En dit laat ons 'n nice elegansie wanneer ons
skryf al hierdie verskillende funksies of filters dat ons
gaan kartering wees oor ons lyste.
'N funksie van twee arguments-- f van x en y--
kan word as f van x toegepas y.
So dit is 'n funksie van een argument dat terug
'n ander funksie van een argument.
So dit beteken dat ons kan karteer n funksie f van x oor lys van y se.
CONNOR Harris: wil gee 'n voorbeeld van hierdie?
STEPHEN KREWSON: Ja.
Ek het 'n voorbeeld hier uit sommige van die dinge wat ons sal skryf.
So herhaal 2-- goed, herhaal sal neem
een waarde wat hoeveel keer om iets te herhaal,
en dan sal dit 'n value-- neem gewoonlik 'n lys of iets.
So hier, ons is kartering herhaal 2 oor 'n ander lys.
>> So as ons karteer herhaal 2, as ons herhaal 2 van toepassing
om die eerste element van hierdie list-- en dit is lyste van musikale phrases--
sal produseer twee van "jy sleeping--" so jy slaap, slaap jy.
So nou het ons twee.
Maar herhaal neem twee argumente, maar omdat ons
currying en dan kartering, Ons kan herhaal 2 verteenwoordig
as mense wat teruggekeer as 'n funksie van een argument-- net twee keer replicerende.
En dan is ons die toepassing van daardie aan elke element van hierdie lys van frases.
>> En concat is 'n Haskell operasie vir plat te slaan 'n lys.
Omdat herhaal 2 wil produseer 'n lys van lyste.
En dit is hier intermediêre vorm.
En so kan ons dan concat of plat dat uit twee keer.
CONNOR Harris: 'N eenvoudiger voorbeeld van currying,
as jy wil like-- dink f is net 'n vermenigvuldiging funksie wat twee neem
argumente en keer terug van hul produk.
So as jy 'n f 4 5, dit is 20.
Maar jy kan dink van hierdie as also-- jy het 'n funksie f 4
wat neem 'n argument en opbrengste vier keer die argument-- net
gedeeltelike aansoek wat net een argument 4.
En as jy voed f van 4 5, wat sal jy 20 gee.
En dit is 'n eenvoudiger voorbeeld van currying.
Dit is gewoonlik een van die handboek kinders.
>> STEPHEN KREWSON: Lambda uitdrukkings of anonieme funksies
is 'n ander kenmerk Haskell.
So as ons nodig het om 'n sweep bietjie funksie lewe herhaal,
maar sê dit is nie in die standaard biblioteek,
kan ons 'n sintaksis gebruik soortgelyk aan die volgende.
En ons sal wind oor hierdie.
Een ding wat jy sal sien 'n baie in die drom masjien ons die maak van oproepe
om iets genoem filter, wat net soos voorheen,
is 'n afbeelding van 'n funksie oor 'n lys, maar dit is
'n afbeelding van 'n Boole-funksie.
>> Dus het ons hier 'n voorbeeld van 'n 'n anoniem
gedefinieer Boole funksie wat neem net 'n paar waardes.
Dit is nie streng gesproke 'n anonieme funksie.
Maar dit is te definieer met dat sintaksis vir bondigheid,
en dit neem net x module n--
CONNOR Harris: Ja.
So f is 'n funksie van twee argumente N en P
dat 'n funksie wat op sigself terug 'n funksie van een argument, naamlik x.
STEPHEN KREWSON: Ek Bogenoemde infix operateurs.
Wat is infix operateurs?
Wel, infix operateurs is die normale manier waarop ons bedrywighede verteenwoordig,
sê in mathematics-- 2 plus 2 in plaas van die operateur plus
en dan twee argumente 2 en 2.
CONNOR Harris: Dit is genoem reverse polish notasie, wat
'n term wat ek twyfel enige van julle sal weet.
>> STEPHEN KREWSON: Right.
Reverse polish of voorvoegsel notasie.
Maar Haskell besluit om gebruik infix operateurs.
So dit is 'n paar van die persoonlike diegene wat
gedefinieer vir die Euterpea lig gebring in Haskell.
So was hierdie sekwensiële samestelling.
Dit was parallel samestelling, en dit is truncating parallel samestelling.
En ons sal nodig het dat met ons drom masjien,
want ons sal gebruik om die laaste operateur in daardie klein tuple daar
om die drom masjien speel saam met ons Frere Jacques liedjie.
En ons drom masjien is gaan oneindig wees.
Dit speel net vir ewig.
Maar die Frere Jacques lied is nie.
Dit is nie so lank.
Dit is net 'n paar bars.
Sodat ons na die drom masjien te stop as nodig Sodra die korter musikale waarde kom
tot 'n einde.
En dat infixed operateur is super nuttig met dit.
>> En infix notasie soos dit is soort van mooi,
omdat jy sê 'n funksie soos het quote, wat die afdeling heelgetal gee
van x deur iets else-- jammer, wat moet a en b.
Jy kan dit skryf as 'n kwotasie van b.
So as jy put-- element is nog 'n voorbeeld van hierdie.
x element in sommige lys, as jy dit in Backticks, kan jy dit gebruik.
Selfs al is dit nie 'n simbool soos plus of minus of tye,
kan jy die naam van 'n gebruik funksie soos wat in Backticks
as infix operateur, wat is pretty cool.
CONNOR Harris: Weereens, dit is almal net sintaktiese suiker, regtig.
Dit affekteer nie die kern van taal.
>> STEPHEN KREWSON: So sien ons hier vir die laaste frase van ons Frere Jacques lied,
Ek het 'n paar klein akkoorde of derdes met behulp van die parallelle samestelling
operateur.
Dit is 'n ander manier om te sê sommige van wat ons het net gesê.
So kan jy die kaart funksies een argument oor lyste.
CONNOR Harris: Weereens, verwysings vir Haskell-- inleidende handboeke
sal al hierdie te hê in dit.
>> STEPHEN KREWSON: So hier is 'n mooi sleutel lyn van die stap sequencer
ons sal 'n blik op die gebruik van te neem 'n lys begrip.
En ons sien hier is dat element in vaste operateur in die rug aanhalingstekens.
So as x is 'n element van die lys van x, dan sal ons 'n beroep op slagw funksies.
So slagw is net 'n perkussie-funksie.
Dit neem 'n bietjie waarde p dis deel van die versameling van alle begrensde
die verskillende perkussie klanke wat ons gesien het in 'n vorige skyfie,
en dan gee dit dat duur van 'n kwart noot.
Anders dit gee dit 'n QNR en QNR is net 'n kwart nota rus.
>> So, dit is die opbou van iets mooi.
Ons het 'n lys van die elemente en ons sal loop oor 'n paar van die een lys
tot die maksimum waarde van ons stap sequencer.
En wanneer ons op 'n bepaalde i in dat die lys van die een na die maksimum waarde,
as dit i is 'n lid van hierdie stel geskep in hierdie funksie,
Wel, dan draai ons dit in 'n perkussie noot.
Andersins, het ons net 'n rus, speel wat is om te sê, het ons net stil bly.
En ons kan hier sien dat in hierdie lys begrip sintaksis,
x word bevolk deur hierdie lys gebou een
om die globale omvang van die sequencer.
CONNOR Harris: Ja.
Die basiese sintaks vir lys begripstoetse is
bracket, waarde wat sommige veranderlikes, bar,
moontlike waardes van die veranderlikes hulself, gesluit bracket.
En as jy versamelingskeurdernotasie gedoen het in enige soort van wiskunde klas,
jy dalk 2n sulke gestel N is in of n is in z.
Soortgelyke thing-- hierdie notasie bedoel suggestief te wees
van daardie wiskundige simbole.
STEPHEN KREWSON: en jy kan verskeie predicaten toepassing
en verskeie filters in 'n lys begrip, wat baie mooi.
Algebraïese types-- ons sal nie lank hier vertoef.
Daar is nie 'n goeie idee in Haskell of 'n goeie, duidelike idee
hoe om te neem, sê, 'n standaard parameter om 'n funksie of iets.
In Python, dit is baie maklik.
Jy kan net sê met gelykes op die verklaring van die funksie,
'n standaard waarde in geval geen voorsien.
>> In Haskell, kon jy dalk gebruik miskien die miskien tik,
wat neem óf niks of 'n waarde van net 'n soort.
Sodat ons ontgin dit in die drom masjien sodat ons opsionele volume te gee
parameters aan elk van die drom dele.
So dit gee ons 'n manier om EQ of 'n volume op 'n spesifieke kanaal.
>> CONNOR Harris: In ander Haskell voorbeelde,
jy kan sien dalk gebruik word vir funksies wat kan misluk.
Dit is 'n algemene een.
>> STEPHEN KREWSON: En jy kan lewer 'n soort van fout boodskap as 'n standaard.
En dit is veral handig wanneer jy doen die I / O in Haskell.
Dit kan wees truuks.
CONNOR Harris: Of vir 'n soortgelyke voorbeeld, dink
van 'n funksie wat verdeeldheid behels van 'n parameter wat dalk 0.
En daardie funksie kan terugkeer miskien ook al.
So as daar geen verdeeldheid met 0, dit sal net alles terug te keer.
En as daar is deling deur 0, sal dit niks terug
as 'n manier van sein die fout.
Want 'n mens as gevolg van Haskell se baie streng tik
is dat daar is geen real-- uitsonderings is ongemaklik, basies,
fout hantering is ongemaklik.
En dit is 'n baie algemene manier om dit te doen.
>> STEPHEN KREWSON: So nou kry ons na 'n ander gedagte-buiging ding
oor Haskell, wat is patroon ooreenstem en funksie definisies.
Ek het julle in die laaste skyfie die verklaring van die stap volgorde
funksie, wat 'n waarde het dalk, dan 'n int, dan 'n lys van SY,
dan terug 'n reeks van musiek waardes daar geannoteerde
met beide toonhoogte en volume.
>> So die drie argumente kan wees patroon ooreenstem in die volgende manier.
En ons wil altyd om seker te wees om doen 'n basis geval of uitgang geval eerste.
En dit onderstreping kan net geïnterpreteer
om enige waarde wat is daar beteken.
So as ons 'n oproep om te stap volgorde met 'n paar waarde, sommige ander waarde,
en dan die leë lys wat ons wil om terug te keer is net stilte, rus 0.
>> En in plaas van dat om 'n leë lys of 0,
dit is 'n rus 0, want ons is die hantering van die tipe musiek,
en die leë lys van die musiek tipe is net 'n res van geen duur.
Dit is geen musiek.
En dan sien ons as ons 'n stap volgorde met 'n V vir volume argument,
p vir voorsorgmaatreël instrument argument, en dan 'n lys van x se.
>> Dan 'n paar dinge wat ons doen.
In die besonder, ons pas hierdie lys begrip,
en ons voer 'n paar bedrywighede op die miskien waarde
om dit te omskep in 'n numeriese waarde sodat dit kan dan vervat en gebruik
om die instrument te kies.
Weereens, dit is 'n bietjie bietjie doelbewus inconcise
net om al die vreemde dinge wys wat jy kan doen in Haskell soos jy
'n blik op dit op jou eie tyd.
>> Alles reg.
So ons is uiteindelik om na doen wat ons het om te doen,
wat is maak 'n paar rekenaar musiek.
So ons gaan om te probeer om maak die Frere Jacques liedjie.
So is daar hoeveel frases in Frere Jacques?
Vier.
Groot.
En wat is lekker is dat hulle is almal herhaal
dieselfde bedrag van die tye, wat twee.
>> So het ons vier frases elke herhaal twee keer.
En in die besonder, hulle is in 'n ronde.
En daar is baie, baie maniere om te implementeer
'n ronde wat pret om te doen kan wees.
Ek het dit gedoen in 'n mooi eenvoudige manier hier
wat net die lyn construct-- funksie neem 'n lys van waardes musiek
en draai dit in opeenvolgende samestelling deur die toepassing van daardie sekwensiële samestelling
operateur.
>> En dan vertraag Ek die verskillende dele deur hulle begin met 'n res.
So ek begin met 'n res van twee mate, en dan 'n res van vier maatreëls,
en dan 'n res van ses maatreëls, en dan die ronde
werk, soos ons almal weet hierdie liedjie.
Ons sien twee notas of wysigings van die musiek waardes
wat vervat is in hierdie opeenvolgende reëling van die musiek elemente.
Ons het 'n add volume.
Dit is 'n funksie om te annoteer musiek met 'n bepaalde volume.
Dit is 'n goeie voorbeeld van 'n MIDI sein hardloop
0-127, die sewe stukkies inligting wat uitgevoer kan word.
>> En then-- ons het dit baie kortliks, maar die algemene MIDI
n lys van al die verskillende instrumente.
En daar is nie 'n hele klomp van hulle.
As jy 'n digitale klank werkstasie gebruik, soos Ableton Live of Pro Tools,
daar is 'n ongelooflike groter verskeidenheid van synthesizers en VST instrumente.
Maar die MIDI standaard net het 'n paar, of 'n paar dosyn.
En sommige van hulle is snaaks.
Ek het gedink dit sou pret wees as ons gespeel die instrument die MIDI instrument
helikopter, en dan die volgende pad deur die ronde,
ons het 'n pad synth, en dan van hierdie corny lood vierkante golf synth,
en dan stem modder, wat is 'n bietjie onduidelik op my slegte MIDI
sintetiseerder, maar hulle OK.
>> En dan sien ons hierdie laat en in sintaksis van Haskell,
En dan is ons speel al hierdie dele saam
met die parallel samestelling operateur.
En ons kan waarskynlik toon 'n paar van hierdie.
Hier is die kode.
En jy kan sien in C, sou daar 'n baie van die keel skoonmaak en omgewing
die tafel kode voordat jy kon musiek te maak soos hierdie.
Of enige ander ontwikkeling taal, sou jy waarskynlik
het om met 'n soort van biblioteek of API en alles op,
en dan sal jy het om skoon te maak.
Maar hier in Haskell is, dink ek, sodra jy kry die hang van dit, ongelooflik
leesbare en baie ekspressiewe.
Daar is so die implementering van Frere Jacques.
Alles reg.
Nou wil ons perkussie voeg, en dit is 'n bietjie morsig.
So laat ons neem 'n blik op die skyfies.
So die groot idee is om 'n klomp van die lyste of dele.
Op dié roll-in masjiene, is daar was tipies oor miskien agt
10 ritme of perkussie dele.
En gebruik dan 'n klomp van tegnieke.
En ons het gepraat oor die gebruik van these-- voue, filters, lambda funksies,
gekarteer oor lyste waardes genereer in sommige reeks 1 tot r, r is 16,
of 32 stappe in die sequencer.
>> En dan as daar is 'n waarde in die lys as ons loop deur die sequencer,
loop deur dit oor en oor, dit blyk op daardie noot,
en daardie monster kry veroorsaak.
Hier is al die verskillende maniere weird Ek het met notas te genereer.
Probeer dit op jou eie semi som.
Dit sal cool klink.
Toelaat tyd, sal ons gaan deur middel van hierdie.
Maar vir nou, dink ek Ons moet demo wat ons het.
Kom ons hoop dit gaan OK.
>> So dit is GHCI.
En ons sal 'n lêer te laai Ek het genoem song.lhs,
wat is die lêer ek jou net gewys.
OK, groot.
As Connor vroeër gesê het, dit saamgestel, tik dit nagegaan word,
so ek kan 'n baie makliker asem te haal.
Dit gaan nie om op te blaas op my.
>> Ek wou hê jy iets nuttig om te wys.
Jy kan sien dat 'n module gelaai genoem 50.
Jy kan blaai daardie module.
En dit is so lekker oor doing-- miskien wat
jy doen in Haskell is nie genoem sagteware-ontwikkeling,
maar jy kan 'n baie te doen pret dinge op jou eie.
En die workflow is regtig mooi as in vergelyking met 'n baie ander tale,
omdat jy kan sien in 'n baie leesbare manier wat aangaan.
So sien ons dat ons al hierdie frases, wat
lyste van musiek plekke, en dan sal ons bou hierdie up in iets groter,
wat is 'n musiek song.
Dit is 'n musikale eenheid.
En dan kan ons dit alles speel met 'n funksie genoem speel musiek.
Jy kan hier sien dat down.
Wat net speel.
>> Ek moet say-- ek nie praat oor hierdie dollar teken dat is oral.
Dollar-teken is 'n ander infix operateur.
Maar dit het die laagste voorrang enige operateur, wat effektief
beteken dat alles op die linkerkant van die dollar teken
en die reg van die dollar teken ons gaan om ontslae te evalueer voordat dit.
So dit is soort van soos 'n ander manier van die toevoeging van hakies.
>> CONNOR Harris: Dit is basies funksie komposisie.
En dit verseker dat jy nie have-- as jy het funksies weerskante of infix
operateurs aan weerskante, sal hulle nie assosieer daaroor en gee jou
onverwagte resultate.
>> STEPHEN KREWSON: So ons can-- die gebruik van daardie, ons kan noem.
Eerstens, sal ons dit speel sonder die tromme.
Dit is die helikopter, die MIDI helikopter.
>> [Speel van musiek]
Daar is die vierkante golf.
Die stem modder.
En jy kan regtig gaan wild met hierdie.
Ek pluk 'n mooi eenvoudige een, want ek het geweet ek moet nie byt af
meer as wat ek kan kou.
Hou dit net eenvoudig om die hoofgedagtes te wys.
Maar dan was ek wil, ons het het 'n paar dromme te voeg tot hierdie.
Net omdat dit is 'n bietjie ondeurdringbare,
en ek het nie die gebruik van die Naam van die drom dele,
Ek gekarteer them-- want hulle is deel van daardie versyferde klas,
Ek gekarteer hulle SY.
Een daarvan is soos 'n bas drom.
Zero is so goed.
Sewe is 'n hoë hoed.
En af in die hier waar funksies kry 'n bietjie meer random,
dit is soos 'n conga tromme.
>> So as jy dink miskien 'n about-- prettige manier om 'n drom masjien te implementeer
is baie ordelike gebruik patrone op jou bas drom.
So byvoorbeeld, op te filter oor die lys met alles wat terug gee
'n 1 wanneer dit geneem module 04.
So ek kry 1, 5, 9, 13, so dit 17-- is die eerste pols van elke maat.
>> En dan is dit dieselfde ding verskuif oor twee stappe.
So wat is die offbeat.
So sal dit wees iets soos 'n hoë hoed.
En hier dan weer, af, dit is 'n bietjie random,
want ons doen conga tromme.
En ek het 'n paar maracas af ook hier.
>> So ek kon speel drom masjien te roep, maar dit sou vir ewig gaan
en dit kan begin gryp up al die geheue in my stelsel.
So ek sal hierdie funksie noem speel musiek, wat as ons sal sien,
gebruik die truncating parallel samestelling om ons klein Frere Jacques liedjie te speel
saam met die vreemde drom masjien.
So laat ons neem 'n blik.
En moet asseblief verbeter op my plasing van al die drom dele.
Nie my spesialiteit nie, maar ek het 'n baie pret om dit te doen.
>> [Speel van musiek]
>> So natuurlik, dit is alles 'n bietjie nie as pret
As ons nie kan dit omskep om 'n telling so miskien is dit
vertolk kan word deur 'n menslike performer.
So sal Ek dit nie hier te hardloop.
Ek het reeds gegenereer die lêers.
Jy kan sien dat daar 'n dot LilyPond file-- en dit
sal my segue oor wees om Connor-- en 'n dot MIDI-lêer,
en 'n dot PDF-lêer, en dit is wat LilyPond sal uiteindelik genereer.
>> Maar dit is die skrifte, en ek sal hulle net loop met hulle hulp opsies.
As jy dit op en hardloop met Euterpea, kan jy 'n MIDI-lêer te genereer.
En dan van die MIDI-lêer met hierdie MIDI 2LY program,
jy kan 'n Lily genereer Dam lêer, en dan moet jy
kan 'n PDF van die telling op te wek.
En ons moet 'n blik op te neem.
So Connor sal waarskynlik wys hoe om dit beter te annoteer,
maar dit is Frere Jacques as deur my gegenereer in Euterpea.
Dit is net in C. Ek moet uitgepluis uit te vind wat die hack dit is eintlik in.
Maar dit is die pyplyn vir hoe jy dit met dit te doen.
Kom ons praat meer oor LilyPond.
>> CONNOR Harris: OK Kom ons kyk.
Het jy noem jy leer Haskell?
STEPHEN KREWSON: O ja.
Check jy leer Haskell.
Dit is in die hulpbronne.
Dit is hoe ek begin leer, en dit is 'n groot.
Nie dom leer.
>> CONNOR Harris: So is dit aanlyn.
So 'n man met die naam [onhoorbaar] learnyouahaskell.com, geen spasies.
Grammatika is siek.
STEPHEN KREWSON: Dis geïllustreerde ook.
CONNOR Harris: So, wat is LilyPond?
Dit is 'n verklarende programmeertaal taal vir musiek setwerk.
So declarative-- jy kan dink dinge soos HTML,
waar jy nie sê om HTML nie sê hoe webblaaiers moet
lewer bladsye stap vir stap.
Dit is hierdie net sê is 'n tekstuele beskrywing
van wat jy wil hê dat die bladsy te lyk.
>> En dan is dit ook 'n program wat stel hierdie taal,
of dit sy in lees en dan eintlik doen die setwerk vir jou,
en dit spoeg hierdie wonderlike soek PDF tellings.
Jy kan ook PNG formaat of wat ook al.
'N goeie manier om te dink hiervan is deur analogie
is dat LaTeX is soort van soos LillyPond, maar net gewone setwerk.
So in plaas of-- dit is nie WYSIWYG, wat jy sien
Is wat jy kry, soos, sê Finale is, of Sibelius,
of Microsoft Word, waar jy kan tik in reële tyd en die ontwerp dinge in reële tyd
en kyk veranderinge onmiddellik.
>> Dit is die teks gebaseer is.
Jy moet jou opstel tellings met behulp van 'n aparte program
en uit PDFs later.
Dit is 'n bietjie minder gerieflik vir gebruik as jy
probeer om direk te skryf in 'n telling en jy
probeer om te komponeer op die rekenaar.
Maar daar is 'n baie voordele vir dit.
Een, lyk dit 'n baie mooier, omdat LillyPond kan eintlik
die tyd neem om te doen uitleg besluite behoorlik,
teenstelling Sibelius of Finale, wat het om gedrang algoritmes te maak sodat
dat hulle kan vertoon dinge in real time.
>> So hoekom is LilyPond-- rekenaargrafika is hard.
As jy iets met musiek doen en jy wil tellings uit te skryf,
jy wil nie om te skryf alles deur jouself
begin met hoe om te trek personeel en hoe om te trek notaboeke.
Dit is baie moeilik. Dit is al voorheen gedoen.
Jy is fine.
>> As jy wil Finale of Sibelius gebruik, die lêer formate vir die dinge
is baie ingewikkeld, en jy kan nie hulle regtig programmaties gebruik.
Jy kan oopmaak Sibelius met Finale en gaan na File, Uitvoer as PDF jouself,
Maar jy kan nie regtig noem dat vanuit 'n script.
LillyPond, kan jy bel van dié skrifte.
Jy kan maklik Itereer LillyPond met LaTeX.
Ek sal nie veel tyd om te gaan in hierdie tegnologie op die oomblik,
maar hulle bestaan ​​nie.
As jy wil om te kyk in 'n LillyPond boek,
dit is 'n program wat kom met jou LillyPond verspreiding,
en dit is vir iterating LillyPond fragmente in LaTeX
as jy wil om iets te doen soos 'n groot musiekwetenskap dokument
met voorbeelde, byvoorbeeld.
En dit is 'n goeie vaardigheid lewe as jy iets doen
met musiek, en nie net CS50.
Ek het gebruik LillyPond vir alle van my samestelling projekte
want ek was basies 'n senior in die hoërskool.
>> So hier is 'n paar eenvoudige voorbeelde.
Dit is basies verteenwoordigend van die vlak van die probleme
dat die meeste mense sou face it hulle probeer
om LilyPond gebruik vir eenvoudige projekte.
Die eerste een is die begin om 'n koraal voorspel deur Bach.
Dit onderste een is 'n uittreksel van een van my eie werke,
en dit is net daar om te wys jy dinge soos [onhoorbaar]
om verskeie reëls in dieselfde personeel, hoe liriek undersetting werk.
Liriek ondergrond is 'n ding wat baie maklik om te gebruik vir LilyPond koormusiek.
>> En so dan is daar 'n paar meer ingewikkelde voorbeelde hier.
Al hierdie is gedoen in LilyPond en hulle is haalbaar.
Die eerste uittreksel is uit Deur [onhoorbaar] [onhoorbaar].
En dit [onhoorbaar] uit 'n stuk vir solo bass
fluit deur [onhoorbaar], wat 'n longtime-- wat
was 'n jarelange lid van die Departement Musiek hier, dink ek.
Ek is nie seker waar hy afgegaan om.
Maar hy die raadgewer van die Harvard was Komponiste Vereniging vir 'n lang tyd.
Wonderlike man.
En hy skryf 'n paar musiek wat baie het ingewikkelde notasie wat LillyPond
kan tog hanteer baie mooi.
>> So net om jou 'n gevoel van gee wat se vermoëns hierdie ding are-- so
die internals van LillyPond is baie ingewikkeld.
En jy kan dit gebruik vir 'n lang tyd, insluitend
vir 'n paar mooi ingewikkeld dinge, sonder om werklik
met 'n baie van hulle weet.
Maar die basiese idee is dat die laagste vlak, die atome van LillyPonds
is die notas.
Die notas bevat 'n konteks genoem stemme.
So die stem konteks ooreenstem basies
om 'n enkele lyn van polifonie.
En dan konteks kan hiërargies vervat
in 'n hoër vlak diegene wat verteenwoordig personeel op die telling
of groter groeperings soos klavier personeel of koor personeel,
en dan uiteindelik hele telling kontekste.
En jy kan eintlik behels verskeie tellings in 'n boek.
>> En elke konteks het 'n aantal aangeheg graveerders.
As jy kyk deur die inhoud van 'n konteks
en druk 'n sekere simbool of 'n sekere klas van simbole as wat nodig is.
So om elke stem konteks, daar is [onhoorbaar] notas
graveur wat is basies 'n funksie of 'n voorwerp wat skryf al die note
koppe op die regte dele van 'n bladsy.
Dan is daar 'n gesplete graveur, wat skryf uit splinters op die personeel.
Dan is daar 'n metronoom merk dat graveur
skryf uit metronoom punte in 'n telling.
En al hierdie pas mooi ver in die hiërargie.
En dit is baie, baie, baie aanpas, wat jy nodig het
as jy wil om dinge soos dat.
>> So al die kontekste het 'n baie verskillende eienskappe
wat jy kan verander vir alles uit die spasiëring verskeie font
keuring tot groottes van die dinge.
As jy wil, selfs doen meer ingewikkeld dinge,
daar is 'n ingeboude skrip taal.
Hulle gebruik skema, wat is dialek van LISP.
Hierdie waarskynlik nie vir jou iets beteken.
Maar basies, 'n skema 'n ander funksionele
programmeertaal, min of meer.
>> STEPHEN KREWSON: Die tie-in.
>> CONNOR Harris: Ja.
Dit is 'n goeie tie-in, dink ek.
En dit is wat gebruik word as 'n onderrigtaal, eintlik, af Mass Ave. By MIT.
En dit is baie handig vir LillyPond vir verskeie tegniese redes.
>> En so as jy wil eenvoudige maak tweaks afhanklik conditionals,
vir example-- daar is sekere toestand van 'n telling wat is ontmoet,
maak veranderings aan die uitleg of whatnot-- dan
daardie fasiliteite is daar.
Hulle is ingewikkeld.
So hier is 'n redelik eenvoudige kode monster.
Dit is vyf lyne.
Basies, ek definieer twee stokke.
Dit is in 3/4.
Die eerste personeel het 'n aangeheg tempo merk,
maar dit is eintlik gaan om voort te gaan om die hele telling,
omdat tempo punte op die telling vlak.
Die metronoom merk graveur verbonde aan konteks aan te teken.
Daar is verskillende sleutels, omdat die [onhoorbaar] graveur
is die personeel verbonde.
Jy kan eintlik doen is.
Die monster wat ek geskryf het, is eintlik in C majeur,
maar dit is net om demonstreer wat jy kan hê
verskillende sleutels in verskillende personeel.
En die basiese sintaks is wat jy skryf daarop name met E, F, G, wat ook al.
As jy wil toevallige doen, jy agtervoegsel IS of ES.
Dit is uit die Nederlandse musikologiese konvensies.
>> En oktaaf ​​spronge doen, moet jy om te gebruik hierdie merk punte, kommas of afkappingsteken.
Die relatiewe beteken net alles wat jy het 'n noot,
dit sal outomaties plaec in die oktaaf ​​naaste aan die vorige een.
En as jy wil meer as spring 'n fifth-- sê 'n vyfde of more--
dan moet jy die [onhoorbaar] gebruik.
Maar andersins, het jy nie hoef te spesifiseer die oktaaf ​​van elke enkele noot.
>> En relatiewe C, eerste, en C, jy moet net spesifiseer middel C
en base C, veral eerste note.
Dan het jy hierdie personeel wat te organiseer hierdie twee stemme of monsters van musiek,
en jy het 'n telling.
En wat lyk soos hierdie.
>> As jy wil om die tyd te neem kopieer daardie monster van LillyPond
kode op die vorige gly hier af, en jy
kan dit skryf vir jouself LillyPond.
Ek weet ons het iets gekry wat lyk 'n baie soos hierdie.
So is daar 'n ander tegnologie genoem Musiek XML gehandhaaf
deur heeltemal verskillende mense.
XML is 'n tekstuele data structure-- ek moet nie sê data structure-- sê
metafoor kaart soort van.
En dit is ontwerp om te hou hiërargiese data baie goed.
HTML, byvoorbeeld, is 'n tipe van XML.
En jy kan XML vertel omdat hulle het al die hoek en die hoek tussen hakies
bracket slash punte wat wys data velde.
>> Ek het nie 'n kode het voorbeeld uit Musiek XML.
Jy kan dit vind jouself.
Basies, die rede waarom jy dalk wil XML gebruik as die intermediêre fase
is die eerste van alles, dit is 'n wisselaar formaat
vir basies every-- Ek moet sê nie elke, maar 'n baie verskillende telling
skrywers.
So as jy skryf in Musiek XML, nie net kan LillyPond
lees dit met die hulp van hierdie auxilary program genaamd Musiek XML te LY,
maar ook Finale kan lees dit kan Sibelius dit te lees.
Afhangende van hoe jou interne voorwerp hiërargie werk vir wat musiek,
dit dalk makliker wees om uit te skryf om Music XML as om LillyPond
en net staatmaak op Musiek XML om LY om die omskakeling te doen.
>> Ek dink nie [onhoorbaar] het Musiek XML.
STEPHEN KREWSON: Dit maak nie.
Iemand is besig met dit, al is.
>> CONNOR Harris: OK.
Euterpea nie 'n het Musiek XML nog uitset funksie.
As jy wil 'n finale projek idee, Miskien kry in voeling met ouens
dat Stephen weet, en hulle kon jou hulp gebruik.
>> STEPHEN KREWSON: Ek sou graag dat.
CONNOR Harris: Ook, basies, elke programmeertale
dit is wat sy sout werd het reeds 'n XML biblioteek,
sodat jy kan intern sit al van jou musiek in 'n paar voorwerp
dat die XML-biblioteek kan skryf dat minder sou vereis
veranderings aan jou interne struktuur vir watter musiek jy voorwerpe
wil skryf as om dit te skryf direk in LillyPond sou.
Dan net druk dit uit met XML met die XML biblioteke in jou taal,
wat sal verseker dat dit sintakties korrekte en alles,
en sit dit dan LillyPond.
So tegnologie wat jy dalk wil kyk na as jy iets doen
soos hierdie.
>> [Onhoorbaar], 'n ander auxilarry tegnologie.
Dit is basies Tech Werke of Tech Studio vir LillyPond.
So dit bied hulp met sintaksis, met templates
vir verskeie algemene kombinasies van instrumente.
Dit laat gesplete skerm lees so kan jy jou kode het in 'n venster
en in 'n ander PDF venster en Klik op plekke in die PDF
om te spring na die betrokke kolle in jou bronkode.
Dit is meer nuttig as jy eintlik is skriftelik LillyPond lêers jouself
as wanneer jy genereer hulle programmaties.
Maar weereens, dit is iets nuttig om te hê.
>> Groot.
Nog resources-- ek sal net gaan deur hierdie baie vinnig.
LillyPond manuals-- LillyPond het uitstekende dokumentasie op sy webwerf.
Hulle het 'n handleiding.
Hulle het 'n sintaksis verwysing.
Hulle het honderde brokkies vir verskeie klein dingetjies
yo dalk nodig doen om te demonstreer verskeie vermoëns.
As jy wil gebruik die script taal
of maak meer uitgebreide veranderinge, dan is daar
internals verwys op daardie URL.
As jy wil Musiek XML gebruik, is daar ' dat URL, musicxml.com/tutorial.
>> En dan as jy nodig het om te leer skema omdat jy eintlik wil gebruik
die script fasiliteite in LillyPond, dan is daar 'n [onhoorbaar] genoem
Gestruktureerde Interpretasie van rekenaarprogramme,
wat nie net die tweede grootste CS handboek ooit written--
vind my daarna as jy wil weet wat ek dink die grootste een is--
maar dit is ook 'n baie goeie inleiding tot die taal behoorlike.
Jy sal nie meer as nodig die eerste paar afdelings.
>> En dit is dit.
Enige vrae?
>> STUDENT: Waar kan ek aflaai jou gegenereer Frere Jacques
so ek kan dit op my iPod?
>> STEPHEN KREWSON: Wel, kan jy skryf uit 'n paar wav lêer in Euterpea.
En jy het die kode.
Dit is op GitHub.
Maak jou eie variasies van Frere Jacques deur CS50 korf gedagte.
Dit sou wonderlik wees.
CONNOR Harris: Iemand anders?
STEPHEN KREWSON: Ons moet 'n beter bass drum, ook.
Dit is regtig 'n slegte.
>> STUDENT: Euterpea het nie net die samestelling kant nie, maar signal--
STEPHEN KREWSON: Ja.
In werklikheid, die werk wat ek het in Euterpea toe ek
het this-- daar is 'n gradueer kursus by Yale dat
gebruik it-- was op gesonde sintese.
So is daar 'n baie mooi manier met behulp van pyle
en 'n paar van die notasie wat ons gesien het van saam komponeer sein funksies.
In die besonder, die bas vir die meeste van hulle is net 'n eenvoudige sinusgolf.
Maar as jy begin komponeer diegene in vreemde programmatiese maniere,
kan jy gek klank te kry effekte, soos vreemde cascades.
Jy kan baie gritty skep klink met 'n baie modulasie.
>> Ek het 'n projek oor korrel sintese, wat
iewers tussen FM en monsterneming.
Jy neem baie klein, bietjie monsters, en dan
kombineer hulle met 'n soort van modulator en die opbou van 'n ryker klank.
Ons het ook 'n fisiese modellering, so probeer om te dink oor die fisika
en psycho van iets soos 'n basuin, en dink oor die manier waarop
die klank weerkaats die klok van die basuin
en die akoestiek van die kamer en modellering
dat met die basiese ossillators.
CONNOR Harris: Baie dankie.
Dankie vir die kom.
En ek is altyd bereid om te vrae te neem deur email--
connorharris@college.harvard.edu.
>> STEPHEN KREWSON: Ja. stephen.krewson@yale.edu.
Koel.