1 00:00:00,000 --> 00:00:05,180 2 00:00:05,180 --> 00:00:05,930 CONNOR HARRIS: Cześć. 3 00:00:05,930 --> 00:00:06,820 Jestem Connor Harris. 4 00:00:06,820 --> 00:00:09,729 Jestem Kalifornia CS50 na Harvardzie. 5 00:00:09,729 --> 00:00:11,270 STEPHEN KREWSON: Jestem Stephen Krewson. 6 00:00:11,270 --> 00:00:12,582 Jestem TF CS50 w Yale. 7 00:00:12,582 --> 00:00:15,790 CONNOR HARRIS: I mamy zamiar rozmawiać o niektórych technologii, które może 8 00:00:15,790 --> 00:00:18,880 chcesz użyć, jeśli jesteś zainteresowany w sposób ostateczny projekt lub bardzo 9 00:00:18,880 --> 00:00:20,920 coś z muzyką. 10 00:00:20,920 --> 00:00:24,400 Mamy zamiar być skupienie się na pierwszy język programowania zwany Haskell. 11 00:00:24,400 --> 00:00:26,280 Jest to funkcjonalne język, więc paradygmat 12 00:00:26,280 --> 00:00:29,620 bardzo różni się od C lub PHP lub inne języki imperatywne 13 00:00:29,620 --> 00:00:33,450 które zostały już wykorzystane, a zwłaszcza w bibliotece pisemnej w Haskell 14 00:00:33,450 --> 00:00:40,240 nazywa Euterpea, które mogą pomóc ludziom z pisania muzyki funkcjonalnie, 15 00:00:40,240 --> 00:00:40,780 gruntownie. 16 00:00:40,780 --> 00:00:43,400 Stephen cię chodzić wielki przykład, że. 17 00:00:43,400 --> 00:00:46,423 >> Po tym, przedstawię cię do coś, co nazywa LillyPond, które 18 00:00:46,423 --> 00:00:48,370 to technologia muzyki składu tekstu. 19 00:00:48,370 --> 00:00:50,830 To coś jak LaTeX do muzyki, jeśli ktoś z was 20 00:00:50,830 --> 00:00:57,530 skorzystało LaTeX dla klas matematycznych lub inne klasy P ustawić lub co cię mieć. 21 00:00:57,530 --> 00:01:00,440 A więc dam ci znowu kilka prostych przykładów, które 22 00:01:00,440 --> 00:01:03,640 i punkt, który w ogólnym Kierunek niektórych lepszych zasobów. 23 00:01:03,640 --> 00:01:04,319 >> STEPHEN KREWSON: W Ponadto, myśleliśmy, że to 24 00:01:04,319 --> 00:01:06,720 Byłoby super, aby skonfigurować trochę podpowiedzi 25 00:01:06,720 --> 00:01:10,780 w kierunku rurociągu pomiędzy Euterpea generowanych plików MIDI 26 00:01:10,780 --> 00:01:13,910 w LillyPond, więc zapewniamy niektóre wskazówki na skryptach 27 00:01:13,910 --> 00:01:16,310 aby to zrobić, że są wyposażony LillyPond 28 00:01:16,310 --> 00:01:19,160 po prostu zachować to open source i uzyskać rurociągu dzieje. 29 00:01:19,160 --> 00:01:20,910 CONNOR HARRIS: Ponownie, należy podkreślić, 30 00:01:20,910 --> 00:01:23,100 te dwie technologie, ty nie trzeba używać ich razem. 31 00:01:23,100 --> 00:01:25,370 Nie są one przeznaczone do pracy razem, choć to bardzo ładnie. 32 00:01:25,370 --> 00:01:26,362 >> STEPHEN KREWSON: Racja. 33 00:01:26,362 --> 00:01:30,116 I nic nie kosztuje. 34 00:01:30,116 --> 00:01:32,240 CONNOR HARRIS: Tak podziękowania, po prostu przeczytać, że. 35 00:01:32,240 --> 00:01:33,406 STEPHEN KREWSON: Zanotowano. 36 00:01:33,406 --> 00:01:36,360 Dzięki tych ludzi. 37 00:01:36,360 --> 00:01:39,180 To będę utrzymywał się tylko na chwilę. 38 00:01:39,180 --> 00:01:41,560 Proces instalacji Jest to trochę trudne. 39 00:01:41,560 --> 00:01:45,420 Mamy przeczytać mnie na GitHub że można spojrzeć na. 40 00:01:45,420 --> 00:01:47,840 Po prostu napisz do mnie, jeśli masz jakiekolwiek pytania. 41 00:01:47,840 --> 00:01:52,829 Ale my uruchomić to przy założeniu, że pracuje dla każdego. 42 00:01:52,829 --> 00:01:55,620 CONNOR HARRIS: A jeśli nie możesz uzyskać LillyPond do pracy, nic wielkiego. 43 00:01:55,620 --> 00:02:00,139 Nie ma żywo kompilacja, że będzie zaangażowany, przynajmniej na mojej stronie. 44 00:02:00,139 --> 00:02:02,930 STEPHEN KREWSON: Haskell i LillyPond powinny obie mają instalatorów. 45 00:02:02,930 --> 00:02:08,497 Euterpea zostanie pobrany jako Opakowanie tak dalej, i tak dalej. 46 00:02:08,497 --> 00:02:10,080 Więc mówimy o muzyce komputerowej. 47 00:02:10,080 --> 00:02:12,990 I to jest właśnie bardzo Widok 50.000 stóp. 48 00:02:12,990 --> 00:02:15,700 Istnieje kilka różnych aspektów tego. 49 00:02:15,700 --> 00:02:18,120 I to jest szorstki i jest będzie przesłaniać pewne szczegóły. 50 00:02:18,120 --> 00:02:22,090 Ale możemy myśleć o czymś jak składzie algorytmicznego, 51 00:02:22,090 --> 00:02:24,920 za pomocą algorytmów, za pomocą kodu w celu wygenerowania 52 00:02:24,920 --> 00:02:30,280 Może jakiś rodzaj of-- self-podobne ciąg notatek, a może notatek 53 00:02:30,280 --> 00:02:33,330 pod pewnym przymusem. 54 00:02:33,330 --> 00:02:35,350 A potem te mogą być wykonane lub interpretować 55 00:02:35,350 --> 00:02:38,390 z instrumentów analogowych lub coś podobnego. 56 00:02:38,390 --> 00:02:42,010 Ale skład był zrobić algorytmicznie. 57 00:02:42,010 --> 00:02:45,120 >> Ale oczywiście, może obszar komputer lub muzyki cyfrowej muzyki 58 00:02:45,120 --> 00:02:48,870 jesteśmy bardziej zaznajomieni z jest cyfrowy synteza dźwięku lub cyfrowego próbkowania 59 00:02:48,870 --> 00:02:51,160 i zapisu cyfrowego. 60 00:02:51,160 --> 00:02:55,650 Wiele instrumentów cyfrowych są odbywa się za pośrednictwem cyfrowego pobierania próbek. 61 00:02:55,650 --> 00:03:00,110 W rzeczywistości, będziemy za pomocą jednego z tych, w forma zdrowego biblioteki czcionek później. 62 00:03:00,110 --> 00:03:02,850 >> Ale jest też coś, co nazywa synteza cyfrowa, że ​​wyszedł 63 00:03:02,850 --> 00:03:08,650 w późnych latach 70. i do lat 80. z Yamaha i John Chowning w Stanford 64 00:03:08,650 --> 00:03:11,990 robi syntezę FM lub Synteza FM, 65 00:03:11,990 --> 00:03:15,100 gdzie miał przewoźnika Sygnał i Sygnał modulujący 66 00:03:15,100 --> 00:03:18,270 zarówno w widmie dźwięku. 67 00:03:18,270 --> 00:03:22,570 Ale to, co jesteśmy skupieni na dzisiaj jest coś, co nazywa MIDI, 68 00:03:22,570 --> 00:03:25,040 i oczywiście, kompozycji algorytmicznej. 69 00:03:25,040 --> 00:03:30,940 >> Nie jedziemy do instrumentów, ale my, a nie zamiar zrobić jakąś muzykę, 70 00:03:30,940 --> 00:03:33,940 a następnie, że będzie się interpretować przez niektórych instrumentów 71 00:03:33,940 --> 00:03:38,300 są zgodnym z standardem General MIDI. 72 00:03:38,300 --> 00:03:40,830 Więc co jest MIDI? 73 00:03:40,830 --> 00:03:45,550 Nie będę się zbyt głęboko w niej, ale MIDI to protokół transmisji danych. 74 00:03:45,550 --> 00:03:49,250 Jest to swego rodzaju przewodnikiem po drugiej różnych firm i branż 75 00:03:49,250 --> 00:03:52,250 za organizację dźwięków lub poprawek. 76 00:03:52,250 --> 00:03:54,170 Więc zobaczymy, że jest standardem MIDI 77 00:03:54,170 --> 00:03:57,500 dla wszystkich różnych perkusji dźwięki i zalecenia MIDI 78 00:03:57,500 --> 00:04:01,360 dla wszystkich różnych typów syntezatora lub Różne typy wszystkich przyrządu 79 00:04:01,360 --> 00:04:03,650 grupy z orkiestrą, powiedzieć. 80 00:04:03,650 --> 00:04:08,916 >> Jesteś prawdopodobnie zna 0 do 127 komunikaty MIDI. 81 00:04:08,916 --> 00:04:12,920 Sygnał MIDI jest zazwyczaj jeden bit wskazujący 82 00:04:12,920 --> 00:04:16,130 czy to danych lub pakiet stanu, a następnie nie ma 83 00:04:16,130 --> 00:04:18,589 siedem bitów sygnału. 84 00:04:18,589 --> 00:04:21,430 I można kontrolować wszystko od wielkości 85 00:04:21,430 --> 00:04:25,330 do działania lub ciśnienie w szczególności klucz 86 00:04:25,330 --> 00:04:29,400 jeśli wykonując z MIDI Sterownik jak również, oczywiście, 87 00:04:29,400 --> 00:04:31,250 notatki. 88 00:04:31,250 --> 00:04:33,450 I oczywiście, MIDI ma było bardzo przydatne, 89 00:04:33,450 --> 00:04:37,550 dlatego, że jest to sposób na drucie razem lub łańcuchowy 90 00:04:37,550 --> 00:04:41,570 banda urządzeniami MIDI. 91 00:04:41,570 --> 00:04:44,050 Mam siedem lub osiem z powrotem w moim domu. 92 00:04:44,050 --> 00:04:46,610 To staje się bardzo skomplikowane, ale to jest naprawdę potężny. 93 00:04:46,610 --> 00:04:47,460 I to jest bardzo stary. 94 00:04:47,460 --> 00:04:51,117 To od początku lat 80., a to jest naprawdę ładne i małe. 95 00:04:51,117 --> 00:04:51,950 CONNOR HARRIS: Tak. 96 00:04:51,950 --> 00:04:54,230 Wszystko klasyczny Nintendo gry wideo prawdopodobnie 97 00:04:54,230 --> 00:04:56,088 mają pliki MIDI dla muzyki, na przykład. 98 00:04:56,088 --> 00:04:59,550 99 00:04:59,550 --> 00:05:01,740 >> STEPHEN KREWSON: Oto Przykładem General MIDI, 100 00:05:01,740 --> 00:05:06,520 pokazując MIDI jako rodzaj ogólnego protokołu. 101 00:05:06,520 --> 00:05:13,280 I myślę, że możemy myśleć o Różnica pomiędzy specyfikacji 102 00:05:13,280 --> 00:05:17,830 że nie powinno być coś takiego jak tych brzmień instrumentów i rzeczywisty 103 00:05:17,830 --> 00:05:21,740 Realizacja tych instrumentów brzmi w dźwięku czcionki lub konkretnego MIDI 104 00:05:21,740 --> 00:05:25,740 syntezator jako różnica między może z typeface--, który mówi, 105 00:05:25,740 --> 00:05:30,350 Na ogół jest to konstrukcja ten szczególny sposób do reprezentowania 106 00:05:30,350 --> 00:05:35,907 characters-- a zwłaszcza czcionki który posiada określony rozmiar i barwę, 107 00:05:35,907 --> 00:05:37,240 i jest realizacja the-- 108 00:05:37,240 --> 00:05:39,156 >> CONNOR HARRIS: Może lepszym porównaniem 109 00:05:39,156 --> 00:05:43,430 być standard Unicode says-- daje numer do każdej postaci, a tak naprawdę 110 00:05:43,430 --> 00:05:46,830 każdy język na świecie, lub szeroki zestaw skryptów języka 111 00:05:46,830 --> 00:05:51,310 na świecie, a następnie te są renderowane w coś graficznego 112 00:05:51,310 --> 00:05:53,710 przez różne pakiety czcionek. 113 00:05:53,710 --> 00:05:56,630 I oczywiście, można myśleć MIDI jako Unicode dźwięku. 114 00:05:56,630 --> 00:06:03,250 A to po prostu lista of-- dużym strumieniu imprez i instrumentów i etażerka, 115 00:06:03,250 --> 00:06:06,090 i trzeba mieć oddzielny Program, jak krój, 116 00:06:06,090 --> 00:06:08,537 aby uczynić to pod coś, co jest słyszalne. 117 00:06:08,537 --> 00:06:12,360 118 00:06:12,360 --> 00:06:13,780 >> STEPHEN KREWSON: Więc dlaczego Haskell? 119 00:06:13,780 --> 00:06:19,110 Haskell jest programowanie funkcjonalne język, bardzo zaawansowany, 120 00:06:19,110 --> 00:06:22,770 różni się od C bardzo różni się od PHP. 121 00:06:22,770 --> 00:06:28,120 A my będziemy widzieć, że istnieje łatwość kompozycji funkcji w Haskell 122 00:06:28,120 --> 00:06:37,640 które pozwoli nam na wiatr przez komponowania lub wpisując się, transkrypcji, 123 00:06:37,640 --> 00:06:42,160 coś Frere Jacques, ta prosta piosenka, 124 00:06:42,160 --> 00:06:46,815 ma wiele części na to, że są samo-podobny lub powtarzania. 125 00:06:46,815 --> 00:06:49,740 126 00:06:49,740 --> 00:06:53,250 Więc będzie to niektóre z motywacja, dlaczego 127 00:06:53,250 --> 00:06:59,400 Używamy Haskell, w którym funkcje są obywatele pierwszej klasy. 128 00:06:59,400 --> 00:07:01,120 >> I chciałem przedłużyć to trochę. 129 00:07:01,120 --> 00:07:08,800 To trochę łatwe zapisywać Frere Jacques w Haskell. 130 00:07:08,800 --> 00:07:12,100 Ale co, jeśli chcemy dodać część bębna do niego? 131 00:07:12,100 --> 00:07:17,320 Co zrobić, jeśli chcemy, aby spróbować zrobić coś jak Roland 808 lub 909 bębna 132 00:07:17,320 --> 00:07:20,970 Maszyna, gdzie trzeba około 16 różnych kroków? 133 00:07:20,970 --> 00:07:24,590 Zazwyczaj są to uważany za 16 notatek. 134 00:07:24,590 --> 00:07:28,640 I można kontrolować światowy Tempo, i można wybrać się 135 00:07:28,640 --> 00:07:34,620 kilka różnych części perkusyjnych w bęben basowy, klaskać, różne sidła, 136 00:07:34,620 --> 00:07:37,540 otwarte i zamknięte wysokie kapelusze na ten rodzaj kanałów, 137 00:07:37,540 --> 00:07:41,600 a następnie można EQ lub dostosowanie ich głośność. 138 00:07:41,600 --> 00:07:45,290 >> I zobaczymy piękny sposób w Haskell reprezentować ten krok 139 00:07:45,290 --> 00:07:48,810 sekwencer ze wszystkimi różne fajne rzeczy w Haskell 140 00:07:48,810 --> 00:07:53,100 możemy zrobić z agregatem listy i filtrowanie ponad list, 141 00:07:53,100 --> 00:07:56,060 Mapowanie nad listami, mapowanie Funkcje ponad list. 142 00:07:56,060 --> 00:07:59,530 143 00:07:59,530 --> 00:08:00,760 I szybkie przeprosiny. 144 00:08:00,760 --> 00:08:05,300 Jest to bardzo pobieżne i zbyt szybki szkic 145 00:08:05,300 --> 00:08:07,620 niektórych z aspektów od Haskell i Euterpea, 146 00:08:07,620 --> 00:08:11,760 co jest specyficzne dla domeny wbudowany język pisany 147 00:08:11,760 --> 00:08:14,970 w Haskell dla typów muzycznych. 148 00:08:14,970 --> 00:08:17,350 Więc proszę sprawdzić kod w Internecie. 149 00:08:17,350 --> 00:08:22,404 Odpal GHCI, który jest w Glasgow Haskell Compiler tłumacza. 150 00:08:22,404 --> 00:08:24,320 I będę robić niektóre tego w trochę 151 00:08:24,320 --> 00:08:25,880 więc można zobaczyć, jak to się robi. 152 00:08:25,880 --> 00:08:31,021 >> A to pozwala na wczytanie się z the-- składnia jest dwukropek, a następnie 153 00:08:31,021 --> 00:08:31,520 polecenie. 154 00:08:31,520 --> 00:08:33,510 Można załadować w pliki. 155 00:08:33,510 --> 00:08:36,840 Możesz użyć przeglądania tych plików aby zobaczyć wszystkie funkcje, które 156 00:08:36,840 --> 00:08:39,169 istnieć w szczególności moduł. 157 00:08:39,169 --> 00:08:43,850 A potem, jak zobaczymy, rodzaje i typ Zajęcia są tak ważne w Haskell, 158 00:08:43,850 --> 00:08:48,850 więc zawsze można check-- szczególnie jeśli pracujesz w nowym DSCL 159 00:08:48,850 --> 00:08:51,600 jak to, co jest to rodzaj muzyki? 160 00:08:51,600 --> 00:08:55,114 Wiem o tym, jak numeryczne rodzaje pracy w Haskell, 161 00:08:55,114 --> 00:08:56,530 ale ja nie znam się na muzyce. 162 00:08:56,530 --> 00:09:01,280 Ale można zbadać sposób, w jaki jesteśmy zdefiniowane za pomocą tego typu polecenia T lub 163 00:09:01,280 --> 00:09:04,577 i dzwonienie w szczególności Funkcja lub obiekt danych. 164 00:09:04,577 --> 00:09:05,410 CONNOR HARRIS: Tak. 165 00:09:05,410 --> 00:09:09,820 Jeśli myślałeś, C i brzękiem był hardass o typach, 166 00:09:09,820 --> 00:09:11,230 nie masz pojęcia o Haskell. 167 00:09:11,230 --> 00:09:14,230 Dobrą rzeczą jest to, że Haskell czy można dostać kod do kompilacji 168 00:09:14,230 --> 00:09:16,790 a jeśli kontrole typu Haskell, to chyba dobrze, 169 00:09:16,790 --> 00:09:18,675 ponieważ system typu jest tak rygorystyczne. 170 00:09:18,675 --> 00:09:20,090 >> STEPHEN KREWSON: Tak. 171 00:09:20,090 --> 00:09:21,980 Więc po prostu chcę iść through-- i znowu, 172 00:09:21,980 --> 00:09:27,160 to nie robi to justice-- kilka funkcje Haskell, że przynajmniej 173 00:09:27,160 --> 00:09:31,780 jego creators-- a powstał w latach 1980 przez kilka osób, 174 00:09:31,780 --> 00:09:34,610 komisja około 20 people-- że były ważne. 175 00:09:34,610 --> 00:09:36,850 I pierwszą rzeczą, jaką wymienione w papierze 176 00:09:36,850 --> 00:09:41,890 opisano genezę Haskell w ciągu pierwszych 20 lat lub więcej 177 00:09:41,890 --> 00:09:43,390 było to, że był leniwy. 178 00:09:43,390 --> 00:09:44,990 Więc co to oznacza? 179 00:09:44,990 --> 00:09:49,860 >> Cóż, to znaczy, gdy mamy jakieś wypowiedzi, musimy go ocenić. 180 00:09:49,860 --> 00:09:54,390 I robi to Haskell w rozmowie Na zasadzie potrzeby lub nie-ścisłym sposób. 181 00:09:54,390 --> 00:09:57,250 Oznacza to, że jeśli mamy kilka elementy naszej ekspresji, 182 00:09:57,250 --> 00:10:00,660 staramy się opóźnić ocenę z tych składowych 183 00:10:00,660 --> 00:10:05,300 do absolutnego ostatniej minute-- że jest aż tak naprawdę ich potrzebują. 184 00:10:05,300 --> 00:10:08,480 >> Więc to means-- który jest naprawdę fajne, szczególnie 185 00:10:08,480 --> 00:10:13,200 jeśli myślimy o abstrakcji muzycznego kroku sekwencera. 186 00:10:13,200 --> 00:10:16,740 Go włączyć i zacząć prowadzenie krok sequence-- 187 00:10:16,740 --> 00:10:20,010 Jeśli kiedykolwiek pracował z bębna machine-- i to tylko po to na zawsze. 188 00:10:20,010 --> 00:10:24,650 Więc byłoby naprawdę miło, gdybyśmy może emulować, że w Haskell. 189 00:10:24,650 --> 00:10:31,040 I możemy zrobić to z nieskończoną wartości, w szczególności list nieskończonych. 190 00:10:31,040 --> 00:10:35,860 To bardzo proste, aby wpisać nieskończona lista w Haskell. 191 00:10:35,860 --> 00:10:39,230 Możesz po prostu użyć składni dół tutaj, gdzie można zobaczyć od 1 do 3, 192 00:10:39,230 --> 00:10:42,440 usunąć 3 1 kropka kropka, a że jest to lista nieskończona 193 00:10:42,440 --> 00:10:46,960 wszystkich liczb naturalnych rozszerzenie na ile można sobie wyobrazić. 194 00:10:46,960 --> 00:10:49,925 >> Chcę wprowadzić Koncepcja fałdy od razu. 195 00:10:49,925 --> 00:10:51,800 I znowu, celem Seminarium to nie jest 196 00:10:51,800 --> 00:10:55,770 dowiedzieć się o fałdy w Haskell lub wyższe funkcje zamówienie. 197 00:10:55,770 --> 00:10:59,640 Ale ja po prostu chcę, aby wprowadzić go do podać dokładny sens, jak dziwne 198 00:10:59,640 --> 00:11:03,700 Haskell jest i jak silny jest. 199 00:11:03,700 --> 00:11:08,000 A w szczególności, mamy zamiar być: gdy robimy nasze różne partie perkusji, 200 00:11:08,000 --> 00:11:12,790 jedziemy do manipulowania listy Liczby, składając je na siebie. 201 00:11:12,790 --> 00:11:17,290 I to zrobić, będziemy się za pomocą mapy i fałdy. 202 00:11:17,290 --> 00:11:21,770 >> Istnieje prawo asocjacyjne krotnie, co jest ten jeden w prawo 203 00:11:21,770 --> 00:11:26,990 here-- 1 minus ilość, 2 minus ilość, 3 minus 0. 204 00:11:26,990 --> 00:11:29,170 I składnia dla krotnie, dajesz krotnie 205 00:11:29,170 --> 00:11:34,680 wartość bazowa i wtedy operation-- W tym przypadku dodawanie lub odejmowanie. 206 00:11:34,680 --> 00:11:36,280 Pokazałem obu przypadkach. 207 00:11:36,280 --> 00:11:41,760 A potem jest z akumulatora gromadzi się na całej liście, 208 00:11:41,760 --> 00:11:46,330 stosowania tego plusa operatora lub minus, a następnie gromadzenie go. 209 00:11:46,330 --> 00:11:52,680 Więc to będzie the-- jeśli został powołany ze składaną R plus 0, począwszy od 0, 210 00:11:52,680 --> 00:11:54,720 my to suma wszystkich numery w tym wykazie. 211 00:11:54,720 --> 00:11:57,134 I to jest lista od 1 do 3. 212 00:11:57,134 --> 00:12:00,050 CONNOR HARRIS: Tak, aby umieścić go innym sposób krotnie r pobiera trzy argumenty. 213 00:12:00,050 --> 00:12:02,540 Jest to funkcja, która Sam przyjmuje dwa argumenty, 214 00:12:02,540 --> 00:12:05,400 potem jest wartość rozrusznik, i tam jest lista wartości. 215 00:12:05,400 --> 00:12:08,570 A co zrobić, to wziąć Wartość rozrusznik, pierwsza wartość, 216 00:12:08,570 --> 00:12:09,850 umieścić je w funkcji. 217 00:12:09,850 --> 00:12:11,607 Co Ci się, się, że kanał, który 218 00:12:11,607 --> 00:12:13,940 do funkcji z Druga wartość, to, co masz na zewnątrz, 219 00:12:13,940 --> 00:12:16,690 wziąć to, nakarmić, że w Funkcja trzeciego wartości. 220 00:12:16,690 --> 00:12:18,740 A potem, jeśli w dół cała ta lista w ten sposób, 221 00:12:18,740 --> 00:12:22,970 masz zamiar dostać się w końcu niektóre liczby pojedynczej wartość to 222 00:12:22,970 --> 00:12:25,720 tego samego rodzaju, co na początek się z lub z tego samego typu 223 00:12:25,720 --> 00:12:29,147 jak rzeczy z listy, a następnie to wynik powrót krotnym R. 224 00:12:29,147 --> 00:12:31,980 STEPHEN KREWSON: Tak, w szczególności, są wyższe funkcje zamówień, 225 00:12:31,980 --> 00:12:34,460 bo bierzesz kolejny Funkcja jako jeden z argumentów. 226 00:12:34,460 --> 00:12:34,770 >> CONNOR HARRIS: Tak. 227 00:12:34,770 --> 00:12:37,820 Jeśli stosowane niektóre inne languages-- Wiem R, [niesłyszalne] 228 00:12:37,820 --> 00:12:41,510 język ma ten, zwany Zmniejsz. 229 00:12:41,510 --> 00:12:45,460 Możesz mieć podobne funkcje w innych językach, tak zwane 230 00:12:45,460 --> 00:12:48,160 różne rzeczy. 231 00:12:48,160 --> 00:12:50,680 >> STEPHEN KREWSON: A co jest ładne o krotne R 232 00:12:50,680 --> 00:12:53,880 w tym przypadku jest to, że krotnie R może pracować z nieskończonych listach. 233 00:12:53,880 --> 00:12:59,490 Więc w tym dole, tym P5 jest generowanie notatek, które 234 00:12:59,490 --> 00:13:03,120 są włączone w sekwencera kroku dla jakaś część bębna, piąta część bębna, 235 00:13:03,120 --> 00:13:05,480 a może jest to conga bębna lub coś. 236 00:13:05,480 --> 00:13:09,719 I jest celowo tępy sposób pisania tego, 237 00:13:09,719 --> 00:13:11,510 ale to jest zabawne, ponieważ to pokazuje wiele 238 00:13:11,510 --> 00:13:14,460 rzeczy, o Haskell i Euterpea. 239 00:13:14,460 --> 00:13:20,650 >> Więc krotnie R tego colon-- okrężnicy jest tylko operator, który popycha rzeczy 240 00:13:20,650 --> 00:13:25,700 razem na list-- wezwał pusty Lista, która jest po prostu puste nawiasy. 241 00:13:25,700 --> 00:13:28,250 A ja dzwonię, że na tej nieskończonej listy. 242 00:13:28,250 --> 00:13:31,570 To jest rzeczywiście dwie listy sumowane tutaj. 243 00:13:31,570 --> 00:13:37,150 Lista 1 przecinek 6 kropka Kropka jest 1, 6, 11, 16. 244 00:13:37,150 --> 00:13:39,750 Więc Haskell-- w zaledwie kilka znaków, można 245 00:13:39,750 --> 00:13:42,420 może generować całej karty sekwencja liczb 246 00:13:42,420 --> 00:13:46,240 które są pięć numerów siebie rozciąganie w nieskończoność. 247 00:13:46,240 --> 00:13:49,860 A ja dopisuje do tym krótszy trochę list-- 248 00:13:49,860 --> 00:13:54,370 3, 8, 21-- po prostu pokazać, jak można łączyć listy. 249 00:13:54,370 --> 00:13:55,790 >> A potem mam złożyć na siebie. 250 00:13:55,790 --> 00:14:01,510 I to kończy się po prostu rodzajem Operacja tożsamości, ale jest nieskończona. 251 00:14:01,510 --> 00:14:06,070 I złożyć R może tego zrobić, ponieważ to leniwie ocenia, jak wyżej. 252 00:14:06,070 --> 00:14:10,582 Jeśli mamy 1 i 2 i 3, możemy tylko wspornik wyłączyć całą resztę. 253 00:14:10,582 --> 00:14:12,290 To nie będzie działać minus lub plus, ale to 254 00:14:12,290 --> 00:14:17,760 będzie działać w tym jelita grubego Działanie identyczności na tej liście. 255 00:14:17,760 --> 00:14:24,620 >> Więc jak praktycznie wykorzystywać, że jeśli mieć nieskończenie długą listę rzeczy? 256 00:14:24,620 --> 00:14:26,500 Cóż, Haskell zapewnia wiele functions-- 257 00:14:26,500 --> 00:14:29,450 i wyglądają bardziej do nich w własne time-- takich jak zabrać 258 00:14:29,450 --> 00:14:32,200 która mówi, OK, jesteśmy generowanie tej nieskończonej listy, 259 00:14:32,200 --> 00:14:35,950 ale jesteśmy po prostu będzie się niektóre liczba nim I w tym case-- 260 00:14:35,950 --> 00:14:38,410 zobaczymy to później w nasz automat perkusyjny code-- 261 00:14:38,410 --> 00:14:43,740 GM jest tylko jakaś globalna zmienną liczbę kroków 262 00:14:43,740 --> 00:14:44,610 w sekwencera. 263 00:14:44,610 --> 00:14:47,630 Na maszynach konferencyjne I pokazałem, to zazwyczaj 16, 264 00:14:47,630 --> 00:14:51,475 ale wprowadziły go z 32. 265 00:14:51,475 --> 00:14:54,470 To naprawdę nie ma znaczenia. 266 00:14:54,470 --> 00:15:00,230 >> Haskell jest czysta, więc ma silne statyczne typowanie, że Connor wspomniał. 267 00:15:00,230 --> 00:15:03,220 Więc funkcje są matematycznych w sense-- 268 00:15:03,220 --> 00:15:06,600 są one bardziej matematyczne że są one gwarantowane 269 00:15:06,600 --> 00:15:11,530 nie dostępu lub zmianę jakiegokolwiek zmienna lub wykonywać wejścia lub wyjścia. 270 00:15:11,530 --> 00:15:14,420 Więc jeśli masz funkcję, jest deterministyczny. 271 00:15:14,420 --> 00:15:17,400 Będzie on zawsze zwraca ten sam Wartość w stanie tego programu 272 00:15:17,400 --> 00:15:19,310 lub pozostaje taka sama. 273 00:15:19,310 --> 00:15:22,940 Istnieją, oczywiście, monadycznego wyjątki do tego, ale to jest poza naszym zakresem. 274 00:15:22,940 --> 00:15:23,900 >> CONNOR HARRIS: Tak. 275 00:15:23,900 --> 00:15:26,946 Oznacza to jednak, istnieje kilka ważnych [niesłyszalne] 276 00:15:26,946 --> 00:15:27,820 Konsekwencje tego. 277 00:15:27,820 --> 00:15:30,940 Jednym z nich jest to, że bardzo łatwo parallelize programy Haskell. 278 00:15:30,940 --> 00:15:32,773 Bo jeśli masz, powiedzieć, funkcję, która 279 00:15:32,773 --> 00:15:36,064 musi działać na milion wartości, jeśli wiesz, że funkcja będzie zawsze 280 00:15:36,064 --> 00:15:39,280 dać się taką samą wartość, jeśli karmisz w pewnym value-- 281 00:15:39,280 --> 00:15:43,055 jeśli jesteś [niesłyszalne] f 1, f 2, to f 3 lub whatnot-- f 1 282 00:15:43,055 --> 00:15:45,180 nie będzie pisać do pliku lub zrobić coś 283 00:15:45,180 --> 00:15:46,850 które będą zmieniać wartość f2. 284 00:15:46,850 --> 00:15:50,220 Możesz po prostu podzielić się tej funkcji w milion różnych maszyn albo mln 285 00:15:50,220 --> 00:15:54,720 różne wątki lub cokolwiek, uzyskać wszystkie odpowiedzi z powrotem, 286 00:15:54,720 --> 00:15:56,900 uzyskać wszystkie wartości zwracanych z powrotem, a następnie to wszystko. 287 00:15:56,900 --> 00:15:59,780 Więc bardzo łatwo parallelize rzeczy. 288 00:15:59,780 --> 00:16:03,140 >> Minusem jest to, że wejście i wyjście szczególnie 289 00:16:03,140 --> 00:16:05,720 pasuje do systemu typu w bardzo skomplikowany sposób. 290 00:16:05,720 --> 00:16:09,010 Nie będziemy się tym teraz, ale Zachęcam, aby spojrzeć na niektórych zasobów 291 00:16:09,010 --> 00:16:11,175 w Internecie, jeśli chcesz dowiedzieć się o tym. 292 00:16:11,175 --> 00:16:13,960 293 00:16:13,960 --> 00:16:16,550 >> STEPHEN KREWSON: Tak wpisz classes-- i to 294 00:16:16,550 --> 00:16:21,610 was-- klasy typów zostały wymyślone w celu rozwiązania 295 00:16:21,610 --> 00:16:24,160 problem przeciążenia operatora. 296 00:16:24,160 --> 00:16:27,590 Więc chcieliśmy mieć równość różnych typów rzeczy. 297 00:16:27,590 --> 00:16:31,040 Oczywiście, moglibyśmy pomyśleć of-- równość typów liczbowych 298 00:16:31,040 --> 00:16:34,720 Jest bardzo łatwy do myślenia, ale co równości list? 299 00:16:34,720 --> 00:16:37,610 Co na temat równości drzewo struktury danych noga? 300 00:16:37,610 --> 00:16:43,130 I jest to możliwe w Haskell, ponieważ klas typu. 301 00:16:43,130 --> 00:16:48,000 >> Więc jeśli zdefiniować pewną type-- danych i tu, są boiska muzyczne. 302 00:16:48,000 --> 00:16:50,960 Jesteśmy w końcu się jakiejś muzyki komputerowej. 303 00:16:50,960 --> 00:16:57,420 Więc mamy C, C ostre, i tak dalej i tak dalej. 304 00:16:57,420 --> 00:17:01,080 Należą one do bandą różne klasy typu. 305 00:17:01,080 --> 00:17:03,510 EQ-- należą one do klasy typu EQ. 306 00:17:03,510 --> 00:17:06,780 To oznacza, że ​​wsparcie Działania na rzecz równości. 307 00:17:06,780 --> 00:17:12,650 Tak więc można ocenić, czy jeden Kolejność prymitywów muzycznych 308 00:17:12,650 --> 00:17:15,400 jest takie samo jak na inny. 309 00:17:15,400 --> 00:17:17,280 >> Należą one do porządkowej klasie. 310 00:17:17,280 --> 00:17:19,479 Oznacza to, że nie ma się do nich porządkuje. 311 00:17:19,479 --> 00:17:27,670 D jest po C. cis przychodzi po C, jak również. 312 00:17:27,670 --> 00:17:29,840 Należą one do klasy pokazać, co oznacza, że ​​mogą 313 00:17:29,840 --> 00:17:33,000 być drukowane do konsoli lub terminala. 314 00:17:33,000 --> 00:17:36,090 Należą one do Klasa wyliczone, które 315 00:17:36,090 --> 00:17:39,770 Oznacza to, że, choć Są to znaki, 316 00:17:39,770 --> 00:17:45,340 mają one stanowiącego podstawę numeryczne reprezentacja zaczynając od 0 317 00:17:45,340 --> 00:17:48,960 i dzieje się za pośrednictwem jednak wiele rzeczy jest tutaj, 20 lub tak, 318 00:17:48,960 --> 00:17:51,770 lub 30 lub 40, może. 319 00:17:51,770 --> 00:17:54,259 >> CONNOR HARRIS: A kiedy mamy typ danych 320 00:17:54,259 --> 00:17:57,050 że derives-- z tego słowa kluczowego "deriving--" pewna klasa typ, 321 00:17:57,050 --> 00:18:01,160 oznacza to, że kompilator będzie próbował automatycznie zbudować coś. 322 00:18:01,160 --> 00:18:05,120 Więc może będziesz chciał definiują jakość inaczej. 323 00:18:05,120 --> 00:18:09,450 Będziemy chcieli, aby zdefiniować cis jak równy D płaskim, na przykład. 324 00:18:09,450 --> 00:18:11,560 Dzięki tej budowie tutaj, nie sądzę, cis 325 00:18:11,560 --> 00:18:14,940 i D płaskim będzie równa, ponieważ kompilator automatycznie 326 00:18:14,940 --> 00:18:19,670 powiedzieć każdą inną możliwą wartość różni się od każdego innego. 327 00:18:19,670 --> 00:18:22,930 >> Więc to jest możliwe, aby zastąpić implementacje domyślne 328 00:18:22,930 --> 00:18:25,730 tych rodzajów klas. 329 00:18:25,730 --> 00:18:28,640 Ponownie, spójrz na odwołanie, jeżeli chcesz dowiedzieć się o tym. 330 00:18:28,640 --> 00:18:31,767 331 00:18:31,767 --> 00:18:33,600 STEPHEN KREWSON: A tutaj, w rzeczywistości, to będziesz 332 00:18:33,600 --> 00:18:36,930 być pomocne, gdy kod później. 333 00:18:36,930 --> 00:18:42,150 Widzimy niektóre infiksowych operatorów w składzie sekwencyjnego, 334 00:18:42,150 --> 00:18:46,570 Skład równoległe, a więc dalej, te plusy i znaki równości 335 00:18:46,570 --> 00:18:48,620 otoczony dwukropkami. 336 00:18:48,620 --> 00:18:53,330 Oznacza to, że możemy grać te różne prymitywy muzyczne jeden po drugim. 337 00:18:53,330 --> 00:18:54,590 To kompozycja sekwencyjny. 338 00:18:54,590 --> 00:18:57,170 >> Albo możemy odtwarzać je w równolegle w tym samym czasie. 339 00:18:57,170 --> 00:19:05,100 Więc mogę mieć wartość muzyczną, a potem to równa i dwukropki, 340 00:19:05,100 --> 00:19:09,669 Wrostek równoległego operator składu, i odtwarzać je jako rodzaj akordu. 341 00:19:09,669 --> 00:19:11,460 I mamy zamiar używać to, gdy łączymy 342 00:19:11,460 --> 00:19:15,080 nasza część bębna z naszym mała piosenka Frere Jacques 343 00:19:15,080 --> 00:19:19,460 grać te dwie sekwencje Wartości muzyczne w tym samym czasie. 344 00:19:19,460 --> 00:19:24,520 345 00:19:24,520 --> 00:19:29,250 >> Currying jest-- Curry był ostatnio nazwa Haskell Curry, który 346 00:19:29,250 --> 00:19:31,850 obraz Haskell jest nazwany. 347 00:19:31,850 --> 00:19:34,330 A to pozwala nam na ładne elegancja, gdy jesteśmy 348 00:19:34,330 --> 00:19:36,880 pisząc to wszystko inaczej funkcje lub filtry, że jesteśmy 349 00:19:36,880 --> 00:19:39,330 będzie mapowanie na naszych listach. 350 00:19:39,330 --> 00:19:42,810 Funkcja dwóch arguments-- f x i y-- 351 00:19:42,810 --> 00:19:46,630 można przedstawić jako f x stosowana do y. 352 00:19:46,630 --> 00:19:49,800 Więc jest to funkcja jeden argument, który powraca 353 00:19:49,800 --> 00:19:51,240 Inną funkcją jednym argumentem. 354 00:19:51,240 --> 00:19:56,962 Więc to oznacza, że ​​możemy zmapować funkcja f x, y na liście użytkownika. 355 00:19:56,962 --> 00:19:58,920 CONNOR HARRIS: Chcesz, aby dać przykład tego? 356 00:19:58,920 --> 00:19:59,836 STEPHEN KREWSON: Tak. 357 00:19:59,836 --> 00:20:05,390 Mam przykład tu od niektóre z rzeczy, będziemy pisać. 358 00:20:05,390 --> 00:20:10,500 Więc replikować 2-- dobrze, replikować odbędzie 359 00:20:10,500 --> 00:20:13,040 jedna wartość, która jest, jak wiele razy powtórzyć coś, 360 00:20:13,040 --> 00:20:16,690 a następnie zajmie value-- Zazwyczaj lista czy coś. 361 00:20:16,690 --> 00:20:23,450 Więc, jesteśmy mapowanie replikować 2 na innej liście. 362 00:20:23,450 --> 00:20:27,440 >> Więc jeśli mamy map replikować 2, jeśli replikować 2 stosuje 363 00:20:27,440 --> 00:20:31,890 z pierwszym elementem tego list-- i są to wykazy muzycznej phrases-- 364 00:20:31,890 --> 00:20:37,650 będzie produkować dwa "ty sleeping--" tak śpisz, śpisz. 365 00:20:37,650 --> 00:20:40,040 Więc teraz mamy dwa. 366 00:20:40,040 --> 00:20:42,570 Ale kopią dwojga argumenty, ale dlatego, że jesteśmy 367 00:20:42,570 --> 00:20:47,100 currying a następnie mapowanie, możemy reprezentować rozmnażać 2 368 00:20:47,100 --> 00:20:52,310 jako mający zwrócone w funkcji jeden argument-- prostu replikacji dwukrotnie. 369 00:20:52,310 --> 00:20:57,010 A potem starasz, że do każdego elementem tej listy fraz. 370 00:20:57,010 --> 00:21:01,900 >> I concat jest Haskell Operacja spłaszczania listę. 371 00:21:01,900 --> 00:21:04,400 Ponieważ kopią 2 woli sporządzi listę list. 372 00:21:04,400 --> 00:21:06,660 I to jest tutaj, to pośrednia. 373 00:21:06,660 --> 00:21:10,365 I tak możemy Concat lub spłaszczyć, że dwa razy. 374 00:21:10,365 --> 00:21:12,240 CONNOR HARRIS: Prostsza Przykładem zmiękczanie, 375 00:21:12,240 --> 00:21:15,323 gdybyś like-- wyobrazić f jest tylko Funkcja mnożenia, że ​​trwa dwa 376 00:21:15,323 --> 00:21:16,840 argumenty i zwraca ich produkt. 377 00:21:16,840 --> 00:21:19,320 Więc jeśli masz F 4 na 5, to 20. 378 00:21:19,320 --> 00:21:22,670 Ale można pomyśleć o tym, jak also-- masz funkcję f 4 379 00:21:22,670 --> 00:21:25,560 że przyjmuje argument i powraca cztery razy w tym argument-- tylko 380 00:21:25,560 --> 00:21:27,870 częściowe aplikacja tylko jeden argument 4. 381 00:21:27,870 --> 00:21:31,182 A jeśli karmisz f 4 5, który daje 20. 382 00:21:31,182 --> 00:21:32,890 I to jest prostsze Przykładem zmiękczania. 383 00:21:32,890 --> 00:21:34,473 Zazwyczaj jeden z tych podręczników. 384 00:21:34,473 --> 00:21:38,860 385 00:21:38,860 --> 00:21:42,110 >> STEPHEN KREWSON: Lambda wyrażenia lub funkcje anonimowe 386 00:21:42,110 --> 00:21:47,330 są kolejnym znakiem rozpoznawczym Haskell. 387 00:21:47,330 --> 00:21:51,242 Więc jeśli musimy wzbudzać Funkcja kopią trochę życia, 388 00:21:51,242 --> 00:21:52,950 ale powiedzieć, że nie jest w biblioteka standardowa, 389 00:21:52,950 --> 00:21:56,150 możemy użyć składni podobne do następujących. 390 00:21:56,150 --> 00:21:58,730 A my wiatr nad tym. 391 00:21:58,730 --> 00:22:02,160 Jedną rzeczą, którą można zobaczyć wiele w automat perkusyjny jest robimy połączenia 392 00:22:02,160 --> 00:22:05,790 coś o nazwie filtr, który podobnie jak poprzednio, 393 00:22:05,790 --> 00:22:08,185 jest odwzorowaniem funkcji na liście, ale to 394 00:22:08,185 --> 00:22:10,260 mapowanie Boolean funkcji. 395 00:22:10,260 --> 00:22:13,390 >> Tak więc mamy tu przykład na jedno anonimowo 396 00:22:13,390 --> 00:22:19,150 zdefiniowana funkcja logiczna zajmuje tylko kilka wartości. 397 00:22:19,150 --> 00:22:22,990 Nie jest to ściśle mówiąc anonimowa funkcja. 398 00:22:22,990 --> 00:22:25,850 Ale to określenie z że składnia dla zwięzłości, 399 00:22:25,850 --> 00:22:28,007 i to po prostu ma moduł x n-- 400 00:22:28,007 --> 00:22:28,840 CONNOR HARRIS: Tak. 401 00:22:28,840 --> 00:22:31,330 Tak f jest funkcją dwa argumenty n oraz p 402 00:22:31,330 --> 00:22:35,440 która zwraca funkcję, która jest sama funkcją jeden argument, a mianowicie x. 403 00:22:35,440 --> 00:22:38,815 404 00:22:38,815 --> 00:22:40,690 STEPHEN KREWSON: I wyżej wymienione podmioty Wrostek. 405 00:22:40,690 --> 00:22:42,642 Jakie są operatorzy Wrostek? 406 00:22:42,642 --> 00:22:45,710 Cóż, operatorzy Wrostek są normalny sposób reprezentujemy operacji, 407 00:22:45,710 --> 00:22:49,910 powiedzieć, w mathematics-- 2 plus 2 zamiast operatora oraz 408 00:22:49,910 --> 00:22:51,202 a następnie dwa argumenty 2 i 2. 409 00:22:51,202 --> 00:22:53,701 CONNOR HARRIS: To się nazywa Odwrotna Notacja Polska, która jest 410 00:22:53,701 --> 00:22:55,330 termin wątpię ktoś z was będzie wiedział. 411 00:22:55,330 --> 00:22:56,288 >> STEPHEN KREWSON: Racja. 412 00:22:56,288 --> 00:22:58,290 Rewers notacji polskiej lub prefiksu. 413 00:22:58,290 --> 00:23:01,412 Ale Haskell postanowił używać operatorów Wrostek. 414 00:23:01,412 --> 00:23:03,120 Tak więc są to jedne z te niestandardowe 415 00:23:03,120 --> 00:23:07,770 są zdefiniowane dla Euterpea DSCL w Haskell. 416 00:23:07,770 --> 00:23:10,730 Więc to był skład sekwencyjny. 417 00:23:10,730 --> 00:23:16,340 To był skład równoległe, a to było obcinanie skład równoległego. 418 00:23:16,340 --> 00:23:18,710 I musimy, że z naszego automatu perkusyjnego, 419 00:23:18,710 --> 00:23:22,640 bo użyjemy ostatni Operator w tym małym krotki tam 420 00:23:22,640 --> 00:23:26,330 gry na automat perkusyjny wraz z naszą piosenką Frere Jacques. 421 00:23:26,330 --> 00:23:28,650 A nasz automat perkusyjny jest będzie nieskończona. 422 00:23:28,650 --> 00:23:30,920 To po prostu gra na zawsze. 423 00:23:30,920 --> 00:23:32,692 Ale piosenka Frere Jacques nie jest. 424 00:23:32,692 --> 00:23:33,510 To nie jest tak długo. 425 00:23:33,510 --> 00:23:36,610 To tylko kilka barów. 426 00:23:36,610 --> 00:23:43,030 Więc musimy zatrzymać maszynę bębna w tylko krótszy wartość muzyczna pochodzi 427 00:23:43,030 --> 00:23:43,700 do końca. 428 00:23:43,700 --> 00:23:46,980 I że operator infixed jest super pomocny z tym. 429 00:23:46,980 --> 00:23:50,090 >> I Wrostek notacji jak jest to miłe, 430 00:23:50,090 --> 00:23:57,095 dlatego, że masz funkcji takich jak cytat, który daje podział liczby całkowitej 431 00:23:57,095 --> 00:24:01,010 x czymś else-- Przepraszam, że powinno być i b. 432 00:24:01,010 --> 00:24:04,740 Możesz napisać go jako cytat z b. 433 00:24:04,740 --> 00:24:09,670 Więc jeśli put-- elementem jest innym przykładem. 434 00:24:09,670 --> 00:24:14,730 x elementem jakiejś listy, jeśli umieścisz to w backticks, można go używać. 435 00:24:14,730 --> 00:24:20,400 Nawet jeśli to nie jest symbol jak plus lub minus lub czasach, 436 00:24:20,400 --> 00:24:24,630 można użyć nazwy Funkcja takiego w backticks 437 00:24:24,630 --> 00:24:27,045 jako operator wrostkowy, który jest całkiem fajne. 438 00:24:27,045 --> 00:24:29,670 CONNOR HARRIS: Ponownie, jest to cały cukier właśnie składniowym, naprawdę. 439 00:24:29,670 --> 00:24:32,310 To nie ma wpływu na istotę języka. 440 00:24:32,310 --> 00:24:37,440 >> STEPHEN KREWSON: Widzimy więc tutaj dla Ostatnie zdanie naszej piosenki Frere Jacques, 441 00:24:37,440 --> 00:24:45,740 Grałem kilka małych akordów lub trzecie zastosowaniem kompozycji równoległe 442 00:24:45,740 --> 00:24:46,240 operator. 443 00:24:46,240 --> 00:24:50,680 444 00:24:50,680 --> 00:24:54,950 Jest to kolejny sposób na powiedzenie kilku z tego, co mamy właśnie mówi. 445 00:24:54,950 --> 00:24:59,986 Więc można mapować funkcje z jednym argumentem na listach. 446 00:24:59,986 --> 00:25:02,860 CONNOR HARRIS: Ponownie referencje dla Haskell-- podręczników wprowadzających 447 00:25:02,860 --> 00:25:04,680 będzie miał wszystko w nim. 448 00:25:04,680 --> 00:25:07,790 >> STEPHEN KREWSON: Więc tutaj jest dość Kluczem linia sekwencera kroku 449 00:25:07,790 --> 00:25:12,820 my przyjrzeć się używając lista zrozumieniem. 450 00:25:12,820 --> 00:25:17,810 I widzimy tutaj, że elementem w stałej operatora w cudzysłowie tyłu. 451 00:25:17,810 --> 00:25:23,030 Tak więc, jeśli x jest elementem listy x, tedy będziemy wywoływać funkcje Perci. 452 00:25:23,030 --> 00:25:25,100 Więc perc jest tylko funkcją perkusja. 453 00:25:25,100 --> 00:25:30,200 To zajmuje trochę wartość p, który jest część ograniczonego zbioru wszystkich 454 00:25:30,200 --> 00:25:35,310 różne dźwięki perkusyjne które widzieliśmy w poprzednim slajdzie, 455 00:25:35,310 --> 00:25:38,840 a następnie daje że Czas trwania ćwierćnuty. 456 00:25:38,840 --> 00:25:43,190 W innym wypadku daje mu QNR i QNR tylko reszta ćwierćnuta. 457 00:25:43,190 --> 00:25:44,970 >> Więc to jest budowanie coś miłego. 458 00:25:44,970 --> 00:25:52,110 Mamy listę elementów, a Będziemy pętli na niektóre listy od jednego 459 00:25:52,110 --> 00:25:54,540 do maksymalnej wartości naszego kroku sekwencera. 460 00:25:54,540 --> 00:25:58,290 A kiedy jesteśmy w określonym I w że lista jednego do maksymalnej wartości, 461 00:25:58,290 --> 00:26:02,970 jeśli i jest członkiem tego zestaw utworzony w tej funkcji, 462 00:26:02,970 --> 00:26:06,040 dobrze, to włącz go w nocie perkusji. 463 00:26:06,040 --> 00:26:10,960 W przeciwnym wypadku, po prostu grać na odpoczynek, który to znaczy, po prostu milczeć. 464 00:26:10,960 --> 00:26:16,050 I widzimy tutaj, że w ta lista rozumienie składni, 465 00:26:16,050 --> 00:26:20,030 x jest wypełniany przez to Lista zbudowane jeden 466 00:26:20,030 --> 00:26:22,462 w światowym wielkości sekwencera. 467 00:26:22,462 --> 00:26:23,295 CONNOR HARRIS: Tak. 468 00:26:23,295 --> 00:26:26,340 Podstawowa składnia listowych jest 469 00:26:26,340 --> 00:26:30,810 Uchwyt, wartość zaangażowania niektóre zmienne, bar, 470 00:26:30,810 --> 00:26:34,260 Możliwe wartości zmiennych sami, zamknięty uchwyt. 471 00:26:34,260 --> 00:26:38,545 A jeśli zrobiłeś ustawić zapis budowniczy w jakiejkolwiek klasie matematyki, 472 00:26:38,545 --> 00:26:45,999 Może masz ustawione 2n takich że n lub n jest z. 473 00:26:45,999 --> 00:26:48,290 Podobny thing-- tej notacji ma sugerować 474 00:26:48,290 --> 00:26:49,630 tej notacji matematycznej. 475 00:26:49,630 --> 00:26:51,880 STEPHEN KREWSON: A można zastosować wiele predykatów 476 00:26:51,880 --> 00:26:56,250 i wiele filtrów na liście zrozumienie, co jest bardzo miłe. 477 00:26:56,250 --> 00:27:01,800 Algebraiczne types-- mamy nie będzie utrzymywał tu długo. 478 00:27:01,800 --> 00:27:04,840 Nie jest to dobre pojęcie w Haskell lub dobre, jasne pojęcie 479 00:27:04,840 --> 00:27:10,720 w jaki sposób do podjęcia, powiedzmy, domyślnie parametr do funkcji, czy coś. 480 00:27:10,720 --> 00:27:13,370 W Pythonie jest to dość łatwe. 481 00:27:13,370 --> 00:27:18,460 Można tylko powiedzieć, z równa się deklaracja funkcji, 482 00:27:18,460 --> 00:27:21,420 domyślna wartość w Sprawa żaden dostarczane. 483 00:27:21,420 --> 00:27:27,010 >> W Haskell, mógłbyś może Może być może używać typu, 484 00:27:27,010 --> 00:27:32,190 która zajmuje albo nic lub wartość typu tylko. 485 00:27:32,190 --> 00:27:38,630 Tak więc to wykorzystać w automat perkusyjny aby umożliwić nam dać opcjonalny głośności 486 00:27:38,630 --> 00:27:40,730 parametry dla każdej z części bębna. 487 00:27:40,730 --> 00:27:46,160 488 00:27:46,160 --> 00:27:54,680 Tak, że daje nam sposób o EQ lub objętość w danym kanale. 489 00:27:54,680 --> 00:27:56,440 >> CONNOR HARRIS: W inne przykłady Haskell, 490 00:27:56,440 --> 00:28:00,450 Państwo może patrz mogą być stosowane do Funkcje, które może zakończyć się niepowodzeniem. 491 00:28:00,450 --> 00:28:03,470 Jest to wspólny jeden. 492 00:28:03,470 --> 00:28:07,010 >> STEPHEN KREWSON: A możesz podać jakiś komunikat o błędzie jako domyślny. 493 00:28:07,010 --> 00:28:11,020 I to jest szczególnie przydatne, gdy robisz I / O w Haskell. 494 00:28:11,020 --> 00:28:12,044 To może być sztuczki. 495 00:28:12,044 --> 00:28:13,960 CONNOR HARRIS: lub na Podobny przykład, myślę 496 00:28:13,960 --> 00:28:17,460 z funkcji, która obejmuje podział parametru, które mogą być 0. 497 00:28:17,460 --> 00:28:20,020 I że funkcja mogła powrót może cokolwiek. 498 00:28:20,020 --> 00:28:22,802 Więc jeśli nie ma dzielenia przez 0, powróci po prostu cokolwiek. 499 00:28:22,802 --> 00:28:25,010 A jeśli jest podział przez 0, zwróci nic 500 00:28:25,010 --> 00:28:26,910 jako sposób sygnalizacji błędu. 501 00:28:26,910 --> 00:28:30,330 Ponieważ jedną z konsekwencji Bardzo surowe wpisując Haskell'a 502 00:28:30,330 --> 00:28:34,100 jest to, że nie ma real-- Wyjątkiem są niewygodne, w zasadzie, 503 00:28:34,100 --> 00:28:36,160 obsługa błędów jest niewygodne. 504 00:28:36,160 --> 00:28:39,440 I to jest jeden bardzo wspólny sposób to zrobić. 505 00:28:39,440 --> 00:28:42,990 >> STEPHEN KREWSON: Więc teraz mamy do innego umysłów rzeczy 506 00:28:42,990 --> 00:28:49,160 o Haskell, która jest wzór definicje dopasowania i funkcjonalności. 507 00:28:49,160 --> 00:28:53,390 Pokazałem wam w ostatnim Przesuń Deklaracja sekwencji kroku 508 00:28:53,390 --> 00:28:58,170 Funkcja, która odbyła się być może wartość, to int, a następnie lista wskazówki, 509 00:28:58,170 --> 00:29:03,850 powraca sekwencję Wartości muzyka nie odnotowany 510 00:29:03,850 --> 00:29:05,375 zarówno wysokość i głośność. 511 00:29:05,375 --> 00:29:08,030 512 00:29:08,030 --> 00:29:11,820 >> Więc te trzy argumenty mogą być wzór dopasowany w następujący sposób. 513 00:29:11,820 --> 00:29:16,660 I zawsze chcemy mieć pewność, aby nie przypadek bazowy lub sprawę wyjścia pierwszy. 514 00:29:16,660 --> 00:29:19,690 I te podkreślenia może po prostu być interpretowane 515 00:29:19,690 --> 00:29:22,340 oznacza każdą znajdującą się tam wartość. 516 00:29:22,340 --> 00:29:26,580 Więc jeśli mamy połączenia do kroku sekwencji z jakąś wartość, inną wartość, 517 00:29:26,580 --> 00:29:32,210 a potem pusta lista, co chcemy powrót jest tylko cisza, reszta 0. 518 00:29:32,210 --> 00:29:35,110 >> A zamiast tego Lista jest pusta lub 0, 519 00:29:35,110 --> 00:29:38,150 to jest reszta 0, bo jesteśmy do czynienia z rodzajem muzyki, 520 00:29:38,150 --> 00:29:43,230 i pusta lista muzyki Typ jest tylko reszta nie czas. 521 00:29:43,230 --> 00:29:45,680 To nie jest muzyka. 522 00:29:45,680 --> 00:29:51,460 A potem zobaczymy, czy możemy dostać krok sekwencji z v do argumentu głośności, 523 00:29:51,460 --> 00:29:57,290 p na instrumencie ostrożności Argument, a następnie lista x-tych. 524 00:29:57,290 --> 00:29:58,360 >> Następnie robimy pewne rzeczy. 525 00:29:58,360 --> 00:30:01,290 W szczególności, stosuje się ta lista zrozumieniem, 526 00:30:01,290 --> 00:30:05,700 i wykonywania niektórych operacje na być może wartości 527 00:30:05,700 --> 00:30:10,050 aby włączyć go do wartości numerycznej, tak aby to może być następnie wyliczone i używane 528 00:30:10,050 --> 00:30:12,300 aby wybrać urządzenie. 529 00:30:12,300 --> 00:30:16,730 Ponownie, jest to mała nieco celowo inconcise 530 00:30:16,730 --> 00:30:20,580 tak, aby pokazać wszystkie dziwne rzeczy można zrobić w Haskell, jak ty 531 00:30:20,580 --> 00:30:23,170 spojrzeć na nią w swoim czasie. 532 00:30:23,170 --> 00:30:23,802 >> W porządku. 533 00:30:23,802 --> 00:30:26,010 Więc jesteśmy w końcu się do robić to, co określone zrobić, 534 00:30:26,010 --> 00:30:28,820 co zrobić muzykę komputerową. 535 00:30:28,820 --> 00:30:32,250 Tak więc mamy zamiar spróbować dokonać piosenkę Frere Jacques. 536 00:30:32,250 --> 00:30:35,220 Tak więc są jak wiele frazy w Frere Jacques? 537 00:30:35,220 --> 00:30:38,790 538 00:30:38,790 --> 00:30:39,680 Cztery. 539 00:30:39,680 --> 00:30:40,460 Wielki. 540 00:30:40,460 --> 00:30:42,490 I to, co miłe jest to, że wszystkie one są powtarzane 541 00:30:42,490 --> 00:30:46,990 taką samą ilość czasu, który wynosi dwa. 542 00:30:46,990 --> 00:30:50,730 >> Więc mamy cztery frazy każdy powtarza się dwa razy. 543 00:30:50,730 --> 00:30:53,590 A w szczególności, że są w rundzie. 544 00:30:53,590 --> 00:30:55,340 I wiele, wiele sposobów na wdrożenie 545 00:30:55,340 --> 00:30:57,520 okrągły, które mogą być zabawne robić. 546 00:30:57,520 --> 00:31:00,260 Zrobiłem go w dość prosty sposób tutaj, 547 00:31:00,260 --> 00:31:05,760 która jest po prostu construct-- linię funkcja przyjmuje listę wartości muzycznych 548 00:31:05,760 --> 00:31:10,390 i zamienia ją w składzie sekwencyjnego przez zastosowanie tego sekwencyjnego składu 549 00:31:10,390 --> 00:31:13,000 operator. 550 00:31:13,000 --> 00:31:19,540 >> I wtedy opóźnić różne części czyniąc je rozpocząć w spoczynku. 551 00:31:19,540 --> 00:31:22,770 Więc zacznę z resztą dwóch środków, a potem reszta czterech środków, 552 00:31:22,770 --> 00:31:26,160 a potem reszta sześciu środki, a następnie runda 553 00:31:26,160 --> 00:31:32,290 działa, jak wszyscy wiemy tę piosenkę. 554 00:31:32,290 --> 00:31:37,180 Widzimy dwie adnotacje lub modyfikacje wartości muzycznych 555 00:31:37,180 --> 00:31:43,150 które są zawarte w niniejszym sekwencyjnego Rozmieszczenie elementów muzycznych. 556 00:31:43,150 --> 00:31:44,810 Mamy głośności add. 557 00:31:44,810 --> 00:31:48,960 Jest to funkcja adnotacji muzyka z określonej objętości. 558 00:31:48,960 --> 00:31:51,320 To jest dobry przykład z prowadzeniem sygnału MIDI 559 00:31:51,320 --> 00:31:57,510 od 0 do 127, siedem bitów Informacje, które mogą być wykonywane. 560 00:31:57,510 --> 00:32:00,650 >> I then-- widzieliśmy go bardzo krótko, ale ogólny MIDI 561 00:32:00,650 --> 00:32:02,310 Lista wszystkich różnych instrumentów. 562 00:32:02,310 --> 00:32:04,450 I nie ma dużo z nich. 563 00:32:04,450 --> 00:32:11,230 Jeśli korzystasz z DAW, jak Ableton Live lub Pro Tools, 564 00:32:11,230 --> 00:32:17,560 jest niezwykle szerszy zakres syntezatorów i instrumentów VST. 565 00:32:17,560 --> 00:32:21,510 Ale tylko średnia MIDI ma kilka lub kilkadziesiąt. 566 00:32:21,510 --> 00:32:22,799 A niektóre z nich są zabawne. 567 00:32:22,799 --> 00:32:25,840 Myślałem, że byłoby fajnie, gdybyśmy mogli zagrać instrument instrument MIDI 568 00:32:25,840 --> 00:32:30,550 śmigłowca, a następnie Kolejnym sposobem poprzez rundzie 569 00:32:30,550 --> 00:32:37,980 zrobiliśmy Synth Pad, a następnie z to banalnie ołów prostokątny synth, 570 00:32:37,980 --> 00:32:44,240 a następnie głos śluzu, które są trochę niewyraźna na mojej złej MIDI 571 00:32:44,240 --> 00:32:46,410 syntezator, ale OK. 572 00:32:46,410 --> 00:32:50,030 >> A potem widzimy to let i składni od Haskell, 573 00:32:50,030 --> 00:32:54,030 a potem gramy wszystkie te elementy razem 574 00:32:54,030 --> 00:32:56,265 z równoległym operatora składu. 575 00:32:56,265 --> 00:33:00,260 576 00:33:00,260 --> 00:33:02,296 I moglibyśmy zapewne pokazać trochę tego. 577 00:33:02,296 --> 00:33:07,674 578 00:33:07,674 --> 00:33:08,340 Oto kod. 579 00:33:08,340 --> 00:33:14,960 I można zobaczyć w C, by być Wiele polanie gardła i okolicy 580 00:33:14,960 --> 00:33:19,760 kod stół przed tobą może tworzyć muzykę, tak. 581 00:33:19,760 --> 00:33:22,080 Lub innego programowania język, to pewnie 582 00:33:22,080 --> 00:33:27,210 musisz wchodzić w interakcje z jakimś biblioteki lub API i ustawi wszystko, 583 00:33:27,210 --> 00:33:28,725 i wtedy trzeba by oczyścić. 584 00:33:28,725 --> 00:33:33,810 Ale tu, w Haskell jest, jak sądzę, po pojawi się zawiesić go, niezwykle 585 00:33:33,810 --> 00:33:35,770 czytelne i bardzo wyraziste. 586 00:33:35,770 --> 00:33:38,930 587 00:33:38,930 --> 00:33:43,240 Tak więc nie jest realizacja od Frere Jacques. 588 00:33:43,240 --> 00:33:43,740 W porządku. 589 00:33:43,740 --> 00:33:47,557 Teraz chcemy, aby dodać perkusję, i to jest trochę bałaganu. 590 00:33:47,557 --> 00:33:49,015 Warto więc spojrzeć na slajdach. 591 00:33:49,015 --> 00:33:56,880 592 00:33:56,880 --> 00:34:00,540 Tak więc wielka idea jest, aby kilka list lub części. 593 00:34:00,540 --> 00:34:04,140 Na tych maszynach konferencyjne, nie Może były zwykle około ośmiu 594 00:34:04,140 --> 00:34:08,670 10 rytmu lub perkusyjnych części. 595 00:34:08,670 --> 00:34:10,159 A następnie za pomocą kilka technik. 596 00:34:10,159 --> 00:34:14,889 I rozmawialiśmy o these-- użyciu fałdy, filtry, funkcje lambda, 597 00:34:14,889 --> 00:34:19,429 odwzorowane na listach do generowania wartości W pewnym zakresie 1 do R, r 16, 598 00:34:19,429 --> 00:34:20,699 lub 32 kroki sekwencera. 599 00:34:20,699 --> 00:34:23,810 600 00:34:23,810 --> 00:34:29,920 >> A potem, jeśli istnieje wartość w tej liście jak biegamy przez sekwencer, 601 00:34:29,920 --> 00:34:34,190 poprzez uruchomienie go nad i powyżej, okazuje się na tym pamiętać, 602 00:34:34,190 --> 00:34:36,060 i że próbka zostanie uruchomiony. 603 00:34:36,060 --> 00:34:42,810 604 00:34:42,810 --> 00:34:47,110 Tutaj znajdziesz różne sposoby dziwne Wpadłem do generowania notatki. 605 00:34:47,110 --> 00:34:48,940 Wypróbuj na własnym pół sumy. 606 00:34:48,940 --> 00:34:50,360 Będzie to brzmi fajnie. 607 00:34:50,360 --> 00:34:53,066 608 00:34:53,066 --> 00:34:54,690 Jeśli czas pozwoli, będziemy przechodzić przez to. 609 00:34:54,690 --> 00:34:59,200 Ale na razie, myślę, powinniśmy demo, co mamy. 610 00:34:59,200 --> 00:35:01,380 Miejmy nadzieję, że to idzie OK. 611 00:35:01,380 --> 00:35:02,670 >> Więc to jest GHCI. 612 00:35:02,670 --> 00:35:06,580 613 00:35:06,580 --> 00:35:09,121 A my załadować plik Nazwałem song.lhs, 614 00:35:09,121 --> 00:35:10,620 Plik, który jest po prostu pokazałem. 615 00:35:10,620 --> 00:35:11,470 Ok świetnie. 616 00:35:11,470 --> 00:35:15,010 Jak powiedział Connor wcześniej, kompilowane, to typ zaznaczone, 617 00:35:15,010 --> 00:35:18,380 więc mogę oddychać dużo łatwiejsze. 618 00:35:18,380 --> 00:35:20,010 To nie będzie wysadzić na mnie. 619 00:35:20,010 --> 00:35:22,720 >> Chciałem pokazać coś pożytecznego. 620 00:35:22,720 --> 00:35:25,900 Widać, że Moduł załadowany nazywa 50. 621 00:35:25,900 --> 00:35:28,240 Możesz przeglądać ten moduł. 622 00:35:28,240 --> 00:35:32,092 I to jest tak miło o doing-- może co 623 00:35:32,092 --> 00:35:34,550 robisz w Haskell nie jest nazywa rozwoju oprogramowania, 624 00:35:34,550 --> 00:35:36,980 ale można zrobić wiele zabawne rzeczy na własną rękę. 625 00:35:36,980 --> 00:35:42,410 A pracy jest naprawdę ładne, jak w porównaniu do wielu innych języków 626 00:35:42,410 --> 00:35:45,872 ponieważ można zobaczyć w naprawdę czytelny sposób, co się dzieje. 627 00:35:45,872 --> 00:35:47,830 Widzimy więc, że mamy wszystkie te frazy, które 628 00:35:47,830 --> 00:35:53,760 są wykazy stanowisk muzycznych, a następnie budować je się w coś większego, 629 00:35:53,760 --> 00:35:55,220 który to utwór muzyczny. 630 00:35:55,220 --> 00:35:58,450 Jest to urządzenie muzyczne. 631 00:35:58,450 --> 00:36:05,545 I wtedy możemy grać to wszystko z funkcją odtwarzania muzyki nazywa. 632 00:36:05,545 --> 00:36:09,040 Widać, że tu na dole. 633 00:36:09,040 --> 00:36:11,310 Która jest po prostu grać. 634 00:36:11,310 --> 00:36:15,040 >> Mam say-- nie mówić o to znak dolara, który jest wszędzie. 635 00:36:15,040 --> 00:36:17,980 Znak dolara to kolejny operator wrostkowy. 636 00:36:17,980 --> 00:36:22,500 Ale ma najniższy priorytet od dowolnego operatora, który skutecznie 637 00:36:22,500 --> 00:36:24,960 oznacza to, że wszystko na lewa znaku dolara 638 00:36:24,960 --> 00:36:28,460 oraz prawo do dolara, mamy zamiar uzyskać oceniane przed nim. 639 00:36:28,460 --> 00:36:31,430 Więc jest to coś w rodzaju innego sposób na dodanie nawiasów. 640 00:36:31,430 --> 00:36:33,980 641 00:36:33,980 --> 00:36:36,220 >> CONNOR HARRIS: Jest to w zasadzie złożenie funkcji. 642 00:36:36,220 --> 00:36:40,026 I zapewnia, że ​​nie have-- jeśli masz funkcje obu stronach lub Wrostek 643 00:36:40,026 --> 00:36:42,900 operatorzy po obu stronach, nie będą one kojarzy poprzek i daje 644 00:36:42,900 --> 00:36:46,030 nieoczekiwane wyniki. 645 00:36:46,030 --> 00:36:49,790 >> STEPHEN KREWSON: Więc can-- za pomocą, możemy zadzwonić. 646 00:36:49,790 --> 00:36:51,415 Najpierw zagramy bez perkusji. 647 00:36:51,415 --> 00:37:00,330 648 00:37:00,330 --> 00:37:03,170 To helikopter, helikopter MIDI. 649 00:37:03,170 --> 00:37:05,495 >> [MUZYKI] 650 00:37:05,495 --> 00:37:08,525 651 00:37:08,525 --> 00:37:09,525 Tam jest prostokątny. 652 00:37:09,525 --> 00:37:24,520 653 00:37:24,520 --> 00:37:25,490 Mule głos. 654 00:37:25,490 --> 00:37:27,630 I można naprawdę zaszaleć z tym. 655 00:37:27,630 --> 00:37:30,872 Wybrałem jeden całkiem proste, bo wiedziałem, że nie powinien odgryźć 656 00:37:30,872 --> 00:37:31,830 więcej, niż mogłem żuć. 657 00:37:31,830 --> 00:37:36,460 Wystarczy mieć go dość prosta przedstawienie głównych idei. 658 00:37:36,460 --> 00:37:39,952 Ale ja na to mamy ale dodać kilka bębnów do tego. 659 00:37:39,952 --> 00:37:41,910 Tylko dlatego, że jest to trochę nieprzenikniony, 660 00:37:41,910 --> 00:37:45,790 i nie używać Nazwa części perkusyjnych, 661 00:37:45,790 --> 00:37:49,490 I odwzorowane them-- bo są częścią tego wyliczenia klasy, 662 00:37:49,490 --> 00:37:51,500 I odwzorowane im wskazówki. 663 00:37:51,500 --> 00:37:53,120 Jednym z nich jest jak bęben basowy. 664 00:37:53,120 --> 00:37:54,370 Zero jest tak dobrze. 665 00:37:54,370 --> 00:37:56,000 Siedem jest wysoki kapelusz. 666 00:37:56,000 --> 00:38:00,920 I w tu, gdzie Funkcje trochę bardziej losowe, 667 00:38:00,920 --> 00:38:02,100 są to bębny conga jak. 668 00:38:02,100 --> 00:38:08,360 >> Więc jeśli uważasz, że about-- być może świetny sposób na wdrożenie automat perkusyjny 669 00:38:08,360 --> 00:38:12,830 jest użycie bardzo uporządkowany wzory na swoim bębnie basowym. 670 00:38:12,830 --> 00:38:17,640 Tak więc dla przykładu, o filtrowaniu nad lista ze wszystkim, co daje z powrotem 671 00:38:17,640 --> 00:38:20,590 A 1, gdy jest podjęta moduł 04. 672 00:38:20,590 --> 00:38:27,190 Więc mam 1, 5, 9, 13, 17-- więc jest pierwszym bicie każdego środka. 673 00:38:27,190 --> 00:38:32,860 >> A następnie to samo rzeczą, przesunięty w dwóch etapach. 674 00:38:32,860 --> 00:38:33,850 Więc to jest niecodzienny. 675 00:38:33,850 --> 00:38:37,480 Tak więc będzie to coś w wysokim kapeluszu. 676 00:38:37,480 --> 00:38:39,640 I znów, tutaj, to trochę przypadkowa, 677 00:38:39,640 --> 00:38:41,080 bo robimy bębny conga. 678 00:38:41,080 --> 00:38:44,180 I mam kilka marakasy tutaj też. 679 00:38:44,180 --> 00:38:50,280 >> Więc mogę zadzwonić zabaw automat perkusyjny, ale to trwać wiecznie, 680 00:38:50,280 --> 00:38:53,700 i może rozpocząć chwytając się cała pamięć w moim systemie. 681 00:38:53,700 --> 00:38:57,090 Więc zadzwonię do tej funkcji odtwarzanie muzyki, która jak zobaczymy, 682 00:38:57,090 --> 00:39:02,020 użyj obcinania skład równoległego grać naszą piosenkę Frere Jacques 683 00:39:02,020 --> 00:39:04,200 wraz z tym dziwnym automatu perkusyjnego. 684 00:39:04,200 --> 00:39:06,190 Warto więc przyjrzeć. 685 00:39:06,190 --> 00:39:10,920 I proszę poprawić moje rozmieszczenie wszystkich elementów perkusyjnych. 686 00:39:10,920 --> 00:39:13,375 Nie moja specjalność, ale mieliśmy dużo zabawy robią. 687 00:39:13,375 --> 00:39:17,678 688 00:39:17,678 --> 00:39:20,654 >> [MUZYKI] 689 00:39:20,654 --> 00:39:52,260 690 00:39:52,260 --> 00:39:56,980 >> Tak więc oczywiście to wszystko trochę nie tak zabawne 691 00:39:56,980 --> 00:40:01,100 jeśli nie możemy przekształcić go do punktów, więc może go 692 00:40:01,100 --> 00:40:04,650 mogą być interpretowane przez człowieka wykonawcy. 693 00:40:04,650 --> 00:40:06,535 Więc nie będę go uruchomić tutaj. 694 00:40:06,535 --> 00:40:07,910 Ja już generowane pliki. 695 00:40:07,910 --> 00:40:10,280 Widać, że istnieje Kropka LilyPond file-- i to 696 00:40:10,280 --> 00:40:14,500 będzie mój segue się do Connor-- i kropka plik MIDI, 697 00:40:14,500 --> 00:40:18,610 i plik kropka w formacie PDF, który jest co LilyPond ostatecznie wygenerować. 698 00:40:18,610 --> 00:40:23,770 >> Ale to są te skrypty i będę wystarczy uruchomić je z ich opcji pomocy. 699 00:40:23,770 --> 00:40:28,090 Jeśli masz te i uruchamiania Euterpea, można wygenerować plik MIDI. 700 00:40:28,090 --> 00:40:31,160 A potem z pliku MIDI z tym programem MIDI 2LY, 701 00:40:31,160 --> 00:40:34,930 można wygenerować Lily Plik staw, a następnie 702 00:40:34,930 --> 00:40:37,974 może wygenerować plik PDF z wyniku. 703 00:40:37,974 --> 00:40:39,390 I powinniśmy spojrzeć na to. 704 00:40:39,390 --> 00:40:52,599 705 00:40:52,599 --> 00:40:55,140 Więc Connor prawdopodobnie pokaże Ci, jak opisywanie tego lepiej, 706 00:40:55,140 --> 00:41:02,570 ale to Frere Jacques jako generowane przez mnie w Euterpea. 707 00:41:02,570 --> 00:41:07,300 To tylko w C. I powinien zorientowali się, co włamać to faktycznie w. 708 00:41:07,300 --> 00:41:11,090 Ale to jest rurociąg jak to robisz, że się z tym. 709 00:41:11,090 --> 00:41:12,950 Porozmawiajmy więcej o LilyPond. 710 00:41:12,950 --> 00:41:15,780 >> CONNOR HARRIS: OK Zobaczymy. 711 00:41:15,780 --> 00:41:19,480 712 00:41:19,480 --> 00:41:21,419 Czy wspomnieć Dowiedz się You Haskell? 713 00:41:21,419 --> 00:41:22,460 STEPHEN KREWSON: O tak. 714 00:41:22,460 --> 00:41:23,480 Zapoznaj się Dowiedz się You Haskell. 715 00:41:23,480 --> 00:41:24,410 To w zasobach. 716 00:41:24,410 --> 00:41:26,830 To się zaczęło uczenia się, i to jest świetne. 717 00:41:26,830 --> 00:41:27,580 Nie głupie nauki. 718 00:41:27,580 --> 00:41:28,829 >> CONNOR HARRIS: Więc to jest online. 719 00:41:28,829 --> 00:41:34,760 Więc facet o imieniu [niesłyszalne] learnyouahaskell.com, bez spacji. 720 00:41:34,760 --> 00:41:37,065 Gramatyka jest chory. 721 00:41:37,065 --> 00:41:38,690 STEPHEN KREWSON: To ilustruje, też. 722 00:41:38,690 --> 00:41:39,440 CONNOR HARRIS: Więc co jest LilyPond? 723 00:41:39,440 --> 00:41:42,480 Jest to deklaratywne programowania język muzyki składu. 724 00:41:42,480 --> 00:41:45,480 Więc declarative-- można myśleć o rzeczach, takich jak HTML, 725 00:41:45,480 --> 00:41:50,900 gdzie nie jesteś saying-- HTML nie powiedzieć, jak przeglądarki internetowe powinny 726 00:41:50,900 --> 00:41:52,180 renderowania stron krok po kroku. 727 00:41:52,180 --> 00:41:54,096 To jest po prostu mówiąc to Jest to opis tekstowy 728 00:41:54,096 --> 00:41:56,100 z tego, co chcesz, aby strona wyglądać. 729 00:41:56,100 --> 00:41:59,310 >> I to jest to również program że kompiluje tego języka, 730 00:41:59,310 --> 00:42:02,300 albo przeczytać jej w czym właściwie robi skład tekstu dla Ciebie, 731 00:42:02,300 --> 00:42:05,570 i wypluwa je wspaniałe patrząc wyniki PDF. 732 00:42:05,570 --> 00:42:08,250 Można również uzyskać formatu PNG lub cokolwiek. 733 00:42:08,250 --> 00:42:10,300 Dobrym sposobem myślenia to jest analogiczny 734 00:42:10,300 --> 00:42:16,620 jest to, że LaTeX jest trochę jak LillyPond, ale tylko dla zwykłego składu. 735 00:42:16,620 --> 00:42:20,360 Więc zamiast of-- to nie jest WYSIWYG, What You See 736 00:42:20,360 --> 00:42:22,960 To co masz, jak, powiedzmy, Finał jest lub Sibelius, 737 00:42:22,960 --> 00:42:27,430 lub Microsoft Word, w którym można wpisać czasu rzeczywistego oraz projekty rzeczy w czasie rzeczywistym 738 00:42:27,430 --> 00:42:31,340 i zobaczyć zmiany natychmiast. 739 00:42:31,340 --> 00:42:32,140 >> Opiera się tekstu. 740 00:42:32,140 --> 00:42:35,290 Musisz skompilować wyniki za pomocą oddzielnego programu 741 00:42:35,290 --> 00:42:37,090 i wyjść plików PDF później. 742 00:42:37,090 --> 00:42:43,320 Jest to nieco mniej wygodne do użycia, jeśli jesteś 743 00:42:43,320 --> 00:42:46,520 próbuje pisać bezpośrednio na wynik i jesteś 744 00:42:46,520 --> 00:42:48,620 starając się tworzyć na komputerze. 745 00:42:48,620 --> 00:42:50,830 Ale istnieje wiele korzyści dla niego. 746 00:42:50,830 --> 00:42:56,110 Jeden, to wygląda o wiele ładniejszy, bo LillyPond może rzeczywiście 747 00:42:56,110 --> 00:42:58,210 trochę czasu, aby zrobić układ decyzje prawidłowo, 748 00:42:58,210 --> 00:43:02,380 w przeciwieństwie Sibelius lub Finale, które mają aby algorytmy zagrożona tak 749 00:43:02,380 --> 00:43:05,020 że mogą wyświetlać rzeczy w czasie rzeczywistym. 750 00:43:05,020 --> 00:43:07,660 >> Więc dlaczego jest LilyPond-- grafika komputerowa jest trudne. 751 00:43:07,660 --> 00:43:10,535 Jeśli robisz coś z muzyki i chcesz napisać na wyniki, 752 00:43:10,535 --> 00:43:13,900 nie chcesz pisać się wszystkiego o sobie 753 00:43:13,900 --> 00:43:19,040 zaczynając jak narysować sztaby i jak narysować notatniki. 754 00:43:19,040 --> 00:43:21,020 To jest bardzo trudne. To zostało zrobione wcześniej. 755 00:43:21,020 --> 00:43:22,170 Jesteś w porządku. 756 00:43:22,170 --> 00:43:26,200 >> Jeśli chcesz użyć Finale lub Sibelius, formaty plików do tych rzeczy 757 00:43:26,200 --> 00:43:30,180 są bardzo skomplikowane i nie można naprawdę wykorzystać je programowo. 758 00:43:30,180 --> 00:43:35,020 Możesz otworzyć Sibelius z Finału i przejdź do menu Plik, Eksportuj jako PDF samemu, 759 00:43:35,020 --> 00:43:37,600 ale naprawdę nie mogę Nazywamy to ze skryptu. 760 00:43:37,600 --> 00:43:40,440 LillyPond, możesz zadzwonić z tych skryptów. 761 00:43:40,440 --> 00:43:44,397 Można łatwo iteracji LillyPond LaTeX. 762 00:43:44,397 --> 00:43:47,230 Nie ma zbyt wiele czasu, aby przejść do tych technologii już teraz, 763 00:43:47,230 --> 00:43:48,321 ale one istnieją. 764 00:43:48,321 --> 00:43:50,070 Jeśli chcesz wyglądać w książce LillyPond, 765 00:43:50,070 --> 00:43:53,760 to program, który pochodzi z Twoja dystrybucja LillyPond, 766 00:43:53,760 --> 00:43:57,030 i to jest dla iteracji LillyPond fragmenty do lateksu 767 00:43:57,030 --> 00:44:00,340 jeśli chcesz coś zrobić jak wielki dokumentu muzykologii 768 00:44:00,340 --> 00:44:02,289 z przykładów, na przykład. 769 00:44:02,289 --> 00:44:04,580 I to jest dobre umiejętności do życie, jeśli robisz coś 770 00:44:04,580 --> 00:44:05,770 z muzyką, nie tylko CS50. 771 00:44:05,770 --> 00:44:09,320 Użyłem LillyPond dla wszystkich z moich projektów składu 772 00:44:09,320 --> 00:44:11,880 ponieważ byłem w zasadzie starszy w szkole średniej. 773 00:44:11,880 --> 00:44:13,455 >> Więc oto kilka prostych przykładów. 774 00:44:13,455 --> 00:44:17,490 775 00:44:17,490 --> 00:44:21,060 Jest to po prostu przedstawiciel poziomu trudności 776 00:44:21,060 --> 00:44:23,481 że większość ludzi oczy starali 777 00:44:23,481 --> 00:44:24,980 używać LilyPond dla prostych projektów. 778 00:44:24,980 --> 00:44:29,519 Ten pierwszy jest początkiem do chorału preludium Bacha. 779 00:44:29,519 --> 00:44:31,810 Ten dolny fragment z jednej z moich prac, 780 00:44:31,810 --> 00:44:34,650 i to tylko tam, aby pokazać wy takie rzeczy [niesłyszalne] 781 00:44:34,650 --> 00:44:38,550 wprowadzenie wielu linii w tym samym Pracownicy, jak liryka undersetting działa. 782 00:44:38,550 --> 00:44:41,350 783 00:44:41,350 --> 00:44:46,110 Lyric podkłady są rzeczą, która bardzo łatwy w użyciu LilyPond dla muzyki chóralnej. 784 00:44:46,110 --> 00:44:48,814 >> I tak to jest trochę więcej skomplikowane przykłady. 785 00:44:48,814 --> 00:44:50,980 Wszystko to odbywa się w LilyPond i są wykonalne. 786 00:44:50,980 --> 00:44:55,280 Ten pierwszy fragment jest z [Niesłyszalne] przez [niesłyszalne]. 787 00:44:55,280 --> 00:44:58,860 I to [niesłyszalne] z utwór na kontrabas solo 788 00:44:58,860 --> 00:45:03,550 flet przez [niesłyszalne], który jest longtime-- którzy 789 00:45:03,550 --> 00:45:07,101 był długoletnim członkiem z Dział muzyczny tutaj, myślę. 790 00:45:07,101 --> 00:45:08,600 Nie jestem pewien, dokąd pojechał do. 791 00:45:08,600 --> 00:45:12,410 Ale on był doradcą Harvardzie Stowarzyszenie Kompozytorów przez długi czas. 792 00:45:12,410 --> 00:45:13,530 Wspaniały człowiek. 793 00:45:13,530 --> 00:45:16,920 I pisze muzykę, która ma bardzo skomplikowany zapis, że LillyPond 794 00:45:16,920 --> 00:45:20,500 może jednak obsłużyć bardzo ładnie. 795 00:45:20,500 --> 00:45:26,030 >> Więc po prostu dać poczucie tego, co Możliwości tej rzeczy w are-- tak 796 00:45:26,030 --> 00:45:28,960 elementy wewnętrzne z LillyPond są bardzo skomplikowane. 797 00:45:28,960 --> 00:45:31,060 I można go używać do dawno, w tym 798 00:45:31,060 --> 00:45:32,520 dla niektórych dość skomplikowane rzeczy, nie bardzo 799 00:45:32,520 --> 00:45:34,060 znając wiele o nich. 800 00:45:34,060 --> 00:45:38,720 Ale podstawowa idea jest taka, że ​​na Najniższy poziom, atomy LillyPonds 801 00:45:38,720 --> 00:45:39,970 są notatki. 802 00:45:39,970 --> 00:45:42,761 Notatki zawierają Kontekst zwane głosy. 803 00:45:42,761 --> 00:45:44,510 Więc kontekście głosu w zasadzie odpowiada 804 00:45:44,510 --> 00:45:47,410 do pojedynczej linii polifonii. 805 00:45:47,410 --> 00:45:49,410 A potem kontekst może być zawarte hierarchicznie 806 00:45:49,410 --> 00:45:53,590 w tych wyższych poziomów, które stanowią sztabów na wynik 807 00:45:53,590 --> 00:45:56,750 lub większe grupy, takie jak sztabów fortepian, chór i sztabów 808 00:45:56,750 --> 00:45:58,990 a następnie w końcu całe konteksty wynik. 809 00:45:58,990 --> 00:46:02,260 I rzeczywiście można objąć wielokrotne wyniki w książce. 810 00:46:02,260 --> 00:46:05,770 >> I każdy kontekst ma liczba dołączonych rytowników. 811 00:46:05,770 --> 00:46:08,340 Jeśli spojrzeć poprzez Zawartość kontekście 812 00:46:08,340 --> 00:46:14,410 i wydrukować pewien symbol lub pewna klasa symboli, jak to konieczne. 813 00:46:14,410 --> 00:46:17,840 Tak, aby każdy kontekście głosu, nie ma [niesłyszalne] notatki 814 00:46:17,840 --> 00:46:24,270 grawer, który jest w zasadzie funkcją lub obiekt, który zapisuje wszystkie wiadomości 815 00:46:24,270 --> 00:46:26,290 głowy na prawej części strony. 816 00:46:26,290 --> 00:46:29,510 Potem jest rozszczep grawer, który pisze się szczelin na pracowników. 817 00:46:29,510 --> 00:46:31,517 Potem jest metronom znak grawera, że 818 00:46:31,517 --> 00:46:33,100 pisze się znaki metronomu w partyturze. 819 00:46:33,100 --> 00:46:36,410 I to wszystko zmieścić dość również w hierarchii. 820 00:46:36,410 --> 00:46:39,500 I to jest bardzo, bardzo, bardzo konfigurowalny, co trzeba 821 00:46:39,500 --> 00:46:42,880 jeśli chcesz, aby takie rzeczy. 822 00:46:42,880 --> 00:46:45,730 >> Więc wszystkie konteksty mają Wiele różnych atrybutów 823 00:46:45,730 --> 00:46:52,410 które można modyfikować za wszystko z odstępem do różnych czcionki 824 00:46:52,410 --> 00:46:54,942 Wybór do rozmiarów rzeczy. 825 00:46:54,942 --> 00:46:56,900 Jeśli chcesz to zrobić, nawet bardziej skomplikowane rzeczy, 826 00:46:56,900 --> 00:46:59,210 jest wbudowany język skryptowy. 827 00:46:59,210 --> 00:47:01,820 Korzystają one z systemu, który jest dialekt LISP. 828 00:47:01,820 --> 00:47:04,960 To prawdopodobnie nie coś dla ciebie znaczy. 829 00:47:04,960 --> 00:47:06,900 Ale w zasadzie, schemat inną funkcjonalną 830 00:47:06,900 --> 00:47:09,500 język programowania, bardziej lub mniej. 831 00:47:09,500 --> 00:47:10,800 >> STEPHEN KREWSON: Tie-in. 832 00:47:10,800 --> 00:47:12,690 >> CONNOR HARRIS: Tak. 833 00:47:12,690 --> 00:47:15,390 To dobry tie-in, jak sądzę. 834 00:47:15,390 --> 00:47:20,150 I jest używany jako język nauczania, rzeczywiście, w dół Mass Ave. Na MIT. 835 00:47:20,150 --> 00:47:26,590 I to jest bardzo przydatne dla LillyPond z różnych przyczyn technicznych. 836 00:47:26,590 --> 00:47:30,317 >> A więc jeśli chcesz, aby proste szczypie zależne od warunkowych, 837 00:47:30,317 --> 00:47:32,900 dla example-- istnieje pewna Warunkiem wynik, który jest spełniony, 838 00:47:32,900 --> 00:47:36,495 wprowadzania zmian w Układ lub whatnot-- następnie 839 00:47:36,495 --> 00:47:37,620 te obiekty są tam. 840 00:47:37,620 --> 00:47:38,667 Są skomplikowane. 841 00:47:38,667 --> 00:47:40,250 Więc tutaj jest bardzo prosty przykładowy kod. 842 00:47:40,250 --> 00:47:43,810 To pięć linii. 843 00:47:43,810 --> 00:47:46,120 Zasadniczo, jestem określenie dwóch sztabów. 844 00:47:46,120 --> 00:47:46,904 Jest w 3/4. 845 00:47:46,904 --> 00:47:48,695 Pierwszy zespół ma dołączony znak tempo, 846 00:47:48,695 --> 00:47:51,110 ale to rzeczywiście będzie aby przejść do całego wyniku, 847 00:47:51,110 --> 00:47:54,960 ponieważ znaków tempa są na poziomie wyników. 848 00:47:54,960 --> 00:47:59,044 Znak metronom grawer Wynik jest dołączony do kontekstu. 849 00:47:59,044 --> 00:48:01,460 Istnieją różne klucze, bo [niesłyszalne] grawer 850 00:48:01,460 --> 00:48:02,710 jest przymocowany sztabów. 851 00:48:02,710 --> 00:48:04,441 Możesz faktycznie jest. 852 00:48:04,441 --> 00:48:06,190 Próbka napisałem jest faktycznie w tonacji C-dur, 853 00:48:06,190 --> 00:48:07,990 ale to tylko do wykazywać można mieć 854 00:48:07,990 --> 00:48:09,570 różne klucze w różnych sztabów. 855 00:48:09,570 --> 00:48:15,710 I składnia podstawowa jest napisać Uwaga nazwy z E, F, G, cokolwiek. 856 00:48:15,710 --> 00:48:18,910 Jeśli chcesz zrobić chromatyczne, Ci przyrostek jest lub ES. 857 00:48:18,910 --> 00:48:22,640 To jest z holenderskiego muzykologiczne konwencje. 858 00:48:22,640 --> 00:48:28,290 >> I zrobić skok oktawy, musisz użyć te znaczniki, przecinek lub apostrof. 859 00:48:28,290 --> 00:48:30,580 Względna oznacza po prostu, co masz notatkę, 860 00:48:30,580 --> 00:48:34,080 zostanie automatycznie plaec w oktawy najbliższym poprzednim. 861 00:48:34,080 --> 00:48:37,624 A jeśli chcesz, aby przejść więcej niż fifth-- powiedzieć, piąty lub more-- 862 00:48:37,624 --> 00:48:39,165 wtedy musisz użyć [niesłyszalne]. 863 00:48:39,165 --> 00:48:42,580 Ale poza tym, nie masz do określić oktawy każdej nuty. 864 00:48:42,580 --> 00:48:46,130 >> I względne C, podstawowym, C, wystarczy podać środkowe C 865 00:48:46,130 --> 00:48:48,630 i podstawy C, szczególnie pierwsze nuty. 866 00:48:48,630 --> 00:48:55,020 Wtedy masz te laski, które organizują te dwa głosy lub próbki muzyki, 867 00:48:55,020 --> 00:48:56,730 i masz wynik. 868 00:48:56,730 --> 00:48:58,440 A to wygląda tak. 869 00:48:58,440 --> 00:49:01,780 870 00:49:01,780 --> 00:49:05,380 >> Jeśli chcesz wziąć czas do skopiować ten próbkę LillyPond 871 00:49:05,380 --> 00:49:07,530 Kod na poprzedni zjechać w dół tutaj, a ty 872 00:49:07,530 --> 00:49:09,030 Można pisać na LillyPond samodzielnie. 873 00:49:09,030 --> 00:49:11,280 Wiem, że mamy coś że wygląda trochę tak. 874 00:49:11,280 --> 00:49:17,236 875 00:49:17,236 --> 00:49:19,610 Więc nie ma innej technologii utrzymywane nazywa XML Muzyka 876 00:49:19,610 --> 00:49:22,030 przez zupełnie innych ludzi. 877 00:49:22,030 --> 00:49:28,150 XML to dane tekstowe structure-- I Dane nie powinny powiedzieć mówią structure-- 878 00:49:28,150 --> 00:49:29,580 Mapa rodzaj metafory. 879 00:49:29,580 --> 00:49:33,800 I to jest przeznaczone do przechowywania Dane hierarchiczne bardzo dobrze. 880 00:49:33,800 --> 00:49:37,050 HTML, na przykład, typu XML. 881 00:49:37,050 --> 00:49:41,090 I można powiedzieć, XML, ponieważ miał wszystkie nawiasy i kąta 882 00:49:41,090 --> 00:49:44,700 Uchwyt znaki slash że pola pokaż danych. 883 00:49:44,700 --> 00:49:47,390 >> Nie mam kodu Przykład z Muzyka XML. 884 00:49:47,390 --> 00:49:50,450 Można go znaleźć samemu. 885 00:49:50,450 --> 00:49:53,735 Zasadniczo, powodem może chcesz używać XML jako pośredniego etapu 886 00:49:53,735 --> 00:49:55,980 jest przede wszystkim to format wymiany 887 00:49:55,980 --> 00:50:02,301 na zasadzie every-- nie powinienem tego mówić każdy, ale wiele różnych punktów 888 00:50:02,301 --> 00:50:02,800 pisarze. 889 00:50:02,800 --> 00:50:04,966 Więc jeśli piszesz w Muzyka XML, nie tylko może LillyPond 890 00:50:04,966 --> 00:50:08,080 przeczytaj ją za pomocą tego Auxilary Program o nazwie XML Muzyka do LY, 891 00:50:08,080 --> 00:50:11,360 ale także Finale może czytać Opisz Sibelius może go odczytać. 892 00:50:11,360 --> 00:50:14,770 W zależności od konfiguracji wewnętrznej obiektu Hierarchia pracuje reprezentujący muzykę, 893 00:50:14,770 --> 00:50:18,820 Może łatwiej będzie napisać XML Muzyka niż do LillyPond 894 00:50:18,820 --> 00:50:22,410 i po prostu polegać na XML Muzyka do LY zrobić konwersję. 895 00:50:22,410 --> 00:50:24,282 >> Nie sądzę [niesłyszalne] ma XML muzyki. 896 00:50:24,282 --> 00:50:25,490 STEPHEN KREWSON: nie. 897 00:50:25,490 --> 00:50:26,340 Ktoś pracuje na nim, choć. 898 00:50:26,340 --> 00:50:27,090 >> CONNOR HARRIS: OK. 899 00:50:27,090 --> 00:50:31,040 Euterpea nie mają Funkcja wyjścia XML jeszcze muzyka. 900 00:50:31,040 --> 00:50:35,340 Jeśli chcesz ostatecznej koncepcji projektu, może skontaktować się z facetami 901 00:50:35,340 --> 00:50:38,620 Stephen wie, i mogli korzystać z pomocy. 902 00:50:38,620 --> 00:50:40,992 >> STEPHEN KREWSON: chciałbym tego. 903 00:50:40,992 --> 00:50:43,450 CONNOR HARRIS: Również, w zasadzie, co języki programowania 904 00:50:43,450 --> 00:50:46,610 że warto jej soli ma już biblioteki XML, 905 00:50:46,610 --> 00:50:51,030 więc można wewnętrznie przekonwertować wszystkie muzyki do jakiegoś obiektu 906 00:50:51,030 --> 00:50:54,120 że biblioteka XML można napisać się, że wymaga mniej 907 00:50:54,120 --> 00:50:57,470 zmiany w swojej strukturze wewnętrznej niezależnie od muzyki obiektów 908 00:50:57,470 --> 00:51:00,310 chcę pisać, niż pisać to bezpośrednio LillyPond będzie. 909 00:51:00,310 --> 00:51:04,380 Następnie wystarczy wydrukować go z XML z bibliotek XML w języku polskim, 910 00:51:04,380 --> 00:51:07,260 co gwarantuje, że jest to poprawny składniowo i wszystko, 911 00:51:07,260 --> 00:51:08,720 a następnie przekonwertować go do LillyPond. 912 00:51:08,720 --> 00:51:11,060 Tak więc technologia może chcesz przyjrzeć się, jeśli robisz coś 913 00:51:11,060 --> 00:51:11,650 jak to. 914 00:51:11,650 --> 00:51:14,490 915 00:51:14,490 --> 00:51:16,370 >> [Niesłyszalne], inny auxilarry technologii. 916 00:51:16,370 --> 00:51:21,700 Jest to w zasadzie Tech Works lub Tech Studio dla LillyPond. 917 00:51:21,700 --> 00:51:25,380 Więc to oferuje pomoc w Składnia, z szablonami 918 00:51:25,380 --> 00:51:28,770 dla różnych wspólnych kombinacje instrumentów. 919 00:51:28,770 --> 00:51:32,780 Pozwala on podzielony ekran oglądania tak możesz mieć swój kod w jednym oknie 920 00:51:32,780 --> 00:51:37,350 i PDF w innym oknie i kliknij miejsc w PDF 921 00:51:37,350 --> 00:51:40,650 Aby przejść do znaczenia miejsca w kodzie źródłowym. 922 00:51:40,650 --> 00:51:45,330 To jest bardziej przydatna, jeśli jesteś naprawdę pisanie LillyPond plików siebie 923 00:51:45,330 --> 00:51:47,400 niż jeśli generowania je programowo. 924 00:51:47,400 --> 00:51:51,230 Ale znowu, to coś przydatne. 925 00:51:51,230 --> 00:51:51,970 >> Wielki. 926 00:51:51,970 --> 00:51:55,860 Innym resources-- będę po prostu przejść przez to bardzo szybko. 927 00:51:55,860 --> 00:52:01,270 LillyPond manuals-- LillyPond ma doskonała dokumentacja na swojej stronie internetowej. 928 00:52:01,270 --> 00:52:02,270 Mają samouczek. 929 00:52:02,270 --> 00:52:03,478 Mają odniesienie składni. 930 00:52:03,478 --> 00:52:07,010 Mają setki fragmentów do różnych małych rzeczy 931 00:52:07,010 --> 00:52:09,930 yo może trzeba zrobić, aby wykazać różne możliwości. 932 00:52:09,930 --> 00:52:12,250 Jeśli chcesz użyć językiem skryptowym 933 00:52:12,250 --> 00:52:14,740 lub bardziej rozległe dostosowania, to nie 934 00:52:14,740 --> 00:52:16,730 wewnętrzne odniesienia w tym URL. 935 00:52:16,730 --> 00:52:21,950 Jeżeli chcesz korzystać z XML muzyki, nie że adres URL, musicxml.com/tutorial. 936 00:52:21,950 --> 00:52:27,960 >> A potem, jeśli chcesz dowiedzieć się schemat bo rzeczywiście chcesz używać 937 00:52:27,960 --> 00:52:30,960 obiekty skryptowe w LillyPond, to istnieje [niesłyszalne] nazywa 938 00:52:30,960 --> 00:52:32,918 Zorganizowany Interpretacja programów komputerowych, 939 00:52:32,918 --> 00:52:35,820 który jest nie tylko sekundy Największą CS podręcznik historii written-- 940 00:52:35,820 --> 00:52:39,770 znajdź mi potem, jeśli chcesz wiedzieć co myślę, że największym jednym jest-- 941 00:52:39,770 --> 00:52:43,580 ale jest to również bardzo dobry Wprowadzenie do języka właściwego. 942 00:52:43,580 --> 00:52:46,630 Nie trzeba będzie więcej niż kilka pierwszych odcinków. 943 00:52:46,630 --> 00:52:47,827 >> I to wszystko. 944 00:52:47,827 --> 00:52:48,410 Jakiekolwiek pytania? 945 00:52:48,410 --> 00:52:54,068 946 00:52:54,068 --> 00:52:57,972 >> Student: Gdzie mogę pobrać Twój generowane Frere Jacques 947 00:52:57,972 --> 00:53:01,050 więc mogę umieścić go na swoim iPodzie? 948 00:53:01,050 --> 00:53:07,574 >> STEPHEN KREWSON: Cóż można napisać się do jakiegoś pliku wav w Euterpea. 949 00:53:07,574 --> 00:53:08,490 I masz kod. 950 00:53:08,490 --> 00:53:10,000 Jest na GitHub. 951 00:53:10,000 --> 00:53:15,590 Tworzyć własne wariacje Frere Jacques przez CS50 ula umysłu. 952 00:53:15,590 --> 00:53:17,095 Byłoby świetnie. 953 00:53:17,095 --> 00:53:18,220 CONNOR HARRIS: Ktoś jeszcze? 954 00:53:18,220 --> 00:53:20,261 STEPHEN KREWSON: Musimy lepszy bęben basowy, też. 955 00:53:20,261 --> 00:53:21,935 Jest naprawdę źle. 956 00:53:21,935 --> 00:53:26,565 >> UCZEŃ: Euterpea nie tylko strona skład, ale signal-- 957 00:53:26,565 --> 00:53:27,440 STEPHEN KREWSON: Tak. 958 00:53:27,440 --> 00:53:30,100 W rzeczywistości, praca I nie w Euterpea kiedy 959 00:53:30,100 --> 00:53:33,450 wziął this-- istnieje ukończył kurs w Yale, że 960 00:53:33,450 --> 00:53:35,900 wykorzystuje it-- był na syntezy dźwięku. 961 00:53:35,900 --> 00:53:39,810 Więc jest naprawdę dobry sposób, za pomocą strzałek 962 00:53:39,810 --> 00:53:46,150 a niektóre z notacją widzieliśmy komponowania ze sobą funkcje sygnałowe. 963 00:53:46,150 --> 00:53:50,610 W szczególności, basu dla najbardziej z nich jest tak proste sinusoida. 964 00:53:50,610 --> 00:53:54,240 Ale jeśli zaczniesz komponować tych w dziwnych programowych sposobów, 965 00:53:54,240 --> 00:54:00,010 można dostać szalony dźwięk Efekty, jak dziwne kaskadami. 966 00:54:00,010 --> 00:54:04,640 Można tworzyć bardzo piaszczysty dźwięki z wielu modulacji. 967 00:54:04,640 --> 00:54:07,730 >> Zrobiłem projekt na granulowany syntezowy, który jest 968 00:54:07,730 --> 00:54:12,290 gdzieś pomiędzy FM i pobierania próbek. 969 00:54:12,290 --> 00:54:15,230 Bierzesz bardzo małe, małe próbki, a następnie 970 00:54:15,230 --> 00:54:20,440 połączyć je z jakimś modulator i stworzyć bogatszy dźwięk. 971 00:54:20,440 --> 00:54:24,900 Zrobiliśmy też modelowanie fizyczne, więc starając się myśleć o fizyce 972 00:54:24,900 --> 00:54:29,410 i psychoakustyka z czymś takim trąbka, i myśli o drodze 973 00:54:29,410 --> 00:54:32,320 dźwięk jest odbijając się dzwon trąby 974 00:54:32,320 --> 00:54:35,200 i akustyka pokój i modelowanie 975 00:54:35,200 --> 00:54:40,195 że podstawowe oscylatorów. 976 00:54:40,195 --> 00:54:47,690 977 00:54:47,690 --> 00:54:48,940 CONNOR HARRIS: Dziękuję bardzo. 978 00:54:48,940 --> 00:54:50,140 Dziękuję za przyjście. 979 00:54:50,140 --> 00:54:52,400 I zawsze jestem gotów podjąć pytania przez email-- 980 00:54:52,400 --> 00:54:55,020 connorharris@college.harvard.edu. 981 00:54:55,020 --> 00:54:57,020 >> STEPHEN KREWSON: Tak. stephen.krewson@yale.edu. 982 00:54:57,020 --> 00:54:58,810 983 00:54:58,810 --> 00:55:00,360 Fajne. 984 00:55:00,360 --> 00:55:01,667