1 00:00:00,000 --> 00:00:05,900 2 00:00:05,900 --> 00:00:07,170 >> SAM GREEN: Hi, tất cả mọi người. 3 00:00:07,170 --> 00:00:08,640 Chào mừng bạn đến hội thảo của chúng tôi. 4 00:00:08,640 --> 00:00:10,009 Tên tôi là Sam. 5 00:00:10,009 --> 00:00:11,050 HUGH Zabriskie: Tôi Hugh. 6 00:00:11,050 --> 00:00:17,420 SAM GREEN: Và chúng ta sẽ nói chuyện hôm nay về JavaScript và các API Web Audio. 7 00:00:17,420 --> 00:00:21,180 Chỉ cần để bắt đầu ra, đây là một phác thảo của chương trình nghị sự của chúng tôi cho các buổi hội thảo. 8 00:00:21,180 --> 00:00:25,350 Chúng ta sẽ bắt đầu bằng cách nói về lý do tại sao bạn nên quan tâm đến các Web 9 00:00:25,350 --> 00:00:30,130 Audio API, tại sao là JavaScript ngôn ngữ mà bạn cần cho nó, 10 00:00:30,130 --> 00:00:32,619 và sau đó nói về JavaScript essentials-- như vậy giống như, 11 00:00:32,619 --> 00:00:34,800 hướng dẫn bạn thông qua một số vấn đề cơ bản của ngôn ngữ, 12 00:00:34,800 --> 00:00:37,290 và sau đó nói về API âm thanh ở mức độ cao. 13 00:00:37,290 --> 00:00:41,140 Sau đó, Hugh sẽ nói về một số các công đoạn của sản xuất âm thanh 14 00:00:41,140 --> 00:00:45,509 và sau đó giới thiệu sequencer này awesome dự án ông đã xây dựng cho các bạn các mã. 15 00:00:45,509 --> 00:00:48,050 Và sau đó, chúng tôi sẽ có thời gian cho câu hỏi ở cuối cho mọi người 16 00:00:48,050 --> 00:00:49,593 người đang ở đây sống. 17 00:00:49,593 --> 00:00:50,540 >> HUGH Zabriskie: Cool. 18 00:00:50,540 --> 00:00:50,990 >> SAM GREEN: Cool. 19 00:00:50,990 --> 00:00:51,383 >> HUGH Zabriskie: Cool. 20 00:00:51,383 --> 00:00:52,170 Tôi sẽ trở lại. 21 00:00:52,170 --> 00:00:54,960 >> SAM GREEN: Vì vậy, điều đầu tiên. 22 00:00:54,960 --> 00:00:57,840 Vì vậy, một trong những điều tuyệt vời về Web âm thanh API 23 00:00:57,840 --> 00:01:00,480 là không có bộ lên yêu cầu. 24 00:01:00,480 --> 00:01:04,230 Nó đi kèm được xây dựng trong hầu hết các trình duyệt hiện đại, 25 00:01:04,230 --> 00:01:08,630 bao gồm Chrome, Edge, một toàn bộ bó others-- tất cả những người 26 00:01:08,630 --> 00:01:12,650 phần đó lớn người đang sử dụng ngày nay. 27 00:01:12,650 --> 00:01:14,807 Vì vậy, rằng không có bất lập, ngoài chỉ nhận được 28 00:01:14,807 --> 00:01:16,890 một máy chủ web đi, cho bạn để bắt đầu làm việc 29 00:01:16,890 --> 00:01:18,420 về dự án của bạn, đó là rất tốt. 30 00:01:18,420 --> 00:01:21,500 31 00:01:21,500 --> 00:01:24,190 >> Chúng tôi khuyên bạn nên khá nặng nề mà bạn xem xét 32 00:01:24,190 --> 00:01:26,530 sử dụng Chrome JavaScript phát triển web, 33 00:01:26,530 --> 00:01:30,260 chỉ vì phát triển của nó công cụ này là thực sự mạnh mẽ. 34 00:01:30,260 --> 00:01:33,220 Như một ví dụ về những gì chúng ta có nghĩa là bằng cách nói mở JavaScript 35 00:01:33,220 --> 00:01:38,600 console-- nếu bạn đi vào Chrome và bạn nhìn vào bất kỳ trang web, 36 00:01:38,600 --> 00:01:43,897 và bạn nhấp chuột trái Kiểm tra Element, và sau đó 37 00:01:43,897 --> 00:01:46,730 bạn đi đến ít thả xuống này ngay tại đây và bạn click vào Console, 38 00:01:46,730 --> 00:01:50,660 bạn sẽ thấy những gì mở ra trông rất nhiều như một dấu nhắc lệnh mà bạn 39 00:01:50,660 --> 00:01:53,720 có thể nhìn thấy trên máy Mac của bạn, hoặc trên các ID. 40 00:01:53,720 --> 00:01:59,260 Và chỉ cần như thế, chúng ta có thể loại lệnh ở đây, như Clear, 41 00:01:59,260 --> 00:02:01,350 và các lệnh khác như thế. 42 00:02:01,350 --> 00:02:04,267 Chúng ta có thể tạo ra các biến, như chúng ta sẽ thấy sau này trong JavaScript. 43 00:02:04,267 --> 00:02:07,100 Và do đó, bất cứ điều gì chúng ta có thể làm gì trong JavaScript, chúng ta có thể làm với giao diện điều khiển, 44 00:02:07,100 --> 00:02:11,430 và đó là một cách siêu tiện dụng để bắt đầu chơi xung quanh với các API 45 00:02:11,430 --> 00:02:15,760 và nhận được thoải mái với JavaScript phải off the bat. 46 00:02:15,760 --> 00:02:18,290 Không có thiết lập lên yêu cầu, đó là thực sự tốt đẹp. 47 00:02:18,290 --> 00:02:18,790 Mát. 48 00:02:18,790 --> 00:02:22,064 49 00:02:22,064 --> 00:02:22,880 Thật tuyệt vời. 50 00:02:22,880 --> 00:02:24,780 >> Vì vậy, chỉ một điều nữa để thêm. 51 00:02:24,780 --> 00:02:27,780 Nếu bạn có bất kỳ questions-- có nhiều bạn của những người không sống ở đây, 52 00:02:27,780 --> 00:02:31,232 cảm thấy tự do để gửi email cho những us-- là địa chỉ email của chúng tôi. 53 00:02:31,232 --> 00:02:33,190 Nếu bạn có thắc mắc bạn không muốn yêu cầu chúng tôi, 54 00:02:33,190 --> 00:02:36,160 như, oh tôi có một lỗi trong mã của tôi, hay cái gì 55 00:02:36,160 --> 00:02:39,270 đó là một chút cụ thể hơn, có lẽ Google nó đầu tiên. 56 00:02:39,270 --> 00:02:42,340 Có rất nhiều tài nguyên tuyệt vời về API Web âm thanh ra khỏi đó. 57 00:02:42,340 --> 00:02:44,089 Nó thực sự tốt tài liệu và nó được 58 00:02:44,089 --> 00:02:47,194 được sử dụng bởi một tấn của người dân ở ngành công nghiệp, và những người chỉ 59 00:02:47,194 --> 00:02:48,610 xây dựng công cụ thú vị cho chính mình. 60 00:02:48,610 --> 00:02:51,306 Vì vậy, cần phải có rất nhiều các nguồn lực hiện có. 61 00:02:51,306 --> 00:02:53,040 Thật tuyệt vời. 62 00:02:53,040 --> 00:02:56,100 >> Cool, vậy tại sao Web âm thanh API? 63 00:02:56,100 --> 00:02:59,840 Sơ đồ này là một chút của một quá trình tiến hóa của con đường 64 00:02:59,840 --> 00:03:04,100 âm thanh trên web đã phát triển theo thời gian. 65 00:03:04,100 --> 00:03:13,080 Bgsound giống như các tag HTML gốc rằng Internet Explorer sử dụng để hỗ trợ. 66 00:03:13,080 --> 00:03:16,790 Nó chỉ được phép cho âm thanh khá cơ bản, các chức năng không phải là rất mạnh mẽ, 67 00:03:16,790 --> 00:03:19,380 và bạn không thể làm được trình tự phức tạp, 68 00:03:19,380 --> 00:03:21,890 hoặc kiểm soát âm thanh khi bắt đầu và dừng lại rất mạnh mẽ. 69 00:03:21,890 --> 00:03:23,930 Vì vậy, nó không phải là đặc biệt phát triển tốt. 70 00:03:23,930 --> 00:03:27,470 Rồi sau đó, Flash đến along-- đó, 71 00:03:27,470 --> 00:03:31,712 Tôi chắc chắn rằng các bạn đều quen thuộc với Flash-- có lẽ không phải là cách nó hoạt động, 72 00:03:31,712 --> 00:03:32,920 nhưng bạn chắc chắn đã nhìn thấy nó. 73 00:03:32,920 --> 00:03:35,586 Bạn đã cập nhật Flash của bạn Plug-in, tất cả các loại công cụ, 74 00:03:35,586 --> 00:03:40,110 và đó chắc chắn mở rộng phạm vi các chức năng đó đã có sẵn. 75 00:03:40,110 --> 00:03:45,370 Nhưng làm cho người sử dụng cài đặt một plug-in là chắc chắn 76 00:03:45,370 --> 00:03:48,480 một nhược điểm để bao gồm Flash trong ứng dụng của bạn, phải không? 77 00:03:48,480 --> 00:03:52,410 Bởi vì sau đó bạn đang phụ thuộc vào người sử dụng sẽ tìm kiếm và plug-in này, 78 00:03:52,410 --> 00:03:54,660 và có lẽ được quay off của bước này thêm 79 00:03:54,660 --> 00:03:56,640 họ phải thực hiện để sử dụng ứng dụng của bạn. 80 00:03:56,640 --> 00:04:01,270 Và sau đó có thể là một bản cập nhật rằng sẽ phá vỡ toàn bộ ứng dụng của bạn, 81 00:04:01,270 --> 00:04:03,880 và nó kết thúc lên được một cơn ác mộng cho các nhà phát triển, quá. 82 00:04:03,880 --> 00:04:06,230 Vì vậy, đó là một chướng ngại vật. 83 00:04:06,230 --> 00:04:10,480 >> Và rồi sau đó đến cùng, các tag HTML âm thanh, mà 84 00:04:10,480 --> 00:04:16,579 là một tính năng của HTML-- hiện đại hơn mà chắc chắn cho phép cho các công cụ nhiều hơn, 85 00:04:16,579 --> 00:04:20,050 nhưng ngay cả những điều bạn có thể làm có được một chút giới hạn chỉ 86 00:04:20,050 --> 00:04:22,730 là kết quả của những điều HTML đó là có khả năng. 87 00:04:22,730 --> 00:04:26,060 Vì vậy, khi các JavaScript API, API Web âm thanh, 88 00:04:26,060 --> 00:04:29,290 đã trở thành một tiêu chuẩn thực hành trên các trình duyệt, 89 00:04:29,290 --> 00:04:32,490 mà thực sự mở rộng tập cơ hội cho các nhà phát triển 90 00:04:32,490 --> 00:04:36,590 để thực sự có được vào tòa nhà thứ mát mẻ cho trang web. 91 00:04:36,590 --> 00:04:39,220 Trong một thời gian dài có có được các công cụ thực sự mạnh mẽ 92 00:04:39,220 --> 00:04:44,360 cho các ứng dụng âm thanh gốc, like-- mọi người đều biết GarageBand, 93 00:04:44,360 --> 00:04:48,360 và sau đó rõ ràng là có nhiều âm thanh pha trộn các ứng dụng chuyên nghiệp, 94 00:04:48,360 --> 00:04:49,640 và các loại công cụ. 95 00:04:49,640 --> 00:04:52,690 Nhưng không có một thực sự tốt Cloud-- không 96 00:04:52,690 --> 00:04:55,811 Cloud, yeah, tôi đoán Nền tảng web-based Cloud-- 97 00:04:55,811 --> 00:04:58,310 mà sẽ cho phép các nhà phát triển xây dựng các ứng dụng cho mọi người 98 00:04:58,310 --> 00:05:00,570 để làm pha trộn âm thanh. 99 00:05:00,570 --> 00:05:03,960 Và như ông sẽ chỉ cho bạn sau đó, Web âm thanh API 100 00:05:03,960 --> 00:05:07,470 cho phép thực sự mạnh mẽ công cụ để xảy ra thực sự đơn giản, 101 00:05:07,470 --> 00:05:09,597 mà là khá mát mẻ. 102 00:05:09,597 --> 00:05:12,680 Vì vậy, đó là lý do tại sao bạn hướng dẫn để nên xem phần còn lại của buổi hội thảo, 103 00:05:12,680 --> 00:05:14,350 về cơ bản. 104 00:05:14,350 --> 00:05:17,880 >> Và bây giờ, tôi sẽ nói về một số yếu tố JavaScript-- chỉ cơ bản 105 00:05:17,880 --> 00:05:20,240 của ngôn ngữ, do đó chúng ta có thể trên cùng một trang 106 00:05:20,240 --> 00:05:22,470 khi chúng ta nói về API một chút sau đó. 107 00:05:22,470 --> 00:05:23,260 Mát. 108 00:05:23,260 --> 00:05:26,192 >> Vì vậy, đây là một bản tóm tắt. 109 00:05:26,192 --> 00:05:27,150 Tôi quên này đã ở đây. 110 00:05:27,150 --> 00:05:27,510 Yeah. 111 00:05:27,510 --> 00:05:27,870 >> HUGH Zabriskie: Có hai slide ở đây. 112 00:05:27,870 --> 00:05:30,245 >> SAM GREEN: Đây là bản tóm tắt của một số hạn chế 113 00:05:30,245 --> 00:05:35,220 các ràng buộc, các phương pháp cũ khác. 114 00:05:35,220 --> 00:05:37,828 Và rồi bây giờ, chúng tôi có những việc này. 115 00:05:37,828 --> 00:05:40,011 Mát. 116 00:05:40,011 --> 00:05:40,510 Thật tuyệt vời. 117 00:05:40,510 --> 00:05:43,200 >> Vì vậy, yếu tố cần thiết JavaScript. 118 00:05:43,200 --> 00:05:47,230 Trước tiên, có một sự khác biệt khá lớn 119 00:05:47,230 --> 00:05:49,940 trong JavaScript so với trong một ngôn ngữ như C, trong cách 120 00:05:49,940 --> 00:05:52,050 rằng các biến được tạo ra. 121 00:05:52,050 --> 00:05:55,634 Vì vậy, trong C, chúng tôi đang sử dụng để có gõ biến của chúng tôi, phải không? 122 00:05:55,634 --> 00:05:57,800 Và tôi không phải là loại như gõ vào, tôi có phải là loại 123 00:05:57,800 --> 00:06:01,900 như gán cho chúng một ý nghĩa type-- như thế, một int, một phao, một char. 124 00:06:01,900 --> 00:06:05,210 Trong C, chúng tôi đã thực sự được sử dụng để phải tạo ra một biến 125 00:06:05,210 --> 00:06:09,690 và sau đó dính vào đó kiểu cho toàn bộ thời gian mà chúng ta sử dụng biến. 126 00:06:09,690 --> 00:06:13,990 Và đó không nhất thiết phải là tồi tệ hơn, nhưng nó có thể là khó khăn hơn để sử dụng. 127 00:06:13,990 --> 00:06:16,190 Một trong những tính năng mát mẻ JavaScript là 128 00:06:16,190 --> 00:06:19,740 rằng các biến số là những gì được gọi là "kiểu động", mà 129 00:06:19,740 --> 00:06:22,500 có nghĩa là tôi có thể tạo ra một biến với cú pháp đó, 130 00:06:22,500 --> 00:06:25,800 varX bằng 5, ví dụ. 131 00:06:25,800 --> 00:06:27,790 Mà ban đầu tạo ra một số nguyên variable-- 132 00:06:27,790 --> 00:06:29,870 ngay bên dưới mui xe somewhere-- nhưng tôi 133 00:06:29,870 --> 00:06:33,040 có thể thay đổi biến để chỉ một chuỗi 134 00:06:33,040 --> 00:06:35,820 mà không làm gì như tạo ra một biến mới. 135 00:06:35,820 --> 00:06:37,880 Tôi không cần phải lo lắng về các loại thay đổi. 136 00:06:37,880 --> 00:06:45,440 JavaScript biết rằng các loại của thay đổi, và điều đó xảy ra động. 137 00:06:45,440 --> 00:06:48,510 >> Vì vậy, có những lợi ích và nhược điểm đó, 138 00:06:48,510 --> 00:06:51,250 như bất cứ ai đã từng làm việc trong JavaScript trong một thời gian có thể biết. 139 00:06:51,250 --> 00:06:53,600 Có những lúc bạn có thể vô tình 140 00:06:53,600 --> 00:06:57,720 thay đổi kiểu của một biến và không xử lý kiểu thay đổi, 141 00:06:57,720 --> 00:07:01,120 và sau đó bạn JavaScript có thể crash-- hoặc một ngoại lệ 142 00:07:01,120 --> 00:07:06,070 được ném ra, bởi vì bạn sẽ có loại sai khi bạn mong đợi một loại. 143 00:07:06,070 --> 00:07:07,040 Mát. 144 00:07:07,040 --> 00:07:11,470 >> Vì vậy, scoping-- đó là như thế, nếu chúng ta nhớ những tuần đầu khóa học, 145 00:07:11,470 --> 00:07:15,420 đề cập đến cách nhìn thấy một biến là gì và trong khu vực của các mã. 146 00:07:15,420 --> 00:07:18,400 Tất cả trông rất giống đến hình thức của nó trong C. 147 00:07:18,400 --> 00:07:24,755 Vì vậy, các biến được scoped thường trong dấu ngoặc nhọn trong một hàm, 148 00:07:24,755 --> 00:07:27,005 và sau đó cũng có biến toàn cầu scoped rằng 149 00:07:27,005 --> 00:07:29,171 are-- nếu bạn viết một biến bên ngoài của một hàm, 150 00:07:29,171 --> 00:07:31,790 nó sẽ được hiển thị trong toàn bộ văn bản. 151 00:07:31,790 --> 00:07:35,840 >> Một sự khác biệt giữa JavaScript và C nói riêng, 152 00:07:35,840 --> 00:07:40,280 là nếu bạn khai báo một toàn cầu bất cứ nơi nào biến trong một tập tin văn bản 153 00:07:40,280 --> 00:07:43,324 nó vẫn hiện hữu trong bất kỳ chức năng trong tập tin văn bản. 154 00:07:43,324 --> 00:07:44,240 Đó là đúng, phải không? 155 00:07:44,240 --> 00:07:46,330 >> HUGH Zabriskie: Yep. 156 00:07:46,330 --> 00:07:49,120 >> SAM GREEN: Vì vậy, đó cũng là một chút bit sôi nổi so với C, 157 00:07:49,120 --> 00:07:52,660 nơi mà chúng ta luôn luôn phải có của chúng tôi các định nghĩa biến trên các nơi 158 00:07:52,660 --> 00:07:53,770 chúng được sử dụng. 159 00:07:53,770 --> 00:07:57,957 Đó không phải là một nguyên tắc đó là thực thi nữa, do đó, một chút khác nhau. 160 00:07:57,957 --> 00:08:00,540 Và một lần nữa nhấn mạnh lại, toàn cầu so với variables-- địa phương 161 00:08:00,540 --> 00:08:03,457 rất tương tự như C. Bạn có thể có hai biến có cùng tên, 162 00:08:03,457 --> 00:08:06,540 và có một trong những tên của họ được theo dõi bởi một biến địa phương nếu một trong số họ 163 00:08:06,540 --> 00:08:07,546 là toàn cầu. 164 00:08:07,546 --> 00:08:09,420 Loại như vậy, tương tự vấn đề mà một số bạn 165 00:08:09,420 --> 00:08:11,920 có thể đã chạy vào trong một số các vấn đề của bạn đặt ra cho đến nay. 166 00:08:11,920 --> 00:08:14,450 Cool, vì vậy đó là các biến. 167 00:08:14,450 --> 00:08:20,310 >> Kiểm soát dòng chảy, có nghĩa là như thế, if-else-- stuff-- logic và vòng lặp. 168 00:08:20,310 --> 00:08:24,510 Vì vậy, để bắt đầu, đây là những gì if-else báo cáo như thế nào trong JavaScript. 169 00:08:24,510 --> 00:08:29,750 Sự sắp xếp của những điều khác nhau trên đường dây là không quan trọng. 170 00:08:29,750 --> 00:08:34,409 Đây chỉ là một trong các công ước cho cách thức mã cấu trúc chúng ta. 171 00:08:34,409 --> 00:08:38,634 Cũng giống như trong C, chúng ta có một "nếu", một tuyên bố ngoặc. 172 00:08:38,634 --> 00:08:40,840 173 00:08:40,840 --> 00:08:42,090 Đó không phải là những gì tôi có nghĩa là để làm. 174 00:08:42,090 --> 00:08:44,860 175 00:08:44,860 --> 00:08:45,550 Tôi đã làm nó một lần nữa. 176 00:08:45,550 --> 00:08:46,841 >> HUGH Zabriskie: Đang cố gắng để thoát khỏi? 177 00:08:46,841 --> 00:08:49,770 SAM GREEN: Không, tôi chỉ cần cố gắng để phóng to. 178 00:08:49,770 --> 00:08:50,660 Nó không quan trọng. 179 00:08:50,660 --> 00:08:54,730 180 00:08:54,730 --> 00:08:59,370 >> Vì vậy, chúng ta có một "nếu" tuyên bố và chúng ta có một điều kiện bên trong của nó 181 00:08:59,370 --> 00:09:03,130 rằng để đánh giá đúng hay sai, và xác định có hay không 182 00:09:03,130 --> 00:09:04,510 chúng ta bước vào mà khối mã. 183 00:09:04,510 --> 00:09:09,860 Và tương tự như vậy, chúng ta có một else-if, và một người nào khác, giống như chúng ta đang sử dụng để trong C. 184 00:09:09,860 --> 00:09:14,010 >> Bạn cũng nên khá thoải mái ngay lập tức với các vòng, 185 00:09:14,010 --> 00:09:16,440 vì họ cũng nhìn rất giống C trông. 186 00:09:16,440 --> 00:09:19,600 Nhưng bạn sẽ nhận thấy rằng chúng ta chỉ có, thay vì int khởi tạo, 187 00:09:19,600 --> 00:09:22,570 chúng tôi có var việc khởi tạo. 188 00:09:22,570 --> 00:09:24,650 Và tôi đoán bạn có phải cẩn thận để làm cho 189 00:09:24,650 --> 00:09:28,460 chắc chắn bạn không thay đổi giá trị của tôi từ một int cho một chuỗi, 190 00:09:28,460 --> 00:09:31,780 ví dụ, bởi vì điều đó sẽ gây ra hành vi lạ bạn có thể không 191 00:09:31,780 --> 00:09:32,280 chờ đợi. 192 00:09:32,280 --> 00:09:35,750 Nhưng điều này nên nhìn khá quen thuộc, là tốt. 193 00:09:35,750 --> 00:09:39,460 >> Vì vậy, đây là nơi mọi thứ bắt đầu có được một chút điên rồ trong JavaScript 194 00:09:39,460 --> 00:09:44,920 cho một người đang đi từ một nền của C. Có chức năng 195 00:09:44,920 --> 00:09:48,070 trong JavaScript, và có một cách để khai báo một hàm trông 196 00:09:48,070 --> 00:09:50,361 loại tương tự như C, và sau đó có một số khác mà 197 00:09:50,361 --> 00:09:52,450 trông loại khác nhau. 198 00:09:52,450 --> 00:09:54,930 >> Phiên bản đầu tiên, mà chúng ta có thể thấy ở đây, 199 00:09:54,930 --> 00:09:59,260 là loại C-như, nơi chúng tôi nói, đây là một chức năng, 200 00:09:59,260 --> 00:10:01,490 cung cấp cho nó một cái tên, cung cấp cho số lượng các đối số, 201 00:10:01,490 --> 00:10:05,150 và sau đó các nội dung của hàm đi vào bên trong những dấu ngoặc nhọn. 202 00:10:05,150 --> 00:10:08,850 Chúng ta sẽ thấy một ví dụ về đối số chỉ trong một giây. 203 00:10:08,850 --> 00:10:13,420 >> Trong khi đó, trên dòng tiếp theo, chúng ta thấy, oh, đây là một biến gọi là "myFunction," 204 00:10:13,420 --> 00:10:17,546 và chúng tôi bằng nó thế này function-- thing-- chung chung mà 205 00:10:17,546 --> 00:10:19,170 dường như không có bất cứ điều gì xảy ra. 206 00:10:19,170 --> 00:10:22,780 207 00:10:22,780 --> 00:10:26,080 Lý do đó là khác nhau hơn so với C là JavaScript 208 00:10:26,080 --> 00:10:30,040 là những gì được gọi là một ngôn ngữ chức năng, hoặc có yếu tố chức năng, có nghĩa là 209 00:10:30,040 --> 00:10:33,510 có chức năng là thực sự giá trị. 210 00:10:33,510 --> 00:10:39,520 Và điều đó có nghĩa là chúng ta có thể thiết lập một biến bằng với một chức năng 211 00:10:39,520 --> 00:10:43,210 và sau đó di chuyển chức năng xung quanh, vượt qua nó như một tham số, 212 00:10:43,210 --> 00:10:46,550 làm tất cả các loại công cụ như thế với chức năng. 213 00:10:46,550 --> 00:10:49,682 >> Một điều khác để note-- chức năng được viết 214 00:10:49,682 --> 00:10:51,140 với một số lượng nhất định các đối số. 215 00:10:51,140 --> 00:10:54,056 Chúng ta sẽ thấy một ví dụ về một hàm với một đối số vào các slide tiếp theo. 216 00:10:54,056 --> 00:10:56,720 Nhưng JavaScript sẽ không hét lên với bạn nếu bạn cố gắng 217 00:10:56,720 --> 00:10:59,330 sử dụng một chức năng với sai số của các đối số. 218 00:10:59,330 --> 00:11:05,310 Nó sẽ chỉ làm hết sức mình để làm cho làm, nghĩa là nếu bạn vượt qua, 219 00:11:05,310 --> 00:11:09,410 bạn gọi một chức năng mong đợi một lập luận không có đối số, tất cả những gì 220 00:11:09,410 --> 00:11:13,990 sẽ xảy ra là nó sẽ làm hết sức mình để cố gắng và thực thi mã, 221 00:11:13,990 --> 00:11:16,541 và nếu nó cuối cùng chạy vào một ngoại lệ hay một lỗi, 222 00:11:16,541 --> 00:11:19,790 nó sẽ ném ngoại lệ đó và chỉ cần giữ going-- đó chỉ là một trong những cách 223 00:11:19,790 --> 00:11:21,070 mà các công trình JavaScript. 224 00:11:21,070 --> 00:11:21,781 Yeah. 225 00:11:21,781 --> 00:11:24,207 >> Đung gì sẽ xảy ra nếu có quá nhiều tranh luận? 226 00:11:24,207 --> 00:11:26,040 SAM GREEN: Vì vậy, các Câu hỏi là, những gì sẽ xảy ra 227 00:11:26,040 --> 00:11:27,380 nếu có quá nhiều tranh luận? 228 00:11:27,380 --> 00:11:29,171 Và câu trả lời là JavaScript sẽ chỉ 229 00:11:29,171 --> 00:11:32,120 bỏ qua những cái được sau khi những người dự kiến. 230 00:11:32,120 --> 00:11:36,420 Nó sẽ cố gắng để thực hiện chức năng gọi như thể nó chỉ là lần đầu tiên hai. 231 00:11:36,420 --> 00:11:37,075 Bên phải? 232 00:11:37,075 --> 00:11:37,700 >> HUGH Zabriskie: Đúng, yeah. 233 00:11:37,700 --> 00:11:39,449 Tương tự như vậy, nếu có là quá ít đối số, 234 00:11:39,449 --> 00:11:42,640 nó chỉ là loại cho null để tất cả các tham số của nó không có bất kỳ giá trị 235 00:11:42,640 --> 00:11:43,660 cho. 236 00:11:43,660 --> 00:11:45,810 >> SAM GREEN: Những thể thực sự là tiện dụng, nếu bạn 237 00:11:45,810 --> 00:11:49,060 muốn viết một chức năng mà mất một đối số số biến. 238 00:11:49,060 --> 00:11:55,830 Bạn có thể thiết lập các giá trị mặc định trong định nghĩa của các chức năng, 239 00:11:55,830 --> 00:11:59,060 và nó có thể bỏ qua thực tế rằng các đầu vào không có ở đó. 240 00:11:59,060 --> 00:12:01,584 241 00:12:01,584 --> 00:12:04,000 Vì vậy, tôi muốn nói một chút thêm về viên đạn cuối cùng này 242 00:12:04,000 --> 00:12:05,541 điểm, đó là chức năng là những giá trị. 243 00:12:05,541 --> 00:12:07,930 244 00:12:07,930 --> 00:12:11,010 Đây là một ví dụ đó là một chút tâm-thổi 245 00:12:11,010 --> 00:12:14,880 nếu bạn chỉ cần đọc nó, và đừng nghĩ về những gì đang xảy ra trong một giây. 246 00:12:14,880 --> 00:12:17,910 Vì vậy, chúng ta hãy nhìn vào chỉ dòng đầu tiên ở đây. 247 00:12:17,910 --> 00:12:24,360 Chúng tôi có biến này, f1, mà chúng ta nói là một chức năng nào điều này. 248 00:12:24,360 --> 00:12:28,535 Và nội dung của hàm được console.log ('hello'). 249 00:12:28,535 --> 00:12:32,220 Bạn có thể nghĩ console.log như JavaScript tương đương của printf. 250 00:12:32,220 --> 00:12:35,510 Vì vậy, những gì sẽ xảy ra là, nếu chúng ta chạy mã này trong trình duyệt của chúng tôi, 251 00:12:35,510 --> 00:12:37,530 nó sẽ in ra một chuỗi. 252 00:12:37,530 --> 00:12:39,342 Tôi có thể chứng minh điều đó. 253 00:12:39,342 --> 00:12:42,300 Đung By đăng nhập, tuy nhiên, làm thế có nghĩa là nó được ghi lại ở đâu đó? 254 00:12:42,300 --> 00:12:42,550 SAM GREEN: Yeah. 255 00:12:42,550 --> 00:12:44,216 Vì vậy, tôi sẽ cho bạn thấy những gì sẽ xảy ra. 256 00:12:44,216 --> 00:12:48,085 Vì vậy, câu hỏi là, những gì hiện log nghĩa là gì? 257 00:12:48,085 --> 00:12:51,262 >> HUGH Zabriskie: Vậy console.log giống như printf cho C. 258 00:12:51,262 --> 00:12:52,970 SAM GREEN: Vì vậy console.log giống như printf, 259 00:12:52,970 --> 00:12:59,240 vì vậy nếu tôi có console.log này ('hello'), và tôi gọi đó, các chuỗi "hello" 260 00:12:59,240 --> 00:13:00,730 được in ra để giao diện điều khiển. 261 00:13:00,730 --> 00:13:03,340 Đây là giao diện điều khiển. 262 00:13:03,340 --> 00:13:05,930 Nó giống như printf, nơi nó in ra để tiêu chuẩn. 263 00:13:05,930 --> 00:13:09,050 264 00:13:09,050 --> 00:13:11,230 Và chúng ta sẽ thấy trong một phút, nhưng điều này là thực sự 265 00:13:11,230 --> 00:13:16,529 đề cập đến các đối tượng giao diện điều khiển, và gọi một phương thức trên đối tượng đó. 266 00:13:16,529 --> 00:13:18,320 Điều đó sẽ có ý nghĩa hơn trong một phút khi chúng tôi 267 00:13:18,320 --> 00:13:20,660 nhận được để nói về đối tượng trong JavaScript, 268 00:13:20,660 --> 00:13:22,509 nhưng tôi nghĩ tôi sẽ chỉ đề cập đến đó. 269 00:13:22,509 --> 00:13:24,300 HUGH Zabriskie: Chúng tôi sử dụng để trong C, right-- 270 00:13:24,300 --> 00:13:27,580 chúng tôi thường viết một chương trình lớn trong chính để làm bất cứ điều gì. 271 00:13:27,580 --> 00:13:30,700 Nhưng những gì là mát mẻ trong JavaScript là bạn có loại thông dịch 272 00:13:30,700 --> 00:13:33,620 chạy trong thời gian thực, vì vậy nó chỉ mất từng dòng, 273 00:13:33,620 --> 00:13:35,320 nó chỉ có thể giải thích điều đó ngay tại chỗ. 274 00:13:35,320 --> 00:13:37,403 Và nó theo dõi điều đó đã chạy trước, 275 00:13:37,403 --> 00:13:41,620 do đó, nó là một công cụ khá hữu ích cho sử dụng console.log, hoặc giao diện điều khiển, 276 00:13:41,620 --> 00:13:46,870 nói chung, chỉ chơi xung quanh với JavaScript. 277 00:13:46,870 --> 00:13:51,420 >> SAM GREEN: Quay trở lại với này example-- dòng thứ hai của mã 278 00:13:51,420 --> 00:13:55,320 ở đây là khá tâm-boggling trong đầu tôi. 279 00:13:55,320 --> 00:13:59,790 Lần đầu tiên tôi đọc, nó được như thế, những gì đang xảy ra? 280 00:13:59,790 --> 00:14:04,580 Vì vậy, những gì đang xảy ra là, này khai báo hàm nói, 281 00:14:04,580 --> 00:14:10,170 Tôi có một chức năng gọi là f2 đó là mong đợi một đối số, f, 282 00:14:10,170 --> 00:14:12,990 và sau đó nó gọi mà chức năng, f, mà 283 00:14:12,990 --> 00:14:17,652 đã được thông qua để nó như là một đối số không có đối số của chính nó. 284 00:14:17,652 --> 00:14:19,110 Vì vậy, đó có thể là khó hiểu. 285 00:14:19,110 --> 00:14:21,890 286 00:14:21,890 --> 00:14:28,400 Nếu chúng ta hiểu điều này như f2 mất f1 như một tham số, và sau đó bên trong của f2, 287 00:14:28,400 --> 00:14:31,190 f được called-- mà phương tiện mà dòng mã này, 288 00:14:31,190 --> 00:14:34,192 sau khi hai dòng mã, kết quả trong "hello" 289 00:14:34,192 --> 00:14:35,400 được in ra console. 290 00:14:35,400 --> 00:14:41,660 291 00:14:41,660 --> 00:14:44,910 >> Thực tế là chúng ta có thể vượt qua chức năng xung quanh như các giá trị 292 00:14:44,910 --> 00:14:47,870 kết thúc lên được một trong những nhất tính năng mạnh mẽ của JavaScript 293 00:14:47,870 --> 00:14:49,700 như là một ngôn ngữ lập trình. 294 00:14:49,700 --> 00:14:52,782 Bên ngoài của tất cả các điều tuyệt vời nó có thể làm, 295 00:14:52,782 --> 00:14:54,990 chỉ là một tính năng của ngôn ngữ trong điều kiện của cách 296 00:14:54,990 --> 00:14:58,400 mà nó làm cho mọi thứ dễ dàng chương trình và cho phép 297 00:14:58,400 --> 00:15:01,060 cho những thứ mà không phải là đặc biệt rất phù hợp với các trang web, 298 00:15:01,060 --> 00:15:04,500 lập trình chức năng và chức năng khía cạnh lập trình JavaScript 299 00:15:04,500 --> 00:15:07,130 là một trong những nhất khái niệm mạnh mẽ 300 00:15:07,130 --> 00:15:11,030 tồn tại trong JavaScript-- nếu bạn hỏi tôi. 301 00:15:11,030 --> 00:15:11,960 Mát. 302 00:15:11,960 --> 00:15:13,534 >> Vì vậy, điều tiếp theo. 303 00:15:13,534 --> 00:15:16,450 Ngoài việc là chức năng, cũng có những yếu tố của JavaScript 304 00:15:16,450 --> 00:15:20,510 đó là hướng đối tượng, đó là một trong số rất 305 00:15:20,510 --> 00:15:23,800 Nói cách buzz phổ biến trong khoa học máy tính. 306 00:15:23,800 --> 00:15:27,040 Lập trinh Hương đôi tượng là một điều thực sự phổ biến. 307 00:15:27,040 --> 00:15:34,210 JavaScript có một phiên bản đó, nơi mà tôi tin rằng mọi giá trị cũng là 308 00:15:34,210 --> 00:15:41,475 một đối tượng, trong đó có nghĩa là mọi đối tượng kết thúc tốt đẹp với nhau một số lượng các giá trị. 309 00:15:41,475 --> 00:15:44,020 310 00:15:44,020 --> 00:15:49,750 Vì vậy, đối với các giá trị mà đơn giản, giống như một số nguyên, như varX bằng 5, 311 00:15:49,750 --> 00:15:52,250 đối tượng đó chỉ kết thúc tốt đẹp mà một giá trị. 312 00:15:52,250 --> 00:15:54,760 313 00:15:54,760 --> 00:15:59,036 >> Nhưng chúng ta cũng có thể tưởng tượng một tình huống where-- chúng ta có thể nghĩ về tình huống trong C 314 00:15:59,036 --> 00:16:00,910 nơi chúng tôi muốn làm một cái gì đó với cấu trúc, 315 00:16:00,910 --> 00:16:03,285 Ví dụ, kết thúc tốt đẹp nhiều giá trị với nhau và làm cho 316 00:16:03,285 --> 00:16:05,870 nó thực sự dễ dàng để vượt qua những thứ xung quanh. 317 00:16:05,870 --> 00:16:09,270 Đó là khi một đối tượng là trong JavaScript. 318 00:16:09,270 --> 00:16:12,340 >> Điều quan trọng là phải nhớ khi tôi nói rằng các đối tượng bọc 319 00:16:12,340 --> 00:16:15,330 số lượng các giá trị với nhau, mà chức năng cũng là 320 00:16:15,330 --> 00:16:21,506 giá trị, có nghĩa là chức năng có thể cũng được bên trong của một đối tượng JavaScript. 321 00:16:21,506 --> 00:16:26,910 Và lý do đó là quan trọng là, trong khi chúng ta thường 322 00:16:26,910 --> 00:16:30,290 nghĩ về gọi một phương thức trên một đối tượng đó 323 00:16:30,290 --> 00:16:35,200 một thuật ngữ phổ biến từ khác ngôn ngữ hướng đối tượng phổ biến, 324 00:16:35,200 --> 00:16:39,330 một trong những sự khác biệt ở đây là tất cả những gì một phương pháp là trong JavaScript 325 00:16:39,330 --> 00:16:47,270 là một giá trị được lưu trữ bên trong của một đối tượng mà thực hiện một số action-- thể 326 00:16:47,270 --> 00:16:51,850 sử dụng các giá trị khác được bên trong của đối tượng đó, nhưng không nhất thiết. 327 00:16:51,850 --> 00:16:56,930 Vì vậy, bạn có thể tưởng tượng một tình huống, tôi đoán trong một chút của một cách điên rồ, 328 00:16:56,930 --> 00:17:02,990 nơi bạn được gọi là một phương pháp của một phản đối trên một đối tượng khác, ví dụ. 329 00:17:02,990 --> 00:17:06,010 Vì vậy, đó là một chút sôi nổi theo cách đó. 330 00:17:06,010 --> 00:17:09,369 >> Và bạn cũng có thể thay đổi các phương pháp được liên kết với một đối tượng 331 00:17:09,369 --> 00:17:13,740 bằng cách gán cho rằng phương pháp một chức năng mới, đó cũng là 332 00:17:13,740 --> 00:17:18,250 khá khác nhau từ khác ngôn ngữ hướng đối tượng, nơi 333 00:17:18,250 --> 00:17:21,410 một khi chúng ta khai báo một đối tượng và nhanh chóng nó, 334 00:17:21,410 --> 00:17:25,839 chúng ta không thể thay đổi các phương pháp đó là kết hợp với đối tượng đó nữa. 335 00:17:25,839 --> 00:17:28,680 Vì vậy, đó là khá khác nhau. 336 00:17:28,680 --> 00:17:29,570 Mát. 337 00:17:29,570 --> 00:17:34,010 >> Vì vậy, đây là một ví dụ, đầu tiên, của một đối tượng trong hành động. 338 00:17:34,010 --> 00:17:36,390 Đây là những gì được gọi là một đối tượng chung chung, mà 339 00:17:36,390 --> 00:17:39,460 có nghĩa là nó không có bất kỳ tên cụ thể, không có một lớp học, 340 00:17:39,460 --> 00:17:42,190 nó chỉ là một số bao bì của các giá trị. 341 00:17:42,190 --> 00:17:49,790 Và cách mà trông là, chúng ta có cặp bên ngoài này của xoăn niềng răng đây 342 00:17:49,790 --> 00:17:57,950 mà chỉ ra cho JavaScript và nói, đây là một đối tượng. 343 00:17:57,950 --> 00:18:02,130 Các giá trị bên trong của nó là mỗi giá trị bên trong 344 00:18:02,130 --> 00:18:04,590 của các đối tượng mà nên được bao bọc với nhau. 345 00:18:04,590 --> 00:18:09,180 Và bên trong của đối tượng đó, sau đó chúng ta có các cặp giá trị quan trọng, 346 00:18:09,180 --> 00:18:13,880 mà chính đề cập đến tên các giá trị bên trong của đối tượng, 347 00:18:13,880 --> 00:18:16,790 và side-- khác đối diện here-- đại tràng 348 00:18:16,790 --> 00:18:19,850 là giá trị thực tế mà sẽ được lưu. 349 00:18:19,850 --> 00:18:26,210 >> Vì vậy, bạn thấy ở đây chúng ta có một phím gọi là fn với giá trị sam, 350 00:18:26,210 --> 00:18:29,430 theo sau là một dấu phẩy, nói lên mục tiếp theo. 351 00:18:29,430 --> 00:18:33,560 Sau đó, một phím gọi là ln, với một giá trị của màu xanh lá cây, 352 00:18:33,560 --> 00:18:35,840 theo sau là một dấu phẩy, tiếp theo là "in" 353 00:18:35,840 --> 00:18:43,209 đó là sẽ có một giá trị chức năng có nghĩa là sẽ làm dòng mã này. 354 00:18:43,209 --> 00:18:45,500 Hãy lùi lại một bước và giải nén những gì đang xảy ra ở đây. 355 00:18:45,500 --> 00:18:47,280 Vì vậy, đây là một chút phức tạp, và chúng ta đang nhìn thấy một cái gì đó mới 356 00:18:47,280 --> 00:18:48,071 cho lần đầu tiên. 357 00:18:48,071 --> 00:18:51,190 358 00:18:51,190 --> 00:18:55,065 Các "này" từ khóa là điều mới chúng ta đang thấy ở đây, và điều này không 359 00:18:55,065 --> 00:19:00,540 là, đề cập đến hiện tại đối tượng trong phạm vi, phải không? 360 00:19:00,540 --> 00:19:03,990 Vì vậy, khi chúng ta nói, này chỉ tất cả các cách trở lại 361 00:19:03,990 --> 00:19:08,140 để toàn bộ object-- này khi chúng ta làm this.fn, 362 00:19:08,140 --> 00:19:11,990 chúng ta sẽ đi tất cả các cách trở lại đến đối tượng này, đi đến các giá trị fn 363 00:19:11,990 --> 00:19:16,471 và nhận được sam, kéo nó tất cả các cách trở lại, dính nó ở đây, và sau đó di chuyển trên. 364 00:19:16,471 --> 00:19:19,838 >> Đung Vì vậy, với việc thu hồi, là mà thực hiện vì các tham số 365 00:19:19,838 --> 00:19:20,621 Định nghĩa? 366 00:19:20,621 --> 00:19:23,870 SAM GREEN: Vậy câu hỏi là, là thu hồi thực hiện vì các tham số 367 00:19:23,870 --> 00:19:24,727 Định nghĩa? 368 00:19:24,727 --> 00:19:25,435 Vâng, hoàn toàn. 369 00:19:25,435 --> 00:19:29,660 370 00:19:29,660 --> 00:19:32,470 Chuyện gì sẽ xảy ra ở đây là, dot này nói với JavaScript, 371 00:19:32,470 --> 00:19:39,990 OK, tôi nhận được một số giá trị từ đối tượng này từ bản thân mình. 372 00:19:39,990 --> 00:19:46,375 Và sau đó nó sẽ tìm một entry gọi fn, và nếu nó tìm thấy nó, 373 00:19:46,375 --> 00:19:48,470 nó sẽ trả lại rằng value-- như vậy, đó là sam. 374 00:19:48,470 --> 00:19:51,540 Nhưng tôi cũng có thể đã gõ một cái gì đó mà không được định nghĩa ở đây, 375 00:19:51,540 --> 00:19:54,090 và sau đó nó sẽ chỉ trở undefined-- mà 376 00:19:54,090 --> 00:19:58,250 là một điều mà JavaScript có thể làm, mà có thể có lợi ích, 377 00:19:58,250 --> 00:20:03,190 nhưng nó also-- nếu bạn thực hiện một lỗi đánh máy, nó có thể dẫn đến lỗi lạ. 378 00:20:03,190 --> 00:20:05,617 Vì vậy, nó sẽ chỉ cố gắng tìm bất cứ điều gì bạn nói với nó để tìm 379 00:20:05,617 --> 00:20:07,700 và nó sẽ không phàn nàn nếu không tìm thấy nó. 380 00:20:07,700 --> 00:20:11,390 Nó sẽ chỉ nói rằng, tôi đã không tìm thấy nó, và sau đó di chuyển trên. 381 00:20:11,390 --> 00:20:17,581 Vì vậy, nó sẽ không được định nghĩa, cộng với trống, cộng với tên cuối cùng. 382 00:20:17,581 --> 00:20:18,080 Yeah. 383 00:20:18,080 --> 00:20:21,070 Và sau đó chúng ta có thể thấy rằng nếu chúng tôi sau đó có thể đi xuống và access-- 384 00:20:21,070 --> 00:20:25,450 và chúng tôi gọi tf.print () với dấu ngoặc đơn. 385 00:20:25,450 --> 00:20:30,000 Nó sẽ gọi in mà hàm không có đối số, phải không? 386 00:20:30,000 --> 00:20:34,490 Nhưng nếu chúng ta chỉ nói tf.print () dấu chấm phẩy, mà không có dấu ngoặc đơn, 387 00:20:34,490 --> 00:20:37,480 tất cả những gì đã có thể làm là kéo hiện chức năng từ các giá trị, 388 00:20:37,480 --> 00:20:40,609 nhưng không thực sự gọi nó. 389 00:20:40,609 --> 00:20:41,162 Mát. 390 00:20:41,162 --> 00:20:42,870 HUGH Zabriskie: Có nên chúng tôi làm cho một đối tượng? 391 00:20:42,870 --> 00:20:44,161 SAM GREEN: Chắc chắn, chúng ta hãy làm điều đó. 392 00:20:44,161 --> 00:20:48,750 Vì vậy, tôi có thể di chuyển này ví dụ để các giao diện điều khiển. 393 00:20:48,750 --> 00:20:51,380 394 00:20:51,380 --> 00:20:55,466 Chúng ta có thể tưởng tượng rằng tôi có một đối tượng. 395 00:20:55,466 --> 00:21:03,026 396 00:21:03,026 --> 00:21:04,150 Vì vậy, đây là một đối tượng đơn giản. 397 00:21:04,150 --> 00:21:06,910 398 00:21:06,910 --> 00:21:11,050 Đây là một đối tượng có chứa hai giá trị với hai phím, hai giá trị quan trọng 399 00:21:11,050 --> 00:21:12,710 cặp. 400 00:21:12,710 --> 00:21:21,850 Vì vậy, tôi sau đó có thể truy cập các giá trị được lưu trữ bên trong của đối tượng này bằng cách làm x.x1, 401 00:21:21,850 --> 00:21:23,400 ví dụ, và tôi nhận được 1 trở lại. 402 00:21:23,400 --> 00:21:29,590 Tương tự như vậy, x.x2, có được giá trị đó trở lại. 403 00:21:29,590 --> 00:21:33,330 >> Và bây giờ điều thực sự thú vị là, tôi có thể thực sự thêm một cái gì đó để đối tượng này 404 00:21:33,330 --> 00:21:34,316 sau khi tôi đã tạo ra nó. 405 00:21:34,316 --> 00:21:36,315 Vì vậy, bạn có thể tưởng tượng, chúng ta hãy nói rằng tôi có một chức năng. 406 00:21:36,315 --> 00:21:44,430 407 00:21:44,430 --> 00:21:46,352 >> HUGH Zabriskie: Bạn phải làm Shift-Enter. 408 00:21:46,352 --> 00:21:47,643 >> SAM GREEN: Oh, đó là gây phiền nhiễu. 409 00:21:47,643 --> 00:22:02,460 410 00:22:02,460 --> 00:22:04,324 Sao nó không thích những gì? 411 00:22:04,324 --> 00:22:04,824 Oh. 412 00:22:04,824 --> 00:22:07,532 413 00:22:07,532 --> 00:22:08,691 Ở đây chúng tôi đi. 414 00:22:08,691 --> 00:22:09,190 Mát. 415 00:22:09,190 --> 00:22:12,840 >> Vì vậy, tôi vừa tạo chức năng này, f, mà 416 00:22:12,840 --> 00:22:17,590 sẽ đi đến hiện tại đối tượng và in this.x1. 417 00:22:17,590 --> 00:22:20,330 Vì vậy, nếu tôi chỉ cần gọi f bởi chính nó, không có gì đang xảy ra 418 00:22:20,330 --> 00:22:26,970 xảy ra, phải không, vì không có x1 lĩnh vực trong các đối tượng mà nó đang nói đến. 419 00:22:26,970 --> 00:22:39,710 Nhưng, nếu tôi nói, x.f = f, và sau đó tôi gọi x.f (), tôi sẽ nhận lại 1. 420 00:22:39,710 --> 00:22:42,990 421 00:22:42,990 --> 00:22:46,530 Điều đó hàm f tại là liên kết với các đối tượng x, 422 00:22:46,530 --> 00:22:51,800 trong đó có một phím gọi là x1 kết hợp với các giá trị 1, 423 00:22:51,800 --> 00:22:54,570 do đó, khi chúng tôi gọi this.x1, nó sẽ tìm thấy những gì nó đang tìm kiếm 424 00:22:54,570 --> 00:22:56,450 và có thể in một giá trị ra. 425 00:22:56,450 --> 00:22:58,700 Vì vậy, đó chỉ là một ví dụ các loại của những điều điên rồ 426 00:22:58,700 --> 00:23:01,190 bạn có thể làm với các đối tượng trong JavaScript. 427 00:23:01,190 --> 00:23:03,870 428 00:23:03,870 --> 00:23:07,560 >> Vì vậy, phiên bản đó là phiên bản chung, ý nghĩa 429 00:23:07,560 --> 00:23:13,780 mà chúng tôi đã tạo ra một đối tượng sử dụng này ngoặc ký hiệu cú đúp notation--, 430 00:23:13,780 --> 00:23:16,880 rather-- và đó là tiện dụng nếu chúng ta chỉ muốn 431 00:23:16,880 --> 00:23:21,440 một ví dụ của một đối tượng cụ thể, nhưng nếu chúng ta muốn có nhiều hơn một 432 00:23:21,440 --> 00:23:22,210 cùng loại? 433 00:23:22,210 --> 00:23:24,440 Và câu trả lời đó Câu hỏi là, có những điều 434 00:23:24,440 --> 00:23:26,760 được gọi là các lớp học trong JavaScript là tốt. 435 00:23:26,760 --> 00:23:31,470 436 00:23:31,470 --> 00:23:36,420 Chúng ta có thể tạo ra một chức năng mà hiện một số loại khởi tạo 437 00:23:36,420 --> 00:23:41,690 cho một đối tượng nước ngoài, và chúng tôi muốn nói, như thế, 438 00:23:41,690 --> 00:23:44,550 class-- của tôi vì vậy tên của object-- thể tái sử dụng 439 00:23:44,550 --> 00:23:47,100 bằng chức năng đặt nó lên. 440 00:23:47,100 --> 00:23:52,280 Vì vậy, điều này sẽ tương đương với để được tạo ra một đối tượng 441 00:23:52,280 --> 00:23:55,930 sẽ chỉ là thích, ngoặc móc, str, đại tràng, 442 00:23:55,930 --> 00:23:59,630 này là một chuỗi, dấu chấm phẩy, dấu ngoặc nhọn. 443 00:23:59,630 --> 00:24:01,880 Đó sẽ là generic đối tượng chúng ta khởi tạo, 444 00:24:01,880 --> 00:24:06,380 với một sự khác biệt là trên dòng tiếp theo chúng ta tạo ra một mẫu thử nghiệm, trong đó 445 00:24:06,380 --> 00:24:11,190 có nghĩa là nó là một khóa mặc định chúng ta thêm vào đối tượng của chúng tôi 446 00:24:11,190 --> 00:24:13,970 có giá trị được liệt kê ở đây. 447 00:24:13,970 --> 00:24:20,570 Có nghĩa là, khi tôi tạo ra một mới thể hiện của đối tượng MyClass này, 448 00:24:20,570 --> 00:24:27,440 nó sẽ có tiền xây dựng bên trong của cho nó một giá trị gọi là str và giá trị khác 449 00:24:27,440 --> 00:24:32,418 gọi myPrint, đó là sẽ là một chức năng. 450 00:24:32,418 --> 00:24:32,918 Thật tuyệt vời. 451 00:24:32,918 --> 00:24:37,410 452 00:24:37,410 --> 00:24:37,990 >> Thật tuyệt. 453 00:24:37,990 --> 00:24:40,710 Vì vậy, điều cuối cùng nói về JavaScript 454 00:24:40,710 --> 00:24:46,430 là nó thực sự hữu ích cho những gì được gọi là hoạt động không đồng bộ. 455 00:24:46,430 --> 00:24:52,500 Phương tiện không đồng bộ là chúng tôi có thể chờ đợi cho một số hoạt động 456 00:24:52,500 --> 00:24:57,870 để hoàn thành trước khi chúng tôi di chuyển trên, nhưng di chuyển vào trong khi chúng tôi chờ đợi 457 00:24:57,870 --> 00:24:59,690 và sau đó có một cái gì đó xảy ra sau này. 458 00:24:59,690 --> 00:25:03,480 Và những gì tôi có ý nghĩa bởi đó là, bạn có thể tưởng tượng một tình huống mà 459 00:25:03,480 --> 00:25:06,850 bạn gửi một yêu cầu đến một số máy chủ web nơi nào đó, 460 00:25:06,850 --> 00:25:09,670 và nó sẽ gửi lại cho bạn một số đoạn lớn của dữ liệu, phải không? 461 00:25:09,670 --> 00:25:13,320 Và người dùng của bạn có thể chờ đợi trong khi chờ đợi điều đó xảy ra, 462 00:25:13,320 --> 00:25:15,200 và không có gì có thể xảy ra tại thời điểm đó. 463 00:25:15,200 --> 00:25:18,110 Nhưng đó không phải là một thiết kế tuyệt vời, phải không? 464 00:25:18,110 --> 00:25:20,214 Bạn không muốn các trang web để đóng băng. 465 00:25:20,214 --> 00:25:22,380 Điều gì nếu người dùng muốn bấm vào một trình đơn thả xuống? 466 00:25:22,380 --> 00:25:24,870 Nó không phải là một mẫu thiết kế tuyệt vời. 467 00:25:24,870 --> 00:25:29,290 Thay vào đó, về cơ bản những gì JavaScript không được nói, 468 00:25:29,290 --> 00:25:31,870 OK, làm hoạt động này không đồng bộ. 469 00:25:31,870 --> 00:25:36,520 Vì vậy, như thế, chờ đợi trong nền, và sau đó khi các hoạt động được thực hiện, 470 00:25:36,520 --> 00:25:39,420 gọi callback function-- gọi một số chức năng, 471 00:25:39,420 --> 00:25:43,800 sao một số action-- để báo hiệu rằng hoạt động chúng tôi đã chờ đợi để kết thúc 472 00:25:43,800 --> 00:25:45,520 kết thúc. 473 00:25:45,520 --> 00:25:51,240 Và lý do đó là siêu mạnh là, chúng ta có thể làm điều gì đó, vượt qua một đối số, 474 00:25:51,240 --> 00:25:54,440 làm điều gì đó, và sau đó chờ đợi cho một cái gì đó xảy ra. 475 00:25:54,440 --> 00:25:58,970 Sau đó, một khi một cái gì đó hoàn tất, chúng ta có thể gọi một cuộc gọi lại. 476 00:25:58,970 --> 00:26:03,300 Đó là thực sự tiện dụng vì nó cho phép chúng tôi làm việc với API Web âm thanh, 477 00:26:03,300 --> 00:26:07,490 Ví dụ, như tải một tập tin âm thanh từ một máy chủ từ xa 478 00:26:07,490 --> 00:26:11,660 mà không cần phải chờ đợi toàn bộ tập tin âm thanh được nạp, 479 00:26:11,660 --> 00:26:14,440 đó sẽ là thực sự xấu cho người dùng kinh nghiệm. 480 00:26:14,440 --> 00:26:17,080 Mát. 481 00:26:17,080 --> 00:26:19,460 >> Vài ghi chú về gỡ lỗi, vì đây 482 00:26:19,460 --> 00:26:23,682 là một điều bạn sẽ phải làm như là một phần của dự án của bạn, đảm bảo. 483 00:26:23,682 --> 00:26:25,140 Tôi đề cập đến điều khiển JavaScript. 484 00:26:25,140 --> 00:26:27,550 Đó là một tính năng siêu hữu ích của tất cả các trình duyệt hiện đại, 485 00:26:27,550 --> 00:26:30,300 Và chúng tôi thực sự khuyến khích các bạn thoải mái sử dụng giao diện điều khiển của bạn, 486 00:26:30,300 --> 00:26:33,660 nếu bạn muốn có được tốt ở JavaScript. 487 00:26:33,660 --> 00:26:36,320 Đó là siêu tiện dụng cho gỡ lỗi, nhưng nó cũng 488 00:26:36,320 --> 00:26:39,440 thực sự hữu ích cho việc tìm hiểu làm thế nào để sử dụng một API. 489 00:26:39,440 --> 00:26:41,950 Nó cho phép thực sự dễ dàng thử nghiệm 490 00:26:41,950 --> 00:26:45,910 mà không cần phải gõ một số mã, và sau đó biên dịch nó. 491 00:26:45,910 --> 00:26:47,500 Bạn không cần phải làm tất cả các bước. 492 00:26:47,500 --> 00:26:49,619 Bạn chỉ có thể viết một số mã vào một dòng, 493 00:26:49,619 --> 00:26:52,410 và sau đó nhận được thông tin phản hồi ngay lập tức về có hay không có dòng mã 494 00:26:52,410 --> 00:26:55,230 worked-- rất tiện dụng. 495 00:26:55,230 --> 00:26:59,760 >> Và cũng có thể, chỉ là một note-- kỹ thuật bảng điều khiển JavaScript là một ví dụ 496 00:26:59,760 --> 00:27:05,680 của một REPL-- vì vậy đó là R-E-P-L, REPL, đó là viết tắt cho đọc, đánh giá, 497 00:27:05,680 --> 00:27:06,180 in loop. 498 00:27:06,180 --> 00:27:09,100 499 00:27:09,100 --> 00:27:12,120 Bạn đang đi đến gõ một số công cụ trong, nó sẽ đọc những gì bạn gõ vào, 500 00:27:12,120 --> 00:27:17,280 nó sẽ đánh giá nó, và nó sẽ in ra đầu ra, và sau đó nó sẽ bắt đầu lại. 501 00:27:17,280 --> 00:27:22,056 Điều đó cho phép bạn nhanh chóng đi vào vòng lặp, mà là thực sự mát mẻ. 502 00:27:22,056 --> 00:27:25,150 503 00:27:25,150 --> 00:27:28,930 >> Tôi đoán cuối cùng thực note-- này là lưu ý cuối cùng thực tế, có. 504 00:27:28,930 --> 00:27:30,780 Làm thế nào để chúng ta thực sự sử dụng JavaScript? 505 00:27:30,780 --> 00:27:34,040 Vì vậy, đầu tiên, chúng tôi có thể nhập khẩu nó sử dụng một thẻ script 506 00:27:34,040 --> 00:27:39,500 ở trên cùng hoặc dưới cùng của một HTML file-- bất cứ nơi nào bên trong của một tập tin HTML, 507 00:27:39,500 --> 00:27:40,440 thực sự. 508 00:27:40,440 --> 00:27:47,390 Và trong một thẻ script, có hai tiểu cách nhập JavaScript. 509 00:27:47,390 --> 00:27:51,370 Đầu tiên là bởi có một tập tin JavaScript riêng biệt 510 00:27:51,370 --> 00:27:58,010 mà chúng tôi nhập khẩu toàn bộ, hoặc bởi có một diện tích mã như kịch bản 511 00:27:58,010 --> 00:28:00,290 để bắt đầu, và sau đó script dấu chéo ngược để kết thúc. 512 00:28:00,290 --> 00:28:02,620 Và sau đó chúng ta chỉ cần viết JavaScript bên trong các tập tin HTML. 513 00:28:02,620 --> 00:28:03,790 Đó là hai cách. 514 00:28:03,790 --> 00:28:05,165 Bạn không thể có nó bên trong của HTML. 515 00:28:05,165 --> 00:28:06,502 516 00:28:06,502 --> 00:28:08,126 Đung là một tốt hơn so với người khác? 517 00:28:08,126 --> 00:28:10,542 SAM GREEN: Câu hỏi là, là một trong tốt hơn khác. 518 00:28:10,542 --> 00:28:18,306 Vì vậy, có, như là một thực hành phong cách mã hóa, và cũng có thể nó giống như một thiết kế thực hành. 519 00:28:18,306 --> 00:28:20,180 Có hai lý do lý do tại sao nó có thể được tốt hơn. 520 00:28:20,180 --> 00:28:23,934 Đầu tiên là, nó làm cho mã của bạn một nhiều dễ đọc hơn nếu tất cả các HTML của bạn 521 00:28:23,934 --> 00:28:27,100 là ở một nơi, tất cả các CSS của bạn đang ở một nơi khác, tất cả các bạn JavaScript 522 00:28:27,100 --> 00:28:28,420 là ở một vị trí thứ ba. 523 00:28:28,420 --> 00:28:28,920 Bên phải? 524 00:28:28,920 --> 00:28:32,370 Tôi nghĩ chúng ta nên đã nói chuyện về nó trong sections-- như CSS-- gì 525 00:28:32,370 --> 00:28:35,220 rằng is-- và nó đi thường trong tập tin khác. 526 00:28:35,220 --> 00:28:37,090 Vì vậy, loại tương tự của khái niệm ở đây. 527 00:28:37,090 --> 00:28:42,410 Bạn cũng có thể tưởng tượng rằng JavaScript sẽ được tái sử dụng trên nhiều hơn một 528 00:28:42,410 --> 00:28:47,350 Trang HTML, hoặc có lẽ một Rất đông các trang HTML, 529 00:28:47,350 --> 00:28:49,340 và có JavaScript refactored thành một 530 00:28:49,340 --> 00:28:51,950 tập tin mà bạn có thể nhập khẩu vào nhiều hơn một nơi 531 00:28:51,950 --> 00:28:54,570 cho phép mã được cách duy trì nhiều hơn. 532 00:28:54,570 --> 00:28:57,930 Bạn có thể tưởng tượng làm cho một thay đổi để các JavaScript 533 00:28:57,930 --> 00:29:00,070 và phải thay đổi nó trong 100 tập tin khác nhau. 534 00:29:00,070 --> 00:29:04,070 Và thay vì chúng ta chỉ có thể thay đổi nó trong một, mà là cách mạnh mẽ hơn. 535 00:29:04,070 --> 00:29:05,420 Tôi đã trả lời câu hỏi của bạn? 536 00:29:05,420 --> 00:29:07,950 Mát. 537 00:29:07,950 --> 00:29:10,830 >> Chúng tôi cũng có thể gõ vào bàn điều khiển, như chúng tôi đã đề cập trước đây. 538 00:29:10,830 --> 00:29:15,070 Và một lần nữa, một note-- cuối cùng Web Audio được tích hợp sẵn, 539 00:29:15,070 --> 00:29:16,978 bạn không cần phải tải bất cứ điều gì. 540 00:29:16,978 --> 00:29:17,478 Mát. 541 00:29:17,478 --> 00:29:20,519 Có bất kỳ câu hỏi nào, bạn có câu hỏi nữa về JavaScript, 542 00:29:20,519 --> 00:29:21,930 trước khi chúng tôi di chuyển trên? 543 00:29:21,930 --> 00:29:24,286 >> Đung [Không nghe thấy] 544 00:29:24,286 --> 00:29:25,410 SAM GREEN: Tất cả các bên phải, thoáng mát. 545 00:29:25,410 --> 00:29:27,200 Vì vậy, bây giờ anh ta sẽ nói về các API. 546 00:29:27,200 --> 00:29:28,490 >> HUGH Zabriskie: Cool. 547 00:29:28,490 --> 00:29:28,990 Cảm ơn, Sam. 548 00:29:28,990 --> 00:29:30,184 >> SAM GREEN: Chắc chắn. 549 00:29:30,184 --> 00:29:32,600 HUGH Zabriskie: Awesome, vì vậy chúng tôi sẽ chuyển từ JavaScript. 550 00:29:32,600 --> 00:29:35,350 Vì vậy, chúng tôi đã nói về một số các yếu tố cần thiết của JavaScript, 551 00:29:35,350 --> 00:29:41,105 và đó là những biến, chức năng, đối tượng, chức năng như các biến, 552 00:29:41,105 --> 00:29:41,980 tải không đồng bộ. 553 00:29:41,980 --> 00:29:46,100 Đây là tất cả những điều mà bạn sẽ thấy xem như bạn sử dụng Web Audio. 554 00:29:46,100 --> 00:29:49,230 Vì vậy, chúng tôi chỉ cần đi để nói chuyện về nó đầu tiên ở mức cao. 555 00:29:49,230 --> 00:29:52,120 >> Nó là một API, do đó, nó là một cái gì đó đó là xây dựng, như Sam cho biết, 556 00:29:52,120 --> 00:29:57,010 ngay vào JavaScript mà bạn sử dụng trong giao diện điều khiển. 557 00:29:57,010 --> 00:30:01,020 Và nó thực sự giống như C ++ đó là thực sự được xây dựng vào Chrome 558 00:30:01,020 --> 00:30:04,470 và Firefox, và tất cả các trình duyệt. 559 00:30:04,470 --> 00:30:07,060 Vì vậy, ý tưởng chính với Web Âm thanh là bạn có 560 00:30:07,060 --> 00:30:09,440 loại đường ống dẫn âm thanh, phải không? 561 00:30:09,440 --> 00:30:13,670 Vì vậy, dữ liệu âm thanh của bạn đi kèm trong một số hình thức. 562 00:30:13,670 --> 00:30:16,690 >> Có ba loại forms-- chính bạn có dao động, mà 563 00:30:16,690 --> 00:30:21,340 tạo ra một làn sóng sin, cos sóng, chúng ta sẽ xem làm thế nào mà làm việc. 564 00:30:21,340 --> 00:30:23,890 Một số khác rất phổ biến, Tất nhiên, là một MP3. 565 00:30:23,890 --> 00:30:25,810 Vì vậy, có thể bạn bắt đầu với một bài hát, và sau đó bạn 566 00:30:25,810 --> 00:30:28,320 muốn làm một số bộ lọc để đó và đầu ra 567 00:30:28,320 --> 00:30:30,605 that-- đó có thể là một nguồn có thể. 568 00:30:30,605 --> 00:30:32,480 Và sau đó là một thực sự mát mẻ một là microphone. 569 00:30:32,480 --> 00:30:37,230 Vì vậy, bạn có thể sử dụng một số rất cuộc gọi cơ bản trong JavaScript 570 00:30:37,230 --> 00:30:39,440 để có được quyền truy cập vào các microphone, và do đó, nếu bạn 571 00:30:39,440 --> 00:30:42,870 muốn làm cho một ứng dụng như một máy dò sân, 572 00:30:42,870 --> 00:30:45,290 ví dụ, mà mất trong thoại và số liệu ra của bạn 573 00:30:45,290 --> 00:30:47,740 các pitch-- cách rất dễ dàng để đó. 574 00:30:47,740 --> 00:30:50,730 Bạn có thể chỉ cần loại đọc nó trong, tìm ra các tần số, 575 00:30:50,730 --> 00:30:52,250 và sau đó sản lượng một số. 576 00:30:52,250 --> 00:30:56,080 Vì vậy, chúng tôi sẽ xem làm thế nào mà làm việc, là tốt. 577 00:30:56,080 --> 00:30:59,430 >> Các điểm đến là về cơ bản nơi mà các dữ liệu âm thanh được xuất ra. 578 00:30:59,430 --> 00:31:02,890 Vì vậy, nói chung, đó là giống như loa máy tính xách tay của bạn. 579 00:31:02,890 --> 00:31:05,610 Các tùy chọn khác là như thế một ScriptProcessorNode-- 580 00:31:05,610 --> 00:31:07,990 chúng tôi sẽ nhận được để các nút trong một second-- nhưng về cơ bản, 581 00:31:07,990 --> 00:31:11,939 hoặc là bạn đang đặt ra âm thanh thông qua máy tính của bạn thông qua loa, 582 00:31:11,939 --> 00:31:14,730 hoặc bạn đang loại ghi lại nó, vì vậy bạn đang lưu trữ nó như dữ liệu âm thanh. 583 00:31:14,730 --> 00:31:18,980 Vì vậy, có lẽ nếu ai đó tạo ra âm nhạc trong ứng dụng của bạn và sau đó 584 00:31:18,980 --> 00:31:22,410 bạn muốn ghi lại điều đó và có lẽ như xuất khẩu nó vào SoundCloud, cho example-- 585 00:31:22,410 --> 00:31:25,281 đó sẽ là một cách để làm điều đó. 586 00:31:25,281 --> 00:31:27,030 Tất cả những thứ vui vẻ, mà chúng tôi sẽ nói về, 587 00:31:27,030 --> 00:31:29,950 xảy ra giữa hai điểm này, nơi chúng ta nạp trong âm nhạc 588 00:31:29,950 --> 00:31:31,410 và sau đó ra nó. 589 00:31:31,410 --> 00:31:36,660 >> Vì vậy, tôi sẽ nói về năm giai đoạn của sản xuất âm thanh trong một giây. 590 00:31:36,660 --> 00:31:38,950 Chúng tôi có điều này được gọi là một AudioContext, mà 591 00:31:38,950 --> 00:31:41,580 là wrapper nhỏ này, chúng ta thấy ở đây. 592 00:31:41,580 --> 00:31:49,980 Về cơ bản những gì AudioContext is-- nếu chúng tôi đi đến bảng điều khiển JavaScript ngay bây giờ, 593 00:31:49,980 --> 00:31:52,740 chúng ta có thể tạo ra một ngay bây giờ. 594 00:31:52,740 --> 00:31:54,040 Chỉ cần một ví dụ về REPL, phải không? 595 00:31:54,040 --> 00:31:57,880 Chúng tôi đang đọc, đánh giá, và nó in. 596 00:31:57,880 --> 00:32:00,260 >> AudioContext là một nhà nước toàn cầu. 597 00:32:00,260 --> 00:32:05,500 Đó là một cấu trúc, nó là một đối tượng ở đây, và nó giữ thông tin 598 00:32:05,500 --> 00:32:09,960 về những điều đang diễn ra trên màn hình liên quan đến âm thanh. 599 00:32:09,960 --> 00:32:15,220 Một ví dụ là thời gian hiện tại. 600 00:32:15,220 --> 00:32:18,910 Điều này sẽ cho bạn biết số lượng giây, rất chính xác, 601 00:32:18,910 --> 00:32:20,890 kể từ khi trang web được tải. 602 00:32:20,890 --> 00:32:24,110 Vì vậy, đây là một thực sự hữu ích ít tài sản mà bạn có thể sử dụng. 603 00:32:24,110 --> 00:32:27,898 Nó đọc only-- Tôi nghĩ rằng thực sự bạn có thể cố gắng thiết lập giá trị cho nó. 604 00:32:27,898 --> 00:32:29,856 Nó sẽ cho bạn thiết lập nó, và sau đó nếu bạn in nó 605 00:32:29,856 --> 00:32:31,439 again-- nó đã không thực sự hoàn toàn làm việc. 606 00:32:31,439 --> 00:32:34,472 Vì vậy, có được chỉ đọc tài sản trong JavaScript. 607 00:32:34,472 --> 00:32:36,430 Điều này thực sự hữu ích nếu bạn đang loại đồng bộ 608 00:32:36,430 --> 00:32:38,610 rất nhiều khác nhau thông tin, khi bạn 609 00:32:38,610 --> 00:32:41,280 loại chơi âm thanh khác nhau. 610 00:32:41,280 --> 00:32:43,630 >> Một số khác thực sự hữu ích là điểm đến bối cảnh. 611 00:32:43,630 --> 00:32:46,587 612 00:32:46,587 --> 00:32:49,670 Chắc chắn, nếu bạn quan tâm, được cố gắng này tại giao diện điều khiển quyền riêng của bạn 613 00:32:49,670 --> 00:32:50,980 bây giờ. 614 00:32:50,980 --> 00:32:53,150 Vì vậy, đây là một AudioDestinationNode. 615 00:32:53,150 --> 00:32:56,480 Về cơ bản những gì này nói là, mà là đầu ra đi? 616 00:32:56,480 --> 00:32:59,590 Vì vậy, có hai tùy chọn thực sự ở đây. 617 00:32:59,590 --> 00:33:01,940 Thường là mặc định chỉ là loa của bạn, 618 00:33:01,940 --> 00:33:05,150 vì vậy AudioDestinationNode về cơ bản chỉ nói 619 00:33:05,150 --> 00:33:09,240 có không kết quả cho âm thanh đến, gửi đến các loa. 620 00:33:09,240 --> 00:33:12,050 Vì vậy, nói chung, bạn không phải chơi với điều đó. 621 00:33:12,050 --> 00:33:15,720 Nếu bạn quan tâm đến thực tế sử dụng các ScriptProcessorNode để ghi chép, 622 00:33:15,720 --> 00:33:16,990 chắc chắn bắn cho tôi một email sau này bởi vì đó là 623 00:33:16,990 --> 00:33:18,330 hơn một chút phức tạp. 624 00:33:18,330 --> 00:33:21,590 Nhưng nói chung, bạn chỉ cần loại xuất ra âm thanh trong một số hình thức. 625 00:33:21,590 --> 00:33:24,347 Vì vậy, mát mẻ, chúng tôi sẽ nhảy trở lại đây. 626 00:33:24,347 --> 00:33:25,180 Đung Tôi xin lỗi. 627 00:33:25,180 --> 00:33:26,054 HUGH Zabriskie: Yeah. 628 00:33:26,054 --> 00:33:28,770 Đung Tôi biết bạn nói để nói chuyện cho bạn sau này về việc ghi. 629 00:33:28,770 --> 00:33:31,550 Bạn có thể giao tiếp mà với Pro Tools? 630 00:33:31,550 --> 00:33:33,120 >> HUGH Zabriskie: Với Pro Tools? 631 00:33:33,120 --> 00:33:35,260 Chúng ta hãy xem. 632 00:33:35,260 --> 00:33:37,220 Tôi không nghĩ vậy. 633 00:33:37,220 --> 00:33:41,670 Vì vậy, đi giữa các khách hàng, đó là JavaScript 634 00:33:41,670 --> 00:33:44,310 giao diện điều khiển, và thực tế của bạn máy tính, thường là 635 00:33:44,310 --> 00:33:46,490 một cái gì đó là loại off giới hạn, nếu bạn 636 00:33:46,490 --> 00:33:52,320 sẽ, loại bởi bản chất của the-- nó là loại một điều thiết kế, 637 00:33:52,320 --> 00:33:57,770 nhưng bạn cố gắng để giữ cho trình duyệt riêng từ máy tính thực tế của người dùng. 638 00:33:57,770 --> 00:34:02,310 Nói chung, điều duy nhất bạn có thể truy cập là microphone hoặc camera. 639 00:34:02,310 --> 00:34:04,730 Bạn không thể, tôi không nghĩ rằng, sử dụng Pro Tools. 640 00:34:04,730 --> 00:34:07,480 Tuy nhiên, nếu bạn đã tạo một ca khúc trong Pro Tools, 641 00:34:07,480 --> 00:34:12,710 xuất khẩu đó, bạn có thể tải mà ở đây, lọc nó, ví dụ, 642 00:34:12,710 --> 00:34:16,820 quá trình đó, và ghi lại rằng vào một Âm thanh Destination-- hay, no-- một Sphere 643 00:34:16,820 --> 00:34:17,870 Bộ vi xử lý Node. 644 00:34:17,870 --> 00:34:20,730 Và rồi từ đó, bạn có thể xuất khẩu mà để SoundCloud, bạn 645 00:34:20,730 --> 00:34:25,320 có thể gửi nó trong một email, hoặc bất cứ điều gì bạn thích từ đó. 646 00:34:25,320 --> 00:34:31,159 >> Nhưng có một loại rào nhẹ giữa làm cho âm nhạc trên máy tính của bạn 647 00:34:31,159 --> 00:34:33,050 và làm cho âm nhạc trực tuyến. 648 00:34:33,050 --> 00:34:37,940 >> SAM GREEN: Và đó là riêng API này. 649 00:34:37,940 --> 00:34:44,060 Đó là một tính năng bảo mật của Chrome, và Tôi nghĩ rằng mọi trình duyệt hiện đại khác. 650 00:34:44,060 --> 00:34:45,860 Trình duyệt là khép kín. 651 00:34:45,860 --> 00:34:50,980 Vì vậy, ví dụ, một trang web có thể không sử dụng JavaScript để chuyển âm thanh 652 00:34:50,980 --> 00:34:54,190 vào trên loa của bạn, ví dụ. 653 00:34:54,190 --> 00:34:58,120 Hoặc nó không thể biến máy tính của bạn đi. 654 00:34:58,120 --> 00:35:01,530 Và không có điểm trung gian giữa hai điều này, phải, 655 00:35:01,530 --> 00:35:05,960 do đó, hoặc bạn có một trừu tượng đầy đủ, 656 00:35:05,960 --> 00:35:10,050 hoặc bạn mở lên lỗ hổng bảo mật của phép 657 00:35:10,050 --> 00:35:14,440 một lập trình viên có ý định xấu làm bất cứ điều gì họ muốn với máy tính xách tay của bạn. 658 00:35:14,440 --> 00:35:18,104 Và đó là lý do tại sao Chrome là khép kín. 659 00:35:18,104 --> 00:35:19,310 >> HUGH Zabriskie: Yeah. 660 00:35:19,310 --> 00:35:20,840 Điều đó có ý nghĩa? 661 00:35:20,840 --> 00:35:21,369 Hay hay. 662 00:35:21,369 --> 00:35:23,160 Tôi vừa định cho thấy một ví dụ về một. 663 00:35:23,160 --> 00:35:25,118 Điều này là khá nhiều như xa như bạn có được, trong điều kiện 664 00:35:25,118 --> 00:35:26,950 truy cập máy tính của người dùng. 665 00:35:26,950 --> 00:35:30,180 Nếu bạn có một bàn phím USB cắm vào, bạn có thể sử dụng một cái gì đó gọi là Web 666 00:35:30,180 --> 00:35:32,180 MIDI API, mà chúng tôi sẽ không thực sự nói về đây, 667 00:35:32,180 --> 00:35:36,330 nhưng đây là một API đó là được xây dựng vào ít nhất Chrome-- một lần nữa, 668 00:35:36,330 --> 00:35:41,570 đây là lý do tại sao chúng tôi yêu Chrome-- Tôi nghĩ rằng Firefox hay Safari, 669 00:35:41,570 --> 00:35:44,300 đây là một điều dễ dàng để trình duyệt khác nhau google-- có 670 00:35:44,300 --> 00:35:46,917 hỗ trợ khác nhau mà API họ đã thực hiện. 671 00:35:46,917 --> 00:35:49,875 Nhưng nếu bạn muốn cắm vào một bàn phím và làm việc với các thông tin đó, 672 00:35:49,875 --> 00:35:52,850 loại bàn phím gửi thông tin qua máy tính 673 00:35:52,850 --> 00:35:57,620 và sau đó sử dụng trực tuyến, API này là nơi bạn muốn được làm việc đó. 674 00:35:57,620 --> 00:35:58,150 >> Mát. 675 00:35:58,150 --> 00:35:58,710 ĐƯỢC. 676 00:35:58,710 --> 00:36:01,320 Vì vậy, nhanh chóng di chuyển về đây. 677 00:36:01,320 --> 00:36:03,310 Làm thế nào chúng ta thực hiện đúng thời hạn? 678 00:36:03,310 --> 00:36:04,210 >> SPEAKER 1: Khoảng 15. 679 00:36:04,210 --> 00:36:05,543 >> HUGH Zabriskie: 15 phút còn lại? 680 00:36:05,543 --> 00:36:06,160 OK, mát mẻ. 681 00:36:06,160 --> 00:36:08,170 Vì vậy, chúng tôi sẽ chạy đua trước đây. 682 00:36:08,170 --> 00:36:13,500 >> Vì vậy, về cơ bản, những điểm chính của suy nghĩ về điều này như một đường ống 683 00:36:13,500 --> 00:36:16,430 là mỗi bước trong đường ống là một loạt các nút âm thanh. 684 00:36:16,430 --> 00:36:19,284 685 00:36:19,284 --> 00:36:20,950 Nguồn của chúng tôi, hãy nói, là một dao động. 686 00:36:20,950 --> 00:36:23,380 Chúng ta cần phải tạo ra một nút dao động. 687 00:36:23,380 --> 00:36:25,690 Và đó chỉ là loại của function-- chút 688 00:36:25,690 --> 00:36:30,460 và tất cả chúng đều dựa trên của bối cảnh âm thanh ở đây. 689 00:36:30,460 --> 00:36:32,885 >> Đung Khi nó nói Dao động, không có nghĩa 690 00:36:32,885 --> 00:36:37,250 nó thực sự theo nghĩa đen đi từ hai cực khác nhau qua lại? 691 00:36:37,250 --> 00:36:41,170 >> HUGH Zabriskie: Không, nó giống như một đại diện kỹ thuật số. 692 00:36:41,170 --> 00:36:42,740 Nó thực sự thực hiện trong C ++. 693 00:36:42,740 --> 00:36:46,460 Tôi thực sự không biết các thông số kỹ thuật của nó như thế nào thực sự thực hiện, 694 00:36:46,460 --> 00:36:48,500 nhưng tất cả điều này đang làm việc như là dữ liệu nhị phân. 695 00:36:48,500 --> 00:36:51,260 696 00:36:51,260 --> 00:36:52,370 Trên thực tế, yeah. 697 00:36:52,370 --> 00:36:53,950 Đó có thể nói rằng, tôi có thể trên thực tế, nếu bạn quan tâm, 698 00:36:53,950 --> 00:36:56,533 Tôi có thể gửi cho bạn nhiều hơn một chút thông tin về cách dạng sóng 699 00:36:56,533 --> 00:37:00,181 được lưu giữ có một định dạng kỹ thuật số. 700 00:37:00,181 --> 00:37:00,680 OK, mát mẻ. 701 00:37:00,680 --> 00:37:03,120 >> Vì vậy, chúng tôi đang tạo ra một giai điệu như một sin làn sóng hoặc một cái gì đó như thế, có lẽ 702 00:37:03,120 --> 00:37:04,190 440 Hertz. 703 00:37:04,190 --> 00:37:05,830 Chúng tôi tạo ra một dao động. 704 00:37:05,830 --> 00:37:09,180 Nếu chúng ta muốn cài đặt âm lượng, chúng tôi kết nối bất cứ điều gì để một GainNode, 705 00:37:09,180 --> 00:37:12,500 mà chúng ta có thể làm gì với .creategain. 706 00:37:12,500 --> 00:37:14,250 Điều đó đặt khối lượng của bạn. 707 00:37:14,250 --> 00:37:17,820 Bạn có thể vượt qua mà vào bất kỳ các khác options-- tốt, 708 00:37:17,820 --> 00:37:20,300 do đó, một nguồn đệm âm thanh nút là nơi mà có lẽ bạn 709 00:37:20,300 --> 00:37:23,660 lưu trữ một MP3 mà bạn đã nạp vào. 710 00:37:23,660 --> 00:37:27,670 >> Lọc biquad là để lọc nếu bạn muốn lấy tất cả các cơ sở ra 711 00:37:27,670 --> 00:37:29,630 của một bài hát, hoặc một cái gì đó như thế. 712 00:37:29,630 --> 00:37:32,450 Thiên Chúa cấm bạn muốn đi các cơ sở hiện của một bài hát. 713 00:37:32,450 --> 00:37:36,980 Và nút AudioDestination là, một lần nữa, như nơi quyết toán của chúng tôi là. 714 00:37:36,980 --> 00:37:39,980 Nếu bạn đã từng quan tâm nhìn thấy tất cả các tùy chọn có thể khác nhau, 715 00:37:39,980 --> 00:37:45,190 chỉ cần đi đến các tab và để auto-complete đi lên. 716 00:37:45,190 --> 00:37:48,690 Và nếu bạn tạo ra, bạn sẽ thấy tất cả các điều khác nhau mà bạn có thể tạo ra. 717 00:37:48,690 --> 00:37:50,398 Bạn có thể tạo ra năng động bộ vi xử lý kịch bản, 718 00:37:50,398 --> 00:37:52,940 Tôi thậm chí không biết những gì mà là, để pha trộn sáp nhập kênh 719 00:37:52,940 --> 00:37:55,930 và bộ tách kênh và tất cả điều đó. 720 00:37:55,930 --> 00:37:56,430 Mát. 721 00:37:56,430 --> 00:37:59,560 722 00:37:59,560 --> 00:38:01,390 >> Vì vậy, đây chỉ là một là ví dụ về một đường ống. 723 00:38:01,390 --> 00:38:03,580 Vì vậy, chúng tôi có ba nguồn đến ở. 724 00:38:03,580 --> 00:38:06,830 Có lẽ đây là những dạng sóng, có lẽ đây là những MP3. 725 00:38:06,830 --> 00:38:08,740 Một sẽ thông qua một bộ lọc, một số khác của 726 00:38:08,740 --> 00:38:12,404 bị bóp méo khác một của panning trái và phải. 727 00:38:12,404 --> 00:38:15,320 Bạn có thể làm tất cả các loại của sự vật và tất cả đều được trộn lẫn với nhau xung quanh, 728 00:38:15,320 --> 00:38:18,880 và sau đó đi ra âm thanh ở cuối, như là điểm đến. 729 00:38:18,880 --> 00:38:22,720 Đây là một ví dụ về những gì nhiều hơn phức tạp Web mã âm thanh như thế nào. 730 00:38:22,720 --> 00:38:26,720 Bạn đang tạo ra tất cả các các đối tượng khác nhau ngay here-- 731 00:38:26,720 --> 00:38:27,706 Tôi không chắc chắn về điều này. 732 00:38:27,706 --> 00:38:29,120 Không, nó không phóng to. 733 00:38:29,120 --> 00:38:29,620 ĐƯỢC. 734 00:38:29,620 --> 00:38:31,257 >> SAM GREEN: Bạn làm Control, Scroll-Up. 735 00:38:31,257 --> 00:38:32,590 HUGH Zabriskie: Control Scroll-- 736 00:38:32,590 --> 00:38:33,000 SAM GREEN: Không, không. 737 00:38:33,000 --> 00:38:33,500 Kiểm soát-- 738 00:38:33,500 --> 00:38:36,540 739 00:38:36,540 --> 00:38:38,140 >> HUGH Zabriskie: Oh, Control, Cuộn? 740 00:38:38,140 --> 00:38:38,780 Oh, Gotcha. 741 00:38:38,780 --> 00:38:41,480 Yeah. 742 00:38:41,480 --> 00:38:42,240 Wow, nope, nope. 743 00:38:42,240 --> 00:38:42,740 ĐƯỢC. 744 00:38:42,740 --> 00:38:46,090 Tôi sẽ không làm điều đó. 745 00:38:46,090 --> 00:38:48,300 >> Vì vậy, yeah, trong này đầu tiên phần ở đây, bạn sẽ thấy 746 00:38:48,300 --> 00:38:52,720 chúng tôi đang tạo ra tất cả những khác nhau các nút ra khỏi ngữ cảnh. 747 00:38:52,720 --> 00:38:54,980 Chúng tôi chỉ vẽ ra chúng với nhau trong phần thứ hai 748 00:38:54,980 --> 00:38:56,980 Với chức năng này được gọi là Connect. 749 00:38:56,980 --> 00:38:58,830 Đó là một thực sự chủ chốt chức năng trong Web Audio. 750 00:38:58,830 --> 00:39:01,930 Nó chỉ có nghĩa là một khi bạn đã thực hiện một cái gì đó với những âm thanh trong một nút, 751 00:39:01,930 --> 00:39:03,705 vượt qua nó về đến nút tiếp theo. 752 00:39:03,705 --> 00:39:05,830 Vì vậy, chúng tôi có nguồn gốc, nó kết nối với các phân tích, 753 00:39:05,830 --> 00:39:09,140 phân tích làm điều gì đó với nó, nó đi để bóp méo, và như vậy, 754 00:39:09,140 --> 00:39:12,725 và đến đích ở dưới cùng bên phải ở đây. 755 00:39:12,725 --> 00:39:13,225 Mát. 756 00:39:13,225 --> 00:39:14,640 OK, vì vậy chúng tôi sẽ tiếp tục di chuyển trên. 757 00:39:14,640 --> 00:39:17,180 >> Các pipeline-- một lần nữa, các là những đường ống phổ biến nhất, 758 00:39:17,180 --> 00:39:21,300 vì vậy chúng tôi nói về tất cả những thứ như biến dạng, di chuyển màn hình, tất cả các công cụ này. 759 00:39:21,300 --> 00:39:24,280 Nếu bạn đang thực sự quan tâm trong việc sử dụng điều Pro Tools, 760 00:39:24,280 --> 00:39:25,820 những người có thể quan tâm đến bạn. 761 00:39:25,820 --> 00:39:27,740 Nếu không, có thể bạn chỉ muốn chơi âm thanh, 762 00:39:27,740 --> 00:39:29,990 hoặc có thể bạn chỉ muốn cài âm lượng âm thanh này. 763 00:39:29,990 --> 00:39:35,270 Đó là hai loại phổ biến nhất của đường ống trong sản xuất âm thanh. 764 00:39:35,270 --> 00:39:38,640 >> Một lần nữa, những cách bạn có thể mang nó trong khi một oscillator-- như vậy, chúng ta hãy 765 00:39:38,640 --> 00:39:42,460 làm một bản demo của quyền ở đây. 766 00:39:42,460 --> 00:39:47,090 767 00:39:47,090 --> 00:39:52,225 Vì vậy, chúng ta sẽ tạo ra một bối cảnh âm thanh đơn giản ở đây, 768 00:39:52,225 --> 00:39:54,350 và từ đó chúng ta sẽ để tạo ra dao động của chúng tôi. 769 00:39:54,350 --> 00:39:58,620 Vì vậy, đó là, một lần nữa, chúng tôi chỉ sẽ gọi Tạo Oscillator. 770 00:39:58,620 --> 00:40:07,030 Chúng tôi sẽ thiết lập một tần số trên rằng, 440 Hertz, yêu thích của mọi người. 771 00:40:07,030 --> 00:40:13,290 Sau đó, chúng tôi kết nối mà đến đích point-- đó là người nói, vì vậy 772 00:40:13,290 --> 00:40:15,750 đích bối cảnh. 773 00:40:15,750 --> 00:40:21,400 Cuối cùng, chúng tôi chỉ nói, bắt đầu bằng không giây từ bây giờ, và chúng ta đã nghe? 774 00:40:21,400 --> 00:40:22,400 >> [Ringing] 775 00:40:22,400 --> 00:40:24,980 >> HUGH Zabriskie: Ở đây chúng tôi đi. 776 00:40:24,980 --> 00:40:25,940 Nó chỉ là một sóng sin. 777 00:40:25,940 --> 00:40:26,440 OK, mát mẻ. 778 00:40:26,440 --> 00:40:28,274 Và sau đó chúng tôi sẽ dừng lại. 779 00:40:28,274 --> 00:40:30,520 >> Đung Trường hợp đã làm phản hồi đến từ đâu? 780 00:40:30,520 --> 00:40:31,250 >> HUGH Zabriskie: Các phản hồi? 781 00:40:31,250 --> 00:40:32,458 Oh, có lẽ micro của chúng tôi. 782 00:40:32,458 --> 00:40:34,221 783 00:40:34,221 --> 00:40:35,470 Vì vậy, yeah, đó là cách bạn làm điều đó. 784 00:40:35,470 --> 00:40:37,261 Và trên thực tế, nếu tôi đã có giữ cho nó chạy, bạn 785 00:40:37,261 --> 00:40:39,540 có thể có tần số giá trị như nó đang chạy, 786 00:40:39,540 --> 00:40:43,320 vì vậy đó là một điều thú vị để chơi xung quanh. 787 00:40:43,320 --> 00:40:44,930 Mát. 788 00:40:44,930 --> 00:40:46,600 Đó là luôn luôn một cái rất dễ để trình bày. 789 00:40:46,600 --> 00:40:48,792 >> SAM GREEN: Chúng tôi đã làm không nghĩ về điều đó, đã làm chúng tôi? 790 00:40:48,792 --> 00:40:50,500 HUGH Zabriskie: Yeah, đó là một khó chịu. 791 00:40:50,500 --> 00:40:53,249 Vì vậy, đệm loading-- tôi sẽ đưa ra một ví dụ đó vào lúc cuối cùng. 792 00:40:53,249 --> 00:40:55,090 Đó là tải một MP3. 793 00:40:55,090 --> 00:40:58,880 Và microphone, bạn chỉ cần sử dụng một chức năng gọi Navigator.getUserMedia () 794 00:40:58,880 --> 00:41:03,240 để yêu cầu quyền truy cập cho người sử dụng của microphone cho thông tin đó. 795 00:41:03,240 --> 00:41:05,610 >> Dưới đây là lọc, tôi sẽ chỉ tiếp tục di chuyển từ này. 796 00:41:05,610 --> 00:41:08,600 Đây là mức khá cao, nhưng bộ lọc chỉ cho phép bạn 797 00:41:08,600 --> 00:41:16,154 >> [Bíp] 798 00:41:16,154 --> 00:41:18,320 Lọc cũng cho phép bạn để tạo ra những thứ như màu hồng 799 00:41:18,320 --> 00:41:20,050 tiếng ồn, tiếng ồn nâu, tiếng ồn trắng. 800 00:41:20,050 --> 00:41:24,330 Nếu bạn muốn tạo ra tiếng ồn trong sạch, mà một số người thích để mess xung quanh với, 801 00:41:24,330 --> 00:41:27,490 bạn có thể sử dụng Web âm thanh lọc để làm điều đó. 802 00:41:27,490 --> 00:41:30,039 >> Âm thanh Panning-- để tưởng tượng nếu bạn đang viết một trò chơi 803 00:41:30,039 --> 00:41:32,330 và bạn muốn âm thanh để âm thanh như nó đến, như thế, 804 00:41:32,330 --> 00:41:36,090 chụp trên màn hình, bạn có thể sử dụng các panning của âm thanh 805 00:41:36,090 --> 00:41:39,770 để tạo ra loại hình nón, mà like-- nó mathy khá, 806 00:41:39,770 --> 00:41:41,850 nhưng nó thực sự thực sự mát mẻ, nếu bạn nhận được nó làm việc, 807 00:41:41,850 --> 00:41:44,500 và có một số tốt hướng dẫn về nó tôi có thể gửi cho bạn. 808 00:41:44,500 --> 00:41:46,400 Về cơ bản, bạn có thể loại của tạo những âm thanh 809 00:41:46,400 --> 00:41:50,480 của một cái gì đó đi theo một cách 3D. 810 00:41:50,480 --> 00:41:57,350 Và nếu bạn có một sự quan tâm DJ, bạn có thể bắt đầu trộn và qua bài hát mờ dần. 811 00:41:57,350 --> 00:42:01,260 >> Đây chỉ là một số rất cơ bản mã, về cơ bản những gì tôi đã làm trước đây. 812 00:42:01,260 --> 00:42:06,140 Điều này đặt ra khối lượng của Dao động, vì vậy chúng tôi tạo ra dao động của chúng tôi 813 00:42:06,140 --> 00:42:07,380 mà tạo ra các dạng sóng. 814 00:42:07,380 --> 00:42:09,940 Chúng tôi tạo ra GainNode của chúng tôi, thiết lập tần số của chúng tôi, 815 00:42:09,940 --> 00:42:14,170 và sau đó kết nối với Dao động GainNode, mà sau đó về cơ bản thay đổi 816 00:42:14,170 --> 00:42:16,760 bao nhiêu tín hiệu được phép thông qua. 817 00:42:16,760 --> 00:42:20,467 Nhưng thực sự, đó là một kỹ thuật số điều, vì vậy nó còn hơn just-- yeah. 818 00:42:20,467 --> 00:42:23,550 Đó không phải là những gì đang thực sự xảy ra, nhưng đó là những gì xảy ra trong cuộc sống thực 819 00:42:23,550 --> 00:42:24,393 với một tăng. 820 00:42:24,393 --> 00:42:27,258 >> Đung --quantization của tham số khối lượng? 821 00:42:27,258 --> 00:42:28,174 HUGH Zabriskie: Xin lỗi? 822 00:42:28,174 --> 00:42:30,360 Đung có phải là một lượng tử hóa tham số khối lượng? 823 00:42:30,360 --> 00:42:31,840 HUGH Zabriskie: Yeah. 824 00:42:31,840 --> 00:42:34,620 Và đây là một điều tôi thực sự thiếu về kiến ​​thức của tôi, 825 00:42:34,620 --> 00:42:38,010 cách tăng hoạt động trên một mức độ kỹ thuật số. 826 00:42:38,010 --> 00:42:40,140 Tôi biết với thực tế tín hiệu, nó là cơ bản 827 00:42:40,140 --> 00:42:45,120 kiểm soát có bao nhiêu bạn khuếch đại tín hiệu. 828 00:42:45,120 --> 00:42:47,017 Vì vậy, yeah. 829 00:42:47,017 --> 00:42:50,100 Tôi sẽ gửi cho bạn thêm thông tin về rằng, vì tôi tò mò muốn được thực sự 830 00:42:50,100 --> 00:42:51,099 để biết thêm về điều đó. 831 00:42:51,099 --> 00:42:54,090 Nhưng về cơ bản các thông số là, một là fold-- 832 00:42:54,090 --> 00:42:59,690 các signal-- to hơn và không có tín hiệu, hoặc bạn sẽ không nghe thấy bất kỳ âm thanh. 833 00:42:59,690 --> 00:43:03,150 Chúng tôi sẽ bỏ qua thời gian demo cho vì đó nó về cơ bản những gì tôi đã làm trước đây. 834 00:43:03,150 --> 00:43:07,630 Và một lần nữa, các Context.Destination là node đích âm thanh. 835 00:43:07,630 --> 00:43:08,360 Awesome, OK. 836 00:43:08,360 --> 00:43:10,470 >> Vì vậy, tôi sẽ làm một cách nhanh chóng hai bản demo. 837 00:43:10,470 --> 00:43:11,760 Làm thế nào chúng ta thực hiện đúng thời hạn? 838 00:43:11,760 --> 00:43:12,640 >> SPEAKER 1: Khoảng 10 phút. 839 00:43:12,640 --> 00:43:13,130 >> HUGH Zabriskie: 10 phút? 840 00:43:13,130 --> 00:43:13,630 Thật tuyệt! 841 00:43:13,630 --> 00:43:14,320 Thật tuyệt vời. 842 00:43:14,320 --> 00:43:19,010 >> Vì vậy, một trong những đầu tiên tôi sẽ làm, nó được gọi là My Sông yêu thích. 843 00:43:19,010 --> 00:43:22,410 Vì vậy, đây chỉ là một là ít JavaScript HTML. 844 00:43:22,410 --> 00:43:25,510 Chúng ta sẽ có hai nút trên trang chơi các bài hát yêu thích của tôi 845 00:43:25,510 --> 00:43:29,192 và dừng bài hát yêu thích của tôi. 846 00:43:29,192 --> 00:43:30,180 Tôi sẽ thay đổi điều này. 847 00:43:30,180 --> 00:43:32,110 >> Đung Che microphone của bạn. 848 00:43:32,110 --> 00:43:33,430 >> HUGH Zabriskie: Yeah. 849 00:43:33,430 --> 00:43:36,300 Và tôi đã tải ở đây một kịch bản mà basically-- 850 00:43:36,300 --> 00:43:38,520 và điều này là thực sự hữu ích xếp dỡ MP3, 851 00:43:38,520 --> 00:43:41,820 vì vậy điều này chỉ làm cho tải MP3 cách nhanh hơn. 852 00:43:41,820 --> 00:43:44,180 Đó là cơ bản chỉ là một wrapper. 853 00:43:44,180 --> 00:43:48,737 Nó chỉ làm cho quá trình tải trong MP3 nhanh hơn nhiều, 854 00:43:48,737 --> 00:43:51,570 nếu không bạn đang sử dụng yêu cầu HTTP, loại giống như những gì chúng tôi đã làm 855 00:43:51,570 --> 00:43:53,950 trên mảnh hiện hành với Server. 856 00:43:53,950 --> 00:43:55,950 Nó thực sự xấu xí, bạn không muốn làm điều đó. 857 00:43:55,950 --> 00:44:04,110 >> Vì vậy, anh chàng này, Boris bộ cấp nguồn, đã viết một thực sự ít công cụ hữu ích được gọi BufferLoader. 858 00:44:04,110 --> 00:44:08,780 Tất cả các bạn làm chỉ đơn giản là vượt qua nó ngữ cảnh, bạn vượt qua nó một list-- 859 00:44:08,780 --> 00:44:11,327 hay, yeah, nó là một danh sách trong JavaScript? 860 00:44:11,327 --> 00:44:12,160 SAM GREEN: Một mảng. 861 00:44:12,160 --> 00:44:14,201 HUGH Zabriskie: Oh, đó là một mảng, đó là đúng. 862 00:44:14,201 --> 00:44:18,660 Đây là một mảng các đường dẫn để các tập tin khác nhau. 863 00:44:18,660 --> 00:44:21,990 Và sau đó bạn vượt qua nó một chức năng. 864 00:44:21,990 --> 00:44:25,530 Đây là gọi lại chúng tôi đã nói chuyện về với tải không đồng bộ. 865 00:44:25,530 --> 00:44:28,720 Điều đó sẽ được gọi là khi các tập tin được tải. 866 00:44:28,720 --> 00:44:33,780 Và chức năng đó được gọi là khi của tập tin được tải mất như một vành đai 867 00:44:33,780 --> 00:44:35,840 một mảng của bộ đệm được nạp. 868 00:44:35,840 --> 00:44:37,990 Vì vậy xảy ra ở đây. 869 00:44:37,990 --> 00:44:41,180 Về cơ bản, BufferList là sẽ là một value-- 870 00:44:41,180 --> 00:44:46,380 hoặc nó sẽ là một mảng của chiều dài một, mà đã ở trong đó trong chỉ số 871 00:44:46,380 --> 00:44:51,320 bằng không toàn bộ tập tin được tải của MP3. 872 00:44:51,320 --> 00:44:53,320 Vì vậy, những gì tôi làm khi tôi hoàn thành tải là, tôi chỉ đơn giản 873 00:44:53,320 --> 00:44:57,430 tạo ra một nguồn đệm, mà là một nút nguồn đệm âm thanh. 874 00:44:57,430 --> 00:45:03,410 Bước tiếp theo là tôi tải trong source.buffer như bộ đệm được nạp đầy đủ 875 00:45:03,410 --> 00:45:06,740 từ BufferList-- nó là rất nhiều buffers-- 876 00:45:06,740 --> 00:45:10,255 và sau đó bạn kết nối âm thanh đệm để đến đích. 877 00:45:10,255 --> 00:45:12,380 Vì vậy, những gì nó sẽ làm gì chỉ đơn giản là đặt MP3 878 00:45:12,380 --> 00:45:15,260 thẳng thông qua các đầu ra, và bắt đầu nó ngay lập tức 879 00:45:15,260 --> 00:45:18,010 khi nhận được cuộc gọi này. 880 00:45:18,010 --> 00:45:21,660 >> Cool, vì vậy hãy xem điều này xảy ra trong hành động. 881 00:45:21,660 --> 00:45:24,490 My [Không nghe thấy] ở đây, chúng ta hãy xem. 882 00:45:24,490 --> 00:45:26,430 Vì vậy, tôi chỉ cần đi tới bắt đầu một máy chủ cơ bản. 883 00:45:26,430 --> 00:45:28,660 Đó là một cái gì đó bạn cần phải làm gì nếu bạn 884 00:45:28,660 --> 00:45:32,490 làm cho các yêu cầu để tải file. 885 00:45:32,490 --> 00:45:34,140 Tôi sẽ bắt đầu một máy chủ cơ bản. 886 00:45:34,140 --> 00:45:38,200 Điều này về cơ bản là toàn bộ của bạn PSET ngay bây giờ trong một dòng, 887 00:45:38,200 --> 00:45:43,930 nhưng nó chỉ mới bắt đầu một máy chủ trên cổng 80/80. 888 00:45:43,930 --> 00:45:47,300 Vì vậy, chúng tôi đi qua đây, chúng tôi sẽ load 80/80, 889 00:45:47,300 --> 00:45:49,110 chúng ta sẽ đi đến My Sông yêu thích. 890 00:45:49,110 --> 00:45:51,660 Vì vậy, nếu tôi nhấn "Play của tôi yêu thích bài hát "ngay bây giờ, 891 00:45:51,660 --> 00:45:53,964 nó sẽ tải của tôi Bài hát yêu thích và chơi it-- 892 00:45:53,964 --> 00:45:55,880 [MUSIC - THE EAGLES, "LIFE IN THE NHANH  LANE "] 893 00:45:55,880 --> 00:46:00,490 --which sẽ xảy ra là "Life in Fast Lane "của The Eagles. 894 00:46:00,490 --> 00:46:06,346 Bây giờ, tôi có thể nhấn "Stop của tôi yêu thích bài hát "và phát lại nó. 895 00:46:06,346 --> 00:46:09,160 >> [MUSIC - THE EAGLES, "LIFE IN THE NHANH  LANE "] 896 00:46:09,160 --> 00:46:18,340 >> Và nếu tôi đi qua để an ủi, bởi vì Tôi đã sử dụng một biến toàn cầu ở đây 897 00:46:18,340 --> 00:46:23,390 để theo dõi các giá trị này, nó thực sự bây giờ sẽ được ghi nhận trong giao diện điều khiển. 898 00:46:23,390 --> 00:46:25,160 Vì vậy, nó tự động tạo ra cho tôi. 899 00:46:25,160 --> 00:46:29,991 Vì vậy, đó là những gì đang chơi ngay bây giờ, và tôi chỉ có thể gọi source.stop () 900 00:46:29,991 --> 00:46:30,490 trong vấn đề này. 901 00:46:30,490 --> 00:46:34,930 902 00:46:34,930 --> 00:46:35,860 Vâng, bạn biết những gì? 903 00:46:35,860 --> 00:46:39,760 Chỉ cần như vậy các bạn đã nghe điều này song-- bạn có thể nhận ra bài hát này. 904 00:46:39,760 --> 00:46:41,801 >> [MUSIC - Rick Astley, "Never Gonna GIVE  BẠN UP "] 905 00:46:41,801 --> 00:46:42,299 906 00:46:42,299 --> 00:46:44,215 [MUSIC - THE EAGLES, "LIFE IN THE NHANH  LANE "] 907 00:46:44,215 --> 00:46:46,195 Chúng tôi bây giờ tất cả được Rickrolled. 908 00:46:46,195 --> 00:46:50,155 OK, tuyệt vời, di chuyển trên. 909 00:46:50,155 --> 00:46:51,160 Mát. 910 00:46:51,160 --> 00:46:54,554 Vì vậy, đây là cơ bản một ví dụ về chỉ là cách bạn có thể tải một MP3 file-- 911 00:46:54,554 --> 00:46:56,470 [MUSIC - THE EAGLES, "LIFE IN THE NHANH  LANE "] 912 00:46:56,470 --> 00:46:59,590 --and chơi nó, và dừng lại và bắt đầu nó. 913 00:46:59,590 --> 00:47:03,008 Tôi đã có thể làm nhiều hơn nữa [Không nghe thấy] 914 00:47:03,008 --> 00:47:07,570 >> Người cuối cùng tôi sẽ làm là, Tôi sẽ chỉ cho bạn một [không nghe được]. 915 00:47:07,570 --> 00:47:18,070 >> [MUSIC CHƠI] 916 00:47:18,070 --> 00:47:21,800 >> Nó giống như, ogg.wave.mp3. 917 00:47:21,800 --> 00:47:26,450 Tôi nghĩ, nếu tôi nhớ chính xác, Tôi đã chạy vào một số vấn đề với .m4a, 918 00:47:26,450 --> 00:47:27,721 nhưng tôi không chắc chắn về điều đó. 919 00:47:27,721 --> 00:47:28,470 Tôi nghĩ mp3.wave-- 920 00:47:28,470 --> 00:47:28,930 921 00:47:28,930 --> 00:47:30,971 >> [MUSIC - Rick Astley, "Never Gonna GIVE  BẠN UP "] 922 00:47:30,971 --> 00:47:35,930 923 00:47:35,930 --> 00:47:36,500 >> Tuyệt. 924 00:47:36,500 --> 00:47:37,625 Tôi không nên nói như thế. 925 00:47:37,625 --> 00:47:40,570 Dù sao, xin chào. 926 00:47:40,570 --> 00:47:43,430 927 00:47:43,430 --> 00:47:45,490 Vì vậy, chúng tôi đã mở này. 928 00:47:45,490 --> 00:47:52,320 Vì vậy, bây giờ tất cả tôi làm là, tôi về cơ bản tạo một cú pháp cơ bản cho việc tạo ra âm nhạc. 929 00:47:52,320 --> 00:47:57,610 Vì vậy, nếu tôi làm một cái gì đó như thế, thêm g4 trên 1 2, điều đó có nghĩa là, 930 00:47:57,610 --> 00:48:00,950 thêm nốt piano, G4, đó là G thứ tư 931 00:48:00,950 --> 00:48:02,680 lên trên cây đàn piano từ phía dưới. 932 00:48:02,680 --> 00:48:05,930 Vì vậy, đây là loại MIDI nói tiếng, vì vậy đối với những người dựa trên âm nhạc, 933 00:48:05,930 --> 00:48:07,860 đây là ghi chú chỉ MIDI. 934 00:48:07,860 --> 00:48:10,090 >> Đung Đó là G Trung C, phải không? 935 00:48:10,090 --> 00:48:11,840 >> HUGH Zabriskie: Đây là G trên Trung C, đó là đúng. 936 00:48:11,840 --> 00:48:12,470 >> Đung Trên Trung C. 937 00:48:12,470 --> 00:48:13,345 >> HUGH Zabriskie: Yeah. 938 00:48:13,345 --> 00:48:14,340 Trên thực tế, có. 939 00:48:14,340 --> 00:48:16,131 Tôi nghĩ rằng tôi thực sự thực hiện nó một [không nghe được], 940 00:48:16,131 --> 00:48:18,860 vì vậy đây có thể là một quãng tám trên đó. 941 00:48:18,860 --> 00:48:20,070 Vì vậy, chúng ta hãy xem. 942 00:48:20,070 --> 00:48:21,152 Nếu tôi nhấn Play-- 943 00:48:21,152 --> 00:48:22,110 [Lặp đi lặp lại PIANO NOTE] 944 00:48:22,110 --> 00:48:23,200 --we're sẽ nghe thấy điều đó. 945 00:48:23,200 --> 00:48:25,700 Ý tưởng là nó hoạt động giống như một dòng lệnh sẽ, 946 00:48:25,700 --> 00:48:27,510 vì vậy nếu tôi đi lên và xuống trên bàn phím của tôi, bạn 947 00:48:27,510 --> 00:48:31,550 có thể quay lại trang trước lệnh, mà là khá hữu ích. 948 00:48:31,550 --> 00:48:35,136 Và dưới đây là danh sách các bài hát, mà tất cả đều chạy trên vòng lặp. 949 00:48:35,136 --> 00:48:38,260 >> Đung Bạn đã giả định 88-key bàn phím vào đó, phải không? 950 00:48:38,260 --> 00:48:41,051 >> HUGH Zabriskie: Câu hỏi là, Tôi giả định một bàn phím 88-key, 951 00:48:41,051 --> 00:48:41,990 và vâng, tôi. 952 00:48:41,990 --> 00:48:45,030 Tôi những gì tôi đã làm là về cơ bản mất 88 mẫu 953 00:48:45,030 --> 00:48:46,970 của cây đàn piano, một cho từng lưu ý. 954 00:48:46,970 --> 00:48:49,180 Và do đó, mỗi lần bạn nghe một lưu ý từ bây giờ, 955 00:48:49,180 --> 00:48:57,550 đó thực sự là một vòng lặp mà trông like-- này là nhận được chơi trên vòng lặp, 956 00:48:57,550 --> 00:49:00,120 do đó, cho tất cả các nốt, điều này đang chạy. 957 00:49:00,120 --> 00:49:02,860 , Những gì xảy ra là tôi tạo ra một bộ đệm một lần nữa, 958 00:49:02,860 --> 00:49:06,010 Tôi tạo ra một nút được để thiết lập âm lượng. 959 00:49:06,010 --> 00:49:08,240 Đây chỉ là một thực sự cách phức tạp của tôi nói 960 00:49:08,240 --> 00:49:10,550 lưu trữ các bộ đệm trong một source.buffer. 961 00:49:10,550 --> 00:49:13,160 Tôi cho nó đạt được, tôi kết nối nó với tăng, 962 00:49:13,160 --> 00:49:15,576 đạt được được kết nối với đầu ra, và sau đó tôi chơi nó. 963 00:49:15,576 --> 00:49:20,735 Vì vậy, đó là loại của quá trình chụp trong một nguồn đệm. 964 00:49:20,735 --> 00:49:24,820 >> Đung bạn có thể thực sự đi mà âm thanh khô và làm cho nó ướt [Không nghe thấy]? 965 00:49:24,820 --> 00:49:26,260 >> HUGH Zabriskie: Bạn có thể, yeah. 966 00:49:26,260 --> 00:49:29,260 Có re-động từ, có chậm trễ, biến dạng. 967 00:49:29,260 --> 00:49:33,260 Về cơ bản bạn có thể đặt bất cứ điều gì trong giữa trong bánh sandwich mà of-- tốt, 968 00:49:33,260 --> 00:49:37,660 đường ống là một phép ẩn dụ tốt hơn, nhưng bạn có thể thêm bất cứ điều gì trong đó. 969 00:49:37,660 --> 00:49:38,200 Mát. 970 00:49:38,200 --> 00:49:40,280 >> Vì vậy, tôi sẽ hoàn thành bản demo ở đây để cung cấp cho bạn một cảm giác 971 00:49:40,280 --> 00:49:46,390 các chỉ số tuyệt đối của thời gian bạn có thể chạy chức năng mà tất cả cùng một lúc. 972 00:49:46,390 --> 00:49:49,280 Vì vậy, tôi sẽ loại bỏ điều này. 973 00:49:49,280 --> 00:49:59,110 Tôi sẽ tạo ra một máy phát điện that-- về cơ bản những gì does-- này thực sự là 974 00:49:59,110 --> 00:50:04,220 loại một syntax-- phức tạp nhưng nó sẽ tạo ra các ghi chú trên bay, 975 00:50:04,220 --> 00:50:06,601 và chỉ bắt đầu chơi chúng như là nó đánh giá họ. 976 00:50:06,601 --> 00:50:07,392 [Interposing PIANO] 977 00:50:07,392 --> 00:50:10,990 978 00:50:10,990 --> 00:50:12,817 >> Vì vậy, chúng tôi chỉ có thể làm cho một nhạc nhỏ ở đây. 979 00:50:12,817 --> 00:50:13,608 [Interposing PIANO] 980 00:50:13,608 --> 00:50:39,570 981 00:50:39,570 --> 00:50:41,470 >> Vì vậy, những gì lệnh này không có gì, ví dụ, là 982 00:50:41,470 --> 00:50:46,910 phải mất những ba ghi chú cho các piano và sau đó đặt chúng trên B3. 983 00:50:46,910 --> 00:50:48,660 Cú pháp này có thể làm cho một chút cảm giác hơn 984 00:50:48,660 --> 00:50:50,590 cho những người có một nền âm nhạc ở đây. 985 00:50:50,590 --> 00:50:55,180 986 00:50:55,180 --> 00:50:56,551 >> Tôi có thể thêm một cú đá trống. 987 00:50:56,551 --> 00:50:57,050 Tôi có thể-- 988 00:50:57,050 --> 00:50:58,048 >> [Interposing INSTRUMENTS] 989 00:50:58,048 --> 00:50:59,256 >> --just chơi xung quanh với điều đó. 990 00:50:59,256 --> 00:51:12,519 991 00:51:12,519 --> 00:51:13,474 >> Vì vậy, bạn có thể make-- 992 00:51:13,474 --> 00:51:14,515 [Interposing INSTRUMENTS] 993 00:51:14,515 --> 00:51:15,513 Một trong đó là một chút khó chịu hơn. 994 00:51:15,513 --> 00:51:16,554 [Interposing INSTRUMENTS] 995 00:51:16,554 --> 00:51:26,491 996 00:51:26,491 --> 00:51:30,981 >> Vì vậy, cho biết thêm rằng ngẫu nhiên một cymbal khô trên từng nốt thứ 16, với 16% 997 00:51:30,981 --> 00:51:31,481 [Không nghe thấy]. 998 00:51:31,481 --> 00:51:32,522 >> [Interposing INSTRUMENTS] 999 00:51:32,522 --> 00:51:40,962 1000 00:51:40,962 --> 00:51:50,400 >> Yeah, vì vậy cách này works-- nó luôn luôn trong 4: 4. 1001 00:51:50,400 --> 00:51:51,441 [Interposing INSTRUMENTS] 1002 00:51:51,441 --> 00:52:06,910 1003 00:52:06,910 --> 00:52:10,902 >> Yeah, vì vậy trong bốn quý, và 16/8. 1004 00:52:10,902 --> 00:52:14,851 1005 00:52:14,851 --> 00:52:15,892 [Interposing INSTRUMENTS] 1006 00:52:15,892 --> 00:52:27,970 1007 00:52:27,970 --> 00:52:33,780 >> Vì vậy, trên trung bình, bạn sẽ có được 60% các số truy cập trên các ghi chú 16. 1008 00:52:33,780 --> 00:52:35,990 >> Anyways, đây là chỉ loại để khoe 1009 00:52:35,990 --> 00:52:39,780 một số trong những điều bạn có thể xây dựng với Web âm thanh API. 1010 00:52:39,780 --> 00:52:43,840 Nó thực sự mạnh mẽ, nó thực sự nhanh, và bạn có thể làm rất nhiều thứ mát mẻ 1011 00:52:43,840 --> 00:52:44,340 với nó. 1012 00:52:44,340 --> 00:52:51,260 Vì vậy, một lần nữa, bất kỳ câu hỏi mà bạn có, email myself-- Hugh-- hay Sam, 1013 00:52:51,260 --> 00:52:55,869 và trung thực, Google có một tấn các nguồn lực tốt. 1014 00:52:55,869 --> 00:52:56,660 Bất kỳ câu hỏi cuối cùng? 1015 00:52:56,660 --> 00:52:57,970 Yeah. 1016 00:52:57,970 --> 00:53:00,790 >> Đung Vì vậy, bạn có thể truy cập microphone tích hợp. 1017 00:53:00,790 --> 00:53:03,089 Điều gì nếu bạn muốn sử dụng một micro tốt hơn? 1018 00:53:03,089 --> 00:53:05,380 HUGH Zabriskie: Nếu bạn muốn sử dụng micro tốt hơn? 1019 00:53:05,380 --> 00:53:11,320 Vì vậy, một lần nữa, đây là một phần của trừu tượng giữa Chrome 1020 00:53:11,320 --> 00:53:12,950 và phần còn lại của máy tính của bạn. 1021 00:53:12,950 --> 00:53:18,950 Trừ khi nó có sẵn thông qua một API, như Web MIDI API, 1022 00:53:18,950 --> 00:53:22,030 bạn có thể có thể tìm thấy một số hacks, nhưng nói chung là không khả thi. 1023 00:53:22,030 --> 00:53:25,300 >> SAM GREEN: Bạn có thể also-- tất cả các Chrome biết 1024 00:53:25,300 --> 00:53:28,820 là những gì microphone mặc định của bạn là, và nó truy cập đó. 1025 00:53:28,820 --> 00:53:33,410 Vì vậy, nếu bạn đã có một microphone bạn có thể thiết lập như microphone mặc định của máy tính, 1026 00:53:33,410 --> 00:53:35,990 bạn có thể truy cập nó theo cách đó và nó có lẽ sẽ làm việc. 1027 00:53:35,990 --> 00:53:37,490 HUGH Zabriskie: Đó là một điểm tốt. 1028 00:53:37,490 --> 00:53:39,656 Tôi chưa bao giờ cố gắng đó, nhưng bạn có thể có thể loại 1029 00:53:39,656 --> 00:53:45,700 of-- nếu bạn chuyển hướng các loa đầu vào, bạn có thể có thể làm điều đó, yeah. 1030 00:53:45,700 --> 00:53:48,360 >> Bất kỳ câu hỏi cuối cùng? 1031 00:53:48,360 --> 00:53:49,340 Mát. 1032 00:53:49,340 --> 00:53:51,680 Vâng cảm ơn các bạn rất nhiều cho xem. 1033 00:53:51,680 --> 00:53:52,199 Tôi Hugh. 1034 00:53:52,199 --> 00:53:52,990 SAM GREEN: Tôi là Sam. 1035 00:53:52,990 --> 00:53:55,410 HUGH Zabriskie: Và đây là CS50. 1036 00:53:55,410 --> 00:53:56,767