Конар Харыс: Прывітанне. Я Конар Харыс. Я CS50 Каліфорнія ў Гарвардзе. Стыў KREWSON: Я Стывен Krewson. Я TF для CS50 ў Ельскім універсітэце. Конар Харыс: І мы будзем казаць аб некаторых тэхналогіях, якія вы, магчыма, хочаце выкарыстоўваць, калі вы зацікаўлены у рабіць канчатковы праект або сапраўды што-небудзь з музыкай. Мы збіраемся канцэнтравацца на першым а Мова праграмавання Haskell называецца. Гэта функцыянальны мова, таму парадыгма вельмі адрозніваецца ад C або PHP або іншыя імператыўныя мовы што вы выкарыстоўвалі ўжо, і асабліва ў бібліятэцы, напісанай у Haskell называецца Euterpea, якія могуць дапамагчы людзям з напісання музыкі функцыянальна, у асноўным. А Стэфан, вы пройдзеце праз вялікі прыклад гэтага. Пасля гэтага, я пазнаёмлю вас з тое, што называецца LillyPond, што гэта тэхналогія вёрсткі музыкі. Гэта накшталт як LaTeX для музыкі, калі любы з вас выкарыстоўвалі латекс для матэматычных класаў або іншыя Р набор класаў ці што там у вас. І таму я дам вам, зноў жа, некаторыя простыя прыклады, што і паказаць вам у агульным Кірунак некаторых лепшых рэсурсаў. Стыў KREWSON: У Акрамя таго, мы думалі, гэта было б выдатна, каб наладзіць трохі намёкаў да трубаправода паміж Euterpea генерыруюцца MIDI файлы у LillyPond, таму мы прадстаўляем некаторыя інструкцыі па сцэнарыяў зрабіць гэта, якія з'яўляюцца забяспечаныя LillyPond проста трымаць яго адкрытым зыходным кодам і атрымаць трубаправод збіраецца. Конар Харыс: Зноў жа, варта падкрэсліць ,, гэтыя дзве тэхналогіі, вы не павінны выкарыстоўваць іх разам. Яны не прызначаныя для працы разам, хоць яны вельмі прыгожа. Стыў KREWSON: Дакладна. І цалкам бясплатна. Конар Харыс: Так пацверджання, толькі што прачытаў, што. Стыў KREWSON: Належным чынам адзначыць. Дзякуючы гэтым людзей. Гэта я затрымлівацца на толькі на імгненне. Працэс ўстаноўкі гэта крыху больш складана. Мы чытання мяне на GitHub што вы можаце зірнуць на. Проста напішыце мне, калі ў вас ёсць якія-небудзь пытанні. Але мы будзем запускаць гэты ў здагадцы, што гэта працуе для ўсіх. Конар Харыс: А калі вы не можаце атрымаць LillyPond ня працаваць, не страшна. Там няма жывой зборнік, што будзе ўдзельнічаць, па меншай меры, з майго боку. Стыў KREWSON: Haskell і LillyPond павінны абодва маюць ўсталёўнікаў. Euterpea загружаецца як Пакет, гэтак далей, і гэтак далей. Такім чынам, мы гаворым пра кампутарнай музыкі. І гэта ўсяго толькі вельмі выгляд 50000 футаў. Там у некалькі розных аспектаў гэтага. І гэта з'яўляецца грубым і збіраецца хаваць некаторыя падрабязнасці. Але мы маглі б прыдумаць што-небудзь як алгарытмічнага складу, з выкарыстаннем алгарытмаў, з дапамогай кода, каб генераваць некаторы тып можа быць of-- самоподобным паслядоўнасць нот, ці магчыма нот пад нейкі абмежаванні. І тады тыя, можа быць выкананы або інтэрпрэтаваць з аналагавых інструментаў або што-небудзь падобнае. Але склад быў зроблена алгарытмічных. Але, вядома, можа быць, вобласць кампутарная музыка або лічбавы музычны мы больш знаёмыя з лічбавай сінтэз гуку або лічбавай дыскрэтызацыі і лічбавая запіс. Шмат лічбавых інструментаў з'яўляюцца ажыццяўляецца праз лічбавай дыскрэтызацыі. На самай справе, мы будзем выкарыстоўваць адзін з тых, хто ў форма гукавой бібліятэкі шрыфта пазней. Але ёсць таксама нешта, званае лічбавай сінтэз, які выйшаў з канца 70-х і ў 80-х з Yamaha і Джон Chowning ў Стэнфардзе робіць сінтэз FM або Сінтэз частоты мадуляцыі, дзе вы былі носьбіт і сігнал мадуляцыі як у гукавога спектру. Але тое, што мы засяроджаны на сёння тое, што называецца MIDI, і, вядома, алгарытмічная кампазіцыя. Мы не збіраемся рабіць інструменты, але мы замест збіраюся зрабіць музыку, а затым, што будзе інтэрпрэтуюцца некаторыя інструменты, якія з'яўляюцца сумяшчальную да General MIDI Стандарт. Так што MIDI-? Я не збіраюся занадта глыбока ў яе, але гэта MIDI-пратакол перадачы дадзеных. Гэта свайго роду гідам па розныя кампаніі і галіны для арганізацыі гукаў або патчы. Такім чынам, мы ўбачым, што ёсць стандартны MIDI- для ўсіх розных ударных гукі і MIDI рэкамендацыі для ўсіх розных тыпаў сінтэзатар або Розныя тыпы ўсіх прыбора групы ў аркестры, скажам. Вы, напэўна, знаёмыя з Ад 0 да 127 MIDI паведамленні. MIDI-сігнал, як правіла, адзін біт, які паказвае ці гэта дадзеныя або пакет становішча, і тады ёсць сем біт сігналу. І яны могуць кантраляваць усё, што ад аб'ёму да дзеяння ціску ці на пэўным ключы калі вы выконваеце з MIDI Кантролер, а таксама, вядома, Нататкі. І, вядома, мае MIDI- быў надзвычай карысным, таму што гэта спосаб драты разам ці рамонак ланцуга куча прылад MIDI. У мяне ёсць сем ці восем таму ў маім доме. Гэта становіцца сапраўды складана, але гэта вельмі магутны. І гэта на самай справе стары. Гэта ад пачатку 80-х, і гэта сапраўды прыгожа і мала. Конар Харыс: Так. Ўсе класічныя Nintendo відэа гульні, верагодна, будзе ёсць MIDI файлы для музыкі, напрыклад. Стыў KREWSON: Вось Прыклад агульнай MIDI, паказваючы MIDI ў якасці свайго роду агульнай пратаколу. І я думаю, што мы можам думаць аб Розніца паміж спецыфікацыяй што там павінна быць нешта накшталт гэта гучыць інструмент і фактычнае Рэалізацыя гэтых дакументаў гучыць у гукавой шрыфт або канкрэтнага MIDI сінтэзатар як розніца можа быць, паміж typeface--, які кажа, увогуле, гэта дызайн менавіта гэты спосаб прадстаўлення characters-- і канкрэтны шрыфт які мае пэўны памер і тэмбр, і ёсць рэалізацыя the-- Конар Харыс: Можа быць, лепш бы параўнанне быць стандарт Unicode says-- гэта дае нумар для кожнага знака, і сапраўды кожны мова ў свеце, або шырокі набор сцэнарыяў мовы у свеце, а затым тыя аказана ў нешта графічнай рознымі пакетамі шрыфтоў. І відавочна, што вы можаце думаць аб MIDI-як Unicode гуку. І гэта ўсяго толькі спіс of-- вялікі паток падзей і дакументаў і яшчэ шмат чаго, і вы павінны мець асобны Праграма, як шрыфт, аказваць, што ў тое, што гэта чуваць. Стыў KREWSON: Дык чаму Haskell? Haskell з'яўляецца функцыянальнае праграмаванне мова, вельмі прасунутыя, вельмі адрозніваецца ад C, вельмі адрозніваецца ад PHP. І мы збіраемся, каб убачыць, што ёсць больш прастата кампазіцыі функцый у Haskell што дазволіць нам вецер праз складаць або друкуючы, перапісванне, нешта накшталт Frere Жак, гэта проста песня, ёсць шмат дэталяў у ім, што Автомодельная або паўтараць. Так што гэта будзе некалькі матывацыя, чаму мы выкарыстоўваем Haskell, у якім Функцыі з'яўляюцца грамадзянамі першага класа. І я хацеў, каб пашырыць гэта няшмат. Гэта крыху лёгка нотамі FRERE Жака ў Haskell. Але што, калі мы хацелі дадаць партыю ўдарных для яго? Што рабіць, калі мы хацелі, каб паспрабаваць зрабіць нешта накшталт Роланд 808 або 909 барабана машына, дзе вы павінны каля 16 розных крокаў? Як правіла, гэта думаў як 16 нот. І вы можаце кантраляваць глабальнае тэмп, і вы можаце выбраць куча розных частках ўдарных бас барабана, бавоўна, розныя пасткі, адкрытыя і закрытыя высокія шапкі на гэтыя роду каналаў, а затым вы можаце EQ або наладзіць іх аб'ём. І мы ўбачым добры спосаб у Haskell прадстаўлення на гэты крок секвенсор з усімі розныя класныя рэчы ў Haskell мы можам зрабіць з генерацыі спісы і спісы фільтрацыі больш, адлюстраванне над спісамі, адлюстраванне функцыі над спісамі. І хуткі прабачэнні. Гэта вельмі павярхоўны і празмерна хуткі накід некаторыя з аспектаў з Haskell і Euterpea, што прадметна-арыентаваны убудаваны мова напісана у Haskell для музычных тыпаў. Таму, калі ласка, праверыць код у Інтэрнэце. Запусціце GHCI, што Глазга Haskell Compiler Перакладчык. І я буду рабіць некаторыя гэта ў трохі так што вы можаце ўбачыць, як гэта робіцца. І гэта дазваляе загрузіць у з the-- сінтаксіс тоўстай кішкі, а затым каманда. Вы можаце загрузіць у файлы. Вы можаце выкарыстоўваць праглядаць гэтыя файлы на каб убачыць усе функцыі, якія існаваць у пэўным модулі. І тое, як мы ўбачым, тыпы і тып класы настолькі важныя ў Haskell, так што вы заўсёды можаце check-- асабліва калі вы працуеце ў новай DSCL як гэта, тое, што тып музыкі? Я ведаю, пра шлях лікавы тыпы працуюць у Haskell, але я не ведаю шмат пра музыку. Але вы можаце вывучыць, як яны вызначаецца з дапамогай гэтага тыпу або т каманду і затым выклікаць у прыватнасці функцыя або аб'ект дадзеных. Конар Харыс: Так. Калі вы думалі, C і Clang быў hardass пра тыпы, Вы паняцця не маеце пра Haskell. Добрая рэч аб Haskell з'яўляецца тое, што калі вы можаце атрымаць код для кампіляцыі і калі чэкі тыпу Haskell, гэта, напэўна, правільна, таму што сістэма тып так строгія. Стыў KREWSON: Так. Так што я проста хачу, каб пайсці through-- і зноў, гэта не робіць яго justice-- некалькі асаблівасці Haskell, што, па меншай меры, яго creators-- і ён быў створаны у канцы 1980-х групай людзей, камітэт 20 people-- лічылі важным. І першае, што яны пералічаныя ў дакуменце, які апісаў генезіс Haskell на працягу першых 20 гадоў або каля таго было тое, што быў гультаяваты. Такім чынам, што ж гэта значыць? Ну, гэта значыць, калі ў нас ёсць нейкі выразы, мы павінны ацаніць яго. І Haskell робіць гэта ў выкліку па неабходнасці так ці нястрогі чынам. Гэта значыць, калі ў нас ёсць куча складнікі нашага выразы, мы стараемся, каб затрымаць ацэнку з тых подкомпонентами да абсалютнага мінулага minute-- што пакуль мы не іх сапраўды трэба. Такім чынам, гэта азначае: што сапраўды выдатна, асабліва калі мы думаем пра абстракцыі музычнага пакрокавы секвенсор. Вы ўключыце яго, і вы пачынаеце працуе крок sequence-- калі вы калі-небудзь працаваў з барабанам machine--, і ён проста ідзе назаўжды. Таму было б вельмі добра, калі мы можа эмуляваць, што ў Haskell. І мы можам зрабіць гэта з бясконцым значэння, у прыватнасці бясконцых спісаў. Гэта вельмі лёгка увядзіце бясконцы спіс у Haskell. Вы маглі б проста выкарыстоўваць сінтаксіс ўніз тут, дзе вы бачыце з 1 па 3, выдаліць сакавіка 1 кропка кропка, і што гэта бясконцы спіс ўсіх натуральных лікаў падаўжэння ад таго, наколькі вы можаце сабе ўявіць. Я хачу, каб увесці Канцэпцыя зморшчын адразу. І зноў, мэта гэта не семінар каб даведацца пра зморшчын у Haskell ці вышэйшыя функцыі парадку. Але я проста хачу, каб увесці яго ў даць дакладную пачуццё, як дзіўна Haskell і як магутны гэта. І ў прыватнасці, мы збіраемся be-- калі мы робім нашы розныя часткі барабана, мы збіраемся быць маніпулявання спісамі лік, складаючы іх адзін на аднаго. І каб зрабіць гэта, мы будзем быць з выкарыстаннем карт і зморшчыны. Там гэта права асацыятыўны раз, што гэта адно права here-- 1 мінус колькасць, 2 мінус колькасць, 3 мінус 0. І сінтаксіс для раз, вы даяце раз базавую значэнне і затым operation-- У гэтым выпадку складанне або адніманне. Я паказаў абодва выпадку. А тут яшчэ, што акумулятар назапашваецца на працягу ўсяго спісу, прымянення гэтага аператара плюс ці мінус, а затым назапашваць яго. Так што гэта будзе the--, калі ён быў выкліканы з кратным г плюс 0, пачынаючы з 0, мы тады падвесці ўсё лікі ў гэтым спісе. І гэта спіс ад 1 да 3. Конар Харыс: Так, кажучы іншымі спосаб, раз г прымае тры аргументу. Там функцыя, якая Сам прымае два аргументу, то ёсць значэнне стартар, і ёсць спіс значэнняў. І тое, што вы робіце, гэта вы бераце стартар значэнне, першае значэнне, пакласці іх у функцыю. Што вы выйсці, Вазьміце гэта, канал, які у функцыі ад Другое значэнне, што вы атрымліваеце з, прыняць, што ўлічваць іх у Функцыя трэцяга значэння. І потым, калі вы ідзяце ўніз Увесь гэты спіс такім чынам, Вы збіраецеся атрымаць у канчатковым выніку некаторыя сінгулярнасць гэта таго ж тыпу, што вы пачалі з і таго ж тыпу як рэчы ў спісе, а затым гэта вяртанне вынік кратнага R. Стыў KREWSON: Такім чынам, у прыватнасці, гэта вышэйшыя функцыі парадку, таму што яны бяруць іншы Функцыя ў якасці аднаго з аргументаў. Конар Харыс: Так. Калі вы выкарыстоўвалі некаторыя іншыя languages-- Я ведаю, R, [неразборліва] мова мае гэта, называецца Reduce. Вы маглі б мець аналагічныя функцыі на іншых мовах, проста называецца розныя рэчы. Стыў KREWSON: І тое, што прыемна пра кратным R у дадзеным выпадку з'яўляецца тое, што зморшчына R можа працаваць з бясконцымі спісамі. Так што ў гэтым дні, у гэтым P5 генеруе ноты, ўключаны ў пакрокавы секвенсор для некаторыя ўдарных, пяты барабан частка, і, магчыма, гэта конга барабан ці нешта. І гэта наўмысна тупы спосаб напісання гэтага але гэта весела, таму што ён дэманструе шмат рэчаў, аб Haskell і Euterpea. Так складваюцца R гэтага colon-- тоўстай кішкі толькі аператар, які штурхае рэчы разам на list-- заклікаў пусты Спіс, які знаходзіцца ўсяго ў пустыя дужкі. І я тэлефаную, што на гэтай бясконцай спісу. Гэта на самай справе два спісу сумуюцца тут. Спіс 1 коска 6 кропка Кропка 1, 6, 11, 16. Так Haskell-- за ўсё некалькі знакаў, вы можа генераваць суцэльныя Паслядоўнасць лікаў што пяць лікаў адзін ад аднаго расцяжэння на ў бясконцасць. І я да таго, што папярэднічаць гэта карацей трохі list-- 3, 8, 21-- каб паказаць вам, як вы можаце аб'яднаць спісы. І потым, я склаў на сабе. І гэта сканчаецца проста быць свайго роду аперацыя ідэнтычнасці, але гэта бясконца. І раз R можа гэта зрабіць, таму што гэта ляніва ацэньвае, як у апісаным вышэй. Калі ў нас ёсць 1 і 2 і 3, мы можам проста дужкі ад усёй астатняе. Гэта не будзе працаваць для мінус ці плюс, але гэта будзе працаваць на гэтай тоўстай кішкі аперацыя ідэнтычнасці ў спісе. Так як мы практычна выкарыстоўваць, што, калі мы ёсць бясконца доўгі спіс рэчаў? Ну, Haskell забяспечвае шмат functions-- і выглядаюць больш у гэтыя ў самастойна time-- як прымае у якім гаворыцца, добра, мы генерацыі гэтую бясконцы спіс, але мы толькі збіраемся прыняць некаторыя Колькасць яго і ў гэтым case-- мы ўбачым гэта пазней у наш драм-машына code-- ГМ проста нейкі глабальных пераменная для ліку крокаў у секвенсор. На машынах з рулоннай ў Я паказаў вам, што гэта, як правіла, 16, але я рэалізаваў яго з 32. Гэта сапраўды не мае значэння. Haskell таксама чыста, таму яна мае моцнае статычная тыпізацыя, што Конар згадваў. Так функцыі Матэматычная ў sense-- яны больш матэматычнае што яны гарантавана ня доступ або змяніць любую пераменная або выканаць уваход або выхад. Так што, калі ў вас ёсць функцыя, гэта дэтэрмінаваных. Ён заўсёды будзе вярнуцца ў той жа Значэнне ў стане праграмы або застаюцца нязменнымі. Ёсць, вядома, выключэнні монадические на гэта, але гэта выходзіць за рамкі нашай. Конар Харыс: Так. Што гэта азначае, аднак, ёсць некалькі важных [неразборліва] Наступствы гэтага. Адным з іх з'яўляецца, што гэта вельмі лёгка распараллелить праграмы на Haskell. Таму што, калі ў вас ёсць, сказаць, што функцыі павінен працаваць на мільён значэнняў, калі Вы ведаеце, што функцыя заўсёды будзе выдаваць і тое ж значэнне, калі Вы корміце на пэўным value-- калі вы [неразборліва] е 1, е з 2, то F 3 ці F whatnot-- з 1 не збіраецца выпісваць ў файл або зрабіць што-то што будзе змяняць значэнне f2. Вы можаце проста падзяліць гэтую функцыю да мільён розных машын або мільён розныя тэмы або што, атрымаць усе адказы назад, атрымаць усе вяртаюцца значэння таму, а затым гэта ўсё. Так вельмі лёгка распараллелить рэчы. Недахопам з'яўляецца тое, што ўваход і выхад, асабліва ўпісваюцца ў сістэму тыпу ў вельмі складаных адносінах. Мы не будзем удавацца ў гэта прама зараз, але я Рэкамендую вам зірнуць на некаторыя рэсурсы у Інтэрнэце, калі вы хочаце даведацца пра гэта. Стыў KREWSON: Так увядзіце classes-- і гэта was-- класы тыпаў былі вынайдзены, каб вырашыць праблема перагрузкі аператараў. Такім чынам, мы хацелі, каб роўнасць паміж рознымі тыпамі рэчаў. Вядома, мы маглі б падумаць of-- роўнасць паміж лікавымі тыпамі вельмі лёгка думаць пра гэта, але тое, што аб роўнасці паміж спісамі? Што аб роўнасці паміж дрэвападобная структуры дадзеных нага? І ўсё гэта магчыма ў Haskell з класаў тыпу. Так што, калі вы вызначаеце нейкі type-- дадзеных і вось, гэта музычныя пляцоўкі. Мы нарэшце-то у нейкай кампутарнай музыкі. Такім чынам, мы маем З, дыез, і гэтак далей, і гэтак далей. Яны належаць да звязку розныя класы тыпу. EQ-- яны належаць да класа тыпу эквалайзера. Гэта азначае, што яны падтрымліваюць Аперацыі роўнасці. Такім чынам, вы можаце ацаніць, наколькі адзін паслядоўнасць музычных прымітываў такі ж, як іншы. Яны належаць да парадкаваму класа. Гэта азначае, што ёсць ўпарадкаванне да іх. D прыходзіць пасля С.-дыез прыходзіць пасля C, а таксама. Яны належаць да класа паказаць, што азначае, што яны могуць быць надрукаваныя на кансоль або тэрмінал. Яны належаць да клас пералічыў, што азначае, што нават пры тым, гэтыя персанажы, у іх аснове ляжыць лікавы прадстаўленне, пачынаючы з 0 і збіраецца пакінуць праз аднак многія рэчы тут, 20 ці каля таго, або 30, або 40, можа быць. Конар Харыс: А калі у нас ёсць тып дадзеных што derives-- з гэтага ключавога слова "deriving--" пэўны тып класа, гэта азначае, што кампілятар будзе спрабаваць пабудаваць што-то аўтаматычна. Так, можа быць, вы хочаце, каб вызначыць якасць па-рознаму. Вы хочаце, каб вызначыць дыез роўным рэ-бемоль, напрыклад. Пры такой канструкцыі тут, я не думаю, што дыез і рэ-бемоль будуць роўныя, таму што кампілятар аўтаматычна кажуць кожны іншы магчымае значэнне адрозніваецца ад любой іншай. Такім чынам, можна перавызначыць Рэалізацыі па змаўчанні з гэтых тыпаў класаў. Зноў жа, паглядзіце на спасылкі, калі Вы хочаце, каб даведацца пра гэта. Стыў KREWSON: І тут, на самай справе, гэта буду быць карысным, калі мы код пазней. Мы бачым, некаторыя з аператараў инфиксные для паслядоўнага злучэння паралельнай кампазіцыяй, і так наперад, гэтыя плюсы і роўныя знакі ў асяроддзі двукроп'ямі. Гэта азначае, што мы можам гуляць гэтыя розныя музычныя прымітывы адзін за адным. Гэта паслядоўная кампазіцыя. Ці мы можам гуляць іх у паралельна ў той жа час. Так што я магу мець музычную каштоўнасць, і тады гэта складае і двукроп'я, инфиксными аператара паралельнай кампазіцыі, і гуляць іх як свайго роду акордам. І мы збіраемся выкарыстоўваць гэта, калі мы аб'яднаем наш ўдарных з нашым трохі Frere Жак песня гуляць у гэтыя дзве паслядоўнасці музычныя каштоўнасці, у той жа час. Карринг is-- Кары было ў мінулым найменне Haskell Curry, які малюнак Haskell названы ў гонар. І гэта дазваляе нам прыемна элегантнасць, калі мы пішу ўсе гэтыя розныя функцыі або фільтры, якія мы будзе адлюстраванне на нашы спісы. Функцыя двух arguments-- е х і y-- можа быць прадстаўлена ў выглядзе е х прымяняцца у. Так што гэта функцыя адзін аргумент, які вяртае іншая функцыя аднаго аргументу. Такім чынам, гэта азначае, што мы можаце падключыць Функцыя F х над спісам значэнняў у. Конар Харыс: Хочаце Прывядзём прыклад гэтага? Стыў KREWSON: Так. У мяне ёсць прыклад прама тут ад некаторыя з рэчаў, якія мы будзем пісаць. Так паўтарыць 2-- добра, паўтарыць адбудзецца адно значэнне, якое, колькі раз паўтарыць тое, а затым ён будзе прымаць value-- як правіла, спіс або што-то. Дык вось, мы адлюстраванне паўтарыць 2 над адным спісе. Так што, калі мы карце паўтарыць 2, калі мы паўтарыць 2 прымяняюцца на першы элемент гэтага list-- і гэтыя спісы музычнай phrases-- будзе вырабляць два "вы sleeping--" так ты спіш, спіш. Так што цяпер у нас ёсць два. Але рэпліку займае два Аргументы, а таму, што мы вырабы, а затым адлюстраванне, мы можам прадставіць копировщика 2 як быццам яны былі вернутыя ў залежнасці ад адным argument-- проста тыражаванне ў два разы. А потым мы ўжываем, што кожнаму элемент у гэтым спісе фраз. І CONCAT з'яўляецца Haskell праца для выраўноўвання спіс. Таму паўторнай 2 волі скласці спіс спісаў. І гэта гэта прамежкавая форма тут. І так, то мы можам Concat або згладзіць, што двойчы. Конар Харыс: Прасцейшы Прыклад карирования калі вы хочаце прадставіць like-- е гэта проста Функцыя множання, які прымае два Аргументы і вяртае іх прадукт. Так што, калі ў вас ёсць F 4, 5, гэта 20. Але вы можаце думаць пра гэта як also-- ў вас ёсць функцыя F 4 які прымае аргумент і вяртае чатыры разы на гэтым argument-- толькі частковае прымяненне якіх толькі адзін аргумент 4. І калі вы корміце е з 4 5, што дасць вам 20. І гэта прасцей, Прыклад вырабы. Гэта, як правіла, адзін з іх падручнікаў. Стыў KREWSON: Лямбда выразы або ананімныя функцыі яшчэ адзін прыкмета Haskell. Так што, калі мы павінны зрабіць на хуткую руку маленькая функцыя паўторнай жыццё, але сказаць, што гэта не стандартная бібліятэка, мы можам выкарыстоўваць сінтаксіс падобны на наступны. І мы будзем над гэтым вецер. Адна рэч, вы ўбачыце шмат у барабан машыны мы званкоў у тое, што называецца фільтр, які, як і раней, гэта адлюстраванне функцыі па спісе, але гэта адлюстраванне булевай функцыі. Такім чынам, мы маем тут прыклад у А ананімна вызначаецца булева функцыя, што проста бярэ пару значэнняў. Гэта, строга кажучы ананімная функцыя. Але гэта вызначэнне з што сінтаксіс для сцісласці, і гэта толькі бярэ х модуль N-- Конар Харыс: Так. Так е з'яўляецца функцыяй два аргументу п р і што вяртае функцыю, якая сама функцыя аднаго аргументу, а менавіта х. Стыў KREWSON: Я вышэйпаказаныя аператары инфиксные. Якія аператары инфиксные? Ну, аператары инфиксные з'яўляюцца нармальны спосаб мы ўяўляем аперацый, кажуць, у mathematics-- 2 плюс 2 замест аператара плюс а затым два аргументу 2 і 2. Конар Харыс: Гэта называецца зваротнай польскай натацыі, якая з'яўляецца тэрмін, які я сумняваюся, што любы з вас ведаюць. Стыў KREWSON: Дакладна. Зваротны польскі ці прэфікс абазначэння. Але Haskell вырашыў выкарыстоўваць аператары инфиксные. Дык вось некаторыя з прыстасаваныя тыя, якія вызначаюцца для Euterpea DSCL ў Haskell. Так што гэта было паслядоўная кампазіцыя. Гэта было паралельна кампазіцыі, і гэта быў ўсячэння паралельнай кампазіцыі. І мы павінны, што з нашай драм-машыны, таму што мы будзем выкарыстоўваць апошні аператар у гэтай маленькай картэжа там гуляць драм-машыну разам з нашай Frere Жака песні. І наша машына барабаннага будзе бясконцым. Гэта проста гуляе вечна. Але песня Frere Жак няма. Гэта не так доўга. Гэта толькі некалькі бараў. Такім чынам, мы павінны спыніць машыну, як барабан толькі карацей музычны значэнне прыходзіць да канца. І, што аператар инфиксальный супер карысна з гэтым. І инфиксный абазначэння, як гэта збольшага добра, таму што ў вас ёсць функцыі, як цытата, якая дае цэлалікавых дзяленне х нешта else-- прабачце, што павінна быць, і б. Вы маглі б напісаць яго ў якасці цытатай Ь. Так што калі вы put-- элемент Іншы прыклад. х элемент некаторага спісу, калі вы паклалі ён у зваротныя двукоссі, вы можаце выкарыстоўваць яго. Нават калі гэта не сімвал як плюс або мінус або часу, Вы можаце выкарыстоўваць імя функцыі, як, што ў зваротныя двукоссі а инфиксной аператара, які з'яўляецца даволі халаднавата. Конар Харыс: Зноў жа, гэта Усё проста сінтаксічны цукар, на самай справе. Гэта не ўплывае на ядро ​​мовы. Стыў KREWSON: Такім чынам, мы бачым тут для Апошняя фраза нашага Frere Жака песні, Я сыграў некалькі маленькіх акорды або траціны, выкарыстоўваючы паралельны склад аператарам. Гэта яшчэ адзін спосаб сказаць некаторыя што мы толькі што гаварылі. Такім чынам, вы можаце падключыць функцыі аднаго аргументу за спісы. Конар Харыс: Зноў, спасылкі для Haskell-- ўступных падручнікаў будуць мець усё гэта ў ім. Стыў KREWSON: Дык вось даволі Ключавым напрамкам у пакрокавы секвенсор мы зірнем на выкарыстанні спіс разуменне. І мы бачым, што тут элемент у аператара фіксаванай ў зваротныя двукоссі. Такім чынам, калі х з'яўляецца элементам спісу х гадоў, то мы будзем называць сябе функцыі Проц. Так PERC гэта проста функцыя перкусіі. Гэта займае некаторы значэнне р, што гэта частка абмежаванага мноства ўсіх розныя гукі ўдарных што мы бачылі ў папярэднім слайдзе, і затым яна дае, што Працягласць чвартковы ноты. Інакш гэта дае яму QNR і QNR проста на чвэрць тоны адпачынак. Так што гэта нешта будаваць добры. У нас ёсць спіс элементаў, і мы будзем цыкл па нейкай спіс з аднаго у максімальнае значэнне нашай пакрокавы секвенсор. І калі мы ў прыватнасці, я ў што спіс ад аднаго да максімальнага значэння, калі я з'яўляецца чальцом гэтага Набор створаны ў гэтай функцыі, Ну, тады мы ператвараем яго у ўдарных ноты. У адваротным выпадку, мы проста гуляем адпачыць, што ёсць, мы проста маўчаць. І мы бачым, што ў тут гэты спіс сінтаксіс разуменне, х населены гэта Спіс пабудаваны адзін ў глабальнай памеру секвенсор. Конар Харыс: Так. Асноўны сінтаксіс для спісачная з'яўляецца кранштэйн, кошт прыцягнення некаторыя зменныя, бар, Магчымыя значэння зменных самі зачынены кранштэйн. І калі вы зрабілі набор будаўніка абазначэння у якой-небудзь клас матэматыкі, Вы, магчыма, усталяваць такія 2n што п ў і н г у. Падобныя thing-- гэтай запісу прызначаецца, каб быць навадным гэтай матэматычнай натацыі. Стыў KREWSON: І вы можаце прымяніць некалькі прэдыкатаў і некалькі фільтраў у спісе разуменне, што вельмі прыемна. Алгебраічная types-- мы ня будзе затрымлівацца доўга тут. Там не вельмі добрая ідэя ў Haskell ці добры, відавочна, паняцце аб тым, як прыняць, скажам, па змаўчанні параметр функцыі ці нешта. У Python, гэта даволі лёгка. Вы можаце проста сказаць, роўная па дэкларацыя функцыі, значэнне па змаўчанні ў калі ні адна не пастаўляецца. У Haskell, вы маглі б, можа быць, выкарыстоўваць, можа быць, можа быць, увядзіце, які не бярэ ні нічога ці значэнне тыпу проста. Так мы выкарыстоўваем гэта ў драм-машыны каб нам даць дадатковы аб'ём Параметры для кожнай з барабанных дэталяў. Так што дае нам спосаб мець эквалайзер або аб'ём на пэўным канале. Конар Харыс: У іншыя прыклады ў Haskell, Вы можаце ўбачыць, можа быць, для Функцыі, якія могуць выйсці з ладу. Гэта з'яўляецца агульным. Стыў KREWSON: І вы можаце паставіць свайго роду паведамленні пра памылку па змаўчанні. І гэта асабліва зручна, калі вы робіце I / O ў Haskell. Гэта можа быць трукі. Конар Харыс: Ці для Аналагічны прыклад, думаю, функцыі, што прадугледжвае падзел параметру, якія могуць быць 0. І, што функцыя можа вярнуцца, можа быць, што заўгодна. Так што, калі няма падзелу на 0, ён вернецца толькі заўгодна. А калі ёсць дзяленне на 0, то не будзе нічога вяртаць як спосаб сігналізацыі пра памылку. Таму што адным з наступстваў Вельмі жорсткая тыпізацыя ў Haskell з'яўляецца тое, што няма real-- Выключэннем з'яўляюцца няёмка, у асноўным, апрацоўка памылак нязручна. І гэта адна вельмі распаўсюджаны спосаб зрабіць гэта. Стыў KREWSON: Так што цяпер мы атрымліваем на іншы галюцынагенных рэчы аб Haskell, якая з'яўляецца карціна адпаведнасці і функцыянальныя вызначэння. Я паказаў вам, у мінулым слайдзе Дэкларацыя паслядоўнасці крокаў функцыя, якая ўзяла магчыма каштоўнасць, затым INT, то спіс цэлых лікаў, затым вяртае паслядоўнасць музыка значэння ёсць анатаваны і з вышыні і аб'ёму. Так што тыя тры аргументу можа быць ўзор адпавядае наступным чынам. І мы заўсёды хочам быць упэўнены, што зрабіць базавы выпадак або выхаду выпадак першым. І гэтыя падкрэслення можа быць проста інтэрпрэтаваць абазначае любую значэнне, там. Так што, калі мы атрымліваем выклік да кроку паслядоўнасць з некаторым значэннем, некаторы іншае значэнне, а затым пусты спіс, тое, што мы хочам вярнуцца толькі цішыня, адпачынак 0. І замест таго, што быўшы пусты спіс або 0, гэта адпачынак 0, таму што мы справу з тыпам музыкі, і пусты спіс музыкі тып проста астатнія ня тэрмін. Гэта не музыка. І тады мы бачым, калі мы атрымаем крок паслядоўнасць з V па аб'ёме аргумент, р для засцярогі інструмента Аргумент, а затым спіс х гадоў. Затым мы робім некаторыя рэчы. У прыватнасці, мы ўжываем гэты спіс разуменне, і мы выканаць некаторыя аперацыі на магчыма значэння каб ператварыць яго ў лікавае значэнне, так што гэта можа быць затым пералічаныя і выкарыстаны каб выбраць інструмент. Зноў жа, гэта крыху трохі свядома недакладнай проста каб паказаць усе дзіўныя рэчы вы можаце зрабіць у Haskell, як вы зірнуць на яго на вашым ўласным часу. Добра. Так мы, нарэшце, дабрацца да рабіць тое, што мы мелі намер зрабіць, што зрабіць некаторыя кампутарную музыку. Такім чынам, мы збіраемся, каб паспрабаваць зрабіць песню Frere Жак. Такім чынам, ёсць, колькі фразы ў Frere Жак? Чатыры. Выдатна. І, што прыемна, што яны ўсё паўтараецца тое ж самае колькасць разоў, што ў два. Такім чынам, мы маем чатыры фразы кожны паўтараюць два разы. І ў прыватнасці, яны ў туры. І ёсць шмат, шмат спосабаў для рэалізацыі круглы, якія маглі б быць пацешна. Я зрабіў гэта ў даволі просты спосаб тут, які проста construct-- лінію Функцыя прымае спіс музычных каштоўнасцяў і ператварае яго ў паслядоўным складу шляхам прымянення паслядоўнай кампазіцыі, што аператарам. І тады я затрымаць розныя часткі робячы іх пачынаюць з астатняй. Так што я пачаць з астатняй двух мер, а затым астатнія чатыры меры, а затым астатнія шэсць меры, а затым круглы працуе, як мы ўсе ведаем, гэтую песню. Мы бачым два анатацыі або мадыфікацыі музычных каштоўнасцяў , Якія ўтрымліваюцца ў гэтым паслядоўным аранжыроўка музыкі элементаў. У нас ёсць аб'ём надбудовы. Гэтая функцыя, каб каментаваць музыка з пэўнай аб'ёму. Гэта добры прыклад сігнальнага запар MIDI ад 0 да 127, сем біт інфармацыя, якая можа быць выканана. І then-- мы бачылі яго вельмі коратка, але агульны MIDI- Спіс усіх розных інструментаў. І там не нашмат ад іх. Калі вы выкарыстоўваеце лічбавай аўдыё рабочай станцыі, як Ableton Live або Pro Tools, ёсць неверагодна шырокі дыяпазон сінтэзатараў і VST інструментаў. Але стандарт MIDI толькі мае некалькі, або некалькі дзясяткаў. І некаторыя з іх смешныя. Я думаў, што гэта будзе весела, калі мы гулялі інструмент інструмент MIDI- Верталёт, а затым Наступны спосаб раўнда, мы зрабілі пляцоўку сінтэзатар, а затым гэта банальна вядучы меандр сінтэзатар, а затым выказаць глей, якія з'яўляюцца трохі недакладныя на мой дрэнны MIDI сінтэзатар, але яны ОК. І тады мы бачым, гэты Хай і ў сінтаксісе з Haskell, а затым мы гуляем усе гэтыя часткі разам з аператарам паралельнай кампазіцыі. І мы маглі б, верагодна, пакажуць некаторыя з гэтага. Вось код. І вы можаце бачыць у C, значыць быў бы шмат ачысткі горла і ўстаноўка Код табліцы перад вамі можа зрабіць музыку, як гэта. Або любой іншай праграмавання мова, вы, верагодна, павінны ўзаемадзейнічаць з нейкай бібліятэкі або API, і ўсталяваць ўсе, і тады вам давядзецца прыбіраць. Але тут, у Haskell, я думаю, што, як толькі вы атрымаеце павесіць яго, неверагодна чытаецца і вельмі выразным. Так што рэалізацыя з Frere Жак. Добра. Цяпер мы хочам, каб дадаць ударныя, і гэта крыху брудней. Такім чынам, давайце зірнем на слайдах. Такім чынам, вялікая ідэя, каб зрабіць куча спісаў або іх частак. На гэтых машынах Перасоўны ёсць былі, як правіла, можа быць, восем аб 10 рытм ўдарных або частак. І затым выкарыстоўваць нізку метадаў. І мы гаварылі пра these-- дапамогай зморшчын, фільтры, лямбда функцыі, адлюстроўваецца над спісамі для генерацыі значэнняў у некаторым дыяпазоне ад 1 да г, г 16, або 32 крокаў у секвенсор. І потым, калі ёсць значэнне ў гэтым спісе як мы бяжым праз секвенсор, праходзіць праз яго зноў і больш, аказваецца на гэтай ноце, і што ўзор спрацаваў. Вось ўсе розныя дзіўныя спосабы Я прыдумаў для генерацыі заўвагі. Паспрабуйце гэта на свой страх і падлозе сумы. Гэта будзе гучаць крута. Калі дазволіць час, мы будзем праходзіць праз гэта. Але цяпер, я думаю, мы павінны дэма, што ў нас ёсць. Будзем спадзявацца, што гэта ідзе ОК. Так што гэта GHCI. І мы будзем загружаць файл Я назваў song.lhs, што файл я толькі што паказаў вам. ОК, выдатна. Як сказаў Конар раней, складзены, яго тып усталяваны, так што я магу дыхаць нашмат лягчэй. Гэта не збіраецца падарваць на мяне. Я хачу паказаць вам нешта карыснае. Вы можаце бачыць, што Модуль загружаны называецца 50. Вы можаце праглядзець гэты модуль. І гэта так прыемна аб doing-- магчыма, што вы робіце ў Haskell ня называецца распрацоўка праграмнага забеспячэння, але вы можаце зрабіць шмат пацешны матэрыял па сваім меркаванні. І працоўны працэс на самай справе добра, як у параўнанні з шмат іншых моў, таму што вы можаце ўбачыць у сапраўды чытаны спосаб, што адбываецца. Такім чынам, мы бачым, што ў нас ёсць усе гэтыя фразы, якія спісы музычных пляцоўках, і тады мы пабудаваць гэтыя ўверх у нешта большае, якая ўяўляе сабой музыка песня. Гэта музычны блок. І тады мы можам гуляць усё гэта з функцыяй называецца гуляць музыку. Вы можаце бачыць, што тут. Які проста гуляць. Я павінен say-- я не казаць пра гэта знак даляра, што ўсюды. Даляр знак іншага аператара инфиксный. Але ён мае самы нізкі прыярытэт любога аператара, які эфектыўна азначае, што ўсё на Злева ад знака даляра і права на знак даляра, мы збіраемся, каб ацаніць да яго. Так што гэта накшталт як іншы спосаб дадання дужкі. Конар Харыс: Гэта ў асноўным кампазіцыя функцый. І гэта гарантуе, што вы не have-- калі ў вас ёсць функцыі небудзь бок або инфикс Аператары па абодва бакі, яны не будуць звязаць па ім і даць вам нечаканыя вынікі. Стыў KREWSON: Такім чынам, мы can-- выкарыстоўваючы, што мы можам назваць. Па-першае, мы будзем гуляць без барабанаў. Гэта верталёт, міді верталёт. [Гуляе музыка] Там жа меандр. Голас глей. І вы сапраўды можаце ісці дзікай прыроды з гэтым. Я абраў даволі просты, таму што я ведаў, я не павінен адкусіць больш, чым я мог жаваць. Проста трымаць яго даволі проста паказаць асноўныя ідэі. Але тады я быў як, мы атрымаў дадаць на барабанах на гэта. Проста таму, што гэта трохі непранікальнай, і я не выкарыстоўваць Назва барабанных партый, Я адлюстровываюцца them--, таму што яны частка пералічанага класа, Я адлюстровываюцца іх цэлых лікаў. Адным з іх з'яўляецца, як бас-барабана. Нуль таксама. Сем высокая капялюш. І вось тут, дзе Функцыі атрымаць трохі больш выпадковых, гэта як конга барабаны. Так што, калі вы думаеце, можа быць, about-- цікавы спосаб рэалізацыі драм-машыну з'яўляецца выкарыстанне вельмі арганізавана ўзоры на вашай бас-барабана. Так, напрыклад, на фільтрацыі над Спіс з усім, што дае назад 1, калі ён узяў модуль 04. Так што я атрымаць 1, 5, 9, 13, 17-- так што гэта першы ўдар кожнага такту. І тады гэта тое ж самае рэч перайшла двух крокаў. Так што гэта незвычайны. Так што гэта будзе нешта накшталт высокай капелюшы. І зноў жа, тут, гэта крыху выпадковым, таму што мы робім Конга барабаны. І ў мяне ёсць некаторыя маракасы сюды, таксама. Так што я мог патэлефанаваць прайгравання драм-машыны, але яна будзе ісці вечна, і ён можа пачаць захоп да ўся памяць у маёй сістэме. Так што я буду называць гэтую функцыю гуляць музыку, якая, як мы ўбачым, выкарыстоўваць ўсячэнне паралельнай кампазіцыі гуляць наш маленькі Frere Жак песню разам з гэтым дзіўным драм-машыны. Такім чынам, давайце зірнем. І, калі ласка, палепшыць мой размяшчэнне ўсіх частак барабана. Не мая спецыяльнасць, але я было шмат весялосці робіць яго. [Гуляе музыка] Таму, вядома, гэта ўсё крыху не так весела, калі мы не можам пераўтварыць яго у кошт, так, можа быць, гэта можа быць вытлумачана па выканаўцу чалавека. Таму я не буду працаваць тут. Я ўжо згенеравалі файлы. Вы можаце бачыць, што ёсць кропка LilyPond file-- і гэта будзе мой Segue да Connor-- і файл MIDI кропка, і кропка ў фармаце PDF файл, які ёсць што LilyPond, у канчатковым рахунку вырабіць. Але гэта тыя сцэнары, і я буду проста запусціць іх з варыянтамі дапамогу. Калі вы атрымліваеце гэтыя і працуе з Euterpea, вы можаце генераваць MIDI файл. А потым з MIDI-файла з гэтай праграмай MIDI-2LY, Вы можаце стварыць Лілі Сажалка файл, а затым вы можа генераваць PDF партытуры. І мы павінны зірнуць на гэта. Так Конар, верагодна, пакажуць Вы, як каментаваць гэта лепш, але гэта, як Жак Frere генеруецца мной у Euterpea. Гэта проста ў C. Я павінен зразумеў з таго, што ўзламаць гэта на самай справе ў. Але гэта трубаправод для як гэта рабіць, з гэтым. Давайце больш пагаварыць пра LilyPond. Конар Харыс: ОК Давайце паглядзім. Хіба вы згадваеце Даведайцеся ў вас Haskell? Стыў KREWSON: О, так. Праверце навучыць вас Haskell. Гэта ў рэсурсах. Вось як я пачаў навучанне, і гэта выдатна. Не тупы навучання. Конар Харыс: Так што гэта ў Інтэрнэце. Такім чынам, хлопец па імі [неразборліва] learnyouahaskell.com, без прабелаў. Граматыка хворы. Стыў KREWSON: Гэта ілюстраваны таксама. Конар Харыс: Так што LilyPond? Гэта дэкларатыўнае праграмаванне мову музыкі вёрсткі. Так declarative-- вы можаце думаць пра такія рэчы, як HTML, дзе вы не saying-- HTML не сказаць, як вэб-браўзэры павінны робяць старонкі крок за крокам. Гэта проста кажу, што гэта гэта тэкставае апісанне што вы хочаце, каб старонка выглядаць. І тады гэта таксама праграма што кампілюе гэтую мову, або прачытаць яго па прыбыцці, а затым фактычна робіць вёрстку для вас, і ён выплёўвае іх выдатныя гледзячы забівае PDF. Вы таксама можаце атрымаць фармат PNG ці нешта. Добры спосаб думаць гэта па аналогіі з'яўляецца тое, што латэкс накшталт LillyPond, але толькі звычайнай вёрсткі. Такім чынам, замест of-- гэта не WYSIWYG, што вы бачыце Што вы атрымліваеце, як, скажам, Фінал ёсць, ці Сібеліуса, або Microsoft Word, дзе вы можаце ўвесці у рэжыме рэальнага часу і праекты рэчы ў рэальным часе і ўбачыць змены імгненна. Гэта тэкставы. Вы павінны скампіляваць ацэнкі, якія выкарыстоўваюць асобную праграму і выйсці PDF-файлаў пазней. Гэта крыху менш, зручна для выкарыстання, калі вы спрабую напісаць непасрэдна у кошт, і вы спрабуюць скласці на кампутары. Але ёсць шмат пераваг для яго. Адзін з іх, гэта выглядае нашмат лепш, таму што на самой справе LillyPond можа ўзяць час, каб зрабіць кампановачных рашэнняў належным чынам, у адрозненне ад Сібеліуса або Finale, якія маюць зрабіць узламаных алгарытмаў так што яны могуць адлюстроўваць рэчы ў рэжыме рэальнага часу. Дык чаму LilyPond-- кампутарная графіка цяжка. Калі вы робіце што-небудзь з музыкай і вы хочаце, каб напісаць ацэнкі, Вы не хочаце, каб напісаць з усё самі пачынаючы з як маляваць штабы і як маляваць. нататнікі Гэта вельмі цяжка. Гэта было зроблена раней. Ты ў парадку. Калі вы хочаце выкарыстоўваць Finale або Sibelius, фарматы файлаў для тых рэчаў, вельмі складаныя, і вы не можаце рэальна выкарыстоўваць іх праграмна. Вы можаце адкрыць Сібеліуса з Finale і перайдзіце ў меню Файл, Экспарт у PDF самастойна, але вы не можаце сапраўды назваць гэта з сцэнара. LillyPond, вы можаце патэлефанаваць ад гэтых скрыптоў. Вы можаце лёгка перабіраць LillyPond латексом. Я не так шмат часу, каб пайсці у гэтых тэхналогій прама цяпер, але яны існуюць. Калі вы хочаце паглядзець у кнізе LillyPond, гэта праграма, якая пастаўляецца з Ваш дыстрыбутыў LillyPond, і гэта для перабору LillyPond фрагменты ў LaTeX калі вы хочаце зрабіць што-то як вялікі музыказнаўства дакумента з прыкладамі, напрыклад. І гэта добры навык для жыццё, калі вы робіце што-небудзь з музыкай, а не толькі CS50. Я выкарыстаў LillyPond для ўсіх з маіх праектаў складу так як я быў у асноўным старэйшы ў сярэдняй школе. Дык вось некаторыя простыя прыклады. Гэта, у асноўным прадстаўнік ўзроўню складанасці што большасць людзей будзе вочы яны спрабавалі выкарыстоўваць LilyPond для простых праектаў. Гэты першы пачатак у Харальная прэлюдыя Баха. Гэта ніжняя ўрывак ад аднаго з маіх уласных работ, і гэта толькі там, каб паказаць вы такія рэчы, як [неразборліва] пакласці некалькі радкоў у тым жа персанал, як лірычная undersetting працуе. Лірыка падшэўкі з'яўляюцца рэччу, што вельмі просты ў выкарыстанні LilyPond ў харавой музыцы. І так, то ёсць некалькі больш складаныя прыклады тут. Усё гэта робіцца ў LilyPond і яны магчыма. Гэта першае вытрымка ад [Неразборліва] па [неразборліва]. І гэта [неразборліва] з п'еса для сольнага бас флейта [неразборліва], які з'яўляецца longtime-- якія быў даўні членам музычны аддзел тут, я думаю. Я не ўпэўнены, дзе ён сышоў у. Але ён быў дарадцам Гарвард Асацыяцыя Кампазітары на працягу доўгага часу. Выдатны чалавек. І ён піша музыку, якая мае вельмі складаны абазначэння, што LillyPond тым не менш, можа працаваць з вельмі прыгожа. Так што проста даць вам адчуванне таго, што Магчымасці Гэтая рэч are-- так вантробы LillyPond вельмі складаныя. І вы можаце выкарыстоўваць яго для доўгі час, у тым ліку для некаторых даволі складаным рэчы, на самай справе не ведаючы пра іх шмат. Але асноўная ідэя ў тым, што на нізкі ўзровень, атамы LillyPonds з'яўляюцца ноты. Нататкі ўтрымліваюць кантэкстныя званыя галасы. Так кантэксце галасавой у асноўным адпавядае да адной лініі паліфаніі. І тады кантэкст можа быць змяшчаюцца іерархічна ў больш высокіх узроўняў, што ўяўляюць штабы на рахунак ці больш буйныя групоўкі, як фартэпіянныя штабы або хор штабы, і затым у канчатковым рахунку цэлыя кантэксты ацэнка. І вы можаце на самой справе ахопліваюць некалькі балаў у кнізе. І кожны кантэкст мае Колькасць укладзеных гравёраў. Калі вы паглядзіце праз Змест кантэксце і раздрукаваць пэўную знак ці пэўны клас сімвалаў, як гэта неабходна. Такім чынам, каб кожны кантэксце галасавой, ёсць [неразборліва] заўвагі разьбяр, што з'яўляецца ў асноўным функцыяй або аб'ект, які выпісвае ўсе ведама галавы на правай частцы старонкі. Тады ёсць расколіна гравёр, які выпісвае расколіны на персанал. Тады ёсць метраном Знак гравёра, што выпісвае метранома знакі ў рахунак. І ўсё гэта ўпісваецца ў значнай а ў іерархіі. І гэта вельмі, вельмі, вельмі наладжвальны, што вам трэба калі вы хочаце, каб атрымаць такія рэчы, як, што. Такім чынам, усе кантэксты маюць шмат розных атрыбутаў што вы можаце змяніць на ўсе ад адлегласці да розных шрыфта Выбар памерах рэчаў. Калі вы хочаце, каб зрабіць яшчэ больш складаныя рэчы, ёсць убудаваны скрыптовы мову. Яны выкарыстоўваюць схему, якая гэта дыялект Lisp. Яны, верагодна, не значыць табе што-небудзь. Але ў прынцыпе, схема іншы функцыянальны Мова праграмавання, больш ці менш. Стыў KREWSON: Гальштук ст. Конар Харыс: Так. Гэта добры гальштук-ць, я мяркую. І ён выкарыстоўваецца ў якасці мовы выкладання, на самай справе, ўніз Масачусэтс-авеню У Масачусецкім тэхналагічным інстытуце. І гэта вельмі зручна для LillyPond па розных тэхнічных прычынах. І таму, калі вы хочаце, каб проста хітрасці, якія залежаць ад умоўных, для example-- ёсць пэўная Стан лікам, які сустрэўся, ўнясенне змяненняў у макет або whatnot-- то гэтыя аб'екты ёсць. Яны складаней. Дык вось даволі просты прыклад кода. Гэта пяць ліній. У прынцыпе, я вызначаю два жазла. Гэта ў 3/4. Першы склад мае прыкладаецца тэмп знак, але гэта на самай справе адбываецца перайсці да ўсёй кошт, таму што тэмп марак знаходзяцца на ўзроўні рэкордаў. Метраном знак гравёр прымацаваная забіць кантэкст. Ёсць розныя ключы, таму што [неразборліва] гравёра прыкладаецца штабы. Вы сапраўды можаце зрабіць, гэта. Ўзор я напісаў гэта на самай справе ў мажор, але гэта проста прадэманстраваць вы можаце мець розныя ключы ў розных штабах. І асноўны сінтаксіс вы пішаце звярніце ўвагу, імёны з E, F, G, які. Калі вы хочаце зрабіць выпадковасці, Вы суфікс або ES. Гэта ад галандцаў МУЗЫКАЗНАЎЧАЕ канвенцый. І зрабіць актавы скачкі, вы павінны выкарыстоўваць гэта адзнак, коску або апостраф. Адносная проста азначае, усё, што вы ёсць нататка, ён будзе аўтаматычна plaec ў актавы бліжэй да папярэдніх. І калі вы хочаце, каб скакаць больш, чым fifth-- сказаць пяты ці more-- то вы павінны выкарыстоўваць [неразборліва]. Але ў адваротным выпадку, вы не павінны пазначыць актаву кожнай ноце. І адносна З, прэм'ер і З, вы проста паказаць сярэдні C і падстава З, асабліва першыя ноты. Тады ў вас ёсць гэтыя штабы, якія арганізуюць гэтыя два галасы або ўзоры музыкі, і ў вас ёсць рахунак. І, што выглядае гэта. Калі вы хочаце, каб заняць час, каб скапіяваць гэты ўзор LillyPond Код на папярэднім слізгаць ўніз тут, і вы можаце напісаць яго на LillyPond самастойна. Я ведаю, што ў нас ёсць што-то што выглядае шмат, як гэта. Так што яшчэ адна тэхналогія называецца Музыка XML падтрымліваецца зусім іншыя людзі. XML з'яўляецца тэкставыя дадзеныя structure-- я не павінны казаць дадзеныя structure-- сказаць Метафара карту роду. І ён прызначаны для захоўвання іерархічныя дадзеныя вельмі добра. HTML, напрыклад, уяўляе сабой тып XML. І вы можаце сказаць XML, таму што яны была ўсё вуглавыя дужкі і кут Кранштэйны слэш што палі паказаныя дадзеныя. Я не ёсць код Прыклад з музыкі XML. Вы можаце знайсці яго самастойна. У асноўным, прычынай вы можаце выкарыстоўваць XML у якасці прамежкавага этапу гэта, у першую чаргу, гэта фармат абмену для ў асноўным every-- я не павінен сказаць кожны, але шмат розных лікам пісьменнікі. Так што, калі вы пішаце ў музыцы XML, можна не толькі LillyPond чытаць з дапамогай гэтага дапаможная Праграма называецца Music XML для LY, але таксама можа чытаць Фінал гэта, Сібеліуса можаце прачытаць яго. У залежнасці ад таго, як унутраны аб'ект Іерархія працуе для прадстаўлення музыку, гэта можа быць прасцей выпісаць Муз XML, чым у LillyPond і спадзявацца толькі на музычным XML каб LY зрабіць пераўтварэнне. Я не думаю, што [неразборліва] мае Music XML. Стыў KREWSON: Гэта не так. Хтосьці працуе над гэтым, хоць. Конар Харыс: ОК. Euterpea не мае Функцыя выхаду Музыка XML яшчэ. Калі вы хочаце канчатковае прадстаўленне праекта, можа быць, увайсці ў кантакт з хлопцамі што Стывен ведае, і яны маглі б выкарыстоўваць вашу дапамогу. Стыў KREWSON: Я хацеў бы, што. Конар Харыс: Акрамя таго, у асноўным, кожныя мовы праграмавання што варта яго солі ўжо мае бібліятэку XML, так што вы можаце канвертаваць ўсе ўнутры вашай музыкі ў нейкі аб'ект што бібліятэка XML можаце напісаць што запатрабуе менш змены ва ўнутраную структуру па якой музыка аб'екты, хачу напісаць, чым пісаць яго прама ў LillyPond б. Затым проста раздрукаваць яго з XML з XML-бібліятэкі на рускай мове, які будзе гарантаваць, што гэта сінтаксічна правільна, і ўсё, а затым пераўтварыць яго ў LillyPond. Такім чынам, тэхналогіі вы можаце шукаць у, калі вы робіце нешта як гэта. [Неразборліва], іншы auxilarry тэхналогіі. Гэта ў асноўным Tech Працы або Тэхналогія Студыя LillyPond. Так ён прапануе дапамогу з Сінтаксіс, з шаблонамі для розных агульнай камбінацыі прыбораў. Гэта дазваляе падзяліць экран прагляду так Вы можаце мець свой код у адным акне і PDF ў іншым акне і націсніце на месцах у PDF каб перайсці да адпаведнай плямы ў зыходным кодзе. Гэта больш карысна, калі вы на самой справе напісанне LillyPond файлы самастойна чым калі б вы генерацыі іх праграмна. Але зноў жа, гэта то карысна мець. Выдатна. Яшчэ resources-- я проста прайсці праз гэта вельмі хутка. LillyPond manuals-- LillyPond мае выдатная дакументацыя на сваім сайце. Яны ёсць падручнік. Яны маюць спасылку сінтаксісу. Яны маюць сотні фрагментаў для розных дробных рэчаў гадоў, магчыма, неабходна зрабіць, каб прадэманстраваць розныя магчымасці. Калі вы хочаце выкарыстоўваць скрыптовы мова або зрабіць больш шырокі налады, то ёсць ўнутраныя спасылкі на гэтым URL. Калі вы хочаце выкарыстоўваць музычны XML, ёсць што URL-адрас, musicxml.com/tutorial. І потым, калі вам трэба даведацца схему таму што вы на самай справе хочаце выкарыстоўваць стварэння скрыптоў у LillyPond, гэта значыць [неразборліва] называецца Структураваная Інтэрпрэтацыя камп'ютэрных праграм, які з'яўляецца не толькі другі Найбольшая CS падручнік ніколі written-- знайсці мяне потым, калі вы хочаце ведаць, што я думаю, самым вялікім is-- але гэта таксама вельмі добры ўвядзенне ў мову правільнай. Вам не трэба будзе больш, чым першыя некалькі раздзелаў. І гэта ўсё. Любыя пытанні? СТУДЕНТ: Дзе я магу спампаваць Ваш генеруецца Frere Жак так што я магу паставіць яго на айпода? Стыў KREWSON: Ну, вы можаце напісаць да нейкай файл WAV ў Euterpea. І ў вас ёсць код. Гэта на GitHub. Зрабіце свае ўласныя варыяцыі Frere Жак з CS50 калектыўнага розуму. Гэта было б выдатна. Конар Харыс: Хто-небудзь яшчэ? Стыў KREWSON: Мы павінны лепш бас-барабан, таксама. Гэта сапраўды дрэнна. СТУДЕНТ: Euterpea мае не толькі бок кампазіцыі, але signal-- Стыў KREWSON: Так. На самай справе, праца, якую я зрабіў у Euterpea, калі я узяў this-- ёсць аспірантуру ў Ельскім універсітэце, што выкарыстоўвае it-- быў на сінтэз гуку. Так што гэта сапраўды добры спосаб з дапамогай стрэлак і некаторыя абазначэння мы бачылі складаючы разам функцыі сігналу. У прыватнасці, бас для большасці з іх усяго толькі просты сінусоіды. Але калі вы пачнеце складаць тых, у дзіўных праграмных спосабаў, Вы можаце сысці з розуму гук эфекты, такія як дзіўныя каскадаў. Вы можаце стварыць вельмі цвёрды гучыць з вялікім мадуляцыі. Я зрабіў праект па грануляваных Сінтэз, які дзесьці паміж FM і адбору пробаў. Вы бераце вельмі мала, маленькія ўзоры, а затым аб'яднаць іх з нейкай модулятор і стварыць багаты гук. Мы таксама зрабілі фізічнае мадэляванне, так спрабую думаць аб фізіцы і психоакустика нешта накшталт труба, і думаць пра тое, як гук адскокваючы звон трубы і акустыка нумар і мадэляванне што з асноўнымі генератараў. Конар Харыс: дзякуй. Дзякуй, што прыйшлі. І я заўсёды гатовы на пытанні па email-- connorharris@college.harvard.edu. Стыў KREWSON: Так. stephen.krewson@yale.edu. Прахладны.