1 00:00:00,000 --> 00:00:05,180 2 00:00:05,180 --> 00:00:05,930 Connor HARRIS: Hi. 3 00:00:05,930 --> 00:00:06,820 Tôi Connor Harris. 4 00:00:06,820 --> 00:00:09,729 Tôi là một CA CS50 tại Harvard. 5 00:00:09,729 --> 00:00:11,270 STEPHEN KREWSON: Tôi là Stephen Krewson. 6 00:00:11,270 --> 00:00:12,582 Tôi là một TF cho CS50 tại Yale. 7 00:00:12,582 --> 00:00:15,790 Connor HARRIS: Và chúng ta sẽ nói chuyện về một số công nghệ mà có lẽ bạn 8 00:00:15,790 --> 00:00:18,880 muốn sử dụng nếu bạn đang quan tâm trong làm một dự án cuối cùng hoặc thực sự 9 00:00:18,880 --> 00:00:20,920 bất cứ điều gì với âm nhạc. 10 00:00:20,920 --> 00:00:24,400 Chúng ta sẽ được tập trung vào một đầu ngôn ngữ lập trình gọi là Haskell. 11 00:00:24,400 --> 00:00:26,280 Đó là một chức năng ngôn ngữ, do đó, các mô hình 12 00:00:26,280 --> 00:00:29,620 là rất khác nhau từ C hoặc PHP hoặc ngôn ngữ bắt buộc khác 13 00:00:29,620 --> 00:00:33,450 mà bạn đã sử dụng rồi, và đặc biệt trên một thư viện viết bằng Haskell 14 00:00:33,450 --> 00:00:40,240 gọi Euterpea, mà có thể giúp đỡ mọi người với viết nhạc về mặt chức năng, 15 00:00:40,240 --> 00:00:40,780 về cơ bản. 16 00:00:40,780 --> 00:00:43,400 Và Stephen sẽ hướng dẫn bạn thông qua một ví dụ tuyệt vời về điều đó. 17 00:00:43,400 --> 00:00:46,423 >> Sau này, tôi sẽ giới thiệu cho bạn một cái gì đó gọi là LillyPond, mà 18 00:00:46,423 --> 00:00:48,370 là một công nghệ cho âm nhạc sắp chữ. 19 00:00:48,370 --> 00:00:50,830 Đó là loại giống như LaTeX cho âm nhạc nếu bất kỳ của bạn 20 00:00:50,830 --> 00:00:57,530 đã sử dụng LaTeX cho các lớp học toán hay lớp P thiết lập khác hoặc những gì có bạn. 21 00:00:57,530 --> 00:01:00,440 Và vì vậy tôi sẽ cung cấp cho bạn, một lần nữa, một số ví dụ đơn giản về điều đó 22 00:01:00,440 --> 00:01:03,640 và chỉ cho bạn trong cuộc tổng đạo của một số nguồn lực tốt hơn. 23 00:01:03,640 --> 00:01:04,319 >> STEPHEN KREWSON: Trong Ngoài ra, chúng tôi nghĩ rằng nó 24 00:01:04,319 --> 00:01:06,720 sẽ được mát mẻ để thiết lập một chút gợi ý 25 00:01:06,720 --> 00:01:10,780 hướng tới một đường ống dẫn giữa File MIDI Euterpea tạo 26 00:01:10,780 --> 00:01:13,910 trong LillyPond, vì vậy chúng tôi cung cấp một số chỉ dẫn về các kịch bản 27 00:01:13,910 --> 00:01:16,310 để làm điều đó mà cung cấp với LillyPond 28 00:01:16,310 --> 00:01:19,160 chỉ để giữ cho nó mã nguồn mở và có được một đường ống dẫn đi. 29 00:01:19,160 --> 00:01:20,910 Connor HARRIS: Một lần nữa, chúng ta cần nhấn mạnh, 30 00:01:20,910 --> 00:01:23,100 hai công nghệ này, bạn không cần phải sử dụng chúng với nhau. 31 00:01:23,100 --> 00:01:25,370 Họ đang không được thiết kế để làm việc với nhau, mặc dù họ làm rất độc đáo. 32 00:01:25,370 --> 00:01:26,362 >> STEPHEN KREWSON: Đúng vậy. 33 00:01:26,362 --> 00:01:30,116 Và hoàn toàn miễn phí. 34 00:01:30,116 --> 00:01:32,240 Connor HARRIS: Vì vậy, Lời cảm ơn, chỉ đọc mà. 35 00:01:32,240 --> 00:01:33,406 STEPHEN KREWSON: Hợp lệ ghi nhận. 36 00:01:33,406 --> 00:01:36,360 Nhờ những folks. 37 00:01:36,360 --> 00:01:39,180 Điều này tôi sẽ nán lại trên chỉ trong một khoảnh khắc. 38 00:01:39,180 --> 00:01:41,560 Quá trình cài đặt là một chút khéo léo. 39 00:01:41,560 --> 00:01:45,420 Chúng tôi có một tôi đọc trên GitHub mà bạn có thể có một cái nhìn tại. 40 00:01:45,420 --> 00:01:47,840 Chỉ cần gửi email cho tôi nếu bạn có bất kỳ câu hỏi. 41 00:01:47,840 --> 00:01:52,829 Nhưng chúng ta sẽ chạy theo giả định rằng điều này đang làm việc cho tất cả mọi người. 42 00:01:52,829 --> 00:01:55,620 Connor HARRIS: Và nếu bạn không thể được LillyPond để làm việc, không có việc lớn. 43 00:01:55,620 --> 00:02:00,139 Có không có biên dịch trực tiếp mà sẽ tham gia, ít nhất là về kết thúc của tôi. 44 00:02:00,139 --> 00:02:02,930 STEPHEN KREWSON: Haskell và LillyPond nên cả hai đều có các trình cài đặt. 45 00:02:02,930 --> 00:02:08,497 Euterpea được tải về như một gói, vv và vv. 46 00:02:08,497 --> 00:02:10,080 Vì vậy, chúng ta đang nói về máy tính âm nhạc. 47 00:02:10,080 --> 00:02:12,990 Và đây chỉ là một là rất view 50.000-foot. 48 00:02:12,990 --> 00:02:15,700 Có một vài khía cạnh khác nhau của nó. 49 00:02:15,700 --> 00:02:18,120 Và điều này là khó khăn và là sẽ che khuất một số chi tiết. 50 00:02:18,120 --> 00:02:22,090 Nhưng chúng ta có thể nghĩ về cái gì giống các thành thuật toán, 51 00:02:22,090 --> 00:02:24,920 bằng cách sử dụng các thuật toán, sử dụng mã, để tạo ra 52 00:02:24,920 --> 00:02:30,280 một số loại of-- lẽ tự tương tự chuỗi các ghi chú, hoặc có thể ghi chú 53 00:02:30,280 --> 00:02:33,330 theo một số hạn chế. 54 00:02:33,330 --> 00:02:35,350 Và sau đó những người có thể là thực hiện hoặc giải thích 55 00:02:35,350 --> 00:02:38,390 với các dụng cụ tương tự hoặc bất cứ điều gì như thế. 56 00:02:38,390 --> 00:02:42,010 Nhưng các thành phần là thực hiện thuật toán. 57 00:02:42,010 --> 00:02:45,120 >> Nhưng tất nhiên, có thể tích máy tính âm nhạc hay âm nhạc kỹ thuật số 58 00:02:45,120 --> 00:02:48,870 chúng ta đã quen thuộc hơn với là kỹ thuật số tổng hợp âm thanh hoặc thuật số lấy mẫu 59 00:02:48,870 --> 00:02:51,160 và ghi âm kỹ thuật số. 60 00:02:51,160 --> 00:02:55,650 Rất nhiều các công cụ kỹ thuật số thực hiện thông qua kỹ thuật số lấy mẫu. 61 00:02:55,650 --> 00:03:00,110 Trong thực tế, chúng tôi sẽ sử dụng một trong những người trong các hình thức của một thư viện font chữ tiếng sau đó. 62 00:03:00,110 --> 00:03:02,850 >> Nhưng cũng có cái gì đó gọi tổng hợp kỹ thuật số mà ra 63 00:03:02,850 --> 00:03:08,650 của những năm 70 và vào 'cuối thập niên 80 với Yamaha và John Chowning tại Stanford 64 00:03:08,650 --> 00:03:11,990 làm tổng hợp FM hay Tổng hợp điều chế tần số, 65 00:03:11,990 --> 00:03:15,100 nơi bạn có một tàu sân bay tín hiệu và tín hiệu điều chỉnh 66 00:03:15,100 --> 00:03:18,270 cả trong phổ âm thanh. 67 00:03:18,270 --> 00:03:22,570 Nhưng những gì chúng tôi đang tập trung vào hôm nay là một cái gì đó gọi là MIDI, 68 00:03:22,570 --> 00:03:25,040 và tất nhiên, thành phần thuật toán. 69 00:03:25,040 --> 00:03:30,940 >> Chúng tôi sẽ không làm cho các công cụ, nhưng chúng tôi thay vì sẽ làm cho một số nhạc, 70 00:03:30,940 --> 00:03:33,940 và sau đó sẽ được giải thích bởi một số dụng cụ đó 71 00:03:33,940 --> 00:03:38,300 là tuân thủ QTI đến chung MIDI tiêu chuẩn. 72 00:03:38,300 --> 00:03:40,830 Vì vậy, MIDI là gì? 73 00:03:40,830 --> 00:03:45,550 Tôi sẽ không để có được quá sâu vào nó, nhưng MIDI là giao thức truyền dữ liệu. 74 00:03:45,550 --> 00:03:49,250 Đó là một loại của một hướng dẫn trên các công ty khác nhau và các ngành công nghiệp 75 00:03:49,250 --> 00:03:52,250 tổ chức âm thanh hoặc các bản vá lỗi. 76 00:03:52,250 --> 00:03:54,170 Vì vậy, chúng ta sẽ thấy rằng có một tiêu chuẩn MIDI 77 00:03:54,170 --> 00:03:57,500 cho tất cả các bộ gõ khác nhau âm thanh và MIDI khuyến nghị 78 00:03:57,500 --> 00:04:01,360 cho tất cả các loại khác nhau của synth hay các loại khác nhau của tất cả các nhạc cụ 79 00:04:01,360 --> 00:04:03,650 nhóm trong một dàn nhạc, nói. 80 00:04:03,650 --> 00:04:08,916 >> Bạn có thể quen với 0 đến 127 thông điệp MIDI. 81 00:04:08,916 --> 00:04:12,920 Một tín hiệu MIDI thường một bit chỉ 82 00:04:12,920 --> 00:04:16,130 cho dù đó là một dữ liệu hoặc một gói tin trạng thái, và sau đó có 83 00:04:16,130 --> 00:04:18,589 bảy bit của tín hiệu. 84 00:04:18,589 --> 00:04:21,430 Và chúng có thể kiểm soát tất cả mọi thứ từ khối lượng 85 00:04:21,430 --> 00:04:25,330 để hành động hay áp lực trên một phím đặc biệt 86 00:04:25,330 --> 00:04:29,400 nếu bạn đang thực hiện với một MIDI điều khiển cũng như, tất nhiên, 87 00:04:29,400 --> 00:04:31,250 ghi chú. 88 00:04:31,250 --> 00:04:33,450 Và tất nhiên, MIDI có cực kỳ hữu ích, 89 00:04:33,450 --> 00:04:37,550 bởi vì đó là một cách để dây với nhau hoặc chuỗi daisy 90 00:04:37,550 --> 00:04:41,570 một loạt các thiết bị phần cứng MIDI. 91 00:04:41,570 --> 00:04:44,050 Tôi có bảy hay tám quay lại ngôi nhà của tôi. 92 00:04:44,050 --> 00:04:46,610 Nó được thực sự phức tạp, nhưng nó thật sự mạnh mẽ. 93 00:04:46,610 --> 00:04:47,460 Và nó thực sự cũ. 94 00:04:47,460 --> 00:04:51,117 Đó là từ đầu những năm 80, và nó thực sự tốt đẹp và nhỏ. 95 00:04:51,117 --> 00:04:51,950 Connor HARRIS: Yeah. 96 00:04:51,950 --> 00:04:54,230 Tất cả các Nintendo cổ điển trò chơi video có lẽ sẽ 97 00:04:54,230 --> 00:04:56,088 có các tập tin MIDI cho âm nhạc, cho ví dụ. 98 00:04:56,088 --> 00:04:59,550 99 00:04:59,550 --> 00:05:01,740 >> STEPHEN KREWSON: Dưới đây là một ví dụ về MIDI chung, 100 00:05:01,740 --> 00:05:06,520 thấy MIDI như một loại các giao thức chung. 101 00:05:06,520 --> 00:05:13,280 Và tôi nghĩ rằng chúng ta có thể nghĩ về sự khác biệt giữa các đặc điểm kỹ thuật 102 00:05:13,280 --> 00:05:17,830 rằng cần phải có một cái gì đó như các dụng cụ âm thanh và thực tế 103 00:05:17,830 --> 00:05:21,740 thực hiện những dụng cụ âm thanh trong một phông chữ có âm thanh hoặc một MIDI đặc biệt 104 00:05:21,740 --> 00:05:25,740 tổng hợp như là sự khác biệt giữa có thể là một typeface-- mà nói, 105 00:05:25,740 --> 00:05:30,350 nói chung, đây là thiết kế của cách đặc biệt này để đại diện 106 00:05:30,350 --> 00:05:35,907 characters-- và một phông chữ đặc biệt có kích thước và âm sắc cụ thể, 107 00:05:35,907 --> 00:05:37,240 và có thực hiện the-- 108 00:05:37,240 --> 00:05:39,156 >> Connor HARRIS: Có lẽ một so sánh tốt hơn sẽ 109 00:05:39,156 --> 00:05:43,430 được các tiêu chuẩn Unicode says-- nó mang lại cho một số cho mỗi nhân vật, và thực sự 110 00:05:43,430 --> 00:05:46,830 mọi ngôn ngữ trên thế giới, hoặc một tập hợp lớn các kịch bản của ngôn ngữ 111 00:05:46,830 --> 00:05:51,310 trên thế giới, và sau đó là những rendered vào cái gì đồ họa 112 00:05:51,310 --> 00:05:53,710 bởi các gói font chữ khác nhau. 113 00:05:53,710 --> 00:05:56,630 Và rõ ràng, bạn có thể nghĩ MIDI là Unicode của âm thanh. 114 00:05:56,630 --> 00:06:03,250 Và nó chỉ là một danh sách of-- một dòng suối lớn các sự kiện và các công cụ và có điều gì, 115 00:06:03,250 --> 00:06:06,090 và bạn cần phải có một riêng biệt chương trình, như một kiểu chữ, 116 00:06:06,090 --> 00:06:08,537 để vẽ lại rằng vào cái gì đó là âm thanh. 117 00:06:08,537 --> 00:06:12,360 118 00:06:12,360 --> 00:06:13,780 >> STEPHEN KREWSON: Vậy tại sao Haskell? 119 00:06:13,780 --> 00:06:19,110 Haskell là một lập trình chức năng ngôn ngữ, rất tiên tiến, 120 00:06:19,110 --> 00:06:22,770 rất khác nhau từ C, rất khác nhau từ PHP. 121 00:06:22,770 --> 00:06:28,120 Và chúng ta sẽ thấy rằng có một dễ thành phần chức năng trong Haskell 122 00:06:28,120 --> 00:06:37,640 mà sẽ cho phép chúng tôi để khoe qua soạn hoặc gõ lên, sao chép, 123 00:06:37,640 --> 00:06:42,160 một cái gì đó giống như Frere Jacques, bài hát đơn giản này mà 124 00:06:42,160 --> 00:06:46,815 có rất nhiều bộ phận trong nó là tự tương tự hoặc lặp đi lặp lại. 125 00:06:46,815 --> 00:06:49,740 126 00:06:49,740 --> 00:06:53,250 Vì vậy, đây sẽ là một số động lực cho lý do tại sao 127 00:06:53,250 --> 00:06:59,400 chúng ta đang sử dụng Haskell, trong đó chức năng là công dân hạng nhất. 128 00:06:59,400 --> 00:07:01,120 >> Và tôi muốn mở rộng này một chút. 129 00:07:01,120 --> 00:07:08,800 Đó là một chút dễ ghi nốt Frere Jacques trong Haskell. 130 00:07:08,800 --> 00:07:12,100 Nhưng nếu chúng ta muốn thêm một phần trống để nó? 131 00:07:12,100 --> 00:07:17,320 Nếu chúng ta muốn cố gắng làm cho một cái gì đó giống như một Roland 808 hoặc 909 trống 132 00:07:17,320 --> 00:07:20,970 máy mà bạn có khoảng 16 bước khác nhau? 133 00:07:20,970 --> 00:07:24,590 Thông thường đây là những nghĩ như ghi chú 16. 134 00:07:24,590 --> 00:07:28,640 Và bạn có thể kiểm soát toàn cầu tiến độ, và bạn có thể chọn ra 135 00:07:28,640 --> 00:07:34,620 một bó của các bộ phận khác nhau bộ gõ trống bass, một tiếng vỗ tay, những cái bẫy khác nhau, 136 00:07:34,620 --> 00:07:37,540 mở và đóng mũ cao các loại của các kênh, 137 00:07:37,540 --> 00:07:41,600 và sau đó bạn có thể EQ hay điều chỉnh âm lượng của họ. 138 00:07:41,600 --> 00:07:45,290 >> Và chúng ta sẽ thấy một cách tốt đẹp trong Haskell đại diện cho bước này 139 00:07:45,290 --> 00:07:48,810 sequencer với tất cả các những thứ mát khác nhau trong Haskell 140 00:07:48,810 --> 00:07:53,100 chúng ta có thể làm với tạo danh sách và lọc qua danh sách, 141 00:07:53,100 --> 00:07:56,060 lập bản đồ trên danh sách, bản đồ chức năng trên danh sách. 142 00:07:56,060 --> 00:07:59,530 143 00:07:59,530 --> 00:08:00,760 Và một lời xin lỗi nhanh chóng. 144 00:08:00,760 --> 00:08:05,300 Điều này là rất sơ sài và phác thảo quá nhanh 145 00:08:05,300 --> 00:08:07,620 của một số các khía cạnh của Haskell và Euterpea, 146 00:08:07,620 --> 00:08:11,760 mà là một tên miền cụ thể ngôn ngữ nhúng văn bản 147 00:08:11,760 --> 00:08:14,970 trong Haskell với nhiều loại âm nhạc. 148 00:08:14,970 --> 00:08:17,350 Vì vậy, xin vui lòng kiểm tra mã trực tuyến. 149 00:08:17,350 --> 00:08:22,404 Cháy lên GHCI, đó là Glasgow Haskell Compiler Interpreter. 150 00:08:22,404 --> 00:08:24,320 Và tôi sẽ được làm một số về điều này trong một chút 151 00:08:24,320 --> 00:08:25,880 vì vậy bạn có thể thấy nó được thực hiện. 152 00:08:25,880 --> 00:08:31,021 >> Và điều này cho phép bạn tải ở với the-- cú pháp là ruột kết và sau đó 153 00:08:31,021 --> 00:08:31,520 lệnh. 154 00:08:31,520 --> 00:08:33,510 Bạn có thể tải ở file. 155 00:08:33,510 --> 00:08:36,840 Bạn có thể sử dụng trình duyệt trên tập tin để xem tất cả các chức năng mà 156 00:08:36,840 --> 00:08:39,169 tồn tại trong một module cụ thể. 157 00:08:39,169 --> 00:08:43,850 Và sau đó là chúng ta sẽ thấy, chủng loại và kiểu lớp học là rất quan trọng trong Haskell, 158 00:08:43,850 --> 00:08:48,850 vì vậy bạn luôn luôn có thể check-- đặc biệt nếu bạn đang làm việc trong một dscl mới 159 00:08:48,850 --> 00:08:51,600 như thế này, một loại âm nhạc là gì? 160 00:08:51,600 --> 00:08:55,114 Tôi biết về cách số loại làm việc trong Haskell, 161 00:08:55,114 --> 00:08:56,530 nhưng tôi không biết nhiều về âm nhạc. 162 00:08:56,530 --> 00:09:01,280 Nhưng bạn có thể khám phá những cách chúng được xác định bằng cách sử dụng t hoặc loại lệnh 163 00:09:01,280 --> 00:09:04,577 và sau đó gọi điện thoại trong một cụ thể chức năng hoặc một đối tượng dữ liệu. 164 00:09:04,577 --> 00:09:05,410 Connor HARRIS: Yeah. 165 00:09:05,410 --> 00:09:09,820 Nếu bạn nghĩ rằng C và Clang là hardass về chủng loại, 166 00:09:09,820 --> 00:09:11,230 bạn không có ý tưởng về Haskell. 167 00:09:11,230 --> 00:09:14,230 Những điều tốt về Haskell là nếu bạn có thể nhận được mã của bạn để biên dịch 168 00:09:14,230 --> 00:09:16,790 và nếu Haskell loại séc, đó là lẽ phải, 169 00:09:16,790 --> 00:09:18,675 bởi vì các loại hệ thống rất nghiêm ngặt. 170 00:09:18,675 --> 00:09:20,090 >> STEPHEN KREWSON: Yeah. 171 00:09:20,090 --> 00:09:21,980 Vì vậy, tôi chỉ muốn đi through-- và một lần nữa, 172 00:09:21,980 --> 00:09:27,160 đây không phải là làm việc đó justice-- một vài trong số các tính năng của Haskell rằng, ít nhất 173 00:09:27,160 --> 00:09:31,780 để creators-- của nó và nó đã được tạo ra vào cuối những năm 1980 bởi một nhóm người, 174 00:09:31,780 --> 00:09:34,610 một ủy ban của khoảng 20 people-- nghĩ là quan trọng. 175 00:09:34,610 --> 00:09:36,850 Và điều đầu tiên họ được liệt kê trong một bài báo rằng 176 00:09:36,850 --> 00:09:41,890 mô tả nguồn gốc của Haskell trong vòng 20 năm đầu tiên hoặc 177 00:09:41,890 --> 00:09:43,390 là nó đã được lười biếng. 178 00:09:43,390 --> 00:09:44,990 Vì vậy, điều này có nghĩa là gì? 179 00:09:44,990 --> 00:09:49,860 >> Vâng, nó có nghĩa là khi chúng ta có một số loại biểu hiện, chúng ta cần phải đánh giá nó. 180 00:09:49,860 --> 00:09:54,390 Và Haskell thực hiện điều này trong một cuộc gọi bởi nhu cầu bằng cách này hay một cách không nghiêm ngặt. 181 00:09:54,390 --> 00:09:57,250 Đó là, nếu chúng ta có một loạt các các thành phần của biểu hiện của chúng tôi, 182 00:09:57,250 --> 00:10:00,660 chúng tôi cố gắng trì hoãn việc đánh giá của những thành phần phụ 183 00:10:00,660 --> 00:10:05,300 cho đến khi cuối cùng minute-- tuyệt đối đó là cho đến khi chúng tôi thực sự cần chúng. 184 00:10:05,300 --> 00:10:08,480 >> Vì vậy means-- này đó là thực sự mát mẻ, đặc biệt 185 00:10:08,480 --> 00:10:13,200 nếu chúng ta nghĩ về sự trừu tượng một bước sequencer âm nhạc. 186 00:10:13,200 --> 00:10:16,740 Bạn bật nó lên, và bạn bắt đầu chạy một sequence-- bước 187 00:10:16,740 --> 00:10:20,010 nếu bạn đã từng làm việc với một cái trống machine-- và nó chỉ đi mãi mãi. 188 00:10:20,010 --> 00:10:24,650 Vì vậy, nó sẽ được thực sự tốt đẹp nếu chúng tôi có thể thi đua mà trong Haskell. 189 00:10:24,650 --> 00:10:31,040 Và chúng ta có thể làm điều đó với vô hạn giá trị, trong danh sách vô hạn cụ thể. 190 00:10:31,040 --> 00:10:35,860 Nó rất dễ dàng để loại một danh sách vô hạn trong Haskell. 191 00:10:35,860 --> 00:10:39,230 Bạn chỉ có thể sử dụng cú pháp xuống ở đây, nơi bạn nhìn thấy 1 thông qua 3, 192 00:10:39,230 --> 00:10:42,440 loại bỏ 3 1 dot dot, và đó là một danh sách vô hạn 193 00:10:42,440 --> 00:10:46,960 của tất cả các số tự nhiên mở rộng trên như xa như bạn có thể tưởng tượng. 194 00:10:46,960 --> 00:10:49,925 >> Tôi muốn giới thiệu một khái niệm về nếp ngay. 195 00:10:49,925 --> 00:10:51,800 Và một lần nữa, mục đích của hội thảo này không phải là 196 00:10:51,800 --> 00:10:55,770 để tìm hiểu về nếp gấp trong Haskell hoặc chức năng bậc cao. 197 00:10:55,770 --> 00:10:59,640 Nhưng tôi chỉ muốn giới thiệu nó đến đưa ra một ý nghĩa chính xác về cách lạ 198 00:10:59,640 --> 00:11:03,700 Haskell là và uy lực của nó. 199 00:11:03,700 --> 00:11:08,000 Và đặc biệt, chúng ta sẽ be-- khi chúng ta làm phần trống khác nhau của chúng tôi, 200 00:11:08,000 --> 00:11:12,790 chúng ta sẽ được thao tác danh mục số, gấp chúng vào nhau. 201 00:11:12,790 --> 00:11:17,290 Và để làm được điều đó, chúng ta sẽ được sử dụng bản đồ và nếp gấp. 202 00:11:17,290 --> 00:11:21,770 >> Có một liên kết ngay gấp, đó là một trong những quyền này 203 00:11:21,770 --> 00:11:26,990 here-- 1 trừ đi số lượng, 2 trừ đi số lượng, trừ đi 3 0. 204 00:11:26,990 --> 00:11:29,170 Và cú pháp cho một lần, bạn cho một lần 205 00:11:29,170 --> 00:11:34,680 một giá trị cơ bản và sau đó một operation-- trong trường hợp này, cộng thêm hoặc trừ. 206 00:11:34,680 --> 00:11:36,280 Tôi đã hiển thị cả hai trường hợp. 207 00:11:36,280 --> 00:11:41,760 Và sau đó là một ắc rằng tích lũy giá trị toàn bộ danh sách, 208 00:11:41,760 --> 00:11:46,330 áp dụng mà nhà điều hành cộng hoặc trừ đi, và sau đó tích lũy nó. 209 00:11:46,330 --> 00:11:52,680 Vì vậy, đây sẽ là the-- nếu nó được gọi là với lần r cộng với 0, bắt đầu bằng 0, 210 00:11:52,680 --> 00:11:54,720 sau đó chúng tôi sẽ tổng hợp tất cả các số trong danh sách đó. 211 00:11:54,720 --> 00:11:57,134 Và đó là một danh sách 1-3. 212 00:11:57,134 --> 00:12:00,050 Connor HARRIS: Vì vậy, để đặt nó một cách, lần r mất ba đối số. 213 00:12:00,050 --> 00:12:02,540 Có một chức năng mà tự nhận hai đối số, 214 00:12:02,540 --> 00:12:05,400 sau đó có một giá trị khởi đầu, và có một danh sách các giá trị. 215 00:12:05,400 --> 00:12:08,570 Và những gì bạn làm bạn mất là giá trị khởi đầu, giá trị đầu tiên, 216 00:12:08,570 --> 00:12:09,850 đặt chúng vào các chức năng. 217 00:12:09,850 --> 00:12:11,607 Những gì bạn nhận ra, mất rằng, thức ăn mà 218 00:12:11,607 --> 00:12:13,940 vào các chức năng của Giá trị thứ hai, những gì bạn nhận ra, 219 00:12:13,940 --> 00:12:16,690 mất rằng, thức ăn đó vào các chức năng của các giá trị thứ ba. 220 00:12:16,690 --> 00:12:18,740 Và sau đó nếu bạn đi xuống toàn bộ danh sách này theo cách này, 221 00:12:18,740 --> 00:12:22,970 bạn sẽ nhận được cuối cùng một số giá trị đặc biệt đó là 222 00:12:22,970 --> 00:12:25,720 cùng loại của những gì bạn bắt đầu với và cùng loại 223 00:12:25,720 --> 00:12:29,147 như là những thứ trong danh sách, và sau đó đó là sự trở lại kết quả của lần R. 224 00:12:29,147 --> 00:12:31,980 STEPHEN KREWSON: Vì vậy, đặc biệt, đây là những chức năng bậc cao, 225 00:12:31,980 --> 00:12:34,460 bởi vì họ đang dùng khác chức năng như là một trong các đối số. 226 00:12:34,460 --> 00:12:34,770 >> Connor HARRIS: Yeah. 227 00:12:34,770 --> 00:12:37,820 Nếu bạn đã sử dụng một số khác languages-- tôi biết R, [nghe được] 228 00:12:37,820 --> 00:12:41,510 ngôn ngữ có này, được gọi là Giảm. 229 00:12:41,510 --> 00:12:45,460 Bạn có thể có chức năng tương tự trong các ngôn ngữ khác, chỉ cần gọi 230 00:12:45,460 --> 00:12:48,160 những thứ khác. 231 00:12:48,160 --> 00:12:50,680 >> STEPHEN KREWSON: Và những gì tốt đẹp về gấp R 232 00:12:50,680 --> 00:12:53,880 trong trường hợp này là nếp R có thể làm việc với các danh sách vô hạn. 233 00:12:53,880 --> 00:12:59,490 Vì vậy, ở phía dưới này, P5 này đang tạo ra các ghi chú mà 234 00:12:59,490 --> 00:13:03,120 được bật lên trong sequencer bước cho một số phần trống, phần trống thứ năm, 235 00:13:03,120 --> 00:13:05,480 và có lẽ đó là một conga trống hoặc một cái gì đó. 236 00:13:05,480 --> 00:13:09,719 Và đây là một cố tình cách chậm hiểu của văn bản này, 237 00:13:09,719 --> 00:13:11,510 nhưng nó là thú vị, bởi vì nó thể hiện rất nhiều 238 00:13:11,510 --> 00:13:14,460 điều về Haskell và Euterpea. 239 00:13:14,460 --> 00:13:20,650 >> Vì vậy, gấp R của ruột già colon-- này là chỉ là một nhà điều hành mà đẩy những thứ 240 00:13:20,650 --> 00:13:25,700 cùng nhau trên một list-- gọi về một sản phẩm nào danh sách, mà chỉ là những dấu ngoặc rỗng. 241 00:13:25,700 --> 00:13:28,250 Và tôi gọi đó vào danh sách vô hạn này. 242 00:13:28,250 --> 00:13:31,570 Đây thực sự là hai danh sách thêm vào với nhau xuống đây. 243 00:13:31,570 --> 00:13:37,150 Danh sách 1 dấu phẩy 6 dot dot là 1, 6, 11, 16. 244 00:13:37,150 --> 00:13:39,750 Vì vậy, chỉ trong Haskell-- một vài ký tự, bạn 245 00:13:39,750 --> 00:13:42,420 có thể tạo ra toàn bộ dãy số 246 00:13:42,420 --> 00:13:46,240 đó là năm con số ngoài trải dài trên thành vô cùng. 247 00:13:46,240 --> 00:13:49,860 Và tôi thêm vào trước đó list-- này ngắn hơn chút 248 00:13:49,860 --> 00:13:54,370 3, 8, 21-- chỉ để cho bạn làm thế nào bạn có thể nối danh sách. 249 00:13:54,370 --> 00:13:55,790 >> Và sau đó tôi đã gấp lại trên chính nó. 250 00:13:55,790 --> 00:14:01,510 Và điều này kết thúc chỉ là một loại hoạt động nhận dạng, nhưng nó là vô hạn. 251 00:14:01,510 --> 00:14:06,070 Và gấp R có thể làm điều đó, bởi vì nó uể oải đánh giá, như ở trên. 252 00:14:06,070 --> 00:14:10,582 Nếu chúng ta có một 1 và 2 và 3, chúng ta có thể chỉ khung off toàn bộ phần còn lại của nó. 253 00:14:10,582 --> 00:14:12,290 Điều đó sẽ không làm việc cho trừ hoặc cộng, nhưng nó 254 00:14:12,290 --> 00:14:17,760 sẽ làm việc cho đại tràng này hoạt động nhận dạng trên danh sách. 255 00:14:17,760 --> 00:14:24,620 >> Vì vậy, làm thế nào để chúng ta sử dụng thực tế rằng nếu chúng tôi có một danh sách dài vô tận của sự vật? 256 00:14:24,620 --> 00:14:26,500 Vâng, Haskell cung cấp rất nhiều functions-- 257 00:14:26,500 --> 00:14:29,450 và xem xét thêm vào những trong time-- riêng của bạn như mất 258 00:14:29,450 --> 00:14:32,200 mà nói, OK, chúng tôi tạo ra danh sách vô hạn này, 259 00:14:32,200 --> 00:14:35,950 nhưng chúng tôi chỉ cần đi để có một số số của nó Và trong case-- này 260 00:14:35,950 --> 00:14:38,410 chúng ta sẽ thấy sau này trong trống máy code-- của chúng tôi 261 00:14:38,410 --> 00:14:43,740 GM chỉ là một số loại toàn cầu biến về số lượng các bước 262 00:14:43,740 --> 00:14:44,610 trong sequencer. 263 00:14:44,610 --> 00:14:47,630 Trên máy cuộn trong tôi cho các bạn, đó là thường là 16, 264 00:14:47,630 --> 00:14:51,475 nhưng tôi đã thực hiện nó với 32. 265 00:14:51,475 --> 00:14:54,470 Nó không thực sự quan trọng. 266 00:14:54,470 --> 00:15:00,230 >> Haskell cũng là tinh khiết, vì vậy nó có mạnh mẽ gõ tĩnh mà Connor ám chỉ. 267 00:15:00,230 --> 00:15:03,220 Vì vậy, chức năng này toán học trong sense-- 268 00:15:03,220 --> 00:15:06,600 họ đang tính toán học rằng họ sẽ được bảo đảm 269 00:15:06,600 --> 00:15:11,530 để không truy cập hoặc thay đổi bất kỳ loại biến hoặc thực hiện đầu vào hoặc đầu ra. 270 00:15:11,530 --> 00:15:14,420 Vì vậy, nếu bạn có một chức năng, nó xác định. 271 00:15:14,420 --> 00:15:17,400 Nó sẽ luôn luôn trở về cùng giá trị trong trạng thái của chương trình 272 00:15:17,400 --> 00:15:19,310 hay vẫn như cũ. 273 00:15:19,310 --> 00:15:22,940 Có, tất nhiên, ngoại lệ monadic điều này, nhưng đó là vượt ra ngoài phạm vi của chúng tôi. 274 00:15:22,940 --> 00:15:23,900 >> Connor HARRIS: Yeah. 275 00:15:23,900 --> 00:15:26,946 Điều này có nghĩa là, mặc dù, là có là một vài quan trọng [Không nghe thấy] 276 00:15:26,946 --> 00:15:27,820 hậu quả của việc này. 277 00:15:27,820 --> 00:15:30,940 Một là nó rất dễ dàng để parallelize chương trình Haskell. 278 00:15:30,940 --> 00:15:32,773 Bởi vì nếu bạn có, nói, một chức năng mà 279 00:15:32,773 --> 00:15:36,064 cần để vận hành trên một triệu giá trị, nếu Bạn có biết rằng các chức năng sẽ luôn luôn 280 00:15:36,064 --> 00:15:39,280 đưa ra các giá trị như nhau nếu bạn ăn tại một value-- nhất định 281 00:15:39,280 --> 00:15:43,055 nếu bạn là [Không nghe thấy] f 1, f của 2, sau đó f 3 hoặc whatnot-- f của 1 282 00:15:43,055 --> 00:15:45,180 không phải là đi để viết ra vào một tập tin hoặc làm điều gì đó 283 00:15:45,180 --> 00:15:46,850 đó sẽ làm thay đổi giá trị của f2. 284 00:15:46,850 --> 00:15:50,220 Bạn chỉ có thể chia nhỏ chức năng này để một triệu máy khác nhau hoặc một triệu 285 00:15:50,220 --> 00:15:54,720 chủ đề hay bất cứ điều gì, nhận được tất cả các câu trả lời trở lại, 286 00:15:54,720 --> 00:15:56,900 nhận được tất cả các giá trị trả lại trở lại, và sau đó đó là nó. 287 00:15:56,900 --> 00:15:59,780 Vì vậy, rất dễ dàng để parallelize thứ. 288 00:15:59,780 --> 00:16:03,140 >> Nhược điểm là đầu vào và đặc biệt là đầu ra 289 00:16:03,140 --> 00:16:05,720 phù hợp với các hệ thống loại theo những cách rất phức tạp. 290 00:16:05,720 --> 00:16:09,010 Chúng tôi sẽ không đi vào ngay bây giờ, nhưng tôi khuyến khích bạn xem xét một số tài nguyên 291 00:16:09,010 --> 00:16:11,175 trực tuyến nếu bạn muốn tìm hiểu về điều đó. 292 00:16:11,175 --> 00:16:13,960 293 00:16:13,960 --> 00:16:16,550 >> STEPHEN KREWSON: Vì vậy, gõ classes-- và điều này 294 00:16:16,550 --> 00:16:21,610 lớp was-- các loại đã được phát minh để giải quyết 295 00:16:21,610 --> 00:16:24,160 một vấn đề của hành quá tải. 296 00:16:24,160 --> 00:16:27,590 Vì vậy, chúng tôi muốn có sự bình đẳng giữa các loại khác nhau của sự vật. 297 00:16:27,590 --> 00:16:31,040 Tất nhiên, chúng ta có thể nghĩ rằng of-- bình đẳng giữa các loại số 298 00:16:31,040 --> 00:16:34,720 là rất dễ dàng để nghĩ về, nhưng những gì về sự bình đẳng giữa các danh sách? 299 00:16:34,720 --> 00:16:37,610 Những gì về sự bình đẳng giữa cây dữ liệu cấu trúc chân? 300 00:16:37,610 --> 00:16:43,130 Và đây là tất cả có thể có trong Haskell vì các lớp học kiểu. 301 00:16:43,130 --> 00:16:48,000 >> Vì vậy, nếu bạn định nghĩa một type-- dữ liệu nhất định và ở đây, đây là những nốt nhạc. 302 00:16:48,000 --> 00:16:50,960 Chúng tôi cuối cùng đã nhận với một số máy tính âm nhạc. 303 00:16:50,960 --> 00:16:57,420 Vì vậy, chúng ta có C, C nhọn, và vv và vv. 304 00:16:57,420 --> 00:17:01,080 Họ thuộc về một loạt các các lớp học kiểu khác nhau. 305 00:17:01,080 --> 00:17:03,510 EQ-- họ thuộc về lớp loại EQ. 306 00:17:03,510 --> 00:17:06,780 Điều đó có nghĩa là chúng hỗ trợ hoạt động bình đẳng. 307 00:17:06,780 --> 00:17:12,650 Vì vậy, bạn có thể đánh giá liệu một trình tự của các nguyên âm nhạc 308 00:17:12,650 --> 00:17:15,400 là giống như một khác nhau. 309 00:17:15,400 --> 00:17:17,280 >> Họ thuộc lớp thứ. 310 00:17:17,280 --> 00:17:19,479 Điều đó có nghĩa là có một thứ tự để các. 311 00:17:19,479 --> 00:17:27,670 D đến sau C. C nhọn đến sau khi C là tốt. 312 00:17:27,670 --> 00:17:29,840 Họ thuộc về lớp hiển thị, có nghĩa là họ có thể 313 00:17:29,840 --> 00:17:33,000 được in vào một giao diện điều khiển hoặc thiết bị đầu cuối. 314 00:17:33,000 --> 00:17:36,090 Họ thuộc về lớp liệt kê, trong đó 315 00:17:36,090 --> 00:17:39,770 nghĩa là mặc dù đây là những nhân vật, 316 00:17:39,770 --> 00:17:45,340 họ có một số cơ bản đại diện bắt đầu từ 0 317 00:17:45,340 --> 00:17:48,960 và đi tắt qua tuy nhiên nhiều điều đang ở đây, 20 hay như vậy, 318 00:17:48,960 --> 00:17:51,770 hoặc 30 hoặc 40, có lẽ. 319 00:17:51,770 --> 00:17:54,259 >> Connor HARRIS: Và khi chúng ta có một kiểu dữ liệu 320 00:17:54,259 --> 00:17:57,050 rằng derives-- với từ khóa đó "deriving--" một lớp học loại nhất định, 321 00:17:57,050 --> 00:18:01,160 nó có nghĩa là trình biên dịch sẽ cố gắng để xây dựng một cái gì đó tự động. 322 00:18:01,160 --> 00:18:05,120 Vì vậy, có thể bạn sẽ muốn xác định một chất lượng khác nhau. 323 00:18:05,120 --> 00:18:09,450 Bạn sẽ muốn xác định C nhọn như bằng phẳng D, ví dụ. 324 00:18:09,450 --> 00:18:11,560 Với xây dựng này ở đây, tôi không nghĩ rằng C nhọn 325 00:18:11,560 --> 00:18:14,940 và D căn hộ sẽ được bình đẳng, vì trình biên dịch sẽ tự động 326 00:18:14,940 --> 00:18:19,670 nói mỗi giá trị khác nhau có thể là riêng biệt từ mỗi khác. 327 00:18:19,670 --> 00:18:22,930 >> Vì vậy, nó có thể ghi đè lên các cài đặt mặc định 328 00:18:22,930 --> 00:18:25,730 các loại của các lớp học. 329 00:18:25,730 --> 00:18:28,640 Một lần nữa, nhìn vào các tài liệu tham khảo nếu bạn muốn tìm hiểu về điều đó. 330 00:18:28,640 --> 00:18:31,767 331 00:18:31,767 --> 00:18:33,600 STEPHEN KREWSON: Và ở đây, thực sự, điều này sẽ thấy 332 00:18:33,600 --> 00:18:36,930 rất hữu ích cho khi chúng ta viết mã sau. 333 00:18:36,930 --> 00:18:42,150 Chúng tôi nhìn thấy một số các nhà khai thác infix cho các thành phần tuần tự, 334 00:18:42,150 --> 00:18:46,570 thành phần song song, và như vậy ra, những ưu điểm và dấu bằng 335 00:18:46,570 --> 00:18:48,620 bao quanh bởi dấu chấm. 336 00:18:48,620 --> 00:18:53,330 Điều đó có nghĩa là chúng ta có thể chơi những khác nhau nguyên thủy âm nhạc sau khi một khác. 337 00:18:53,330 --> 00:18:54,590 Đó là thành phần tuần tự. 338 00:18:54,590 --> 00:18:57,170 >> Hoặc chúng ta có thể chơi chúng trong song song cùng một lúc. 339 00:18:57,170 --> 00:19:05,100 Vì vậy, tôi có thể có một giá trị âm nhạc, và sau đó điều này bằng và dấu hai chấm, 340 00:19:05,100 --> 00:19:09,669 Infix điều hành thành phần song song, và chơi chúng như một loại hợp âm. 341 00:19:09,669 --> 00:19:11,460 Và chúng ta sẽ sử dụng này khi chúng tôi kết hợp 342 00:19:11,460 --> 00:19:15,080 phần trống của chúng tôi với chúng tôi ít bài hát Frere Jacques 343 00:19:15,080 --> 00:19:19,460 để chơi hai chuỗi các của giá trị âm nhạc cùng một lúc. 344 00:19:19,460 --> 00:19:24,520 345 00:19:24,520 --> 00:19:29,250 >> Tách lạng Curry is-- lần cuối tên của Haskell Curry, người 346 00:19:29,250 --> 00:19:31,850 hình ảnh Haskell được đặt tên. 347 00:19:31,850 --> 00:19:34,330 Và điều này cho phép chúng ta một đẹp sang trọng khi chúng tôi 348 00:19:34,330 --> 00:19:36,880 viết tất cả những khác nhau chức năng hoặc các bộ lọc mà chúng tôi 349 00:19:36,880 --> 00:19:39,330 sẽ lập bản đồ trên danh sách của chúng tôi. 350 00:19:39,330 --> 00:19:42,810 Một chức năng của hai arguments-- f của x và y-- 351 00:19:42,810 --> 00:19:46,630 có thể được biểu diễn như f của x áp dụng cho y. 352 00:19:46,630 --> 00:19:49,800 Vì vậy, nó là một chức năng của một đối số trả về 353 00:19:49,800 --> 00:19:51,240 một chức năng của một đối số. 354 00:19:51,240 --> 00:19:56,962 Vì vậy, điều này có nghĩa chúng ta có thể ánh xạ hàm f của x trên danh sách của y. 355 00:19:56,962 --> 00:19:58,920 Connor HARRIS: Muốn đưa ra một ví dụ về điều này? 356 00:19:58,920 --> 00:19:59,836 STEPHEN KREWSON: Yeah. 357 00:19:59,836 --> 00:20:05,390 Tôi có một ví dụ ngay tại đây từ một số trong những điều chúng tôi sẽ viết. 358 00:20:05,390 --> 00:20:10,500 Vì vậy, nhân rộng 2-- tốt, tái tạo sẽ mất 359 00:20:10,500 --> 00:20:13,040 một giá trị, mà là bao nhiêu lần để tái tạo một cái gì đó, 360 00:20:13,040 --> 00:20:16,690 và sau đó nó sẽ mất một value-- thường là một danh sách hoặc một cái gì đó. 361 00:20:16,690 --> 00:20:23,450 Vì vậy, ở đây, chúng tôi lập bản đồ nhân rộng 2 qua một danh sách khác. 362 00:20:23,450 --> 00:20:27,440 >> Vì vậy, nếu chúng ta tái tạo bản đồ 2, nếu chúng ta tái tạo 2 áp dụng 363 00:20:27,440 --> 00:20:31,890 tới phần tử đầu tiên của list-- này và đây là danh sách các phrases-- âm nhạc 364 00:20:31,890 --> 00:20:37,650 sẽ sản xuất hai của "bạn sleeping--" như vậy là bạn đang ngủ, bạn đang ngủ. 365 00:20:37,650 --> 00:20:40,040 Vì vậy, bây giờ chúng tôi có hai. 366 00:20:40,040 --> 00:20:42,570 Nhưng phải mất hai lần lặp lại đối số, nhưng vì chúng tôi 367 00:20:42,570 --> 00:20:47,100 tách lạng bộ và sau đó lập bản đồ, chúng ta có thể đại diện cho replicate 2 368 00:20:47,100 --> 00:20:52,310 như đã được trả về như là một chức năng của một argument-- chỉ sao chép hai lần. 369 00:20:52,310 --> 00:20:57,010 Và sau đó chúng tôi đang áp dụng đó để mỗi phần tử của danh sách này các cụm từ. 370 00:20:57,010 --> 00:21:01,900 >> Và concat là một Haskell hoạt động cho san phẳng một danh sách. 371 00:21:01,900 --> 00:21:04,400 Bởi vì lặp lại 2 ý sản xuất một danh sách liệt kê. 372 00:21:04,400 --> 00:21:06,660 Và đây là hình thức trung gian này ở đây. 373 00:21:06,660 --> 00:21:10,365 Và như vậy thì chúng ta có thể concat hoặc làm phẳng mà ra hai lần. 374 00:21:10,365 --> 00:21:12,240 Connor HARRIS: Một đơn giản ví dụ về currying, 375 00:21:12,240 --> 00:21:15,323 nếu bạn muốn like-- tưởng tượng f chỉ là một chức năng nhân mà phải mất hai 376 00:21:15,323 --> 00:21:16,840 đối số và trả về sản phẩm của họ. 377 00:21:16,840 --> 00:21:19,320 Vì vậy, nếu bạn có một f 4 5, đó là 20. 378 00:21:19,320 --> 00:21:22,670 Nhưng bạn có thể nghĩ về điều này như also-- bạn có một hàm f 4 379 00:21:22,670 --> 00:21:25,560 rằng có một đối số và trả về bốn lần này argument-- chỉ 380 00:21:25,560 --> 00:21:27,870 ứng dụng một phần mà chỉ một đối số 4. 381 00:21:27,870 --> 00:21:31,182 Và nếu bạn ăn f của 4 5, mà sẽ cung cấp cho bạn 20. 382 00:21:31,182 --> 00:21:32,890 Và đó là một đơn giản ví dụ về currying. 383 00:21:32,890 --> 00:21:34,473 Nó thường là một trong những cuốn sách giáo khoa. 384 00:21:34,473 --> 00:21:38,860 385 00:21:38,860 --> 00:21:42,110 >> STEPHEN KREWSON: Lambda biểu thức hoặc các chức năng ẩn danh 386 00:21:42,110 --> 00:21:47,330 cũng là một dấu hiệu Haskell. 387 00:21:47,330 --> 00:21:51,242 Vì vậy, nếu chúng ta cần phải whip lên một ít chức năng cuộc sống lặp lại, 388 00:21:51,242 --> 00:21:52,950 nhưng nói nó không có trong thư viện chuẩn, 389 00:21:52,950 --> 00:21:56,150 chúng ta có thể sử dụng một cú pháp tương tự như sau. 390 00:21:56,150 --> 00:21:58,730 Và chúng tôi sẽ khoe trên này. 391 00:21:58,730 --> 00:22:02,160 Một điều bạn sẽ nhìn thấy rất nhiều trong trống máy là chúng ta đang thực hiện cuộc gọi 392 00:22:02,160 --> 00:22:05,790 một cái gì đó gọi là lọc, mà như trước, 393 00:22:05,790 --> 00:22:08,185 là một ánh xạ của một hàm trên một danh sách, nhưng nó 394 00:22:08,185 --> 00:22:10,260 một bản đồ của một hàm Boolean. 395 00:22:10,260 --> 00:22:13,390 >> Vì vậy, chúng tôi có ở đây một ví dụ của một một cách ẩn danh 396 00:22:13,390 --> 00:22:19,150 xác định chức năng Boolean chỉ mất một vài giá trị. 397 00:22:19,150 --> 00:22:22,990 Đây không phải là nói đúng một chức năng vô danh. 398 00:22:22,990 --> 00:22:25,850 Nhưng đó là xác định với là cú pháp cho ngắn gọn, 399 00:22:25,850 --> 00:22:28,007 và điều này chỉ mất x Module n-- 400 00:22:28,007 --> 00:22:28,840 Connor HARRIS: Yeah. 401 00:22:28,840 --> 00:22:31,330 Vì vậy, f là một hàm số hai đối số n và p 402 00:22:31,330 --> 00:22:35,440 mà trả về một chức năng mà bản thân nó một chức năng của một đối số, cụ thể là x. 403 00:22:35,440 --> 00:22:38,815 404 00:22:38,815 --> 00:22:40,690 STEPHEN KREWSON: Tôi khai thác trung tố nêu trên. 405 00:22:40,690 --> 00:22:42,642 Khai thác trung tố là gì? 406 00:22:42,642 --> 00:22:45,710 Vâng, các nhà khai thác trung tố là cách bình thường chúng tôi đại diện cho các hoạt động, 407 00:22:45,710 --> 00:22:49,910 nói, trong mathematics-- 2 cộng 2 thay vì các nhà điều hành cộng 408 00:22:49,910 --> 00:22:51,202 và sau đó hai đối số 2 và 2. 409 00:22:51,202 --> 00:22:53,701 Connor HARRIS: Nó được gọi đảo ngược ký hiệu đánh bóng, đó là 410 00:22:53,701 --> 00:22:55,330 một thuật ngữ mà tôi nghi ngờ bất kỳ của bạn sẽ biết. 411 00:22:55,330 --> 00:22:56,288 >> STEPHEN KREWSON: Đúng vậy. 412 00:22:56,288 --> 00:22:58,290 Đảo ngược ký hiệu đánh bóng hoặc tiền tố. 413 00:22:58,290 --> 00:23:01,412 Nhưng Haskell quyết định sử dụng các toán trung tố. 414 00:23:01,412 --> 00:23:03,120 Vì vậy, đây là một số những tùy chỉnh mà 415 00:23:03,120 --> 00:23:07,770 được xác định cho Euterpea dscl trong Haskell. 416 00:23:07,770 --> 00:23:10,730 Vì vậy, đây là thành phần tuần tự. 417 00:23:10,730 --> 00:23:16,340 Đây là thành phần song song, và điều này đã được cắt bỏ thành phần song song. 418 00:23:16,340 --> 00:23:18,710 Và chúng tôi sẽ cần phải có với trống máy của chúng tôi, 419 00:23:18,710 --> 00:23:22,640 bởi vì chúng ta sẽ sử dụng cuối cùng nhà điều hành trong đó có ít tuple 420 00:23:22,640 --> 00:23:26,330 để chơi trống máy cùng với bài hát Frere Jacques của chúng tôi. 421 00:23:26,330 --> 00:23:28,650 Và trống máy của chúng tôi là sẽ là vô hạn. 422 00:23:28,650 --> 00:23:30,920 Nó chỉ chạy mãi mãi. 423 00:23:30,920 --> 00:23:32,692 Nhưng bài hát Frere Jacques không. 424 00:23:32,692 --> 00:23:33,510 Nó không phải là dài. 425 00:23:33,510 --> 00:23:36,610 Đó chỉ là một vài quán bar. 426 00:23:36,610 --> 00:23:43,030 Vì vậy, chúng ta cần phải ngăn chặn các máy trống như Ngay sau khi các giá trị âm nhạc ngắn hơn đi kèm 427 00:23:43,030 --> 00:23:43,700 để kết thúc. 428 00:23:43,700 --> 00:23:46,980 Và đó là điều hành infixed là siêu hữu ích với điều đó. 429 00:23:46,980 --> 00:23:50,090 >> Và ghi vào ký hiệu như đây là loại tốt đẹp, 430 00:23:50,090 --> 00:23:57,095 vì nói rằng bạn có một chức năng như quote, mà cho phép chia số nguyên 431 00:23:57,095 --> 00:24:01,010 của x bởi một cái gì đó else-- xin lỗi, mà nên là a và b. 432 00:24:01,010 --> 00:24:04,740 Bạn có thể viết nó như là một báo b. 433 00:24:04,740 --> 00:24:09,670 Vì vậy, nếu bạn put-- phần tử là một ví dụ về điều này. 434 00:24:09,670 --> 00:24:14,730 x phần tử trong một số danh sách, nếu bạn đặt nó trong Backticks, bạn có thể sử dụng nó. 435 00:24:14,730 --> 00:24:20,400 Mặc dù nó không phải là một biểu tượng như cộng hoặc trừ hoặc lần, 436 00:24:20,400 --> 00:24:24,630 bạn có thể sử dụng tên của một chức năng như thế trong Backticks 437 00:24:24,630 --> 00:24:27,045 như điều hành ghi vào, mà là khá mát mẻ. 438 00:24:27,045 --> 00:24:29,670 Connor HARRIS: Một lần nữa, đây là tất cả các đường chỉ là cú pháp, thực sự. 439 00:24:29,670 --> 00:24:32,310 Nó không ảnh hưởng đến cốt lõi của ngôn ngữ. 440 00:24:32,310 --> 00:24:37,440 >> STEPHEN KREWSON: Vì vậy, chúng ta thấy ở đây cho Câu cuối cùng của bài hát Frere Jacques của chúng tôi, 441 00:24:37,440 --> 00:24:45,740 Tôi đã chơi một số hợp âm ít hoặc phần ba bằng cách sử dụng các thành phần song song 442 00:24:45,740 --> 00:24:46,240 nhà điều hành. 443 00:24:46,240 --> 00:24:50,680 444 00:24:50,680 --> 00:24:54,950 Đây là một cách khác để nói rằng một số về những gì chúng tôi đã chỉ được nói. 445 00:24:54,950 --> 00:24:59,986 Vì vậy, bạn có thể bản đồ chức năng của một đối số trên danh sách. 446 00:24:59,986 --> 00:25:02,860 Connor HARRIS: Một lần nữa, tài liệu tham khảo sách giáo khoa giới thiệu Haskell-- 447 00:25:02,860 --> 00:25:04,680 sẽ có tất cả những điều này trong nó. 448 00:25:04,680 --> 00:25:07,790 >> STEPHEN KREWSON: Vì vậy, đây là một khá dòng chính của sequencer bước 449 00:25:07,790 --> 00:25:12,820 chúng ta sẽ xem xét đến việc sử dụng một hiểu danh sách. 450 00:25:12,820 --> 00:25:17,810 Và chúng ta thấy ở đây là yếu tố mà trong điều hành cố định trong dấu ngoặc kép lại. 451 00:25:17,810 --> 00:25:23,030 Vì vậy, nếu x là một phần tử của danh sách x, sau đó chúng ta sẽ gọi lên chức năng perc. 452 00:25:23,030 --> 00:25:25,100 Vì vậy, perc chỉ là một chức năng bộ gõ. 453 00:25:25,100 --> 00:25:30,200 Nó có một số p giá trị đó là một phần của bộ chặn tất cả 454 00:25:30,200 --> 00:25:35,310 những âm thanh bộ gõ khác nhau mà chúng ta đã thấy trong một slide trước đó, 455 00:25:35,310 --> 00:25:38,840 và sau đó nó sẽ cho rằng Thời gian của một lưu ý quý. 456 00:25:38,840 --> 00:25:43,190 Khác nó mang lại cho nó một QNR, và QNR chỉ là một phần còn lại nốt đen. 457 00:25:43,190 --> 00:25:44,970 >> Vì vậy, đây là xây dựng một cái gì đó tốt đẹp. 458 00:25:44,970 --> 00:25:52,110 Chúng tôi có một danh sách các yếu tố, và chúng tôi sẽ vòng qua một số danh sách từ một 459 00:25:52,110 --> 00:25:54,540 với giá trị tối đa của bước sequencer của chúng tôi. 460 00:25:54,540 --> 00:25:58,290 Và khi chúng tôi đang ở một i đặc biệt trong rằng danh sách của một trong những giá trị tối đa, 461 00:25:58,290 --> 00:26:02,970 nếu tôi là một thành viên này thiết lập được tạo ra trong chức năng này, 462 00:26:02,970 --> 00:26:06,040 tốt, sau đó chúng ta biến nó vào một ghi chú bộ gõ. 463 00:26:06,040 --> 00:26:10,960 Nếu không, chúng tôi chỉ đóng một phần còn lại, trong đó là để nói, chúng tôi chỉ giữ im lặng. 464 00:26:10,960 --> 00:26:16,050 Và chúng ta có thể thấy ở đây rằng trong này cú pháp hiểu danh sách, 465 00:26:16,050 --> 00:26:20,030 x là dân cư của thành viên này danh sách xây dựng một 466 00:26:20,030 --> 00:26:22,462 với kích thước toàn cầu của sequencer. 467 00:26:22,462 --> 00:26:23,295 Connor HARRIS: Yeah. 468 00:26:23,295 --> 00:26:26,340 Cú pháp cơ bản cho danh sách comprehensions là 469 00:26:26,340 --> 00:26:30,810 khung, giá trị liên quan đến một số biến, quán bar, 470 00:26:30,810 --> 00:26:34,260 các giá trị có thể có của các biến bản thân, đóng khung. 471 00:26:34,260 --> 00:26:38,545 Và nếu bạn đã thực hiện thiết lập ký hiệu builder trong bất kỳ loại của lớp toán, 472 00:26:38,545 --> 00:26:45,999 bạn có thể đã thiết lập 2n như vậy n mà là trong hay n là z. 473 00:26:45,999 --> 00:26:48,290 Tương tự thing-- ký hiệu này có nghĩa là để được gợi ý 474 00:26:48,290 --> 00:26:49,630 trong đó ký hiệu toán học. 475 00:26:49,630 --> 00:26:51,880 STEPHEN KREWSON: Và bạn có thể áp dụng nhiều vị 476 00:26:51,880 --> 00:26:56,250 và nhiều bộ lọc trong danh sách hiểu, đó là khá tốt đẹp. 477 00:26:56,250 --> 00:27:01,800 Đại số types-- chúng tôi sẽ không nán lại lâu ở đây. 478 00:27:01,800 --> 00:27:04,840 Không có một khái niệm tốt trong Haskell hoặc một tốt, ý niệm rõ ràng 479 00:27:04,840 --> 00:27:10,720 làm thế nào để mất, nói rằng, một mặc định tham số để một hàm hoặc một cái gì đó. 480 00:27:10,720 --> 00:27:13,370 Trong Python, điều này là khá dễ dàng. 481 00:27:13,370 --> 00:27:18,460 Bạn chỉ có thể nói với bằng về các khai báo của hàm, 482 00:27:18,460 --> 00:27:21,420 một giá trị mặc định trong trường hợp không được cung cấp. 483 00:27:21,420 --> 00:27:27,010 >> Trong Haskell, bạn có thể có thể sử dụng có lẽ có thể gõ, 484 00:27:27,010 --> 00:27:32,190 trong đó có một trong hai không có gì hoặc một giá trị của loại chỉ là một. 485 00:27:32,190 --> 00:27:38,630 Vì vậy, chúng ta khai thác này trong máy trống để cho phép chúng tôi cung cấp cho khối lượng tùy chọn 486 00:27:38,630 --> 00:27:40,730 thông số cho mỗi phần trống. 487 00:27:40,730 --> 00:27:46,160 488 00:27:46,160 --> 00:27:54,680 Vì vậy, mà cho chúng ta một cách có EQ hoặc một khối lượng trên một kênh riêng. 489 00:27:54,680 --> 00:27:56,440 >> Connor HARRIS: Trong ví dụ khác Haskell, 490 00:27:56,440 --> 00:28:00,450 bạn có thể thấy có thể sử dụng cho chức năng mà có thể thất bại. 491 00:28:00,450 --> 00:28:03,470 Đây là một trong những phổ biến. 492 00:28:03,470 --> 00:28:07,010 >> STEPHEN KREWSON: Và bạn có thể cung cấp một số kiểu thông báo lỗi như một mặc định. 493 00:28:07,010 --> 00:28:11,020 Và đó là đặc biệt tiện dụng khi bạn đang làm các I / O trong Haskell. 494 00:28:11,020 --> 00:28:12,044 Đó có thể là thủ đoạn. 495 00:28:12,044 --> 00:28:13,960 Connor HARRIS: Hoặc cho một ví dụ tương tự, nghĩ 496 00:28:13,960 --> 00:28:17,460 của một chức năng có liên quan đến sự phân chia của một tham số đó có thể là 0. 497 00:28:17,460 --> 00:28:20,020 Và chức năng mà có thể trở lại có lẽ bất cứ điều gì. 498 00:28:20,020 --> 00:28:22,802 Vì vậy, nếu không có sự phân chia bằng 0, nó sẽ trở lại chỉ bất cứ điều gì. 499 00:28:22,802 --> 00:28:25,010 Và nếu có sự phân chia bởi 0, nó sẽ trở lại không có gì 500 00:28:25,010 --> 00:28:26,910 như một cách để báo hiệu các lỗi. 501 00:28:26,910 --> 00:28:30,330 Bởi vì một hệ quả của Đánh máy rất nghiêm ngặt của Haskell 502 00:28:30,330 --> 00:28:34,100 là không có real-- trường hợp ngoại lệ là vụng, về cơ bản, 503 00:28:34,100 --> 00:28:36,160 xử lý lỗi là khó xử. 504 00:28:36,160 --> 00:28:39,440 Và đây là một trong rất Cách phổ biến để làm việc đó. 505 00:28:39,440 --> 00:28:42,990 >> STEPHEN KREWSON: Vì vậy, bây giờ chúng ta có được để một điều tâm uốn 506 00:28:42,990 --> 00:28:49,160 về Haskell, đó là mô hình phù hợp và chức năng định nghĩa. 507 00:28:49,160 --> 00:28:53,390 Tôi đã cho các bạn trong slide cuối cùng khai của dãy bước 508 00:28:53,390 --> 00:28:58,170 chức năng, mà mất một lẽ giá trị, sau đó một int, sau đó là một danh sách các kiểu int, 509 00:28:58,170 --> 00:29:03,850 sau đó trả về một chuỗi các giá trị âm nhạc có chú thích 510 00:29:03,850 --> 00:29:05,375 với cả sân và khối lượng. 511 00:29:05,375 --> 00:29:08,030 512 00:29:08,030 --> 00:29:11,820 >> Vì vậy, những ba đối số có thể mô hình phù hợp trong các cách sau đây. 513 00:29:11,820 --> 00:29:16,660 Và chúng tôi luôn luôn muốn chắc chắn để làm một trường hợp cơ sở hoặc trường hợp xuất cảnh trước. 514 00:29:16,660 --> 00:29:19,690 Và những dấu gạch dưới chỉ có thể được giải thích 515 00:29:19,690 --> 00:29:22,340 có nghĩa là bất kỳ giá trị đó là có. 516 00:29:22,340 --> 00:29:26,580 Vì vậy, nếu chúng ta có được một cuộc gọi đến bước thứ tự với một số giá trị, một số giá trị khác, 517 00:29:26,580 --> 00:29:32,210 và sau đó danh sách trống rỗng, những gì chúng ta muốn để trở lại chỉ là sự im lặng, một phần còn lại 0. 518 00:29:32,210 --> 00:29:35,110 >> Và thay vì điều đó là một danh sách rỗng hoặc 0, 519 00:29:35,110 --> 00:29:38,150 đó là một phần còn lại 0, bởi vì chúng tôi đối phó với các loại hình âm nhạc, 520 00:29:38,150 --> 00:29:43,230 và danh mục sản phẩm nào của âm nhạc loại chỉ là một phần còn lại của không thời gian. 521 00:29:43,230 --> 00:29:45,680 Đó là không có âm nhạc. 522 00:29:45,680 --> 00:29:51,460 Và sau đó chúng ta thấy nếu chúng ta có được một bước liên tục với một v cho lập luận của khối lượng, 523 00:29:51,460 --> 00:29:57,290 p cho cụ đề phòng đối số, và sau đó là một danh sách của x. 524 00:29:57,290 --> 00:29:58,360 >> Sau đó, chúng tôi làm một số công cụ. 525 00:29:58,360 --> 00:30:01,290 Đặc biệt, chúng tôi áp dụng này hiểu danh sách, 526 00:30:01,290 --> 00:30:05,700 và chúng tôi thực hiện một số hoạt động trên có lẽ giá trị 527 00:30:05,700 --> 00:30:10,050 để biến nó thành một giá trị số để sau đó nó có thể được liệt kê và sử dụng 528 00:30:10,050 --> 00:30:12,300 để chọn các nhạc cụ. 529 00:30:12,300 --> 00:30:16,730 Một lần nữa, đây là một chút bit cố tình inconcise 530 00:30:16,730 --> 00:30:20,580 chỉ để hiển thị tất cả những điều kỳ lạ bạn có thể làm trong Haskell như bạn 531 00:30:20,580 --> 00:30:23,170 hãy xem nó vào thời gian của riêng bạn. 532 00:30:23,170 --> 00:30:23,802 >> Được rồi. 533 00:30:23,802 --> 00:30:26,010 Vì vậy, chúng tôi cuối cùng đã nhận được tới làm những gì chúng tôi đặt ra để làm, 534 00:30:26,010 --> 00:30:28,820 mà là làm cho một số máy tính âm nhạc. 535 00:30:28,820 --> 00:30:32,250 Vì vậy, chúng ta sẽ cố gắng để làm cho bài hát Frere Jacques. 536 00:30:32,250 --> 00:30:35,220 Vì vậy, có bao nhiêu cụm từ trong Frere Jacques? 537 00:30:35,220 --> 00:30:38,790 538 00:30:38,790 --> 00:30:39,680 Bốn. 539 00:30:39,680 --> 00:30:40,460 Thật tuyệt. 540 00:30:40,460 --> 00:30:42,490 Và những gì tốt đẹp là tất cả họ đang lặp đi lặp lại 541 00:30:42,490 --> 00:30:46,990 cùng một lượng thời gian, mà là hai. 542 00:30:46,990 --> 00:30:50,730 >> Vì vậy, chúng tôi có bốn cụm từ từng lặp đi lặp lại hai lần. 543 00:30:50,730 --> 00:30:53,590 Và đặc biệt, họ đang ở trong một vòng. 544 00:30:53,590 --> 00:30:55,340 Và có rất nhiều, nhiều cách để thực hiện 545 00:30:55,340 --> 00:30:57,520 một vòng mà có thể là thú vị để làm. 546 00:30:57,520 --> 00:31:00,260 Tôi đã thực hiện nó trong một khá cách đơn giản ở đây, 547 00:31:00,260 --> 00:31:05,760 mà chỉ là để construct-- dòng hàm lấy một danh sách các giá trị âm nhạc 548 00:31:05,760 --> 00:31:10,390 và biến nó thành thành phần tuần tự bằng cách áp dụng tuần tự mà thành phần 549 00:31:10,390 --> 00:31:13,000 nhà điều hành. 550 00:31:13,000 --> 00:31:19,540 >> Và sau đó tôi trì hoãn các bộ phận khác nhau bằng cách làm cho họ bắt đầu với một phần còn lại. 551 00:31:19,540 --> 00:31:22,770 Vì vậy, tôi bắt đầu với một phần còn lại của hai biện pháp, và sau đó là một phần còn lại của bốn biện pháp, 552 00:31:22,770 --> 00:31:26,160 và sau đó là một phần còn lại của sáu biện pháp, và sau đó vòng 553 00:31:26,160 --> 00:31:32,290 hoạt động, như chúng ta đều biết bài hát này. 554 00:31:32,290 --> 00:31:37,180 Chúng tôi thấy hai chú thích hoặc sửa đổi các giá trị âm nhạc 555 00:31:37,180 --> 00:31:43,150 được chứa trong tuần tự này sắp xếp các yếu tố âm nhạc. 556 00:31:43,150 --> 00:31:44,810 Chúng tôi có một khối lượng add. 557 00:31:44,810 --> 00:31:48,960 Đây là một chức năng được chú giải âm nhạc với một khối lượng cụ thể. 558 00:31:48,960 --> 00:31:51,320 Đây là một ví dụ tốt của một tín hiệu MIDI chạy 559 00:31:51,320 --> 00:31:57,510 0-127, bảy bit thông tin có thể được thực hiện. 560 00:31:57,510 --> 00:32:00,650 >> Và then-- chúng tôi thấy nó rất một thời gian ngắn, nhưng MIDI chung 561 00:32:00,650 --> 00:32:02,310 danh sách tất cả các nhạc cụ khác nhau. 562 00:32:02,310 --> 00:32:04,450 Và không có một toàn bộ rất nhiều trong số họ. 563 00:32:04,450 --> 00:32:11,230 Nếu bạn sử dụng một máy trạm âm thanh kỹ thuật số, như Ableton Live hoặc Pro Tools, 564 00:32:11,230 --> 00:32:17,560 có một phạm vi rộng lớn hơn vô cùng của tổng hợp và dụng cụ VST. 565 00:32:17,560 --> 00:32:21,510 Nhưng tiêu chuẩn MIDI chỉ có một số ít, hoặc vài chục. 566 00:32:21,510 --> 00:32:22,799 Và một số trong số đó là buồn cười. 567 00:32:22,799 --> 00:32:25,840 Tôi nghĩ rằng nó sẽ được vui vẻ nếu chúng tôi chơi các dụng cụ nhạc cụ MIDI 568 00:32:25,840 --> 00:32:30,550 máy bay trực thăng, và sau đó Cách tiếp theo thông qua các vòng, 569 00:32:30,550 --> 00:32:37,980 chúng tôi đã làm một synth pad, và sau đó các chì xưa synth sóng vuông này, 570 00:32:37,980 --> 00:32:44,240 và sau đó nói lên lông, mà là một chút không rõ ràng về MIDI xấu của tôi 571 00:32:44,240 --> 00:32:46,410 tổng hợp, nhưng họ OK. 572 00:32:46,410 --> 00:32:50,030 >> Và sau đó chúng ta thấy let này và trong cú pháp từ Haskell, 573 00:32:50,030 --> 00:32:54,030 và sau đó chúng tôi đang chơi tất cả các bộ phận với nhau 574 00:32:54,030 --> 00:32:56,265 với các nhà điều hành thành phần song song. 575 00:32:56,265 --> 00:33:00,260 576 00:33:00,260 --> 00:33:02,296 Và có lẽ chúng ta có thể thấy một số điều này. 577 00:33:02,296 --> 00:33:07,674 578 00:33:07,674 --> 00:33:08,340 Đây là các mã. 579 00:33:08,340 --> 00:33:14,960 Và bạn có thể thấy trong C, có muốn được một rất nhiều hắng giọng và thiết lập 580 00:33:14,960 --> 00:33:19,760 mã bảng trước khi bạn có thể làm cho âm nhạc như thế này. 581 00:33:19,760 --> 00:33:22,080 Hoặc bất kỳ chương trình khác ngôn ngữ, bạn có lẽ muốn 582 00:33:22,080 --> 00:33:27,210 phải tương tác với một số loại thư viện hoặc API và đặt mọi thứ lên, 583 00:33:27,210 --> 00:33:28,725 và sau đó bạn có để làm sạch. 584 00:33:28,725 --> 00:33:33,810 Nhưng ở đây trong Haskell là, tôi nghĩ rằng, một khi bạn nhận được hang của nó, vô cùng 585 00:33:33,810 --> 00:33:35,770 có thể đọc được và rất biểu cảm. 586 00:33:35,770 --> 00:33:38,930 587 00:33:38,930 --> 00:33:43,240 Vì vậy, có thực hiện của Frere Jacques. 588 00:33:43,240 --> 00:33:43,740 Được rồi. 589 00:33:43,740 --> 00:33:47,557 Bây giờ chúng ta muốn thêm bộ gõ, và đây là một chút hỗn độn chút. 590 00:33:47,557 --> 00:33:49,015 Vì vậy, chúng ta hãy nhìn vào các slide. 591 00:33:49,015 --> 00:33:56,880 592 00:33:56,880 --> 00:34:00,540 Vì vậy, ý tưởng lớn là làm cho một loạt các danh sách hoặc các bộ phận. 593 00:34:00,540 --> 00:34:04,140 Trên những máy xe lăn, có là điển hình về lẽ tám 594 00:34:04,140 --> 00:34:08,670 đến 10 nhịp điệu hay gõ phần. 595 00:34:08,670 --> 00:34:10,159 Và sau đó sử dụng một loạt các kỹ thuật. 596 00:34:10,159 --> 00:34:14,889 Và chúng tôi đã nói chuyện về these-- sử dụng nếp gấp, các bộ lọc, các hàm lambda, 597 00:34:14,889 --> 00:34:19,429 ánh xạ qua danh sách để tạo ra giá trị trong một số phạm vi từ 1 đến r, r là 16, 598 00:34:19,429 --> 00:34:20,699 hoặc 32 bước trong sequencer. 599 00:34:20,699 --> 00:34:23,810 600 00:34:23,810 --> 00:34:29,920 >> Và sau đó nếu có một giá trị trong danh sách đó như chúng ta đang chạy qua sequencer, 601 00:34:29,920 --> 00:34:34,190 chạy qua nó hơn và hơn, nó quay về lưu ý rằng, 602 00:34:34,190 --> 00:34:36,060 và mẫu được kích hoạt. 603 00:34:36,060 --> 00:34:42,810 604 00:34:42,810 --> 00:34:47,110 Dưới đây là tất cả những cách kỳ lạ khác nhau Tôi đến với để tạo ra các ghi chú. 605 00:34:47,110 --> 00:34:48,940 Thử nó trên tổng bán của riêng bạn. 606 00:34:48,940 --> 00:34:50,360 Nó sẽ âm thanh mát mẻ. 607 00:34:50,360 --> 00:34:53,066 608 00:34:53,066 --> 00:34:54,690 Thời gian cho phép, chúng tôi sẽ đi qua này. 609 00:34:54,690 --> 00:34:59,200 Nhưng đối với ngay bây giờ, tôi đoán chúng ta nên giới thiệu những gì chúng ta có. 610 00:34:59,200 --> 00:35:01,380 Chúng ta hãy hy vọng điều này đi OK. 611 00:35:01,380 --> 00:35:02,670 >> Vì vậy, đây là GHCI. 612 00:35:02,670 --> 00:35:06,580 613 00:35:06,580 --> 00:35:09,121 Và chúng ta sẽ tải một tập tin Tôi có gọi song.lhs, 614 00:35:09,121 --> 00:35:10,620 đó là file tôi chỉ cho các bạn. 615 00:35:10,620 --> 00:35:11,470 Tuyệt. 616 00:35:11,470 --> 00:35:15,010 Như Connor cho biết trước đó, nó biên dịch, nó đánh tiếp kiểm tra, 617 00:35:15,010 --> 00:35:18,380 vì vậy tôi có thể thở dễ dàng hơn nhiều. 618 00:35:18,380 --> 00:35:20,010 Nó sẽ không để thổi lên trên tôi. 619 00:35:20,010 --> 00:35:22,720 >> Tôi muốn cho bạn thấy một cái gì đó hữu ích. 620 00:35:22,720 --> 00:35:25,900 Bạn có thể thấy rằng một mô-đun nạp được gọi là 50. 621 00:35:25,900 --> 00:35:28,240 Bạn có thể duyệt các mô-đun đó. 622 00:35:28,240 --> 00:35:32,092 Và điều này là rất tốt đẹp về doing-- có lẽ những gì 623 00:35:32,092 --> 00:35:34,550 bạn đang làm trong Haskell không phải là gọi là phát triển phần mềm, 624 00:35:34,550 --> 00:35:36,980 nhưng bạn có thể làm được rất nhiều công cụ thú vị trên của riêng bạn. 625 00:35:36,980 --> 00:35:42,410 Và các quy trình làm việc thực sự tốt đẹp như so với rất nhiều ngôn ngữ khác, 626 00:35:42,410 --> 00:35:45,872 bởi vì bạn có thể thấy trong một thực sự cách đọc được những gì đang xảy ra. 627 00:35:45,872 --> 00:35:47,830 Vì vậy, chúng ta thấy rằng chúng ta có tất cả những cụm từ, mà 628 00:35:47,830 --> 00:35:53,760 là danh sách các nốt nhạc, và sau đó chúng tôi xây dựng những thành một cái gì đó lớn hơn, 629 00:35:53,760 --> 00:35:55,220 đó là một bài hát nhạc. 630 00:35:55,220 --> 00:35:58,450 Đó là một đơn vị âm nhạc. 631 00:35:58,450 --> 00:36:05,545 Và sau đó chúng tôi có thể chơi tất cả điều này với một chức năng gọi là chơi nhạc. 632 00:36:05,545 --> 00:36:09,040 Bạn có thể thấy rằng ở đây. 633 00:36:09,040 --> 00:36:11,310 Đó là chỉ cần chơi. 634 00:36:11,310 --> 00:36:15,040 >> Tôi nên say-- Tôi đã không nói chuyện về dấu hiệu này đồng đô la đó là ở khắp mọi nơi. 635 00:36:15,040 --> 00:36:17,980 Ký hiệu đô la là một nhà điều hành ghi. 636 00:36:17,980 --> 00:36:22,500 Nhưng nó có ưu tiên thấp nhất của bất kỳ nhà điều hành, mà hiệu quả 637 00:36:22,500 --> 00:36:24,960 có nghĩa là tất cả mọi thứ trên bên trái của dấu $ 638 00:36:24,960 --> 00:36:28,460 và bên phải của ký hiệu đô la, chúng ta sẽ nhận được đánh giá trước khi nó. 639 00:36:28,460 --> 00:36:31,430 Vì vậy, nó là loại giống như một cách thêm dấu ngoặc đơn. 640 00:36:31,430 --> 00:36:33,980 641 00:36:33,980 --> 00:36:36,220 >> Connor HARRIS: Đó là cơ bản hàm hợp. 642 00:36:36,220 --> 00:36:40,026 Và nó đảm bảo rằng bạn không have-- nếu bạn có chức năng hai bên hoặc ghi vào 643 00:36:40,026 --> 00:36:42,900 khai thác ở hai bên, họ sẽ không liên kết qua nó và cung cấp cho bạn 644 00:36:42,900 --> 00:36:46,030 kết quả bất ngờ. 645 00:36:46,030 --> 00:36:49,790 >> STEPHEN KREWSON: Vì vậy, chúng tôi can-- sử dụng đó, chúng ta có thể gọi. 646 00:36:49,790 --> 00:36:51,415 Đầu tiên, chúng tôi sẽ chơi nó mà không có trống. 647 00:36:51,415 --> 00:37:00,330 648 00:37:00,330 --> 00:37:03,170 Đó là máy bay trực thăng, máy bay trực thăng MIDI. 649 00:37:03,170 --> 00:37:05,495 >> [MUSIC CHƠI] 650 00:37:05,495 --> 00:37:08,525 651 00:37:08,525 --> 00:37:09,525 Có những sóng vuông. 652 00:37:09,525 --> 00:37:24,520 653 00:37:24,520 --> 00:37:25,490 Bùn thoại. 654 00:37:25,490 --> 00:37:27,630 Và bạn có thể thực sự đi hoang dã với điều này. 655 00:37:27,630 --> 00:37:30,872 Tôi chọn một trong khá đơn giản, vì tôi biết tôi không nên cắn 656 00:37:30,872 --> 00:37:31,830 nhiều hơn tôi có thể nhai. 657 00:37:31,830 --> 00:37:36,460 Chỉ cần giữ cho nó khá đơn giản để hiển thị các ý chính. 658 00:37:36,460 --> 00:37:39,952 Nhưng sau đó tôi đã như thế, chúng tôi đã có thêm một số trống này. 659 00:37:39,952 --> 00:37:41,910 Chỉ vì đây là một chút bất khả xâm phạm, 660 00:37:41,910 --> 00:37:45,790 và tôi đã không sử dụng tên của các phần trống, 661 00:37:45,790 --> 00:37:49,490 Tôi vẽ bản đồ them-- vì họ một phần của lớp liệt kê, 662 00:37:49,490 --> 00:37:51,500 Tôi đồ hóa chúng để ints. 663 00:37:51,500 --> 00:37:53,120 Một là giống như một trống bass. 664 00:37:53,120 --> 00:37:54,370 Zero là là tốt. 665 00:37:54,370 --> 00:37:56,000 Bảy là một chiếc mũ cao. 666 00:37:56,000 --> 00:38:00,920 Và xuống ở đây, nơi các chức năng có được một ít ngẫu nhiên hơn, 667 00:38:00,920 --> 00:38:02,100 đây là như conga. 668 00:38:02,100 --> 00:38:08,360 >> Vì vậy, nếu bạn nghĩ rằng có thể một about-- cách thú vị để thực hiện một máy trống 669 00:38:08,360 --> 00:38:12,830 là sử dụng rất có trật tự hoa văn trên trống bass của bạn. 670 00:38:12,830 --> 00:38:17,640 Vì vậy, ví dụ, trên lọc qua danh sách với tất cả mọi thứ mà cho phép trở lại 671 00:38:17,640 --> 00:38:20,590 1 khi nó được thực hiện mô-đun 04. 672 00:38:20,590 --> 00:38:27,190 Vì vậy, tôi nhận được 1, 5, 9, 13, 17-- vì vậy đây là nhịp đập đầu tiên của tất cả các biện pháp. 673 00:38:27,190 --> 00:38:32,860 >> Và sau đó là cùng điều chuyển qua hai bước. 674 00:38:32,860 --> 00:38:33,850 Vì vậy, đó là khác thường. 675 00:38:33,850 --> 00:38:37,480 Vì vậy, đây sẽ là một cái gì đó giống như một chiếc mũ cao. 676 00:38:37,480 --> 00:38:39,640 Và sau đó một lần nữa, xuống đây, đó là một chút ngẫu nhiên, 677 00:38:39,640 --> 00:38:41,080 bởi vì chúng ta đang làm conga. 678 00:38:41,080 --> 00:38:44,180 Và tôi có một số maracas xuống đây, quá. 679 00:38:44,180 --> 00:38:50,280 >> Vì vậy, tôi có thể gọi trống máy chơi, nhưng nó sẽ đi mãi mãi, 680 00:38:50,280 --> 00:38:53,700 và nó có thể bắt đầu lấy lên tất cả các bộ nhớ trong hệ thống của tôi. 681 00:38:53,700 --> 00:38:57,090 Vì vậy, tôi sẽ gọi chức năng này chơi nhạc, mà như chúng ta sẽ thấy, 682 00:38:57,090 --> 00:39:02,020 sử dụng các thành phần song song cắt xén để chơi ít bài hát Frere Jacques của chúng tôi 683 00:39:02,020 --> 00:39:04,200 cùng với các máy trống kỳ lạ này. 684 00:39:04,200 --> 00:39:06,190 Vì vậy, chúng ta hãy có một cái nhìn. 685 00:39:06,190 --> 00:39:10,920 Và xin đừng cải thiện trên của tôi sắp xếp tất cả các phần trống. 686 00:39:10,920 --> 00:39:13,375 Không chuyên môn của tôi, nhưng tôi đã có rất nhiều niềm vui làm việc đó. 687 00:39:13,375 --> 00:39:17,678 688 00:39:17,678 --> 00:39:20,654 >> [MUSIC CHƠI] 689 00:39:20,654 --> 00:39:52,260 690 00:39:52,260 --> 00:39:56,980 >> Vì vậy, tất nhiên, điều này là tất cả một chút không phải là niềm vui 691 00:39:56,980 --> 00:40:01,100 nếu chúng ta không thể chuyển đổi nó để một số điểm như vậy có lẽ nó 692 00:40:01,100 --> 00:40:04,650 có thể được giải thích của một nghệ nhân. 693 00:40:04,650 --> 00:40:06,535 Vì vậy, tôi sẽ không chạy nó ở đây. 694 00:40:06,535 --> 00:40:07,910 Tôi đã tạo ra các tập tin. 695 00:40:07,910 --> 00:40:10,280 Bạn có thể thấy rằng có một dot LilyPond file-- và điều này 696 00:40:10,280 --> 00:40:14,500 sẽ segue tôi qua Connor-- và một tập tin MIDI dot, 697 00:40:14,500 --> 00:40:18,610 và một tập tin PDF dot, đó là những gì LilyPond cuối cùng sẽ tạo ra. 698 00:40:18,610 --> 00:40:23,770 >> Nhưng đây là những kịch bản, và tôi sẽ chỉ cần chạy chúng với các tùy chọn giúp đỡ của họ. 699 00:40:23,770 --> 00:40:28,090 Nếu bạn nhận được những lên và chạy với Euterpea, bạn có thể tạo một tập tin MIDI. 700 00:40:28,090 --> 00:40:31,160 Và sau đó từ các tập tin MIDI với chương trình MIDI 2LY này, 701 00:40:31,160 --> 00:40:34,930 bạn có thể tạo ra một Lily Tập tin Pond, và sau đó bạn 702 00:40:34,930 --> 00:40:37,974 có thể tạo ra một file PDF của điểm số. 703 00:40:37,974 --> 00:40:39,390 Và chúng ta nên có một cái nhìn lúc này. 704 00:40:39,390 --> 00:40:52,599 705 00:40:52,599 --> 00:40:55,140 Vì vậy, Connor có lẽ sẽ hiển thị bạn làm thế nào để chú thích này tốt hơn, 706 00:40:55,140 --> 00:41:02,570 nhưng điều này là Frere Jacques như được tạo ra bởi tôi trong Euterpea. 707 00:41:02,570 --> 00:41:07,300 Nó chỉ là trong C. Tôi nên đã tìm ra những hack nó thực sự trong. 708 00:41:07,300 --> 00:41:11,090 Nhưng đó là những đường ống dẫn cho làm thế nào bạn làm điều đó với điều đó. 709 00:41:11,090 --> 00:41:12,950 Hãy nói thêm về LilyPond. 710 00:41:12,950 --> 00:41:15,780 >> Connor HARRIS: OK Hãy xem. 711 00:41:15,780 --> 00:41:19,480 712 00:41:19,480 --> 00:41:21,419 Bạn có đề cập đến Tìm hiểu Bạn Haskell? 713 00:41:21,419 --> 00:41:22,460 STEPHEN KREWSON: Oh yeah. 714 00:41:22,460 --> 00:41:23,480 Kiểm tra Tìm hiểu Bạn Haskell. 715 00:41:23,480 --> 00:41:24,410 Đó là trong các nguồn tài nguyên. 716 00:41:24,410 --> 00:41:26,830 Đó là cách tôi bắt đầu học tập, và nó rất lớn. 717 00:41:26,830 --> 00:41:27,580 Học tập không câm. 718 00:41:27,580 --> 00:41:28,829 >> Connor HARRIS: Vì vậy, nó trực tuyến. 719 00:41:28,829 --> 00:41:34,760 Vì vậy, một người tên là [Không nghe thấy] learnyouahaskell.com, không có khoảng trống. 720 00:41:34,760 --> 00:41:37,065 Grammar là bị bệnh. 721 00:41:37,065 --> 00:41:38,690 STEPHEN KREWSON: Đó là minh họa, quá. 722 00:41:38,690 --> 00:41:39,440 Connor HARRIS: Vậy LilyPond là gì? 723 00:41:39,440 --> 00:41:42,480 Đó là một lập trình khai báo ngôn ngữ cho sắp chữ âm nhạc. 724 00:41:42,480 --> 00:41:45,480 Vì vậy, bạn có thể declarative-- nghĩ về những điều như HTML, 725 00:41:45,480 --> 00:41:50,900 nơi bạn không saying-- HTML không nói như thế nào các trình duyệt web nên 726 00:41:50,900 --> 00:41:52,180 render các trang từng bước. 727 00:41:52,180 --> 00:41:54,096 Nó chỉ nói điều này là một đoạn mô tả 728 00:41:54,096 --> 00:41:56,100 về những gì bạn muốn các trang trông giống như. 729 00:41:56,100 --> 00:41:59,310 >> Và sau đó nó cũng là một chương trình mà biên dịch ngôn ngữ này, 730 00:41:59,310 --> 00:42:02,300 hoặc nó đọc trong của nó và sau đó thực sự hiện sắp chữ cho bạn, 731 00:42:02,300 --> 00:42:05,570 và nó phun ra những tuyệt vời điểm PDF tìm kiếm. 732 00:42:05,570 --> 00:42:08,250 Bạn cũng có thể nhận được định dạng PNG hoặc bất cứ điều gì. 733 00:42:08,250 --> 00:42:10,300 Một cách tốt để suy nghĩ của điều này là bằng cách tương tự 734 00:42:10,300 --> 00:42:16,620 là LaTeX là loại giống như LillyPond, nhưng chỉ sắp chữ thường. 735 00:42:16,620 --> 00:42:20,360 Vì vậy, thay vì of-- nó không WYSIWYG, những gì bạn thấy 736 00:42:20,360 --> 00:42:22,960 Là cái bạn có, như, nói Finale là, hoặc Sibelius, 737 00:42:22,960 --> 00:42:27,430 hoặc Microsoft Word, nơi bạn có thể gõ vào thời gian thực và dự thảo điều trong thời gian thực 738 00:42:27,430 --> 00:42:31,340 và nhìn thấy sự thay đổi ngay lập tức. 739 00:42:31,340 --> 00:42:32,140 >> Nó được dựa trên văn bản. 740 00:42:32,140 --> 00:42:35,290 Bạn cần phải biên dịch của bạn điểm số bằng cách sử dụng một chương trình riêng biệt 741 00:42:35,290 --> 00:42:37,090 và nhận ra các file PDF sau đó. 742 00:42:37,090 --> 00:42:43,320 Đây là một chút ít thuận tiện cho việc sử dụng nếu bạn đang 743 00:42:43,320 --> 00:42:46,520 cố gắng để viết trực tiếp vào điểm a và bạn 744 00:42:46,520 --> 00:42:48,620 cố gắng để sáng tác trên máy tính. 745 00:42:48,620 --> 00:42:50,830 Nhưng có rất nhiều lợi thế cho nó. 746 00:42:50,830 --> 00:42:56,110 Một, nó trông đẹp hơn rất nhiều, vì LillyPond có thể thực sự 747 00:42:56,110 --> 00:42:58,210 dành thời gian để làm quyết định bố trí đúng cách, 748 00:42:58,210 --> 00:43:02,380 không giống như Sibelius hoặc Finale, trong đó có để thực hiện các thuật toán bị xâm phạm như vậy 749 00:43:02,380 --> 00:43:05,020 rằng họ có thể hiển thị điều trong thời gian thực. 750 00:43:05,020 --> 00:43:07,660 >> Vì vậy, tại sao là LilyPond-- đồ họa máy tính là khó khăn. 751 00:43:07,660 --> 00:43:10,535 Nếu bạn đang làm bất cứ điều gì với âm nhạc và bạn muốn viết ra điểm số, 752 00:43:10,535 --> 00:43:13,900 bạn không muốn viết ra tất cả mọi thứ một mình 753 00:43:13,900 --> 00:43:19,040 bắt đầu với cách vẽ đội ngũ nhân viên và làm thế nào để vẽ các tập sách. 754 00:43:19,040 --> 00:43:21,020 Nó rất khó. Nó được thực hiện trước. 755 00:43:21,020 --> 00:43:22,170 Bạn đang sử dụng tốt. 756 00:43:22,170 --> 00:43:26,200 >> Nếu bạn muốn sử dụng Finale hoặc Sibelius, các định dạng tập tin cho những điều đó 757 00:43:26,200 --> 00:43:30,180 rất phức tạp, và bạn không thể thực sự sử dụng chúng theo chương trình. 758 00:43:30,180 --> 00:43:35,020 Bạn có thể mở lên Sibelius với Finale và hãy vào File, Export as PDF mình, 759 00:43:35,020 --> 00:43:37,600 nhưng bạn có thể không thực sự gọi đó là từ một kịch bản. 760 00:43:37,600 --> 00:43:40,440 LillyPond, bạn có thể gọi từ những kịch bản. 761 00:43:40,440 --> 00:43:44,397 Bạn có thể dễ dàng lặp LillyPond với LaTeX. 762 00:43:44,397 --> 00:43:47,230 Tôi sẽ không có nhiều thời gian để đi vào các công nghệ này ngay bây giờ, 763 00:43:47,230 --> 00:43:48,321 nhưng chúng tồn tại. 764 00:43:48,321 --> 00:43:50,070 Nếu bạn muốn tìm thành một cuốn sách LillyPond, 765 00:43:50,070 --> 00:43:53,760 đó là một chương trình mà đến với phân phối LillyPond của bạn, 766 00:43:53,760 --> 00:43:57,030 và nó cho iterating Mảnh LillyPond vào LaTeX 767 00:43:57,030 --> 00:44:00,340 nếu bạn muốn làm điều gì đó như một tài liệu âm nhạc học lớn 768 00:44:00,340 --> 00:44:02,289 với các ví dụ, ví dụ. 769 00:44:02,289 --> 00:44:04,580 Và đó là một kỹ năng tốt cho cuộc sống nếu bạn đang làm bất cứ điều gì 770 00:44:04,580 --> 00:44:05,770 với âm nhạc, không chỉ CS50. 771 00:44:05,770 --> 00:44:09,320 Tôi đã sử dụng LillyPond cho tất cả các dự án thành phần của tôi 772 00:44:09,320 --> 00:44:11,880 kể từ khi tôi được cơ bản một cấp cao ở trường trung học. 773 00:44:11,880 --> 00:44:13,455 >> Vì vậy, đây là một số ví dụ đơn giản. 774 00:44:13,455 --> 00:44:17,490 775 00:44:17,490 --> 00:44:21,060 Điều này về cơ bản là đại diện về mức độ khó khăn 776 00:44:21,060 --> 00:44:23,481 mà hầu hết mọi người sẽ đối mặt với nó họ đã cố gắng 777 00:44:23,481 --> 00:44:24,980 sử dụng LilyPond cho các dự án đơn giản. 778 00:44:24,980 --> 00:44:29,519 Người đầu tiên này là sự khởi đầu đến một khúc dạo đầu hợp xướng của Bach. 779 00:44:29,519 --> 00:44:31,810 Một dưới đây là một đoạn trích từ một trong những tác phẩm của riêng tôi, 780 00:44:31,810 --> 00:44:34,650 và nó chỉ có thể hiện bạn những thứ như [không nghe] 781 00:44:34,650 --> 00:44:38,550 việc đưa nhiều dòng trong cùng một nhân viên, làm thế nào lyric undersetting hoạt động. 782 00:44:38,550 --> 00:44:41,350 783 00:44:41,350 --> 00:44:46,110 Underlays Lyric là một điều đó là rất dễ sử dụng LilyPond cho âm nhạc hợp xướng. 784 00:44:46,110 --> 00:44:48,814 >> Và như vậy thì có một số chi tiết ví dụ phức tạp ở đây. 785 00:44:48,814 --> 00:44:50,980 Tất cả những được thực hiện trong LilyPond và họ có tính khả thi. 786 00:44:50,980 --> 00:44:55,280 Trích đoạn đầu tiên này là từ [Không nghe thấy] by [không nghe được]. 787 00:44:55,280 --> 00:44:58,860 Và điều này [Không nghe thấy] từ một mảnh cho bass solo của 788 00:44:58,860 --> 00:45:03,550 sáo bởi [Không nghe thấy], là người một longtime-- người 789 00:45:03,550 --> 00:45:07,101 là một thành viên lâu năm của bộ phận âm nhạc ở đây, tôi nghĩ. 790 00:45:07,101 --> 00:45:08,600 Tôi không chắc chắn nơi anh ta đi tắt để. 791 00:45:08,600 --> 00:45:12,410 Nhưng ông là cố vấn của Harvard Hiệp hội các nhà soạn nhạc trong một thời gian dài. 792 00:45:12,410 --> 00:45:13,530 Người đàn ông tuyệt vời. 793 00:45:13,530 --> 00:45:16,920 Và ông viết một số bài nhạc đó có rất ký hiệu phức tạp mà LillyPond 794 00:45:16,920 --> 00:45:20,500 dù sao cũng có thể xử lý rất độc đáo. 795 00:45:20,500 --> 00:45:26,030 >> Như vậy chỉ cần cung cấp cho bạn một cảm giác gì khả năng của điều này are-- vậy 796 00:45:26,030 --> 00:45:28,960 bên trong của LillyPond rất phức tạp. 797 00:45:28,960 --> 00:45:31,060 Và bạn có thể sử dụng nó cho một thời gian dài, kể cả 798 00:45:31,060 --> 00:45:32,520 đối với một số khá phức tạp điều, mà không thực sự 799 00:45:32,520 --> 00:45:34,060 phải biết rất nhiều về họ. 800 00:45:34,060 --> 00:45:38,720 Nhưng ý tưởng cơ bản là trên mức thấp nhất, các nguyên tử của LillyPonds 801 00:45:38,720 --> 00:45:39,970 là những ghi chú. 802 00:45:39,970 --> 00:45:42,761 Các ghi chú có chứa một bối cảnh được gọi là tiếng nói. 803 00:45:42,761 --> 00:45:44,510 Vì vậy, bối cảnh giọng nói về cơ bản tương ứng 804 00:45:44,510 --> 00:45:47,410 với một đường dây duy nhất của âm sắc. 805 00:45:47,410 --> 00:45:49,410 Và sau đó bối cảnh có thể chứa hệ thống dọc 806 00:45:49,410 --> 00:45:53,590 ở những cấp độ cao hơn mà đại diện cho cán bộ về điểm số 807 00:45:53,590 --> 00:45:56,750 hoặc các nhóm lớn hơn như đội ngũ nhân viên piano hoặc nhân viên ca đoàn, 808 00:45:56,750 --> 00:45:58,990 và sau đó cuối cùng toàn bộ bối cảnh điểm. 809 00:45:58,990 --> 00:46:02,260 Và bạn thực sự có thể bao gồm nhiều điểm số trong một cuốn sách. 810 00:46:02,260 --> 00:46:05,770 >> Và mỗi bối cảnh có một số chạm khắc đính kèm. 811 00:46:05,770 --> 00:46:08,340 Nếu bạn xem xét thông qua các nội dung của một bối cảnh 812 00:46:08,340 --> 00:46:14,410 và in một biểu tượng nào đó hoặc một lớp nhất định của các biểu tượng khi cần thiết. 813 00:46:14,410 --> 00:46:17,840 Vì vậy, để mọi bối cảnh giọng nói, có [Không nghe thấy] ghi chú 814 00:46:17,840 --> 00:46:24,270 khắc mà về cơ bản là một chức năng hay một đối tượng mà viết ra tất cả các lưu ý 815 00:46:24,270 --> 00:46:26,290 đứng đầu trên phần bên phải của trang. 816 00:46:26,290 --> 00:46:29,510 Sau đó có một khắc khe, mà viết ra Khe trên các nhân viên. 817 00:46:29,510 --> 00:46:31,517 Sau đó có một nhịp dấu khắc đó 818 00:46:31,517 --> 00:46:33,100 viết ra dấu nhịp trong một số điểm. 819 00:46:33,100 --> 00:46:36,410 Và tất cả những phù hợp với khá cũng vào hệ thống phân cấp. 820 00:46:36,410 --> 00:46:39,500 Và nó rất, rất, rất tùy biến, mà bạn cần 821 00:46:39,500 --> 00:46:42,880 nếu bạn muốn có được những điều như thế. 822 00:46:42,880 --> 00:46:45,730 >> Vì vậy, tất cả các bối cảnh có một rất nhiều thuộc tính khác nhau 823 00:46:45,730 --> 00:46:52,410 mà bạn có thể sửa đổi cho tất cả mọi thứ từ khoảng cách để phông chữ khác nhau 824 00:46:52,410 --> 00:46:54,942 lựa chọn về kích thước của sự vật. 825 00:46:54,942 --> 00:46:56,900 Nếu bạn muốn làm thậm chí những điều phức tạp hơn, 826 00:46:56,900 --> 00:46:59,210 có một ngôn ngữ kịch bản nhúng. 827 00:46:59,210 --> 00:47:01,820 Họ sử dụng chương trình, trong đó là phương ngữ của LISP. 828 00:47:01,820 --> 00:47:04,960 Đây có lẽ không nghĩa gì với bạn. 829 00:47:04,960 --> 00:47:06,900 Nhưng về cơ bản, đề án một chức năng 830 00:47:06,900 --> 00:47:09,500 ngôn ngữ lập trình, nhiều hơn hoặc ít hơn. 831 00:47:09,500 --> 00:47:10,800 >> STEPHEN KREWSON: The tie-in. 832 00:47:10,800 --> 00:47:12,690 >> Connor HARRIS: Yeah. 833 00:47:12,690 --> 00:47:15,390 Đó là một tie-in tốt, tôi giả sử. 834 00:47:15,390 --> 00:47:20,150 Và nó được sử dụng như một ngôn ngữ giảng dạy, thực sự, giảm Lễ Ave. Tại MIT. 835 00:47:20,150 --> 00:47:26,590 Và nó rất tiện dụng cho LillyPond vì lý do kỹ thuật khác nhau. 836 00:47:26,590 --> 00:47:30,317 >> Và vì vậy nếu bạn muốn làm cho đơn giản chỉnh phụ thuộc vào điều kiện, 837 00:47:30,317 --> 00:47:32,900 cho example-- có nhất định điều kiện của một số điểm mà bạn đã từng gặp, 838 00:47:32,900 --> 00:47:36,495 làm thay đổi đến bố trí hoặc whatnot-- sau đó 839 00:47:36,495 --> 00:47:37,620 các cơ sở đang có. 840 00:47:37,620 --> 00:47:38,667 Chúng phức tạp. 841 00:47:38,667 --> 00:47:40,250 Vì vậy, đây là một mẫu mã đẹp, đơn giản. 842 00:47:40,250 --> 00:47:43,810 Đó là năm dòng. 843 00:47:43,810 --> 00:47:46,120 Về cơ bản, tôi xác định hai cán bộ. 844 00:47:46,120 --> 00:47:46,904 Đó là trong 3/4. 845 00:47:46,904 --> 00:47:48,695 Các nhân viên đầu tiên có một gắn dấu tiến độ, 846 00:47:48,695 --> 00:47:51,110 nhưng đó là thực tế đi để đi vào toàn bộ điểm số, 847 00:47:51,110 --> 00:47:54,960 vì vết tiến độ là về tỉ số. 848 00:47:54,960 --> 00:47:59,044 Việc khắc dấu nhịp được gắn với điểm số ngữ cảnh. 849 00:47:59,044 --> 00:48:01,460 Có các phím khác nhau, vì [Không nghe thấy] khắc 850 00:48:01,460 --> 00:48:02,710 được gắn các nhân viên. 851 00:48:02,710 --> 00:48:04,441 Bạn thực sự có thể làm được. 852 00:48:04,441 --> 00:48:06,190 Các mẫu tôi đã viết là thực sự trong C lớn, 853 00:48:06,190 --> 00:48:07,990 nhưng nó chỉ là để chứng minh bạn có thể có 854 00:48:07,990 --> 00:48:09,570 các phím khác nhau trong đội ngũ nhân viên khác nhau. 855 00:48:09,570 --> 00:48:15,710 Và cú pháp cơ bản là bạn viết lưu ý tên với E, F, G, bất cứ điều gì. 856 00:48:15,710 --> 00:48:18,910 Nếu bạn muốn làm accidentals, bạn hậu tố IS hay ES. 857 00:48:18,910 --> 00:48:22,640 Đây là từ Hà Lan ước Âm nhạc học. 858 00:48:22,640 --> 00:48:28,290 >> Và để làm nhảy quãng tám, bạn phải sử dụng những dấu kiềm, dấu phẩy hoặc dấu nháy đơn. 859 00:48:28,290 --> 00:48:30,580 Sự tương đối chỉ có nghĩa là bất cứ điều gì bạn có một lưu ý, 860 00:48:30,580 --> 00:48:34,080 nó sẽ tự động được plaec trong octave gần gũi nhất với trước đó. 861 00:48:34,080 --> 00:48:37,624 Và nếu bạn muốn nhảy hơn một fifth-- nói một thứ năm hoặc more-- 862 00:48:37,624 --> 00:48:39,165 sau đó bạn phải sử dụng [không nghe được]. 863 00:48:39,165 --> 00:48:42,580 Nhưng nếu không, bạn không cần phải xác định các quãng tám của mỗi nốt nhạc. 864 00:48:42,580 --> 00:48:46,130 >> Và tương đối C, nguyên tố, và C, bạn chỉ cần xác định giữa C 865 00:48:46,130 --> 00:48:48,630 và cơ sở C, ghi chú đặc biệt đầu tiên. 866 00:48:48,630 --> 00:48:55,020 Sau đó, bạn có những nhân viên mà tổ chức hai tiếng nói này hoặc mẫu của âm nhạc, 867 00:48:55,020 --> 00:48:56,730 và bạn có một điểm số. 868 00:48:56,730 --> 00:48:58,440 Và đó trông như thế này. 869 00:48:58,440 --> 00:49:01,780 870 00:49:01,780 --> 00:49:05,380 >> Nếu bạn muốn dành thời gian để sao chép rằng mẫu LillyPond 871 00:49:05,380 --> 00:49:07,530 mã trên trước trượt xuống đây, và bạn 872 00:49:07,530 --> 00:49:09,030 có thể viết nó cho LillyPond mình. 873 00:49:09,030 --> 00:49:11,280 Tôi biết chúng tôi đã có một cái gì đó trông rất nhiều như thế này. 874 00:49:11,280 --> 00:49:17,236 875 00:49:17,236 --> 00:49:19,610 Vì vậy, có một công nghệ khác Âm nhạc được gọi là XML duy trì 876 00:49:19,610 --> 00:49:22,030 bởi những người hoàn toàn khác nhau. 877 00:49:22,030 --> 00:49:28,150 XML là một dữ liệu văn bản structure-- tôi không nên nói dữ liệu structure-- nói 878 00:49:28,150 --> 00:49:29,580 ẩn dụ bản đồ loại. 879 00:49:29,580 --> 00:49:33,800 Và nó được thiết kế để giữ phân cấp dữ liệu rất tốt. 880 00:49:33,800 --> 00:49:37,050 HTML, ví dụ, là một loại XML. 881 00:49:37,050 --> 00:49:41,090 Và bạn có thể nói với XML vì họ đã có tất cả các dấu ngoặc nhọn và góc 882 00:49:41,090 --> 00:49:44,700 dấu gạch chéo khung rằng chương các trường dữ liệu. 883 00:49:44,700 --> 00:49:47,390 >> Tôi không có một mã số Ví dụ từ Music XML. 884 00:49:47,390 --> 00:49:50,450 Bạn có thể tìm cho mình. 885 00:49:50,450 --> 00:49:53,735 Về cơ bản, lý do bạn có thể muốn để sử dụng XML như các giai đoạn trung gian 886 00:49:53,735 --> 00:49:55,980 là, trước hết, đó là một định dạng trao đổi 887 00:49:55,980 --> 00:50:02,301 về cơ bản cho every-- tôi không nên nói mỗi, nhưng rất nhiều điểm khác nhau 888 00:50:02,301 --> 00:50:02,800 nhà văn. 889 00:50:02,800 --> 00:50:04,966 Vì vậy, nếu bạn viết trong Âm nhạc XML, không chỉ có thể LillyPond 890 00:50:04,966 --> 00:50:08,080 đọc nó với sự giúp đỡ của auxilary này chương trình được gọi là nhạc XML để LY, 891 00:50:08,080 --> 00:50:11,360 nhưng cũng có thể đọc Finale nó, Sibelius có thể đọc nó. 892 00:50:11,360 --> 00:50:14,770 Tùy thuộc vào cách đối tượng nội bộ của bạn hệ thống phân cấp các công trình cho đại diện cho âm nhạc, 893 00:50:14,770 --> 00:50:18,820 nó có thể được dễ dàng hơn để viết ra nhạc XML hơn để LillyPond 894 00:50:18,820 --> 00:50:22,410 và chỉ dựa trên Music XML LY để làm việc chuyển đổi. 895 00:50:22,410 --> 00:50:24,282 >> Tôi không nghĩ rằng [Không nghe thấy] có nhạc XML. 896 00:50:24,282 --> 00:50:25,490 STEPHEN KREWSON: Nó không. 897 00:50:25,490 --> 00:50:26,340 Ai đó đang làm việc trên nó, mặc dù. 898 00:50:26,340 --> 00:50:27,090 >> Connor HARRIS: OK. 899 00:50:27,090 --> 00:50:31,040 Euterpea không có một Chức năng đầu ra âm nhạc XML nào. 900 00:50:31,040 --> 00:50:35,340 Nếu bạn muốn có một ý tưởng dự án cuối cùng, có thể liên lạc với kẻ 901 00:50:35,340 --> 00:50:38,620 rằng Stephen biết, và họ có thể sử dụng sự giúp đỡ của bạn. 902 00:50:38,620 --> 00:50:40,992 >> STEPHEN KREWSON: Tôi rất thích điều đó. 903 00:50:40,992 --> 00:50:43,450 Connor HARRIS: Ngoài ra, về cơ bản, mỗi ngôn ngữ lập trình 904 00:50:43,450 --> 00:50:46,610 đó là giá trị muối của nó đã có một thư viện XML, 905 00:50:46,610 --> 00:50:51,030 do đó, bạn có thể chuyển đổi tất cả trong nội bộ âm nhạc của bạn vào một số đối tượng 906 00:50:51,030 --> 00:50:54,120 rằng các thư viện XML có thể viết ra rằng sẽ yêu cầu ít hơn 907 00:50:54,120 --> 00:50:57,470 thay đổi cấu trúc nội bộ của bạn đối với bất cứ đối tượng âm nhạc bạn 908 00:50:57,470 --> 00:51:00,310 muốn viết vì viết nó trực tiếp trong LillyPond sẽ. 909 00:51:00,310 --> 00:51:04,380 Sau đó, chỉ cần in ra với XML với các thư viện XML trong ngôn ngữ của bạn, 910 00:51:04,380 --> 00:51:07,260 đó sẽ đảm bảo rằng nó đúng cú pháp và tất cả mọi thứ, 911 00:51:07,260 --> 00:51:08,720 và sau đó chuyển đổi nó để LillyPond. 912 00:51:08,720 --> 00:51:11,060 Vì vậy, công nghệ bạn có thể muốn xem xét nếu bạn đang làm gì đó 913 00:51:11,060 --> 00:51:11,650 Như thế này. 914 00:51:11,650 --> 00:51:14,490 915 00:51:14,490 --> 00:51:16,370 >> [Không nghe thấy], khác công nghệ auxilarry. 916 00:51:16,370 --> 00:51:21,700 Điều này về cơ bản là Tech trình hoặc Tech Studio cho LillyPond. 917 00:51:21,700 --> 00:51:25,380 Vì vậy, nó cung cấp sự giúp đỡ với cú pháp, với các mẫu 918 00:51:25,380 --> 00:51:28,770 cho khác nhau phổ biến kết hợp của các công cụ. 919 00:51:28,770 --> 00:51:32,780 Nó cho phép chia màn hình để xem bạn có thể có mã của bạn trong một cửa sổ 920 00:51:32,780 --> 00:51:37,350 và PDF trong cửa sổ khác và click vào nơi trong PDF 921 00:51:37,350 --> 00:51:40,650 để nhảy tới liên quan điểm trong mã nguồn của bạn. 922 00:51:40,650 --> 00:51:45,330 Điều này là hữu ích hơn nếu bạn thực sự văn bản LillyPond tập tin chính mình 923 00:51:45,330 --> 00:51:47,400 hơn nếu bạn đang tạo ra họ lập trình. 924 00:51:47,400 --> 00:51:51,230 Nhưng một lần nữa, đó là một cái gì đó hữu ích để có. 925 00:51:51,230 --> 00:51:51,970 >> Thật tuyệt. 926 00:51:51,970 --> 00:51:55,860 Resources-- khác tôi sẽ chỉ đi qua này rất nhanh chóng. 927 00:51:55,860 --> 00:52:01,270 LillyPond manuals-- LillyPond có tài liệu tuyệt vời trên trang web của mình. 928 00:52:01,270 --> 00:52:02,270 Họ có một hướng dẫn. 929 00:52:02,270 --> 00:52:03,478 Họ có một tham chiếu cú ​​pháp. 930 00:52:03,478 --> 00:52:07,010 Họ có hàng trăm đoạn cho những thứ nhỏ khác nhau 931 00:52:07,010 --> 00:52:09,930 yo có thể cần phải làm gì để chứng minh khả năng khác nhau. 932 00:52:09,930 --> 00:52:12,250 Nếu bạn muốn sử dụng các ngôn ngữ kịch bản 933 00:52:12,250 --> 00:52:14,740 hoặc thực hiện rộng rãi hơn các tùy chỉnh, sau đó có 934 00:52:14,740 --> 00:52:16,730 internals tham khảo tại URL đó. 935 00:52:16,730 --> 00:52:21,950 Nếu bạn muốn sử dụng nhạc XML, có URL đó, musicxml.com/tutorial. 936 00:52:21,950 --> 00:52:27,960 >> Và sau đó nếu bạn cần phải học chương trình bởi vì bạn thực sự muốn sử dụng 937 00:52:27,960 --> 00:52:30,960 các cơ sở kịch bản trong LillyPond, sau đó có một [không nghe được] gọi 938 00:52:30,960 --> 00:52:32,918 Giải thích cấu trúc chương trình máy tính, 939 00:52:32,918 --> 00:52:35,820 đó không chỉ là thứ hai sách giáo khoa CS vĩ đại nhất written-- 940 00:52:35,820 --> 00:52:39,770 tìm thấy tôi sau đó nếu bạn muốn biết những gì tôi nghĩ là vĩ đại nhất một is-- 941 00:52:39,770 --> 00:52:43,580 nhưng nó cũng là một rất tốt giới thiệu về ngôn ngữ thích hợp. 942 00:52:43,580 --> 00:52:46,630 Bạn sẽ không cần nhiều hơn vài phần đầu tiên. 943 00:52:46,630 --> 00:52:47,827 >> Và đó là nó. 944 00:52:47,827 --> 00:52:48,410 Bất kỳ câu hỏi? 945 00:52:48,410 --> 00:52:54,068 946 00:52:54,068 --> 00:52:57,972 >> HỌC SINH: tôi có thể tải về ở đâu bạn tạo ra Frere Jacques 947 00:52:57,972 --> 00:53:01,050 vì vậy tôi có thể đặt nó trên iPod của tôi? 948 00:53:01,050 --> 00:53:07,574 >> STEPHEN KREWSON: Vâng, bạn có thể viết ra một số file wav trong Euterpea. 949 00:53:07,574 --> 00:53:08,490 Và bạn có mật mã. 950 00:53:08,490 --> 00:53:10,000 Đó là trên GitHub. 951 00:53:10,000 --> 00:53:15,590 Làm cho các biến của riêng bạn Frere Jacques bởi CS50 tâm hive. 952 00:53:15,590 --> 00:53:17,095 Nó sẽ rất tuyệt. 953 00:53:17,095 --> 00:53:18,220 Connor HARRIS: Bất cứ ai khác? 954 00:53:18,220 --> 00:53:20,261 STEPHEN KREWSON: Chúng ta cần một cái trống bass tốt hơn, quá. 955 00:53:20,261 --> 00:53:21,935 Nó thực sự xấu. 956 00:53:21,935 --> 00:53:26,565 >> HỌC SINH: Euterpea đã không chỉ phía thành phần, nhưng signal-- 957 00:53:26,565 --> 00:53:27,440 STEPHEN KREWSON: Yes. 958 00:53:27,440 --> 00:53:30,100 Trong thực tế, công việc tôi đã làm trong khi tôi Euterpea 959 00:53:30,100 --> 00:53:33,450 mất this-- có một tốt nghiệp khóa học tại Yale đó 960 00:53:33,450 --> 00:53:35,900 sử dụng it-- là sự tổng hợp âm thanh. 961 00:53:35,900 --> 00:53:39,810 Vì vậy, có một thực sự cách tốt đẹp sử dụng mũi tên 962 00:53:39,810 --> 00:53:46,150 và một số các ký hiệu mà chúng ta thấy trong sáng tác cùng các chức năng tín hiệu. 963 00:53:46,150 --> 00:53:50,610 Đặc biệt, bass cho hầu hết của họ chỉ là một sóng sin đơn giản. 964 00:53:50,610 --> 00:53:54,240 Nhưng nếu bạn bắt đầu sáng tác những trong cách chương trình lạ, 965 00:53:54,240 --> 00:54:00,010 bạn có thể nhận được âm thanh điên hiệu ứng, như thác lạ. 966 00:54:00,010 --> 00:54:04,640 Bạn có thể tạo ra rất gritty âm thanh với rất nhiều điều chế. 967 00:54:04,640 --> 00:54:07,730 >> Tôi đã làm một dự án về hạt tổng hợp, đó là 968 00:54:07,730 --> 00:54:12,290 một nơi nào đó ở giữa FM và lấy mẫu. 969 00:54:12,290 --> 00:54:15,230 Bạn mất rất nhỏ, mẫu nhỏ, và sau đó 970 00:54:15,230 --> 00:54:20,440 kết hợp chúng với một số loại modulator và xây dựng lên một âm thanh phong phú hơn. 971 00:54:20,440 --> 00:54:24,900 Chúng tôi cũng đã làm mô hình vật lý, do đó, cố gắng suy nghĩ về vật lý 972 00:54:24,900 --> 00:54:29,410 và psychoacoustics của một cái gì đó như một trumpet, và suy nghĩ về cách thức 973 00:54:29,410 --> 00:54:32,320 âm thanh được bật khỏi chuông kèn 974 00:54:32,320 --> 00:54:35,200 và các âm thanh của phòng và mô hình hóa 975 00:54:35,200 --> 00:54:40,195 rằng với các dao động cơ bản. 976 00:54:40,195 --> 00:54:47,690 977 00:54:47,690 --> 00:54:48,940 Connor HARRIS: Cảm ơn rất nhiều. 978 00:54:48,940 --> 00:54:50,140 Cám ơn vì đã tới. 979 00:54:50,140 --> 00:54:52,400 Và tôi luôn sẵn sàng lời các câu hỏi bằng cách email-- 980 00:54:52,400 --> 00:54:55,020 connorharris@college.harvard.edu. 981 00:54:55,020 --> 00:54:57,020 >> STEPHEN KREWSON: Yeah. stephen.krewson@yale.edu. 982 00:54:57,020 --> 00:54:58,810 983 00:54:58,810 --> 00:55:00,360 Mát. 984 00:55:00,360 --> 00:55:01,667