CONNOR HARRIS: Hi. მე Connor ჰარისი. მე CS50 CA ჰარვარდის. STEPHEN KREWSON: მე სტივენ Krewson. მე TF განთავსების CS50 იელის. CONNOR HARRIS: ჩვენ ვაპირებთ, რომ გაიგო ზოგიერთი ტექნოლოგიების, რომ თქვენ შეიძლება გსურთ გამოიყენოთ თუ თქვენ დაინტერესებული ამით საბოლოო პროექტის ან მართლაც არაფერი მუსიკა. ჩვენ ვაპირებთ, რომ აქცენტი პირველი პროგრამირების ენის მოუწოდა Haskell. ეს არის ფუნქციონალური ენის, პარადიგმა ძალიან განსხვავდება C ან PHP ან სხვა იმპერატიული ენებზე რომ თქვენ გამოიყენება უკვე და, განსაკუთრებით, on ბიბლიოთეკა დაწერილი Haskell მოუწოდა Euterpea, რომელიც შეიძლება დაეხმაროს ადამიანი წერა მუსიკა ფუნქციურად, ძირითადად. ხოლო სტეფანე იქნება ფეხით თქვენ მეშვეობით დიდი მაგალითია. ამის შემდეგ, მე წარმოგიდგინოთ რაღაც მოუწოდა LillyPond, რომელიც არის ტექნოლოგია ტიპოგრაფიული მუსიკა. ეს არის ერთგვარი მოსწონს ლატექსის მუსიკა, თუ თქვენ არ გამოიყენება ლატექსის მათემატიკის კლასების ან სხვა P კომპლექტი კლასების ან რა. ასე რომ, მე მივცემ თქვენ, კიდევ ერთხელ, რამდენიმე მარტივი მაგალითი, რომ და აღვნიშნო თქვენ ზოგადი მიმართულებით გარკვეული უკეთესი რესურსები. STEPHEN KREWSON: In გარდა ამისა, გვეგონა, რომ ეს იქნება მაგარი შეიქმნა ცოტა მინიშნებები მიმართ მილსადენის შორის Euterpea გენერირებული MIDI ფაილი ამ LillyPond, ამიტომ ჩვენ გთავაზობთ რამდენიმე დავალებით on სკრიპტები უნდა გავაკეთოთ, რომ, რომელიც უზრუნველყოფილი LillyPond უბრალოდ შეინახოს იგი ღია წყარო და მიიღეთ მილსადენის აპირებს. CONNOR HARRIS: ისევ, ჩვენ უნდა აღვნიშნო, ამ ორი ტექნოლოგიები, თქვენ არ უნდა გამოიყენოთ ისინი ერთად. ისინი არ განკუთვნილია მუშაობა ერთად, თუმცა ისინი ძალიან ლამაზად. STEPHEN KREWSON: მარჯვენა. და სრულიად უფასოდ. CONNOR HARRIS: ასე რომ, მადლობის, უბრალოდ წავიკითხე, რომ. STEPHEN KREWSON: ჩანიშნულია. მადლობა მათ, ეგ არის. ეს მე გრძელდება მხოლოდ ერთი წუთით. ინსტალაციის პროცესი ცოტა სახიფათო. ჩვენ წაკითხული ჩემთვის GitHub რომ თქვენ შეგიძლიათ შევხედოთ. უბრალოდ მომაწოდეთ, თუ თქვენ გაქვთ რაიმე შეკითხვები. მაგრამ ჩვენ აწარმოებს ამ ვარაუდი, რომ ეს არის სამუშაო ყველასთვის. CONNOR HARRIS: და თუ არ შეუძლია მიიღეთ LillyPond მუშაობა, არ არის დიდი გარიგება. არ არის ცოცხალი კრებული, რომელიც იქნება ჩართული, როგორც მინიმუმ, ჩემი ბოლომდე. STEPHEN KREWSON: Haskell და LillyPond უნდა ორივე აქვს ინსტალატორები. Euterpea გადმოწერილი როგორც პაკეტი, ასე შემდეგ და ასე შემდეგ. ასე რომ, ჩვენ ვსაუბრობთ კომპიუტერი მუსიკა. და ეს არის მხოლოდ ძალიან 50,000 ფეხით ხედი. არსებობს რამდენიმე სხვადასხვა ასპექტები. და ეს არის უხეში და აპირებს ბუნდოვანი ზოგიერთი დეტალი. მაგრამ ჩვენ შეგვიძლია ვიფიქროთ, რაღაც ისევე როგორც ალგორითმული შემადგენლობა, ალგორითმები, გამოყენებით კოდი, გენერირება ზოგიერთი ტიპის of-- შესაძლოა თვითმმართველობის მსგავსი თანმიმდევრობა შენიშვნები, ან იქნებ შენიშვნები ზოგიერთ შეზღუდვა. და მაშინ ის შეიძლება იყოს შესრულებული და ინტერპრეტირებული ანალოგური ინსტრუმენტები ან რამე მსგავსი. მაგრამ შემადგენლობა კეთდება ალგორითმულად. მაგრამ, რა თქმა უნდა, შესაძლოა, ფართობი კომპიუტერი მუსიკა და ციფრული მუსიკა ჩვენ უფრო იცნობს ციფრული ხმის სინთეზის ან ციფრული შერჩევის და ციფრული ჩაწერა. ბევრი ციფრული ინსტრუმენტები კეთდება მეშვეობით ციფრული შერჩევა. ფაქტობრივად, ჩვენ უნდა გამოყენებით ერთ იმ სახით ხმის შრიფტის ბიბლიოთეკაში შემდეგ. მაგრამ არსებობს ასევე რაღაც მოუწოდა ციფრული სინთეზი, რომელიც გამოვიდა გვიან 70 და შევიდა "80 ერთად Yamaha და ჯონ Chowning სტენფორდის აკეთებს FM სინთეზი ან სიხშირე მოდულაცია სინთეზის, სადაც თქვენ ჰქონდა გადამზიდავი სიგნალი და მოდულაციას სიგნალი როგორც აუდიო სპექტრის. მაგრამ რაც ჩვენ ორიენტირებულია დღეს არის რაღაც მოუწოდა MIDI, და რა თქმა უნდა, ალგორითმული შემადგენლობით. ჩვენ არ ვაპირებთ, რათა ინსტრუმენტები, მაგრამ ჩვენ ნაცვლად აპირებს გარკვეული მუსიკა, და შემდეგ, რომელიც უნდა განიმარტოს, ზოგიერთი ინსტრუმენტები, რომ არიან conformant რომ ზოგადი MIDI სტანდარტი. რა არის MIDI? მე არ ვაპირებ, რომ მიიღოთ ძალიან ღრმა შევიდა, მაგრამ MIDI არის მონაცემთა გადაცემის პროტოკოლი. ეს არის ერთგვარი სახელმძღვანელო მასშტაბით სხვადასხვა კომპანიები და მრეწველობის ორგანიზება კინო და წერთ. ასე რომ, ჩვენ ვხედავთ, რომ არსებობს MIDI სტანდარტული ყველა სხვადასხვა პერკუსია კინო და MIDI რეკომენდაციები ყველა სხვადასხვა სახის synth ან სხვადასხვა სახის ყველა ინსტრუმენტი ჯგუფების ორკესტრი, ამბობენ. თქვენ ალბათ იცნობს 0 მეშვეობით 127 MIDI შეტყობინებები. A midi სიგნალი, როგორც წესი, ერთი ცოტა მითითებით არის თუ არა ეს მონაცემები ან სტატუსი პაკეტი და შემდეგ იქ შვიდი ბიტი სიგნალი. და ეს შეგიძლიათ აკონტროლოთ ყველაფერი მოცულობა რომ აქცია და ზეწოლა კონკრეტულ გასაღები თუ თქვენ ასრულებენ ერთად MIDI კონტროლერი, ისევე როგორც, რა თქმა უნდა, აღნიშნავს. და რა თქმა უნდა, MIDI აქვს იყო ძალიან სასარგებლო, იმიტომ, რომ ეს არის გზა მავთული ერთად ან Daisy ჯაჭვი რამოდენიმე MIDI აპარატურული მოწყობილობების. მაქვს შვიდი ან რვა უკან ჩემს სახლში. იგი იღებს ნამდვილად რთული, მაგრამ ეს მართლაც ძლიერი. და ეს არის ძალიან ძველი. ეს არის ადრეული '80s, და ეს მართლაც ლამაზი და პატარა. CONNOR HARRIS: ჰო. ყველა კლასიკური Nintendo ვიდეო თამაშები, ალბათ, აქვს MIDI ფაილების მუსიკა, მაგალითად. STEPHEN KREWSON: აი მაგალითად ზოგადი MIDI, ნაჩვენებია MIDI, როგორც სახის ზოგადი ოქმს. და მე ვფიქრობ, რომ ჩვენ შეიძლება ვიფიქროთ განსხვავება დაზუსტება რომ არ უნდა იყოს რაღაც ამ ინსტრუმენტის ხმები და ფაქტობრივი რეალიზაციის ინსტრუმენტების ხმები ხმის შრიფტის ან კონკრეტული MIDI სინთეზატორი, როგორც სხვაობა შორის, შესაძლოა, typeface--, რომელიც ამბობს, ზოგადად, ეს არის დიზაინი ამ კონკრეტულ გზა წარმოადგენს გმირები და კერძოდ შრიფტის რომ აქვს კონკრეტული ზომა და ტემბრი, და იქ რეალიზაციის the-- CONNOR HARRIS: იქნებ უკეთესი შედარება იყოს უნიკოდის სტანდარტი says-- ეს აძლევს ხმების ყოველ ხასიათი, და მართლაც ყველა ენაზე მსოფლიოში, ან დიდი კომპლექტი სკრიპტები ენის მსოფლიოში, და შემდეგ ეს არის გაწეული რაღაც გრაფიკული სხვადასხვა შრიფტის პაკეტი. და ცხადია, რომ თქვენ შეიძლება ვიფიქროთ, MIDI როგორც Unicode ხმა. და ეს არის მხოლოდ of-- დიდი ნაკადი ღონისძიებები და ინსტრუმენტები და whatnot, და თქვენ უნდა ჰქონდეს ცალკე პროგრამა, როგორიცაა შრიფტი, უნდა გამოიტანოს, რომ შევიდა რაღაც რომ audible. STEPHEN KREWSON: რატომ Haskell? Haskell არის ფუნქციონალური პროგრამირების ენის, ძალიან თანამედროვე, ძალიან განსხვავდება C, ძალიან განსხვავდება PHP. და ჩვენ ვაპირებთ, რომ იქ მარტივად ფუნქცია შემადგენლობა Haskell რომელიც საშუალებას მოგვცემს ნიავი მეშვეობით საკომპოზიტორო და აკრეფის, გაშიფვრის, რაღაც Frere Jacques, ეს მარტივი სიმღერა, რომელიც აქვს უამრავი ნაწილები, რომ თვითმმართველობის მსგავსი ან იმეორებს. ასე რომ, ეს იქნება რამდენიმე მოტივაცია, თუ რატომ ჩვენ ვიყენებთ Haskell, რომელშიც ფუნქციები პირველი კლასის მოქალაქე. და მინდოდა ვრცელდება ამ ცოტა. ეს ცოტა ადვილი notate Frere ჟაკ in Haskell. მაგრამ რა, თუ გვინდოდა რჩეულებში ბარაბანი ნაწილი მას? რა მოხდება, თუ ჩვენ გვინდოდა, რომ ცდილობენ, რათა რაღაც როლანდ 808 ან 909 drum მანქანა, სადაც თქვენ უნდა დაახლოებით 16 სხვადასხვა ნაბიჯები? როგორც წესი, ეს არის ფიქრობდნენ, რომ მე -16 აღნიშნავს. და თქვენ შეგიძლიათ აკონტროლოთ გლობალური ტემპი, და თქვენ შეგიძლიათ აირჩიოთ out bunch სხვადასხვა დასარტყამი ნაწილები ბასი drum, რომელიც clap, სხვადასხვა snares, ღია და დახურული მაღალი ქუდები ამ სახის არხები, და შემდეგ შეგიძლიათ EQ ან შეცვალოს მათი მოცულობა. ჩვენ დავინახავთ, ლამაზი გზა Haskell წარმოადგენს ეს ნაბიჯი sequencer ყველა სხვადასხვა cool რამ Haskell ჩვენ შეგვიძლია ამის მომტანი სიები და გაფილტრის მეტი სიები, რუკების მეტი სიები, რუკების უწევს სიები. და სწრაფი ბოდიშის მოხდა. ეს არის ძალიან ზედაპირული და ზედმეტად სწრაფი ესკიზის ზოგიერთი ასპექტები ჰასკელი და Euterpea, რომელიც არის დომენური სპეციფიკური ჩანერგილი ენაზე დაწერილი ამ Haskell მუსიკალური ტიპის. ასე რომ, გთხოვთ შეამოწმეთ კოდი ონლაინ რეჟიმში. გაუშვეს GHCI, რომელიც Glasgow Haskell შემდგენელი თარჯიმანი. და მე უნდა აკეთებს რაღაც ამ ცოტა ასე რომ თქვენ ხედავთ, როგორ კეთდება. ეს გაძლევთ საშუალებას, რათა ჩატვირთოს ერთად the-- სინტაქსი არის წერტილი და შემდეგ ბრძანება. თქვენ შეგიძლიათ გადაწეროთ ფაილი. თქვენ შეგიძლიათ გამოიყენოთ დათვალიერებისას იმ ფაილი რომ ყველა ის ფუნქცია, რომელიც არსებობს კონკრეტული მოდულის. და მაშინ, როგორც ვნახავთ, სახის და ტიპის კატეგორიები იმდენად მნიშვნელოვანია Haskell, ასე რომ თქვენ ყოველთვის check-- განსაკუთრებით თუ თქვენ მუშაობის ახალ DSCL ასე, რა არის მუსიკა ტიპის? მე ვიცი გზა რიცხვითი სახის მუშაობა Haskell, მაგრამ მე არ ვიცი, ბევრი მუსიკა. მაგრამ ჩასწვდებით გზა ისინი განისაზღვრება გამოყენებით ამ t ან ტიპის ბრძანება და შემდეგ მოუწოდებენ კონკრეტული ფუნქცია ან მონაცემები ობიექტი. CONNOR HARRIS: ჰო. თუ ეგონა, C და Clang იყო Hardass შესახებ ტიპის, თქვენ წარმოდგენა არ გაქვთ Haskell. კარგია Haskell ის არის, რომ თუ შეგიძლიათ მიიღოთ თქვენი კოდი შეადგინონ და თუ Haskell ტიპის ამოწმებს, ეს, ალბათ, სწორი, იმის გამო, რომ ტიპის სისტემა იმდენად მკაცრი. STEPHEN KREWSON: ჰო. ასე რომ, მე უბრალოდ მინდა through-- და კიდევ ერთხელ, ეს არ ვაკეთებთ justice-- რამდენიმე თვისებები Haskell, როგორც მინიმუმ, მისი creators-- და იგი შეიქმნა გვიან 1980 მიერ bunch of ადამიანი, კომიტეტის 20 people-- ეგონა, მნიშვნელოვანი იყო. და პირველი, რაც მათ ჩამოთვლილი დოკუმენტი, რომელიც აღწერილი გენეზისის Haskell მეტი პირველი 20 წლის განმავლობაში ანუ ის იყო, რომ ზარმაცი. ასე რომ, რას ნიშნავს ეს? ისე, ეს იმას ნიშნავს, როდესაც ჩვენ გვაქვს გარკვეული სახის გამოხატვის, ჩვენ უნდა შეაფასოს იგი. და Haskell ჯერ ეს ზარი საჭიროებდა გზა, ან არასამთავრობო მკაცრი გზა. რომ არის, თუ ჩვენ გვაქვს რამოდენიმე კომპონენტია ჩვენი გამოხატვის, ჩვენ ვცდილობთ, რომ გადადება შეფასების იმ subcomponents სანამ აბსოლუტური ბოლო წუთში რომ არის, სანამ ჩვენ რეალურად უნდა მათ. ასე რომ, ეს ნიშნავს, რომელიც მართლაც მაგარი, განსაკუთრებით თუ ჩვენ ფიქრი აბსტრაქცია მუსიკალური ნაბიჯი sequencer. თქვენ აქციოს ის, და თქვენ დაიწყოს გაშვებული ნაბიჯი sequence-- თუ თქვენ ოდესმე მუშაობდა drum machine-- და ეს მხოლოდ მიდის სამუდამოდ. ასე რომ, ეს იქნება მართლაც ლამაზი თუ ჩვენ შეიძლება მიბაძოს, რომ Haskell. და ჩვენ შეგვიძლია ამის გაკეთება, უსაზღვრო ღირებულებების, კერძოდ, უსასრულო სიები. ეს ძალიან ადვილია ჩაწერეთ უსასრულო სია Haskell. შეიძლება მხოლოდ გამოიყენოთ სინტაქსის ქვემოთ აქ, სადაც ხედავთ 1 მეშვეობით 3, ამოიღონ 3 1 dot dot და რომ არის უსასრულო სია ყველა ბუნებრივი ნომრები გაგრძელების რამდენადაც შეგიძლიათ წარმოიდგინოთ. მე მინდა წარმოგიდგინოთ კონცეფცია folds დაუყოვნებლივ. ისევ და ისევ, იმ მიზნით, სემინარის არ არის გაეცნონ folds in Haskell ან უმაღლესი წესრიგის ფუნქციები. მაგრამ მე მინდა გააცნოს მას ზუსტ გრძნობა რა უცნაურია Haskell არის და რამდენად ძლიერი ის არის. კერძოდ, ჩვენ ვაპირებთ, რომ იყოს როდესაც ჩვენ გავაკეთებთ სხვადასხვა ბარაბანი ნაწილები, ჩვენ ვაპირებთ, რომ იყოს მანიპულირების სიები ციფრები, ვეტო მათ გადატანა ერთმანეთს. და გავაკეთოთ, რომ, ჩვენ გამოყენებით რუკები და folds. აქ არის სწორი ასოციაციურ ჯერ, რომელიც ამ ერთი უფლება აქ 1 მინუსი რაოდენობა, 2 მინუს რაოდენობის, 3-0. და სინტაქსი ამისთვის ჯერ, თქვენ ჯერ ბაზის ღირებულება და შემდეგ operation-- ამ შემთხვევაში, დამატებით ან გამოკლება. მე ნაჩვენები ორივე შემთხვევაში. და მაშინ იქ აკუმულატორი, რომ გროვდება მთელი სია, მსჯელობა, რომ ოპერატორი პლუს ან მინუსი, და შემდეგ დაგროვების იგი. ასე რომ, ეს იქნება the-- თუ მას ეწოდა ერთად ჯერ r პლუს 0, დაწყებული 0, ჩვენ მაშინ მთლიანობაში ყველა ციფრები, რომ სიაში. და ეს სია 1-დან 3. CONNOR HARRIS: ასე რომ, რომ მას სხვა გზა, ჯერ r იღებს სამი არგუმენტები. არსებობს ფუნქცია, რომელიც თავად იღებს ორი არგუმენტები, მაშინ იქ შემქმნელის ღირებულება, და იქ სიაში ღირებულებებს. და რას აკეთებთ თქვენ მიიღოს ავტორი ღირებულება, პირველი მნიშვნელობა, ისინი შევიდა ფუნქცია. რას გავიდნენ, მიიღოს, რომ, საკვების, რომ შევიდა ფუნქცია მეორე მნიშვნელობა, რას გავიდნენ, მიიღოს, რომ, შესანახი რომ შევიდა ფუნქცია მესამე მნიშვნელობა. და მაშინ, თუ დაცემას ეს მთელი სია ამ გზით, თქვენ აპირებთ მისაღებად საბოლოოდ ზოგიერთი სინგულარული ღირებულება, რომელიც არის იმავე ტიპის, რასაც თქვენ დაიწყო ერთად და იმავე ტიპის როგორც რამ სიაში და შემდეგ რომ არის დაბრუნების შედეგად ჯერ რ STEPHEN KREWSON: ასე რომ, კერძოდ, ეს არის უმაღლესი წესრიგის ფუნქციები, იმიტომ, რომ ისინი კიდევ ერთი ფუნქცია, როგორც ერთ-ერთი არგუმენტი. CONNOR HARRIS: ჰო. თუ თქვენ გამოიყენება რამდენიმე სხვა languages-- ვიცი, R, [INAUDIBLE] ენა აქვს ამ, ე.წ. შემცირება. თქვენ შეიძლება ჰქონდეს მსგავსი ფუნქციები სხვა ენებზე, უბრალოდ მოუწოდა განსხვავებული საგნები. STEPHEN KREWSON: და რა ლამაზი ჯერ R ამ შემთხვევაში ის არის, რომ ჯერ R შეუძლია მუშაობა უსასრულო სიები. ასე რომ, ამ ბოლოში, ეს P5 მომტანი აღნიშნავს, რომ არიან ჩართული ნაბიჯი სეკვენსორი ზოგიერთი drum ნაწილი მეხუთე drum ნაწილი, და იქნებ ეს conga ბარაბანი ან რამე. და ეს არის გამიზნულად obtuse გზა წერა ამ, მაგრამ ეს fun, იმიტომ, რომ ეს მეტყველებს იმაზე, რომ ბევრი რამ Haskell და Euterpea. ასე რომ ჩამოყაროს R ამ colon-- მსხვილი ნაწლავის უბრალოდ ოპერატორი, რომელიც უბიძგებს რამ ერთად არის list-- მოუწოდა ცარიელი სია, რომელიც მხოლოდ ცარიელი ფრჩხილებში. და მე მოუწოდებდა, რომ ამ უსასრულო სია. ეს არის, ფაქტობრივად, ორი სიები ემატება ყველაფერი აქ. სია 1 მძიმით 6 dot dot 1, 6, 11, 16. ასე რომ, Haskell-- მხოლოდ რამდენიმე პერსონაჟი, თქვენ შეგიძლიათ გენერირება მთელი თანმიმდევრობა ნომრები რომ ხუთი ნომრები გარდა გაჭიმვა შევიდა უსასრულობა. და მე prepend რომ ამ მოკლე პატარა list-- 3, 8, 21-- მხოლოდ გაჩვენოთ როგორ შეგიძლიათ concatenate სიები. და მაშინ მე დაკეცილი თავად. ეს მთავრდება მხოლოდ ერთგვარი პირადობის ოპერაცია, მაგრამ ეს არის უსასრულო. და ჯერ R შეგვიძლია გავაკეთოთ, რომ, რადგან ეს lazily აფასებს, როგორც ზემოთ. თუ ჩვენ გვაქვს 1 და 2 და 3, ჩვენ შეგვიძლია უბრალოდ bracket off მთელი დანარჩენი იგი. ეს არ იმუშავებს მინუსი ან პლუს, მაგრამ ეს იმუშავებს ამ ორი წერტილი პირადობის ოპერაცია სიაში. ასე რომ, ჩვენ, პრაქტიკულად გამოიყენოს, რომ თუ ჩვენ აქვს უსასრულოდ გრძელი სია, რამ? ისე, Haskell უზრუნველყოფს ბევრი ფუნქციები და უფრო, ამ წელს საკუთარი time-- როგორიცაა მიიღოს რომელიც ამბობს, OK, ჩვენ მომტანი ამ უსასრულო სია, მაგრამ ჩვენ მხოლოდ აპირებს გარკვეული ნომერი მას და ამ შემთხვევაში ჩვენ დავინახავთ, ეს მოგვიანებით ჩვენი ბარაბანი მანქანა კოდი GM მხოლოდ გარკვეული გლობალური ცვლადი რაოდენობის ნაბიჯები იმ sequencer. წლის roll-მანქანები მე აჩვენა, რომ თქვენ, რომ, როგორც წესი, 16, მაგრამ მე არ განხორციელდა იგი 32. ეს ნამდვილად არ აქვს. Haskell ასევე სუფთა, ამიტომ მას აქვს ძლიერი სტატიკური აკრეფით, რომ Connor გააკეთა მინიშნება. ასე რომ, ფუნქციები მათემატიკური წელს sense-- ისინი უფრო მათემატიკური რომ ისინი გარანტირებული არ ან შეცვალოს ნებისმიერი სახის ცვლადი ან ასრულებს შეყვანის ან გამომავალი. ასე რომ, თუ თქვენ გაქვთ ფუნქცია, ეს დეტერმინისტული. იგი ყოველთვის დაბრუნდება იგივე ღირებულების სახელმწიფო პროგრამის ან იგივე რჩება. არსებობს, რა თქმა უნდა, monadic გამონაკლისი ამ, მაგრამ ეს სცილდება ჩვენი ფარგლებს. CONNOR HARRIS: ჰო. ეს კი იმას ნიშნავს, თუმცა, იქ არის რამდენიმე მნიშვნელოვანი [INAUDIBLE] შედეგების ამ. ერთი ის, რომ ძალიან ადვილია parallelize Haskell პროგრამები. იმის გამო, რომ, თუ თქვენ გაქვთ, ამბობენ, ფუნქცია, რომ საჭიროებს მუშაობას მილიონი ღირებულებები, თუ თქვენ იცით, რომ ფუნქცია ყოველთვის გასცემენ იგივე მნიშვნელობა, თუ თქვენ საკვების გარკვეული value-- თუ თქვენ [INAUDIBLE] f 1, ვ 2, ვ 3 ან whatnot-- ვ 1 არ აპირებს დაწერა რომ ფაილი ან რაღაც რომელიც შეცვლის ღირებულება f2. შეგიძლიათ უბრალოდ გაყოფილი ეს ფუნქცია მილიონი სხვადასხვა მანქანები და მილიონი სხვადასხვა თემა ან რასაც, ყველა რეაგირება უკან, მისაღებად ყველა დაბრუნების ღირებულებებს უკან, და შემდეგ ეს არის. ასე რომ, ძალიან ადვილია parallelize რამ. მინუსი ის არის, რომ input და გამომავალი განსაკუთრებით ჯდება ტიპის სისტემა ძალიან რთული გზა. ჩვენ არ წასვლას, რომ ახლა, მაგრამ მე გარწმუნებთ, რომ შევხედოთ ზოგიერთი რესურსები ონლაინ თუ გსურთ გაიგოთ, რომ. STEPHEN KREWSON: ასე რომ, ტიპი classes-- და ეს was-- კლასების სახის გამოიგონეს უნდა გადაწყვიტოს პრობლემა ოპერატორი გადატვირთვის. ასე რომ, ჩვენ გვინდოდა, რომ თანასწორობა შორის სხვადასხვა სახის ნივთები. რა თქმა უნდა, ჩვენ შეგვიძლია ვიფიქროთ of-- შორის თანასწორობის რიცხვითი ტიპის ძალიან ადვილია, რომ ვიფიქროთ, მაგრამ რაც შეეხება შორის თანასწორობის სიები? რაც შეეხება შორის თანასწორობის ხის ფეხი მონაცემთა სტრუქტურები? და ეს არის ყველა შესაძლო Haskell გამო ტიპის კლასების. ასე რომ, თუ თქვენ განსაზღვრავს გარკვეული მონაცემთა ტიპის და აქ, ეს არის მუსიკალური მოედანი. ჩვენ ბოლოს და ბოლოს ზოგიერთი კომპიუტერული მუსიკა. ასე რომ, ჩვენ C, C მკვეთრი, და ასე შემდეგ და ასე შემდეგ. ისინი მიეკუთვნებიან bunch of სხვადასხვა ტიპის კლასი. EQ-- მათ ეკუთვნის EQ ტიპის კლასში. ეს ნიშნავს, რომ ისინი მხარს უჭერენ თანასწორობის ოპერაციებში. ასე რომ, თქვენ შეგიძლიათ შეაფასოთ არა ერთი თანმიმდევრობა მუსიკალური primitives იგივეა, რაც განსხვავებულია. ისინი მიეკუთვნებიან რიგითი კლასის. ეს იმას ნიშნავს, რომ იქ შეკვეთით ამ. D მას შემდეგ, რაც C. C მკვეთრი მას შემდეგ, რაც C ისევე. ისინი ეკუთვნის კლასი ჩანს, რაც იმას ნიშნავს, რომ მათ შეუძლიათ დაიბეჭდება კონსოლი ან ტერმინალში. მათ ეკუთვნის კლასის ჩამოთვლილი, რომელიც იმას ნიშნავს, რომ მიუხედავად იმისა, რომ ეს არის გმირები, მათ აქვთ უდევს რიცხვითი წარმომადგენლობა დაწყებული 0 და აპირებს off მეშვეობით, თუმცა ბევრი რამ აქ, 20 ან იმდენად, ან 30 ან 40, ​​იქნებ. CONNOR HARRIS: როდესაც ჩვენ გვაქვს მონაცემები ტიპის რომ derives-- რომ სიტყვით "deriving--" გარკვეული ტიპის კლასი, ეს იმას ნიშნავს, რომ შემდგენელი შევეცდებით მშენებლობა რაღაც ავტომატურად. ასე რომ, შესაძლოა თქვენ გსურთ განსაზღვრავს ხარისხის განსხვავებულად. თქვენ გვინდა, რომ განსაზღვროს C მკვეთრი როგორც ტოლია D ბინა, მაგალითად. ამ სამშენებლო აქ, მე არ ვფიქრობ, C მკვეთრი და D ბინა ტოლფასი იქნება, იმიტომ, რომ შემდგენელი ავტომატურად ამბობენ, ყველა სხვადასხვა შესაძლო მნიშვნელობა განსხვავებით ყველა სხვა. ასე რომ, ეს შესაძლებელია override ნაგულისხმები შესრულება ამ ტიპის კლასების. ისევ და ისევ, შევხედოთ მითითება, თუ თუ გსურთ შეიტყოთ შესახებ. STEPHEN KREWSON: და აქ, ფაქტობრივად, ამ ყველაფერს იყოს სასარგებლო, როდესაც ჩვენ კოდი მოგვიანებით. ჩვენ ვხედავთ, ზოგიერთი infix ოპერატორები რიგითი შემადგენლობა, პარალელურად შემადგენლობა, და ასე მეოთხე, ეს დადებითი და თანაბარი ნიშნები გარშემორტყმული colons. ეს ნიშნავს, რომ ჩვენ შეუძლია ამ სხვადასხვა მუსიკალური primitives ერთ შემდეგ სხვა. ეს არის რიგითი შემადგენლობა. ან ჩვენ შეგვიძლია ითამაშოთ მათ პარალელურად, ამავე დროს. ასე რომ, მე შეიძლება ჰქონდეს მუსიკალური ღირებულება, და შემდეგ ეს უდრის და წერტილის, infix პარალელურად შემადგენლობა ოპერატორი, და ითამაშოთ მათ, როგორც ერთგვარი აკორდი. და ჩვენ ვაპირებთ გამოვიყენოთ როდესაც ჩვენ გავაერთიანებთ ჩვენი drum ნაწილი ჩვენი პატარა Frere ჟაკ სიმღერა უნდა ითამაშოს ამ ორ კონკრეტულ მუსიკალური ღირებულებების ამავე დროს. Currying is-- Curry გასულ ასახელებს ჰასკელი Curry, რომელიც Haskell სურათი სახელობის. ეს საშუალებას გვაძლევს ლამაზი ელეგანტურობა, როდესაც ჩვენ წერა ყველა ამ სხვადასხვა ფუნქციები და ფილტრები, რომ ჩვენ იქნება რუკების მეტი ჩვენი სიები. ფუნქცია ორი არგუმენტი f x და y-- შეიძლება წარმოდგენილია როგორც ვ x მიმართა y. ასე რომ, ეს ფუნქცია ერთი არგუმენტი, რომ ბრუნდება სხვა ფუნქცია ერთი არგუმენტი. ეს ნიშნავს, რომ ჩვენ შეგვიძლია რუკაზე ფუნქცია ვ x ზე სია y. CONNOR HARRIS: გინდა მაგალითია ეს? STEPHEN KREWSON: ჰო. მე მაქვს მაგალითად უფლება აქ ზოგიერთი რამ ჩვენ წერენ. ასე რომ იმეორებს 2- კარგად, იმეორებს მიიღებს ერთ-ერთი ღირებულება, რომელიც არის, თუ რამდენი ჯერ იმეორებს რაღაც, და მაშინ იგი მიიღებს value-- ჩვეულებრივ სიაში ან რამე. ასე რომ, აქ, ჩვენ რუკების იმეორებს 2 მეორეზე სიაში. ასე რომ, თუ ჩვენ განვსაზღვრავთ იმეორებს 2, თუ ჩვენ იმეორებს 2 ვრცელდება პირველი ელემენტი ამ სიაში და ეს სიები მუსიკალური phrases-- იქნება ორი "თქვენ sleeping--" ასე რომ, გძინავს, გძინავს. ასე რომ, ახლა ჩვენ გვაქვს ორი. მაგრამ იმეორებს იღებს ორ არგუმენტები, არამედ იმიტომ, რომ ჩვენ currying და შემდეგ რუკების, ჩვენ შეგვიძლია იმეორებს 2 , რომელმაც უკვე დაბრუნდა როგორც ფუნქცია ერთი არგუმენტი უბრალოდ გამრავლების ორჯერ. და მაშინ ჩვენ მსჯელობა, რომ ყოველი ელემენტი ამ სიაში ფრაზები. და concat არის Haskell ოპერაცია flattening სიაში. იმის გამო, რომ იმეორებს 2 წარმოების სია სიები. და ეს არის ამ შუალედური ფორმა აქ. და ასე შემდეგ, ჩვენ შეგვიძლია concat ან flatten რომ ორჯერ. CONNOR HARRIS: მარტივი მაგალითია currying, თუ გსურთ მოსწონს წარმომიდგენია f მხოლოდ გამრავლება ფუნქცია, რომელიც იღებს ორი არგუმენტი და ბრუნდება მათი პროდუქტი. ასე რომ, თუ თქვენ გაქვთ f 4, 5, ეს 20. მაგრამ თქვენ შეგიძლიათ წარმოიდგინოთ, რომ ეს also-- თქვენ გაქვთ ფუნქცია f 4 რომ იღებს არგუმენტი და ანაზღაურება ოთხჯერ ეს არგუმენტი მხოლოდ ნაწილობრივი პროგრამა, რომელიც მხოლოდ ერთი არგუმენტი 4. და თუ შესანახი ვ 4 5, რომელიც მოგცემთ 20. და ეს არის მარტივი მაგალითია currying. ეს, როგორც წესი, ერთი სახელმძღვანელოს მიიჩნიეს. STEPHEN KREWSON: ლამბდა გამონათქვამები და ანონიმური ფუნქციები კიდევ ერთი Haskell ნიშანთვისებად. ასე რომ, თუ ჩვენ უნდა whip მდე პატარა ფუნქციის ცხოვრება იმეორებს, მაგრამ ამბობენ, რომ ეს არ არის სტანდარტული ბიბლიოთეკა, ჩვენ შეგვიძლია გამოვიყენოთ სინტაქსი მსგავსი შემდეგ. და ჩვენ დასრიალებენ ეს. ერთი რამ დაინახავთ ბევრი იმ ბარაბანი მანქანა არის ჩვენ მიღების ზარები რაღაც მოუწოდა ფილტრი, რომელიც, როგორც ადრე, არის რუკების ფუნქცია მეტი სიაში, მაგრამ ეს რუკების ლოგიკური ფუნქცია. ასე რომ, ჩვენ აქ მაგალითად ერთი ანონიმურად განსაზღვრული ლოგიკური ფუნქცია, რომელიც უბრალოდ იღებს რამდენიმე ღირებულებებს. ეს არ არის მკაცრად რომ ვთქვათ, ანონიმური ფუნქცია. მაგრამ ეს განსაზღვრავს ერთად რომ სინტაქსი სიმამაცის და ეს მხოლოდ იღებს x მოდულის N-- CONNOR HARRIS: ჰო. ასე რომ, f ფუნქცია ორი არგუმენტები n და p რომ ბრუნდება ფუნქცია, რომელიც თვითონ არის ფუნქცია ერთი არგუმენტი, კერძოდ x. STEPHEN KREWSON: I აღნიშნული infix ოპერატორები. რა infix ოპერატორები? ისე, infix ოპერატორები არიან ნორმალური გზა წარმოვადგენთ ოპერაციები, ამბობენ, mathematics-- 2 plus 2 ნაცვლად ოპერატორი პლუს და შემდეგ ორი არგუმენტი 2 და 2. CONNOR HARRIS: ეს ე.წ. უკუ პოლონეთის ნოტაცია, რომელიც ტერმინი არამგონია თქვენ რომ იცით. STEPHEN KREWSON: მარჯვენა. უკუ polish ან პრეფიქსი ნოტაცია. მაგრამ Haskell გადაწყვიტა გამოყენება infix ოპერატორები. ასე რომ, ეს არის რამდენიმე საბაჟო პირობა, რომ განისაზღვრება, რომ Euterpea DSCL in Haskell. ასე რომ, ეს იყო რიგითი შემადგენლობა. ეს იყო პარალელურად შემადგენლობა, და ეს იყო truncating პარალელურად შემადგენლობა. და ჩვენ გვჭირდება, რომ ჩვენი ბარაბანი მანქანა, იმიტომ, რომ ჩვენ ვიყენებთ ბოლო ოპერატორი, რომ პატარა tuple არსებობს ითამაშოს ბარაბანი მანქანა ერთად ჩვენი Frere ჟაკ სიმღერა. ჩვენი ბარაბანი მანქანა არის იქნება უსასრულო. უბრალოდ თამაშობს სამუდამოდ. მაგრამ Frere ჟაკ სიმღერა არ არის. ეს არ არის, რომ ხანგრძლივი. ეს მხოლოდ რამდენიმე ბარები. ამიტომ, ჩვენ უნდა შეწყვიტოს ბარაბანი მანქანა კი მოკლე მუსიკალური ღირებულება გააჩნია ბოლომდე. და რომ infixed ოპერატორი სუპერ სასარგებლო, რომ. და infix notation მოსწონს ეს არის ერთგვარი ლამაზი, იმიტომ, რომ ვთქვათ თქვენ გაქვთ ფუნქცია, როგორიცაა პასუხის, რომელშიც მთელი განყოფილება საქართველოს x რაღაც else-- ვწუხვარ, რომ უნდა იყოს და ბ. თქვენ ვერ წერენ, როგორც ციტირებით ბ. ასე რომ, თუ put-- ელემენტს კიდევ ერთი მაგალითი ამ. x ელემენტს გარკვეული სია, თუ დააყენა იგი Backticks, შეგიძლიათ გამოიყენოთ იგი. მიუხედავად იმისა, რომ ეს არ არის სიმბოლო როგორც პლუს ან მინუს და ჯერ, თქვენ შეგიძლიათ გამოიყენოთ სახელი ფუნქცია, როგორიცაა, რომ Backticks როგორც infix ოპერატორი, რომელიც არის საკმაოდ გრილი. CONNOR HARRIS: ისევ, ეს არის ყველა მხოლოდ სინტაქსური შაქარი, ნამდვილად. იგი არ ახდენს ძირითადი ენაზე. STEPHEN KREWSON: ასე რომ, ჩვენ აქ ბოლო ფრაზა ჩვენი Frere ჟაკ სიმღერა, მე ითამაშა რამდენიმე პატარა აკორდები ან მესამედი გამოყენებით პარალელურად შემადგენლობა ოპერატორი. ეს არის კიდევ ერთი გზა ამბობდა ზოგიერთი რა ჩვენ უბრალოდ ამბობდა. ასე რომ თქვენ შეგიძლიათ განვსაზღვრავთ ფუნქციები ერთ-ერთი არგუმენტი სიები. CONNOR HARRIS: ისევ, ცნობარი ამისთვის Haskell-- გაცნობითი სახელმძღვანელოები მოუწევს ყველა ამ იგი. STEPHEN KREWSON: ასე რომ, აქ არის საკმაოდ გასაღები ხაზი ნაბიჯი sequencer ჩვენ შევხედოთ გამოყენებით სია გააზრებას. და ჩვენ ვხედავთ, აქ რომ ელემენტს ფიქსირებული ოპერატორის უკან შეთავაზებები. ასე რომ, თუ x არის ელემენტს სია x-ს, მაშინ ჩვენ მოვუწოდებთ up perc ფუნქციები. ასე რომ, perc მხოლოდ პერკუსია ფუნქცია. იგი იღებს გარკვეული მნიშვნელობა p, რომ ნაწილი შემოსაზღვრული კომპლექტი ყველა სხვადასხვა პერკუსია ხმები რომ ვნახეთ წინა slide, და მაშინ ის იძლევა, რომ ხანგრძლივობა კვარტალში შენიშვნა. სხვაგან იგი აძლევს QNR და QNR მხოლოდ მეოთხედი შენიშვნა დანარჩენი. ასე რომ, ეს მშენებლობაზე რაღაც ლამაზი. ჩვენ გვყავს სიაში ელემენტები, და ჩვენ გამოგიგზავნით მარყუჟის მეტი ზოგიერთი სიაში ერთი მაქსიმალური ღირებულება ჩვენი ნაბიჯი sequencer. ხოლო როდესაც ჩვენ კონკრეტულ i in რომ სიაში ერთი max ღირებულება, იმ შემთხვევაში, თუ ის, რომ მე წევრია ეს კომპლექტი ის ამ ფუნქციას, კარგად, მაშინ ჩვენ ჩართოთ იგი შევიდა პერკუსია შენიშვნა. წინააღმდეგ შემთხვევაში, ჩვენ უბრალოდ ითამაშოს დანარჩენი, რომელიც რომ ვთქვათ, ჩვენ უბრალოდ დარჩეს ჩუმად. ჩვენ ვხედავთ, რომ ამ ამ სიაში გაგების სინტაქსი, x არის დასახლებული ეს სია აშენებული ერთი გლობალური ზომა sequencer. CONNOR HARRIS: ჰო. ძირითადი სინტაქსი სია comprehensions არის bracket, ღირებულება ჩართვის ზოგიერთი ცვლადის, ბარი, შესაძლებელი ღირებულებების ცვლადები თავად, დახურული ფრჩხილი. და თუ ვაკეთებ მითითებული მშენებელი notation ნებისმიერი სახის მათემატიკის კლასის, თქვენ ალბათ მითითებული 2n ასეთი რომ n ან N არის z. მსგავსი რამ ამ ნოტაცია იგულისხმება, რომ იყოს დამაფიქრებელი რომ მათემატიკის ნოტაცია. STEPHEN KREWSON: თქვენ შეუძლია ვრცელდება სხვადასხვა პრედიკატებს და მრავალი ფილტრები სია გააზრებას, რომელიც საკმაოდ ლამაზი. ალგებრული types-- ჩვენ არ linger ხანგრძლივი აქ. იქ არ არის კარგი ცნება Haskell ან კარგი, ცხადია, ცნება როგორ უნდა მიიღოს, ვთქვათ, ძირითადად პარამეტრების ფუნქცია ან რამე. In Python, ეს არის საკმაოდ მარტივია. შეგიძლიათ უბრალოდ ვთქვა, უდრის on დეკლარაციის ფუნქცია, ნაგულისხმები ღირებულება საქმე არც მიეწოდება. Haskell, თქვენ შეიძლება იქნებ გამოყენება, შესაძლოა, შესაძლოა, ტიპის, რომელიც იღებს ან არაფერი ან მნიშვნელობა ტიპის მხოლოდ. ასე რომ, ჩვენ გამოეყენებინათ ეს ბარაბანი მანქანა საშუალებას გვაძლევს სურვილისამებრ მოცულობა პარამეტრების თითოეული ბარაბანი ნაწილები. ასე, რომ გვაძლევს გზა, რომელსაც EQ ან მოცულობა კონკრეტულ არხზე. CONNOR HARRIS: In სხვა Haskell მაგალითები, თქვენ შეიძლება ნახოთ შესაძლოა გამოყენებული ფუნქციები, რომელიც შეიძლება ვერ. ეს არის საერთო ერთ. STEPHEN KREWSON: თქვენ შეგიძლიათ მიაწოდოს გარკვეული შეცდომა, როგორც default. და ეს განსაკუთრებით მოსახერხებელია, როდესაც თქვენ აკეთებთ I / O Haskell. ეს შეიძლება იყოს ხრიკები. CONNOR HARRIS: ან მსგავსი მაგალითად, ვფიქრობ, ფუნქცია, რომელიც მოიცავს სამმართველოს პარამეტრი, რომელიც შეიძლება იყოს 0. და რომ ფუნქცია შეიძლება დაბრუნდეს იქნებ რასაც. ასე რომ, თუ იქ არ არის გაყოფის 0, იგი დაბრუნდება უბრალოდ რასაც. და თუ არ არის გაყოფის 0, დაუბრუნდება არაფერი როგორც გზას, სასიგნალო შეცდომა. იმის გამო, რომ ერთ-ერთი შედეგი Haskell ძალიან მკაცრი აკრეფა ის არის, რომ არ არსებობს real-- გამონაკლისი უხერხულ, ძირითადად, შეცდომა გატარება უხერხულია. ეს არის ერთ ერთი ძალიან გავრცელებული გზა ამის გაკეთება. STEPHEN KREWSON: ახლა მივიღებთ სხვა გონება- bending რამ შესახებ Haskell, რომელიც ნიმუში შესაბამისი და ფუნქცია განმარტებები. მე აჩვენა, თუ ბოლო აასრიალეთ დეკლარაცია, ნაბიჯი თანმიმდევრობით ფუნქცია, რომელსაც, შესაძლოა, ღირებულება, მაშინ int, მაშინ სიაში ints, შემდეგ ბრუნდება თანმიმდევრობა მუსიკა ღირებულებები არსებობს ანოტირებული როგორც მოედანზე და მოცულობა. ასე რომ, იმ სამი არგუმენტი შეიძლება იყოს ნიმუში შესაბამისი შემდეგ გზა. და ჩვენ ყოველთვის გვინდა, რომ რა თქმა უნდა ამის ბაზის შემთხვევაში ან გასვლის შემთხვევაში პირველი. და ეს ხაზს უსვამს შეგიძლიათ უბრალოდ უნდა განიმარტოს, იმას ნიშნავს, რაიმე მნიშვნელობა, რომ ის არსებობს. ასე რომ, თუ ჩვენ მიიღოს ზარი ნაბიჯი თანმიმდევრობით ერთად გარკვეული მნიშვნელობა, სხვა ღირებულება, და შემდეგ ცარიელი სიაში, რაც ჩვენ გვინდა დაბრუნებას მხოლოდ დუმილი, დანარჩენი 0. და ნაცვლად, რომ უკვე ცარიელი სიაში ან 0, ის დანარჩენი 0, იმიტომ, რომ ჩვენ საქმე მუსიკა ტიპის, და ცარიელი სიას მუსიკა ტიპის მხოლოდ დანარჩენი არ ხანგრძლივობა. ეს არ არის მუსიკა. და მაშინ ჩვენ ვხედავთ, თუ კიდევ ნაბიჯი თანმიმდევრობით ერთად v მოცულობა არგუმენტი, p for precaution ინსტრუმენტი არგუმენტი, და მერე სია x. მაშინ ჩვენ გავაკეთოთ რაღაცები. კერძოდ, ვრცელდება ამ სიაში გააზრებას, და ჩვენ შეასრულოს გარკვეული ოპერაციების იქნებ მნიშვნელობა გადაქცევას რიცხვითი მნიშვნელობა, ისე, რომ ეს შეიძლება მაშინ ჩამოთვლილი და გამოიყენება აირჩიოთ ინსტრუმენტი. ისევ და ისევ, ეს არის პატარა ცოტა განზრახ inconcise უბრალოდ უნდა ნახოთ ყველა უცნაური რამ შეგიძლიათ გააკეთოთ Haskell, როგორც თქვენ შევხედოთ საკუთარ დროს. კარგი. ასე რომ, ჩვენ საბოლოოდ მისაღებად უნდა რა ჩვენ შეიქმნა იმისათვის, რომ გავაკეთოთ, რომელიც, რათა რამდენიმე კომპიუტერი მუსიკა. ამიტომ, ჩვენ ვაპირებთ ცდილობენ რათა Frere ჟაკ სიმღერა. ასე რომ, არსებობს, თუ რამდენი ფრაზები Frere ჟაკ? ოთხი. შესანიშნავი. და რა ლამაზი არის, რომ ისინი ყველა განმეორდეს იგივე რაოდენობის ჯერ, რომელიც ორი. ასე რომ, ჩვენ გვაქვს ოთხი ფრაზები თითოეულ გაიმეორა ორჯერ. კერძოდ, ისინი რაუნდი. და არსებობს მრავალი, ბევრი განხორციელების გზები მრგვალი, რომელიც შეიძლება fun უნდა გააკეთოს. მე ვაკეთებ ეს საკმაოდ მარტივი გზა აქ, რომელიც მხოლოდ იმიტომ, რომ construct-- ხაზი ფუნქცია იღებს სიაში მუსიკა ღირებულებები და გამოდის, რომ ეს რიგითი შემადგენლობა გამოყენებით, რომ რიგითი შემადგენლობა ოპერატორი. და მერე გადადება სხვადასხვა კუთხეში მიერ მიღების მათ დაიწყოს დანარჩენი. ასე რომ, მე იწყება დანარჩენი ორი ღონისძიებები, და შემდეგ დანარჩენი ოთხი ზომები, და შემდეგ დანარჩენი ექვსი ზომები, და შემდეგ ტურში მუშაობს, როგორც ვიცით ეს სიმღერა. ჩვენ ვხედავთ, ორი ანოტაციები და მოდიფიკაციები მუსიკა ღირებულებები რომელიც შეიცავს ამ რიგითი მოწყობა მუსიკალური ელემენტები. ჩვენ გვყავს დამატებითი მოცულობა. ეს არის ფუნქცია ანოტირების მუსიკა კონკრეტული მოცულობის. ეს არის კარგი მაგალითი ერთი MIDI სიგნალი გაშვებული 0-დან 127-შვიდი ბიტი ინფორმაცია, რომელიც შეიძლება განხორციელდეს. ხოლო შემდეგ ჩვენ ვნახეთ, რომ ძალიან მოკლედ, მაგრამ ზოგადი MIDI სიაში ყველა სხვადასხვა ინსტრუმენტები. და იქ არ არის მთელი ბევრი მათგანი. თუ თქვენ იყენებთ ციფრული აუდიო Workstation, ისევე როგორც Ableton Live და Pro Tools, არ არის წარმოუდგენლად ფართო სპექტრი სინთეზატორი და VST ინსტრუმენტები. მაგრამ MIDI სტანდარტს აქვს რამდენიმე, ან რამდენიმე ათეული. და ზოგიერთი მათგანი სასაცილოა. მე ვფიქრობდი, რომ ეს იქნება სახალისო, თუ ჩვენ ითამაშა ინსტრუმენტი, MIDI ინსტრუმენტი ვერტმფრენი, და შემდეგ შემდეგი გზას რაუნდი, ჩვენ გავაკეთეთ pad Synth, და შემდეგ ამ corny ტყვიის მოედანზე ტალღა Synth, და შემდეგ დააფიქსიროს ooze, რომლებიც ცოტა გაურკვეველი ჩემი ცუდი MIDI სინთეზატორი, მაგრამ ისინი OK. და შემდეგ ჩვენ ვხედავთ ამ let და სინტაქსის Haskell, და მაშინ ჩვენ ვთამაშობდი ყველა ეს ნაწილები ერთად პარალელური შემადგენლობა ოპერატორი. და ჩვენ შეგვიძლია ალბათ აჩვენებს რაღაც ამ. აი კოდი. და თქვენ შეგიძლიათ ნახოთ, C, არსებობს მინდა იყოს ბევრი ყელის გაწმენდის და გარემოში მაგიდაზე კოდი სანამ შეიძლება, მუსიკა მოსწონს ეს. ან ნებისმიერი სხვა პროგრამირების ენის, თქვენ ალბათ უნდა შეარჩიონ გარკვეული ბიბლიოთეკა და API და მოაწყეს, და მაშინ ნეტავ უნდა გაწმენდა. მაგრამ აქ Haskell, ვფიქრობ, კიდევ ერთხელ თქვენ შეეგუონ მას, ძალიან იკითხება და ძალიან გამომხატველი. ასე რომ, არ არის განხორციელება საქართველოს Frere Jacques. კარგი. ახლა ჩვენ გვინდა, რომ დაამატოთ პერკუსია, და ეს არის ცოტა მძიმეა. მოდით შევხედოთ სლაიდები. ასე რომ დიდი იდეა არის ის, რომ bunch of სიები და ნაწილები. იმ roll-მანქანებში, არსებობს ჩვეულებრივ შესახებ შესაძლოა, რვა 10 რიტმს ან პერკუსია ნაწილები. და შემდეგ გამოიყენოთ bunch of ტექნიკა. და ჩვენ ვისაუბრეთ these-- გამოყენებით folds, ფილტრები, ლამბდა ფუნქციები, დატანილი მეტი სიები გენერირება ღირებულებები ზოგიერთ სპექტრი 1 R, R 16, ან 32 ნაბიჯები sequencer. და მაშინ, თუ არსებობს მნიშვნელობა ამ სიაში როგორც ჩვენ გადის sequencer, გადის, რომ მეტი და მეტი, გამოდის, რომ შენიშვნა, და რომ ნიმუში იღებს გამოიწვია. აქ არის ყველა განსხვავებული უცნაური გზები გამოვიდა გენერირება აღნიშნავს. სცადეთ თქვენი საკუთარი ნახევრად თანხა. ეს თქვენ ჟღერს cool. დრო ნებართვების, ჩვენ გაიაროს ეს. მაგრამ ახლა, ვფიქრობ, ჩვენ უნდა დემო რა გვაქვს. იმედი ვიქონიოთ, რომ ეს მიდის OK. ასე რომ, ეს არის GHCI. და ჩვენ გადაწეროთ ფაილის მაქვს ე.წ. song.lhs, რომელიც ფაილი უბრალოდ აჩვენა თქვენ. OK, დიდი. როგორც Connor ხნის წინ განაცხადა, რომ ეს შედგენილი, ის ტიპის შეამოწმა, ასე რომ, მე ვერ ვსუნთქავ ბევრი ადვილია. ის არ აპირებს აფეთქება ჩემზე. მე მინდა გაჩვენოთ რაღაც სასარგებლო. თქვენ ხედავთ, რომ მოდული დატვირთული მოუწოდა 50. თქვენ შეგიძლიათ დაათვალიეროთ, რომ მოდული. ეს არ არის ლამაზი შესახებ აკეთებს იქნებ რა ვაკეთებთ Haskell არ არის მოუწოდა პროგრამული უზრუნველყოფის დამუშავება, მაგრამ შეგიძლიათ ამის ბევრი fun stuff თქვენი საკუთარი. და სამუშაოს მართლაც ლამაზი შედარებით ბევრი სხვა ენებზე, იმიტომ, რომ თქვენ ხედავთ ძალიან იკითხება გზა, რა ხდება. ასე რომ, ჩვენ ვხედავთ, რომ ჩვენ ყველა ეს ფრაზები, რომელიც სიები მუსიკა მოედანი, და მაშინ ჩვენ ავაშენოთ ეს შევიდა რაღაც უფრო დიდი, რომელიც მუსიკა სიმღერა. ეს არის მუსიკალური ერთეული. და მაშინ ჩვენ შეუძლია ამ ყველა ფუნქცია მოუწოდა პიესა მუსიკა. თქვენ ხედავთ, რომ ქვემოთ აქ. რომელი ითამაშებს. მე უნდა ვთქვა, მე არ საუბრობენ ამ დოლარის ნიშანი, რომ ის ყველგან არის. დოლარის ნიშანი არის კიდევ ერთი infix ოპერატორი. მაგრამ მას აქვს ყველაზე დაბალი პრეცენდენტის ნებისმიერი ოპერატორი, რომელიც ეფექტურად იმას ნიშნავს, რომ ყველაფერი მარცხენა დოლარის ნიშანი და მარჯვნივ დოლარის ნიშანი, ჩვენ ვაპირებთ, უნდა შეფასდეს იგი. ასე რომ, ეს არის ერთგვარი, როგორც სხვა გზა დასძინა ფრჩხილებში. CONNOR HARRIS: ეს, ძირითადად, ფუნქცია შემადგენლობა. და ეს იმას ნიშნავს, რომ თქვენ არ ჰქონდეს, თუ თქვენ ფუნქციები, ორივე მხარეს და infix ოპერატორები ორივე მხარეს, ისინი არ ასოცირებული მასშტაბით და გაძლევთ მოულოდნელი შედეგი. STEPHEN KREWSON: ასე რომ, ჩვენ can-- გამოყენებით, რომ ჩვენ შეგვიძლია მოვუწოდებთ. პირველ რიგში, ჩვენ ითამაშოთ გარეშე დასარტყამები. ეს არის ის, ვერტმფრენი, , MIDI ვერტმფრენი. [მუსიკის დაკვრა] იქ მოედანზე ტალღა. ხმა ooze. და თქვენ ნამდვილად ველური ამ. მე აიყვანეს საკმაოდ მარტივი, რადგან ვიცოდი, არ უნდა bite off მეტი, ვიდრე მე შეიძლება საღეჭი. უბრალოდ შეინახოს იგი საკმაოდ მარტივია დავანახოთ ძირითად იდეებს. მაგრამ მერე იყო, რომ ჩვენ მიიღო, რომ დაამატოთ ზოგიერთი დრამი ეს. მხოლოდ იმიტომ, რომ ეს არის ცოტა impenetrable, და მე არ გამოიყენოს ასახელებს ბარაბანი ნაწილები, მე დატანილი them-- იმიტომ, რომ ისინი ნაწილი, რომელიც ჩამოთვლილ კლასი, მე დატანილი მათ ints. ჰგავს ბასი drum. Zero არის ასევე. Seven მაღალი ქუდი. და ქვემოთ აქ, სადაც ფუნქციები ცოტა უფრო შემთხვევითი, ეს არის, როგორც conga დასარტყამები. ასე რომ, თუ თქვენ ფიქრობთ ამაზე, შესაძლოა, გართობა გზა განახორციელოს ბარაბანი მანქანა გამოყენება ძალიან მოწესრიგებული ნიმუშების თქვენი ბას drum. ასე მაგალითად, ფილტრაცია მეტი სიაში ყველაფერი, რაც აძლევს უკან 1 როდესაც ის მიღებული მოდული 04. ასე რომ მე 1, 5, 9, 13, 17-- ასე რომ ეს პირველი დარტყმაა ყველა ღონისძიება. და შემდეგ ეს არის იგივე რამ გადაინაცვლებს ორი ნაბიჯი. ასე რომ, offbeat. ასე რომ, ეს იქნება რაღაც მაღალი ქუდი. და მერე ისევ, აქ ქვემოთ, ეს არის პატარა შემთხვევითი, იმიტომ, რომ ჩვენ ვაკეთებთ conga დასარტყამები. და მაქვს გარკვეული maracas ქვემოთ აქ, ძალიან. ასე რომ, მე ვერ ვუწოდებ პიესა ბარაბანი მანქანა, მაგრამ ეს არ გაგრძელდება, და ეს შეიძლება დაიწყოს grabbing up ყველა მეხსიერების ჩემი სისტემა. ასე რომ, მე მოვუწოდებ ამ ფუნქციის ითამაშოს მუსიკა, რომელიც, როგორც ვნახავთ, გამოიყენოთ truncating პარალელურად შემადგენლობა ითამაშოს ჩვენი პატარა Frere ჟაკ სიმღერა ერთად ამ უცნაური ბარაბანი მანქანა. მოდით შევხედოთ. და გთხოვთ გაუმჯობესება ჩემს მოწყობის ყველა ბარაბანი ნაწილები. არ არის ჩემი სპეციალობით, მაგრამ მე მქონდა ბევრი fun ვაკეთებთ. [მუსიკის დაკვრა] ასე რომ, რა თქმა უნდა, ეს ყველაფერი ცოტა არ არის, როგორც fun თუ ჩვენ არ შეგვიძლია გარდაქმნას იგი რომ ანგარიში, ასე რომ, შესაძლოა, ეს შეიძლება განიმარტოს, ადამიანის შემსრულებელი. ასე რომ, მე არ აწარმოებს აქ. მე უკვე გამომუშავებული ფაილი. თქვენ ხედავთ, რომ არსებობს dot LilyPond ფაილი და ეს იქნება ჩემი segue მეტი Connor-- და dot MIDI ფაილი, და dot PDF ფაილი, რომელიც არის ის, რაც LilyPond საბოლოო ჯამში გენერირება. მაგრამ ეს არის ის, სკრიპტები, და მე მხოლოდ აწარმოებს მათ დახმარებით ვარიანტი. თუ თქვენ ამ და გაშვებული Euterpea, თქვენ შეიძლება MIDI ფაილი. და მაშინ, MIDI ფაილი ამ MIDI 2LY პროგრამა, თქვენ შეგიძლიათ გენერირება ლილი Pond ფაილი, და მაშინ შეგიძლიათ გენერირება PDF ანგარიში. და ჩვენ უნდა შევხედოთ ეს. ასე რომ, Connor სავარაუდოდ ნახოთ თუ როგორ უნდა ანოტირების ეს უკეთესია, მაგრამ ეს არის Frere ჟაკ როგორც გამომუშავებული ჩემთვის Euterpea. ეს მხოლოდ C. მე უნდა figured გაირკვეს, თუ რა hack ეს რეალურად. მაგრამ ეს არის მილსადენის თუ როგორ გავაკეთოთ, რომ, რომ. მოდით ვისაუბროთ უფრო მეტი LilyPond. CONNOR HARRIS: OK ვნახოთ. თუ ვთქვათ გაიგეთ თქვენ Haskell? STEPHEN KREWSON: Oh yeah. შეამოწმეთ ვისწავლოთ თქვენ Haskell. ეს არის ამ რესურსების. აი, როგორ დავიწყე სწავლა, და ეს არის დიდი. მითუმეტეს, სწავლება. CONNOR HARRIS: ასე რომ, ონლაინ რეჟიმში. ასე რომ, ბიჭი სახელად [INAUDIBLE] learnyouahaskell.com, არ ფართები. გრამატიკა არის ავადმყოფი. STEPHEN KREWSON: ეს ილუსტრირებული, ძალიან. CONNOR HARRIS: რა არის LilyPond? ეს არის დეკლარაციული პროგრამირების ენის მუსიკალური ტიპოგრაფიული. ასე რომ, declarative-- შეგიძლიათ ვფიქრობ, რამ, როგორიცაა HTML, სადაც თქვენ არ ამბობდა HTML არ უთქვამს, თუ როგორ ბრაუზერების უნდა გაწევა გვერდებზე ეტაპობრივად. უბრალოდ ვამბობ, რომ ეს არის ტექსტური აღწერილობა რა გსურთ გვერდზე გამოიყურებოდეს. და მაშინ ის ასევე პროგრამა რომელიც ადგენს ამ ენაზე, ან წაიკითხეთ და შემდეგ, ფაქტობრივად, არ ტიპოგრაფიული თქვენთვის, და ეს spits out ამ შესანიშნავი ეძებს PDF ქულით. ასევე შეგიძლიათ PNG ფორმატში, ან რასაც. კარგი გზა ვფიქრობ, ეს არის ანალოგიით ის არის, რომ ლატექსის არის ერთგვარი მოსწონს LillyPond, მაგრამ უბრალოდ ტიპოგრაფიული. ასე რომ, ნაცვლად of-- ეს არ არის WYSIWYG, რას ხედავთ რა არის თქვენი, როგორც, ვთქვათ, Finale, ან სიბელიუსი, ან Microsoft Word, სადაც შეგიძლიათ აკრიფოთ რეალურ დროში და პროექტი რამ რეალურ დროში და ცვლილებები მომენტალურად. ეს არის ტექსტი დაფუძნებული. თქვენ უნდა შეადგინოს თქვენი ქულების გამოყენებით ცალკე პროგრამა და გავიდნენ PDFs შემდეგ. ეს არის ცოტა ნაკლები მოსახერხებელია გამოყენება თუ თქვენ ცდილობს დაწეროს პირდაპირ შევიდა ანგარიში და თქვენ ცდილობს შესაქმნელად კომპიუტერში. მაგრამ არსებობს ბევრი უპირატესობა მას. ერთი, ეს არ გამოიყურება ბევრი გავალამაზოთ, იმიტომ, რომ LillyPond შეგიძლიათ რეალურად მიიღოს დრო, რომ გავაკეთოთ განლაგება გადაწყვეტილებას სწორად, განსხვავებით სიბელიუსი ან Finale, რომელსაც აქვს რათა სარისკო ალგორითმები ისე, რომ მათ შეუძლიათ ცარიელია რამ რეალურ დროში. რატომ არის LilyPond-- კომპიუტერული გრაფიკა რთულია. თუ თქვენ აკეთებს არაფერი მუსიკა და გსურთ დაწერა ქულა, თქვენ არ მინდა დაწერა გარეთ ყველაფერი საკუთარ თავს დაწყებული როგორ დავხატოთ უფროსების და როგორ უნდა მიაპყროს რვეულები. ეს ძალიან რთულია. ეს გაკეთდა ადრე. თქვენ ჯარიმა. თუ გსურთ გამოიყენოთ Finale და სიბელიუსის, ფორმატის იმ რამ, ძალიან რთული, და თქვენ არ შეუძლია ნამდვილად მათი გამოყენება პროგრამულად. თქვენ შეგიძლიათ გახსნათ სიბელიუსი ერთად Finale და გადადით ფაილი, ექსპორტი PDF თავს, მაგრამ თქვენ ვერ მოვუწოდებთ, რომ სკრიპტის. LillyPond, შეგიძლიათ დარეკოთ იმ სკრიპტები. თქვენ ადვილად iterate LillyPond ერთად ლატექსის. მე არ აქვს, რომ ბევრი დრო, რომ წავიდეს შევიდა ამ ტექნოლოგიების ახლა, მაგრამ ისინი არსებობენ. თუ გსურთ გამოიყურება შევიდა LillyPond წიგნი, ეს არის პროგრამა, რომელიც მოდის თქვენი LillyPond განაწილება, და ის iterating LillyPond ფრაგმენტები ლატექსის თუ გვინდა, რომ რამე როგორც დიდი მუსიკისმცოდნეობის დოკუმენტი მაგალითები, მაგალითად. და ეს არის კარგი უნარი ცხოვრება, თუ რას აკეთებს არაფერი მუსიკა, არა მხოლოდ CS50. მე გამოიყენება LillyPond ყველა ჩემი შემადგენლობა პროექტები მას შემდეგ, რაც მე ვიყავი ძირითადად უფროსი საშუალო სკოლა. ასე რომ, აქ არის რამოდენიმე მარტივი მაგალითები. ეს არის ძირითადად წარმომადგენელი დონის სირთულის რომ ხალხი წინაშე იგი ისინი ცდილობდნენ გამოიყენოთ LilyPond მარტივი პროექტები. ეს პირველი არის დასაწყისში რომ chorale პრელუდია ბახი. ეს ქვემოთა არის ამონაწერი ერთი ჩემი საკუთარი ნამუშევრები, და ეს მხოლოდ იქ უნდა ნახოთ თუ რამ, როგორიცაა [INAUDIBLE] აყენებს მრავალჯერადი ხაზები იგივე თანამშრომლები, როგორ ლირიკული undersetting მუშაობს. Lyric underlays არის ის, რომ ძალიან მარტივი LilyPond for საგუნდო მუსიკა. და ასე შემდეგ, კიდევ რამდენიმე რთული მაგალითები აქ. ეს ყველაფერი კეთდება LilyPond და ისინი შესაძლებელი. ეს პირველი ნაწყვეტი არის [INAUDIBLE] მიერ [INAUDIBLE]. და ეს [INAUDIBLE] ეხლა პიესა სოლო ბას ფლეიტა [INAUDIBLE], ვინ არის longtime-- რომელიც იყო დიდი ხნის წევრი მუსიკა დეპარტამენტის აქ, ვფიქრობ. მე არ ვარ დარწმუნებული, სადაც ის წავიდა off to. მაგრამ ის მრჩეველი ჰარვარდის კომპოზიტორთა ასოციაცია დიდი ხნის განმავლობაში. შესანიშნავი ადამიანი. და წერს რამდენიმე მუსიკალური, რომელსაც აქვს ძალიან რთული ნოტაცია, რომ LillyPond მაინც გაუმკლავდეს ძალიან ლამაზად. ასე რომ მხოლოდ გაძლევთ გრძნობა, თუ რა ეს ის შესაძლებლობები are-- ასე შინაგანი of LillyPond ძალიან რთული. თქვენ შეგიძლიათ გამოიყენოთ ეს დიდი ხნის განმავლობაში, მათ შორის, ზოგიერთი საკმაოდ რთული რამ გარეშე ნამდვილად რომელსაც ბევრი იციან მათ შესახებ. მაგრამ ძირითადი იდეა არის ის, რომ დაბალი დონე, ატომების LillyPonds არიან აღნიშნავს. შენიშვნები შეიცავს კონტექსტში მოუწოდა ხმა. ასე რომ, ხმა კონტექსტში ძირითადად შეესაბამება ერთი ხაზი პოლიფონია. და მაშინ კონტექსტში შეიძლება იყოს შეიცავს იერარქიულად უმაღლესი დონის პირობა, რომ წარმოადგენს უფროსების ქულა ან დიდი დაჯგუფებების, როგორიცაა ფორტეპიანო უფროსების ან გუნდი პერსონალი, და მაშინ საბოლოოდ მთელი ანგარიშით კონტექსტში. და თქვენ შეგიძლიათ რეალურად მოიცავს მრავალი ქულა წიგნი. და ყოველ კონტექსტში აქვს თანდართული engravers. თუ გადავხედავთ შინაარსი კონტექსტში და ბეჭდვა გარკვეული სიმბოლო ან გარკვეული კლასის სიმბოლოები, როგორც საჭიროა. ასე რომ, ყველა ხმა კონტექსტში, იქ [INAUDIBLE] აღნიშნავს ფრეზი, რომელიც ძირითადად ფუნქცია ან ობიექტი, რომელიც წერს, რომ ყველა შენიშვნა ხელმძღვანელები მარჯვენა კუთხეში გვერდი. მაშინ არსებობს მგლის ფრეზი, რომელიც წერს, ნაპრალები თანამშრომლებს. მაშინ არსებობს metronome mark ფრეზი, რომ წერს, რომ metronome ნიშნები ანგარიში. და ყველა ეს ჯდება საკმაოდ კარგად შევიდა იერარქიაში. და ეს ძალიან, ძალიან, ძალიან დააკონფიგურიროთ, რომელშიც თქვენ უნდა თუ გსურთ მიიღოთ რამ, როგორიცაა, რომ. ასე რომ, ყველა კონტექსტში აქვს ბევრი სხვადასხვა ატრიბუტები რომ თქვენ შეგიძლიათ შეცვალოთ ყველაფერი საწყისი ინტერვალი სხვადასხვა შრიფტი შერჩევის ზომის რამ. თუ გსურთ ამის გაკეთება კიდევ უფრო რთული რამ, იქ ჩადგმული სკრიფტინგის ენა. ისინი იყენებენ სქემა, რომელიც არის დიალექტი LISP. ეს, ალბათ, არ არაფერს ნიშნავს, რომ თქვენ. მაგრამ, ძირითადად, სქემა სხვა ფუნქციურ პროგრამირების ენა, მეტი ან ნაკლები. STEPHEN KREWSON: ჰალსტუხი-in. CONNOR HARRIS: ჰო. ეს არის კარგი ჰალსტუხი-ში, მე ვფიქრობ. და ის გამოიყენება, როგორც სწავლების ენა, რეალურად, ქვემოთ მასობრივი გამზ MIT. და ეს არის ძალიან მოსახერხებელი LillyPond სხვადასხვა ტექნიკური მიზეზების გამო. ასე რომ, თუ გსურთ, რომ მარტივი შესწორებები დამოკიდებული პირობით, განთავსების მაგალითად არსებობს გარკვეული მდგომარეობის ანგარიში, რომელიც შეხვდა, რათა ცვლილებები განლაგება ან whatnot-- შემდეგ იმ ობიექტების არსებობს. ისინი რთული. ასე რომ, აქ საკმაოდ მარტივია კოდი ნიმუში. ეს ხუთი ხაზები. ძირითადად, მე განსაზღვრის ორი პერსონალი. ეს არის 3/4. პირველი კადრების აქვს მიმაგრებული ტემპი გასვლის შემდეგ, მაგრამ ეს რეალურად აპირებს წასვლა მთელი ქულა, იმიტომ, რომ ტემპი ნიშნები არიან გოლის გატანისა. Metronome ნიშნის ფრეზი თან ერთვის გაეტანა გოლი კონტექსტში. არსებობს სხვადასხვა გასაღებები, იმის გამო, რომ [INAUDIBLE] ფრეზი თან ერთვის პერსონალი. თქვენ შეგიძლიათ რეალურად გავაკეთოთ არის. ნიმუში დავწერე რეალურად დო მაჟორი, მაგრამ ეს მხოლოდ იმიტომ, რომ დემონსტრირება თქვენ შეიძლება ჰქონდეს სხვადასხვა გასაღებები სხვადასხვა პერსონალი. ხოლო ძირითადი სინტაქსი წერთ აღნიშნავენ, სახელები E, F, G, რასაც. თუ გსურთ ამის გაკეთება accidentals, თქვენ სუფიქსით ან ES. ეს არის ჰოლანდიური მუსიკოლოგიური კონვენციები. და ამის octave leaps, თქვენ უნდა გამოიყენოთ ამ tick ნიშნები, მძიმით ან აპოსტროფი. ნათესავი მხოლოდ იმას ნიშნავს, რასაც თქვენ გაქვთ შენიშვნა, ეს ავტომატურად plaec წელს octave უახლოესი წინა. და თუ გვინდა, რომ ხტომა ზე მეტი fifth-- ამბობენ, მეხუთე და more-- მაშინ თქვენ უნდა გამოიყენოთ [INAUDIBLE]. მაგრამ სხვაგვარად, თქვენ არ უნდა განსაზღვროს octave თითოეული შენიშვნა. და ნათესავი C, პრემიერ, და C, უბრალოდ მიუთითოთ შუა C და ბაზის C, განსაკუთრებით პირველი აღნიშნავს. მაშინ თქვენ გაქვთ ეს უფროსების, რომ ორგანიზება ამ ორი ხმები ან ნიმუშები მუსიკა, და თქვენ უნდა ანგარიშით. და რომელიც ასე გამოიყურება. თუ გსურთ მიიღოს დრო ასლი, რომ ნიმუში LillyPond კოდი, რომელიც წინა ლღობას ქვემოთ აქ, და თქვენ შეგიძლიათ დაწეროთ ის LillyPond თავს. მე ვიცი, რომ ჩვენ მივიღეთ რაღაც რომელიც გამოიყურება ბევრი მოსწონს ეს. ასე რომ კიდევ ერთი ტექნოლოგია მოუწოდა მუსიკა XML სასარგებლოდ მიერ სრულიად განსხვავებული ადამიანები. XML არის ტექსტური მონაცემები სტრუქტურა მე არ უნდა ვთქვა, მონაცემები სტრუქტურა ამბობენ მეტაფორა რუკა ერთგვარი. და ის განკუთვნილია გამართავს იერარქიული მონაცემები ძალიან კარგად. HTML, მაგალითად, არის ტიპის XML. და თქვენ გითხრათ, XML, რადგან ისინი ჰქონდა ყველა კუთხე ფრჩხილებში და კუთხე bracket slash ნიშნები შოუ მონაცემების სფეროებში. მე არ მაქვს კოდი მაგალითად მუსიკა XML. თქვენ შეგიძლიათ იპოვოთ ის თავს. ძირითადად, ამის მიზეზი დაგვჭირდება გამოიყენოს XML როგორც შუალედური ეს არის, პირველ ყოვლისა, ეს არის ცვლა ფორმატი ამისთვის ძირითადად every-- მე არ უნდა ვთქვა ყველა, მაგრამ ბევრი სხვადასხვა ანგარიში მწერლები. ასე რომ, თუ თქვენ წერა მუსიკა XML, არა მხოლოდ შეიძლება LillyPond წაიკითხეთ ის დახმარებით ამ auxilary პროგრამა მოუწოდა მუსიკა XML, რომ LY, არამედ Finale შეგიძლიათ წაიკითხოთ ის, სიბელიუსის წაიკითხავს. დამოკიდებული, თუ რამდენად თქვენი შიდა ობიექტი იერარქიის მუშაობს წარმოადგენს მუსიკა, ეს შეიძლება იყოს ადვილი დაწერა მუსიკა XML, ვიდრე LillyPond და მხოლოდ დაეყრდნოს მუსიკა XML რომ LY არ კონვერტაციის. მე არ ვფიქრობ, [INAUDIBLE] აქვს მუსიკა XML. STEPHEN KREWSON: ეს არ არის. ვინმე მუშაობს, თუმცა. CONNOR HARRIS: OK. Euterpea ამჯამად არ აქვს მუსიკა XML გამომავალი ფუნქცია არ არის. თუ გსურთ საბოლოო პროექტის იდეა, იქნებ დაუკავშირდა ბიჭები რომ სტივენ იცის, და ისინი შეიძლება გამოიყენოთ თქვენი დახმარება. STEPHEN KREWSON: მე მიყვარს, რომ. CONNOR HARRIS: ასევე, ძირითადად, ყველა პროგრამირების ენები რომ არის ღირს მისი მარილი უკვე XML ბიბლიოთეკაში, ასე რომ თქვენ შეგიძლიათ იძულებით დააკონვერტიროთ ყველა თქვენი მუსიკის ზოგიერთი ობიექტი რომ XML ბიბლიოთეკა შეგიძლიათ დაწეროთ რომ დასჭირდება ნაკლები ცვლილებები თქვენი შინაგანი სტრუქტურა სხვადსხვა მუსიკა ობიექტებით მინდა დაწერა, ვიდრე წერა, პირდაპირ LillyPond აკეთებთ. მაშინ უბრალოდ ამობეჭდოთ ერთად XML ერთად , XML ბიბლიოთეკების თქვენს ენაზე, რომელიც უზრუნველყოფს, რომ ეს syntactically სწორი და ყველაფერი, და მერე გადაიყვანოთ იგი LillyPond. ასე რომ, ტექნოლოგია დაგვჭირდება გავერკვეთ თუ თქვენ აკეთებთ რაღაც ამგვარად. [INAUDIBLE], სხვა auxilarry ტექნოლოგია. ეს არის ძირითადად ტექნიკური სამუშაოები ან Tech სტუდია LillyPond. ასე რომ, ის სთავაზობს დახმარება სინტაქსი, თარგები სხვადასხვა საერთო კომბინაციები ინსტრუმენტები. ეს საშუალებას გაყოფილი ეკრანზე ათვალიერებენ ისე თქვენ შეგიძლიათ თქვენი კოდი ერთ ფანჯარაში და PDF, სხვა ფანჯარაში და დააწკაპუნეთ ადგილები PDF გადადით შესაბამის ლაქების თქვენი კოდის. ეს არის უფრო სასარგებლოა, თუ თქვენ რეალურად წერილობით LillyPond ფაილი თავს მეტი თუ თქვენ მომტანი მათ პროგრამულად. თუმცა ისევ და ისევ, ეს რაიმე სასარგებლო აქვს. შესანიშნავი. სხვა resources-- მე მხოლოდ გაიაროს ეს ძალიან სწრაფად. LillyPond manuals-- LillyPond აქვს შესანიშნავი დოკუმენტაცია მისი ნახვა. მათ აქვთ tutorial. მათ აქვთ სინტაქსი მითითება. მათ აქვთ ასობით snippets სხვადასხვა მცირე რამ yo ალბათ უნდა გავაკეთოთ, რათა დემონსტრირება სხვადასხვა შესაძლებლობები. თუ გსურთ გამოიყენოთ სკრიფტინგის ენა ან უფრო ფართო customizations, მაშინ არსებობს შინაგანი მითითებას, რომ URL. თუ გსურთ გამოიყენოთ მუსიკა XML, არსებობს რომ URL, musicxml.com/tutorial. და მაშინ, თუ თქვენ უნდა ვისწავლოთ სქემა იმიტომ, რომ თქვენ რეალურად გსურთ გამოიყენოთ სკრიფტინგის ობიექტების LillyPond, მაშინ იქ [INAUDIBLE] მოუწოდა სტრუქტურირებული ინტერპრეტაცია კომპიუტერული პროგრამები, რომელიც არ არის მხოლოდ მეორე დიდი CS სახელმძღვანელო ოდესმე წერილობითი მოვძებნოთ ჩემთვის ამის, თუ გვინდა ვიცოდეთ, რასაც მე ვფიქრობ, ყველაზე დიდი ერთი არის მაგრამ ეს ასევე არის ძალიან კარგი შესავალი ენის სათანადო. თქვენ არ გვჭირდება მეტი პირველი რამდენიმე ნაწილად. და ეს არის ის. ნებისმიერი კითხვები? სტუდენტი: სად შემიძლია ჩამოტვირთოთ თქვენი გამომუშავებული Frere ჟაკ ასე რომ, მე ამას ჩემს iPod? STEPHEN KREWSON: ისე, თქვენ შეგიძლიათ დაწეროთ იმისათვის, რომ გარკვეული wav ფაილი Euterpea. და თქვენ გაქვთ კოდი. ეს on GitHub. გაახარეთ თქვენი საკუთარი ვარიაციები Frere ჟაკ მიერ CS50 hive გონება. ეს ძალიან კარგი იქნება. CONNOR HARRIS: ვინმეს? STEPHEN KREWSON: ჩვენ გვჭირდება უკეთესი ბასი drum, ძალიან. ეს ძალიან ცუდია. სტუდენტი: Euterpea არა მხოლოდ შემადგენლობა მხარეს, მაგრამ signal-- STEPHEN KREWSON: დიახ. ფაქტობრივად, მუშაობა მე გააკეთა Euterpea როდესაც მე აიღო ამას იქ არის დამთავრება რა თქმა უნდა, იელის, რომ იყენებს it-- იყო ხმის სინთეზის. ასე რომ ნამდვილად ლამაზი გზა გამოყენებით ისრებით და ზოგიერთი notation ჩვენ ვნახეთ საკომპოზიტორო ერთად სიგნალი ფუნქციები. კერძოდ, ბასი საუკეთესო მათ უბრალოდ მარტივი sine ტალღა. მაგრამ თუ დაიწყება საკომპოზიტორო იმ უცნაური პროგრამული გზები, თქვენ შეგიძლიათ მიიღოთ Crazy ხმა მოვლენები, უცნაური კასკადები. თქვენ შეგიძლიათ შექმნათ ძალიან gritty ხმები ბევრი მოდულაცია. მე პროექტი მარცვლოვანი სინთეზს, რომელიც სადღაც შორის FM და შერჩევა. თქვენ ძალიან მცირე, პატარა ნიმუშები, და მაშინ აერთიანებს მათ გარკვეული modulator და დაამყარონ მდიდარი sound. ჩვენ ასევე გააკეთა ფიზიკური მოდელირება, ასე რომ ცდილობს ვიფიქროთ ფიზიკის და psychoacoustics რაღაც საყვირი, და ფიქრი გზა ხმის bouncing off ზარი საყვირის და აკუსტიკა ოთახში და მოდელირება რომ ძირითადი oscillators. CONNOR HARRIS: დიდი მადლობა. მადლობა მობრძანებისათვის. და მე ყოველთვის მზად კითხვებზე მიერ email-- connorharris@college.harvard.edu. STEPHEN KREWSON: ჰო. stephen.krewson@yale.edu. ზემოთ.