ЦОННОР Харрис: Здраво. Ја сам Конор Харис. Ја сам ЦС50 ЦА на Харварду. Степхен Кревсон: Ја сам Стивен Кревсон. Ја сам ТФ ЦС50 на Иале. ЦОННОР Харрис: И ми ћемо да причамо о неким технологијама које сте можда желите да користите ако сте заинтересовани на тај коначни пројекат или стварно шта са музиком. Ми ћемо се фокусирати на првом а програмски језик назван Хаскелл. То је функционална језик, тако да је парадигма је веома разликује од Ц или ПХП или други императив језици да сте већ користили, а посебно на библиотеку написан Хаскелл зове Еутерпеа, који може да помогне људима са писањем музике функционално, основи. И Стефан ће вас провести кроз велики примјер тога. Након тога, ја ћу вас упознати са нешто што се зове ЛиллиПонд, која је технологија за припрема музику. То је нека врста ЛаТеКс за музику ако неко од вас су користили латекс за математичке наставе или други сет П, класе или оно што имате. И тако ја ћу ти дати, опет, неколико једноставних примера који и указује се у опште смер неких бољих ресурса. Степхен Кревсон: У Уз то, мислили смо било би супер да оснују мало сугестија ка гасовода између Еутерпеа генерисани МИДИ фајлова у ЛиллиПонд, тако да пружамо нека инструкција на скрипте за то да су обезбедити ЛиллиПонд Само да остане опен соурце и добити гасовод иде. ЦОННОР Харрис: Опет, треба истаћи, ове две технологије, ви не морају да их користе заједно. Нису дизајниран да ради заједно, иако они врло лепо. Степхен Кревсон: Тако је. И потпуно бесплатно. ЦОННОР Харрис: Па признања, то прочитате. Степхен Кревсон: Примљено на знање. Захваљујући тим људима. Ово ћу задржавају на само на тренутак. Процес инсталације је мало незгодно. Имамо ми прочитати на ГитХуб да можете да погледате. Само ме емаил ако имате било каквих питања. Али ми ћемо покренути ово под претпоставком да је то ради за свакога. ЦОННОР Харрис: И ако не можеш да ЛиллиПонд на посао, није велика ствар. Нема живе компилација која ће бити укључени, барем на мом крају. Степхен Кревсон: Хаскелл и ЛиллиПонд треба да оба имају инсталатери. Еутерпеа се преузети као пакет, тако даље и тако даље. Дакле, говоримо о компјутерском музиком. И ово је само веома поглед 50.000 метара. Постоји неколико различитих аспеката тога. А ово је груба и да замагле неке детаље. Али можемо смислити као алгоритма састава, коришћењем алгоритама, користе код, за генерисање нека врста од-- можда само-сличан редослед нота, или можда белешке под неком ограничења. И онда они могу бити обавља и тумачи инструменти са аналогним или нешто слично. Али састав је урађено алгоритмички. Али наравно, можда област компјутерска музика или дигиталне музике ми смо више упознати са дигитална звук синтеза или дигитални узорковања и дигитално снимање. Много дигиталних инструмената су урађено кроз дигиталне узорковања. У ствари, бићемо користећи један од оних у облик здравог фонта библиотека касније. Али ту је нешто што се зове дигитални синтеза је изашао од касних 70-их и 80-их у са Иамаха и Џон Цховнинг на Стенфорду ради ФМ синтезу или Фреквенција модулација синтеза, где сте имали носач сигнал и модулације сигнала како у аудио спектра. Али оно што смо фокусирани на Данас је нешто што се зове МИДИ, и наравно, алгоритамска састав. Нећемо да инструменте, али уместо тога ћемо направити неку музику, а онда ће се тумачити неким инструментима који су правилнику до Генерал Миди стандарда. Дакле, шта је МИДИ? Нећу да се превише дубоко у њу, али МИДИ је протокол за пренос података. То је нека врста водича кроз разна предузећа и индустрије за организовање звукова или закрпе. Тако ћемо видети да постоји стандардна МИДИ за све различите удараљке звуци и МИДИ препоруке за све различите врсте синтх ор различитих типова свих инструмента групе у оркестру, кажу. Ти си вероватно упознат са 0 до 127 МИДИ поруке. МИДИ сигнала је типично један бит показује да ли је то података или Статус пакет, а затим ту је седам бита сигнала. И ово може да контролише све од обима до акције или притиска на одређени тастеру ако обавља са МИДИ контролор као и, наравно, нотес. И наравно, МИДИ има било изузетно корисно, јер је то начин да се жице заједно или Даиси Цхаин гомила МИДИ хардверских уређаја. Имам седам или осам година код мене кући. То постаје заиста компликовано, али то је заиста моћан. И то је заиста стара. То је од раних '80 -их, и то је заиста лепо и мали. ЦОННОР Харрис: Да. Све класични Нинтендо видео игре би вероватно има МИДИ фајлова за музику, на пример. Степхен Кревсон: Ево Пример Генерал Миди, показује МИДИ као врста општег протокола. И мислим да можемо мислити на разлика између спецификацији да треба да постоји нешто као ови инструменти звучи и стварни Реализација тих инструмената звучи у здравом фонту или одређеном МИДИ синтисајзер као разлика између Можда типефаце-- који каже, генерално, ово је дизајн ово посебан начин да представља цхарацтерс-- а посебно фонта да има одређене величине и тембра, и ту је реализација до-- ЦОННОР Харрис: Можда Боље поређење би бити Уницоде стандардни рекао-- даје број сваком карактера, и заиста сваки језик у свету, или огроман скуп скрипти језика у свету, а онда су донио у нешто графику разних фонтова пакете. И очигледно, можете мислити о Миди као Уникод звука. И то је само списак од-- великом потока догађаја и инструмената и ситница, и морате да имате посебан Програм, као писма, то рендер то у нешто што је чује. Степхен Кревсон: Па зашто Хаскелл? Хаскелл је функционална програмирање језик, веома напредан, веома различити од Ц, веома разликује од ПХП. И ми ћемо да видимо да ли је једноставност функције састава у Хаскелл која ће нам омогућити да кроз бреезе компоновање или куцање горе, преписивања, нешто као Фрере Јацкуес, Ова једноставна песма која има доста делова у њему да аре селф-сличне или понављањем. Тако ће то бити неке од мотивација зашто да користимо Хаскелла, у коме Функције су први грађани класе. И желео да продужи ово мало. То је мало лако нотате Фрере Јацкуес у Хаскелл. Али шта ако желимо да додати дела добоша на то? Шта ако желимо да покушамо да нешто као Ролан 808 909 или бубањ машина где имате око 16 различитих корака? Обично су мисли као 16. нота. И можете да контролишете глобална Темпо, и можете изабрати гомила различитих делова ударних од бас бубањ, А лол, различите замке, отворене и затворене високе капе на оваквим канала, и онда можете ЕК или прилагоде своје звука. А видећемо леп начин у Хаскелл представљања овај корак секвенцер са свим разни цоол ствари у Хаскелл можемо да урадимо са генерисање Листе и филтрирање преко листе, мапирање преко листе, мапирање функције преко листама. И брзо извињење. Ово је врло површан и превише брзо скица неких од аспеката од Хаскелл и Еутерпеа, која је домен специфичан уградјени језик писмени у Хаскелла за музичке врсте. Зато вас молим да проверите код онлајн. Покрените ГХЦИ, што је Глазгов Хаскелл компајлер преводилац. А ја ћу радити неки ово у мало тако да можете видети како се то ради. И то вам омогућава да учитате с који-- синтакса је дебело црево, а затим команда. Можете учитати у фајлове. Можете користити потражити на тим фајловима да бисте видели све функције које постоје у одређеном модулу. И онда као што ћемо видети, врсте и тип часови су тако важни у Хаскелл, тако да увек можете цхецк-- посебно ако радите у новом ДСЦЛ овако, оно што је тип музике? Знам за начин Нумериц типови раде у Хаскелл, али ја не знам много о музици. Али можете истражити начин на који они дефинисан коришћењем овог типа Т или команду а затим позива у посебно Функција или објекат података. ЦОННОР Харрис: Да. Ако сте мислили Ц и Цланг је хардасс о типовима, немаш појма о Хаскелл. Добра ствар у вези Хаскелл је да ако можете да добијете свој код саставити а ако Хаскелл типа чекова, Вероватно је у праву, јер је тип систем је тако строг. Степхен Кревсон: Да. Дакле, само желим да одем тхроугх-- и поново, ово не ради то јустице-- неколико особине Хаскелл да, барем своје цреаторс-- и настао је у касним 1980-их од стране гомиле људи, одбор од око 20 људи-- мислили да су важни. И прва ствар коју наведена у чланку који описао настанак Хаскелл током првих 20 година или тако је да је лењ. Дакле, шта то значи? Па, то значи када имамо неку врсту изражавања, морамо да се изврши процена. И Хаскелл то чини у позиву по потреби тако или не-стриктне начин. То јест, ако имамо гомилу компоненте нашег изражавања, трудимо се да одложи процену тих поткомпоненте до апсолутне последње минуте-- да је до их заправо треба. Дакле, ово што је меанс-- стварно цоол, нарочито ако мислимо о апстракције музичког корак секвенцер. Ви га укључите, и почнете вођење корак секуенце-- Ако сте икада радили са бубањ мацхине-- и то само иде заувек. Дакле, било би заиста лепо да могао опонашати да у Хаскелл. И ми то можемо са бесконачном вредности, посебно бесконачних листама. То је врло лако укуцајте бескрајна листа у Хаскелл. Можете само користити синтаксу доле Овде, где се види 1. до 3., извадите 3 1 Дот, и то је бесконачна листа од свих природних бројева проширења на колико можете да замислите. Желим да уведе Концепт набора одмах. И опет, сврха овог семинара није да уче о наборима у Хаскелл или више функција реда. Али ја само желим да га представим дати тачну представу о томе колико чудно Хаскелл је и колико је моћна. И посебно, идемо у бити-- када радимо наше различите друм делови, идемо да манипулишу листе бројеви их склапање на међусобно. И за то, ми ћемо бити помоћу мапе и наборе. Има право асоцијативна фолд, што је овај у праву овдје-- 1 минус количина, 2 минус количина, 3 минус 0. А синтакса фор а пута, ви дати пута Уз базе вредност и онда се оператион-- У овом случају, сабирањем или одузимањем. Показао сам оба случаја. А онда је акумулатор који акумулирају током целе листе, применом тог оператера плус или минус, а затим га гомилају. Тако ће ово бити до-- ако је назван са струком Р Плус од 0, почевши од 0, ми бисмо онда сумирамо све бројеви у тој листи. И то је списак од 1 до 3. ЦОННОР Харрис: Па да га стави други начин, пута Р узима три аргумента. Постоји функција која Сама узима два аргумента, онда је покретач вредност, и ту је списак вредности. А оно што радите је узмете Стартер вредност, прва вредност, стави их у функцију. Шта изађеш, Таке Тхат, који феед у функцији Други вредност, што изађеш, претпостављам да, да Инто тхе феед функција треће вредности. И онда ако идете доле Цела ова листа на овај начин, ви ћете добити на крају нека једнини вредност која је истог типа оно што си започео са и на исте врсте као ствари на листи, а затим То је резултат повратак фолд Р. Степхен Кревсон: Па конкретно, то су више функција реда, јер узимате други функција као један од аргумената. ЦОННОР Харрис: Да. Ако сте користили још неки други лангуагес-- Знам Р, [неразумљиво] језик има ово, зове Смањите. Можда имају сличне функције у другим језицима, управо звао različite stvari. Степхен Кревсон: А оно што је лепо у вези фолд Р у овом случају јесте да пута Р може радити са безброј листама. Дакле, у овом крају, овај П5 је генерисање белешке које су укључени у кораку секвенцеру за неки део добоша, пети део добоша, а можда је то конга друм или тако нешто. И ово је намерно туп начин писања овог, али је забавно, јер то показује много ствари о Хаскелл и Еутерпеа. Тако пута Р овог цолон-- дебелог црева је само оператер који гура ствари заједно на лист-- позвао је празна листа, што је само празне заграде. И зовем да на овом бескрајном списку. Ово је заправо две листе саберу овде. Листа 1 зарез 6 тачака тачка је 1, 6, 11, 16. Дакле, за само Хаскелл-- неколико знакова, ви може генерисати Читав низ бројева који су пет бројева, осим која се протеже у бесконачност. И Препенд да да ово краћи мало лист-- 3, 8, 21-- само да вам покажем како можете да спојите листе. А онда сам искључен на себе. И то завршава само као нека врста Операција идентитет, али то је бесконачан. И пута Р може учинити, јер лењо оцењује, као иу горе. Ако имамо 1 и 2 и 3, можемо Само изједначи са читав остатак. То неће радити за минус или плус, али је ће радити за ову дебелог црева идентитет операција на листи. Па како да практично користити да ако има бескрајно дугу листу ствари? Па, Хаскелл даје много фунцтионс-- и тражити више у ово у свој времена-- готово као што се која каже: У реду, ми смо генерисање ову бескрајну листу, али ми ћемо само да узмем неки Број њега И у овом цасе-- ћемо видети касније у наш ритам машина цоде-- ГМ је само нека врста глобалне променљива за броја корака у секвенцеру. На ролл-у машинама сам Показали сте, то је обично 16, али сам га реализује уз 32. Није битно. Хаскелл је такође чиста, тако да има јака статички куцање да Конор алудира. Дакле, функције су математичка у сенсе-- они су више математичке да они гарантовано да не приступате или променити било какве променљива или обавља улаз или излаз. Дакле, ако имате неку функцију, то је детерминистички. Увек ће се вратити исти вредност у стању програма или остају исти. Постоје, наравно, изузетака монадиц да, али то је изван нашег опсега. ЦОННОР Харрис: Да. Шта то значи, међутим, да ли постоји су неке важне [неразумљиво] Последице тога. Једна је да је веома лако параллелизе Хаскелл програма. Јер ако имате, рецимо, функцију која треба да раде на милион вредности, ако ви знате да је функција ће увек дају исту вредност ако храните на одређеној валуе-- ако сте [неразумљиво] Ф 1, Ф од 2, тада је ф од 3 или вхатнот-- Ф од 1 неће написати до датотеке или учини нешто који ће променити вредност ф2. Можете само да поделимо ову функцију милиона различитих машина или милион различите теме или шта год, добити све одговоре назад, добити све вредности и повратак назад, и то је то. Дакле, врло лако параллелизе ствари. Лоша страна је да улаз и излаз посебно уклапају у систем типа у веома компликованим начине. Нећемо ићи сада о томе, али ја охрабрити вас да погледате неке ресурсе онлине, ако желите да сазнате о томе. Степхен Кревсон: Па тип цлассес-- и ово било-- класе типова су измислили да се реши проблем оператора преоптерећења. Зато смо желели да имамо једнакост између различитих врста ствари. Наравно, могли бисмо да размишљамо од-- једнакост између нумеричке типове је врло лако да мислимо о томе, али шта о равноправности листама? Шта о равноправности трее структуре података ногу? И то је све могуће у Хаскелл због класа типа. Дакле, ако дефинишете одређени подаци тип-- и овде, то су музички терени. Најзад се до неке компјутерске музике. Тако имамо, Ц, Ц Схарп, и тако даље и тако даље. Они припадају гомилом другачији тип класе. ЕК-- припадају врсти ЕК класе. То значи да подрже операције равноправност. Дакле, можете проценити да ли један редослед музичких примитиваца је иста као различитом један. Они припадају класи редним. То значи да је наручивање на њих. Д долази после Ц Ц Схарп долази после Ц као и. Они припадају класи схов, што значи да могу се штампају на конзолу или терминал. Они припадају класа набројао, који значи да иако то су ликови, имају темељне бројчане Заступљеност са почетком у 0 и иде се путем међутим многе ствари су овде, 20 или тако, или 30 или 40, можда. ЦОННОР Харрис: И када имамо тип података да деривес-- са том кључном речи "деривинг--" одређени тип класа, то значи да ће компајлер покушати аутоматски изградити нешто. Дакле, можда ћете желети да различито дефинишу квалитет. Ви ћете желети да дефинишете ц схарп као равноправне на Д стан, на пример. Са овим изградње овде, ја не мислим Ц Схарп и Д стан ће бити једнаки, јер преводилац ће аутоматски кажу сваку другу могућу вредност се разликује од свака друга. Дакле, могуће је заменити подразумеване имплементације ове врсте класа. Опет, погледај референце ако желите да сазнате о томе. Степхен Кревсон: А овде, у ствари, ово ће бити од помоћи када Кодирамо касније. Ми видимо неке од Инфик оператора за секвенцијалну композицију, паралелно састав и тако даље, ови плусеви и једнаке знакове окружен колонама. То значи да можемо да играмо ове различите музички примитиве један за другим. То је секвенцијални састав. Или можемо да их играју у паралелно у исто време. Тако да могу имати музичку вредност, а онда једнако и двотачка, Инфикс паралелни оператор састав, и играти их као неку врсту акорд. И ми ћемо користити када смо комбинујемо наш део добоша са нашим Мало Фрере Жак Сонг да играју ове две секвенце музичке вредности у исто време. Цурриинг је- Цурри је последњи пут назив Хаскелл Цурри, који Хаскелл слика је названа по. И то нам омогућава да лепо елеганција кад смо писања Сви ови различити функције или филтери да смо Биће мапирање над нашим листама. Функција два аргументс-- Ф к и и-- може се представити као Ф од к примењена на и. Дакле, то је функција један аргумент који се враћа Друга функција једног аргумента. Дакле, ово значи да можете да мапирате Функција ф од к преко листе год је. ЦОННОР Харрис: Вант то дати пример за ово? Степхен Кревсон: Да. Имам пример овде од неке ствари ћемо писати. Тако понове 2-- добро, реплицира ће се једна вредност, која је колико пута да понове нешто, а онда ће узети валуе-- Обично листа или тако нешто. Дакле, овде смо мапирање реплицира 2 над другом листу. Дакле, ако мап реплицирати 2, ако понове 2 Нанесите на првом елементу тог лист-- и ово су листе музичког пхрасес-- ће производити два "ти слеепинг--" тако да спаваш, спаваш. Тако да сада имамо два. Али понављања потребно двоје аргументи, већ зато што смо цурриинг и онда мапирање, можемо представљати реплицирати 2 као да су вратио као функција једна аргумент-- само реплицира два пута. И онда смо применом то сваки елемент ове листе израза. И цонцат је Хаскелл операција за равнање листе. Због понављања 2 ће произвести листу листама. И то је тај средњи облик овде. И тако онда можемо Цонцат или поравнати да се два пута. ЦОННОР Харрис: Једноставнији Пример цурриинг, ако би као-- замислите ф само множење функција која узима два аргументи и враћа њихов производ. Дакле, ако имате Ф 4, 5, то је 20. Али можете мислити на ово као алсо-- имате функције ф 4 да заузима аргумент и враћа четири пута ово аргумент-- само делимична примена која само један аргумент 4. А ако нахрани Ф од 4 5, која ће вам дати 20. И то је једноставније Пример цурриинг. Обично је једна од оних уџбеника. Степхен Кревсон: Ламбда изрази или анонимни функције су друга Хаскелл обележје. Дакле, ако треба да подигнете на мало функција понављања живот, али кажу да није у стандардна библиотека, можемо користити синтаксу сли? на следе. И ми ћемо бреезе због овога. Једна ствар коју ћете видети много од у ритам машина се водимо позиве на нешто што се зове филтер, који као и раније, је мапирање функције преко листе, али је мапирање боолеан функције. Дакле, овде имамо пример олуја са анонимно дефинисано Булова функција која само траје неколико вредности. Ово није стриктно говорећи анонимни функција. Али то је дефинисати са да синтакса ради краткоће, и то само узима к модул н-- ЦОННОР Харрис: Да. Тако ф је функција два аргумента н и п да враћа функцију која се је функција једног аргумента, односно к. Степхен Кревсон: Ја Наведене Инфик оператори. Шта су Инфик оператери? Па, Инфикс оператери су нормалан начин представљају операције, кажу, у матхематицс-- 2 плусу 2 уместо оператера плус а затим два аргумента 2 и 2. ЦОННОР Харрис: Зове реверсе полисх нотатион, која је термин Сумњам да је ико од вас зна. Степхен Кревсон: Тако је. Реверсе полисх или префикс запис. Али Хаскелл одлучио да користити Инфик оператера. Дакле, ово су неке од царински они који су дефинисани за Еутерпеа ДСЦЛ у Хаскелл. Дакле, ово је секвенцијални састав. Ово је паралелна састав, а ово је скраћивања паралелно састав. И ми ћемо то треба са нашим друм мацхине, јер ћемо користити последњи оператер у тој малој тупле тамо да заједно играју друм мацхине са нашим Фрере Јацкуес песму. И наш ритам машина је ће бити бесконачна. То само игра заувек. Али Фрере Жак песма није. Није то дуго. То је само неколико барова. Зато морамо да зауставимо друм мацхине као чим дође краћи музички вредност крају. И то инфикед оператер је супер корисно са тим. И Инфик нотација као ово је лепо, јер да имате функцију као цитат, који даје интегер поделу од к нечим елсе-- Жао ми је, то треба да буде и б. Могли бисте написати као цитат б. Дакле, ако пут-- елемент још један пример за то. х елемент у некој листи, ако сте ставили је у Бацктицкс, можете га користити. Иако то није симбол као плус или минус или времена, можете користити назив Функција тако у Бацктицкс као Инфикс оператор, што је прилично кул. ЦОННОР Харрис: Опет, ово је све само синтаксичких шећер, стварно. То не утиче на суштину језика. Степхен Кревсон: Дакле, видимо овде за последња реч нашег Фрере Јацкуес песме, Играо сам неке мале акорде или трећине користе паралелни састав оператер. Ово је још један начин да се каже нешто шта смо управо говорио. Дакле, можете мап функције једног аргумента над листама. ЦОННОР Харрис: Поново, референце за Хаскелл-- уџбеника уводних ће имати све то у њој. Степхен Кревсон: Па, ево је прилично кључ линија корака секвенцеру ми ћемо да погледамо користећи листа разумевање. И овде се види је тај елемент у оператер фиксне телефоније у леђима наводницима. Дакле, ако је к елемент листе к је, онда ћемо позвати Перц функције. Тако минуте је само удараљке функција. Потребно је мало вредност п који је део ограничени скуп свих различите звукова удараљки да смо видели у претходном слајду, а онда даје да трајање куартер ноте. Друго је то даје КНР, и КНР је само четвртина напомена одмор. Дакле, ово је изградња нешто лепо. Имамо списак елемената, и ћемо петље преко неког од једне листе до мак вредности нашег корак секвенцер. И када смо у одређеном сам у та листа једног до максимума вредности, ако је то и је члан ове Сет је направљена за ову функцију, Па, онда га укључите у ударном белешку. У супротном, ми само играти остатак који јест, само ћути. И овде се види да је у ова листа разумевање синтакса, х је насељен ово Листа изградио једну глобалној величини секвенцеру. ЦОННОР Харрис: Да. Основна синтакса за Листа схватања је носач, вредност укључује неке варијабле, Бар, могуће вредности променљивих сами, затворени конзолу. А ако сте урадили сет градитељ запис у било којој врсти математике класе, можда сте поставили 2н што да је н или н је у з. Слично стоје ствари овој нотацији треба да буде сугестивно те математичкој нотацији. Степхен Кревсон: А можете примењују више предиката и више филтери у листи разумевање, што је сасвим лепо. Алгебарска типес-- смо неће задржавати дуго овде. Не постоји добра идеја у Хаскелл или добар, очигледно појам како да узме, рецимо, подразумевано параметар функције или тако нешто. У Питхон-у, ово је прилично једноставан. Само могу да кажем са једнак на декларација функције, подразумевани вредност у Случај нико се испоручује. У Хаскелл, можда си могао користити можда, можда тип, који се или ништа или вредност типа само. Тако смо искористити ово у друм мацхине како би се омогућило да дају опциони волумен параметри за сваки од бубња делова. Тако да нам даје начин да ЕК односно волумен на одређену каналу. ЦОННОР Харрис: У други примери Хаскелл, Можда ћете видети можда користити за функције које могу успети. Ово је уобичајена један. Степхен Кревсон: А можете доставити нека врста поруке о грешци као подразумевано. И то је посебно згодно када радите на И / О у Хаскелл. То може бити трикови. ЦОННОР Харрис: или за Сличан пример, да од функције која подразумева поделу од параметра која може да буде 0. И то функција могла врати можда год. Дакле, ако нема подела од 0, она ће се вратити само год. И ако постоји подела по 0, то ће ништа вратити као начин сигнализације грешке. Због Једна од последица Хаскелл је веома строги куцање је да нема реал-- изузеци су непријатно, у основи, Грешка руковање је непријатно. И ово је један веома уобичајен начин да се то уради. Степхен Кревсон: Сада смо добили на други ум-савијање ствар о Хаскелл, који је образац одговарајућих и функција дефиниције. Показао сам ти у последњем Повуците Декларација из корака секвенце функција, која је узео можда вредности, онда инт, затим списак интс, тада враћа секвенцу мусиц вредности има са белешкама и са терена и запремине. Дакле, та три аргументи могу бити образац упарен на следећи начин. И увек желимо да будемо сигурни да урадите основни случај или излазна случај први. И ове доње црте могу само да се тумачити да значи било какву вредност која је тамо. Дакле, ако смо добили позив за низ корак са неке вредности, неке друге вредности, а затим празна листа, оно што желимо да се врате само тишина, да се одморим 0. И уместо тога као празан листа или 0, то је остало 0, јер смо суочавање са типом музике, и празна листа музике Тип је само остало без трајања. То није музика. И онда видимо да ли смо добили корак секвенце са в за запремине аргумент, п за предострожности инструмент Аргумент, а затим списак к-их година. Тада радимо неке ствари. Конкретно, ми примењујемо ова листа разумевање, и вршимо неке операције на можда вредности да га претвори у нумеричке вредности, тако да може се онда набројани и користити да бисте изабрали инструмент. Опет, ово је мало мало намерно инцонцисе само да покаже све чудне ствари можете да урадите у Хаскелл као ти Погледајмо томе на свом времену. U redu. Тако смо коначно се да оно што смо кренули да радимо, која је направити неке компјутерске музике. Тако ћемо покушати да направи Фрере Јацкуес песму. Дакле, постоје колико фразе у Фрере Јацкуес? Четири. Veliki. А шта је лепо је то сви они поновити иста количина времена, што је два. Дакле, имамо четири фразе свако поновљено два пута. И посебно, они су у кругу. А постоје многи, много начина да се спроведе округли то може бити забавно да радим. Урадио сам то у А Прилично једноставан начин овде, која је само да цонструцт-- линију Функција узима листу музичких вредности и претвара га у секвенцијалном састав применом тог секвенцијално састав оператер. А онда сам одложити различите делове чинећи их почети са одмора. Дакле, да почнем са остатком две мере, а затим остале четири мера, а затим остала шест мере, а затим округли ради, као што сви знамо ову песму. Видимо два или напомене модификације музичких вредности који су садржани у овом секвенцијалним распоред музичких елемената. Имамо волумен. Ово је функција да обележите музика са одређеном обиму. Ово је добар пример од сигнала трчања МИДИ од 0 до 127, седам бита информације које може носити. И онда смо га видели веома укратко, али Генерал Миди списак свих различитих инструмената. И нема много од њих. Ако користите дигитални аудио радну станицу, Као Аблетон Ливе или Про Тоолс, има невероватно шири опсег синтисајзера и ВСТ инструмената. Али само МИДИ стандардни има неколико, или неколико десетина. А неки од њих су смешно. Мислио сам да би било забавно да смо играли инструмент МИДИ Инструмент хеликоптер и затим поред пут кроз кругу, урадили смо пад синтисајзер, а затим ово отрцано олово Скуаре Ваве Синтх, а онда говорно муља, који су мало нејасна на мом лошем МИДИ синтисајзер, али су у реду. И онда видимо ову Лет и у синтакси од Хаскелл, а онда играмо Сви ови делови заједно са оператером паралелном композиције. И вероватно би могао показати мало овога. Ево кода. И можете да видите у Ц, не би био Пуно грла клиринг и постављање код табели пред вама могао да музику овако. Или било који други програмски језик, вероватно бих морају да комуницирају са неком врстом библиотека или АПИ и поставили све горе, и онда би морао да почисти. Али овде у Хаскелл је, ја мислим, једном се навикнете на то, невероватно читљив и веома изражајне. Тако да је имплементација од Фрере Јацкуес. U redu. Сада желимо да додамо перкусије, а то је мало висе нереда. Дакле, хајде да погледамо слајдове. Дакле, велика идеја је да гомила листе или делова. На тим ролл-у машинама, тамо су обично око можда осам до 10 ритам или удараљки делова. А онда користе гомилу техника. И ми смо разговарали о тхесе-- користећи набори, филтери, ламбда функције, мапирани преко листе за генерисање вредности у неким опсегу 1 до р, р је 16, или 32 корака у секвенцер. И онда ако има вредност у тој листи као трчимо кроз секвенцер, пролази кроз њега изнова и преко, испоставило се зна, и да узорак буде активиран. Овде су сви различити начини веирд Дошао сам са да генерише белешке. Пробајте на свом полу суме. То ће звучати кул. Време дозвола, идемо кроз ово. Али за сада, претпостављам требало би да демо оно што имамо. Надајмо се да ово иде у реду. Дакле, ово је ГХЦИ. И ми ћемо учитати датотеку Звао сам сонг.лхс, који је фајл сам вам показао. Ok super. Као што је Конор рекао раније, да састављен, она типа проверио, тако да могу да дишем много лакше. Неће да се обити о главу на мене. Ја нисам хтео да ти покажем нешто корисно. Можете видети да модул лоадед позвао 50. Можете претраживати ту модул. И то је тако лепо о доинг-- можда оно радите у Хаскелл није зове развој софтвера, али можете да урадите много Фун Стуфф сами. И Воркфлов је стварно лепо као у поређењу са многим другим језицима, јер можете видети у стварно читљив начин шта се дешава. Дакле, видимо да имамо све те фразе, које су листе музичких теренима, а онда смо изгради ово горе у нечег већег, што је музички песма. То је музички уређај. И онда можемо да играмо све ово са функцијом зове игра музике. Можете видети да овде. Који је само игра. Требало би да говоре-- ја нисам говорио о ово долар знак да је свуда. Знак за долар је још један Инфик оператер. Али има најнижу приоритет од било ког оператера, што је практично значи да је све на лева знака долара и право знака долара, идемо да се процењује пред њим. Дакле, то је нешто као други начин додавања заграду. ЦОННОР Харрис: То је у основи Функција састав. И то осигурава да не бих-- ако имате функције обе стране или Инфик оператери на обе стране, они неће повезују преко њега и дати вам неочекивани резултати. Степхен Кревсон: Па смо можеш-- помоћу које можемо назвати. Прво ћемо играти без бубњева. То је хеликоптер, МИДИ хеликоптер. [Мусиц плаиинг] Ту је трг талас. Глас муљ. И заиста да се расипамо са овим. Изабрао сам прилично једноставна, јер сам знао да не би требало да одгризе више него што сам могао прогутати. Само га задржати прилично једноставан да покаже главне идеје. Али онда сам као, ми смо Мора да додате неке бубњеве на ово. Само зато што је ово мало непробојна, и нисам користити Назив бубњева делова, Ја мапиране томе-- јер су део тог пописаној класе, Ја их пресликава на интс. Једна је као бас бубањ. Нула је такође. Седам је висок шешир. А овде доле где је Функције добити мало више случајни, Ово је као Цонга бубњевима. Дакле, ако о-- да можда забаван начин да се спроведе друм мацхине је да се користе веома уредно обрасци на вашем бас бубањ. Тако на пример, на филтрирању над Листа са свиме што враћа А 1 када је узео модул 04. Тако сам се 1, 5, 9, 13, 17-- тако да је први откуцај сваку мјеру. И онда је ово иста ствар пребацио преко два корака. Дакле, то је неконвенционалан. Дакле, ово ће бити нешто као висок шешир. И овде опет, доле, то је мало случајна, јер радимо Цонга бубњеве. И ја имам неке Марацас овде, превише. Тако сам могао назвати плаи друм мацхине, али би ићи у недоглед, и можда почети грабе до све меморије у мом систему. Зато ћу назвати ову функцију пуштате музику, која као што ћемо видети, користити скраћивања паралелно састав да играју нашу малу Фрере Јацкуес песму заједно са овом чудном друм мацхине. Дакле, хајде да погледамо. И молим те побољша мој распоред свих бубњева делова. Није моја специјалност, али ја имали пуно забаве то раде. [Мусиц плаиинг] Па наравно, то је све мало не као забава ако не можемо га претворити до резултатом га можда се може тумачити људском извођача. Тако да нећу објавити овде. Већ сам генерише фајлове. Можете видети да постоји тачка ЛилиПонд филе-- и ово ће бити мој прелаз преко на Цоннор-- и тачка МИДИ филе, и тачка ПДФ фајл, што је оно што ЛилиПонд ће на крају генерисати. Али то су оне скрипте, и ја ћу само их ради са својим могућностима помоћи. Ако се ово горе и трчање са Еутерпеа, можете направити МИДИ фајл. А онда из МИДИ филе са овим МИДИ 2ЛИ програма, можете направити Лили Рибњак фајл, и онда може генерисати ПДФ формату резултатом. И ми треба да погледамо ово. Тако Цоннор ће вероватно показати како да обележите боље, али ово је Фрере Жак као генерише мене у Еутерпеа. То је само у Ц. Требало је да знам у чему је хацк то је заправо у. Али то је гасовод за како си то урадио са тим. Хајде да причамо више о лилипонд. ЦОННОР Харрис: ОК, хајде да видимо. Да ли сте спомињали Сазнајте Иоу Хаскелла? Степхен Кревсон: О, да. Погледајте Сазнајте Иоу Хаскелла. То је у ресурсима. Тако сам почео учење, и то је сјајно. Није глупо учење. ЦОННОР Харрис: Тако да је на мрежи. Дакле, момак по имену [неразумљиво] леарниоуахаскелл.цом, без размака. Граматика је болестан. Степхен Кревсон: То је илустровано, превише. ЦОННОР Харрис: Па шта је ЛилиПонд? То је декларативна програмирање језик за музичку штампарском слогу. Дакле, децларативе-- можете мислим на ствари као што су ХТМЛ, где ниси кажем-- ХТМЛ- не каже како треба веб претраживача рендер страница корак по корак. То само говори ово је опис текстуални шта желите да страна да изгледа. И онда се такође програм који саставља овај језик, или је прочитао своју унутра, а затим заправо Да ли припрему за вас, и избацује ово дивне траже ПДФ резултати. Такође можете добити ПНГ формат или шта већ. Добар начин да се мисли ово је по аналогији је да Латекс је нешто као ЛиллиПонд, али само обичан штампарском слогу. Дакле, уместо од-- није ВИСИВИГ, Вхат Иоу Сее Ис Вхат Иоу Гет, као, рецимо Финале је, или Сибелиус, или Мицрософт Ворд, где можете уписати у реалном времену и нацрти ствари у реалном времену и види промене одмах. То је текстуални. Морате да саставите резултати користе посебан програм и изаћи ПДФ датотеке касније. Ово је нешто мање погодан за коришћење ако сте покушавајући да директно напише у резултат, а ти си покушавају да компонује на рачунару. Али, постоје много предности за њега. Један, изгледа много лепше, јер ЛиллиПонд заправо може одвојите време да урадите лаиоут одлуке треба, за разлику од Сибелиус или финале, које имају да компромитована алгоритме тако да могу приказати ствари у реалном времену. Зашто је ЛилиПонд-- компјутерска графика је тешко. Ако радите било шта са музиком и желите да напишем резултате, не желите да пишете од свега по себи почевши од како се извући штабова и како се извући блокови. То је веома тешко. То је учињено раније. Ti si dobro. Ако желите да користите Финале или Сибелиус, формата датотека за те ствари су веома компликовани, а не можеш их заиста користе програмски. Можете отворити Сибелиус са Финале и идите на Филе, Извоз као ПДФ сами, али стварно не могу то зовемо из скрипте. ЛиллиПонд, можете позвати из тих писама. Можете лако да прелазите ЛиллиПонд са латекс. Нећу имати толико времена да одем у ове технологије сада, али они постоје. Ако желите да изгледате у ЛиллиПонд књигу, То је програм који долази са ваша дистрибуција ЛиллиПонд, и то је за итератинг ЛиллиПонд фрагменти инто ЛаТеКс Ако желите да урадите нешто као велики музикологије документа са примерима, на пример. И то је добра вештина за живот ако радиш ништа са музиком, а не само ЦС50. Користио сам ЛиллиПонд за све мојих пројеката састава јер сам био у основи виши у средњој школи. Дакле, овде су неке једноставне примере. Ово је у суштини представник нивоа тежине да већина људи би суочавају се да су покушавали користити Лилипонд за једноставне пројекте. Ово прво је почетак на Цхорале Прелуде би Бацх. Ово дно један је извод из једног од мојих радова, и то је само ту да покаже ви такве ствари [неразумљиво] стављајући више линија у истом особље, како текст ундерсеттинг ради. Лириц Подлоге се ствар која је врло једноставан за коришћење Лилипонд за хорске музике. И тако онда је ту још компликовани примери овде. Све ово се ради у ЛилиПонд и они су изводљиво. Овај први извод је из [Неразумљиво] од [неразумљиво]. И то [неразумљиво] од комад за соло бас флаута од [неразумљиво], ко је ко лонгтиме-- био дугогодишњи члан од Музички одељак овде, мислим. Нисам сигуран где је отишао да. Али он је био саветник Харварду Удружења композитора дуже време. Диван човек. И он пише музику која има веома компликована нотација да ЛиллиПонд могу ипак носити врло лепо. Да би вам дати осећај о томе шта Могућности Ова ствар је тако су-- у унутрашње ствари ЛиллиПонд су врло компликовано. А можете га користити за дуго времена, укључујући за неке прилично компликовано ствари, без стварно морате да знате много о њима. Али основна идеја је да на најнижи ниво, атоми ЛиллиПондс су белешке. Ноте садржати контекст тзв гласови. Дакле, у контексту гласовну у основи одговара на једној линији полифоније. А онда контекст може бити садржао хијерархијски у оне вишег нивоа који представљају кадра на резултат или веће групације као што су пиано особље или хор особље, и на крају комплетну музику контекстима. А заправо може да обухвати више бодова у књизи. И сваки контекст има Број прилогу гравери. Ако погледате кроз Садржај контексту и одштампате одређени симбол или његов сигурно класа симбола као неопходно. Тако да сваком контексту говора, постоји [неразумљиво] белешке гравер да је у основи функција или објекат који пише да све поруку главе на десној страни деловима странице. Затим, ту је расцеп гравер, која пише да расцепима на особље. Затим, ту је метроном Марк Гравер да испише метроном марака гласи. И све то уклапа прилично добро у хијерархији. И то је веома, веома, веома прилагодљив, која вам је потребна Ако желите да добијете такве ствари. Дакле, сви имају контексте Много различитих атрибута да можете изменити за све од растојања до различитих фонт Избор за величинама ствари. Ако желите да урадите чак и сложеније ствари, има уграђени скрипт језик. Они користе шему, која је дијалекат ЛИСП. Ово вероватно не нешто значи. Али, у основи, схема анотхер фунцтионал програмски језик, мање или више. Степхен Кревсон: Кравата-у. ЦОННОР Харрис: Да. То је добра кравата-у, претпостављам. И то се користи као наставног језика, Заправо, доле Масс Аве. На МИТ-у. И то је врло згодно за ЛиллиПонд из различитих техничких разлога. И тако, ако желите да се једноставно Твеакс зависно од уређаја, за екампле-- постоји извесна стање резултатом који је упознао, да направи корекцију у Изглед или вхатнот-- онда ти објекти постоје. Они су компликовани. Дакле, овде је врло једноставна код узорка. То је пет редова. У суштини, ја дефинисање два штабова. То је у 3/4. Први кадар хас ан прилогу темпо ознака, али то је заправо догађа да иде на целој резултат, јер темпо марака су на лопти. Метроном Марк Гравер је везан за гол контекст. Постоје различити кључеви, јер је [неразумљиво] гравера је приложен штабова. Ви заправо може да уради је. Узорак сам написао је заправо у Ц-дуру, али то је само да показати можете имати различити кључеви у различитим штабовима. А основна синтакса је ви написали ноте имена са Е, Ф, Г, било. Ако желите да урадите Ацциденталс, ви суфикс ИС или ЕС. Ово је од Дутцх Мусицологицал конвенције. И да раде октаву скокове, морате да користите ово означите Маркс, зарез или апостроф. Релативна само значи год имате белешку, она ће аутоматски бити плаец у оцтаве најближи претходне. А ако желите да скочи више од фифтх-- кажу да је пети или море-- онда морате да користите [неразумљиво]. Иначе, не морате да навести октаву сваког ноте. И релативна Ц главни и Ц само навести средњи Ц и базе, Ц, посебно прве ноте. Онда имате ове штабова који организују ова два гласа или узорци музике, и имате резултат. И то изгледа овако. Ако желите да трошим време на копирате узорак ЛиллиПонд код на претходни слајд доле, а ви могу да пишу за ЛиллиПонд сами. Знам да имамо нешто која изгледа доста овако. Дакле, ту је још једна технологија под називом Музика КСМЛ одржава од потпуно различитих људи. КСМЛ је и А текстуалне податке струцтуре-- Не би требало да кажу подаци кажу струцтуре-- метафора карта врста. И то је дизајниран да одржи хијерархијски подаци веома добро. ХТМЛ, на пример, врста КСМЛ. И ви можете рећи КСМЛ зато што су сви угао конзоле и угао носач Сласх марака да поља приказују податке. Немам код Пример из Мусиц КСМЛ. Можете га пронаћи себе. У суштини, разлог можда ћете желети да користе КСМЛ као прелазној фази је, пре свега, то је формат за размена за основи евери-- не треба да кажем сваки, али много различитих сцоре писаца. Дакле, ако сте написали у Мусиц КСМЛ не само да ЛиллиПонд прочитајте уз помоћ овог аукилари Програм под називом Мусиц КСМЛ да ЛИ, али такође може да чита Финале да, Сибелиус може прочитати. Зависно од тога како унутрашњи објекат Хијерархија ради за заступање музику, можда је лакше да напишем то Мусиц КСМЛ него да ЛиллиПонд и само се ослањају на Музичкој КСМЛ да ЛИ да уради конверзију. Не мислим [неразумљиво] хас Мусиц КСМЛ. Степхен Кревсон: То не. Неко ради на томе, мада. ЦОННОР Харрис: У реду. Еутерпеа не поседује Музика КСМЛ излаз функција још. Ако желите коначну пројектну идеју, можда ступимо у контакт са момцима Степхен зна, и они би твоја помоћ. Степхен Кревсон: Волео бих то. ЦОННОР Харрис: Такође, у основи, свака програмски језици то вреди његова со већ има КСМЛ библиотеку, тако да интерно можете претворити све вашу музику у неком објекту да КСМЛ библиотека може писати да би захтевало мање промене на ваш унутрашње структуре за све што музика објекти Желим да напишем него је писање директно у ЛиллиПонд би. Онда само одштампати са КСМЛ с КСМЛ библиотеке на свом језику, који ће гарантовати да је синтаксно исправан и све, а затим га претворити у ЛиллиПонд. Дакле, технологија можда ћете желети да погледати у ако радите нешто ovako. [Неразумљиво], још један аукиларри технологија. Ово је у суштини Тецх Радови или Технологија Студио за ЛиллиПонд. Тако да нуди помоћ са синтакса, са шаблонима за различите заједничке комбинације инструмената. Он омогућава подељени екран гледања тако можете имати свој код у једном прозору и ПДФ у другом прозору и кликните на местима у ПДФ да пређете на релевантне места у вашој изворног кода. Ово је више корисно ако сте стварно Писање ЛиллиПонд филес себе него ако генерисање им програмски. Али опет, то је нешто корисно имати. Veliki. Други ресоурцес-- Само ћу проћи кроз ово веома брзо. ЛиллиПонд мануалс-- ЛиллиПонд има одличан документација на својој интернет страници. Имају туториал. Имају синтаксе референцу. Они имају стотине исечака за разне ситнице јо можда ћете морати учинити да покаже разни могућности. Ако желите да користите језик за скриптовање или да обимнија прилагођавања, онда је Унутрашњи референце у том УРЛ-у. Ако желите да користите Мусиц КСМЛ, ту је да УРЛ адреса, мусицкмл.цом/туториал. И онда ако треба да науче шему зато што заиста желите да користите су сцриптинг објекте у ЛиллиПонд, онда је [неразумљиво] зове Структурно Тумачење компјутерских програма, што није тек други Највећа ЦС уџбеник икада вриттен-- наћи ћете ме касније ако желите да знате оно што ја мислим је највећи је- али је такође веома добра увод у језику правилно. Не треба више од Првих неколико одељака. I to je to. Neko pitanje? СТУДЕНТСКИ: Где могу да преузмем Ваш генерисана Фрере Жак тако да могу га ставити на мој иПод? Степхен Кревсон: Па, можете написати од до неког вав фајл у Еутерпеа. И имате код. То је на гитхуб. Направите своје варијације Фрере Жак од ЦС50 умом. Bilo bi super. ЦОННОР Харрис: Још неко? Степхен Кревсон: Морамо бољи бас бубањ, превише. То је стварно лоше. СТУДЕНТСКИ: Еутерпеа има не само бочни састав, али сигнал-- Степхен Кревсон: Да. У ствари, посао који сам урадили у Еутерпеа када сам је ово-- тамо је последипломске студије на Јејлу да користи то-- био на здравој синтезе. Тако да је стварно Леп начин користећи стрелице а нека од нотације видели смо оф компоновања заједно функције сигнала. Конкретно, бас за већину њих је само једноставна синусоида. Али, ако почнете компоновање онима у чудне начине програмским, можете добити Црази Соунд ефекти, попут чудних каскада. Можете направити веома истрајан звучи са пуно модулације. Урадио сам пројекат зрнастих синтеза, што је негде између ФМ и узорковање. Узмеш веома мали, мали узорци, а затим комбинују их са неком врстом модулатор и изградити богатију звук. Такође смо урадили физичке моделирање, тако Покушавам да мислим о физици и Псицхоацоустицс за тако нешто труба, и размишљања о начину звук се одбијају звоно трубе и акустику соба и моделирање да са основним осцилатора. ЦОННОР Харрис: Хвала пуно. Hvala što ste došli. И увек сам спреман да се питања од емаил-- цоннорхаррис@цоллеге.харвард.еду. Степхен Кревсон: Да. степхен.кревсон@иале.еду. Кул.