1 00:00:00,000 --> 00:00:05,180 2 00:00:05,180 --> 00:00:05,930 Коннор Харріс: Привіт. 3 00:00:05,930 --> 00:00:06,820 Я Коннор Харріс. 4 00:00:06,820 --> 00:00:09,729 Я CS50 Каліфорнія в Гарварді. 5 00:00:09,729 --> 00:00:11,270 СТІВЕН KREWSON: Я Стівен Krewson. 6 00:00:11,270 --> 00:00:12,582 Я TF для CS50 в Єльському університеті. 7 00:00:12,582 --> 00:00:15,790 Коннор Харріс: І ми будемо говорити про деякі технології, які ви, можливо, 8 00:00:15,790 --> 00:00:18,880 хочете використовувати, якщо ви зацікавлені в робити остаточний проект або дійсно 9 00:00:18,880 --> 00:00:20,920 що-небудь з музикою. 10 00:00:20,920 --> 00:00:24,400 Ми збираємося концентруватися на першому а Мова програмування Haskell називається. 11 00:00:24,400 --> 00:00:26,280 Це функціональний мову, тому парадигма 12 00:00:26,280 --> 00:00:29,620 дуже відрізняється від C або PHP або інші імперативні мови 13 00:00:29,620 --> 00:00:33,450 що ви використовували вже, і особливо в бібліотеці, написаної в Haskell 14 00:00:33,450 --> 00:00:40,240 називається Euterpea, які можуть допомогти людям з написання музики функціонально, 15 00:00:40,240 --> 00:00:40,780 в основному. 16 00:00:40,780 --> 00:00:43,400 А Стефан, ви пройдете через великий приклад цього. 17 00:00:43,400 --> 00:00:46,423 >> Після цього, я познайомлю вас з те, що називається LillyPond, що 18 00:00:46,423 --> 00:00:48,370 це технологія верстки музики. 19 00:00:48,370 --> 00:00:50,830 Це ніби як LaTeX для музики, якщо кожен з вас 20 00:00:50,830 --> 00:00:57,530 використовували латекс для математичних класів або інші Р набір класів або що там у вас. 21 00:00:57,530 --> 00:01:00,440 І тому я дам вам, знову ж, деякі прості приклади, що 22 00:01:00,440 --> 00:01:03,640 і вказати вам загалом Напрямок деяких кращих ресурсів. 23 00:01:03,640 --> 00:01:04,319 >> СТІВЕН KREWSON: У Крім того, ми думали, це 24 00:01:04,319 --> 00:01:06,720 було б здорово, щоб налаштувати трохи натяків 25 00:01:06,720 --> 00:01:10,780 до трубопроводу між Euterpea генеруються MIDI файли 26 00:01:10,780 --> 00:01:13,910 в LillyPond, тому ми надаємо деякі інструкції по сценаріїв 27 00:01:13,910 --> 00:01:16,310 зробити це, які є забезпечені LillyPond 28 00:01:16,310 --> 00:01:19,160 просто тримати його відкритим вихідним кодом і отримати трубопровід збирається. 29 00:01:19,160 --> 00:01:20,910 Коннор Харріс: Знову ж таки, слід підкреслити ,, 30 00:01:20,910 --> 00:01:23,100 ці дві технології, ви не повинні використовувати їх разом. 31 00:01:23,100 --> 00:01:25,370 Вони не призначені для роботи разом, хоча вони дуже красиво. 32 00:01:25,370 --> 00:01:26,362 >> СТІВЕН KREWSON: Вірно. 33 00:01:26,362 --> 00:01:30,116 І абсолютно безкоштовно. 34 00:01:30,116 --> 00:01:32,240 Коннор Харріс: Так підтвердження, щойно прочитав, що. 35 00:01:32,240 --> 00:01:33,406 СТІВЕН KREWSON: Належним чином відзначити. 36 00:01:33,406 --> 00:01:36,360 Завдяки цим людей. 37 00:01:36,360 --> 00:01:39,180 Це я затримуватися на тільки на мить. 38 00:01:39,180 --> 00:01:41,560 Процес установки це трохи складніше. 39 00:01:41,560 --> 00:01:45,420 Ми читання мене на GitHub що ви можете поглянути на. 40 00:01:45,420 --> 00:01:47,840 Просто напишіть мені, якщо у вас є які-небудь питання. 41 00:01:47,840 --> 00:01:52,829 Але ми будемо запускати цей в припущенні, що це працює для всіх. 42 00:01:52,829 --> 00:01:55,620 Коннор Харріс: А якщо ви не можете отримати LillyPond не працювати, не страшно. 43 00:01:55,620 --> 00:02:00,139 Там немає живої збірник, що буде брати участь, принаймні, з мого боку. 44 00:02:00,139 --> 00:02:02,930 СТІВЕН KREWSON: Haskell і LillyPond повинні обидва мають інсталяторів. 45 00:02:02,930 --> 00:02:08,497 Euterpea завантажується як Пакет, так далі, і так далі. 46 00:02:08,497 --> 00:02:10,080 Таким чином, ми говоримо про комп'ютерної музики. 47 00:02:10,080 --> 00:02:12,990 І це всього лише дуже вид 50000 футів. 48 00:02:12,990 --> 00:02:15,700 Там в кілька різних аспектів цього. 49 00:02:15,700 --> 00:02:18,120 І це є грубим і збирається приховувати деякі подробиці. 50 00:02:18,120 --> 00:02:22,090 Але ми могли б придумати що-небудь як алгоритмічного складу, 51 00:02:22,090 --> 00:02:24,920 з використанням алгоритмів, за допомогою коду, щоб генерувати 52 00:02:24,920 --> 00:02:30,280 деякий тип може бути of-- самоподібним послідовність нот, або можливо нот 53 00:02:30,280 --> 00:02:33,330 під якийсь обмеження. 54 00:02:33,330 --> 00:02:35,350 І тоді ті, може бути виконані або інтерпретувати 55 00:02:35,350 --> 00:02:38,390 з аналогових інструментів або що-небудь подібне. 56 00:02:38,390 --> 00:02:42,010 Але склад був зроблено алгоритмічно. 57 00:02:42,010 --> 00:02:45,120 >> Але, звичайно, може бути, область комп'ютерна музика чи цифровий музичний 58 00:02:45,120 --> 00:02:48,870 ми більше знайомі з цифровою синтез звуку або цифровий дискретизації 59 00:02:48,870 --> 00:02:51,160 і цифровий запис. 60 00:02:51,160 --> 00:02:55,650 Багато цифрових інструментів є здійснюється через цифровий дискретизації. 61 00:02:55,650 --> 00:03:00,110 Насправді, ми будемо використовувати один з тих, хто в форма звукової бібліотеки шрифту пізніше. 62 00:03:00,110 --> 00:03:02,850 >> Але є також щось, зване цифровий синтез, який вийшов 63 00:03:02,850 --> 00:03:08,650 з кінця 70-х і в 80-х з Yamaha і Джон Chowning в Стенфорді 64 00:03:08,650 --> 00:03:11,990 робить синтез FM або Синтез частоти модуляції, 65 00:03:11,990 --> 00:03:15,100 де ви були носій і сигнал модуляції 66 00:03:15,100 --> 00:03:18,270 як в звукового спектру. 67 00:03:18,270 --> 00:03:22,570 Але те, що ми зосереджені на сьогодні те, що називається MIDI, 68 00:03:22,570 --> 00:03:25,040 і, звичайно, алгоритмічна композиція. 69 00:03:25,040 --> 00:03:30,940 >> Ми не збираємося робити інструменти, але ми замість збираюся зробити музику, 70 00:03:30,940 --> 00:03:33,940 а потім, що буде інтерпретуються деякі інструменти, які 71 00:03:33,940 --> 00:03:38,300 є сумісну до General MIDI Стандарт. 72 00:03:38,300 --> 00:03:40,830 Так що MIDI-? 73 00:03:40,830 --> 00:03:45,550 Я не збираюся занадто глибоко в неї, але це MIDI-протокол передачі даних. 74 00:03:45,550 --> 00:03:49,250 Це свого роду гідом по різні компанії і галузі 75 00:03:49,250 --> 00:03:52,250 для організації звуків або патчі. 76 00:03:52,250 --> 00:03:54,170 Таким чином, ми побачимо, що є стандартний MIDI- 77 00:03:54,170 --> 00:03:57,500 для всіх різних ударних звуки і MIDI рекомендації 78 00:03:57,500 --> 00:04:01,360 для всіх різних типів синтезатор або Різні типи всіх приладу 79 00:04:01,360 --> 00:04:03,650 групи в оркестрі, скажімо. 80 00:04:03,650 --> 00:04:08,916 >> Ви, напевно, знайомі з Від 0 до 127 MIDI повідомлення. 81 00:04:08,916 --> 00:04:12,920 MIDI-сигнал, як правило, один біт, який вказує 82 00:04:12,920 --> 00:04:16,130 це чи дані або пакет положення, і тоді є 83 00:04:16,130 --> 00:04:18,589 сьомій біт сигналу. 84 00:04:18,589 --> 00:04:21,430 І вони можуть контролювати все від обсягу 85 00:04:21,430 --> 00:04:25,330 до дії тиску або на певному ключі 86 00:04:25,330 --> 00:04:29,400 якщо ви виконуєте з MIDI Контролер, а також, звичайно, 87 00:04:29,400 --> 00:04:31,250 Примітки. 88 00:04:31,250 --> 00:04:33,450 І, звичайно, має MIDI- був надзвичайно корисним, 89 00:04:33,450 --> 00:04:37,550 бо це спосіб дроти разом або ромашка ланцюга 90 00:04:37,550 --> 00:04:41,570 купа пристроїв MIDI. 91 00:04:41,570 --> 00:04:44,050 У мене є сім чи вісім тому в моєму домі. 92 00:04:44,050 --> 00:04:46,610 Це стає дійсно складно, але це дуже потужний. 93 00:04:46,610 --> 00:04:47,460 І це насправді старий. 94 00:04:47,460 --> 00:04:51,117 Це від початку 80-х, і це дійсно красиво і мало. 95 00:04:51,117 --> 00:04:51,950 Коннор Харріс: Так. 96 00:04:51,950 --> 00:04:54,230 Всі класичні Nintendo відео ігри, ймовірно, буде 97 00:04:54,230 --> 00:04:56,088 є MIDI файли для музики, наприклад. 98 00:04:56,088 --> 00:04:59,550 99 00:04:59,550 --> 00:05:01,740 >> СТІВЕН KREWSON: Ось Приклад загальної MIDI, 100 00:05:01,740 --> 00:05:06,520 показуючи MIDI в якості свого роду загального протоколу. 101 00:05:06,520 --> 00:05:13,280 І я думаю, що ми можемо думати про Різниця між специфікацією 102 00:05:13,280 --> 00:05:17,830 що там має бути щось на зразок це звучить інструмент і фактичне 103 00:05:17,830 --> 00:05:21,740 Реалізація цих документів звучить в звуковий шрифт або конкретного MIDI 104 00:05:21,740 --> 00:05:25,740 синтезатор як різниця може бути, між typeface--, який говорить, 105 00:05:25,740 --> 00:05:30,350 загалом, це дизайн саме цей спосіб представлення 106 00:05:30,350 --> 00:05:35,907 characters-- і конкретний шрифт який має певний розмір і тембр, 107 00:05:35,907 --> 00:05:37,240 і є реалізація the-- 108 00:05:37,240 --> 00:05:39,156 >> Коннор Харріс: Може бути, краще б порівняння 109 00:05:39,156 --> 00:05:43,430 бути стандарт Unicode says-- це дає номер для кожного символу, і дійсно 110 00:05:43,430 --> 00:05:46,830 кожна мова в світі, або великий набір сценаріїв мови 111 00:05:46,830 --> 00:05:51,310 у світі, а потім ті надана в щось графічної 112 00:05:51,310 --> 00:05:53,710 різними пакетами шрифтів. 113 00:05:53,710 --> 00:05:56,630 І очевидно, що ви можете думати про MIDI-як Unicode звуку. 114 00:05:56,630 --> 00:06:03,250 І це всього лише список of-- великий потік подій і документів і ще багато чого, 115 00:06:03,250 --> 00:06:06,090 і ви повинні мати окремий Програма, як шрифт, 116 00:06:06,090 --> 00:06:08,537 надавати, що в те, що це чути. 117 00:06:08,537 --> 00:06:12,360 118 00:06:12,360 --> 00:06:13,780 >> СТІВЕН KREWSON: Так чому Haskell? 119 00:06:13,780 --> 00:06:19,110 Haskell є функціональне програмування мову, дуже просунуті, 120 00:06:19,110 --> 00:06:22,770 дуже відрізняється від C, дуже відрізняється від PHP. 121 00:06:22,770 --> 00:06:28,120 І ми збираємося, щоб побачити, що є більш простота композиції функцій в Haskell 122 00:06:28,120 --> 00:06:37,640 що дозволить нам вітер через складати або друкуючи, переписування, 123 00:06:37,640 --> 00:06:42,160 щось на зразок Frere Жак, це просто пісня, 124 00:06:42,160 --> 00:06:46,815 є багато деталей в ньому, що автомодельного або повторювати. 125 00:06:46,815 --> 00:06:49,740 126 00:06:49,740 --> 00:06:53,250 Так що це буде кілька мотивація, чому 127 00:06:53,250 --> 00:06:59,400 ми використовуємо Haskell, в якому Функції є громадянами першого класу. 128 00:06:59,400 --> 00:07:01,120 >> І я хотів, щоб розширити це небагато. 129 00:07:01,120 --> 00:07:08,800 Це трохи легко нотами FRERE Жака в Haskell. 130 00:07:08,800 --> 00:07:12,100 Але що, якщо ми хотіли додати партію ударних для нього? 131 00:07:12,100 --> 00:07:17,320 Що робити, якщо ми хотіли, щоб спробувати зробити щось на зразок Роланд 808 або 909 барабана 132 00:07:17,320 --> 00:07:20,970 машина, де ви повинні близько 16 різних кроків? 133 00:07:20,970 --> 00:07:24,590 Як правило, це думав як 16 нот. 134 00:07:24,590 --> 00:07:28,640 І ви можете контролювати глобальне темп, і ви можете вибрати 135 00:07:28,640 --> 00:07:34,620 купа різних частинах ударних бас барабана, бавовна, різні пастки, 136 00:07:34,620 --> 00:07:37,540 відкриті і закриті високі капелюхи на ці роду каналів, 137 00:07:37,540 --> 00:07:41,600 а потім ви можете EQ або налаштувати їх обсяг. 138 00:07:41,600 --> 00:07:45,290 >> І ми побачимо хороший спосіб в Haskell подання на цей крок 139 00:07:45,290 --> 00:07:48,810 секвенсор з усіма різні класні речі в Haskell 140 00:07:48,810 --> 00:07:53,100 ми можемо зробити з генерації списки і списки фільтрації більше, 141 00:07:53,100 --> 00:07:56,060 відображення над списками, відображення функції над списками. 142 00:07:56,060 --> 00:07:59,530 143 00:07:59,530 --> 00:08:00,760 І швидкий вибачення. 144 00:08:00,760 --> 00:08:05,300 Це дуже поверхневий і надмірно швидкий начерк 145 00:08:05,300 --> 00:08:07,620 деякі з аспектів з Haskell і Euterpea, 146 00:08:07,620 --> 00:08:11,760 що предметно-орієнтований вбудовану мову написано 147 00:08:11,760 --> 00:08:14,970 в Haskell для музичних типів. 148 00:08:14,970 --> 00:08:17,350 Тому, будь ласка, перевірити код в Інтернеті. 149 00:08:17,350 --> 00:08:22,404 Запустіть GHCI, що Глазго Haskell Compiler Перекладач. 150 00:08:22,404 --> 00:08:24,320 І я буду робити деякі це в трохи 151 00:08:24,320 --> 00:08:25,880 так що ви можете побачити, як це робиться. 152 00:08:25,880 --> 00:08:31,021 >> І це дає змогу завантажити в с the-- синтаксис товстої кишки, а потім 153 00:08:31,021 --> 00:08:31,520 команда. 154 00:08:31,520 --> 00:08:33,510 Ви можете завантажити в файли. 155 00:08:33,510 --> 00:08:36,840 Ви можете використовувати переглядати ці файли на щоб побачити всі функції, які 156 00:08:36,840 --> 00:08:39,169 існувати в певному модулі. 157 00:08:39,169 --> 00:08:43,850 І те, як ми побачимо, типи і тип класи настільки важливі в Haskell, 158 00:08:43,850 --> 00:08:48,850 так що ви завжди можете check-- особливо якщо ви працюєте в новій DSCL 159 00:08:48,850 --> 00:08:51,600 як це, те, що тип музики? 160 00:08:51,600 --> 00:08:55,114 Я знаю, про шлях числовий типи працюють в Haskell, 161 00:08:55,114 --> 00:08:56,530 але я не знаю багато про музику. 162 00:08:56,530 --> 00:09:01,280 Але ви можете вивчити, як вони визначається за допомогою цього типу або т команду 163 00:09:01,280 --> 00:09:04,577 і потім викликати зокрема функція або об'єкт даних. 164 00:09:04,577 --> 00:09:05,410 Коннор Харріс: Так. 165 00:09:05,410 --> 00:09:09,820 Якщо ви думали, C і Clang був hardass про типи, 166 00:09:09,820 --> 00:09:11,230 Ви поняття не маєте про Haskell. 167 00:09:11,230 --> 00:09:14,230 Гарна річ про Haskell є те, що якщо ви можете отримати код для компіляції 168 00:09:14,230 --> 00:09:16,790 і якщо чеки типу Haskell, це, напевно, правильно, 169 00:09:16,790 --> 00:09:18,675 тому що система тип так строгі. 170 00:09:18,675 --> 00:09:20,090 >> СТІВЕН KREWSON: Так. 171 00:09:20,090 --> 00:09:21,980 Так що я просто хочу, щоб піти through-- і знову, 172 00:09:21,980 --> 00:09:27,160 це не робить його justice-- кілька особливості Haskell, що, принаймні, 173 00:09:27,160 --> 00:09:31,780 його creators-- і він був створений в кінці 1980-х групою людей, 174 00:09:31,780 --> 00:09:34,610 комітет 20 people-- вважали важливим. 175 00:09:34,610 --> 00:09:36,850 І перше, що вони перераховані в документі, який 176 00:09:36,850 --> 00:09:41,890 описав генезис Haskell протягом перших 20 років або близько того 177 00:09:41,890 --> 00:09:43,390 було те, що був ледачий. 178 00:09:43,390 --> 00:09:44,990 Отже, що ж це означає? 179 00:09:44,990 --> 00:09:49,860 >> Ну, це значить, коли у нас є якийсь вирази, ми повинні оцінити його. 180 00:09:49,860 --> 00:09:54,390 І Haskell робить це у виклику по необхідності так чи нестрогим чином. 181 00:09:54,390 --> 00:09:57,250 Тобто, якщо у нас є купа складові нашого вирази, 182 00:09:57,250 --> 00:10:00,660 ми намагаємося, щоб затримати оцінку з тих подкомпоненте 183 00:10:00,660 --> 00:10:05,300 до абсолютного минулого minute-- що поки ми не їх дійсно потрібно. 184 00:10:05,300 --> 00:10:08,480 >> Таким чином, це означає: що дійсно здорово, особливо 185 00:10:08,480 --> 00:10:13,200 якщо ми думаємо про абстракції музичного покроковий секвенсор. 186 00:10:13,200 --> 00:10:16,740 Ви включите його, і ви починаєте працює крок sequence-- 187 00:10:16,740 --> 00:10:20,010 якщо ви коли-небудь працював з барабаном machine--, і він просто йде назавжди. 188 00:10:20,010 --> 00:10:24,650 Тому було б дуже добре, якщо ми може емулювати, що в Haskell. 189 00:10:24,650 --> 00:10:31,040 І ми можемо зробити це з нескінченним значення, зокрема нескінченних списків. 190 00:10:31,040 --> 00:10:35,860 Це дуже легко введіть нескінченний список в Haskell. 191 00:10:35,860 --> 00:10:39,230 Ви могли б просто використовувати синтаксис вниз тут, де ви бачите з 1 по 3, 192 00:10:39,230 --> 00:10:42,440 зняти 3 1 точка точка, і що це нескінченний список 193 00:10:42,440 --> 00:10:46,960 всіх натуральних чисел продовження від того, наскільки ви можете собі уявити. 194 00:10:46,960 --> 00:10:49,925 >> Я хочу, щоб ввести Концепція складок відразу. 195 00:10:49,925 --> 00:10:51,800 І знову, мета це не семінар 196 00:10:51,800 --> 00:10:55,770 щоб дізнатися про складок в Haskell або вищі функції порядку. 197 00:10:55,770 --> 00:10:59,640 Але я просто хочу, щоб ввести його в дати точну почуття, як дивно 198 00:10:59,640 --> 00:11:03,700 Haskell і як потужний це. 199 00:11:03,700 --> 00:11:08,000 І, зокрема, ми збираємося be-- коли ми робимо наші різні частини барабана, 200 00:11:08,000 --> 00:11:12,790 ми збираємося бути маніпулювання списками число, складаючи їх один на одного. 201 00:11:12,790 --> 00:11:17,290 І щоб зробити це, ми будемо бути з використанням карт і складки. 202 00:11:17,290 --> 00:11:21,770 >> Там це право асоціативний раз, що це одне право 203 00:11:21,770 --> 00:11:26,990 here-- 1 мінус кількість, 2 мінус кількість, 3 мінус 0. 204 00:11:26,990 --> 00:11:29,170 І синтаксис для раз, ви даєте раз 205 00:11:29,170 --> 00:11:34,680 базове значення і потім operation-- У цьому випадку додавання чи віднімання. 206 00:11:34,680 --> 00:11:36,280 Я показав обидва випадки. 207 00:11:36,280 --> 00:11:41,760 А тут ще, що акумулятор накопичується протягом усього списку, 208 00:11:41,760 --> 00:11:46,330 застосування цього оператора плюс або мінус, а потім накопичувати його. 209 00:11:46,330 --> 00:11:52,680 Так що це буде the--, якщо він був викликаний з кратним г плюс 0, починаючи з 0, 210 00:11:52,680 --> 00:11:54,720 ми тоді підвести всі числа в цьому списку. 211 00:11:54,720 --> 00:11:57,134 І це список від 1 до 3. 212 00:11:57,134 --> 00:12:00,050 Коннор Харріс: Так, говорячи іншими спосіб, раз г приймає три аргументи. 213 00:12:00,050 --> 00:12:02,540 Там функція, яка Сам приймає два аргументи, 214 00:12:02,540 --> 00:12:05,400 тобто значення стартер, і є список значень. 215 00:12:05,400 --> 00:12:08,570 І те, що ви робите, це ви берете стартер значення, перше значення, 216 00:12:08,570 --> 00:12:09,850 покласти їх у функцію. 217 00:12:09,850 --> 00:12:11,607 Що ви вийти, Візьміть це, канал, який 218 00:12:11,607 --> 00:12:13,940 у функції від Друге значення, що ви отримуєте з, 219 00:12:13,940 --> 00:12:16,690 прийняти, що враховувати їх у Функція третій значення. 220 00:12:16,690 --> 00:12:18,740 І потім, якщо ви йдете вниз Весь цей список таким чином, 221 00:12:18,740 --> 00:12:22,970 Ви збираєтеся отримати в кінцевому підсумку деякі сингулярне це 222 00:12:22,970 --> 00:12:25,720 того ж типу, що ви почали з того самого типу 223 00:12:25,720 --> 00:12:29,147 як речі в списку, а потім це повернення результат кратного R. 224 00:12:29,147 --> 00:12:31,980 СТІВЕН KREWSON: Таким чином, зокрема, це вищі функції порядку, 225 00:12:31,980 --> 00:12:34,460 тому що вони беруть інший Функція в якості одного з аргументів. 226 00:12:34,460 --> 00:12:34,770 >> Коннор Харріс: Так. 227 00:12:34,770 --> 00:12:37,820 Якщо ви використовували деякі інші languages-- Я знаю, R, [нерозбірливо] 228 00:12:37,820 --> 00:12:41,510 мова має це, називається Reduce. 229 00:12:41,510 --> 00:12:45,460 Ви могли б мати аналогічні функції на інших мовах, просто називається 230 00:12:45,460 --> 00:12:48,160 різні речі. 231 00:12:48,160 --> 00:12:50,680 >> СТІВЕН KREWSON: І те, що приємно про кратним R 232 00:12:50,680 --> 00:12:53,880 в даному випадку є те, що складка R може працювати з нескінченними списками. 233 00:12:53,880 --> 00:12:59,490 Так що в цьому дні, в цьому P5 генерує ноти, 234 00:12:59,490 --> 00:13:03,120 включені в покроковий секвенсор для деякі ударних, п'ятий барабан частина, 235 00:13:03,120 --> 00:13:05,480 і, можливо, це Конга барабан або щось. 236 00:13:05,480 --> 00:13:09,719 І це навмисно тупий спосіб написання цього 237 00:13:09,719 --> 00:13:11,510 але це весело, тому що він демонструє багато 238 00:13:11,510 --> 00:13:14,460 речей, про Haskell і Euterpea. 239 00:13:14,460 --> 00:13:20,650 >> Так складаються R цього colon-- товстої кишки тільки оператор, який штовхає речі 240 00:13:20,650 --> 00:13:25,700 разом на list-- закликав порожній Список, який знаходиться всього в порожні дужки. 241 00:13:25,700 --> 00:13:28,250 І я дзвоню, що на цій нескінченній списку. 242 00:13:28,250 --> 00:13:31,570 Це насправді два списки підсумовуються тут. 243 00:13:31,570 --> 00:13:37,150 Список 1 кома 6 точка Точка 1, 6, 11, 16. 244 00:13:37,150 --> 00:13:39,750 Так Haskell-- всього кілька символів, ви 245 00:13:39,750 --> 00:13:42,420 може генерувати цільні Послідовність чисел 246 00:13:42,420 --> 00:13:46,240 що п'ять чисел один від одного розтягування на в нескінченність. 247 00:13:46,240 --> 00:13:49,860 І я до того, що випереджати це коротше трохи list-- 248 00:13:49,860 --> 00:13:54,370 3, 8, 21-- щоб показати вам, як ви можете об'єднати списки. 249 00:13:54,370 --> 00:13:55,790 >> І потім, я склав на собі. 250 00:13:55,790 --> 00:14:01,510 І це закінчується просто бути свого роду операція ідентичності, але це нескінченно. 251 00:14:01,510 --> 00:14:06,070 І раз R може це зробити, тому що це ліниво оцінює, як в описаному вище. 252 00:14:06,070 --> 00:14:10,582 Якщо у нас є 1 і 2 і 3, ми можемо просто дужки від усієї інше. 253 00:14:10,582 --> 00:14:12,290 Це не буде працювати для мінус або плюс, але це 254 00:14:12,290 --> 00:14:17,760 буде працювати на цій товстої кишки операція ідентичності в списку. 255 00:14:17,760 --> 00:14:24,620 >> Так як ми практично використовувати, що, якщо ми є нескінченно довгий список речей? 256 00:14:24,620 --> 00:14:26,500 Ну, Haskell забезпечує багато functions-- 257 00:14:26,500 --> 00:14:29,450 і виглядають більш в ці в самостійно time-- як приймає 258 00:14:29,450 --> 00:14:32,200 в якому говориться, гаразд, ми генерації цю нескінченний список, 259 00:14:32,200 --> 00:14:35,950 але ми тільки збираємося прийняти деякі Кількість його і в цьому case-- 260 00:14:35,950 --> 00:14:38,410 ми побачимо це пізніше в наш драм-машина code-- 261 00:14:38,410 --> 00:14:43,740 ГМ просто якийсь глобальних змінна для числа кроків 262 00:14:43,740 --> 00:14:44,610 в секвенсор. 263 00:14:44,610 --> 00:14:47,630 На машинах з рулонної в Я показав вам, що це, як правило, 16, 264 00:14:47,630 --> 00:14:51,475 але я реалізував його з 32. 265 00:14:51,475 --> 00:14:54,470 Це дійсно не має значення. 266 00:14:54,470 --> 00:15:00,230 >> Haskell також чисто, тому вона має сильне статична типізація, що Коннор згадував. 267 00:15:00,230 --> 00:15:03,220 Так функції Математична в sense-- 268 00:15:03,220 --> 00:15:06,600 вони більш математичне що вони гарантовано 269 00:15:06,600 --> 00:15:11,530 не доступний або змінити будь-яку змінна або виконати вхід або вихід. 270 00:15:11,530 --> 00:15:14,420 Так що, якщо у вас є функція, це детермінованим. 271 00:15:14,420 --> 00:15:17,400 Він завжди буде повернутися в той же Значення в змозі програми 272 00:15:17,400 --> 00:15:19,310 або залишаються незмінними. 273 00:15:19,310 --> 00:15:22,940 Є, звичайно, винятки монадичну на це, але це виходить за рамки нашої. 274 00:15:22,940 --> 00:15:23,900 >> Коннор Харріс: Так. 275 00:15:23,900 --> 00:15:26,946 Що це означає, однак, є кілька важливих [нерозбірливо] 276 00:15:26,946 --> 00:15:27,820 Наслідки цього. 277 00:15:27,820 --> 00:15:30,940 Одним з них є, що це дуже легко распараллелить програми на Haskell. 278 00:15:30,940 --> 00:15:32,773 Тому що, якщо у вас є, сказати, що функції 279 00:15:32,773 --> 00:15:36,064 повинен працювати на мільйон значень, якщо Ви знаєте, що функція завжди буде 280 00:15:36,064 --> 00:15:39,280 видавати і те ж значення, якщо Ви годуєте на певному value-- 281 00:15:39,280 --> 00:15:43,055 якщо ви [нерозбірливо] е 1, е з 2, то F 3 або F whatnot-- з 1 282 00:15:43,055 --> 00:15:45,180 не збирається виписувати у файл або зробити щось 283 00:15:45,180 --> 00:15:46,850 що буде змінювати значення f2. 284 00:15:46,850 --> 00:15:50,220 Ви можете просто розділити цю функцію до мільйон різних машин або мільйон 285 00:15:50,220 --> 00:15:54,720 різні теми або що, отримати всі відповіді назад, 286 00:15:54,720 --> 00:15:56,900 отримати всі повертаються значення назад, а потім це все. 287 00:15:56,900 --> 00:15:59,780 Так дуже легко распараллелить речі. 288 00:15:59,780 --> 00:16:03,140 >> Недоліком є ​​те, що вхід і вихід, особливо 289 00:16:03,140 --> 00:16:05,720 вписуються в систему типу в дуже складних відносинах. 290 00:16:05,720 --> 00:16:09,010 Ми не будемо вдаватися в це прямо зараз, але я Рекомендую вам поглянути на деякі ресурси 291 00:16:09,010 --> 00:16:11,175 в Інтернеті, якщо ви хочете дізнатися про це. 292 00:16:11,175 --> 00:16:13,960 293 00:16:13,960 --> 00:16:16,550 >> СТІВЕН KREWSON: Так введіть classes-- і це 294 00:16:16,550 --> 00:16:21,610 was-- класи типів були винайдені, щоб вирішити 295 00:16:21,610 --> 00:16:24,160 проблема перевантаження операторів. 296 00:16:24,160 --> 00:16:27,590 Таким чином, ми хотіли, щоб рівність між різними типами речей. 297 00:16:27,590 --> 00:16:31,040 Звичайно, ми могли б подумати of-- рівність між числовими типами 298 00:16:31,040 --> 00:16:34,720 дуже легко думати про це, але те, що про рівність між списками? 299 00:16:34,720 --> 00:16:37,610 Що про рівність між деревовидні структури даних нога? 300 00:16:37,610 --> 00:16:43,130 І все це можливо в Haskell з класів типу. 301 00:16:43,130 --> 00:16:48,000 >> Так що, якщо ви визначаєте якийсь type-- даних і ось, це музичні майданчики. 302 00:16:48,000 --> 00:16:50,960 Ми нарешті в якійсь комп'ютерної музики. 303 00:16:50,960 --> 00:16:57,420 Отже, ми маємо С, дієз, і так далі, і так далі. 304 00:16:57,420 --> 00:17:01,080 Вони належать до зв'язці різні класи типу. 305 00:17:01,080 --> 00:17:03,510 EQ-- вони належать до класу типу еквалайзера. 306 00:17:03,510 --> 00:17:06,780 Це означає, що вони підтримують Операції рівності. 307 00:17:06,780 --> 00:17:12,650 Таким чином, ви можете оцінити, наскільки одна послідовність музичних примітивів 308 00:17:12,650 --> 00:17:15,400 такий же, як інший. 309 00:17:15,400 --> 00:17:17,280 >> Вони належать до порядковому класу. 310 00:17:17,280 --> 00:17:19,479 Це означає, що є впорядкування до них. 311 00:17:19,479 --> 00:17:27,670 D приходить після С.-дієз приходить після C, а також. 312 00:17:27,670 --> 00:17:29,840 Вони належать до класу показати, що означає, що вони можуть 313 00:17:29,840 --> 00:17:33,000 бути надруковані на консоль або термінал. 314 00:17:33,000 --> 00:17:36,090 Вони належать до клас перерахував, що 315 00:17:36,090 --> 00:17:39,770 означає, що навіть при тому, ці персонажі, 316 00:17:39,770 --> 00:17:45,340 в їх основі лежить числовий уявлення, починаючи з 0 317 00:17:45,340 --> 00:17:48,960 і збирається покинути через проте багато речей тут, 20 або близько того, 318 00:17:48,960 --> 00:17:51,770 або 30, або 40, може бути. 319 00:17:51,770 --> 00:17:54,259 >> Коннор Харріс: А коли у нас є тип даних 320 00:17:54,259 --> 00:17:57,050 що derives-- з цього ключового слова "deriving--" певний тип класу, 321 00:17:57,050 --> 00:18:01,160 це означає, що компілятор буде намагатися побудувати щось автоматично. 322 00:18:01,160 --> 00:18:05,120 Так, може бути, ви хочете, щоб визначити якість по-різному. 323 00:18:05,120 --> 00:18:09,450 Ви хочете, щоб визначити дієз рівним ре-бемоль, наприклад. 324 00:18:09,450 --> 00:18:11,560 При такій конструкції тут, я не думаю, що дієз 325 00:18:11,560 --> 00:18:14,940 і ре-бемоль будуть рівні, тому що компілятор автоматично 326 00:18:14,940 --> 00:18:19,670 кажуть кожен інший можливе значення відрізняється від будь-якої іншої. 327 00:18:19,670 --> 00:18:22,930 >> Таким чином, можна перевизначити Реалізації за замовчуванням 328 00:18:22,930 --> 00:18:25,730 з цих типів класів. 329 00:18:25,730 --> 00:18:28,640 Знову ж таки, подивіться на посилання, якщо Ви хочете, щоб дізнатися про це. 330 00:18:28,640 --> 00:18:31,767 331 00:18:31,767 --> 00:18:33,600 СТІВЕН KREWSON: І тут, насправді, це буду 332 00:18:33,600 --> 00:18:36,930 бути корисним, коли ми код пізніше. 333 00:18:36,930 --> 00:18:42,150 Ми бачимо, деякі з операторів інфіксной для послідовного з'єднання 334 00:18:42,150 --> 00:18:46,570 паралельної композицією, і так вперед, ці плюси і рівні знаки 335 00:18:46,570 --> 00:18:48,620 в оточенні двоєточиямі. 336 00:18:48,620 --> 00:18:53,330 Це означає, що ми можемо грати ці різні музичні примітиви один за іншим. 337 00:18:53,330 --> 00:18:54,590 Це послідовна композиція. 338 00:18:54,590 --> 00:18:57,170 >> Або ми можемо грати їх у паралельно в той же час. 339 00:18:57,170 --> 00:19:05,100 Так що я можу мати музичну цінність, і тоді це дорівнює і двокрапки, 340 00:19:05,100 --> 00:19:09,669 інфіксной оператора паралельної композиції, і грати їх як свого роду акордом. 341 00:19:09,669 --> 00:19:11,460 І ми збираємося використовувати це, коли ми об'єднуємо 342 00:19:11,460 --> 00:19:15,080 наш ударних з нашим трохи Frere Жак пісня 343 00:19:15,080 --> 00:19:19,460 грати в ці дві послідовності музичні цінності, в той же час. 344 00:19:19,460 --> 00:19:24,520 345 00:19:24,520 --> 00:19:29,250 >> Каррінг is-- Каррі було в минулому найменування Haskell Curry, який 346 00:19:29,250 --> 00:19:31,850 зображення Haskell названий на честь. 347 00:19:31,850 --> 00:19:34,330 І це дозволяє нам приємно елегантність, коли ми 348 00:19:34,330 --> 00:19:36,880 пишу всі ці різні функції або фільтри, які ми 349 00:19:36,880 --> 00:19:39,330 буде відображення на наші списки. 350 00:19:39,330 --> 00:19:42,810 Функція двох arguments-- е х і y-- 351 00:19:42,810 --> 00:19:46,630 може бути представлена ​​у вигляді е х застосовуватися у. 352 00:19:46,630 --> 00:19:49,800 Так що це функція один аргумент, який повертає 353 00:19:49,800 --> 00:19:51,240 інша функція одного аргументу. 354 00:19:51,240 --> 00:19:56,962 Таким чином, це означає, що ми можете підключити Функція F х над списком значень у. 355 00:19:56,962 --> 00:19:58,920 Коннор Харріс: Хочете Наведемо приклад цього? 356 00:19:58,920 --> 00:19:59,836 СТІВЕН KREWSON: Так. 357 00:19:59,836 --> 00:20:05,390 У мене є приклад прямо тут від деякі з речей, які ми будемо писати. 358 00:20:05,390 --> 00:20:10,500 Так повторити 2-- добре, повторити відбудеться 359 00:20:10,500 --> 00:20:13,040 одне значення, яке, скільки раз повторити те, 360 00:20:13,040 --> 00:20:16,690 а потім він буде приймати value-- як правило, список або щось. 361 00:20:16,690 --> 00:20:23,450 Так от, ми відображення повторити 2 над іншому списку. 362 00:20:23,450 --> 00:20:27,440 >> Так що, якщо ми мапі повторити 2, якщо ми повторити 2 застосовуються 363 00:20:27,440 --> 00:20:31,890 на перший елемент цього list-- і ці списки музичної phrases-- 364 00:20:31,890 --> 00:20:37,650 буде виробляти два "ви sleeping--" так ти спиш, спиш. 365 00:20:37,650 --> 00:20:40,040 Так що тепер у нас є два. 366 00:20:40,040 --> 00:20:42,570 Але репліку займає два Аргументи, а тому, що ми 367 00:20:42,570 --> 00:20:47,100 вичинки, а потім відображення, ми можемо уявити копіювальника 2 368 00:20:47,100 --> 00:20:52,310 як ніби вони були повернуті в залежності від одним argument-- просто тиражування в два рази. 369 00:20:52,310 --> 00:20:57,010 А потім ми застосовуємо, що кожному елемент в цьому списку фраз. 370 00:20:57,010 --> 00:21:01,900 >> І CONCAT є Haskell робота для вирівнювання список. 371 00:21:01,900 --> 00:21:04,400 Тому повторної 2 волі скласти список списків. 372 00:21:04,400 --> 00:21:06,660 І це це проміжна форма тут. 373 00:21:06,660 --> 00:21:10,365 І так, то ми можемо Concat або згладити, що двічі. 374 00:21:10,365 --> 00:21:12,240 Коннор Харріс: Більш простий Приклад карірованія 375 00:21:12,240 --> 00:21:15,323 якщо ви хочете представити like-- е це просто Функція множення, який приймає два 376 00:21:15,323 --> 00:21:16,840 Аргументи і повертає їх продукт. 377 00:21:16,840 --> 00:21:19,320 Так що, якщо у вас є F 4, 5, це 20. 378 00:21:19,320 --> 00:21:22,670 Але ви можете думати про це як also-- у вас є функція F 4 379 00:21:22,670 --> 00:21:25,560 який приймає аргумент і повертає чотири рази в цьому argument-- тільки 380 00:21:25,560 --> 00:21:27,870 часткове застосування яких тільки один аргумент 4. 381 00:21:27,870 --> 00:21:31,182 І якщо ви годуєте е з 4 5, що дасть вам 20. 382 00:21:31,182 --> 00:21:32,890 І це простіше, Приклад вичинки. 383 00:21:32,890 --> 00:21:34,473 Це, як правило, один з них підручників. 384 00:21:34,473 --> 00:21:38,860 385 00:21:38,860 --> 00:21:42,110 >> СТІВЕН KREWSON: Лямбда вирази або анонімні функції 386 00:21:42,110 --> 00:21:47,330 ще одна ознака Haskell. 387 00:21:47,330 --> 00:21:51,242 Так що, якщо ми повинні зробити на швидку руку маленька функція повторної життя, 388 00:21:51,242 --> 00:21:52,950 але сказати, що це не стандартна бібліотека, 389 00:21:52,950 --> 00:21:56,150 ми можемо використовувати синтаксис схожий на наступний. 390 00:21:56,150 --> 00:21:58,730 І ми будемо над цим вітер. 391 00:21:58,730 --> 00:22:02,160 Одна річ, ви побачите багато в барабан машини ми дзвінків 392 00:22:02,160 --> 00:22:05,790 в те, що називається фільтр, який, як і колись, 393 00:22:05,790 --> 00:22:08,185 це відображення функції за списком, але це 394 00:22:08,185 --> 00:22:10,260 відображення булевої функції. 395 00:22:10,260 --> 00:22:13,390 >> Таким чином, ми маємо тут приклад в А анонімно 396 00:22:13,390 --> 00:22:19,150 визначається булева функція, що просто бере пару значень. 397 00:22:19,150 --> 00:22:22,990 Це, строго кажучи анонімна функція. 398 00:22:22,990 --> 00:22:25,850 Але це визначення з що синтаксис для стислості, 399 00:22:25,850 --> 00:22:28,007 і це тільки бере х модуль N-- 400 00:22:28,007 --> 00:22:28,840 Коннор Харріс: Так. 401 00:22:28,840 --> 00:22:31,330 Так е є функцією два аргументи п р і 402 00:22:31,330 --> 00:22:35,440 що повертає функцію, яка сама функція одного аргументу, а саме х. 403 00:22:35,440 --> 00:22:38,815 404 00:22:38,815 --> 00:22:40,690 СТІВЕН KREWSON: Я вищевказані оператори інфіксной. 405 00:22:40,690 --> 00:22:42,642 Які оператори інфіксной? 406 00:22:42,642 --> 00:22:45,710 Ну, оператори інфіксной є нормальний спосіб ми представляємо операцій, 407 00:22:45,710 --> 00:22:49,910 кажуть, в mathematics-- 2 плюс 2 замість оператора плюс 408 00:22:49,910 --> 00:22:51,202 а потім два аргументи 2 і 2. 409 00:22:51,202 --> 00:22:53,701 Коннор Харріс: Це називається зворотної польської нотації, яка є 410 00:22:53,701 --> 00:22:55,330 термін, який я сумніваюся, що кожен з вас знають. 411 00:22:55,330 --> 00:22:56,288 >> СТІВЕН KREWSON: Вірно. 412 00:22:56,288 --> 00:22:58,290 Зворотний польський чи префікс позначення. 413 00:22:58,290 --> 00:23:01,412 Але Haskell вирішив використовувати оператори інфіксной. 414 00:23:01,412 --> 00:23:03,120 Так ось деякі з користувальницькі ті, які 415 00:23:03,120 --> 00:23:07,770 визначаються для Euterpea DSCL в Haskell. 416 00:23:07,770 --> 00:23:10,730 Так що це було послідовна композиція. 417 00:23:10,730 --> 00:23:16,340 Це було паралельно композиції, і це був усічення паралельної композиції. 418 00:23:16,340 --> 00:23:18,710 І ми повинні, що з нашою драм-машини, 419 00:23:18,710 --> 00:23:22,640 бо ми будемо використовувати останній оператор в цій маленькій кортежу там 420 00:23:22,640 --> 00:23:26,330 грати драм-машину разом з нашою Frere Жака пісні. 421 00:23:26,330 --> 00:23:28,650 І наша машина барабанного буде нескінченним. 422 00:23:28,650 --> 00:23:30,920 Це просто грає вічно. 423 00:23:30,920 --> 00:23:32,692 Але пісня Frere Жак немає. 424 00:23:32,692 --> 00:23:33,510 Це не так довго. 425 00:23:33,510 --> 00:23:36,610 Це тільки декілька барів. 426 00:23:36,610 --> 00:23:43,030 Таким чином, ми повинні зупинити машину, як барабан тільки коротше музичний значення приходить 427 00:23:43,030 --> 00:23:43,700 до кінця. 428 00:23:43,700 --> 00:23:46,980 І, що оператор інфіксальний супер корисно з цим. 429 00:23:46,980 --> 00:23:50,090 >> І інфіксной позначення, як це частково добре, 430 00:23:50,090 --> 00:23:57,095 тому що у вас є функції, як цитата, яка дає цілочисельне ділення 431 00:23:57,095 --> 00:24:01,010 х щось else-- вибачте, що має бути, і б. 432 00:24:01,010 --> 00:24:04,740 Ви могли б написати його в якості цитатою Ь. 433 00:24:04,740 --> 00:24:09,670 Так що якщо ви put-- елемент Інший приклад. 434 00:24:09,670 --> 00:24:14,730 х елемент деякого списку, якщо ви поклали він в зворотні лапки, ви можете використовувати його. 435 00:24:14,730 --> 00:24:20,400 Навіть якщо це не символ як плюс або мінус або часу, 436 00:24:20,400 --> 00:24:24,630 Ви можете використовувати ім'я функції, як, що в зворотні лапки 437 00:24:24,630 --> 00:24:27,045 а інфіксной оператора, який є досить прохолодно. 438 00:24:27,045 --> 00:24:29,670 Коннор Харріс: Знову ж таки, це Все просто синтаксичний цукор, насправді. 439 00:24:29,670 --> 00:24:32,310 Це не впливає на ядро ​​мови. 440 00:24:32,310 --> 00:24:37,440 >> СТІВЕН KREWSON: Отже, ми бачимо тут для Остання фраза нашого Frere Жака пісні, 441 00:24:37,440 --> 00:24:45,740 Я зіграв кілька маленьких акорди або третини, використовуючи паралельний склад 442 00:24:45,740 --> 00:24:46,240 оператором. 443 00:24:46,240 --> 00:24:50,680 444 00:24:50,680 --> 00:24:54,950 Це ще один спосіб сказати деякі що ми тільки що говорили. 445 00:24:54,950 --> 00:24:59,986 Таким чином, ви можете підключити функції одного аргументу за списки. 446 00:24:59,986 --> 00:25:02,860 Коннор Харріс: Знову, посилання для Haskell-- вступних підручників 447 00:25:02,860 --> 00:25:04,680 будуть мати все це в ньому. 448 00:25:04,680 --> 00:25:07,790 >> СТІВЕН KREWSON: Так от досить Ключовим напрямком в покроковий секвенсор 449 00:25:07,790 --> 00:25:12,820 ми поглянемо на використанні список розуміння. 450 00:25:12,820 --> 00:25:17,810 І ми бачимо, що тут елемент в оператора фіксованого в зворотні лапки. 451 00:25:17,810 --> 00:25:23,030 Таким чином, якщо х є елементом списку х років, то ми будемо називати себе функції Проц. 452 00:25:23,030 --> 00:25:25,100 Так PERC це просто функція перкусії. 453 00:25:25,100 --> 00:25:30,200 Це займає деякий значення р, що це частина обмеженої множини всіх 454 00:25:30,200 --> 00:25:35,310 різні звуки ударних що ми бачили в попередньому слайді, 455 00:25:35,310 --> 00:25:38,840 і потім вона дає, що Тривалість четвертний ноти. 456 00:25:38,840 --> 00:25:43,190 Інакше це дає йому QNR і QNR просто на чверть тони відпочинок. 457 00:25:43,190 --> 00:25:44,970 >> Так що це щось будувати хороший. 458 00:25:44,970 --> 00:25:52,110 У нас є список елементів, і ми будемо цикл з якоїсь список з одного 459 00:25:52,110 --> 00:25:54,540 в максимальне значення нашої покроковий секвенсор. 460 00:25:54,540 --> 00:25:58,290 І коли ми зокрема, я в що список від одного до максимального значення, 461 00:25:58,290 --> 00:26:02,970 якщо я є членом цього Набір створений в цій функції, 462 00:26:02,970 --> 00:26:06,040 Ну, тоді ми перетворюємо його в ударних ноти. 463 00:26:06,040 --> 00:26:10,960 В іншому випадку, ми просто граємо відпочити, що Тобто, ми просто мовчати. 464 00:26:10,960 --> 00:26:16,050 І ми бачимо, що в тут цей список синтаксис розуміння, 465 00:26:16,050 --> 00:26:20,030 х населений це Список побудований один 466 00:26:20,030 --> 00:26:22,462 в глобальній розміру секвенсор. 467 00:26:22,462 --> 00:26:23,295 Коннор Харріс: Так. 468 00:26:23,295 --> 00:26:26,340 Основний синтаксис для спискові є 469 00:26:26,340 --> 00:26:30,810 кронштейн, вартість залучення деякі змінні, бар, 470 00:26:30,810 --> 00:26:34,260 Можливі значення змінних самі закритий кронштейн. 471 00:26:34,260 --> 00:26:38,545 І якщо ви зробили набір будівельника позначення в який-небудь клас математики, 472 00:26:38,545 --> 00:26:45,999 Ви, можливо, встановити такі 2n що п в і н г в. 473 00:26:45,999 --> 00:26:48,290 Схожі thing-- цього запису призначається, щоб бути навідним 474 00:26:48,290 --> 00:26:49,630 цієї математичної нотації. 475 00:26:49,630 --> 00:26:51,880 СТІВЕН KREWSON: І ви можете застосувати кілька предикатів 476 00:26:51,880 --> 00:26:56,250 і кілька фільтрів в списку розуміння, що дуже приємно. 477 00:26:56,250 --> 00:27:01,800 Алгебраїчна types-- ми не затримуватиме довго тут. 478 00:27:01,800 --> 00:27:04,840 Там не дуже гарна ідея в Haskell або хороший, очевидно, поняття 479 00:27:04,840 --> 00:27:10,720 про те, як прийняти, скажімо, за замовчуванням параметр функції або щось. 480 00:27:10,720 --> 00:27:13,370 У Python, це досить легко. 481 00:27:13,370 --> 00:27:18,460 Ви можете просто сказати, дорівнює по декларація функції, 482 00:27:18,460 --> 00:27:21,420 значення за замовчуванням в коли жодна не поставляється. 483 00:27:21,420 --> 00:27:27,010 >> У Haskell, ви могли б, можливо, використовувати, може бути, може бути, введіть, 484 00:27:27,010 --> 00:27:32,190 який не приймає ні нічого або значення типу просто. 485 00:27:32,190 --> 00:27:38,630 Так ми використовуємо це в драм-машини щоб нам дати додатковий обсяг 486 00:27:38,630 --> 00:27:40,730 Параметри для кожної з барабанних деталей. 487 00:27:40,730 --> 00:27:46,160 488 00:27:46,160 --> 00:27:54,680 Так що дає нам спосіб мати еквалайзер або обсяг на певному каналі. 489 00:27:54,680 --> 00:27:56,440 >> Коннор Харріс: У інші приклади в Haskell, 490 00:27:56,440 --> 00:28:00,450 Ви можете побачити, може бути, для Функції, які можуть вийти з ладу. 491 00:28:00,450 --> 00:28:03,470 Це є загальним. 492 00:28:03,470 --> 00:28:07,010 >> СТІВЕН KREWSON: І ви можете поставити свого роду повідомлення про помилку за замовчуванням. 493 00:28:07,010 --> 00:28:11,020 І це особливо зручно, коли ви робите I / O в Haskell. 494 00:28:11,020 --> 00:28:12,044 Це може бути трюки. 495 00:28:12,044 --> 00:28:13,960 Коннор Харріс: Або для Аналогічний приклад, думаю, 496 00:28:13,960 --> 00:28:17,460 функції, що припускає поділ параметра, які можуть бути 0. 497 00:28:17,460 --> 00:28:20,020 І, що функція може повернутися, може бути, що завгодно. 498 00:28:20,020 --> 00:28:22,802 Так що, якщо немає поділу на 0, він повернеться тільки завгодно. 499 00:28:22,802 --> 00:28:25,010 А якщо є поділ на 0, то не буде нічого повертати 500 00:28:25,010 --> 00:28:26,910 як спосіб сигналізації про помилку. 501 00:28:26,910 --> 00:28:30,330 Тому що одним з наслідків Дуже жорстка типізація в Haskell 502 00:28:30,330 --> 00:28:34,100 є те, що немає real-- Винятком є ​​ніяково, в основному, 503 00:28:34,100 --> 00:28:36,160 обробка помилок незручно. 504 00:28:36,160 --> 00:28:39,440 І це одна дуже поширений спосіб зробити це. 505 00:28:39,440 --> 00:28:42,990 >> СТІВЕН KREWSON: Так що тепер ми отримуємо на інший галюциногенний речі 506 00:28:42,990 --> 00:28:49,160 про Haskell, яка є картина відповідності та функціональні визначення. 507 00:28:49,160 --> 00:28:53,390 Я показав вам, минулого слайді Декларація послідовності кроків 508 00:28:53,390 --> 00:28:58,170 функція, яка взяла можливо цінність, потім INT, то список цілих чисел, 509 00:28:58,170 --> 00:29:03,850 потім повертає послідовність музика значення є анотований 510 00:29:03,850 --> 00:29:05,375 і з висоти та об'єму. 511 00:29:05,375 --> 00:29:08,030 512 00:29:08,030 --> 00:29:11,820 >> Так що ті три аргументи може бути зразок відповідає наступним чином. 513 00:29:11,820 --> 00:29:16,660 І ми завжди хочемо бути впевнені, що зробити базовий випадок або виходу випадок перший. 514 00:29:16,660 --> 00:29:19,690 І ці підкреслення може бути просто інтерпретувати 515 00:29:19,690 --> 00:29:22,340 означає будь-яке значення, там. 516 00:29:22,340 --> 00:29:26,580 Так що, якщо ми отримуємо виклик до кроку послідовність з деяким значенням, деяке інше значення, 517 00:29:26,580 --> 00:29:32,210 а потім порожній список, те, що ми хочемо повернутися тільки тиша, відпочинок 0. 518 00:29:32,210 --> 00:29:35,110 >> І замість того, що будучи порожньою список або 0, 519 00:29:35,110 --> 00:29:38,150 це відпочинок 0, тому що ми справу з типом музики, 520 00:29:38,150 --> 00:29:43,230 і порожній список музики тип просто інші не термін. 521 00:29:43,230 --> 00:29:45,680 Це не музика. 522 00:29:45,680 --> 00:29:51,460 І тоді ми бачимо, якщо ми отримаємо крок послідовність з V за обсягом аргумент, 523 00:29:51,460 --> 00:29:57,290 р для обережності інструменту Аргумент, а потім список х років. 524 00:29:57,290 --> 00:29:58,360 >> Потім ми робимо деякі речі. 525 00:29:58,360 --> 00:30:01,290 Зокрема, ми застосовуємо цей список розуміння, 526 00:30:01,290 --> 00:30:05,700 і ми виконати деякі операції на можливо значення 527 00:30:05,700 --> 00:30:10,050 щоб перетворити його в числове значення, так що це може бути потім перераховані і використані 528 00:30:10,050 --> 00:30:12,300 щоб вибрати інструмент. 529 00:30:12,300 --> 00:30:16,730 Знову ж таки, це трохи трохи свідомо неточної 530 00:30:16,730 --> 00:30:20,580 просто щоб показати всі дивні речі ви можете зробити в Haskell, як ви 531 00:30:20,580 --> 00:30:23,170 поглянути на нього на вашому власному часу. 532 00:30:23,170 --> 00:30:23,802 >> Добре. 533 00:30:23,802 --> 00:30:26,010 Так ми, нарешті, дістатися до робити те, що ми мали намір зробити, 534 00:30:26,010 --> 00:30:28,820 що зробити деякі комп'ютерну музику. 535 00:30:28,820 --> 00:30:32,250 Отже, ми збираємося, щоб спробувати зробити пісню Frere Жак. 536 00:30:32,250 --> 00:30:35,220 Таким чином, є, скільки фрази в Frere Жак? 537 00:30:35,220 --> 00:30:38,790 538 00:30:38,790 --> 00:30:39,680 Чотири. 539 00:30:39,680 --> 00:30:40,460 Відмінно. 540 00:30:40,460 --> 00:30:42,490 І, що приємно, що вони все повторюється 541 00:30:42,490 --> 00:30:46,990 те ж саме кількість разів, що в два. 542 00:30:46,990 --> 00:30:50,730 >> Таким чином, ми маємо чотирьох фрази кожен повторюють два рази. 543 00:30:50,730 --> 00:30:53,590 І, зокрема, вони в турі. 544 00:30:53,590 --> 00:30:55,340 І є багато, багато способів для реалізації 545 00:30:55,340 --> 00:30:57,520 круглий, які могли б бути забавно. 546 00:30:57,520 --> 00:31:00,260 Я зробив це в досить простий спосіб тут, 547 00:31:00,260 --> 00:31:05,760 який просто construct-- лінію Функція приймає список музичних цінностей 548 00:31:05,760 --> 00:31:10,390 і перетворює його в послідовному складу шляхом застосування послідовної композиції, що 549 00:31:10,390 --> 00:31:13,000 оператором. 550 00:31:13,000 --> 00:31:19,540 >> І тоді я затримати різні частини роблячи їх починають з рештою. 551 00:31:19,540 --> 00:31:22,770 Так що я почати з рештою двох заходів, а потім інші чотири заходи, 552 00:31:22,770 --> 00:31:26,160 а потім інші шість заходи, а потім круглий 553 00:31:26,160 --> 00:31:32,290 працює, як ми всі знаємо, цю пісню. 554 00:31:32,290 --> 00:31:37,180 Ми бачимо два анотації або модифікації музичних цінностей 555 00:31:37,180 --> 00:31:43,150 , Які містяться в цьому послідовному аранжування музики елементів. 556 00:31:43,150 --> 00:31:44,810 У нас є обсяг надбудови. 557 00:31:44,810 --> 00:31:48,960 Ця функція, щоб коментувати музика з певною обсягу. 558 00:31:48,960 --> 00:31:51,320 Це хороший приклад сигнального поспіль MIDI 559 00:31:51,320 --> 00:31:57,510 від 0 до 127, сьомій біт інформація, яка може бути виконана. 560 00:31:57,510 --> 00:32:00,650 >> І then-- ми бачили його дуже коротко, але загальний MIDI- 561 00:32:00,650 --> 00:32:02,310 Список всіх різних інструментів. 562 00:32:02,310 --> 00:32:04,450 І там не набагато від них. 563 00:32:04,450 --> 00:32:11,230 Якщо ви використовуєте цифровий аудіо робочої станції, як Ableton Live або Pro Tools, 564 00:32:11,230 --> 00:32:17,560 є неймовірно широкий діапазон синтезаторів і VST інструментів. 565 00:32:17,560 --> 00:32:21,510 Але стандарт MIDI тільки має кілька, або кілька десятків. 566 00:32:21,510 --> 00:32:22,799 І деякі з них смішні. 567 00:32:22,799 --> 00:32:25,840 Я думав, що це буде весело, якщо ми грали інструмент інструмент MIDI- 568 00:32:25,840 --> 00:32:30,550 Вертоліт, а потім Наступний спосіб раунду, 569 00:32:30,550 --> 00:32:37,980 ми зробили майданчик синтезатор, а потім це банально провідний меандр синтезатор, 570 00:32:37,980 --> 00:32:44,240 а потім висловити мул, які є трохи нечіткі на мій поганий MIDI 571 00:32:44,240 --> 00:32:46,410 синтезатор, але вони ОК. 572 00:32:46,410 --> 00:32:50,030 >> І тоді ми бачимо, цей Нехай і в синтаксисі з Haskell, 573 00:32:50,030 --> 00:32:54,030 а потім ми граємо всі ці частини разом 574 00:32:54,030 --> 00:32:56,265 з оператором паралельної композиції. 575 00:32:56,265 --> 00:33:00,260 576 00:33:00,260 --> 00:33:02,296 І ми могли б, ймовірно, покажуть деякі з цього. 577 00:33:02,296 --> 00:33:07,674 578 00:33:07,674 --> 00:33:08,340 Ось код. 579 00:33:08,340 --> 00:33:14,960 І ви можете бачити в C, тобто був би багато очищення горла і установка 580 00:33:14,960 --> 00:33:19,760 Код таблиці перед вами може зробити музику, як це. 581 00:33:19,760 --> 00:33:22,080 Або будь-який інший програмування мову, ви, ймовірно, 582 00:33:22,080 --> 00:33:27,210 повинні взаємодіяти з якоюсь бібліотеки або API, і встановити все, 583 00:33:27,210 --> 00:33:28,725 і тоді вам доведеться прибирати. 584 00:33:28,725 --> 00:33:33,810 Але тут, в Haskell, я думаю, що, як тільки ви отримаєте повісити його, неймовірно 585 00:33:33,810 --> 00:33:35,770 читається і дуже виразним. 586 00:33:35,770 --> 00:33:38,930 587 00:33:38,930 --> 00:33:43,240 Так що реалізація з Frere Жак. 588 00:33:43,240 --> 00:33:43,740 Добре. 589 00:33:43,740 --> 00:33:47,557 Тепер ми хочемо, щоб додати ударні, і це трохи брудніше. 590 00:33:47,557 --> 00:33:49,015 Отже, давайте поглянемо на слайдах. 591 00:33:49,015 --> 00:33:56,880 592 00:33:56,880 --> 00:34:00,540 Таким чином, велика ідея, щоб зробити купа списків або їх частин. 593 00:34:00,540 --> 00:34:04,140 На цих машинах Пересувний є були, як правило, може бути, вісім про 594 00:34:04,140 --> 00:34:08,670 10 ритм ударних або частин. 595 00:34:08,670 --> 00:34:10,159 І потім використовувати зв'язку методів. 596 00:34:10,159 --> 00:34:14,889 І ми говорили про these-- допомогою складок, фільтри, лямбда функції, 597 00:34:14,889 --> 00:34:19,429 відображається над списками для генерації значень в деякому діапазоні від 1 до г, г 16, 598 00:34:19,429 --> 00:34:20,699 або 32 кроків у секвенсорі. 599 00:34:20,699 --> 00:34:23,810 600 00:34:23,810 --> 00:34:29,920 >> І потім, якщо є значення в цьому списку як ми біжимо через секвенсор, 601 00:34:29,920 --> 00:34:34,190 проходить через нього знову і більш, виявляється на цій ноті, 602 00:34:34,190 --> 00:34:36,060 і що зразок спрацював. 603 00:34:36,060 --> 00:34:42,810 604 00:34:42,810 --> 00:34:47,110 Ось всі різні дивні способи Я придумав для генерації примітки. 605 00:34:47,110 --> 00:34:48,940 Спробуйте це на свій страх і підлозі суми. 606 00:34:48,940 --> 00:34:50,360 Це звучатиме круто. 607 00:34:50,360 --> 00:34:53,066 608 00:34:53,066 --> 00:34:54,690 Якщо дозволить час, ми будемо проходити через це. 609 00:34:54,690 --> 00:34:59,200 Але зараз, я думаю, ми повинні демо, що у нас є. 610 00:34:59,200 --> 00:35:01,380 Будемо сподіватися, що це йде ОК. 611 00:35:01,380 --> 00:35:02,670 >> Так що це GHCI. 612 00:35:02,670 --> 00:35:06,580 613 00:35:06,580 --> 00:35:09,121 І ми будемо завантажувати файл Я назвав song.lhs, 614 00:35:09,121 --> 00:35:10,620 що файл я тільки що показав вам. 615 00:35:10,620 --> 00:35:11,470 ОК здорово. 616 00:35:11,470 --> 00:35:15,010 Як сказав Коннор раніше, складений, його тип встановлений, 617 00:35:15,010 --> 00:35:18,380 так що я можу дихати набагато легше. 618 00:35:18,380 --> 00:35:20,010 Це не збирається підірвати на мене. 619 00:35:20,010 --> 00:35:22,720 >> Я хочу показати вам щось корисне. 620 00:35:22,720 --> 00:35:25,900 Ви можете бачити, що Модуль завантажений називається 50. 621 00:35:25,900 --> 00:35:28,240 Ви можете переглянути цей модуль. 622 00:35:28,240 --> 00:35:32,092 І це так приємно про doing-- можливо, що 623 00:35:32,092 --> 00:35:34,550 ви робите в Haskell НЕ називається розробка програмного забезпечення, 624 00:35:34,550 --> 00:35:36,980 але ви можете зробити багато забавний матеріал на свій розсуд. 625 00:35:36,980 --> 00:35:42,410 І робочий процес насправді добре, як в порівнянні з багато інших мов, 626 00:35:42,410 --> 00:35:45,872 тому що ви можете побачити в дійсно читаний спосіб, що відбувається. 627 00:35:45,872 --> 00:35:47,830 Таким чином, ми бачимо, що у нас є всі ці фрази, які 628 00:35:47,830 --> 00:35:53,760 списки музичних майданчиках, і тоді ми побудувати ці вгору в щось більше, 629 00:35:53,760 --> 00:35:55,220 яка представляє собою музика пісня. 630 00:35:55,220 --> 00:35:58,450 Це музичний блок. 631 00:35:58,450 --> 00:36:05,545 І тоді ми можемо грати все це з функцією називається грати музику. 632 00:36:05,545 --> 00:36:09,040 Ви можете бачити, що тут. 633 00:36:09,040 --> 00:36:11,310 Який просто грати. 634 00:36:11,310 --> 00:36:15,040 >> Я повинен say-- я не говорити про це знак долара, що скрізь. 635 00:36:15,040 --> 00:36:17,980 Долар знак іншого оператора інфіксной. 636 00:36:17,980 --> 00:36:22,500 Але він має найнижчий пріоритет будь-якого оператора, який ефективно 637 00:36:22,500 --> 00:36:24,960 означає, що всі на Зліва від знака долара 638 00:36:24,960 --> 00:36:28,460 і право на знак долара, ми збираємося, щоб оцінити до нього. 639 00:36:28,460 --> 00:36:31,430 Так що це ніби як другий спосіб додавання дужки. 640 00:36:31,430 --> 00:36:33,980 641 00:36:33,980 --> 00:36:36,220 >> Коннор Харріс: Це в основному композиція функцій. 642 00:36:36,220 --> 00:36:40,026 І це гарантує, що ви не have-- якщо у вас є функції небудь сторону або Інфікси 643 00:36:40,026 --> 00:36:42,900 Оператори по обидві сторони, вони не будуть зв'язати по ньому і дати вам 644 00:36:42,900 --> 00:36:46,030 несподівані результати. 645 00:36:46,030 --> 00:36:49,790 >> СТІВЕН KREWSON: Таким чином, ми can-- використовуючи, що ми можемо назвати. 646 00:36:49,790 --> 00:36:51,415 По-перше, ми будемо грати без барабанів. 647 00:36:51,415 --> 00:37:00,330 648 00:37:00,330 --> 00:37:03,170 Це вертоліт, міді вертоліт. 649 00:37:03,170 --> 00:37:05,495 >> [Грає музика] 650 00:37:05,495 --> 00:37:08,525 651 00:37:08,525 --> 00:37:09,525 Там же меандр. 652 00:37:09,525 --> 00:37:24,520 653 00:37:24,520 --> 00:37:25,490 Голос мул. 654 00:37:25,490 --> 00:37:27,630 І ви дійсно можете йти дикої природи з цим. 655 00:37:27,630 --> 00:37:30,872 Я вибрав досить простий, тому що я знав, я не повинен відкусити 656 00:37:30,872 --> 00:37:31,830 більше, ніж я міг жувати. 657 00:37:31,830 --> 00:37:36,460 Просто тримати його досить просто показати основні ідеї. 658 00:37:36,460 --> 00:37:39,952 Але тоді я був як, ми отримав додати на барабанах на це. 659 00:37:39,952 --> 00:37:41,910 Просто тому, що це трохи непроникною, 660 00:37:41,910 --> 00:37:45,790 і я не використовувати Назва барабанних партій, 661 00:37:45,790 --> 00:37:49,490 Я відображаються them--, тому що вони частина перерахованого класу, 662 00:37:49,490 --> 00:37:51,500 Я відображаються їх цілих чисел. 663 00:37:51,500 --> 00:37:53,120 Одним з них є, як бас-барабана. 664 00:37:53,120 --> 00:37:54,370 Нуль також. 665 00:37:54,370 --> 00:37:56,000 Сім висока капелюх. 666 00:37:56,000 --> 00:38:00,920 І ось тут, де Функції отримати трохи більше випадкових, 667 00:38:00,920 --> 00:38:02,100 це як конго барабани. 668 00:38:02,100 --> 00:38:08,360 >> Так що, якщо ви думаєте, може бути, about-- цікавий спосіб реалізації драм-машину 669 00:38:08,360 --> 00:38:12,830 є використання дуже організовано візерунки на вашій бас-барабана. 670 00:38:12,830 --> 00:38:17,640 Так, наприклад, на фільтрації над Список з усім, що дає назад 671 00:38:17,640 --> 00:38:20,590 1, коли він узяв модуль 04. 672 00:38:20,590 --> 00:38:27,190 Так що я отримати 1, 5, 9, 13, 17-- так що це перший удар кожного такту. 673 00:38:27,190 --> 00:38:32,860 >> І тоді це те ж саме річ перейшла двох кроків. 674 00:38:32,860 --> 00:38:33,850 Так що це незвичайний. 675 00:38:33,850 --> 00:38:37,480 Так що це буде щось на зразок високому капелюсі. 676 00:38:37,480 --> 00:38:39,640 І знову ж, тут, це трохи випадковим, 677 00:38:39,640 --> 00:38:41,080 бо ми робимо Конга барабани. 678 00:38:41,080 --> 00:38:44,180 І у мене є деякі маракаси сюди, теж. 679 00:38:44,180 --> 00:38:50,280 >> Так що я міг подзвонити відтворення драм-машини, але вона буде йти вічно, 680 00:38:50,280 --> 00:38:53,700 і він може почати захоплення до вся пам'ять в моїй системі. 681 00:38:53,700 --> 00:38:57,090 Так що я буду називати цю функцію грати музику, яка, як ми побачимо, 682 00:38:57,090 --> 00:39:02,020 використовувати усічення паралельної композиції грати наш маленький Frere Жак пісню 683 00:39:02,020 --> 00:39:04,200 поряд з цим дивним драм-машини. 684 00:39:04,200 --> 00:39:06,190 Отже, давайте поглянемо. 685 00:39:06,190 --> 00:39:10,920 І, будь ласка, поліпшити мій розташування всіх частин барабана. 686 00:39:10,920 --> 00:39:13,375 Не моя спеціальність, але я було багато веселощів робить його. 687 00:39:13,375 --> 00:39:17,678 688 00:39:17,678 --> 00:39:20,654 >> [Грає музика] 689 00:39:20,654 --> 00:39:52,260 690 00:39:52,260 --> 00:39:56,980 >> Тому, звичайно, це все трохи не так весело, 691 00:39:56,980 --> 00:40:01,100 якщо ми не можемо перетворити його в рахунок, так, може бути, це 692 00:40:01,100 --> 00:40:04,650 може бути витлумачено по виконавцю людини. 693 00:40:04,650 --> 00:40:06,535 Тому я не буду працювати тут. 694 00:40:06,535 --> 00:40:07,910 Я вже згенерували файли. 695 00:40:07,910 --> 00:40:10,280 Ви можете бачити, що є точка LilyPond file-- і це 696 00:40:10,280 --> 00:40:14,500 буде мій Segue до Connor-- і файл MIDI точка, 697 00:40:14,500 --> 00:40:18,610 і крапка у форматі PDF файл, який є що LilyPond, в кінцевому рахунку призвести. 698 00:40:18,610 --> 00:40:23,770 >> Але це ті сценарії, і я буду просто запустити їх з варіантами допомогу. 699 00:40:23,770 --> 00:40:28,090 Якщо ви отримуєте ці та працює з Euterpea, ви можете генерувати MIDI файл. 700 00:40:28,090 --> 00:40:31,160 А потім з MIDI-файлу з цією програмою MIDI-2LY, 701 00:40:31,160 --> 00:40:34,930 Ви можете створити Лілі Ставок файл, а потім ви 702 00:40:34,930 --> 00:40:37,974 може генерувати PDF партитури. 703 00:40:37,974 --> 00:40:39,390 І ми повинні поглянути на це. 704 00:40:39,390 --> 00:40:52,599 705 00:40:52,599 --> 00:40:55,140 Так Коннор, ймовірно, покажуть Ви, як коментувати це краще, 706 00:40:55,140 --> 00:41:02,570 але це, як Жак Frere генерується мною в Euterpea. 707 00:41:02,570 --> 00:41:07,300 Це просто в C. Я повинен зрозумів з того, що зламати це насправді в. 708 00:41:07,300 --> 00:41:11,090 Але це трубопровід для як це робити, з цим. 709 00:41:11,090 --> 00:41:12,950 Давайте більше поговорити про LilyPond. 710 00:41:12,950 --> 00:41:15,780 >> Коннор Харріс: ОК Давайте подивимося. 711 00:41:15,780 --> 00:41:19,480 712 00:41:19,480 --> 00:41:21,419 Хіба ви згадуєте Дізнайтеся у вас Haskell? 713 00:41:21,419 --> 00:41:22,460 СТІВЕН KREWSON: О, так. 714 00:41:22,460 --> 00:41:23,480 Перевірте навчить вас Haskell. 715 00:41:23,480 --> 00:41:24,410 Це в ресурсах. 716 00:41:24,410 --> 00:41:26,830 Ось як я почав навчання, і це здорово. 717 00:41:26,830 --> 00:41:27,580 Чи не тупий навчання. 718 00:41:27,580 --> 00:41:28,829 >> Коннор Харріс: Так що це в Інтернеті. 719 00:41:28,829 --> 00:41:34,760 Таким чином, хлопець на ім'я [нерозбірливо] learnyouahaskell.com, без пробілів. 720 00:41:34,760 --> 00:41:37,065 Граматика хворий. 721 00:41:37,065 --> 00:41:38,690 СТІВЕН KREWSON: Це ілюстрований теж. 722 00:41:38,690 --> 00:41:39,440 Коннор Харріс: Так що LilyPond? 723 00:41:39,440 --> 00:41:42,480 Це декларативне програмування мова музики верстки. 724 00:41:42,480 --> 00:41:45,480 Так declarative-- ви можете думати про такі речі, як HTML, 725 00:41:45,480 --> 00:41:50,900 де ви не saying-- HTML не сказати, як веб-браузери повинні 726 00:41:50,900 --> 00:41:52,180 роблять сторінки крок за кроком. 727 00:41:52,180 --> 00:41:54,096 Це просто кажу, що це це текстовий опис 728 00:41:54,096 --> 00:41:56,100 що ви хочете, щоб сторінка виглядати. 729 00:41:56,100 --> 00:41:59,310 >> І тоді це також програма що компілює цю мову, 730 00:41:59,310 --> 00:42:02,300 або прочитати його після прибуття, а потім фактично робить верстку для вас, 731 00:42:02,300 --> 00:42:05,570 і він випльовує їх прекрасні дивлячись забиває PDF. 732 00:42:05,570 --> 00:42:08,250 Ви також можете отримати формат PNG або щось. 733 00:42:08,250 --> 00:42:10,300 Хороший спосіб думати це за аналогією 734 00:42:10,300 --> 00:42:16,620 є те, що латекс начебто LillyPond, але тільки звичайної верстки. 735 00:42:16,620 --> 00:42:20,360 Таким чином, замість of-- це не WYSIWYG, що ви бачите 736 00:42:20,360 --> 00:42:22,960 Що ви отримуєте, як, скажімо, Фінал є, або Сібеліуса, 737 00:42:22,960 --> 00:42:27,430 або Microsoft Word, де ви можете ввести в режимі реального часу і проекти речі в реальному часі 738 00:42:27,430 --> 00:42:31,340 і побачити зміни миттєво. 739 00:42:31,340 --> 00:42:32,140 >> Це текстовий. 740 00:42:32,140 --> 00:42:35,290 Ви повинні cкомпілювати оцінки, що використовують окрему програму 741 00:42:35,290 --> 00:42:37,090 і вийти PDF-файлів пізніше. 742 00:42:37,090 --> 00:42:43,320 Це трохи менше, зручно для використання, якщо ви 743 00:42:43,320 --> 00:42:46,520 намагаюся написати безпосередньо в рахунок, і ви 744 00:42:46,520 --> 00:42:48,620 намагаються скласти на комп'ютері. 745 00:42:48,620 --> 00:42:50,830 Але є багато переваг для нього. 746 00:42:50,830 --> 00:42:56,110 Один з них, це виглядає набагато краще, бо насправді LillyPond може 747 00:42:56,110 --> 00:42:58,210 взяти час, щоб зробити компонувальних рішень належним чином, 748 00:42:58,210 --> 00:43:02,380 на відміну від Сібеліуса або Finale, які мають зробити зламаних алгоритмів так 749 00:43:02,380 --> 00:43:05,020 що вони можуть відображати речі в режимі реального часу. 750 00:43:05,020 --> 00:43:07,660 >> Так чому LilyPond-- комп'ютерна графіка важко. 751 00:43:07,660 --> 00:43:10,535 Якщо ви робите що-небудь з музикою і ви хочете, щоб написати оцінки, 752 00:43:10,535 --> 00:43:13,900 Ви не хочете, щоб написати з все самі 753 00:43:13,900 --> 00:43:19,040 починаючи з як малювати штаби і як малювати. блокноти 754 00:43:19,040 --> 00:43:21,020 Це дуже важко. Це було зроблено раніше. 755 00:43:21,020 --> 00:43:22,170 Ти в порядку. 756 00:43:22,170 --> 00:43:26,200 >> Якщо ви хочете використовувати Finale або Sibelius, формати файлів для тих речей, 757 00:43:26,200 --> 00:43:30,180 дуже складні, і ви не можете реально використовувати їх програмно. 758 00:43:30,180 --> 00:43:35,020 Ви можете відкрити Сібеліус з Finale і перейдіть в меню Файл, Експорт у PDF самостійно, 759 00:43:35,020 --> 00:43:37,600 але ви не можете дійсно назвати це зі сценарію. 760 00:43:37,600 --> 00:43:40,440 LillyPond, ви можете зателефонувати від цих скриптів. 761 00:43:40,440 --> 00:43:44,397 Ви можете легко перебирати LillyPond латексом. 762 00:43:44,397 --> 00:43:47,230 Я не так багато часу, щоб піти в цих технологій прямо зараз, 763 00:43:47,230 --> 00:43:48,321 але вони існують. 764 00:43:48,321 --> 00:43:50,070 Якщо ви хочете подивитися в книзі LillyPond, 765 00:43:50,070 --> 00:43:53,760 це програма, яка поставляється з Ваш дистрибутив LillyPond, 766 00:43:53,760 --> 00:43:57,030 і це для перебору LillyPond фрагменти в LaTeX 767 00:43:57,030 --> 00:44:00,340 якщо ви хочете зробити щось як великий музикознавство документа 768 00:44:00,340 --> 00:44:02,289 з прикладами, наприклад. 769 00:44:02,289 --> 00:44:04,580 І це хороший навик для життя, якщо ви робите що-небудь 770 00:44:04,580 --> 00:44:05,770 з музикою, а не тільки CS50. 771 00:44:05,770 --> 00:44:09,320 Я використовував LillyPond для всіх з моїх проектів складу 772 00:44:09,320 --> 00:44:11,880 так як я був в основному старший в середній школі. 773 00:44:11,880 --> 00:44:13,455 >> Так ось деякі прості приклади. 774 00:44:13,455 --> 00:44:17,490 775 00:44:17,490 --> 00:44:21,060 Це, в основному представник рівня складності 776 00:44:21,060 --> 00:44:23,481 що більшість людей буде очі вони намагалися 777 00:44:23,481 --> 00:44:24,980 використовувати LilyPond для простих проектів. 778 00:44:24,980 --> 00:44:29,519 Цей перший початок в Хоральна прелюдія Баха. 779 00:44:29,519 --> 00:44:31,810 Це нижня уривок від одного з моїх власних робіт, 780 00:44:31,810 --> 00:44:34,650 і це тільки там, щоб показати ви такі речі, як [нерозбірливо] 781 00:44:34,650 --> 00:44:38,550 покласти кілька рядків у тому ж персонал, як лірична undersetting працює. 782 00:44:38,550 --> 00:44:41,350 783 00:44:41,350 --> 00:44:46,110 Лірика підкладки є річчю, що дуже простий у використанні LilyPond в хоровій музиці. 784 00:44:46,110 --> 00:44:48,814 >> І так, тобто дещо більше складні приклади тут. 785 00:44:48,814 --> 00:44:50,980 Все це робиться в LilyPond і вони можливо. 786 00:44:50,980 --> 00:44:55,280 Це перше витримка від [Нерозбірливо] по [нерозбірливо]. 787 00:44:55,280 --> 00:44:58,860 І це [нерозбірливо] з п'єса для сольного бас 788 00:44:58,860 --> 00:45:03,550 флейта [нерозбірливо], який є longtime-- які 789 00:45:03,550 --> 00:45:07,101 був давній членом музичний відділ тут, я думаю. 790 00:45:07,101 --> 00:45:08,600 Я не впевнений, де він пішов у. 791 00:45:08,600 --> 00:45:12,410 Але він був радником Гарвард Асоціація Композитори протягом тривалого часу. 792 00:45:12,410 --> 00:45:13,530 Чудова людина. 793 00:45:13,530 --> 00:45:16,920 І він пише музику, яка має дуже складний позначення, що LillyPond 794 00:45:16,920 --> 00:45:20,500 тим не менш, може працювати з дуже красиво. 795 00:45:20,500 --> 00:45:26,030 >> Так що просто дати вам відчуття того, що Можливості Ця річ are-- так 796 00:45:26,030 --> 00:45:28,960 нутрощі LillyPond дуже складні. 797 00:45:28,960 --> 00:45:31,060 І ви можете використовувати його для довгий час, у тому числі 798 00:45:31,060 --> 00:45:32,520 для деяких досить складним речі, насправді не 799 00:45:32,520 --> 00:45:34,060 знаючи про них багато. 800 00:45:34,060 --> 00:45:38,720 Але основна ідея в тому, що на низький рівень, атоми LillyPonds 801 00:45:38,720 --> 00:45:39,970 є ноти. 802 00:45:39,970 --> 00:45:42,761 Примітки містять контекстні звані голосу. 803 00:45:42,761 --> 00:45:44,510 Так контексті голосової в основному відповідає 804 00:45:44,510 --> 00:45:47,410 до однієї лінії поліфонії. 805 00:45:47,410 --> 00:45:49,410 І тоді контекст може бути містяться ієрархічно 806 00:45:49,410 --> 00:45:53,590 в більш високих рівнів, що представляють штаби на рахунок 807 00:45:53,590 --> 00:45:56,750 або більш великі угруповання, як фортепіанні штаби або хор штаби, 808 00:45:56,750 --> 00:45:58,990 і потім в кінцевому рахунку цілі контексти оцінка. 809 00:45:58,990 --> 00:46:02,260 І ви можете насправді охоплюють кілька балів у книзі. 810 00:46:02,260 --> 00:46:05,770 >> І кожен контекст має Кількість вкладених граверів. 811 00:46:05,770 --> 00:46:08,340 Якщо ви подивіться через Зміст контексті 812 00:46:08,340 --> 00:46:14,410 і роздрукувати певну символ або певний клас символів, як це необхідно. 813 00:46:14,410 --> 00:46:17,840 Таким чином, щоб кожен контексті голосової, є [нерозбірливо] зауваження 814 00:46:17,840 --> 00:46:24,270 різьбяр, що є в основному функцією або об'єкт, який виписує все відома 815 00:46:24,270 --> 00:46:26,290 голови на правій частині сторінки. 816 00:46:26,290 --> 00:46:29,510 Тоді є ущелина гравер, який виписує ущелини на персонал. 817 00:46:29,510 --> 00:46:31,517 Тоді є метроном Знак гравера, що 818 00:46:31,517 --> 00:46:33,100 виписує метронома знаки в рахунок. 819 00:46:33,100 --> 00:46:36,410 І все це вписується в значній а в ієрархії. 820 00:46:36,410 --> 00:46:39,500 І це дуже, дуже, дуже настроюється, що вам потрібно 821 00:46:39,500 --> 00:46:42,880 якщо ви хочете, щоб отримати такі речі, як, що. 822 00:46:42,880 --> 00:46:45,730 >> Таким чином, всі контексти мають багато різних атрибутів 823 00:46:45,730 --> 00:46:52,410 що ви можете змінити на всі від відстані до різних шрифту 824 00:46:52,410 --> 00:46:54,942 Вибір розмірами речей. 825 00:46:54,942 --> 00:46:56,900 Якщо ви хочете, щоб зробити ще більш складні речі, 826 00:46:56,900 --> 00:46:59,210 є вбудований скриптова мова. 827 00:46:59,210 --> 00:47:01,820 Вони використовують схему, яка це діалект Lisp. 828 00:47:01,820 --> 00:47:04,960 Вони, ймовірно, не значить тобі що-небудь. 829 00:47:04,960 --> 00:47:06,900 Але в принципі, схема другий функціональний 830 00:47:06,900 --> 00:47:09,500 Мова програмування, більш-менш. 831 00:47:09,500 --> 00:47:10,800 >> СТІВЕН KREWSON: Краватка в. 832 00:47:10,800 --> 00:47:12,690 >> Коннор Харріс: Так. 833 00:47:12,690 --> 00:47:15,390 Це хороший краватку-во, я вважаю. 834 00:47:15,390 --> 00:47:20,150 І він використовується в якості мови викладання, насправді, вниз Массачусетс-авеню У Массачусетському технологічному інституті. 835 00:47:20,150 --> 00:47:26,590 І це дуже зручно для LillyPond з різних технічних причин. 836 00:47:26,590 --> 00:47:30,317 >> І тому, якщо ви хочете, щоб просто хитрості, залежні від умовних, 837 00:47:30,317 --> 00:47:32,900 для example-- є певна Стан рахунком, який зустрівся, 838 00:47:32,900 --> 00:47:36,495 внесення змін до макет або whatnot-- то 839 00:47:36,495 --> 00:47:37,620 ці об'єкти є. 840 00:47:37,620 --> 00:47:38,667 Вони складніше. 841 00:47:38,667 --> 00:47:40,250 Так от досить простий приклад коду. 842 00:47:40,250 --> 00:47:43,810 Це п'ять ліній. 843 00:47:43,810 --> 00:47:46,120 В принципі, я визначаю два киї. 844 00:47:46,120 --> 00:47:46,904 Це в 3/4. 845 00:47:46,904 --> 00:47:48,695 Перший склад має додається темп знак, 846 00:47:48,695 --> 00:47:51,110 але це насправді відбувається перейти до всієї рахунок, 847 00:47:51,110 --> 00:47:54,960 бо темп марок знаходяться на рівні рекордів. 848 00:47:54,960 --> 00:47:59,044 Метроном знак гравер прикріплена забити контекст. 849 00:47:59,044 --> 00:48:01,460 Є різні ключі, бо [нерозбірливо] гравера 850 00:48:01,460 --> 00:48:02,710 додається штаби. 851 00:48:02,710 --> 00:48:04,441 Ви дійсно можете зробити, це. 852 00:48:04,441 --> 00:48:06,190 Зразок я написав це насправді в мажор, 853 00:48:06,190 --> 00:48:07,990 але це просто продемонструвати ви можете мати 854 00:48:07,990 --> 00:48:09,570 різні ключі в різних штабах. 855 00:48:09,570 --> 00:48:15,710 І основний синтаксис ви пишете зверніть увагу, імена з E, F, G, який. 856 00:48:15,710 --> 00:48:18,910 Якщо ви хочете зробити випадковості, Ви суфікс чи ES. 857 00:48:18,910 --> 00:48:22,640 Це від голландців музикознавчих конвенцій. 858 00:48:22,640 --> 00:48:28,290 >> І зробити октави стрибки, ви повинні використовувати це відміток, кому або апостроф. 859 00:48:28,290 --> 00:48:30,580 Відносна просто означає, все, що ви є замітка, 860 00:48:30,580 --> 00:48:34,080 він буде автоматично plaec в октави ближче до попереднім. 861 00:48:34,080 --> 00:48:37,624 І якщо ви хочете, щоб стрибати більше, ніж fifth-- сказати п'ятий чи more-- 862 00:48:37,624 --> 00:48:39,165 то ви повинні використовувати [нерозбірливо]. 863 00:48:39,165 --> 00:48:42,580 Але в іншому випадку, ви не повинні вказати октаву кожній ноті. 864 00:48:42,580 --> 00:48:46,130 >> І відносно С, прем'єр і С, ви просто вказати середній C 865 00:48:46,130 --> 00:48:48,630 і підстава С, особливо перші ноти. 866 00:48:48,630 --> 00:48:55,020 Тоді у вас є ці штаби, які організовують ці два голоси або зразки музики, 867 00:48:55,020 --> 00:48:56,730 і у вас є рахунок. 868 00:48:56,730 --> 00:48:58,440 І, що виглядає це. 869 00:48:58,440 --> 00:49:01,780 870 00:49:01,780 --> 00:49:05,380 >> Якщо ви хочете, щоб зайняти час, щоб скопіювати цей зразок LillyPond 871 00:49:05,380 --> 00:49:07,530 Код на попередньому ковзати вниз тут, і ви 872 00:49:07,530 --> 00:49:09,030 можете написати його на LillyPond самостійно. 873 00:49:09,030 --> 00:49:11,280 Я знаю, що у нас є щось що виглядає багато, як це. 874 00:49:11,280 --> 00:49:17,236 875 00:49:17,236 --> 00:49:19,610 Так що ще одна технологія називається Музика XML підтримується 876 00:49:19,610 --> 00:49:22,030 зовсім інші люди. 877 00:49:22,030 --> 00:49:28,150 XML є текстові дані structure-- я не повинні говорити дані structure-- сказати 878 00:49:28,150 --> 00:49:29,580 Метафора карту роду. 879 00:49:29,580 --> 00:49:33,800 І він призначений для зберігання ієрархічні дані дуже добре. 880 00:49:33,800 --> 00:49:37,050 HTML, наприклад, являє собою тип XML. 881 00:49:37,050 --> 00:49:41,090 І ви можете сказати XML, тому що вони була все кутові дужки і кут 882 00:49:41,090 --> 00:49:44,700 Кронштейн Слеш що поля показані дані. 883 00:49:44,700 --> 00:49:47,390 >> Я не є код Приклад з музики XML. 884 00:49:47,390 --> 00:49:50,450 Ви можете знайти його самостійно. 885 00:49:50,450 --> 00:49:53,735 В основному, причиною ви можете використовувати XML в якості проміжного етапу 886 00:49:53,735 --> 00:49:55,980 це, в першу чергу, це формат обміну 887 00:49:55,980 --> 00:50:02,301 для в основному every-- я не повинен сказати кожен, але багато різних рахунком 888 00:50:02,301 --> 00:50:02,800 письменники. 889 00:50:02,800 --> 00:50:04,966 Так що, якщо ви пишете в музиці XML, можна не тільки LillyPond 890 00:50:04,966 --> 00:50:08,080 читати за допомогою цього допоміжна Програма називається Music XML для LY, 891 00:50:08,080 --> 00:50:11,360 але також може читати Фінал це, Сібеліус можете прочитати його. 892 00:50:11,360 --> 00:50:14,770 Залежно від того, як внутрішній об'єкт Ієрархія працює для представлення музику, 893 00:50:14,770 --> 00:50:18,820 це може бути простіше виписати Муз XML, ніж у LillyPond 894 00:50:18,820 --> 00:50:22,410 і покладатися тільки на музичному XML щоб LY зробити перетворення. 895 00:50:22,410 --> 00:50:24,282 >> Я не думаю, що [нерозбірливо] має Music XML. 896 00:50:24,282 --> 00:50:25,490 СТІВЕН KREWSON: Це не так. 897 00:50:25,490 --> 00:50:26,340 Хтось працює над цим, хоча. 898 00:50:26,340 --> 00:50:27,090 >> Коннор Харріс: ОК. 899 00:50:27,090 --> 00:50:31,040 Euterpea не має Функція виходу Музика XML ще. 900 00:50:31,040 --> 00:50:35,340 Якщо ви хочете остаточне уявлення проекту, може бути, увійти в контакт з хлопцями 901 00:50:35,340 --> 00:50:38,620 що Стівен знає, і вони могли б використовувати вашу допомогу. 902 00:50:38,620 --> 00:50:40,992 >> СТІВЕН KREWSON: Я хотів би, що. 903 00:50:40,992 --> 00:50:43,450 Коннор Харріс: Крім того, в основному, кожні мови програмування 904 00:50:43,450 --> 00:50:46,610 що варто його солі вже має бібліотеку XML, 905 00:50:46,610 --> 00:50:51,030 так що ви можете конвертувати все всередині вашої музики в якийсь об'єкт 906 00:50:51,030 --> 00:50:54,120 що бібліотека XML можете написати що потребують менше 907 00:50:54,120 --> 00:50:57,470 зміни у внутрішню структуру за якою музика об'єкти, 908 00:50:57,470 --> 00:51:00,310 хочу написати, ніж писати його прямо в LillyPond б. 909 00:51:00,310 --> 00:51:04,380 Потім просто роздрукувати його з XML з XML-бібліотеки російською мовою, 910 00:51:04,380 --> 00:51:07,260 який буде гарантувати, що це синтаксично правильно, і все, 911 00:51:07,260 --> 00:51:08,720 а потім перетворити його в LillyPond. 912 00:51:08,720 --> 00:51:11,060 Таким чином, технології ви можете шукати в, якщо ви робите щось 913 00:51:11,060 --> 00:51:11,650 подобається це. 914 00:51:11,650 --> 00:51:14,490 915 00:51:14,490 --> 00:51:16,370 >> [Нерозбірливо], інший auxilarry технології. 916 00:51:16,370 --> 00:51:21,700 Це в основному Tech Роботи або Технологія Студія LillyPond. 917 00:51:21,700 --> 00:51:25,380 Так він пропонує допомогу з Синтаксис, з шаблонами 918 00:51:25,380 --> 00:51:28,770 для різних загального комбінації приладів. 919 00:51:28,770 --> 00:51:32,780 Це дозволяє розділити екран перегляду так Ви можете мати свій код в одному вікні 920 00:51:32,780 --> 00:51:37,350 і PDF в іншому вікні і натисніть на місцях в PDF 921 00:51:37,350 --> 00:51:40,650 щоб перейти до відповідної плями у вихідному коді. 922 00:51:40,650 --> 00:51:45,330 Це більш корисно, якщо ви насправді написання LillyPond файли самостійно 923 00:51:45,330 --> 00:51:47,400 ніж якщо б ви генерації їх програмно. 924 00:51:47,400 --> 00:51:51,230 Але знову ж, це то корисно мати. 925 00:51:51,230 --> 00:51:51,970 >> Відмінно. 926 00:51:51,970 --> 00:51:55,860 Ще resources-- я просто пройти через це дуже швидко. 927 00:51:55,860 --> 00:52:01,270 LillyPond manuals-- LillyPond має відмінна документація на своєму сайті. 928 00:52:01,270 --> 00:52:02,270 Вони є підручник. 929 00:52:02,270 --> 00:52:03,478 Вони мають посилання синтаксису. 930 00:52:03,478 --> 00:52:07,010 Вони мають сотні фрагментів для різних дрібних речей 931 00:52:07,010 --> 00:52:09,930 років, можливо, необхідно зробити, щоб продемонструвати різні можливості. 932 00:52:09,930 --> 00:52:12,250 Якщо ви хочете використовувати скриптова мова 933 00:52:12,250 --> 00:52:14,740 або зробити більш обширний настройки, тобто 934 00:52:14,740 --> 00:52:16,730 внутрішні посилання на цьому URL. 935 00:52:16,730 --> 00:52:21,950 Якщо ви хочете використовувати музичний XML, є що URL-адресу, musicxml.com/tutorial. 936 00:52:21,950 --> 00:52:27,960 >> І потім, якщо вам потрібно дізнатися схему тому що ви насправді хочете використовувати 937 00:52:27,960 --> 00:52:30,960 створення скриптів в LillyPond, тобто [нерозбірливо] називається 938 00:52:30,960 --> 00:52:32,918 Структурована Інтерпретація комп'ютерних програм, 939 00:52:32,918 --> 00:52:35,820 який є не тільки другий Найбільше CS підручник ніколи written-- 940 00:52:35,820 --> 00:52:39,770 знайти мене потім, якщо ви хочете знати, що я думаю, найвеличнішим is-- 941 00:52:39,770 --> 00:52:43,580 але це також дуже хороший введення в мову правильною. 942 00:52:43,580 --> 00:52:46,630 Вам не потрібно буде більше, ніж перші кілька розділів. 943 00:52:46,630 --> 00:52:47,827 >> І це все. 944 00:52:47,827 --> 00:52:48,410 Які-небудь питання? 945 00:52:48,410 --> 00:52:54,068 946 00:52:54,068 --> 00:52:57,972 >> СТУДЕНТ: Де я можу скачати Ваш генерується Frere Жак 947 00:52:57,972 --> 00:53:01,050 так що я можу поставити його на айпод? 948 00:53:01,050 --> 00:53:07,574 >> СТІВЕН KREWSON: Ну, ви можете написати до якоїсь файл WAV в Euterpea. 949 00:53:07,574 --> 00:53:08,490 І у вас є код. 950 00:53:08,490 --> 00:53:10,000 Це на GitHub. 951 00:53:10,000 --> 00:53:15,590 Зробіть свої власні варіації Frere Жак з CS50 колективного розуму. 952 00:53:15,590 --> 00:53:17,095 Це було б здорово. 953 00:53:17,095 --> 00:53:18,220 Коннор Харріс: Хто-небудь ще? 954 00:53:18,220 --> 00:53:20,261 СТІВЕН KREWSON: Ми повинні краще бас-барабан, теж. 955 00:53:20,261 --> 00:53:21,935 Це дійсно погано. 956 00:53:21,935 --> 00:53:26,565 >> СТУДЕНТ: Euterpea має не тільки сторона композиції, але signal-- 957 00:53:26,565 --> 00:53:27,440 СТІВЕН KREWSON: Так. 958 00:53:27,440 --> 00:53:30,100 Насправді, робота, яку я зробив у Euterpea, коли я 959 00:53:30,100 --> 00:53:33,450 взяв this-- є аспірантуру в Єльському університеті, що 960 00:53:33,450 --> 00:53:35,900 використовує it-- був на синтез звуку. 961 00:53:35,900 --> 00:53:39,810 Так що це дійсно хороший спосіб за допомогою стрілок 962 00:53:39,810 --> 00:53:46,150 і деякі позначення ми бачили складаючи разом функції сигналу. 963 00:53:46,150 --> 00:53:50,610 Зокрема, бас для більшості з них всього лише простий синусоїди. 964 00:53:50,610 --> 00:53:54,240 Але якщо ви почнете складати тих, в дивних програмних способів, 965 00:53:54,240 --> 00:54:00,010 Ви можете зійти з розуму звук ефекти, такі як дивні каскадів. 966 00:54:00,010 --> 00:54:04,640 Ви можете створити дуже твердий звучить з великим модуляції. 967 00:54:04,640 --> 00:54:07,730 >> Я зробив проект по гранульованих Синтез, який 968 00:54:07,730 --> 00:54:12,290 десь між FM та відбору проб. 969 00:54:12,290 --> 00:54:15,230 Ви берете дуже мало, маленькі зразки, а потім 970 00:54:15,230 --> 00:54:20,440 об'єднати їх з якоюсь модулятор і створити багатий звук. 971 00:54:20,440 --> 00:54:24,900 Ми також зробили фізичне моделювання, так намагаюся думати про фізику 972 00:54:24,900 --> 00:54:29,410 і Психоакустика щось на зразок труба, і думати про те, як 973 00:54:29,410 --> 00:54:32,320 звук відскакуючи дзвін труби 974 00:54:32,320 --> 00:54:35,200 і акустика номер і моделювання 975 00:54:35,200 --> 00:54:40,195 що з основними генераторів. 976 00:54:40,195 --> 00:54:47,690 977 00:54:47,690 --> 00:54:48,940 Коннор Харріс: спасибі. 978 00:54:48,940 --> 00:54:50,140 Дякую, що прийшли. 979 00:54:50,140 --> 00:54:52,400 І я завжди готовий на питання по email-- 980 00:54:52,400 --> 00:54:55,020 connorharris@college.harvard.edu. 981 00:54:55,020 --> 00:54:57,020 >> СТІВЕН KREWSON: Так. stephen.krewson@yale.edu. 982 00:54:57,020 --> 00:54:58,810 983 00:54:58,810 --> 00:55:00,360 Прохолодний. 984 00:55:00,360 --> 00:55:01,667