CONNOR HARRIS: Hi.
Sunt Connor Harris.
Sunt o CA CS50 la Harvard.
STEPHEN KREWSON: Sunt Stephen Krewson.
Sunt un TF pentru CS50 la Yale.
CONNOR HARRIS: Și vom vorbi despre unele tehnologii care s-ar putea
doriți să utilizați dacă sunteți interesat în a face un proiect final sau chiar
nimic cu muzica.
Vom fi concentrându-se pe primul o limbaj de programare numit Haskell.
Este o funcțională limbă, astfel încât paradigma
este foarte diferit de C sau PHP sau alte limbi imperative
care le-ați folosit deja, și în special pe o bibliotecă scrisă în Haskell
numit Euterpea, care poate ajuta oamenii cu scrierea muzică funcțional,
practic.
Și Stephen vei umbla printr-un exemplu foarte bun de care.
>> După aceasta, am să vă prezint ceva numit LillyPond, care
este o tehnologie pentru muzica culegere.
E un fel de LaTeX pentru muzică, dacă vreunul dintre voi
au folosit LaTeX pentru clasele de matematica sau alte clase set P sau ceea ce ai.
Și așa am să-ți dau, din nou, prin câteva exemple ale acestei
și punctul în general direcție a unor resurse mai bune.
>> STEPHEN KREWSON: În plus, ne-am gândit
ar fi în regulă să înființeze un pic de indicii
spre o conductă între Fișiere MIDI generat de Euterpea
în LillyPond, asa ca am oferi unele instrucțiuni pe script-uri
a face acest lucru, care sunt prevăzut cu LillyPond
doar să-l păstrați open source și a obține o conductă merge.
CONNOR HARRIS: Din nou, noi ar trebui să subliniem,
aceste două tehnologii, tu Nu trebuie să le folosească împreună.
Nu sunt concepute pentru a lucra împreună, deși o fac foarte bine.
>> STEPHEN KREWSON: dreapta.
Și complet gratuit.
CONNOR HARRIS: Deci confirmări, citit doar că.
STEPHEN KREWSON: în mod corespunzător remarcat.
Datorită acestor oameni.
Acest Voi persista pe doar pentru un moment.
Procesul de instalare este un pic complicat.
Am un ma citit pe GitHub pe care le puteți lua o privire la.
Doar e-mail-mă dacă aveți întrebări.
Dar vom rula aceasta în ipoteza că acest lucru este de lucru pentru toată lumea.
CONNOR HARRIS: Și dacă nu se poate ajunge LillyPond la locul de muncă, nu e mare lucru.
Nu e nici o compilare live care vor fi implicați, cel puțin la sfârșitul meu.
STEPHEN KREWSON: Haskell și LillyPond ar trebui să ambele au instalatori.
Euterpea este descărcat ca un pachet, așa mai departe și așa mai departe.
Deci vorbim despre muzica pe calculator.
Și aceasta este doar o foarte vedere 50000-picior.
Exista cateva aspecte diferite ale acestuia.
Și acest lucru este dur și este O să ascundă unele detalii.
Dar am putea gândi la ceva ca compoziție algoritmică,
folosind algoritmi, folosind codul, pentru a genera
un anumit tip de-- poate o auto-similare succesiune de note, sau poate note
în unele constrângeri.
Și apoi ar putea fi cele efectuat sau interpretate
cu instrumente analogice sau ceva de genul asta.
Compoziția fiind făcut algoritmic.
>> Dar, desigur, poate zona de muzica pe calculator sau de muzică digitală
suntem mai familiarizați cu este digital sinteză a sunetului sau de prelevare de probe digitale
și de înregistrare digitală.
O mulțime de instrumente digitale sunt face prin eșantionare digitală.
De fapt, vom folosi una din cele forma unei biblioteci font sunet mai târziu.
>> Dar există, de asemenea ceva numit sinteza digital care a ieșit
din anii '70 și în anii '80 cu întârziere Yamaha și John Chowning la Stanford
a face sinteza FM sau Frecvența de sinteză Modulation,
în cazul în care ați avut un purtător de semnal și un semnal de modulare
atât în ​​spectrul audio.
Dar ceea ce suntem concentrat pe astăzi este ceva numit MIDI,
și, desigur, compoziția algoritmică.
>> Nu ne vor face instrumente, dar ne în schimb de gând să facă niște muzică,
și apoi că vor fi interpretate de unele instrumente care
sunt conformă la standardul general de MIDI.
Deci, ce-i MIDI?
Eu nu am de gând pentru a obține prea adânc în ea, dar MIDI este protocol de transfer de date.
E un fel de ghid în întreaga diferite companii si industrii
pentru organizarea de sunete sau patch-uri.
Deci, vom vedea că există un standard MIDI
pentru toate diferite percuție sunete și recomandări MIDI
pentru toate tipurile diferite de sintetizator sau diferite tipuri de toate instrumentului
grupuri intr-o orchestra, spune.
>> Esti, probabil, familiarizat cu 0 prin 127 mesaje MIDI.
Un semnal MIDI este de obicei un bit care indică
indiferent dacă este un de date sau o pachete de stare, și apoi există
șapte biți de un semnal.
Și acestea pot controla totul, de la volum
la acțiunea sau presiunea pe o anumită cheie
dacă sunteți performante cu un MIDI controler precum, desigur,
Note.
Și, bineînțeles, MIDI are fost extrem de util,
pentru că este un mod de a fir împreună sau lanț daisy
o grămadă de dispozitive hardware MIDI.
Am șapte sau opt din nou la casa mea.
Aceasta devine foarte complicat, dar este foarte puternic.
Și e foarte vechi.
E de la inceputul anilor '80, și este foarte frumos și mici.
CONNOR HARRIS: Da.
Toate clasic Nintendo jocuri video ar fi, probabil
aveți fișiere MIDI pentru muzică, de exemplu.
>> STEPHEN KREWSON: Iată un exemplu de MIDI general,
arată MIDI ca un fel de protocol general.
Și cred că ne putem gândim la diferență între caietul de sarcini
că ar trebui să existe ceva de genul aceste instrumente și sunete reale
realizarea acestor instrumente sunete într-un font de sunet sau un anumit MIDI
sintetizator ca fiind diferența între poate un typeface-- care spune,
în general, aceasta este de proiectare a acest mod particular de a reprezenta
characters-- și un anumit font care are o dimensiune și timbrul specific,
și nu există realizarea the--
>> CONNOR HARRIS: Poate un mai bine ar comparație
fie standardul Unicode says-- dă un număr de fiecare caracter, și într-adevăr
fiecare limbă din lume, sau un set vast de scripturi de limbaj
în lume, și apoi acestea sunt prestate în ceva grafic
prin diverse pachete de fonturi.
Și, evident, vă puteți gândi MIDI ca Unicode sunetului.
Și e doar o listă de-- un flux mare de evenimente și instrumente și fleacuri,
și trebuie să aibă o separat Programul, ca un font,
pentru a face asta în ceva care este în minus.
>> STEPHEN KREWSON: Deci, de ce Haskell?
Haskell este un programare funcțional limbă, foarte avansat,
foarte diferit de C, foarte diferit de PHP.
Și vom vedea că există o Ușor de compoziție functie in Haskell
care ne va permite sa briza prin compune sau tastând în sus, transcrierea,
ceva de genul Frere Jacques, acest cântec simplu care
are o mulțime de piese în ea că sunt auto-similare sau repetarea.
Deci, acest lucru va fi o parte din motivația pentru ce
suntem folosind Haskell, în care Funcțiile sunt cetățeni de primă clasă.
>> Și am vrut să se extindă acest un pic.
E un pic ușor de notate Frere Jacques în Haskell.
Dar dacă ne-am dorit să adăugați o parte tambur să-l?
Ce se întâmplă dacă am vrut să încercăm să facem ceva de genul un tambur Roland 808 sau 909
mașină în cazul în care aveți aproximativ 16 etape diferite?
De obicei, acestea sunt gândit de note ca 16.
Și puteți controla la nivel mondial tempo, și puteți alege
o grămadă de diferite părți percuție de cilindru bass, o bate, diferite curse,
deschise și închise pălării mari pe aceste fel de canale,
și apoi puteți EQ sau regla volumul lor.
>> Si vom vedea un mod frumos în Haskell a reprezenta acest pas
sequencer Cu toate diverse lucruri interesante în Haskell
putem face cu generatoare liste și filtrare peste liste,
cartografiere peste liste, cartografiere Funcțiile peste liste.
Și-a cerut scuze rapid.
Aceasta este o foarte sumară și schiță prea rapid
unora dintre aspectele de Haskell și Euterpea,
care este un domeniu specific limbă încorporat scris
în Haskell pentru tipurile muzicale.
Deci, vă rugăm să verificați codul de on-line.
Foc până GHCI, care este Glasgow Haskell Compiler interpret.
Și voi face unele de aceasta într-un pic
astfel încât să puteți vedea cum se face.
>> Și acest lucru vă permite să încărcați cu the-- sintaxa este colon și apoi
comanda.
Aveți posibilitatea să încărcați în fișiere.
Puteți utiliza răsfoire pe acele fișiere pentru a vedea toate funcțiile pe care
există într-o anumită modul.
Și apoi ca vom vedea, tipurile și de tip clase sunt atât de importante în Haskell,
astfel încât să puteți check-- întotdeauna special dacă lucrați într-un nou DSCL
ca aceasta, ceea ce este un tip de muzică?
Știu despre modul în care numerice Tipuri de lucru în Haskell,
dar eu nu știu prea multe despre muzica.
Dar puteți explora modul în care sunt definit prin utilizarea acestui tip T sau comanda
și apoi de asteptare într-un anumit Funcția sau un obiect de date.
CONNOR HARRIS: Da.
Dacă ați crezut că C și zăngănit a fost hardass despre tipurile,
nu ai nici o idee despre Haskell.
De un lucru bun despre Haskell este că dacă puteți obține codul dvs. de a compila
și dacă verificările de tip Haskell, este, probabil, dreptate,
deoarece sistemul de tip este atât de strict.
>> STEPHEN KREWSON: Da.
Așa că vreau doar să merg through-- și din nou,
acest lucru nu este de a face o justice-- câteva dintre caracteristicile Haskell care, cel puțin
a creators-- și a fost creat la sfârșitul anilor 1980 de către un grup de oameni,
un comitet de aproximativ 20 people-- crezut au fost importante.
Și primul lucru pe care enumerate într-o lucrare care
a descris geneza Haskell peste primii 20 de ani sau cam asa ceva
a fost că era leneș.
Deci, ce înseamnă asta?
>> Ei bine, aceasta înseamnă atunci când avem un fel de exprimare, trebuie să-l evalueze.
Și Haskell face acest lucru într-un apel prin nevoia fel sau un mod non-strict.
Asta este, dacă avem o grămadă de componente ale expresiei noastre,
vom încerca să întârzie evaluarea din aceste subcomponente
până la absolut ultima minute-- care este de fapt până când vom avea nevoie de ele.
>> Deci, acest lucru înseamnă: care este foarte cool, mai ales
dacă ne gândim despre captarea de un pas sequencer muzical.
Când îl porniți, și de a începe să rulează un pas sequence--
dacă ați lucrat vreodată cu un tambur machine-- și merge doar pentru totdeauna.
Deci, ar fi foarte frumos dacă am ar putea imite faptul că, în Haskell.
Si o putem face cu infinit valori, în special listele infinite.
Este foarte ușor să tastați un Lista infinită în Haskell.
Ai putea folosi doar sintaxa jos aici, în cazul în care veți vedea la 1 la 3,
scoateți 3 1 punct punct, și că este o listă infinită
din toate numerele naturale se extinde pe în măsura în care vă puteți imagina.
>> Vreau să introducă o Conceptul de falduri imediat.
Și din nou, în scopul acestui seminar nu este
pentru a afla despre falduri în Haskell sau funcții de ordin superior.
Dar eu vreau doar să-l introducă la da un sentiment ciudat cum exactă a
Haskell este și cât de puternic este.
Și în special, vom be-- atunci când facem diferite părți noastre tambur,
vom fi manipularea listelor de Numerele, pliere le una peste alta.
Și pentru a face acest lucru, vom fie folosind hărți și falduri.
>> Există un drept asociativ ori, ceea ce este acest drept unul
here-- 1 minus cantitatea, 2 minus cantitatea, 3 minus 0.
Și sintaxa pentru o ori, vă dau un ori
o valoare de bază și apoi o operation-- În acest caz, plus sau scădere.
Am arătat ambele cazuri.
Și apoi există un acumulator care acumulează pe întreaga listă,
aplicarea acestei operatorul plus sau minus, iar apoi acumularea.
Deci, acest lucru va fi the-- daca a fost numit cu pliu r plus de 0, începând cu 0,
ne-ar rezuma atunci toate numerele din această listă.
Și că este o listă la 1 la 3.
CONNOR HARRIS: Deci, pentru a-l pune un alt Astfel, ori r ia trei argumente.
Există o funcție care se ia două argumente,
atunci există o valoare de pornire, și nu există o listă de valori.
Și ceea ce faci este să luați Valoarea de pornire, în primul rând valoare,
le-a pus în funcție.
Ce vrei să ieși, ia că, hrana pentru animale, care
în funcția de a doua valoare, ceea ce te scot,
ia că, hrana pentru animale, care în Funcția de-a treia valori.
Și apoi, dacă te duci în jos această listă întreagă în acest fel,
ai de gând pentru a obține în cele din urmă o valoare singulară care este
de același tip de ceea ce ai început cu și de același tip
ca lucrurile din listă, apoi asta e rezultatul revenire a ori R.
STEPHEN KREWSON: Deci, în special, acestea sunt funcții superioare de comandă,
pentru că sunt luați un alt funcționează ca unul dintre argumentele.
>> CONNOR HARRIS: Da.
Dacă ați utilizat anumite alte languages-- Știu R, [neauzit]
limbă are această, numit Reducerea.
S-ar putea avea funcții similare în alte limbi, a sunat
lucruri diferite.
>> STEPHEN KREWSON: Și ceea ce este frumos despre ori R
în acest caz este că ori R poate lucra cu liste infinite.
Deci, în acest jos, acest P5 generează notele pe care
sunt pornite în sequencer pas pentru o parte tambur, al cincilea aspect cilindru,
și poate că este un conga tambur sau ceva.
Și aceasta este o în mod deliberat mod obtuz de a scrie acest lucru,
dar e distractiv, pentru că demonstreaza o mulțime
de lucruri despre Haskell și Euterpea.
>> Deci, ori R a acestui colon colon-- este doar un operator care împinge lucrurile
împreună pe o list-- numit pe un gol Lista, care este doar paranteze goale.
Și am sunat că pe această listă infinită.
Aceasta este, de fapt două liste adunate aici.
Lista 1 virgulă 6 punctul dot este 1, 6, 11, 16.
Deci, Haskell-- în doar câteva personaje, te
poate genera întregul secvență de numere
că sunt cinci numere afară întinzându-se pe la infinit.
Și am să adauge că acest mic list-- scurt
3, 8, 21-- doar să-ți arăt cum poți înlănțui liste.
>> Și apoi m-am pliat pe sine.
Și acest lucru se termină până fiind doar un fel de operațiune de identitate, dar e infinit.
Și ori R pot face asta, pentru că evaluează alene, ca în cele de mai sus.
Dacă avem o 1 și un 2 și 3, putem doar bracketing pe întreaga restul.
Asta nu va lucra pentru minus sau plus, dar
va lucra pentru acest colon operațiune de identitate pe lista.
>> Deci, cum putem folosi practic că, dacă vom au o listă lungă de lucruri infinit?
Ei bine, Haskell oferă o mulțime de functions--
si uita-te mai mult în aceste în propria time--, cum ar fi să ia
care spune, OK, suntem generând această listă infinită,
dar noi suntem doar de gând să ia unele Numărul de IT și în acest case--
vom vedea mai târziu în nostru code-- drum machine
GM este doar un fel de la nivel mondial variabilă pentru numărul de trepte
în sequencer.
Pe mașinile-roll în I ți-a arătat, că e de obicei 16,
dar l-am pus în aplicare cu 32.
Nu contează.
>> Haskell este, de asemenea, pur, deci are puternică dactilografiere static care Connor a făcut aluzie la.
Deci funcții sunt matematic în sense--
sunt mai matematice că acestea sunt garantate
nu de a accesa sau modifica orice fel de variabilă sau de a efectua intrare sau de ieșire.
Deci, dacă aveți o funcție, e deterministă.
Acesta va reveni întotdeauna la fel valoare în starea programului
sau rămân aceleași.
Există, desigur, excepții monadice la acest lucru, dar asta e dincolo de domeniul de aplicare nostru.
>> CONNOR HARRIS: Da.
Ce înseamnă acest lucru, deși, este acolo sunt cateva importante [Inaudibil]
consecințe ale acestei.
Una dintre ele este faptul că este foarte ușor de paraleliza programe Haskell.
Pentru că, dacă aveți, spun, o funcție de care
trebuie să opereze pe un milion de valori, în cazul în care știți că funcția va fi întotdeauna
da aceeași valoare în cazul în care te hrăni la un anumit value--
dacă sunteți [neauzit] f din 1, f din 2, atunci f de 3 sau whatnot-- f din 1
nu este de gând să scrie într-un fișier sau a face ceva
care va modifica valoarea F2.
Puteți împărți doar până la o această funcție milioane de mașini diferite sau un milion
fire diferite sau orice altceva, obține toate răspunsurile înapoi,
obține toate valorile de returnare înapoi, și atunci asta e.
Deci, foarte usor de paraleliza lucruri.
>> Dezavantajul este că de intrare și de ieșire în special
se încadrează în sistemul de tip în moduri foarte complicate.
Nu vom intra în asta acum, dar am va incurajam sa se uite la unele resurse
online dacă doriți să aflați despre asta.
>> STEPHEN KREWSON: Deci tip classes-- și acest
clase de tipuri de asta-- au fost inventate pentru a rezolva
o problemă de operator de supraîncărcarea.
Asa ca am vrut sa avem egalitate între diferitele tipuri de lucruri.
Desigur, am putea gândi de-- egalitatea între tipurile numerice
este foarte ușor să se gândească, dar Ce zici de egalitate între listele de?
Ce zici de egalitate între copac structuri de date picior?
Și acest lucru este posibil în Haskell din cauza clase de tip.
>> Deci, dacă definiți o anumită type-- date și aici, acestea sunt terenuri muzicale.
În cele din urmă Primim niște muzică calculator.
Deci avem C, C ascuțite, și așa mai departe și așa mai departe.
Ele aparțin la o grămadă de clase tip diferit.
EQ-- ei fac parte din clasa de tip EQ.
Asta înseamnă că sprijină operațiuni de promovare a egalității.
Astfel încât să puteți evalua dacă un secvență de primitive muzicale
este la fel ca un altul.
>> Ei fac parte din clasa ordinal.
Asta înseamnă că este o ordonare a acestora.
D vine dupa C. C ascuțite vine dupa C, de asemenea.
Ele aparțin clasei arată, ceea ce înseamnă că pot
fi tipărite la o consolă sau terminale.
Ei fac parte din clasă enumerate, care
înseamnă că, chiar dacă acestea sunt de caractere,
au un numeric care stau la baza Reprezentarea începând de la 0
și merge off prin toate acestea multe lucruri sunt aici, 20 sau cam asa ceva,
sau 30 sau 40, poate.
>> CONNOR HARRIS: Și când avem un tip de date
care derives-- cu acel cuvânt cheie "deriving--" o anumită clasă de tip,
aceasta înseamnă că compilatorul va încerca pentru a construi în mod automat ceva.
Deci, poate că veți dori să defini o calitate diferit.
Veți dori să definiți C ascuțite ca egal cu D plat, de exemplu.
Cu această construcție aici, nu cred că C ascuțite
și D plat va fi egal, deoarece compilatorul va automat
spun fiecare valoare posibilă diferite este diferit de orice alt.
>> Deci, este posibil pentru a trece peste implementările implicite
din aceste tipuri de clase.
Din nou, uita-te la trimiterea dacă doriți să aflați despre asta.
STEPHEN KREWSON: Și aici, de fapt, asta va
fi util pentru atunci când am cod mai târziu.
Am vedea unele dintre operatori infix pentru compoziție secvențială,
Compoziție paralel, și așa mai departe, aceste plusuri și semne egale
înconjurat de două puncte.
Asta înseamnă că putem juca aceste diferite primitive muzicale unul după altul.
Asta e compoziție secvențială.
>> Sau le pot juca în paralel, în același timp.
Așa că am putea avea o valoare muzicală, iar apoi acest egal și două puncte,
infix operator de compoziție paralel, și să le joci ca un fel de coardă.
Și vom pentru a utiliza acest lucru atunci când am combina
partea noastră tambur cu nostru puțin cântec Frere Jacques
pentru a juca aceste două secvențe de Valorile muzicale în același timp.
>> Prelucrare Curry este-- fost ultima Numele Haskell Curry, care a
imaginea Haskell este numit după.
Iar acest lucru ne permite o eleganță frumos atunci când suntem
scris toate acestea diferite funcții sau filtre care suntem
Va fi de cartografiere pe listele noastre.
O funcție a două arguments-- f de x si y--
poate fi reprezentat ca f de x aplicat y.
Deci, este o funcție de un argument care returnează
o altă funcție de un argument.
Deci, aceasta înseamnă, putem harta un Funcția f x peste lista de Y lui.
CONNOR HARRIS: Doriți să da un exemplu în acest sens?
STEPHEN KREWSON: Da.
Am un exemplu chiar aici la unele din lucrurile pe care le va scrie.
Deci, replica 2-- bine, reproduce va lua
o valoare, care este cât de multe ori de a reproduce ceva,
și apoi se va lua o value-- de obicei, o listă sau ceva.
Deci, aici, suntem de cartografiere reproduce 2 peste o altă listă.
>> Deci, dacă am harta reproduce 2, dacă vom reproduce 2 se aplică
la primul element al acestui list-- și acestea sunt liste de phrases-- muzicale
va produce două de "voi sleeping--" așa dormi, dormi.
Deci, acum avem două.
Dar replicate nevoie de doi argumente, ci pentru că suntem
curtau și apoi de cartografiere, putem reprezenta reprodusă 2
ca fiind returnat în funcție de o argument-- doar replicarea de două ori.
Și apoi suntem aplicarea acestui fiecărui element de această listă de fraze.
>> Și concat este un Haskell operație pentru aplatizarea o listă.
Deoarece replicate 2 va produce o listă de liste.
Și acest lucru este această formă intermediară aici.
Și astfel putem Concat sau aplatiza asta de două ori.
CONNOR HARRIS: O simplă exemplu de Prelucrare,
dacă ai like-- imagina f este doar o Funcția de multiplicare care are două
argumente și returnează produsul lor.
Deci, dacă aveți un f 4 5, e 20.
Dar vă puteți gândi la acest lucru ca also-- aveți o funcție f 4
care ia un argument și returnează de patru ori acest argument-- doar
aplicarea parțială care doar un singur argument 4.
Și dacă se hrănească f de 4 5, care vă va oferi 20.
Și că este un simplu exemplu de Prelucrare.
Este, de obicei, una dintre cele manual.
>> STEPHEN KREWSON: Lambda expresii sau funcții anonime
sunt un alt semn distinctiv Haskell.
Deci, dacă avem nevoie pentru a bate un Funcția puțin replicate viață,
dar spun că nu e în biblioteca standard,
putem folosi o sintaxă similar cu următorul.
Și vom briza peste asta.
Un lucru veți vedea o mulțime și din drum machine este facem apeluri
la ceva numit filtru, care ca înainte,
este o mapare a unei funcții peste o listă, dar este
o cartografiere a unei funcții booleene.
>> Deci, avem aici un exemplu a unui un anonim
Funcția booleană definit ca doar durează câteva valori.
Acest lucru nu este, strict vorbind, o funcție anonim.
Dar e defini cu că sintaxa pentru concizie,
și acest lucru ia doar X modul N-
CONNOR HARRIS: Da.
Deci f este o funcție de două argumente n și p
care returnează o funcție care este ea însăși o funcție de un argument, și anume x.
STEPHEN KREWSON: I Operatorii infix mentionate.
Care sunt operatori infix?
Ei bine, operatorii infix sunt normal ne reprezintă operațiuni,
spun, în mathematics-- 2 plus 2 în loc de operatorul plus
și apoi două argumente 2 și 2.
CONNOR HARRIS: Se numește inversa notație poloneză, care este
un termen Mă îndoiesc oricare dintre voi ar ști.
>> STEPHEN KREWSON: dreapta.
Reverse notație poloneză sau prefix.
Dar a decis să Haskell utiliza operatori infix.
Deci, acestea sunt unele dintre cele personalizate care
sunt definite pentru Euterpea DSCL în Haskell.
Deci, acest lucru a fost compoziție secvențial.
Aceasta a fost compoziție paralel, iar acest lucru a fost trunchiere compoziție paralel.
Și vom avea nevoie de asta cu masina noastra tambur,
pentru că vom folosi ultimul Operatorul în micul tuplu acolo
pentru a juca de-a lungul drum machine cu nostru cântec Frere Jacques.
Si masina noastra cilindru este O să fie infinit.
Pur și simplu joacă pentru totdeauna.
Dar melodia Frere Jacques nu este.
Nu e atât de mult.
E doar câteva baruri.
Deci, avem nevoie pentru a opri mașina de cilindru ca Imediat ce vine valoarea muzical scurt
la capăt.
Și că operatorul infixed este super util cu asta.
>> Și infix notație ca acest este un fel de frumos,
pentru că presupunem că aveți o funcție cum ar fi Citat, care dă divizia întreg
de X prin ceva else-- Ne pare rău, că ar trebui să fie o și b.
Ai putea scrie ca un citat de b.
Deci, dacă elementul este put-- un alt exemplu al acestei.
X element oarecare listă, dacă ai pus l în Backticks, îl puteți folosi.
Chiar dacă nu este un simbol cum ar fi plus sau minus sau ori,
puteți utiliza numele unei Funcția de genul asta in Backticks
ca operator infix, care este destul de rece.
CONNOR HARRIS: Din nou, aceasta este toate zahăr doar sintactic, într-adevăr.
Aceasta nu afectează miezul limbajului.
>> STEPHEN KREWSON: Vedem aici pentru Ultima frază din nostru cântec Frere Jacques,
Am jucat niște acorduri mici sau treimi utilizând compoziția paralel
operator.
Acesta este un alt mod de a spune ceva de ceea ce am fost doar a spune.
Astfel încât să puteți hartă funcții de un argument peste liste.
CONNOR HARRIS: Din nou, referinte pentru manuale introductive Haskell--
va avea toate acestea în ea.
>> STEPHEN KREWSON: Deci, aici e un destul de linie cheie al sequencer pas
vom arunca o privire la utilizarea o înțelegere listă.
Și vedem aici este că elementul operator fix în ghilimele spate.
Deci, dacă x este un element al listei x, atunci vom apela funcții perc.
Deci perc este doar o funcție percuție.
Este nevoie de o valoare p e parte a setului mărginite de toate
diferite sunete de percuție că am văzut într-un diapozitiv anterior,
și apoi se dă ca Durata unei note sfert.
Altceva îi dă un qnr, și qnr este doar un repaus sfert notă.
>> Deci, aceasta este construirea de ceva frumos.
Avem o listă de elemente, și am să bucla peste unele lista de la un
la valoarea maximă a sequencer pas.
Și când suntem la o anumită i în lista de la unu la valoarea maximă,
dacă i este un membru al acestui set creat în această funcție,
bine, atunci l-am transforma într-o notă de percuție.
În caz contrar, vom juca doar o pauză, care este de a spune, ne-am rămâne tăcut.
Și putem vedea aici că, în această listă sintaxă înțelegere,
X este populat de această Lista construit unul
la dimensiunea globală a sequencer.
CONNOR HARRIS: Da.
Sintaxa de bază pentru Lista este comprehensions
suport, valoarea care implică unele variabile, bar,
Valorile posibile ale variabilelor se, închis suport.
Și dacă ați făcut stabilit notație constructor în orice fel de clasă de matematică,
este posibil să fi setat astfel de 2n că n este sau n este în z.
Similar thing-- această notație este menit să fie sugestiv
din notație matematice.
STEPHEN KREWSON: Și tu poți se aplică mai multe predicate
și mai multe filtre într-o listă înțelegere, ceea ce este destul de frumos.
Algebrică am types-- nu va persista mult timp aici.
Nu e un noțiune bună Haskell sau un bun noțiune, evident
cum să realizați, să zicem, un default parametru la o funcție sau ceva.
În Python, acest lucru este destul de ușor.
Vă pot spune doar cu egal pe declarația funcției,
o valoare implicită în caz nici una nu este furnizată.
>> În Haskell, ai putea poate utilizați Poate că poate tipul,
care ia fie nimic sau o valoare de tip doar o.
Așa că am exploata acest lucru în drum machine pentru a ne permite să dea volum opțional
parametrii pentru fiecare dintre părțile de tobe.
Așa că ne oferă o modalitate de a avea EQ sau un volum pe un anumit canal.
>> CONNOR HARRIS: În alte exemple Haskell,
s-ar putea vedea poate folosi funcții care ar putea eșua.
Acesta este unul comun.
>> STEPHEN KREWSON: Și vă poate furniza un fel de mesaj de eroare, ca implicit.
Și asta e deosebit de util atunci când faci I / O în Haskell.
Care poate fi trucuri.
CONNOR HARRIS: Sau pentru o exemplu similar, cred că
de o funcție care implică divizare de un parametru care poate fi 0.
Și această funcție ar putea reveni poate orice.
Deci, în cazul în care nu există nici o diviziune cu 0, va reveni doar ceea ce.
Și dacă există diviziune de 0, se va reveni nimic
ca o modalitate de a semnalizarea erorii.
Deoarece unul urmare a Dactilografiere foarte strict Haskell lui
este că nu există nici o real-- excepții sunt incomode, practic,
tratarea erorilor este ciudat.
Și aceasta este una foarte mod comun de a face aceasta.
>> STEPHEN KREWSON: Deci, acum avem la un alt lucru de indoiala minte
despre Haskell, care este model potrivire și funcție definiții.
Ți-am arătat în ultimul Glisați Declarația a secvenței pas
funcție, care a avut o valoare poate, apoi un int, apoi o listă de int,
apoi revine o secvență de Valorile de muzică acolo adnotat
cu atât smoală și volumul.
>> Deci, cele trei argumente poate fi model potrivit în modul următor.
Și întotdeauna vrem să fie sigur de a face un caz de bază sau caz de ieșire primul.
Și aceste subliniere doar poate fi interpretată
înseamnă orice valoare care e acolo.
Deci, dacă vom obține un apel la pasul secvență cu o valoare, o altă valoare,
și apoi lista goală, ceea ce ne dorim pentru a reveni este liniște doar, o odihnă 0.
>> Și în loc de asta fiind o listă goală sau 0,
este un rest 0, pentru că suntem care se ocupă cu tipul de muzică,
și lista goală muzicii tip este doar un repaus de cel durată.
Nu e nici muzica.
Și apoi vom vedea dacă vom obține un pas secventa cu un v pentru argument volum,
p pentru instrument de precauție argument, iar apoi o listă de x lui.
>> Apoi ne-am face unele lucruri.
În special, vom aplica această listă înțelegere,
și vom efectua unele operațiunile pe valoarea poate
să-l transforme într-o valoare numerică, astfel încât ea ar putea fi apoi enumerate și utilizate
pentru a selecta instrumentul.
Din nou, acest lucru este un pic bit în mod deliberat inconcise
doar pentru a arăta toate lucrurile ciudate puteți face în timp ce Haskell
să ia o privire la ea pe cont propriu timp.
>> In regula.
Așa că în cele din urmă ajunge la face ceea ce ne-am propus să facem,
care este de a face niște muzică de calculator.
Deci vom încerca să face melodia Frere Jacques.
Deci, există câte Expresii din Frere Jacques?
Patru.
Grozav.
Și ceea ce este frumos este că acestea sunt toate repetate
aceeași cantitate de ori, care este de două.
>> Deci, avem patru fraze fiecare repetată de două ori.
Și în special, sunt într-o rundă.
Și acolo sunt multe, moduri de a pune în aplicare mai multe
o rundă care ar putea fi distractiv de a face.
Am făcut într-o destul de simplu mod aici,
care este doar la construct-- linia Funcția are o listă de valori muzicale
și se transformă în compoziție secvențială prin aplicarea acestui compoziție secvențială
operator.
>> Și apoi am întârzia diferitele părți făcându-le să înceapă cu o perioadă de odihnă.
Așa că am începe cu o pauză de două măsuri, și apoi o odihnă de patru măsuri,
și apoi o odihnă de șase măsuri, și apoi rundă
de lucrări, după cum știm cu toții acest cântec.
Vedem două adnotări sau modificări ale valorilor muzicale
care sunt cuprinse în acest secvențial aranjament de elemente de muzică.
Avem un volum de adăugare.
Aceasta este o funcție a adnota muzica cu un anumit volum.
Acesta este un exemplu bun de un semnal de funcționare MIDI
de la 0 la 127, cele șapte biți de informații care pot fi transportate.
>> Si then-- am văzut foarte pe scurt, dar MIDI generală
listă cu toate diferitelor instrumente.
Și nu e o mulțime de ei.
Dacă utilizați o stație de lucru audio digitale, cum ar fi Ableton Live sau Pro Tools,
există o gamă largă incredibil de sintetizatoare și instrumente VST.
Dar numai standardul MIDI are câteva zeci, sau mai multe.
Iar unii dintre ei sunt amuzante.
M-am gândit că ar fi distractiv dacă ne-am jucat instrumentul instrumentul MIDI
elicopter, și apoi următor drum prin tur de scrutin,
am făcut un synth pad, și apoi a Aceasta a condus corny synth val pătrat,
și apoi voce mâl, care sunt o pic indistinct pe MIDI meu rău
sintetizator, dar OK.
>> Și apoi vom vedea acest lucru lit. și în sintaxa din Haskell,
și apoi ne jucăm toate aceste părți împreună
cu operatorul compoziție paralel.
Și probabil am putea arăta o parte din aceasta.
Aici este codul.
Și puteți vedea în C, ar fi o mulțime de compensare gat si compozitie
codul de masă înainte de a ar putea face muzica de genul asta.
Sau orice alt programare limbă, ai probabil
Trebuie să interacționeze cu un fel de bibliotecă sau API și a stabilit totul,
și apoi ai avea pentru a curăța.
Dar aici, în Haskell este, cred, o dată te obișnuiești cu ea, incredibil
ușor de citit și foarte expresiv.
Deci, nu există punerea în aplicare de Frere Jacques.
In regula.
Acum vrem să adăugați percuție, iar acest lucru este un pic pic Messier.
Deci, haideți să aruncăm o privire la diapozitive.
Deci, ideea este de a face mare o grămadă de liste sau părți.
Pentru aceste mașini-roll în, acolo au fost de obicei despre poate opt
la 10 de ritm sau de percuție părți.
Și apoi utilizați o grămadă de tehnici.
Și am vorbit despre utilizarea these-- renunță, filtre, funcții lambda,
mapate pe liste pentru a genera valori în unele între 1 și R, R este de 16,
sau 32 de pași în sequencer.
>> Și apoi, dacă există o valoare în această listă ca suntem trece prin sequencer,
trece prin ea de peste si peste, se transformă pe această notă,
și că proba devine declanșat.
Aici sunt toate moduri diferite de ciudate Am venit cu pentru a genera note.
Încercați să-l pe cont propriu suma semi.
Va suna misto.
Timp permite, vom trece prin asta.
Dar pentru acum, cred că ar trebui să ne demo ceea ce avem.
Să sperăm că acest lucru merge OK.
>> Deci, aceasta este GHCI.
Și vom încărca un fișier Am numit song.lhs,
care este fișierul doar ți-am arătat.
Bine, minunat.
Așa cum Connor spus mai devreme, aceasta compilat, l scrieți verificat,
așa că am putea respira mult mai usor.
Nu va să arunce în aer pe mine.
>> Am vrut să-ți arăt ceva util.
Puteți vedea că o Modul încărcat numit 50.
Puteți parcurge modulul.
Și acest lucru este atât de frumos despre doing-- Poate că ceea ce
faci in Haskell nu este numita dezvoltare de software,
dar puteți face o mulțime de chestii amuzante pe cont propriu.
Și fluxul de lucru este foarte frumos ca în comparație cu o mulțime de alte limbi,
pentru că puteți vedea într-un adevărat mod lizibil ce se întâmplă.
Deci, vedem că avem toate aceste fraze, care
sunt liste de terenuri de muzică, și apoi ne construi astea în ceva mai mare,
care este un cântec de muzică.
Este o unitate de muzical.
Și atunci putem juca acest tot cu o funcție numită muzică joc.
Puteți vedea că aici.
Care este doar joaca.
>> Ar trebui să say-- nu am vorbit despre acest semn dolar asta e peste tot.
Semn dolar este un alt operator infix.
Dar are cea mai mică prioritate de orice operator, care în mod eficient
înseamnă că totul pe în partea stângă a semnului dolarului
și dreptul semnului dolar, vom să se evaluate înainte de aceasta.
Deci e un fel de alt mod de a adăuga paranteze.
>> CONNOR HARRIS: Este practic compoziție funcție.
Și se asigură că nu have-- dacă aveți funcții de fiecare parte sau infix
Operatorii de pe fiecare parte, ei nu vor asocia peste el și vă va oferi
rezultate neașteptate.
>> STEPHEN KREWSON: Deci, noi can-- utilizarea pe care, putem apela.
În primul rând, vom juca fara tobe.
Asta e elicopterul, elicopter MIDI.
>> [MUSIC JOC]
Nu e val pătrat.
Mâlul voce.
Și tu poți merge cu adevărat sălbatice cu acest lucru.
Am luat unul destul de simplu, pentru că știam că nu ar trebui să mușca
mai mult decât am putut mesteca.
Doar păstrați-l destul de simplu pentru a arăta ideile principale.
Dar apoi am fost ca, am Trebuie să adăuga unele tobe la acest lucru.
Doar pentru că acest lucru este o pic de nepătruns,
și eu nu am folosit Numele părților tobe,
Am mapate them-- deoarece acestea sunt parte din această clasă recenzate,
Le-am mapate la int.
Una dintre ele este ca o tobă bass.
Zero este la fel de bine.
Șapte este o pălărie mare.
Și în cazul în care aici Funcțiile obține un pic mai mult la întâmplare,
acestea sunt ca tobe conga.
>> Deci, dacă credeți că poate un about-- mod distractiv de a pune în aplicare o mașină de tambur
este de a folosi foarte ordonată modele pe tambur dvs. bas.
Deci, de exemplu, pe filtrarea peste Lista cu tot ceea ce dă înapoi
1 atunci când este luat modul 04.
Așa că am obține 1, 5, 9, 13, astfel încât această 17-- este prima ritmul orice măsură.
>> Apoi aceasta este aceeași lucru mutat în două etape.
Deci asta e neconventionala.
Deci acest lucru ar fi ceva ca o pălărie mare.
Și apoi din nou, aici, e un pic aleatoriu,
pentru că noi facem tobe conga.
Și am niște Maracas aici, de asemenea.
>> Așa că am putea numi joc drum machine, dar ar merge la nesfârșit,
și-ar putea începe hapsân sus toate memoria în sistemul meu.
Așa că am să sun această funcție reda muzică, care, după cum vom vedea,
utiliza compoziția paralel trunchia pentru a juca micul nostru cântec Frere Jacques
împreună cu această mașină tambur ciudat.
Deci, haideți să aruncăm o privire.
Și vă rugăm să îmbunătățească pe meu aranjament de toate părțile de tobe.
Nu specialitatea mea, dar am a avut o mulțime de distracție face-o.
>> [MUSIC JOC]
>> Deci, desigur, acest lucru este tot un pic nu la fel de distractiv
dacă nu-l putem converti la un scor așa că poate
ar putea fi interpretat de un interpret uman.
Deci, eu nu va rula aici.
Am generat deja fișierele.
Puteți vedea că există o dot LilyPond file-- și acest
va fi Segue mea pe la Connor-- și un fișier punct MIDI,
și un fișier PDF punct, care este ceea ce LilyPond va genera în cele din urmă.
>> Dar acestea sunt acele scripturi, și voi doar le executa cu opțiunile lor de ajutor.
Dacă aveți aceste în funcțiune cu Euterpea, puteti genera un fișier MIDI.
Și apoi de la dosar MIDI cu acest program MIDI 2LY,
puteti genera o Lily Fișier iaz, și apoi
poate genera un PDF din scorul.
Și noi ar trebui să aruncăm o privire la acest lucru.
Deci, Connor va arăta, probabil, cum să adnota acest lucru mai bine,
dar acest lucru este Frere Jacques ca generate de mine în Euterpea.
E doar în C.-aș fi dat seama ce hack este de fapt în.
Dar asta este conducta pentru cum să faci asta cu asta.
Să vorbim mai multe despre LilyPond.
>> CONNOR HARRIS: OK Să vedem.
Ți-ai spus afli ca Haskell?
STEPHEN KREWSON: Oh, da.
Check out Veți învăța Haskell.
Este scris în resursele.
Așa am început învățare, și e minunat.
Învățarea nu prost.
>> CONNOR HARRIS: Deci, e on-line.
Deci, un tip pe nume [Inaudibil] learnyouahaskell.com, fără spații.
Gramatica este bolnav.
STEPHEN KREWSON: E ilustrat, de asemenea.
CONNOR HARRIS: Deci, ce este LilyPond?
E o programare declarativ limbă pentru culegere de muzică.
Deci declarative-- puteți cred că de lucruri, cum ar fi HTML,
în cazul în care nu ești saying-- HTML nu spune cum browsere web ar trebui să
fac pagini pas cu pas.
E doar că acest este o descriere textuală
de ceea ce vrei paginii pentru a arata.
>> Și apoi este, de asemenea, un program de care compilează acest limbaj,
sau citit în și apoi de fapt face culegere pentru tine,
și scuipa acestea minunate înscris PDF cauta.
De asemenea, puteți format PNG sau orice altceva.
O modalitate buna de a gândi în acest sens este, prin analogie
este că LaTeX este un fel de LillyPond, dar doar pentru culegere obișnuită.
Deci, în loc de-- nu e WYSIWYG, ceea ce vezi
Este ceea ce ai, cum ar fi, spun Final este, sau Sibelius,
sau Microsoft Word, în cazul în care aveți posibilitatea să tastați în în timp real și proiecte de lucruri in timp real
și a vedea modificările instantaneu.
>> Ea se bazează text.
Trebuie să compilați dvs. înscris folosind un program separat
și ieși PDF-uri mai târziu.
Acesta este un pic mai puțin convenabil pentru utilizare în cazul în care sunteți
încercarea de a scrie direct într-un scor și ești
încercarea de a compune pe computer.
Dar există o mulțime de avantaje pentru ea.
Unul, arata mult mai frumos, pentru că, de fapt LillyPond poate
ia timp pentru a face Deciziile aspect în mod corespunzător,
spre deosebire de Sibelius sau Finale, care au pentru a face algoritmi compromise atât de
că pot afișa lucruri în timp real.
>> Deci, de ce este LilyPond-- grafica pe calculator este greu.
Dacă faci ceva cu muzica si doriti sa scrie scoruri,
nu vrei să scrie totul de unul singur
începând cu cum să atragă personalul și cum să atragă Agende.
Este foarte dificil. A fost facut inainte.
Esti bine.
>> Dacă doriți să utilizați Finale sau Sibelius, formatele de fișiere pentru aceste lucruri
sunt foarte complicate, și nu poți într-adevăr le folosesc programatic.
Puteți deschide Sibelius cu Finale și du-te la File, Export PDF le
dar nu poate într-adevăr suna ca dintr-un script.
LillyPond, puteți apela din aceste scripturi.
Ai putea repeta cu ușurință LillyPond cu LaTeX.
Eu nu va avea prea mult timp pentru a merge în aceste tehnologii, chiar acum,
dar ele există.
Dacă doriți să se uite într-o carte LillyPond,
este un program care vine cu distribuția LillyPond,
și este pentru iterarea Fragmente LillyPond în LaTeX
dacă vrei să faci ceva ca un document muzicologie mare
cu exemple, de exemplu.
Și e un moral bun pentru viață dacă faci ceva
cu muzica, nu doar CS50.
Am folosit LillyPond pentru toate dintre proiectele mele de compoziție
deoarece am fost de fapt o liceu.
>> Deci, aici sunt câteva exemple simple.
Aceasta este de fapt reprezentant de nivelul de dificultate
că majoritatea persoanelor ar se confruntă cu o au încercat
de a utiliza LilyPond pentru proiecte simple.
Aceasta prima unul este începutul la un preludiu coral de Bach.
Acesta jos este un fragment de la una din propriile mele lucrări,
și este doar acolo pentru a arăta te lucruri cum ar fi [] nu pot fi auzite
punerea mai multe linii în aceeași personal, cum liric undersetting funcționează.
Underlays Lyric sunt un lucru care este foarte ușor de utilizat LilyPond pentru muzică corală.
>> Și așa, atunci nu e ceva mai mult Exemple complicate aici.
Toate acestea se fac în LilyPond și sunt fezabile.
Acest prim fragment este de la [Inaudibil] de [neauzit].
Și aceasta [Inaudibil] de la o bucată de bas solo
flaut de [neauzit], care este un longtime-- care
a fost un membru mult timp de Departamentul de muzica aici, cred.
Nu sunt sigur în cazul în care el a plecat la.
Dar el a fost consilier al Harvard Asociatia compozitori pentru o lungă perioadă de timp.
Om minunat.
Și a scrie o muzica care are foarte notație complicat care LillyPond
pot ocupa totuși foarte frumos.
>> Deci, doar pentru a vă oferi un sentiment de ceea ce capacitățile acest lucru este atât de are--
componentele interne ale LillyPond sunt foarte complicate.
Și îl puteți folosi pentru de mult timp, inclusiv
pentru unele destul de complicat lucruri, într-adevăr fără
a fi nevoie să știe o mulțime de lucruri despre ei.
Dar ideea de bază este că, pe cel mai scăzut nivel, atomii de LillyPonds
sunt notele.
Notele conțin o Contextul numite voci.
Deci contextul voce practic corespunde
la o singură linie de polifonie.
Și apoi context poate fi conținut ierarhic
în cele de nivel superior care reprezintă personalul pe punctajul
sau grupuri mai mari, cum ar fi personalul pian sau bete cor,
și apoi în cele din urmă contexte întregi scor.
Și tu poate cuprinde de fapt mai multe scoruri într-o carte.
>> Și fiecare context are un Numărul de gravori atașate.
Dacă te uiți prin conținutul unui context
și imprima un anumit simbol sau un anumită clasă de simboluri ca este necesar.
Deci, pentru a fiecare context de voce, nu e [Inaudibil] Note
gravor care este de fapt o funcție sau un obiect care scrie tot nota
capete pe părțile din dreapta ale unei pagini.
Apoi, există un gravor despicat, care scrie în crăpături asupra personalului.
Apoi, există un metronom marca gravor care
scrie pe mărci Metronome într-un scor.
Și toate acestea se potrivesc destul de bine în ierarhia.
Și e foarte, foarte, foarte personalizabil, care aveți nevoie
dacă doriți să obțineți lucruri de genul asta.
>> Deci, toate contextele au o mulțime de atribute diferite
pe care le puteți modifica pentru tot din distanța la diferite font
selecție pentru dimensiunile de lucruri.
Dacă vrei să faci chiar lucruri mai complicate,
există o limbaj de scripting încorporat.
Ei folosesc sistem, care este dialect al LISP.
Acestea, probabil, nu înseamnă ceva pentru tine.
Dar în esență, un sistem de un alt funcțional
limbaj de programare, mai mult sau mai puțin.
>> STEPHEN KREWSON: tie-in.
>> CONNOR HARRIS: Da.
Este un bun tie-in, presupun.
Și este folosit ca un limbaj de predare, de fapt, în jos de masă Ave. La MIT.
Și este foarte util pentru LillyPond pentru diverse motive tehnice.
>> Și deci, dacă doriți să faceți simplu trucuri dependente de condiționale,
pentru example-- există anumite condiție de un scor care este cunoscut,
face modificări la aspectul sau whatnot-- atunci
aceste facilități sunt acolo.
Sunt complicate.
Deci, aici e un eșantion de cod destul de simplu.
E cinci linii.
Practic, am definind două personalul.
Este scris în 3/4.
Primul Personalul are o atașat marca tempo,
dar că de fapt merge pentru a merge pe la întreaga scorul,
deoarece mărci tempo sunt la nivelul scorul.
Marca metronom gravorului este atașat să înscrie context.
Există chei diferite, deoarece [neauzit] gravorului
este atașat personalul.
Puteți face de fapt este.
Eșantionul am scris este de fapt, în Do major,
dar este doar pentru a demonstra puteți avea
chei diferite în diferite personalul.
Și sintaxa de bază este să scrie Atentie nume cu E, F, G, oricare ar fi.
Dacă vrei să faci accidentals, te sufix este sau ES.
Acest lucru este de la Dutch convenții muzicologice.
>> Și pentru a face salturi de octavă, va trebui să utilizați acestea bifați mărci, virgulă sau apostrof.
În raport înseamnă doar orice ai o notă,
acesta va fi plaec automat în octavă mai apropiată de cea anterioară.
Și, dacă doriți să sari mai mult un fifth-- spun o cincime sau more--
atunci va trebui să utilizați [neauzit].
Dar altfel, nu trebuie să specifica octava de fiecare nota.
>> Și relativ C, prim, și C, doar să specificați de mijloc C
și de bază C, în special primele note.
Apoi, aveți aceste personalul care organizează aceste două voci sau eșantioane de muzică,
și aveți un scor.
Și care arată ca aceasta.
>> Dacă doriți să faceți timp pentru a copie care eșantion de LillyPond
cod pe anterior glisați în jos aici, iar tu
poate scrie pentru tine LillyPond.
Știu că ne-am luat ceva care arata foarte mult ca aceasta.
Deci există o altă tehnologie numit Muzica XML menținut
de persoane complet diferite.
XML este un text de date structure-- I Nu ar trebui să spun de date structure-- spun
metaforă harta fel de.
Și este proiectat să dețină date ierarhice foarte bine.
HTML, de exemplu, este un tip de XML.
Și pot să vă spun XML pentru că au avut toate paranteze unghiulare și unghiul
mărci suport slash că câmpuri arată date.
>> Nu am un cod exemplu de Muzică XML.
Puteți găsi singur.
Practic, motivul pentru care s-ar putea dori de a utiliza XML ca stadiul intermediar
este, în primul rând, este un format de schimb
pentru practic every-- eu nu ar trebui să spun fiecare, dar o mulțime de scor diferite
scriitori.
Deci, dacă vă scrie în Muzică XML, nu numai pot LillyPond
citit-o cu ajutorul acestui auxilary program numit Muzica XML pentru LY,
dar, de asemenea, poate citi Finale aceasta, Sibelius poate citi.
În funcție de modul în care dvs. obiect intern ierarhie lucrează pentru reprezentarea muzică,
ar putea fi mai ușor să scrie la Muzică XML decât la LillyPond
și doar se bazează pe muzica XML să LY pentru a face conversia.
>> Nu cred că [neauzit] are Muzică XML.
STEPHEN KREWSON: nu.
Cineva lucrează la el, deși.
>> CONNOR HARRIS: OK.
Euterpea nu are un Funcție de ieșire muzica XML încă.
Dacă doriți o idee finală a proiectului, poate intra în contact cu baieti
că Ștefan știe, și acestea ar putea folosi de ajutorul tău.
>> STEPHEN KREWSON: Mi-ar plăcea asta.
CONNOR HARRIS: De asemenea, în esență, fiecare limbaje de programare
care merită sarea sa are deja o bibliotecă XML,
astfel încât să puteți converti intern toate de muzica în unele obiect
că biblioteca XML poate scrie faptul că ar avea nevoie de mai puține
modificări la structura intern pentru orice muzica pe obiecte
doresc să scrie decât scris-o direct în LillyPond ar fi.
Apoi, pur și simplu imprima cu XML cu bibliotecile XML în limba dvs.,
care va garanta că este sintactic corecte și totul,
și apoi converti la LillyPond.
Deci tehnologie ar putea să doriți să uite în cazul în care faci ceva
asa.
>> [Auzite], un alt Tehnologia auxilarry.
Aceasta este de fapt Tech Works sau Tech Studio pentru LillyPond.
Așa că oferă ajutor cu sintaxa, cu template-uri
pentru diverse comun combinații de instrumente.
Acesta permite vizualizarea atât de split screen poti avea codul într-o singură fereastră
și PDF într-o altă fereastră și click pe locuri în PDF
pentru a sări la relevante pete în codul sursă.
Acest lucru este mai util dacă ești de fapt scris LillyPond fișiere te
decât dacă sunteți generatoare le programatic.
Dar, din nou, e ceva util pentru a avea.
>> Grozav.
Un alt resources-- Voi doar du-te prin acest lucru foarte repede.
LillyPond manuals-- LillyPond are documentație excelent pe site-ul său.
Ei au un tutorial.
Ei au o referință sintaxa.
Ei au sute de fragmente pentru diverse lucruri mici
yo ar putea avea nevoie să demonstreze face diverse capacități.
Dacă doriți să utilizați limbaj de scripting
sau face mai extinse particularizări, atunci nu e
interne de referință la respectiva adresă URL.
Dacă doriți să utilizați Muzică XML, nu e că URL, musicxml.com/tutorial.
>> Și apoi, dacă aveți nevoie pentru a învăța sistem pentru că de fapt, doriți să utilizați
facilitățile de scripting din LillyPond, atunci există o [Inaudibil] numit
Interpretarea structurat de programe de calculator,
care nu este doar al doilea cea mai mare manual CS written-- vreodată
mă găsești după aceea, dacă vrei să știi Cred că cea mai mare ce-i singura este--
dar este de asemenea un foarte bun Introducere în limba corectă.
Tu nu va nevoie de mai mult primele secțiuni.
>> Si asta e.
Alte intrebari?
>> STUDENT: De unde pot descărca generat Frere Jacques
așa că am putea pune pe iPod-ul meu?
>> STEPHEN KREWSON: Ei bine, puteți scrie la un fisier wav în Euterpea.
Și ai codul.
E pe GitHub.
Face propriile variante ale Frere Jacques de minte stup CS50.
Ar fi grozav.
CONNOR HARRIS: Altcineva?
STEPHEN KREWSON: Avem nevoie de un tambur bas mai bun, de asemenea.
E foarte rău.
>> STUDENT: Euterpea nu numai partea compoziție, dar signal--
STEPHEN KREWSON: Da.
De fapt, activitatea I făcut în Euterpea când am
a luat asta: există o absolvent curs la Yale care
folosește it-- fost pe sinteza de sunet.
Deci, există un adevărat mod plăcut cu ajutorul săgeți
și o parte din notația am văzut de compunere împreună funcțiile de semnal.
În special, basul pentru mai dintre ele este doar un simplu undă sinusoidală.
Dar, dacă începeți să compuneți cele în moduri ciudate programatice,
puteți obține un sunet nebun efecte, cum ar fi cascade ciudat.
Puteți crea foarte curajos sunete cu o mulțime de modulare.
>> Am făcut un proiect pe granular sinteză, care este
undeva între FM și de prelevare de probe.
Iei foarte mici, eșantioane mici, și apoi
să le combine cu un fel de modulator și construi un sunet mai bogat.
Am făcut, de asemenea, modelarea fizică, așa încercând să se gândească la fizica
și psiho de ceva de genul o trompetă, și de gândire despre modul
sunetul este cade pe clopotul de trompeta
și acustica cameră și modelarea
care cu oscilatoare de bază.
CONNOR HARRIS: Multumesc mult.
Mulțumesc pentru vizită.
Și sunt întotdeauna dispuși să ia întrebări de email--
connorharris@college.harvard.edu.
>> STEPHEN KREWSON: Da. stephen.krewson@yale.edu.
Misto.