CONNOR HARRIS: Cześć.
Jestem Connor Harris.
Jestem Kalifornia CS50 na Harvardzie.
STEPHEN KREWSON: Jestem Stephen Krewson.
Jestem TF CS50 w Yale.
CONNOR HARRIS: I mamy zamiar rozmawiać o niektórych technologii, które może
chcesz użyć, jeśli jesteś zainteresowany w sposób ostateczny projekt lub bardzo
coś z muzyką.
Mamy zamiar być skupienie się na pierwszy język programowania zwany Haskell.
Jest to funkcjonalne język, więc paradygmat
bardzo różni się od C lub PHP lub inne języki imperatywne
które zostały już wykorzystane, a zwłaszcza w bibliotece pisemnej w Haskell
nazywa Euterpea, które mogą pomóc ludziom z pisania muzyki funkcjonalnie,
gruntownie.
Stephen cię chodzić wielki przykład, że.
>> Po tym, przedstawię cię do coś, co nazywa LillyPond, które
to technologia muzyki składu tekstu.
To coś jak LaTeX do muzyki, jeśli ktoś z was
skorzystało LaTeX dla klas matematycznych lub inne klasy P ustawić lub co cię mieć.
A więc dam ci znowu kilka prostych przykładów, które
i punkt, który w ogólnym Kierunek niektórych lepszych zasobów.
>> STEPHEN KREWSON: W Ponadto, myśleliśmy, że to
Byłoby super, aby skonfigurować trochę podpowiedzi
w kierunku rurociągu pomiędzy Euterpea generowanych plików MIDI
w LillyPond, więc zapewniamy niektóre wskazówki na skryptach
aby to zrobić, że są wyposażony LillyPond
po prostu zachować to open source i uzyskać rurociągu dzieje.
CONNOR HARRIS: Ponownie, należy podkreślić,
te dwie technologie, ty nie trzeba używać ich razem.
Nie są one przeznaczone do pracy razem, choć to bardzo ładnie.
>> STEPHEN KREWSON: Racja.
I nic nie kosztuje.
CONNOR HARRIS: Tak podziękowania, po prostu przeczytać, że.
STEPHEN KREWSON: Zanotowano.
Dzięki tych ludzi.
To będę utrzymywał się tylko na chwilę.
Proces instalacji Jest to trochę trudne.
Mamy przeczytać mnie na GitHub że można spojrzeć na.
Po prostu napisz do mnie, jeśli masz jakiekolwiek pytania.
Ale my uruchomić to przy założeniu, że pracuje dla każdego.
CONNOR HARRIS: A jeśli nie możesz uzyskać LillyPond do pracy, nic wielkiego.
Nie ma żywo kompilacja, że będzie zaangażowany, przynajmniej na mojej stronie.
STEPHEN KREWSON: Haskell i LillyPond powinny obie mają instalatorów.
Euterpea zostanie pobrany jako Opakowanie tak dalej, i tak dalej.
Więc mówimy o muzyce komputerowej.
I to jest właśnie bardzo Widok 50.000 stóp.
Istnieje kilka różnych aspektów tego.
I to jest szorstki i jest będzie przesłaniać pewne szczegóły.
Ale możemy myśleć o czymś jak składzie algorytmicznego,
za pomocą algorytmów, za pomocą kodu w celu wygenerowania
Może jakiś rodzaj of-- self-podobne ciąg notatek, a może notatek
pod pewnym przymusem.
A potem te mogą być wykonane lub interpretować
z instrumentów analogowych lub coś podobnego.
Ale skład był zrobić algorytmicznie.
>> Ale oczywiście, może obszar komputer lub muzyki cyfrowej muzyki
jesteśmy bardziej zaznajomieni z jest cyfrowy synteza dźwięku lub cyfrowego próbkowania
i zapisu cyfrowego.
Wiele instrumentów cyfrowych są odbywa się za pośrednictwem cyfrowego pobierania próbek.
W rzeczywistości, będziemy za pomocą jednego z tych, w forma zdrowego biblioteki czcionek później.
>> Ale jest też coś, co nazywa synteza cyfrowa, że ​​wyszedł
w późnych latach 70. i do lat 80. z Yamaha i John Chowning w Stanford
robi syntezę FM lub Synteza FM,
gdzie miał przewoźnika Sygnał i Sygnał modulujący
zarówno w widmie dźwięku.
Ale to, co jesteśmy skupieni na dzisiaj jest coś, co nazywa MIDI,
i oczywiście, kompozycji algorytmicznej.
>> Nie jedziemy do instrumentów, ale my, a nie zamiar zrobić jakąś muzykę,
a następnie, że będzie się interpretować przez niektórych instrumentów
są zgodnym z standardem General MIDI.
Więc co jest MIDI?
Nie będę się zbyt głęboko w niej, ale MIDI to protokół transmisji danych.
Jest to swego rodzaju przewodnikiem po drugiej różnych firm i branż
za organizację dźwięków lub poprawek.
Więc zobaczymy, że jest standardem MIDI
dla wszystkich różnych perkusji dźwięki i zalecenia MIDI
dla wszystkich różnych typów syntezatora lub Różne typy wszystkich przyrządu
grupy z orkiestrą, powiedzieć.
>> Jesteś prawdopodobnie zna 0 do 127 komunikaty MIDI.
Sygnał MIDI jest zazwyczaj jeden bit wskazujący
czy to danych lub pakiet stanu, a następnie nie ma
siedem bitów sygnału.
I można kontrolować wszystko od wielkości
do działania lub ciśnienie w szczególności klucz
jeśli wykonując z MIDI Sterownik jak również, oczywiście,
notatki.
I oczywiście, MIDI ma było bardzo przydatne,
dlatego, że jest to sposób na drucie razem lub łańcuchowy
banda urządzeniami MIDI.
Mam siedem lub osiem z powrotem w moim domu.
To staje się bardzo skomplikowane, ale to jest naprawdę potężny.
I to jest bardzo stary.
To od początku lat 80., a to jest naprawdę ładne i małe.
CONNOR HARRIS: Tak.
Wszystko klasyczny Nintendo gry wideo prawdopodobnie
mają pliki MIDI dla muzyki, na przykład.
>> STEPHEN KREWSON: Oto Przykładem General MIDI,
pokazując MIDI jako rodzaj ogólnego protokołu.
I myślę, że możemy myśleć o Różnica pomiędzy specyfikacji
że nie powinno być coś takiego jak tych brzmień instrumentów i rzeczywisty
Realizacja tych instrumentów brzmi w dźwięku czcionki lub konkretnego MIDI
syntezator jako różnica między może z typeface--, który mówi,
Na ogół jest to konstrukcja ten szczególny sposób do reprezentowania
characters-- a zwłaszcza czcionki który posiada określony rozmiar i barwę,
i jest realizacja the--
>> CONNOR HARRIS: Może lepszym porównaniem
być standard Unicode says-- daje numer do każdej postaci, a tak naprawdę
każdy język na świecie, lub szeroki zestaw skryptów języka
na świecie, a następnie te są renderowane w coś graficznego
przez różne pakiety czcionek.
I oczywiście, można myśleć MIDI jako Unicode dźwięku.
A to po prostu lista of-- dużym strumieniu imprez i instrumentów i etażerka,
i trzeba mieć oddzielny Program, jak krój,
aby uczynić to pod coś, co jest słyszalne.
>> STEPHEN KREWSON: Więc dlaczego Haskell?
Haskell jest programowanie funkcjonalne język, bardzo zaawansowany,
różni się od C bardzo różni się od PHP.
A my będziemy widzieć, że istnieje łatwość kompozycji funkcji w Haskell
które pozwoli nam na wiatr przez komponowania lub wpisując się, transkrypcji,
coś Frere Jacques, ta prosta piosenka,
ma wiele części na to, że są samo-podobny lub powtarzania.
Więc będzie to niektóre z motywacja, dlaczego
Używamy Haskell, w którym funkcje są obywatele pierwszej klasy.
>> I chciałem przedłużyć to trochę.
To trochę łatwe zapisywać Frere Jacques w Haskell.
Ale co, jeśli chcemy dodać część bębna do niego?
Co zrobić, jeśli chcemy, aby spróbować zrobić coś jak Roland 808 lub 909 bębna
Maszyna, gdzie trzeba około 16 różnych kroków?
Zazwyczaj są to uważany za 16 notatek.
I można kontrolować światowy Tempo, i można wybrać się
kilka różnych części perkusyjnych w bęben basowy, klaskać, różne sidła,
otwarte i zamknięte wysokie kapelusze na ten rodzaj kanałów,
a następnie można EQ lub dostosowanie ich głośność.
>> I zobaczymy piękny sposób w Haskell reprezentować ten krok
sekwencer ze wszystkimi różne fajne rzeczy w Haskell
możemy zrobić z agregatem listy i filtrowanie ponad list,
Mapowanie nad listami, mapowanie Funkcje ponad list.
I szybkie przeprosiny.
Jest to bardzo pobieżne i zbyt szybki szkic
niektórych z aspektów od Haskell i Euterpea,
co jest specyficzne dla domeny wbudowany język pisany
w Haskell dla typów muzycznych.
Więc proszę sprawdzić kod w Internecie.
Odpal GHCI, który jest w Glasgow Haskell Compiler tłumacza.
I będę robić niektóre tego w trochę
więc można zobaczyć, jak to się robi.
>> A to pozwala na wczytanie się z the-- składnia jest dwukropek, a następnie
polecenie.
Można załadować w pliki.
Możesz użyć przeglądania tych plików aby zobaczyć wszystkie funkcje, które
istnieć w szczególności moduł.
A potem, jak zobaczymy, rodzaje i typ Zajęcia są tak ważne w Haskell,
więc zawsze można check-- szczególnie jeśli pracujesz w nowym DSCL
jak to, co jest to rodzaj muzyki?
Wiem o tym, jak numeryczne rodzaje pracy w Haskell,
ale ja nie znam się na muzyce.
Ale można zbadać sposób, w jaki jesteśmy zdefiniowane za pomocą tego typu polecenia T lub
i dzwonienie w szczególności Funkcja lub obiekt danych.
CONNOR HARRIS: Tak.
Jeśli myślałeś, C i brzękiem był hardass o typach,
nie masz pojęcia o Haskell.
Dobrą rzeczą jest to, że Haskell czy można dostać kod do kompilacji
a jeśli kontrole typu Haskell, to chyba dobrze,
ponieważ system typu jest tak rygorystyczne.
>> STEPHEN KREWSON: Tak.
Więc po prostu chcę iść through-- i znowu,
to nie robi to justice-- kilka funkcje Haskell, że przynajmniej
jego creators-- a powstał w latach 1980 przez kilka osób,
komisja około 20 people-- że były ważne.
I pierwszą rzeczą, jaką wymienione w papierze
opisano genezę Haskell w ciągu pierwszych 20 lat lub więcej
było to, że był leniwy.
Więc co to oznacza?
>> Cóż, to znaczy, gdy mamy jakieś wypowiedzi, musimy go ocenić.
I robi to Haskell w rozmowie Na zasadzie potrzeby lub nie-ścisłym sposób.
Oznacza to, że jeśli mamy kilka elementy naszej ekspresji,
staramy się opóźnić ocenę z tych składowych
do absolutnego ostatniej minute-- że jest aż tak naprawdę ich potrzebują.
>> Więc to means-- który jest naprawdę fajne, szczególnie
jeśli myślimy o abstrakcji muzycznego kroku sekwencera.
Go włączyć i zacząć prowadzenie krok sequence--
Jeśli kiedykolwiek pracował z bębna machine-- i to tylko po to na zawsze.
Więc byłoby naprawdę miło, gdybyśmy może emulować, że w Haskell.
I możemy zrobić to z nieskończoną wartości, w szczególności list nieskończonych.
To bardzo proste, aby wpisać nieskończona lista w Haskell.
Możesz po prostu użyć składni dół tutaj, gdzie można zobaczyć od 1 do 3,
usunąć 3 1 kropka kropka, a że jest to lista nieskończona
wszystkich liczb naturalnych rozszerzenie na ile można sobie wyobrazić.
>> Chcę wprowadzić Koncepcja fałdy od razu.
I znowu, celem Seminarium to nie jest
dowiedzieć się o fałdy w Haskell lub wyższe funkcje zamówienie.
Ale ja po prostu chcę, aby wprowadzić go do podać dokładny sens, jak dziwne
Haskell jest i jak silny jest.
A w szczególności, mamy zamiar być: gdy robimy nasze różne partie perkusji,
jedziemy do manipulowania listy Liczby, składając je na siebie.
I to zrobić, będziemy się za pomocą mapy i fałdy.
>> Istnieje prawo asocjacyjne krotnie, co jest ten jeden w prawo
here-- 1 minus ilość, 2 minus ilość, 3 minus 0.
I składnia dla krotnie, dajesz krotnie
wartość bazowa i wtedy operation-- W tym przypadku dodawanie lub odejmowanie.
Pokazałem obu przypadkach.
A potem jest z akumulatora gromadzi się na całej liście,
stosowania tego plusa operatora lub minus, a następnie gromadzenie go.
Więc to będzie the-- jeśli został powołany ze składaną R plus 0, począwszy od 0,
my to suma wszystkich numery w tym wykazie.
I to jest lista od 1 do 3.
CONNOR HARRIS: Tak, aby umieścić go innym sposób krotnie r pobiera trzy argumenty.
Jest to funkcja, która Sam przyjmuje dwa argumenty,
potem jest wartość rozrusznik, i tam jest lista wartości.
A co zrobić, to wziąć Wartość rozrusznik, pierwsza wartość,
umieścić je w funkcji.
Co Ci się, się, że kanał, który
do funkcji z Druga wartość, to, co masz na zewnątrz,
wziąć to, nakarmić, że w Funkcja trzeciego wartości.
A potem, jeśli w dół cała ta lista w ten sposób,
masz zamiar dostać się w końcu niektóre liczby pojedynczej wartość to
tego samego rodzaju, co na początek się z lub z tego samego typu
jak rzeczy z listy, a następnie to wynik powrót krotnym R.
STEPHEN KREWSON: Tak, w szczególności, są wyższe funkcje zamówień,
bo bierzesz kolejny Funkcja jako jeden z argumentów.
>> CONNOR HARRIS: Tak.
Jeśli stosowane niektóre inne languages-- Wiem R, [niesłyszalne]
język ma ten, zwany Zmniejsz.
Możesz mieć podobne funkcje w innych językach, tak zwane
różne rzeczy.
>> STEPHEN KREWSON: A co jest ładne o krotne R
w tym przypadku jest to, że krotnie R może pracować z nieskończonych listach.
Więc w tym dole, tym P5 jest generowanie notatek, które
są włączone w sekwencera kroku dla jakaś część bębna, piąta część bębna,
a może jest to conga bębna lub coś.
I jest celowo tępy sposób pisania tego,
ale to jest zabawne, ponieważ to pokazuje wiele
rzeczy, o Haskell i Euterpea.
>> Więc krotnie R tego colon-- okrężnicy jest tylko operator, który popycha rzeczy
razem na list-- wezwał pusty Lista, która jest po prostu puste nawiasy.
A ja dzwonię, że na tej nieskończonej listy.
To jest rzeczywiście dwie listy sumowane tutaj.
Lista 1 przecinek 6 kropka Kropka jest 1, 6, 11, 16.
Więc Haskell-- w zaledwie kilka znaków, można
może generować całej karty sekwencja liczb
które są pięć numerów siebie rozciąganie w nieskończoność.
A ja dopisuje do tym krótszy trochę list--
3, 8, 21-- po prostu pokazać, jak można łączyć listy.
>> A potem mam złożyć na siebie.
I to kończy się po prostu rodzajem Operacja tożsamości, ale jest nieskończona.
I złożyć R może tego zrobić, ponieważ to leniwie ocenia, jak wyżej.
Jeśli mamy 1 i 2 i 3, możemy tylko wspornik wyłączyć całą resztę.
To nie będzie działać minus lub plus, ale to
będzie działać w tym jelita grubego Działanie identyczności na tej liście.
>> Więc jak praktycznie wykorzystywać, że jeśli mieć nieskończenie długą listę rzeczy?
Cóż, Haskell zapewnia wiele functions--
i wyglądają bardziej do nich w własne time-- takich jak zabrać
która mówi, OK, jesteśmy generowanie tej nieskończonej listy,
ale jesteśmy po prostu będzie się niektóre liczba nim I w tym case--
zobaczymy to później w nasz automat perkusyjny code--
GM jest tylko jakaś globalna zmienną liczbę kroków
w sekwencera.
Na maszynach konferencyjne I pokazałem, to zazwyczaj 16,
ale wprowadziły go z 32.
To naprawdę nie ma znaczenia.
>> Haskell jest czysta, więc ma silne statyczne typowanie, że Connor wspomniał.
Więc funkcje są matematycznych w sense--
są one bardziej matematyczne że są one gwarantowane
nie dostępu lub zmianę jakiegokolwiek zmienna lub wykonywać wejścia lub wyjścia.
Więc jeśli masz funkcję, jest deterministyczny.
Będzie on zawsze zwraca ten sam Wartość w stanie tego programu
lub pozostaje taka sama.
Istnieją, oczywiście, monadycznego wyjątki do tego, ale to jest poza naszym zakresem.
>> CONNOR HARRIS: Tak.
Oznacza to jednak, istnieje kilka ważnych [niesłyszalne]
Konsekwencje tego.
Jednym z nich jest to, że bardzo łatwo parallelize programy Haskell.
Bo jeśli masz, powiedzieć, funkcję, która
musi działać na milion wartości, jeśli wiesz, że funkcja będzie zawsze
dać się taką samą wartość, jeśli karmisz w pewnym value--
jeśli jesteś [niesłyszalne] f 1, f 2, to f 3 lub whatnot-- f 1
nie będzie pisać do pliku lub zrobić coś
które będą zmieniać wartość f2.
Możesz po prostu podzielić się tej funkcji w milion różnych maszyn albo mln
różne wątki lub cokolwiek, uzyskać wszystkie odpowiedzi z powrotem,
uzyskać wszystkie wartości zwracanych z powrotem, a następnie to wszystko.
Więc bardzo łatwo parallelize rzeczy.
>> Minusem jest to, że wejście i wyjście szczególnie
pasuje do systemu typu w bardzo skomplikowany sposób.
Nie będziemy się tym teraz, ale Zachęcam, aby spojrzeć na niektórych zasobów
w Internecie, jeśli chcesz dowiedzieć się o tym.
>> STEPHEN KREWSON: Tak wpisz classes-- i to
was-- klasy typów zostały wymyślone w celu rozwiązania
problem przeciążenia operatora.
Więc chcieliśmy mieć równość różnych typów rzeczy.
Oczywiście, moglibyśmy pomyśleć of-- równość typów liczbowych
Jest bardzo łatwy do myślenia, ale co równości list?
Co na temat równości drzewo struktury danych noga?
I jest to możliwe w Haskell, ponieważ klas typu.
>> Więc jeśli zdefiniować pewną type-- danych i tu, są boiska muzyczne.
Jesteśmy w końcu się jakiejś muzyki komputerowej.
Więc mamy C, C ostre, i tak dalej i tak dalej.
Należą one do bandą różne klasy typu.
EQ-- należą one do klasy typu EQ.
To oznacza, że ​​wsparcie Działania na rzecz równości.
Tak więc można ocenić, czy jeden Kolejność prymitywów muzycznych
jest takie samo jak na inny.
>> Należą one do porządkowej klasie.
Oznacza to, że nie ma się do nich porządkuje.
D jest po C. cis przychodzi po C, jak również.
Należą one do klasy pokazać, co oznacza, że ​​mogą
być drukowane do konsoli lub terminala.
Należą one do Klasa wyliczone, które
Oznacza to, że, choć Są to znaki,
mają one stanowiącego podstawę numeryczne reprezentacja zaczynając od 0
i dzieje się za pośrednictwem jednak wiele rzeczy jest tutaj, 20 lub tak,
lub 30 lub 40, może.
>> CONNOR HARRIS: A kiedy mamy typ danych
że derives-- z tego słowa kluczowego "deriving--" pewna klasa typ,
oznacza to, że kompilator będzie próbował automatycznie zbudować coś.
Więc może będziesz chciał definiują jakość inaczej.
Będziemy chcieli, aby zdefiniować cis jak równy D płaskim, na przykład.
Dzięki tej budowie tutaj, nie sądzę, cis
i D płaskim będzie równa, ponieważ kompilator automatycznie
powiedzieć każdą inną możliwą wartość różni się od każdego innego.
>> Więc to jest możliwe, aby zastąpić implementacje domyślne
tych rodzajów klas.
Ponownie, spójrz na odwołanie, jeżeli chcesz dowiedzieć się o tym.
STEPHEN KREWSON: A tutaj, w rzeczywistości, to będziesz
być pomocne, gdy kod później.
Widzimy niektóre infiksowych operatorów w składzie sekwencyjnego,
Skład równoległe, a więc dalej, te plusy i znaki równości
otoczony dwukropkami.
Oznacza to, że możemy grać te różne prymitywy muzyczne jeden po drugim.
To kompozycja sekwencyjny.
>> Albo możemy odtwarzać je w równolegle w tym samym czasie.
Więc mogę mieć wartość muzyczną, a potem to równa i dwukropki,
Wrostek równoległego operator składu, i odtwarzać je jako rodzaj akordu.
I mamy zamiar używać to, gdy łączymy
nasza część bębna z naszym mała piosenka Frere Jacques
grać te dwie sekwencje Wartości muzyczne w tym samym czasie.
>> Currying jest-- Curry był ostatnio nazwa Haskell Curry, który
obraz Haskell jest nazwany.
A to pozwala nam na ładne elegancja, gdy jesteśmy
pisząc to wszystko inaczej funkcje lub filtry, że jesteśmy
będzie mapowanie na naszych listach.
Funkcja dwóch arguments-- f x i y--
można przedstawić jako f x stosowana do y.
Więc jest to funkcja jeden argument, który powraca
Inną funkcją jednym argumentem.
Więc to oznacza, że ​​możemy zmapować funkcja f x, y na liście użytkownika.
CONNOR HARRIS: Chcesz, aby dać przykład tego?
STEPHEN KREWSON: Tak.
Mam przykład tu od niektóre z rzeczy, będziemy pisać.
Więc replikować 2-- dobrze, replikować odbędzie
jedna wartość, która jest, jak wiele razy powtórzyć coś,
a następnie zajmie value-- Zazwyczaj lista czy coś.
Więc, jesteśmy mapowanie replikować 2 na innej liście.
>> Więc jeśli mamy map replikować 2, jeśli replikować 2 stosuje
z pierwszym elementem tego list-- i są to wykazy muzycznej phrases--
będzie produkować dwa "ty sleeping--" tak śpisz, śpisz.
Więc teraz mamy dwa.
Ale kopią dwojga argumenty, ale dlatego, że jesteśmy
currying a następnie mapowanie, możemy reprezentować rozmnażać 2
jako mający zwrócone w funkcji jeden argument-- prostu replikacji dwukrotnie.
A potem starasz, że do każdego elementem tej listy fraz.
>> I concat jest Haskell Operacja spłaszczania listę.
Ponieważ kopią 2 woli sporządzi listę list.
I to jest tutaj, to pośrednia.
I tak możemy Concat lub spłaszczyć, że dwa razy.
CONNOR HARRIS: Prostsza Przykładem zmiękczanie,
gdybyś like-- wyobrazić f jest tylko Funkcja mnożenia, że ​​trwa dwa
argumenty i zwraca ich produkt.
Więc jeśli masz F 4 na 5, to 20.
Ale można pomyśleć o tym, jak also-- masz funkcję f 4
że przyjmuje argument i powraca cztery razy w tym argument-- tylko
częściowe aplikacja tylko jeden argument 4.
A jeśli karmisz f 4 5, który daje 20.
I to jest prostsze Przykładem zmiękczania.
Zazwyczaj jeden z tych podręczników.
>> STEPHEN KREWSON: Lambda wyrażenia lub funkcje anonimowe
są kolejnym znakiem rozpoznawczym Haskell.
Więc jeśli musimy wzbudzać Funkcja kopią trochę życia,
ale powiedzieć, że nie jest w biblioteka standardowa,
możemy użyć składni podobne do następujących.
A my wiatr nad tym.
Jedną rzeczą, którą można zobaczyć wiele w automat perkusyjny jest robimy połączenia
coś o nazwie filtr, który podobnie jak poprzednio,
jest odwzorowaniem funkcji na liście, ale to
mapowanie Boolean funkcji.
>> Tak więc mamy tu przykład na jedno anonimowo
zdefiniowana funkcja logiczna zajmuje tylko kilka wartości.
Nie jest to ściśle mówiąc anonimowa funkcja.
Ale to określenie z że składnia dla zwięzłości,
i to po prostu ma moduł x n--
CONNOR HARRIS: Tak.
Tak f jest funkcją dwa argumenty n oraz p
która zwraca funkcję, która jest sama funkcją jeden argument, a mianowicie x.
STEPHEN KREWSON: I wyżej wymienione podmioty Wrostek.
Jakie są operatorzy Wrostek?
Cóż, operatorzy Wrostek są normalny sposób reprezentujemy operacji,
powiedzieć, w mathematics-- 2 plus 2 zamiast operatora oraz
a następnie dwa argumenty 2 i 2.
CONNOR HARRIS: To się nazywa Odwrotna Notacja Polska, która jest
termin wątpię ktoś z was będzie wiedział.
>> STEPHEN KREWSON: Racja.
Rewers notacji polskiej lub prefiksu.
Ale Haskell postanowił używać operatorów Wrostek.
Tak więc są to jedne z te niestandardowe
są zdefiniowane dla Euterpea DSCL w Haskell.
Więc to był skład sekwencyjny.
To był skład równoległe, a to było obcinanie skład równoległego.
I musimy, że z naszego automatu perkusyjnego,
bo użyjemy ostatni Operator w tym małym krotki tam
gry na automat perkusyjny wraz z naszą piosenką Frere Jacques.
A nasz automat perkusyjny jest będzie nieskończona.
To po prostu gra na zawsze.
Ale piosenka Frere Jacques nie jest.
To nie jest tak długo.
To tylko kilka barów.
Więc musimy zatrzymać maszynę bębna w tylko krótszy wartość muzyczna pochodzi
do końca.
I że operator infixed jest super pomocny z tym.
>> I Wrostek notacji jak jest to miłe,
dlatego, że masz funkcji takich jak cytat, który daje podział liczby całkowitej
x czymś else-- Przepraszam, że powinno być i b.
Możesz napisać go jako cytat z b.
Więc jeśli put-- elementem jest innym przykładem.
x elementem jakiejś listy, jeśli umieścisz to w backticks, można go używać.
Nawet jeśli to nie jest symbol jak plus lub minus lub czasach,
można użyć nazwy Funkcja takiego w backticks
jako operator wrostkowy, który jest całkiem fajne.
CONNOR HARRIS: Ponownie, jest to cały cukier właśnie składniowym, naprawdę.
To nie ma wpływu na istotę języka.
>> STEPHEN KREWSON: Widzimy więc tutaj dla Ostatnie zdanie naszej piosenki Frere Jacques,
Grałem kilka małych akordów lub trzecie zastosowaniem kompozycji równoległe
operator.
Jest to kolejny sposób na powiedzenie kilku z tego, co mamy właśnie mówi.
Więc można mapować funkcje z jednym argumentem na listach.
CONNOR HARRIS: Ponownie referencje dla Haskell-- podręczników wprowadzających
będzie miał wszystko w nim.
>> STEPHEN KREWSON: Więc tutaj jest dość Kluczem linia sekwencera kroku
my przyjrzeć się używając lista zrozumieniem.
I widzimy tutaj, że elementem w stałej operatora w cudzysłowie tyłu.
Tak więc, jeśli x jest elementem listy x, tedy będziemy wywoływać funkcje Perci.
Więc perc jest tylko funkcją perkusja.
To zajmuje trochę wartość p, który jest część ograniczonego zbioru wszystkich
różne dźwięki perkusyjne które widzieliśmy w poprzednim slajdzie,
a następnie daje że Czas trwania ćwierćnuty.
W innym wypadku daje mu QNR i QNR tylko reszta ćwierćnuta.
>> Więc to jest budowanie coś miłego.
Mamy listę elementów, a Będziemy pętli na niektóre listy od jednego
do maksymalnej wartości naszego kroku sekwencera.
A kiedy jesteśmy w określonym I w że lista jednego do maksymalnej wartości,
jeśli i jest członkiem tego zestaw utworzony w tej funkcji,
dobrze, to włącz go w nocie perkusji.
W przeciwnym wypadku, po prostu grać na odpoczynek, który to znaczy, po prostu milczeć.
I widzimy tutaj, że w ta lista rozumienie składni,
x jest wypełniany przez to Lista zbudowane jeden
w światowym wielkości sekwencera.
CONNOR HARRIS: Tak.
Podstawowa składnia listowych jest
Uchwyt, wartość zaangażowania niektóre zmienne, bar,
Możliwe wartości zmiennych sami, zamknięty uchwyt.
A jeśli zrobiłeś ustawić zapis budowniczy w jakiejkolwiek klasie matematyki,
Może masz ustawione 2n takich że n lub n jest z.
Podobny thing-- tej notacji ma sugerować
tej notacji matematycznej.
STEPHEN KREWSON: A można zastosować wiele predykatów
i wiele filtrów na liście zrozumienie, co jest bardzo miłe.
Algebraiczne types-- mamy nie będzie utrzymywał tu długo.
Nie jest to dobre pojęcie w Haskell lub dobre, jasne pojęcie
w jaki sposób do podjęcia, powiedzmy, domyślnie parametr do funkcji, czy coś.
W Pythonie jest to dość łatwe.
Można tylko powiedzieć, z równa się deklaracja funkcji,
domyślna wartość w Sprawa żaden dostarczane.
>> W Haskell, mógłbyś może Może być może używać typu,
która zajmuje albo nic lub wartość typu tylko.
Tak więc to wykorzystać w automat perkusyjny aby umożliwić nam dać opcjonalny głośności
parametry dla każdej z części bębna.
Tak, że daje nam sposób o EQ lub objętość w danym kanale.
>> CONNOR HARRIS: W inne przykłady Haskell,
Państwo może patrz mogą być stosowane do Funkcje, które może zakończyć się niepowodzeniem.
Jest to wspólny jeden.
>> STEPHEN KREWSON: A możesz podać jakiś komunikat o błędzie jako domyślny.
I to jest szczególnie przydatne, gdy robisz I / O w Haskell.
To może być sztuczki.
CONNOR HARRIS: lub na Podobny przykład, myślę
z funkcji, która obejmuje podział parametru, które mogą być 0.
I że funkcja mogła powrót może cokolwiek.
Więc jeśli nie ma dzielenia przez 0, powróci po prostu cokolwiek.
A jeśli jest podział przez 0, zwróci nic
jako sposób sygnalizacji błędu.
Ponieważ jedną z konsekwencji Bardzo surowe wpisując Haskell'a
jest to, że nie ma real-- Wyjątkiem są niewygodne, w zasadzie,
obsługa błędów jest niewygodne.
I to jest jeden bardzo wspólny sposób to zrobić.
>> STEPHEN KREWSON: Więc teraz mamy do innego umysłów rzeczy
o Haskell, która jest wzór definicje dopasowania i funkcjonalności.
Pokazałem wam w ostatnim Przesuń Deklaracja sekwencji kroku
Funkcja, która odbyła się być może wartość, to int, a następnie lista wskazówki,
powraca sekwencję Wartości muzyka nie odnotowany
zarówno wysokość i głośność.
>> Więc te trzy argumenty mogą być wzór dopasowany w następujący sposób.
I zawsze chcemy mieć pewność, aby nie przypadek bazowy lub sprawę wyjścia pierwszy.
I te podkreślenia może po prostu być interpretowane
oznacza każdą znajdującą się tam wartość.
Więc jeśli mamy połączenia do kroku sekwencji z jakąś wartość, inną wartość,
a potem pusta lista, co chcemy powrót jest tylko cisza, reszta 0.
>> A zamiast tego Lista jest pusta lub 0,
to jest reszta 0, bo jesteśmy do czynienia z rodzajem muzyki,
i pusta lista muzyki Typ jest tylko reszta nie czas.
To nie jest muzyka.
A potem zobaczymy, czy możemy dostać krok sekwencji z v do argumentu głośności,
p na instrumencie ostrożności Argument, a następnie lista x-tych.
>> Następnie robimy pewne rzeczy.
W szczególności, stosuje się ta lista zrozumieniem,
i wykonywania niektórych operacje na być może wartości
aby włączyć go do wartości numerycznej, tak aby to może być następnie wyliczone i używane
aby wybrać urządzenie.
Ponownie, jest to mała nieco celowo inconcise
tak, aby pokazać wszystkie dziwne rzeczy można zrobić w Haskell, jak ty
spojrzeć na nią w swoim czasie.
>> W porządku.
Więc jesteśmy w końcu się do robić to, co określone zrobić,
co zrobić muzykę komputerową.
Tak więc mamy zamiar spróbować dokonać piosenkę Frere Jacques.
Tak więc są jak wiele frazy w Frere Jacques?
Cztery.
Wielki.
I to, co miłe jest to, że wszystkie one są powtarzane
taką samą ilość czasu, który wynosi dwa.
>> Więc mamy cztery frazy każdy powtarza się dwa razy.
A w szczególności, że są w rundzie.
I wiele, wiele sposobów na wdrożenie
okrągły, które mogą być zabawne robić.
Zrobiłem go w dość prosty sposób tutaj,
która jest po prostu construct-- linię funkcja przyjmuje listę wartości muzycznych
i zamienia ją w składzie sekwencyjnego przez zastosowanie tego sekwencyjnego składu
operator.
>> I wtedy opóźnić różne części czyniąc je rozpocząć w spoczynku.
Więc zacznę z resztą dwóch środków, a potem reszta czterech środków,
a potem reszta sześciu środki, a następnie runda
działa, jak wszyscy wiemy tę piosenkę.
Widzimy dwie adnotacje lub modyfikacje wartości muzycznych
które są zawarte w niniejszym sekwencyjnego Rozmieszczenie elementów muzycznych.
Mamy głośności add.
Jest to funkcja adnotacji muzyka z określonej objętości.
To jest dobry przykład z prowadzeniem sygnału MIDI
od 0 do 127, siedem bitów Informacje, które mogą być wykonywane.
>> I then-- widzieliśmy go bardzo krótko, ale ogólny MIDI
Lista wszystkich różnych instrumentów.
I nie ma dużo z nich.
Jeśli korzystasz z DAW, jak Ableton Live lub Pro Tools,
jest niezwykle szerszy zakres syntezatorów i instrumentów VST.
Ale tylko średnia MIDI ma kilka lub kilkadziesiąt.
A niektóre z nich są zabawne.
Myślałem, że byłoby fajnie, gdybyśmy mogli zagrać instrument instrument MIDI
śmigłowca, a następnie Kolejnym sposobem poprzez rundzie
zrobiliśmy Synth Pad, a następnie z to banalnie ołów prostokątny synth,
a następnie głos śluzu, które są trochę niewyraźna na mojej złej MIDI
syntezator, ale OK.
>> A potem widzimy to let i składni od Haskell,
a potem gramy wszystkie te elementy razem
z równoległym operatora składu.
I moglibyśmy zapewne pokazać trochę tego.
Oto kod.
I można zobaczyć w C, by być Wiele polanie gardła i okolicy
kod stół przed tobą może tworzyć muzykę, tak.
Lub innego programowania język, to pewnie
musisz wchodzić w interakcje z jakimś biblioteki lub API i ustawi wszystko,
i wtedy trzeba by oczyścić.
Ale tu, w Haskell jest, jak sądzę, po pojawi się zawiesić go, niezwykle
czytelne i bardzo wyraziste.
Tak więc nie jest realizacja od Frere Jacques.
W porządku.
Teraz chcemy, aby dodać perkusję, i to jest trochę bałaganu.
Warto więc spojrzeć na slajdach.
Tak więc wielka idea jest, aby kilka list lub części.
Na tych maszynach konferencyjne, nie Może były zwykle około ośmiu
10 rytmu lub perkusyjnych części.
A następnie za pomocą kilka technik.
I rozmawialiśmy o these-- użyciu fałdy, filtry, funkcje lambda,
odwzorowane na listach do generowania wartości W pewnym zakresie 1 do R, r 16,
lub 32 kroki sekwencera.
>> A potem, jeśli istnieje wartość w tej liście jak biegamy przez sekwencer,
poprzez uruchomienie go nad i powyżej, okazuje się na tym pamiętać,
i że próbka zostanie uruchomiony.
Tutaj znajdziesz różne sposoby dziwne Wpadłem do generowania notatki.
Wypróbuj na własnym pół sumy.
Będzie to brzmi fajnie.
Jeśli czas pozwoli, będziemy przechodzić przez to.
Ale na razie, myślę, powinniśmy demo, co mamy.
Miejmy nadzieję, że to idzie OK.
>> Więc to jest GHCI.
A my załadować plik Nazwałem song.lhs,
Plik, który jest po prostu pokazałem.
Ok świetnie.
Jak powiedział Connor wcześniej, kompilowane, to typ zaznaczone,
więc mogę oddychać dużo łatwiejsze.
To nie będzie wysadzić na mnie.
>> Chciałem pokazać coś pożytecznego.
Widać, że Moduł załadowany nazywa 50.
Możesz przeglądać ten moduł.
I to jest tak miło o doing-- może co
robisz w Haskell nie jest nazywa rozwoju oprogramowania,
ale można zrobić wiele zabawne rzeczy na własną rękę.
A pracy jest naprawdę ładne, jak w porównaniu do wielu innych języków
ponieważ można zobaczyć w naprawdę czytelny sposób, co się dzieje.
Widzimy więc, że mamy wszystkie te frazy, które
są wykazy stanowisk muzycznych, a następnie budować je się w coś większego,
który to utwór muzyczny.
Jest to urządzenie muzyczne.
I wtedy możemy grać to wszystko z funkcją odtwarzania muzyki nazywa.
Widać, że tu na dole.
Która jest po prostu grać.
>> Mam say-- nie mówić o to znak dolara, który jest wszędzie.
Znak dolara to kolejny operator wrostkowy.
Ale ma najniższy priorytet od dowolnego operatora, który skutecznie
oznacza to, że wszystko na lewa znaku dolara
oraz prawo do dolara, mamy zamiar uzyskać oceniane przed nim.
Więc jest to coś w rodzaju innego sposób na dodanie nawiasów.
>> CONNOR HARRIS: Jest to w zasadzie złożenie funkcji.
I zapewnia, że ​​nie have-- jeśli masz funkcje obu stronach lub Wrostek
operatorzy po obu stronach, nie będą one kojarzy poprzek i daje
nieoczekiwane wyniki.
>> STEPHEN KREWSON: Więc can-- za pomocą, możemy zadzwonić.
Najpierw zagramy bez perkusji.
To helikopter, helikopter MIDI.
>> [MUZYKI]
Tam jest prostokątny.
Mule głos.
I można naprawdę zaszaleć z tym.
Wybrałem jeden całkiem proste, bo wiedziałem, że nie powinien odgryźć
więcej, niż mogłem żuć.
Wystarczy mieć go dość prosta przedstawienie głównych idei.
Ale ja na to mamy ale dodać kilka bębnów do tego.
Tylko dlatego, że jest to trochę nieprzenikniony,
i nie używać Nazwa części perkusyjnych,
I odwzorowane them-- bo są częścią tego wyliczenia klasy,
I odwzorowane im wskazówki.
Jednym z nich jest jak bęben basowy.
Zero jest tak dobrze.
Siedem jest wysoki kapelusz.
I w tu, gdzie Funkcje trochę bardziej losowe,
są to bębny conga jak.
>> Więc jeśli uważasz, że about-- być może świetny sposób na wdrożenie automat perkusyjny
jest użycie bardzo uporządkowany wzory na swoim bębnie basowym.
Tak więc dla przykładu, o filtrowaniu nad lista ze wszystkim, co daje z powrotem
A 1, gdy jest podjęta moduł 04.
Więc mam 1, 5, 9, 13, 17-- więc jest pierwszym bicie każdego środka.
>> A następnie to samo rzeczą, przesunięty w dwóch etapach.
Więc to jest niecodzienny.
Tak więc będzie to coś w wysokim kapeluszu.
I znów, tutaj, to trochę przypadkowa,
bo robimy bębny conga.
I mam kilka marakasy tutaj też.
>> Więc mogę zadzwonić zabaw automat perkusyjny, ale to trwać wiecznie,
i może rozpocząć chwytając się cała pamięć w moim systemie.
Więc zadzwonię do tej funkcji odtwarzanie muzyki, która jak zobaczymy,
użyj obcinania skład równoległego grać naszą piosenkę Frere Jacques
wraz z tym dziwnym automatu perkusyjnego.
Warto więc przyjrzeć.
I proszę poprawić moje rozmieszczenie wszystkich elementów perkusyjnych.
Nie moja specjalność, ale mieliśmy dużo zabawy robią.
>> [MUZYKI]
>> Tak więc oczywiście to wszystko trochę nie tak zabawne
jeśli nie możemy przekształcić go do punktów, więc może go
mogą być interpretowane przez człowieka wykonawcy.
Więc nie będę go uruchomić tutaj.
Ja już generowane pliki.
Widać, że istnieje Kropka LilyPond file-- i to
będzie mój segue się do Connor-- i kropka plik MIDI,
i plik kropka w formacie PDF, który jest co LilyPond ostatecznie wygenerować.
>> Ale to są te skrypty i będę wystarczy uruchomić je z ich opcji pomocy.
Jeśli masz te i uruchamiania Euterpea, można wygenerować plik MIDI.
A potem z pliku MIDI z tym programem MIDI 2LY,
można wygenerować Lily Plik staw, a następnie
może wygenerować plik PDF z wyniku.
I powinniśmy spojrzeć na to.
Więc Connor prawdopodobnie pokaże Ci, jak opisywanie tego lepiej,
ale to Frere Jacques jako generowane przez mnie w Euterpea.
To tylko w C. I powinien zorientowali się, co włamać to faktycznie w.
Ale to jest rurociąg jak to robisz, że się z tym.
Porozmawiajmy więcej o LilyPond.
>> CONNOR HARRIS: OK Zobaczymy.
Czy wspomnieć Dowiedz się You Haskell?
STEPHEN KREWSON: O tak.
Zapoznaj się Dowiedz się You Haskell.
To w zasobach.
To się zaczęło uczenia się, i to jest świetne.
Nie głupie nauki.
>> CONNOR HARRIS: Więc to jest online.
Więc facet o imieniu [niesłyszalne] learnyouahaskell.com, bez spacji.
Gramatyka jest chory.
STEPHEN KREWSON: To ilustruje, też.
CONNOR HARRIS: Więc co jest LilyPond?
Jest to deklaratywne programowania język muzyki składu.
Więc declarative-- można myśleć o rzeczach, takich jak HTML,
gdzie nie jesteś saying-- HTML nie powiedzieć, jak przeglądarki internetowe powinny
renderowania stron krok po kroku.
To jest po prostu mówiąc to Jest to opis tekstowy
z tego, co chcesz, aby strona wyglądać.
>> I to jest to również program że kompiluje tego języka,
albo przeczytać jej w czym właściwie robi skład tekstu dla Ciebie,
i wypluwa je wspaniałe patrząc wyniki PDF.
Można również uzyskać formatu PNG lub cokolwiek.
Dobrym sposobem myślenia to jest analogiczny
jest to, że LaTeX jest trochę jak LillyPond, ale tylko dla zwykłego składu.
Więc zamiast of-- to nie jest WYSIWYG, What You See
To co masz, jak, powiedzmy, Finał jest lub Sibelius,
lub Microsoft Word, w którym można wpisać czasu rzeczywistego oraz projekty rzeczy w czasie rzeczywistym
i zobaczyć zmiany natychmiast.
>> Opiera się tekstu.
Musisz skompilować wyniki za pomocą oddzielnego programu
i wyjść plików PDF później.
Jest to nieco mniej wygodne do użycia, jeśli jesteś
próbuje pisać bezpośrednio na wynik i jesteś
starając się tworzyć na komputerze.
Ale istnieje wiele korzyści dla niego.
Jeden, to wygląda o wiele ładniejszy, bo LillyPond może rzeczywiście
trochę czasu, aby zrobić układ decyzje prawidłowo,
w przeciwieństwie Sibelius lub Finale, które mają aby algorytmy zagrożona tak
że mogą wyświetlać rzeczy w czasie rzeczywistym.
>> Więc dlaczego jest LilyPond-- grafika komputerowa jest trudne.
Jeśli robisz coś z muzyki i chcesz napisać na wyniki,
nie chcesz pisać się wszystkiego o sobie
zaczynając jak narysować sztaby i jak narysować notatniki.
To jest bardzo trudne. To zostało zrobione wcześniej.
Jesteś w porządku.
>> Jeśli chcesz użyć Finale lub Sibelius, formaty plików do tych rzeczy
są bardzo skomplikowane i nie można naprawdę wykorzystać je programowo.
Możesz otworzyć Sibelius z Finału i przejdź do menu Plik, Eksportuj jako PDF samemu,
ale naprawdę nie mogę Nazywamy to ze skryptu.
LillyPond, możesz zadzwonić z tych skryptów.
Można łatwo iteracji LillyPond LaTeX.
Nie ma zbyt wiele czasu, aby przejść do tych technologii już teraz,
ale one istnieją.
Jeśli chcesz wyglądać w książce LillyPond,
to program, który pochodzi z Twoja dystrybucja LillyPond,
i to jest dla iteracji LillyPond fragmenty do lateksu
jeśli chcesz coś zrobić jak wielki dokumentu muzykologii
z przykładów, na przykład.
I to jest dobre umiejętności do życie, jeśli robisz coś
z muzyką, nie tylko CS50.
Użyłem LillyPond dla wszystkich z moich projektów składu
ponieważ byłem w zasadzie starszy w szkole średniej.
>> Więc oto kilka prostych przykładów.
Jest to po prostu przedstawiciel poziomu trudności
że większość ludzi oczy starali
używać LilyPond dla prostych projektów.
Ten pierwszy jest początkiem do chorału preludium Bacha.
Ten dolny fragment z jednej z moich prac,
i to tylko tam, aby pokazać wy takie rzeczy [niesłyszalne]
wprowadzenie wielu linii w tym samym Pracownicy, jak liryka undersetting działa.
Lyric podkłady są rzeczą, która bardzo łatwy w użyciu LilyPond dla muzyki chóralnej.
>> I tak to jest trochę więcej skomplikowane przykłady.
Wszystko to odbywa się w LilyPond i są wykonalne.
Ten pierwszy fragment jest z [Niesłyszalne] przez [niesłyszalne].
I to [niesłyszalne] z utwór na kontrabas solo
flet przez [niesłyszalne], który jest longtime-- którzy
był długoletnim członkiem z Dział muzyczny tutaj, myślę.
Nie jestem pewien, dokąd pojechał do.
Ale on był doradcą Harvardzie Stowarzyszenie Kompozytorów przez długi czas.
Wspaniały człowiek.
I pisze muzykę, która ma bardzo skomplikowany zapis, że LillyPond
może jednak obsłużyć bardzo ładnie.
>> Więc po prostu dać poczucie tego, co Możliwości tej rzeczy w are-- tak
elementy wewnętrzne z LillyPond są bardzo skomplikowane.
I można go używać do dawno, w tym
dla niektórych dość skomplikowane rzeczy, nie bardzo
znając wiele o nich.
Ale podstawowa idea jest taka, że ​​na Najniższy poziom, atomy LillyPonds
są notatki.
Notatki zawierają Kontekst zwane głosy.
Więc kontekście głosu w zasadzie odpowiada
do pojedynczej linii polifonii.
A potem kontekst może być zawarte hierarchicznie
w tych wyższych poziomów, które stanowią sztabów na wynik
lub większe grupy, takie jak sztabów fortepian, chór i sztabów
a następnie w końcu całe konteksty wynik.
I rzeczywiście można objąć wielokrotne wyniki w książce.
>> I każdy kontekst ma liczba dołączonych rytowników.
Jeśli spojrzeć poprzez Zawartość kontekście
i wydrukować pewien symbol lub pewna klasa symboli, jak to konieczne.
Tak, aby każdy kontekście głosu, nie ma [niesłyszalne] notatki
grawer, który jest w zasadzie funkcją lub obiekt, który zapisuje wszystkie wiadomości
głowy na prawej części strony.
Potem jest rozszczep grawer, który pisze się szczelin na pracowników.
Potem jest metronom znak grawera, że
pisze się znaki metronomu w partyturze.
I to wszystko zmieścić dość również w hierarchii.
I to jest bardzo, bardzo, bardzo konfigurowalny, co trzeba
jeśli chcesz, aby takie rzeczy.
>> Więc wszystkie konteksty mają Wiele różnych atrybutów
które można modyfikować za wszystko z odstępem do różnych czcionki
Wybór do rozmiarów rzeczy.
Jeśli chcesz to zrobić, nawet bardziej skomplikowane rzeczy,
jest wbudowany język skryptowy.
Korzystają one z systemu, który jest dialekt LISP.
To prawdopodobnie nie coś dla ciebie znaczy.
Ale w zasadzie, schemat inną funkcjonalną
język programowania, bardziej lub mniej.
>> STEPHEN KREWSON: Tie-in.
>> CONNOR HARRIS: Tak.
To dobry tie-in, jak sądzę.
I jest używany jako język nauczania, rzeczywiście, w dół Mass Ave. Na MIT.
I to jest bardzo przydatne dla LillyPond z różnych przyczyn technicznych.
>> A więc jeśli chcesz, aby proste szczypie zależne od warunkowych,
dla example-- istnieje pewna Warunkiem wynik, który jest spełniony,
wprowadzania zmian w Układ lub whatnot-- następnie
te obiekty są tam.
Są skomplikowane.
Więc tutaj jest bardzo prosty przykładowy kod.
To pięć linii.
Zasadniczo, jestem określenie dwóch sztabów.
Jest w 3/4.
Pierwszy zespół ma dołączony znak tempo,
ale to rzeczywiście będzie aby przejść do całego wyniku,
ponieważ znaków tempa są na poziomie wyników.
Znak metronom grawer Wynik jest dołączony do kontekstu.
Istnieją różne klucze, bo [niesłyszalne] grawer
jest przymocowany sztabów.
Możesz faktycznie jest.
Próbka napisałem jest faktycznie w tonacji C-dur,
ale to tylko do wykazywać można mieć
różne klucze w różnych sztabów.
I składnia podstawowa jest napisać Uwaga nazwy z E, F, G, cokolwiek.
Jeśli chcesz zrobić chromatyczne, Ci przyrostek jest lub ES.
To jest z holenderskiego muzykologiczne konwencje.
>> I zrobić skok oktawy, musisz użyć te znaczniki, przecinek lub apostrof.
Względna oznacza po prostu, co masz notatkę,
zostanie automatycznie plaec w oktawy najbliższym poprzednim.
A jeśli chcesz, aby przejść więcej niż fifth-- powiedzieć, piąty lub more--
wtedy musisz użyć [niesłyszalne].
Ale poza tym, nie masz do określić oktawy każdej nuty.
>> I względne C, podstawowym, C, wystarczy podać środkowe C
i podstawy C, szczególnie pierwsze nuty.
Wtedy masz te laski, które organizują te dwa głosy lub próbki muzyki,
i masz wynik.
A to wygląda tak.
>> Jeśli chcesz wziąć czas do skopiować ten próbkę LillyPond
Kod na poprzedni zjechać w dół tutaj, a ty
Można pisać na LillyPond samodzielnie.
Wiem, że mamy coś że wygląda trochę tak.
Więc nie ma innej technologii utrzymywane nazywa XML Muzyka
przez zupełnie innych ludzi.
XML to dane tekstowe structure-- I Dane nie powinny powiedzieć mówią structure--
Mapa rodzaj metafory.
I to jest przeznaczone do przechowywania Dane hierarchiczne bardzo dobrze.
HTML, na przykład, typu XML.
I można powiedzieć, XML, ponieważ miał wszystkie nawiasy i kąta
Uchwyt znaki slash że pola pokaż danych.
>> Nie mam kodu Przykład z Muzyka XML.
Można go znaleźć samemu.
Zasadniczo, powodem może chcesz używać XML jako pośredniego etapu
jest przede wszystkim to format wymiany
na zasadzie every-- nie powinienem tego mówić każdy, ale wiele różnych punktów
pisarze.
Więc jeśli piszesz w Muzyka XML, nie tylko może LillyPond
przeczytaj ją za pomocą tego Auxilary Program o nazwie XML Muzyka do LY,
ale także Finale może czytać Opisz Sibelius może go odczytać.
W zależności od konfiguracji wewnętrznej obiektu Hierarchia pracuje reprezentujący muzykę,
Może łatwiej będzie napisać XML Muzyka niż do LillyPond
i po prostu polegać na XML Muzyka do LY zrobić konwersję.
>> Nie sądzę [niesłyszalne] ma XML muzyki.
STEPHEN KREWSON: nie.
Ktoś pracuje na nim, choć.
>> CONNOR HARRIS: OK.
Euterpea nie mają Funkcja wyjścia XML jeszcze muzyka.
Jeśli chcesz ostatecznej koncepcji projektu, może skontaktować się z facetami
Stephen wie, i mogli korzystać z pomocy.
>> STEPHEN KREWSON: chciałbym tego.
CONNOR HARRIS: Również, w zasadzie, co języki programowania
że warto jej soli ma już biblioteki XML,
więc można wewnętrznie przekonwertować wszystkie muzyki do jakiegoś obiektu
że biblioteka XML można napisać się, że wymaga mniej
zmiany w swojej strukturze wewnętrznej niezależnie od muzyki obiektów
chcę pisać, niż pisać to bezpośrednio LillyPond będzie.
Następnie wystarczy wydrukować go z XML z bibliotek XML w języku polskim,
co gwarantuje, że jest to poprawny składniowo i wszystko,
a następnie przekonwertować go do LillyPond.
Tak więc technologia może chcesz przyjrzeć się, jeśli robisz coś
jak to.
>> [Niesłyszalne], inny auxilarry technologii.
Jest to w zasadzie Tech Works lub Tech Studio dla LillyPond.
Więc to oferuje pomoc w Składnia, z szablonami
dla różnych wspólnych kombinacje instrumentów.
Pozwala on podzielony ekran oglądania tak możesz mieć swój kod w jednym oknie
i PDF w innym oknie i kliknij miejsc w PDF
Aby przejść do znaczenia miejsca w kodzie źródłowym.
To jest bardziej przydatna, jeśli jesteś naprawdę pisanie LillyPond plików siebie
niż jeśli generowania je programowo.
Ale znowu, to coś przydatne.
>> Wielki.
Innym resources-- będę po prostu przejść przez to bardzo szybko.
LillyPond manuals-- LillyPond ma doskonała dokumentacja na swojej stronie internetowej.
Mają samouczek.
Mają odniesienie składni.
Mają setki fragmentów do różnych małych rzeczy
yo może trzeba zrobić, aby wykazać różne możliwości.
Jeśli chcesz użyć językiem skryptowym
lub bardziej rozległe dostosowania, to nie
wewnętrzne odniesienia w tym URL.
Jeżeli chcesz korzystać z XML muzyki, nie że adres URL, musicxml.com/tutorial.
>> A potem, jeśli chcesz dowiedzieć się schemat bo rzeczywiście chcesz używać
obiekty skryptowe w LillyPond, to istnieje [niesłyszalne] nazywa
Zorganizowany Interpretacja programów komputerowych,
który jest nie tylko sekundy Największą CS podręcznik historii written--
znajdź mi potem, jeśli chcesz wiedzieć co myślę, że największym jednym jest--
ale jest to również bardzo dobry Wprowadzenie do języka właściwego.
Nie trzeba będzie więcej niż kilka pierwszych odcinków.
>> I to wszystko.
Jakiekolwiek pytania?
>> Student: Gdzie mogę pobrać Twój generowane Frere Jacques
więc mogę umieścić go na swoim iPodzie?
>> STEPHEN KREWSON: Cóż można napisać się do jakiegoś pliku wav w Euterpea.
I masz kod.
Jest na GitHub.
Tworzyć własne wariacje Frere Jacques przez CS50 ula umysłu.
Byłoby świetnie.
CONNOR HARRIS: Ktoś jeszcze?
STEPHEN KREWSON: Musimy lepszy bęben basowy, też.
Jest naprawdę źle.
>> UCZEŃ: Euterpea nie tylko strona skład, ale signal--
STEPHEN KREWSON: Tak.
W rzeczywistości, praca I nie w Euterpea kiedy
wziął this-- istnieje ukończył kurs w Yale, że
wykorzystuje it-- był na syntezy dźwięku.
Więc jest naprawdę dobry sposób, za pomocą strzałek
a niektóre z notacją widzieliśmy komponowania ze sobą funkcje sygnałowe.
W szczególności, basu dla najbardziej z nich jest tak proste sinusoida.
Ale jeśli zaczniesz komponować tych w dziwnych programowych sposobów,
można dostać szalony dźwięk Efekty, jak dziwne kaskadami.
Można tworzyć bardzo piaszczysty dźwięki z wielu modulacji.
>> Zrobiłem projekt na granulowany syntezowy, który jest
gdzieś pomiędzy FM i pobierania próbek.
Bierzesz bardzo małe, małe próbki, a następnie
połączyć je z jakimś modulator i stworzyć bogatszy dźwięk.
Zrobiliśmy też modelowanie fizyczne, więc starając się myśleć o fizyce
i psychoakustyka z czymś takim trąbka, i myśli o drodze
dźwięk jest odbijając się dzwon trąby
i akustyka pokój i modelowanie
że podstawowe oscylatorów.
CONNOR HARRIS: Dziękuję bardzo.
Dziękuję za przyjście.
I zawsze jestem gotów podjąć pytania przez email--
connorharris@college.harvard.edu.
>> STEPHEN KREWSON: Tak. stephen.krewson@yale.edu.
Fajne.