1 00:00:00,000 --> 00:00:05,900 2 00:00:05,900 --> 00:00:07,170 >> SAM GREEN: Hi, semua orang. 3 00:00:07,170 --> 00:00:08,640 Selamat datang di seminar kami. 4 00:00:08,640 --> 00:00:10,009 Namaku Sam. 5 00:00:10,009 --> 00:00:11,050 Hugh Zabriskie: Saya Hugh. 6 00:00:11,050 --> 00:00:17,420 SAM GREEN: Dan kita akan berbicara hari ini tentang JavaScript dan API Web Audio. 7 00:00:17,420 --> 00:00:21,180 Hanya untuk memulai, ini adalah garis besar dari agenda kami untuk seminar. 8 00:00:21,180 --> 00:00:25,350 Kita akan mulai dengan berbicara tentang mengapa Anda harus tertarik di Web 9 00:00:25,350 --> 00:00:30,130 Audio API, mengapa JavaScript bahasa yang Anda butuhkan untuk itu, 10 00:00:30,130 --> 00:00:32,619 dan kemudian berbicara tentang JavaScript essentials-- jadi seperti, 11 00:00:32,619 --> 00:00:34,800 memandu Anda melalui beberapa dasar-dasar bahasa, 12 00:00:34,800 --> 00:00:37,290 dan kemudian berbicara tentang API audio yang pada tingkat tinggi. 13 00:00:37,290 --> 00:00:41,140 Kemudian, Hugh akan berbicara tentang beberapa tahapan produksi audio 14 00:00:41,140 --> 00:00:45,509 dan kemudian demo sequencer ini mengagumkan Proyek ia membangun dan menunjukkan kode. 15 00:00:45,509 --> 00:00:48,050 Dan kemudian, kita akan punya waktu untuk pertanyaan di akhir bagi orang-orang 16 00:00:48,050 --> 00:00:49,593 yang ada di sini hidup. 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 Saya akan back up. 21 00:00:52,170 --> 00:00:54,960 >> SAM GREEN: Jadi, hal pertama yang pertama. 22 00:00:54,960 --> 00:00:57,840 Jadi salah satu hal besar tentang Web Audio API 23 00:00:57,840 --> 00:01:00,480 adalah bahwa tidak ada set up yang diperlukan. 24 00:01:00,480 --> 00:01:04,230 Muncul built-in untuk sebagian besar browser modern, 25 00:01:04,230 --> 00:01:08,630 termasuk Chrome, Edge, keseluruhan sekelompok others-- semua yang 26 00:01:08,630 --> 00:01:12,650 porsi yang besar orang yang menggunakan hari ini. 27 00:01:12,650 --> 00:01:14,807 Jadi ada yang tidak diatur, selain dari hanya mendapatkan 28 00:01:14,807 --> 00:01:16,890 server web akan, untuk Anda untuk memulai bekerja 29 00:01:16,890 --> 00:01:18,420 pada proyek Anda, yang besar. 30 00:01:18,420 --> 00:01:21,500 31 00:01:21,500 --> 00:01:24,190 >> Kami merekomendasikan cukup berat yang Anda anggap 32 00:01:24,190 --> 00:01:26,530 menggunakan Chrome untuk JavaScript pengembangan web, 33 00:01:26,530 --> 00:01:30,260 hanya karena pengembang alat-alat yang benar-benar kuat. 34 00:01:30,260 --> 00:01:33,220 Sebagai contoh hanya apa yang kita maksud dengan mengatakan membuka Anda JavaScript 35 00:01:33,220 --> 00:01:38,600 console-- jika Anda pergi ke Chrome dan Anda melihat halaman web, 36 00:01:38,600 --> 00:01:43,897 dan Anda klik kiri Inspect Element, dan kemudian 37 00:01:43,897 --> 00:01:46,730 Anda pergi ke ini sedikit drop-down di sini dan Anda mengklik Console, 38 00:01:46,730 --> 00:01:50,660 Anda akan melihat apa yang membuka tampak banyak seperti command prompt yang Anda 39 00:01:50,660 --> 00:01:53,720 mungkin melihat pada Mac Anda, atau ID. 40 00:01:53,720 --> 00:01:59,260 Dan hanya seperti itu, kita bisa Jenis perintah di sini, seperti Clear, 41 00:01:59,260 --> 00:02:01,350 dan perintah lain seperti itu. 42 00:02:01,350 --> 00:02:04,267 Kita dapat membuat variabel, seperti kita akan lihat nanti dalam JavaScript. 43 00:02:04,267 --> 00:02:07,100 Dan sebagainya yang bisa kita lakukan di JavaScript, kita bisa lakukan dengan konsol, 44 00:02:07,100 --> 00:02:11,430 dan itulah cara yang super berguna untuk mulai bermain-main dengan API 45 00:02:11,430 --> 00:02:15,760 dan mendapatkan nyaman dengan JavaScript langsung dari kelelawar. 46 00:02:15,760 --> 00:02:18,290 Tidak ada set up yang diperlukan, yang benar-benar baik. 47 00:02:18,290 --> 00:02:18,790 Keren. 48 00:02:18,790 --> 00:02:22,064 49 00:02:22,064 --> 00:02:22,880 Mengagumkan. 50 00:02:22,880 --> 00:02:24,780 >> Jadi hanya satu hal lagi untuk menambahkan. 51 00:02:24,780 --> 00:02:27,780 Jika Anda memiliki questions-- ada banyak dari Anda yang tidak di sini hidup, 52 00:02:27,780 --> 00:02:31,232 ragu untuk email us-- ini adalah alamat email kami. 53 00:02:31,232 --> 00:02:33,190 Jika Anda memiliki pertanyaan Anda tidak ingin untuk meminta kami, 54 00:02:33,190 --> 00:02:36,160 seperti, oh saya memiliki bug dalam kode saya, atau sesuatu 55 00:02:36,160 --> 00:02:39,270 itu sedikit lebih spesifik, mungkin Google itu pertama. 56 00:02:39,270 --> 00:02:42,340 Ada banyak sumber daya yang besar tentang Web Audio API di luar sana. 57 00:02:42,340 --> 00:02:44,089 Ini benar-benar baik didokumentasikan dan itu menjadi 58 00:02:44,089 --> 00:02:47,194 digunakan oleh satu ton orang di industri, dan orang-orang yang hanya 59 00:02:47,194 --> 00:02:48,610 membangun hal-hal menyenangkan untuk diri mereka sendiri. 60 00:02:48,610 --> 00:02:51,306 Jadi harus ada banyak sumber daya di luar sana. 61 00:02:51,306 --> 00:02:53,040 Mengagumkan. 62 00:02:53,040 --> 00:02:56,100 >> Keren, jadi mengapa Web Audio API? 63 00:02:56,100 --> 00:02:59,840 Diagram ini adalah sedikit dari evolusi dari jalan 64 00:02:59,840 --> 00:03:04,100 suara di web telah berkembang dari waktu ke waktu. 65 00:03:04,100 --> 00:03:13,080 Bgsound seperti tag HTML asli bahwa Internet Explorer digunakan untuk mendukung. 66 00:03:13,080 --> 00:03:16,790 Ini hanya diperbolehkan untuk suara cukup mendasar, fungsi tersebut tidak sangat kuat, 67 00:03:16,790 --> 00:03:19,380 dan Anda tidak bisa melakukan sequencing rumit, 68 00:03:19,380 --> 00:03:21,890 atau mengontrol kapan suara mulai dan berhenti sangat kokoh. 69 00:03:21,890 --> 00:03:23,930 Jadi, itu tidak terlalu berkembang dengan baik. 70 00:03:23,930 --> 00:03:27,470 Kemudian setelah itu, Flash datang along-- yang, 71 00:03:27,470 --> 00:03:31,712 Saya yakin bahwa kalian semua akrab dengan Flash-- mungkin bukan cara kerjanya, 72 00:03:31,712 --> 00:03:32,920 tapi kau pasti melihatnya. 73 00:03:32,920 --> 00:03:35,586 Anda harus memperbarui Flash Anda Plug-in, semua hal semacam itu, 74 00:03:35,586 --> 00:03:40,110 dan yang pasti diperpanjang rentang fungsi yang tersedia. 75 00:03:40,110 --> 00:03:45,370 Tetapi membuat pengguna menginstal plug-in pasti 76 00:03:45,370 --> 00:03:48,480 kelemahan untuk termasuk flash dalam aplikasi Anda, kan? 77 00:03:48,480 --> 00:03:52,410 Karena maka Anda tergantung pada pengguna akan menemukan dan plug-in ini, 78 00:03:52,410 --> 00:03:54,660 dan mungkin menjadi berbalik off dengan langkah ekstra ini 79 00:03:54,660 --> 00:03:56,640 mereka harus mengambil untuk menggunakan aplikasi Anda. 80 00:03:56,640 --> 00:04:01,270 Dan kemudian mungkin ada update yang akan mematahkan seluruh aplikasi Anda, 81 00:04:01,270 --> 00:04:03,880 dan akhirnya menjadi mimpi buruk untuk pengembang, juga. 82 00:04:03,880 --> 00:04:06,230 Jadi itu barikade. 83 00:04:06,230 --> 00:04:10,480 >> Dan kemudian setelah itu datang, tag audio yang HTML, yang 84 00:04:10,480 --> 00:04:16,579 adalah fitur yang lebih modern yang HTML-- tentu memungkinkan untuk lebih banyak hal, 85 00:04:16,579 --> 00:04:20,050 tapi bahkan hal-hal yang dapat Anda lakukan ada yang sedikit terbatas hanya 86 00:04:20,050 --> 00:04:22,730 sebagai akibat dari hal-hal HTML yang mampu. 87 00:04:22,730 --> 00:04:26,060 Jadi ketika JavaScript API, Web Audio API, 88 00:04:26,060 --> 00:04:29,290 menjadi standar berlatih di browser, 89 00:04:29,290 --> 00:04:32,490 yang benar-benar memperluas set peluang bagi pengembang 90 00:04:32,490 --> 00:04:36,590 untuk benar-benar masuk ke dalam gedung keren untuk web. 91 00:04:36,590 --> 00:04:39,220 Untuk waktu yang lama ada memiliki pernah benar-benar kuat alat 92 00:04:39,220 --> 00:04:44,360 untuk aplikasi audio asli, like-- semua orang tahu GarageBand, 93 00:04:44,360 --> 00:04:48,360 dan kemudian jelas ada lebih audio mixing aplikasi profesional, 94 00:04:48,360 --> 00:04:49,640 dan hal semacam itu. 95 00:04:49,640 --> 00:04:52,690 Tapi tidak ada Cloud-- benar-benar baik tidak 96 00:04:52,690 --> 00:04:55,811 Cloud, yeah, saya kira Platform berbasis web Cloud-- 97 00:04:55,811 --> 00:04:58,310 yang akan memungkinkan para pengembang untuk membangun aplikasi untuk orang 98 00:04:58,310 --> 00:05:00,570 untuk melakukan pencampuran audio. 99 00:05:00,570 --> 00:05:03,960 Dan karena ia akan menunjukkan kemudian, Web Audio API 100 00:05:03,960 --> 00:05:07,470 memungkinkan untuk benar-benar kuat hal terjadi benar-benar sederhana, 101 00:05:07,470 --> 00:05:09,597 yang cukup keren. 102 00:05:09,597 --> 00:05:12,680 Jadi itulah instruksi mengapa Anda harus menonton sisa seminar, 103 00:05:12,680 --> 00:05:14,350 dasarnya. 104 00:05:14,350 --> 00:05:17,880 >> Dan sekarang, aku akan berbicara tentang beberapa elemen hanya dasar JavaScript-- 105 00:05:17,880 --> 00:05:20,240 bahasa, sehingga kita bisa berada di halaman yang sama 106 00:05:20,240 --> 00:05:22,470 ketika kita berbicara tentang API sedikit kemudian. 107 00:05:22,470 --> 00:05:23,260 Keren. 108 00:05:23,260 --> 00:05:26,192 >> Jadi, ini adalah ringkasan. 109 00:05:26,192 --> 00:05:27,150 Saya lupa ini ada di sini. 110 00:05:27,150 --> 00:05:27,510 Ya. 111 00:05:27,510 --> 00:05:27,870 >> Hugh Zabriskie: Ada dua slide di sini. 112 00:05:27,870 --> 00:05:30,245 >> SAM GREEN: Ini adalah ringkasan dari beberapa keterbatasan 113 00:05:30,245 --> 00:05:35,220 dari mengikat, metode lama lainnya. 114 00:05:35,220 --> 00:05:37,828 Dan kemudian sekarang, kita memiliki hal-hal ini. 115 00:05:37,828 --> 00:05:40,011 Keren. 116 00:05:40,011 --> 00:05:40,510 Mengagumkan. 117 00:05:40,510 --> 00:05:43,200 >> Jadi, JavaScript penting. 118 00:05:43,200 --> 00:05:47,230 Hal pertama yang pertama, ada Perbedaan yang cukup signifikan 119 00:05:47,230 --> 00:05:49,940 dalam JavaScript dibandingkan dalam bahasa seperti C, di jalan 120 00:05:49,940 --> 00:05:52,050 bahwa variabel diciptakan. 121 00:05:52,050 --> 00:05:55,634 Jadi dalam C, kita digunakan untuk memiliki mengetik variabel kita, kan? 122 00:05:55,634 --> 00:05:57,800 Dan saya tidak bermaksud tipe seperti ketik mereka dalam, maksudku jenis 123 00:05:57,800 --> 00:06:01,900 seperti menetapkan mereka arti type-- seperti, int, float, char. 124 00:06:01,900 --> 00:06:05,210 Dalam C, kami benar-benar digunakan untuk harus membuat variabel 125 00:06:05,210 --> 00:06:09,690 dan kemudian menempel jenis untuk seluruh waktu yang kita gunakan variabel itu. 126 00:06:09,690 --> 00:06:13,990 Dan yang belum tentu buruk, tapi mungkin lebih sulit untuk digunakan. 127 00:06:13,990 --> 00:06:16,190 Salah satu fitur keren JavaScript adalah 128 00:06:16,190 --> 00:06:19,740 bahwa variabel yang apa yang disebut "dinamis mengetik," yang 129 00:06:19,740 --> 00:06:22,500 berarti bahwa saya dapat membuat variabel dengan sintaks itu, 130 00:06:22,500 --> 00:06:25,800 varX sama dengan 5, misalnya. 131 00:06:25,800 --> 00:06:27,790 Yang awalnya menciptakan integer variable-- 132 00:06:27,790 --> 00:06:29,870 tepat di bawah hood somewhere-- tapi aku 133 00:06:29,870 --> 00:06:33,040 dapat mengubah variabel yang untuk merujuk ke string 134 00:06:33,040 --> 00:06:35,820 tanpa melakukan sesuatu seperti menciptakan variabel baru. 135 00:06:35,820 --> 00:06:37,880 Saya tidak perlu khawatir tentang jenis perubahan. 136 00:06:37,880 --> 00:06:45,440 JavaScript tahu bahwa jenis ini berubah, dan itu terjadi secara dinamis. 137 00:06:45,440 --> 00:06:48,510 >> Jadi, ada manfaat dan kelemahan itu, 138 00:06:48,510 --> 00:06:51,250 sebagai orang yang bekerja di JavaScript untuk sementara waktu mungkin tahu. 139 00:06:51,250 --> 00:06:53,600 Ada kalanya Anda mungkin tidak sengaja 140 00:06:53,600 --> 00:06:57,720 mengubah jenis variabel dan tidak menangani jenis perubahan, 141 00:06:57,720 --> 00:07:01,120 dan kemudian Anda JavaScript dapat crash-- atau pengecualian 142 00:07:01,120 --> 00:07:06,070 dibuang, karena Anda akan memiliki Jenis yang salah ketika Anda mengharapkan satu jenis. 143 00:07:06,070 --> 00:07:07,040 Keren. 144 00:07:07,040 --> 00:07:11,470 >> Jadi, scoping-- yang seperti, jika kita ingat minggu di awal kursus, 145 00:07:11,470 --> 00:07:15,420 mengacu pada bagaimana terlihat variabel adalah dan di daerah apa kode. 146 00:07:15,420 --> 00:07:18,400 Semua itu terlihat sangat mirip dengan cara yang terlihat dalam C. 147 00:07:18,400 --> 00:07:24,755 Jadi variabel scoped umumnya dalam kurung kurawal dalam fungsi, 148 00:07:24,755 --> 00:07:27,005 dan kemudian ada juga variabel global-scoped yang 149 00:07:27,005 --> 00:07:29,171 are-- jika Anda menulis sebuah variabel di luar fungsi, 150 00:07:29,171 --> 00:07:31,790 itu akan terlihat di seluruh teks. 151 00:07:31,790 --> 00:07:35,840 >> Satu perbedaan antara JavaScript dan C pada khususnya, 152 00:07:35,840 --> 00:07:40,280 adalah bahwa jika Anda menyatakan global di mana saja variabel dalam sebuah file teks 153 00:07:40,280 --> 00:07:43,324 itu terlihat dalam fungsi apapun dalam file teks. 154 00:07:43,324 --> 00:07:44,240 Itu benar, kan? 155 00:07:44,240 --> 00:07:46,330 >> Hugh Zabriskie: Yep. 156 00:07:46,330 --> 00:07:49,120 >> SAM GREEN: Jadi itu juga sedikit bit yang funky dibandingkan dengan C, 157 00:07:49,120 --> 00:07:52,660 di mana kami selalu harus memiliki kita definisi variabel di atas tempat 158 00:07:52,660 --> 00:07:53,770 mereka digunakan. 159 00:07:53,770 --> 00:07:57,957 Itu bukan aturan yang ditegakkan lagi, jadi, sedikit berbeda. 160 00:07:57,957 --> 00:08:00,540 Dan lagi hanya untuk menekankan kembali, global yang dibandingkan variables-- lokal 161 00:08:00,540 --> 00:08:03,457 sangat mirip dengan C. Anda bisa memiliki dua variabel dengan nama yang sama, 162 00:08:03,457 --> 00:08:06,540 dan memiliki salah satu dari nama-nama mereka akan dibayangi oleh variabel lokal jika salah satu dari mereka 163 00:08:06,540 --> 00:08:07,546 adalah global. 164 00:08:07,546 --> 00:08:09,420 Jenis Jadi, sama masalah yang beberapa dari Anda 165 00:08:09,420 --> 00:08:11,920 mungkin telah mengalami dalam beberapa masalah Anda set sejauh ini. 166 00:08:11,920 --> 00:08:14,450 Keren, jadi itu variabel. 167 00:08:14,450 --> 00:08:20,310 >> Aliran kontrol, yang berarti seperti, jika-else-- stuff-- logis dan loop. 168 00:08:20,310 --> 00:08:24,510 Jadi untuk memulai dengan, ini adalah apa jika-lain pernyataan seperti di JavaScript. 169 00:08:24,510 --> 00:08:29,750 Penempatan berbagai hal di garis tidak penting. 170 00:08:29,750 --> 00:08:34,409 Ini hanyalah salah satu konvensi untuk cara kode struktur kita. 171 00:08:34,409 --> 00:08:38,634 Sama seperti di C, kita memiliki "jika," sebuah pernyataan kurung. 172 00:08:38,634 --> 00:08:40,840 173 00:08:40,840 --> 00:08:42,090 Bukan itu yang saya maksud untuk melakukan. 174 00:08:42,090 --> 00:08:44,860 175 00:08:44,860 --> 00:08:45,550 Saya melakukannya lagi. 176 00:08:45,550 --> 00:08:46,841 >> Hugh Zabriskie: Mencoba untuk keluar? 177 00:08:46,841 --> 00:08:49,770 SAM GREEN: Tidak, aku hanya mencoba untuk memperbesar. 178 00:08:49,770 --> 00:08:50,660 Tidak peduli. 179 00:08:50,660 --> 00:08:54,730 180 00:08:54,730 --> 00:08:59,370 >> Jadi, kita memiliki "jika" pernyataan dan kita memiliki kondisi di dalamnya 181 00:08:59,370 --> 00:09:03,130 yang mengevaluasi untuk benar atau salah, dan yang menentukan apakah atau tidak 182 00:09:03,130 --> 00:09:04,510 kita memasuki blok kode. 183 00:09:04,510 --> 00:09:09,860 Dan juga, kita memiliki yang lain-jika, dan sebuah lain, seperti kita terbiasa di C. 184 00:09:09,860 --> 00:09:14,010 >> Anda juga harus cukup nyaman langsung dari kelelawar dengan loop, 185 00:09:14,010 --> 00:09:16,440 karena mereka juga melihat banyak seperti C terlihat. 186 00:09:16,440 --> 00:09:19,600 Tetapi Anda akan melihat lagi bahwa kita memiliki, bukannya int inisialisasi, 187 00:09:19,600 --> 00:09:22,570 kami memiliki inisialisasi var. 188 00:09:22,570 --> 00:09:24,650 Dan saya kira Anda memiliki berhati-hati untuk membuat 189 00:09:24,650 --> 00:09:28,460 Pastikan Anda tidak mengubah nilai I dari int ke string, 190 00:09:28,460 --> 00:09:31,780 misalnya, karena itu akan menyebabkan perilaku aneh Anda mungkin tidak 191 00:09:31,780 --> 00:09:32,280 mengharapkan. 192 00:09:32,280 --> 00:09:35,750 Tapi ini harus melihat cukup akrab, juga. 193 00:09:35,750 --> 00:09:39,460 >> Jadi ini adalah di mana hal-hal mulai mendapatkan sedikit gila di JavaScript 194 00:09:39,460 --> 00:09:44,920 untuk seseorang yang pergi dari latar belakang C. Ada fungsi 195 00:09:44,920 --> 00:09:48,070 dalam JavaScript, dan ada satu cara untuk menyatakan fungsi yang terlihat 196 00:09:48,070 --> 00:09:50,361 semacam mirip dengan C, dan maka ada satu lagi yang 197 00:09:50,361 --> 00:09:52,450 terlihat agak berbeda. 198 00:09:52,450 --> 00:09:54,930 >> Versi pertama, yang kita bisa lihat di sini, 199 00:09:54,930 --> 00:09:59,260 adalah jenis C-seperti, di mana kita katakan, ini adalah fungsi, 200 00:09:59,260 --> 00:10:01,490 memberikan nama, memberikan jumlah argumen, 201 00:10:01,490 --> 00:10:05,150 dan kemudian isi fungsi masuk ke dalam orang-orang kurung kurawal. 202 00:10:05,150 --> 00:10:08,850 Kita akan melihat contoh argumen hanya dalam satu detik. 203 00:10:08,850 --> 00:10:13,420 >> Sedangkan pada baris berikutnya, kita melihat, oh, inilah sebuah variabel yang disebut "myFunction," 204 00:10:13,420 --> 00:10:17,546 dan kami sama ke ini generik function-- thing-- yang 205 00:10:17,546 --> 00:10:19,170 tampaknya tidak memiliki apa pun yang terjadi. 206 00:10:19,170 --> 00:10:22,780 207 00:10:22,780 --> 00:10:26,080 Alasan yang berbeda dari C adalah bahwa JavaScript 208 00:10:26,080 --> 00:10:30,040 adalah apa yang disebut bahasa fungsional, atau memiliki elemen fungsional, yang berarti 209 00:10:30,040 --> 00:10:33,510 yang berfungsi sebenarnya nilai-nilai. 210 00:10:33,510 --> 00:10:39,520 Dan itu berarti bahwa kita dapat mengatur variabel untuk sama fungsi 211 00:10:39,520 --> 00:10:43,210 dan kemudian memindahkan fungsi yang sekitar, lulus sebagai argumen, 212 00:10:43,210 --> 00:10:46,550 melakukan segala macam hal seperti itu dengan fungsi. 213 00:10:46,550 --> 00:10:49,682 >> Satu hal lain untuk note-- fungsi yang ditulis 214 00:10:49,682 --> 00:10:51,140 dengan sejumlah argumen. 215 00:10:51,140 --> 00:10:54,056 Kita akan melihat contoh dari fungsi dengan argumen pada slide berikutnya. 216 00:10:54,056 --> 00:10:56,720 Tapi JavaScript tidak akan berteriak pada Anda jika Anda mencoba 217 00:10:56,720 --> 00:10:59,330 menggunakan fungsi dengan nomor yang salah dari argumen. 218 00:10:59,330 --> 00:11:05,310 Itu hanya akan melakukan yang terbaik untuk membuat melakukan, yang berarti bahwa jika Anda lulus, 219 00:11:05,310 --> 00:11:09,410 Anda memanggil fungsi yang mengharapkan Argumen tanpa argumen, semua yang 220 00:11:09,410 --> 00:11:13,990 akan terjadi adalah ia akan melakukan yang terbaik untuk mencoba dan mengeksekusi kode itu, 221 00:11:13,990 --> 00:11:16,541 dan jika akhirnya berjalan menjadi pengecualian atau kesalahan, 222 00:11:16,541 --> 00:11:19,790 itu akan membuang pengecualian itu dan hanya terus going-- yang hanya salah satu cara 223 00:11:19,790 --> 00:11:21,070 bahwa JavaScript bekerja. 224 00:11:21,070 --> 00:11:21,781 Ya. 225 00:11:21,781 --> 00:11:24,207 >> AUDIENCE: Apa yang terjadi jika ada terlalu banyak argumen? 226 00:11:24,207 --> 00:11:26,040 SAM GREEN: Jadi pertanyaan adalah, apa yang terjadi 227 00:11:26,040 --> 00:11:27,380 jika ada terlalu banyak argumen? 228 00:11:27,380 --> 00:11:29,171 Dan jawabannya adalah bahwa JavaScript hanya akan 229 00:11:29,171 --> 00:11:32,120 mengabaikan orang-orang yang setelah yang mengharapkan. 230 00:11:32,120 --> 00:11:36,420 Ini akan mencoba untuk menjalankan fungsi sebut seolah-olah itu hanya dua yang pertama. 231 00:11:36,420 --> 00:11:37,075 Kanan? 232 00:11:37,075 --> 00:11:37,700 >> Hugh Zabriskie: Itu benar, ya. 233 00:11:37,700 --> 00:11:39,449 Demikian pula, jika ada terlalu sedikit argumen, 234 00:11:39,449 --> 00:11:42,640 itu hanya semacam memberi nol untuk semua argumen itu tidak memiliki nilai-nilai 235 00:11:42,640 --> 00:11:43,660 untuk. 236 00:11:43,660 --> 00:11:45,810 >> SAM GREEN: Yang bisa benar-benar menjadi berguna, jika Anda 237 00:11:45,810 --> 00:11:49,060 ingin menulis fungsi yang mengambil sejumlah variabel argumen. 238 00:11:49,060 --> 00:11:55,830 Anda dapat mengatur nilai default di definisi fungsi, 239 00:11:55,830 --> 00:11:59,060 dan dapat mengabaikan fakta bahwa input tidak ada. 240 00:11:59,060 --> 00:12:01,584 241 00:12:01,584 --> 00:12:04,000 Jadi saya ingin berbicara sedikit lebih lanjut tentang peluru terakhir ini 242 00:12:04,000 --> 00:12:05,541 titik, yang merupakan fungsi adalah nilai-nilai. 243 00:12:05,541 --> 00:12:07,930 244 00:12:07,930 --> 00:12:11,010 Ini adalah contoh yang sedikit sedikit pikiran-bertiup 245 00:12:11,010 --> 00:12:14,880 jika Anda hanya membacanya, dan tidak berpikir tentang apa yang terjadi untuk kedua. 246 00:12:14,880 --> 00:12:17,910 Jadi, mari kita lihat hanya pada baris pertama di sini. 247 00:12:17,910 --> 00:12:24,360 Kami memiliki variabel ini, f1, yang kita katakan adalah fungsi yang melakukan hal ini. 248 00:12:24,360 --> 00:12:28,535 Dan isi dari fungsi yang console.log ('hello'). 249 00:12:28,535 --> 00:12:32,220 Anda dapat menganggap console.log sebagai JavaScript setara dengan printf. 250 00:12:32,220 --> 00:12:35,510 Jadi apa yang akan terjadi adalah, jika kita menjalankan kode ini di browser kita, 251 00:12:35,510 --> 00:12:37,530 itu akan mencetak string. 252 00:12:37,530 --> 00:12:39,342 Saya bisa menunjukkan bahwa. 253 00:12:39,342 --> 00:12:42,300 AUDIENCE: Dengan log, meskipun, apakah itu berarti itu sedang direkam di suatu tempat? 254 00:12:42,300 --> 00:12:42,550 SAM GREEN: Ya. 255 00:12:42,550 --> 00:12:44,216 Jadi saya akan menunjukkan kepada Anda apa yang akan terjadi. 256 00:12:44,216 --> 00:12:48,085 Jadi pertanyaannya adalah, apakah log artinya? 257 00:12:48,085 --> 00:12:51,262 >> Hugh Zabriskie: Jadi console.log seperti printf untuk C. 258 00:12:51,262 --> 00:12:52,970 SAM GREEN: Jadi console.log seperti printf, 259 00:12:52,970 --> 00:12:59,240 jadi jika saya memiliki console.log ini ('halo'), dan saya sebut itu, string "hello" 260 00:12:59,240 --> 00:13:00,730 akan dicetak ke konsol. 261 00:13:00,730 --> 00:13:03,340 Ini adalah konsol. 262 00:13:03,340 --> 00:13:05,930 Ini seperti printf, di mana mencetak untuk keluar standar. 263 00:13:05,930 --> 00:13:09,050 264 00:13:09,050 --> 00:13:11,230 Dan kita akan melihat dalam satu menit, tapi ini benar-benar 265 00:13:11,230 --> 00:13:16,529 mengacu pada objek konsol, dan memanggil metode pada objek itu. 266 00:13:16,529 --> 00:13:18,320 Itu akan lebih masuk akal dalam satu menit ketika kita 267 00:13:18,320 --> 00:13:20,660 bisa berbicara tentang objek dalam JavaScript, 268 00:13:20,660 --> 00:13:22,509 tapi saya pikir saya hanya akan menyebutkan bahwa. 269 00:13:22,509 --> 00:13:24,300 Hugh Zabriskie: Kami digunakan untuk di C, right-- 270 00:13:24,300 --> 00:13:27,580 kita biasanya menulis program besar di utama untuk melakukan sesuatu. 271 00:13:27,580 --> 00:13:30,700 Tapi apa yang keren dalam JavaScript adalah Anda memiliki jenis interpreter yang 272 00:13:30,700 --> 00:13:33,620 berjalan secara real time, sehingga Dibutuhkan hanya baris demi baris, 273 00:13:33,620 --> 00:13:35,320 itu hanya bisa menafsirkan bahwa di tempat. 274 00:13:35,320 --> 00:13:37,403 Dan melacak hal-hal yang telah dijalankan sebelumnya, 275 00:13:37,403 --> 00:13:41,620 jadi alat yang cukup berguna untuk menggunakan console.log, atau konsol, 276 00:13:41,620 --> 00:13:46,870 umumnya, hanya bermain main dengan JavaScript. 277 00:13:46,870 --> 00:13:51,420 >> SAM GREEN: Jadi akan kembali ke ini example-- baris kedua kode 278 00:13:51,420 --> 00:13:55,320 di sini cukup mencengangkan di kepala saya. 279 00:13:55,320 --> 00:13:59,790 Pertama kali saya membaca ini, itu seperti, apa yang terjadi? 280 00:13:59,790 --> 00:14:04,580 Jadi apa yang terjadi adalah, ini deklarasi fungsi mengatakan, 281 00:14:04,580 --> 00:14:10,170 Saya memiliki fungsi yang disebut f2 yang mengharapkan satu argumen, f, 282 00:14:10,170 --> 00:14:12,990 dan kemudian panggilan yang fungsi, f, yang 283 00:14:12,990 --> 00:14:17,652 disahkan untuk itu sebagai argumen tanpa argumen itu sendiri. 284 00:14:17,652 --> 00:14:19,110 Jadi, yang mungkin telah membingungkan. 285 00:14:19,110 --> 00:14:21,890 286 00:14:21,890 --> 00:14:28,400 Jika kita memahami ini sebagai f2 f1 mengambil sebagai argumen, dan kemudian dalam f2, 287 00:14:28,400 --> 00:14:31,190 f mendapat called-- yang berarti bahwa baris kode ini, 288 00:14:31,190 --> 00:14:34,192 setelah dua baris kode, hasil dalam "halo" 289 00:14:34,192 --> 00:14:35,400 yang dicetak ke konsol. 290 00:14:35,400 --> 00:14:41,660 291 00:14:41,660 --> 00:14:44,910 >> Fakta bahwa kita dapat melewati fungsi sekitar sebagai nilai-nilai 292 00:14:44,910 --> 00:14:47,870 akhirnya menjadi salah satu yang paling fitur canggih dari JavaScript 293 00:14:47,870 --> 00:14:49,700 sebagai bahasa pemrograman. 294 00:14:49,700 --> 00:14:52,782 Di luar semua hal mengagumkan yang dapat dilakukan, 295 00:14:52,782 --> 00:14:54,990 hanya sebagai fitur dari bahasa dalam hal cara 296 00:14:54,990 --> 00:14:58,400 bahwa itu membuat hal-hal mudah program dan memungkinkan 297 00:14:58,400 --> 00:15:01,060 untuk hal-hal yang tidak terlalu cocok untuk web, 298 00:15:01,060 --> 00:15:04,500 pemrograman fungsional dan fungsional aspek pemrograman JavaScript 299 00:15:04,500 --> 00:15:07,130 adalah salah satu yang paling konsep yang kuat yang 300 00:15:07,130 --> 00:15:11,030 ada di JavaScript-- jika kau bertanya padaku. 301 00:15:11,030 --> 00:15:11,960 Keren. 302 00:15:11,960 --> 00:15:13,534 >> Jadi, hal berikutnya. 303 00:15:13,534 --> 00:15:16,450 Selain menjadi fungsional, ada juga unsur JavaScript 304 00:15:16,450 --> 00:15:20,510 yang berorientasi objek, yang merupakan salah satu yang sangat 305 00:15:20,510 --> 00:15:23,800 kata buzz populer dalam ilmu komputer. 306 00:15:23,800 --> 00:15:27,040 Pemrograman berorientasi objek adalah hal yang benar-benar populer. 307 00:15:27,040 --> 00:15:34,210 JavaScript memiliki versi itu, di mana saya percaya setiap nilai juga 308 00:15:34,210 --> 00:15:41,475 obyek, yang berarti bahwa setiap objek membungkus bersama beberapa jumlah nilai. 309 00:15:41,475 --> 00:15:44,020 310 00:15:44,020 --> 00:15:49,750 Jadi untuk nilai-nilai yang sederhana, seperti integer, seperti varX sama dengan 5, 311 00:15:49,750 --> 00:15:52,250 objek yang hanya membungkus bahwa salah satu nilai. 312 00:15:52,250 --> 00:15:54,760 313 00:15:54,760 --> 00:15:59,036 >> Tapi kita juga bisa membayangkan situasi where-- kita bisa memikirkan situasi di C 314 00:15:59,036 --> 00:16:00,910 di mana kita ingin lakukan sesuatu dengan struct, 315 00:16:00,910 --> 00:16:03,285 misalnya, yang membungkus beberapa nilai-nilai bersama dan merek 316 00:16:03,285 --> 00:16:05,870 itu benar-benar mudah untuk lulus hal di sekitar. 317 00:16:05,870 --> 00:16:09,270 Saat itulah suatu objek dalam JavaScript. 318 00:16:09,270 --> 00:16:12,340 >> Sangat penting untuk diingat ketika saya mengatakan bahwa benda dibungkus 319 00:16:12,340 --> 00:16:15,330 beberapa jumlah nilai bersama-sama, yang berfungsi juga 320 00:16:15,330 --> 00:16:21,506 nilai-nilai, yang berarti bahwa fungsi dapat juga berada di dalam objek JavaScript. 321 00:16:21,506 --> 00:16:26,910 Dan alasan itu penting adalah bahwa, sementara kita sering 322 00:16:26,910 --> 00:16:30,290 memikirkan memanggil metode pada objek yang 323 00:16:30,290 --> 00:16:35,200 dari istilah populer dari yang lain bahasa berorientasi objek yang populer, 324 00:16:35,200 --> 00:16:39,330 salah satu perbedaan di sini adalah bahwa semua bahwa metode adalah dalam JavaScript 325 00:16:39,330 --> 00:16:47,270 adalah nilai disimpan dalam sebuah objek yang melakukan beberapa action-- mungkin 326 00:16:47,270 --> 00:16:51,850 menggunakan nilai-nilai lain yang berada di dalam obyek itu, tapi belum tentu. 327 00:16:51,850 --> 00:16:56,930 Jadi bisa dibayangkan situasi, saya kira dalam sedikit cara gila, 328 00:16:56,930 --> 00:17:02,990 di mana Anda disebut metode satu objek pada objek lain, misalnya. 329 00:17:02,990 --> 00:17:06,010 Jadi, itu sedikit yang funky dengan cara itu. 330 00:17:06,010 --> 00:17:09,369 >> Dan Anda juga dapat mengubah metode yang berkaitan dengan obyek 331 00:17:09,369 --> 00:17:13,740 dengan menetapkan bahwa metode fungsi baru, yang juga 332 00:17:13,740 --> 00:17:18,250 cukup berbeda dari lainnya bahasa berorientasi objek, di mana 333 00:17:18,250 --> 00:17:21,410 setelah kami mendeklarasikan sebuah objek dan instantiate, 334 00:17:21,410 --> 00:17:25,839 kita tidak bisa mengubah metode yang terkait dengan objek itu lagi. 335 00:17:25,839 --> 00:17:28,680 Jadi itu cukup berbeda. 336 00:17:28,680 --> 00:17:29,570 Keren. 337 00:17:29,570 --> 00:17:34,010 >> Jadi, inilah contoh, pertama, suatu objek dalam tindakan. 338 00:17:34,010 --> 00:17:36,390 Ini adalah apa yang disebut objek generik, yang 339 00:17:36,390 --> 00:17:39,460 berarti bahwa itu tidak memiliki nama tertentu, tidak memiliki kelas, 340 00:17:39,460 --> 00:17:42,190 itu hanya beberapa pembungkus nilai. 341 00:17:42,190 --> 00:17:49,790 Dan cara yang terlihat adalah, kita memiliki ini pasangan luar keriting kawat gigi sini 342 00:17:49,790 --> 00:17:57,950 yang menunjukkan ke JavaScript dan mengatakan, ini adalah sebuah objek. 343 00:17:57,950 --> 00:18:02,130 Nilai-nilai di dalamnya masing-masing nilai dalam 344 00:18:02,130 --> 00:18:04,590 objek yang harus dibungkus bersama-sama. 345 00:18:04,590 --> 00:18:09,180 Dan di dalam objek itu, kami kemudian memiliki pasangan nilai kunci, 346 00:18:09,180 --> 00:18:13,880 di mana kunci mengacu nama dari nilai dalam objek, 347 00:18:13,880 --> 00:18:16,790 dan side-- lainnya sebaliknya sini-usus 348 00:18:16,790 --> 00:18:19,850 adalah nilai aktual yang harus disimpan. 349 00:18:19,850 --> 00:18:26,210 >> Jadi Anda lihat di sini bahwa kita memiliki kunci yang disebut fn dengan nilai sam, 350 00:18:26,210 --> 00:18:29,430 diikuti dengan koma, mengatakan ke entri berikutnya. 351 00:18:29,430 --> 00:18:33,560 Kemudian kunci disebut ln, dengan nilai hijau, 352 00:18:33,560 --> 00:18:35,840 diikuti dengan koma, diikuti dengan "cetak," 353 00:18:35,840 --> 00:18:43,209 yang akan memiliki nilai fungsi yang akan melakukan baris kode. 354 00:18:43,209 --> 00:18:45,500 Mari mengambil langkah mundur dan membongkar apa yang terjadi di sini. 355 00:18:45,500 --> 00:18:47,280 Jadi ini adalah sedikit rumit, dan kami melihat sesuatu yang baru 356 00:18:47,280 --> 00:18:48,071 untuk pertama kalinya. 357 00:18:48,071 --> 00:18:51,190 358 00:18:51,190 --> 00:18:55,065 "Ini" kata kunci adalah hal baru kita lihat di sini, dan apa yang dilakukan 359 00:18:55,065 --> 00:19:00,540 adalah, mengacu pada saat ini objek dalam lingkup, kan? 360 00:19:00,540 --> 00:19:03,990 Jadi ketika kita mengatakan, ini menunjukkan semua jalan kembali 361 00:19:03,990 --> 00:19:08,140 untuk seluruh object-- ini ketika kita melakukan this.fn, 362 00:19:08,140 --> 00:19:11,990 kita akan pergi semua jalan kembali ke objek ini, pergi ke nilai fn 363 00:19:11,990 --> 00:19:16,471 dan sam, tarik semua jalan kembali, tetap di sini, dan kemudian melanjutkan. 364 00:19:16,471 --> 00:19:19,838 >> AUDIENCE: Jadi dengan pengambilan, adalah yang dilakukan karena parameter 365 00:19:19,838 --> 00:19:20,621 definisi? 366 00:19:20,621 --> 00:19:23,870 SAM GREEN: Jadi pertanyaannya adalah, adalah pengambilan dilakukan karena parameter 367 00:19:23,870 --> 00:19:24,727 definisi? 368 00:19:24,727 --> 00:19:25,435 Ya, benar-benar. 369 00:19:25,435 --> 00:19:29,660 370 00:19:29,660 --> 00:19:32,470 Apa yang akan terjadi di sini adalah, dot ini mengatakan kepada JavaScript, 371 00:19:32,470 --> 00:19:39,990 OK, saya mendapatkan beberapa nilai dari objek ini dari diriku sendiri. 372 00:19:39,990 --> 00:19:46,375 Dan kemudian akan mencari entri disebut fn, dan jika menemukan itu, 373 00:19:46,375 --> 00:19:48,470 itu akan kembali bahwa value-- demikian, itu sam. 374 00:19:48,470 --> 00:19:51,540 Tapi aku bisa juga diketik sesuatu yang tidak didefinisikan di sini, 375 00:19:51,540 --> 00:19:54,090 dan kemudian itu akan hanya kembali undefined-- yang 376 00:19:54,090 --> 00:19:58,250 adalah hal yang dapat JavaScript melakukan, yang dapat memiliki manfaat, 377 00:19:58,250 --> 00:20:03,190 tapi itu also-- jika Anda membuat kesalahan ketik, dapat mengakibatkan kesalahan aneh. 378 00:20:03,190 --> 00:20:05,617 Jadi itu hanya akan mencoba untuk menemukan apa pun yang Anda kirim untuk menemukan 379 00:20:05,617 --> 00:20:07,700 dan itu tidak akan mengeluh jika tidak menemukannya. 380 00:20:07,700 --> 00:20:11,390 Itu hanya akan mengatakan, saya tidak menemukannya, dan kemudian melanjutkan. 381 00:20:11,390 --> 00:20:17,581 Jadi itu akan terdefinisi, ditambah kosong, ditambah nama terakhir. 382 00:20:17,581 --> 00:20:18,080 Ya. 383 00:20:18,080 --> 00:20:21,070 Dan kemudian kita dapat melihat bahwa jika kita kemudian bisa turun dan access-- 384 00:20:21,070 --> 00:20:25,450 dan kita sebut tf.print () dengan tanda kurung. 385 00:20:25,450 --> 00:20:30,000 Ini akan memanggil cetak yang Fungsi tanpa argumen, kan? 386 00:20:30,000 --> 00:20:34,490 Tetapi jika kita hanya mengatakan tf.print () koma, tanpa kurung, 387 00:20:34,490 --> 00:20:37,480 semua yang akan dilakukan adalah menarik keluar fungsi dari nilai, 388 00:20:37,480 --> 00:20:40,609 namun tidak benar-benar menyebutnya. 389 00:20:40,609 --> 00:20:41,162 Keren. 390 00:20:41,162 --> 00:20:42,870 Hugh Zabriskie: Haruskah kita membuat sebuah objek? 391 00:20:42,870 --> 00:20:44,161 SAM GREEN: Tentu, mari kita lakukan itu. 392 00:20:44,161 --> 00:20:48,750 Jadi saya bisa bergerak ini contoh ke konsol. 393 00:20:48,750 --> 00:20:51,380 394 00:20:51,380 --> 00:20:55,466 Kita bisa membayangkan bahwa saya memiliki objek. 395 00:20:55,466 --> 00:21:03,026 396 00:21:03,026 --> 00:21:04,150 Jadi ini adalah objek sederhana. 397 00:21:04,150 --> 00:21:06,910 398 00:21:06,910 --> 00:21:11,050 Ini adalah obyek yang berisi dua nilai dengan dua tombol, dua nilai kunci 399 00:21:11,050 --> 00:21:12,710 pasang. 400 00:21:12,710 --> 00:21:21,850 Jadi saya kemudian dapat mengakses nilai yang tersimpan dalam obyek ini dengan melakukan x.x1, 401 00:21:21,850 --> 00:21:23,400 misalnya, dan saya mendapatkan 1 kembali. 402 00:21:23,400 --> 00:21:29,590 Demikian juga, x.x2, mendapatkan nilai yang kembali. 403 00:21:29,590 --> 00:21:33,330 >> Dan sekarang hal yang sangat keren adalah, saya bisa benar-benar menambahkan sesuatu untuk objek ini 404 00:21:33,330 --> 00:21:34,316 setelah saya buat itu. 405 00:21:34,316 --> 00:21:36,315 Jadi bisa dibayangkan, mari kita mengatakan bahwa saya memiliki fungsi. 406 00:21:36,315 --> 00:21:44,430 407 00:21:44,430 --> 00:21:46,352 >> Hugh Zabriskie: Anda harus melakukan Shift-Enter. 408 00:21:46,352 --> 00:21:47,643 >> SAM GREEN: Oh, itu menjengkelkan. 409 00:21:47,643 --> 00:22:02,460 410 00:22:02,460 --> 00:22:04,324 Apa itu tidak suka? 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 Kita mulai. 414 00:22:08,691 --> 00:22:09,190 Keren. 415 00:22:09,190 --> 00:22:12,840 >> Jadi saya baru saja membuat fungsi ini, f, yang 416 00:22:12,840 --> 00:22:17,590 akan pergi ke saat ini objek dan cetak this.x1. 417 00:22:17,590 --> 00:22:20,330 Jadi jika saya hanya memanggil f oleh itu sendiri, tidak ada yang terjadi 418 00:22:20,330 --> 00:22:26,970 terjadi, benar, karena tidak ada x1 lapangan di objek itu mengacu. 419 00:22:26,970 --> 00:22:39,710 Tapi, jika saya katakan, x.f = f, dan kemudian saya sebut x.f (), aku akan kembali 1. 420 00:22:39,710 --> 00:22:42,990 421 00:22:42,990 --> 00:22:46,530 Bahwa fungsi f sekarang terkait dengan objek x, 422 00:22:46,530 --> 00:22:51,800 yang memiliki kunci yang disebut x1 terkait dengan nilai 1, 423 00:22:51,800 --> 00:22:54,570 jadi ketika kita sebut this.x1, itu akan menemukan sedang mencari 424 00:22:54,570 --> 00:22:56,450 dan mampu mencetak nilai keluar. 425 00:22:56,450 --> 00:22:58,700 Jadi itu hanya salah satu contoh dari jenis hal-hal gila 426 00:22:58,700 --> 00:23:01,190 dapat Anda lakukan dengan benda-benda di JavaScript. 427 00:23:01,190 --> 00:23:03,870 428 00:23:03,870 --> 00:23:07,560 >> Jadi versi itu adalah Versi generik, arti 429 00:23:07,560 --> 00:23:13,780 bahwa kami telah menciptakan sebuah objek menggunakan ini kurung notasi brace notation--, 430 00:23:13,780 --> 00:23:16,880 rather-- dan itulah berguna jika kita hanya ingin 431 00:23:16,880 --> 00:23:21,440 satu contoh dari objek tertentu, tetapi bagaimana jika kita ingin memiliki lebih dari satu 432 00:23:21,440 --> 00:23:22,210 dari jenis yang sama? 433 00:23:22,210 --> 00:23:24,440 Dan jawaban yang Pertanyaannya adalah, ada hal-hal 434 00:23:24,440 --> 00:23:26,760 disebut kelas dalam JavaScript juga. 435 00:23:26,760 --> 00:23:31,470 436 00:23:31,470 --> 00:23:36,420 Kita bisa membuat fungsi yang melakukan semacam inisialisasi 437 00:23:36,420 --> 00:23:41,690 untuk benda asing, dan kami akan mengatakan, seperti, 438 00:23:41,690 --> 00:23:44,550 class-- saya sehingga nama dari object-- dapat digunakan kembali 439 00:23:44,550 --> 00:23:47,100 sama fungsi yang menentukan itu. 440 00:23:47,100 --> 00:23:52,280 Jadi apa ini akan setara untuk menciptakan sebuah benda yang 441 00:23:52,280 --> 00:23:55,930 akan seperti, penjepit keriting, str, usus besar, 442 00:23:55,930 --> 00:23:59,630 ini adalah string, koma, penjepit keriting. 443 00:23:59,630 --> 00:24:01,880 Itu akan menjadi generik objek kita menginisialisasi, 444 00:24:01,880 --> 00:24:06,380 dengan satu perbedaan berada di baris berikutnya kita membuat prototipe, yang 445 00:24:06,380 --> 00:24:11,190 berarti itu adalah kunci default yang kami tambahkan ke objek kami yang 446 00:24:11,190 --> 00:24:13,970 memiliki nilai yang tercantum di sini. 447 00:24:13,970 --> 00:24:20,570 Artinya, ketika saya membuat yang baru Misalnya obyek MyClass ini, 448 00:24:20,570 --> 00:24:27,440 itu akan memiliki pra-dibangun dalam itu nilai yang disebut str dan nilai lain 449 00:24:27,440 --> 00:24:32,418 disebut myPrint, yang akan menjadi fungsi. 450 00:24:32,418 --> 00:24:32,918 Mengagumkan. 451 00:24:32,918 --> 00:24:37,410 452 00:24:37,410 --> 00:24:37,990 >> Besar. 453 00:24:37,990 --> 00:24:40,710 Jadi hal terakhir untuk mengatakan tentang JavaScript 454 00:24:40,710 --> 00:24:46,430 adalah bahwa itu benar-benar berguna untuk apa disebut operasi asynchronous. 455 00:24:46,430 --> 00:24:52,500 Asynchronous berarti adalah bahwa kita dapat menunggu beberapa operasi 456 00:24:52,500 --> 00:24:57,870 untuk menyelesaikan sebelum kita bergerak , tapi pindah sementara kita menunggu 457 00:24:57,870 --> 00:24:59,690 dan kemudian memiliki sesuatu terjadi di kemudian hari. 458 00:24:59,690 --> 00:25:03,480 Dan apa yang saya maksud dengan itu adalah, Anda bisa membayangkan situasi di mana 459 00:25:03,480 --> 00:25:06,850 Anda mengirim permintaan ke beberapa server web di suatu tempat, 460 00:25:06,850 --> 00:25:09,670 dan itu akan mengirimkan kembali beberapa sebagian besar dari data, kan? 461 00:25:09,670 --> 00:25:13,320 Dan pengguna Anda bisa menunggu di Sementara untuk itu terjadi, 462 00:25:13,320 --> 00:25:15,200 dan tidak ada yang bisa terjadi pada waktu itu. 463 00:25:15,200 --> 00:25:18,110 Tapi itu bukan desain besar, kan? 464 00:25:18,110 --> 00:25:20,214 Anda tidak ingin halaman web untuk membekukan. 465 00:25:20,214 --> 00:25:22,380 Bagaimana jika pengguna ingin klik pada menu drop-down? 466 00:25:22,380 --> 00:25:24,870 Ini bukan pola desain besar. 467 00:25:24,870 --> 00:25:29,290 Sebaliknya, pada dasarnya apa yang JavaScript tidak akan mengatakan, 468 00:25:29,290 --> 00:25:31,870 OK, melakukan operasi ini asynchronously. 469 00:25:31,870 --> 00:25:36,520 Jadi seperti, menunggu di latar belakang, dan kemudian ketika operasi dilakukan, 470 00:25:36,520 --> 00:25:39,420 memanggil callback function-- memanggil beberapa fungsi, 471 00:25:39,420 --> 00:25:43,800 melakukan beberapa action-- untuk sinyal bahwa operasi kami menunggu untuk mengakhiri 472 00:25:43,800 --> 00:25:45,520 sudah selesai. 473 00:25:45,520 --> 00:25:51,240 Dan alasan yang super kuat adalah, kita bisa melakukan sesuatu, lulus argumen, 474 00:25:51,240 --> 00:25:54,440 melakukan sesuatu, dan kemudian menunggu sesuatu terjadi. 475 00:25:54,440 --> 00:25:58,970 Kemudian, setelah sesuatu yang selesai dengan, kita dapat memanggil callback. 476 00:25:58,970 --> 00:26:03,300 Itu benar-benar berguna karena memungkinkan kita melakukan hal-hal dengan Web Audio API, 477 00:26:03,300 --> 00:26:07,490 misalnya, seperti beban sebuah file audio dari server jauh 478 00:26:07,490 --> 00:26:11,660 tanpa harus menunggu untuk seluruh file audio yang akan diambil, 479 00:26:11,660 --> 00:26:14,440 yang akan benar-benar buruk bagi pengalaman pengguna. 480 00:26:14,440 --> 00:26:17,080 Keren. 481 00:26:17,080 --> 00:26:19,460 >> Beberapa terakhir mencatat sekitar debugging, karena ini 482 00:26:19,460 --> 00:26:23,682 adalah hal yang Anda akan harus melakukan sebagai bagian dari proyek Anda, dijamin. 483 00:26:23,682 --> 00:26:25,140 Saya sebutkan konsol JavaScript. 484 00:26:25,140 --> 00:26:27,550 Ini adalah fitur yang super berguna dari semua browser modern, 485 00:26:27,550 --> 00:26:30,300 Dan kita benar-benar mendorong Anda untuk mendapatkan nyaman menggunakan konsol Anda, 486 00:26:30,300 --> 00:26:33,660 jika Anda ingin mendapatkan baik di JavaScript. 487 00:26:33,660 --> 00:26:36,320 Ini super berguna untuk debugging, tetapi juga 488 00:26:36,320 --> 00:26:39,440 benar-benar berguna untuk mencari bagaimana menggunakan API. 489 00:26:39,440 --> 00:26:41,950 Hal ini memungkinkan untuk benar-benar eksperimen mudah 490 00:26:41,950 --> 00:26:45,910 tanpa harus mengetik beberapa kode, dan kemudian compile. 491 00:26:45,910 --> 00:26:47,500 Anda tidak harus melakukan semua langkah-langkah. 492 00:26:47,500 --> 00:26:49,619 Anda hanya dapat menulis beberapa kode menjadi garis, 493 00:26:49,619 --> 00:26:52,410 dan kemudian mendapatkan umpan balik langsung pada apakah baris kode 494 00:26:52,410 --> 00:26:55,230 worked-- sangat berguna. 495 00:26:55,230 --> 00:26:59,760 >> Dan juga, hanya satu note-- teknis konsol JavaScript adalah contoh 496 00:26:59,760 --> 00:27:05,680 dari REPL-- jadi itu R-E-P-L, REPL, yang merupakan singkatan dari membaca, mengevaluasi, 497 00:27:05,680 --> 00:27:06,180 lingkaran cetak. 498 00:27:06,180 --> 00:27:09,100 499 00:27:09,100 --> 00:27:12,120 Anda akan mengetik beberapa hal di, itu akan membaca apa yang Anda ketik di, 500 00:27:12,120 --> 00:27:17,280 itu akan mengevaluasinya, dan itu akan mencetak output, dan kemudian itu akan mulai lagi. 501 00:27:17,280 --> 00:27:22,056 Yang memungkinkan Anda untuk cepat pergi lingkaran iterasi, yang benar-benar keren. 502 00:27:22,056 --> 00:27:25,150 503 00:27:25,150 --> 00:27:28,930 >> Saya kira terakhir nyata note-- ini adalah catatan terakhir yang sebenarnya, ya. 504 00:27:28,930 --> 00:27:30,780 Bagaimana kita benar-benar menggunakan JavaScript? 505 00:27:30,780 --> 00:27:34,040 Jadi pertama, kita dapat mengimpor menggunakan tag script 506 00:27:34,040 --> 00:27:39,500 di bagian atas atau bawah HTML file-- di mana saja dalam file HTML, 507 00:27:39,500 --> 00:27:40,440 sangat. 508 00:27:40,440 --> 00:27:47,390 Dan dalam tag script, ada dua sub-cara mengimpor JavaScript. 509 00:27:47,390 --> 00:27:51,370 Yang pertama adalah dengan memiliki File JavaScript terpisah 510 00:27:51,370 --> 00:27:58,010 yang kita mengimpor secara keseluruhan, atau dengan memiliki luas kode seperti script 511 00:27:58,010 --> 00:28:00,290 untuk memulai, dan kemudian Script backslash untuk mengakhiri. 512 00:28:00,290 --> 00:28:02,620 Dan kemudian kami hanya menulis JavaScript dalam file HTML. 513 00:28:02,620 --> 00:28:03,790 Mereka adalah dua cara. 514 00:28:03,790 --> 00:28:05,165 Anda tidak dapat memilikinya dalam HTML. 515 00:28:05,165 --> 00:28:06,502 516 00:28:06,502 --> 00:28:08,126 AUDIENCE: Apakah salah satu lebih baik dari yang lain? 517 00:28:08,126 --> 00:28:10,542 SAM GREEN: Pertanyaannya adalah, adalah salah satu lebih baik dari yang lain. 518 00:28:10,542 --> 00:28:18,306 Jadi, ya, sebagai praktek coding gaya, dan juga itu seperti praktek desain. 519 00:28:18,306 --> 00:28:20,180 Ada dua alasan mengapa mungkin lebih baik. 520 00:28:20,180 --> 00:28:23,934 Yang pertama adalah, itu membuat kode Anda banyak lebih mudah dibaca jika semua HTML Anda 521 00:28:23,934 --> 00:28:27,100 adalah di satu tempat, semua CSS Anda dalam tempat lain, semua Anda JavaScript 522 00:28:27,100 --> 00:28:28,420 adalah di tempat ketiga. 523 00:28:28,420 --> 00:28:28,920 Kanan? 524 00:28:28,920 --> 00:28:32,370 Saya pikir kita harus sudah berbicara tentang hal itu di sections-- seperti apa CSS-- 525 00:28:32,370 --> 00:28:35,220 bahwa is-- dan kelanjutannya sering di file lain. 526 00:28:35,220 --> 00:28:37,090 Jadi, serupa dari konsep di sini. 527 00:28:37,090 --> 00:28:42,410 Anda juga dapat membayangkan bahwa JavaScript akan digunakan kembali pada lebih dari satu 528 00:28:42,410 --> 00:28:47,350 Halaman HTML, atau mungkin banyak halaman HTML besar, 529 00:28:47,350 --> 00:28:49,340 dan memiliki yang JavaScript refactored menjadi satu 530 00:28:49,340 --> 00:28:51,950 mengajukan bahwa Anda dapat mengimpor menjadi lebih dari satu tempat 531 00:28:51,950 --> 00:28:54,570 memungkinkan kode menjadi cara yang lebih dipertahankan. 532 00:28:54,570 --> 00:28:57,930 Anda bisa membayangkan membuat satu mengubah ke JavaScript 533 00:28:57,930 --> 00:29:00,070 dan harus mengubahnya 100 file yang berbeda. 534 00:29:00,070 --> 00:29:04,070 Dan sebaliknya kita bisa mengubahnya dalam satu, yang merupakan cara yang lebih kuat. 535 00:29:04,070 --> 00:29:05,420 Apakah saya menjawab pertanyaan Anda? 536 00:29:05,420 --> 00:29:07,950 Keren. 537 00:29:07,950 --> 00:29:10,830 >> Kami juga dapat mengetik ke konsol, seperti yang telah kami sebutkan sebelumnya. 538 00:29:10,830 --> 00:29:15,070 Dan lagi, satu note-- lalu Web Audio dibangun di, 539 00:29:15,070 --> 00:29:16,978 Anda tidak perlu memuat apa-apa. 540 00:29:16,978 --> 00:29:17,478 Keren. 541 00:29:17,478 --> 00:29:20,519 Apakah ada pertanyaan, apakah Anda memiliki pertanyaan lagi tentang JavaScript, 542 00:29:20,519 --> 00:29:21,930 sebelum kita melanjutkan? 543 00:29:21,930 --> 00:29:24,286 >> AUDIENCE: [tidak terdengar] 544 00:29:24,286 --> 00:29:25,410 SAM GREEN: Baiklah, keren. 545 00:29:25,410 --> 00:29:27,200 Jadi sekarang dia akan berbicara tentang API. 546 00:29:27,200 --> 00:29:28,490 >> Hugh Zabriskie: Cool. 547 00:29:28,490 --> 00:29:28,990 Terima kasih, Sam. 548 00:29:28,990 --> 00:29:30,184 >> SAM GREEN: Tentu. 549 00:29:30,184 --> 00:29:32,600 Hugh Zabriskie: Awesome, sehingga kita akan bergerak dari JavaScript. 550 00:29:32,600 --> 00:29:35,350 Jadi kita sudah bicara tentang beberapa esensi JavaScript, 551 00:29:35,350 --> 00:29:41,105 dan mereka adalah variabel, fungsi, benda, fungsi sebagai variabel, 552 00:29:41,105 --> 00:29:41,980 pemuatan asynchronous. 553 00:29:41,980 --> 00:29:46,100 Ini semua adalah hal yang Anda akan lihat ketika Anda menggunakan Web Audio. 554 00:29:46,100 --> 00:29:49,230 Jadi kami hanya akan berbicara tentang hal pertama pada tingkat tinggi. 555 00:29:49,230 --> 00:29:52,120 >> Ini adalah API, jadi itu sesuatu yang dibangun, seperti kata Sam, 556 00:29:52,120 --> 00:29:57,010 tepat ke JavaScript yang Anda gunakan di konsol. 557 00:29:57,010 --> 00:30:01,020 Dan itu sebenarnya seperti C ++ kode yang benar-benar dibangun ke Chrome 558 00:30:01,020 --> 00:30:04,470 dan Firefox, dan semua browser ini. 559 00:30:04,470 --> 00:30:07,060 Jadi gagasan utama dengan Web Audio adalah bahwa Anda memiliki 560 00:30:07,060 --> 00:30:09,440 jenis pipa audio, kan? 561 00:30:09,440 --> 00:30:13,670 Jadi data audio Anda datang dalam dalam beberapa bentuk. 562 00:30:13,670 --> 00:30:16,690 >> Ada jenis tiga forms-- utama Anda memiliki osilator, yang 563 00:30:16,690 --> 00:30:21,340 menciptakan gelombang sinus, gelombang kosinus, kita akan melihat bagaimana yang bekerja. 564 00:30:21,340 --> 00:30:23,890 Satu lagi yang sangat umum, tentu saja, adalah MP3. 565 00:30:23,890 --> 00:30:25,810 Jadi mungkin Anda mulai dengan lagu, dan kemudian Anda 566 00:30:25,810 --> 00:30:28,320 ingin melakukan penyaringan untuk itu dan output 567 00:30:28,320 --> 00:30:30,605 itu-- yang bisa menjadi sumber yang mungkin. 568 00:30:30,605 --> 00:30:32,480 Dan kemudian benar-benar keren satu adalah mikrofon. 569 00:30:32,480 --> 00:30:37,230 Sehingga Anda dapat menggunakan beberapa sangat panggilan dasar dalam JavaScript 570 00:30:37,230 --> 00:30:39,440 untuk mendapatkan akses ke mikrofon, dan jadi jika Anda 571 00:30:39,440 --> 00:30:42,870 ingin membuat sebuah aplikasi seperti detektor lapangan, 572 00:30:42,870 --> 00:30:45,290 misalnya, yang mengambil di suara Anda dan angka keluar 573 00:30:45,290 --> 00:30:47,740 yang pitch-- cara yang sangat mudah untuk itu. 574 00:30:47,740 --> 00:30:50,730 Anda dapat hanya jenis membacanya di, mencari tahu frekuensi, 575 00:30:50,730 --> 00:30:52,250 dan kemudian output nomor. 576 00:30:52,250 --> 00:30:56,080 Jadi kita akan melihat bagaimana yang bekerja, juga. 577 00:30:56,080 --> 00:30:59,430 >> Tujuan dasarnya adalah dimana data audio output. 578 00:30:59,430 --> 00:31:02,890 Jadi secara umum, itu seperti speaker laptop Anda. 579 00:31:02,890 --> 00:31:05,610 Pilihan lain adalah seperti a ScriptProcessorNode-- 580 00:31:05,610 --> 00:31:07,990 kita akan sampai ke node dalam second-- tetapi pada dasarnya, 581 00:31:07,990 --> 00:31:11,939 baik Anda meletakkan suara keluar melalui komputer Anda melalui speaker, 582 00:31:11,939 --> 00:31:14,730 atau Anda jenis rekaman itu, sehingga Anda menyimpannya sebagai data audio. 583 00:31:14,730 --> 00:31:18,980 Jadi mungkin jika seseorang menciptakan musik di app dan kemudian 584 00:31:18,980 --> 00:31:22,410 Anda ingin merekam itu dan mungkin seperti ekspor ke SoundCloud, untuk example-- 585 00:31:22,410 --> 00:31:25,281 yang akan menjadi salah satu cara untuk melakukan itu. 586 00:31:25,281 --> 00:31:27,030 Semua hal menyenangkan, yang akan kita bicarakan, 587 00:31:27,030 --> 00:31:29,950 terjadi antara dua titik tersebut, di mana kita memuat dalam musik 588 00:31:29,950 --> 00:31:31,410 dan kemudian output. 589 00:31:31,410 --> 00:31:36,660 >> Jadi aku akan berbicara tentang lima tahap produksi audio dalam satu detik. 590 00:31:36,660 --> 00:31:38,950 Kami memiliki hal ini disebut sebuah AudioContext, yang 591 00:31:38,950 --> 00:31:41,580 adalah wrapper kecil ini kita lihat di sini. 592 00:31:41,580 --> 00:31:49,980 Pada dasarnya apa yang AudioContext is-- jika kita pergi ke JavaScript konsol sekarang, 593 00:31:49,980 --> 00:31:52,740 kita dapat membuat satu sekarang. 594 00:31:52,740 --> 00:31:54,040 Hanya sebuah contoh dari REPL, kan? 595 00:31:54,040 --> 00:31:57,880 Kami membaca, mengevaluasi, dan mencetak. 596 00:31:57,880 --> 00:32:00,260 >> AudioContext adalah negara global. 597 00:32:00,260 --> 00:32:05,500 Ini struct, itu sebuah objek di sini, dan itu membuat informasi 598 00:32:05,500 --> 00:32:09,960 tentang hal-hal yang terjadi pada layar yang berkaitan dengan audio. 599 00:32:09,960 --> 00:32:15,220 Salah satu contoh adalah waktu saat ini. 600 00:32:15,220 --> 00:32:18,910 Ini memberitahu Anda nomor detik, sangat tepat, 601 00:32:18,910 --> 00:32:20,890 sejak halaman web dimuat. 602 00:32:20,890 --> 00:32:24,110 Jadi ini adalah benar-benar berguna sedikit properti yang dapat Anda gunakan. 603 00:32:24,110 --> 00:32:27,898 Ini baca only-- saya pikir benar-benar Anda dapat mencoba untuk mengatur nilai. 604 00:32:27,898 --> 00:32:29,856 Ini akan memberitahu Anda mengaturnya, dan kemudian jika Anda mencetaknya 605 00:32:29,856 --> 00:32:31,439 again-- itu tidak benar-benar cukup bekerja. 606 00:32:31,439 --> 00:32:34,472 Jadi ada hanya-baca properti di JavaScript. 607 00:32:34,472 --> 00:32:36,430 Ini benar-benar berguna jika Anda jenis sinkronisasi 608 00:32:36,430 --> 00:32:38,610 banyak yang berbeda informasi, ketika Anda 609 00:32:38,610 --> 00:32:41,280 jenis bermain suara yang berbeda. 610 00:32:41,280 --> 00:32:43,630 >> Lain yang benar-benar berguna adalah tujuan konteks. 611 00:32:43,630 --> 00:32:46,587 612 00:32:46,587 --> 00:32:49,670 Jelas, jika Anda tertarik, menjadi mencoba ini di konsol kanan Anda sendiri 613 00:32:49,670 --> 00:32:50,980 sekarang. 614 00:32:50,980 --> 00:32:53,150 Jadi ini adalah AudioDestinationNode. 615 00:32:53,150 --> 00:32:56,480 Pada dasarnya apa ini mengatakan adalah, di mana output akan? 616 00:32:56,480 --> 00:32:59,590 Jadi ada dua pilihan nyata di sini. 617 00:32:59,590 --> 00:33:01,940 Biasanya default hanya speaker Anda, 618 00:33:01,940 --> 00:33:05,150 sehingga AudioDestinationNode pada dasarnya hanya mengatakan 619 00:33:05,150 --> 00:33:09,240 ada nol output untuk suara datang, dikirim ke speaker. 620 00:33:09,240 --> 00:33:12,050 Jadi secara umum, Anda tidak harus bermain dengan itu. 621 00:33:12,050 --> 00:33:15,720 Jika Anda tertarik benar-benar menggunakan yang ScriptProcessorNode untuk merekam, 622 00:33:15,720 --> 00:33:16,990 pasti menembak saya email kemudian karena itu 623 00:33:16,990 --> 00:33:18,330 sedikit lebih rumit. 624 00:33:18,330 --> 00:33:21,590 Namun umumnya, Anda hanya jenis keluaran suara dalam beberapa bentuk. 625 00:33:21,590 --> 00:33:24,347 Jadi keren, kami akan melompat kembali ke sini. 626 00:33:24,347 --> 00:33:25,180 AUDIENCE: Maaf. 627 00:33:25,180 --> 00:33:26,054 Hugh Zabriskie: Ya. 628 00:33:26,054 --> 00:33:28,770 AUDIENCE: Saya tahu Anda mengatakan untuk berbicara untuk nanti tentang rekaman. 629 00:33:28,770 --> 00:33:31,550 Anda dapat antarmuka bahwa dengan Pro Tools? 630 00:33:31,550 --> 00:33:33,120 >> Hugh Zabriskie: Dengan Pro Tools? 631 00:33:33,120 --> 00:33:35,260 Mari kita lihat. 632 00:33:35,260 --> 00:33:37,220 Saya rasa tidak. 633 00:33:37,220 --> 00:33:41,670 Jadi akan antara klien, yang merupakan JavaScript 634 00:33:41,670 --> 00:33:44,310 konsol, dan Anda yang sebenarnya komputer, umumnya 635 00:33:44,310 --> 00:33:46,490 sesuatu yang baik dari terlarang, jika Anda 636 00:33:46,490 --> 00:33:52,320 akan, jenis dengan sifat the-- itu semacam hal desain, 637 00:33:52,320 --> 00:33:57,770 tetapi Anda mencoba untuk menjaga browser terpisah dari komputer yang sebenarnya pengguna. 638 00:33:57,770 --> 00:34:02,310 Umumnya, satu-satunya hal yang Anda dapat Akses adalah mikrofon atau kamera. 639 00:34:02,310 --> 00:34:04,730 Anda tidak dapat, saya tidak berpikir, menggunakan Pro Tools. 640 00:34:04,730 --> 00:34:07,480 Namun, jika Anda buat trek di Pro Tools, 641 00:34:07,480 --> 00:34:12,710 diekspor itu, Anda bisa memuat bahwa di sini, menyaring, misalnya, 642 00:34:12,710 --> 00:34:16,820 proses itu, dan mencatat bahwa menjadi Audio Destination-- atau, no-- sebuah Sphere 643 00:34:16,820 --> 00:34:17,870 Processor Node. 644 00:34:17,870 --> 00:34:20,730 Dan kemudian dari sana, Anda bisa ekspor yang ke SoundCloud, Anda 645 00:34:20,730 --> 00:34:25,320 bisa kirim dalam email, atau apa pun yang Anda suka dari sana. 646 00:34:25,320 --> 00:34:31,159 >> Tapi ada jenis penghalang sedikit antara membuat musik di komputer Anda 647 00:34:31,159 --> 00:34:33,050 dan membuat musik online. 648 00:34:33,050 --> 00:34:37,940 >> SAM GREEN: Dan itu tidak unik untuk API ini. 649 00:34:37,940 --> 00:34:44,060 Ini adalah fitur keamanan Chrome, dan Saya pikir setiap browser modern lainnya. 650 00:34:44,060 --> 00:34:45,860 Browser mandiri. 651 00:34:45,860 --> 00:34:50,980 Jadi misalnya, halaman web tidak bisa menggunakan JavaScript untuk mengubah suara 652 00:34:50,980 --> 00:34:54,190 pada pada speaker Anda, misalnya. 653 00:34:54,190 --> 00:34:58,120 Atau tidak dapat mematikan komputer Anda. 654 00:34:58,120 --> 00:35:01,530 Dan tidak ada titik peralihan antara dua hal, benar, 655 00:35:01,530 --> 00:35:05,960 sehingga baik Anda memiliki abstraksi lengkap, 656 00:35:05,960 --> 00:35:10,050 atau Anda membuka lubang keamanan membiarkan 657 00:35:10,050 --> 00:35:14,440 programmer dengan niat buruk melakukan apapun yang mereka inginkan dengan laptop Anda. 658 00:35:14,440 --> 00:35:18,104 Dan itulah mengapa Chrome adalah mandiri. 659 00:35:18,104 --> 00:35:19,310 >> Hugh Zabriskie: Ya. 660 00:35:19,310 --> 00:35:20,840 Apakah itu masuk akal? 661 00:35:20,840 --> 00:35:21,369 Keren keren. 662 00:35:21,369 --> 00:35:23,160 Aku hanya akan menunjukkan salah satu contoh. 663 00:35:23,160 --> 00:35:25,118 Hal ini cukup banyak seperti sejauh yang Anda bisa, dalam hal 664 00:35:25,118 --> 00:35:26,950 mengakses komputer pengguna. 665 00:35:26,950 --> 00:35:30,180 Jika Anda memiliki keyboard USB terpasang, Anda dapat menggunakan sesuatu yang disebut Web 666 00:35:30,180 --> 00:35:32,180 MIDI API, yang kita tidak akan benar-benar berbicara tentang di sini, 667 00:35:32,180 --> 00:35:36,330 tapi ini adalah API lain yang dibangun ke setidaknya Chrome-- lagi, 668 00:35:36,330 --> 00:35:41,570 ini adalah mengapa kita mencintai Chrome-- Saya pikir Firefox atau Safari, 669 00:35:41,570 --> 00:35:44,300 ini merupakan hal yang mudah untuk browser yang berbeda memiliki google-- 670 00:35:44,300 --> 00:35:46,917 dukungan yang berbeda yang API mereka telah menerapkan. 671 00:35:46,917 --> 00:35:49,875 Tetapi jika Anda ingin pasang di keyboard dan bekerja dengan informasi itu, 672 00:35:49,875 --> 00:35:52,850 jenis mengirim keyboard informasi ke komputer 673 00:35:52,850 --> 00:35:57,620 dan kemudian menggunakan online yang, API ini adalah di mana Anda akan bekerja itu. 674 00:35:57,620 --> 00:35:58,150 >> Keren. 675 00:35:58,150 --> 00:35:58,710 OKE. 676 00:35:58,710 --> 00:36:01,320 Jadi, cepat pindah di sini. 677 00:36:01,320 --> 00:36:03,310 Bagaimana kita lakukan pada waktu? 678 00:36:03,310 --> 00:36:04,210 >> SPEAKER 1: Sekitar 15. 679 00:36:04,210 --> 00:36:05,543 >> Hugh Zabriskie: 15 menit lagi? 680 00:36:05,543 --> 00:36:06,160 OK keren. 681 00:36:06,160 --> 00:36:08,170 Jadi kita akan berlomba depan di sini. 682 00:36:08,170 --> 00:36:13,500 >> Jadi pada dasarnya, titik utama berpikir ini sebagai pipa 683 00:36:13,500 --> 00:36:16,430 adalah bahwa setiap langkah dalam pipa adalah serangkaian node audio. 684 00:36:16,430 --> 00:36:19,284 685 00:36:19,284 --> 00:36:20,950 Sumber kami, katakanlah, adalah sebuah osilator. 686 00:36:20,950 --> 00:36:23,380 Kita perlu membuat simpul osilator. 687 00:36:23,380 --> 00:36:25,690 Dan itu hanya jenis dari function-- kecil 688 00:36:25,690 --> 00:36:30,460 dan mereka semua didasarkan keluar dari konteks audio yang di sini. 689 00:36:30,460 --> 00:36:32,885 >> AUDIENCE: Ketika kata osilator, artinya 690 00:36:32,885 --> 00:36:37,250 itu benar-benar harfiah pergi dari dua kutub yang berbeda bolak-balik? 691 00:36:37,250 --> 00:36:41,170 >> Hugh Zabriskie: Tidak, itu seperti representasi digital. 692 00:36:41,170 --> 00:36:42,740 Ini benar-benar dilaksanakan di C ++. 693 00:36:42,740 --> 00:36:46,460 Aku benar-benar tidak tahu spesifikasi bagaimana hal itu benar-benar diterapkan, 694 00:36:46,460 --> 00:36:48,500 tapi semua ini bekerja sebagai data biner. 695 00:36:48,500 --> 00:36:51,260 696 00:36:51,260 --> 00:36:52,370 Sebenarnya, ya. 697 00:36:52,370 --> 00:36:53,950 Yang akan berkata, aku bisa sebenarnya, jika Anda tertarik, 698 00:36:53,950 --> 00:36:56,533 Aku bisa mengirimkan lebih sedikit informasi tentang bagaimana bentuk gelombang 699 00:36:56,533 --> 00:37:00,181 disimpan memiliki format digital. 700 00:37:00,181 --> 00:37:00,680 OK keren. 701 00:37:00,680 --> 00:37:03,120 >> Jadi kita menghasilkan nada seperti sinus gelombang atau sesuatu seperti itu, mungkin 702 00:37:03,120 --> 00:37:04,190 440 Hertz. 703 00:37:04,190 --> 00:37:05,830 Kami menciptakan sebuah osilator. 704 00:37:05,830 --> 00:37:09,180 Jika kita ingin mengatur volume, kita menghubungkan apa pun untuk GainNode sebuah, 705 00:37:09,180 --> 00:37:12,500 yang bisa kita lakukan dengan .creategain. 706 00:37:12,500 --> 00:37:14,250 Yang menetapkan volume Anda. 707 00:37:14,250 --> 00:37:17,820 Anda dapat melewati itu ke setiap yang lain options-- baik, 708 00:37:17,820 --> 00:37:20,300 sehingga sumber penyangga audio yang simpul adalah di mana Anda mungkin 709 00:37:20,300 --> 00:37:23,660 menyimpan MP3 yang telah Anda dimuat di. 710 00:37:23,660 --> 00:37:27,670 >> Biquad filter untuk menyaring jika Anda ingin mengambil semua dasar keluar 711 00:37:27,670 --> 00:37:29,630 dari lagu, atau sesuatu seperti itu. 712 00:37:29,630 --> 00:37:32,450 Allah melarang Anda ingin mengambil dasar dari sebuah lagu. 713 00:37:32,450 --> 00:37:36,980 Dan AudioDestination node, sekali lagi, seperti di mana finalisasi kita. 714 00:37:36,980 --> 00:37:39,980 Jika Anda pernah tertarik melihat semua kemungkinan opsi yang berbeda, 715 00:37:39,980 --> 00:37:45,190 hanya pergi ke tab dan membiarkan auto-lengkap datang. 716 00:37:45,190 --> 00:37:48,690 Dan jika Anda buat, Anda akan melihat semua hal yang berbeda yang dapat Anda buat. 717 00:37:48,690 --> 00:37:50,398 Anda dapat membuat dinamis prosesor naskah, 718 00:37:50,398 --> 00:37:52,940 Saya bahkan tidak tahu apa yang adalah, untuk mencampur saluran merger 719 00:37:52,940 --> 00:37:55,930 dan splitter saluran dan semua itu. 720 00:37:55,930 --> 00:37:56,430 Keren. 721 00:37:56,430 --> 00:37:59,560 722 00:37:59,560 --> 00:38:01,390 >> Jadi ini hanya sebuah contoh pipa. 723 00:38:01,390 --> 00:38:03,580 Jadi kita memiliki tiga sumber datang. 724 00:38:03,580 --> 00:38:06,830 Mungkin ini bentuk gelombang, mungkin ini adalah MP3. 725 00:38:06,830 --> 00:38:08,740 Salah satu yang akan melalui filter, satu sama lain 726 00:38:08,740 --> 00:38:12,404 mendapatkan terdistorsi lain panning seseorang kiri dan kanan. 727 00:38:12,404 --> 00:38:15,320 Anda dapat melakukan segala macam hal dan mereka semua bercampur di sekitar bersama-sama, 728 00:38:15,320 --> 00:38:18,880 dan kemudian keluar datang audio pada akhir, sebagai tujuan. 729 00:38:18,880 --> 00:38:22,720 Ini adalah contoh dari apa yang lebih rumit Web kode Audio terlihat seperti. 730 00:38:22,720 --> 00:38:26,720 Anda sedang menciptakan semua ini objek yang berbeda tepat di sini- 731 00:38:26,720 --> 00:38:27,706 Saya tidak yakin ini. 732 00:38:27,706 --> 00:38:29,120 Tidak, itu tidak memperbesar. 733 00:38:29,120 --> 00:38:29,620 OKE. 734 00:38:29,620 --> 00:38:31,257 >> SAM GREEN: Anda melakukan kontrol, Gulir-Up. 735 00:38:31,257 --> 00:38:32,590 Hugh Zabriskie: Kontrol Scroll-- 736 00:38:32,590 --> 00:38:33,000 SAM GREEN: Tidak, tidak. 737 00:38:33,000 --> 00:38:33,500 Kontrol-- 738 00:38:33,500 --> 00:38:36,540 739 00:38:36,540 --> 00:38:38,140 >> Hugh Zabriskie: Oh, Control, Gulir? 740 00:38:38,140 --> 00:38:38,780 Oh, Gotcha. 741 00:38:38,780 --> 00:38:41,480 Ya. 742 00:38:41,480 --> 00:38:42,240 Wow, nggak, nggak. 743 00:38:42,240 --> 00:38:42,740 OKE. 744 00:38:42,740 --> 00:38:46,090 Saya tidak akan melakukan itu. 745 00:38:46,090 --> 00:38:48,300 >> Jadi ya, dalam hal ini pertama Bagian di sini, Anda melihat 746 00:38:48,300 --> 00:38:52,720 kita menciptakan semua ini berbeda node dari konteks. 747 00:38:52,720 --> 00:38:54,980 Kami hanya piecing mereka bersama-sama di bagian kedua 748 00:38:54,980 --> 00:38:56,980 oleh fungsi ini disebut Connect. 749 00:38:56,980 --> 00:38:58,830 Itu benar-benar kunci fungsi dalam Web Audio. 750 00:38:58,830 --> 00:39:01,930 Ini hanya berarti setelah Anda melakukan sesuatu dengan suara dalam satu simpul, 751 00:39:01,930 --> 00:39:03,705 menyebarkannya ke node berikutnya. 752 00:39:03,705 --> 00:39:05,830 Jadi kita memiliki sumber, menghubungkan ke analyzer, 753 00:39:05,830 --> 00:39:09,140 analyzer melakukan sesuatu dengan itu, ia pergi ke distorsi, dan sebagainya, 754 00:39:09,140 --> 00:39:12,725 dan untuk tujuan di kanan bawah sini. 755 00:39:12,725 --> 00:39:13,225 Keren. 756 00:39:13,225 --> 00:39:14,640 OK, jadi kami akan terus bergerak pada. 757 00:39:14,640 --> 00:39:17,180 >> Pipeline-- lagi, ini adalah pipa yang paling umum, 758 00:39:17,180 --> 00:39:21,300 jadi kita berbicara tentang semua hal ini seperti distorsi, panning, semua hal ini. 759 00:39:21,300 --> 00:39:24,280 Jika Anda benar-benar tertarik dalam menggunakan hal Pro Tools, 760 00:39:24,280 --> 00:39:25,820 mereka mungkin menarik bagi Anda. 761 00:39:25,820 --> 00:39:27,740 Jika tidak, mungkin Anda hanya ingin memutar suara, 762 00:39:27,740 --> 00:39:29,990 atau mungkin Anda hanya ingin mengatur volume suara. 763 00:39:29,990 --> 00:39:35,270 Mereka adalah dua jenis yang paling umum pipa produksi audio. 764 00:39:35,270 --> 00:39:38,640 >> Sekali lagi, cara Anda dapat mengambil di sebagai oscillator-- begitu, mari kita 765 00:39:38,640 --> 00:39:42,460 melakukan demo itu di sini. 766 00:39:42,460 --> 00:39:47,090 767 00:39:47,090 --> 00:39:52,225 Jadi kita akan membuat konteks audio sederhana di sini, 768 00:39:52,225 --> 00:39:54,350 dan dari bahwa kita akan untuk membuat osilator kami. 769 00:39:54,350 --> 00:39:58,620 Sehingga, sekali lagi, kami hanya akan menelepon Buat Oscillator. 770 00:39:58,620 --> 00:40:07,030 Kita akan mengatur frekuensi pada itu, 440 Hertz, favorit semua orang. 771 00:40:07,030 --> 00:40:13,290 Kemudian kita menghubungkan bahwa untuk tujuan point-- yang pembicara, sehingga 772 00:40:13,290 --> 00:40:15,750 tujuan konteks. 773 00:40:15,750 --> 00:40:21,400 Akhirnya, kami hanya mengatakan, mulai nol detik dari sekarang, dan kita telah terdengar? 774 00:40:21,400 --> 00:40:22,400 >> [Berdering] 775 00:40:22,400 --> 00:40:24,980 >> Hugh Zabriskie: Di sini kita pergi. 776 00:40:24,980 --> 00:40:25,940 Itu hanya gelombang sinus. 777 00:40:25,940 --> 00:40:26,440 OK keren. 778 00:40:26,440 --> 00:40:28,274 Dan kemudian kita akan menghentikan itu. 779 00:40:28,274 --> 00:40:30,520 >> AUDIENCE: Mana umpan balik yang datang dari? 780 00:40:30,520 --> 00:40:31,250 >> Hugh Zabriskie: Umpan balik? 781 00:40:31,250 --> 00:40:32,458 Oh, mungkin mikrofon kami. 782 00:40:32,458 --> 00:40:34,221 783 00:40:34,221 --> 00:40:35,470 Jadi ya, itu bagaimana Anda melakukannya. 784 00:40:35,470 --> 00:40:37,261 Dan sebenarnya, jika aku punya terus berjalan, Anda 785 00:40:37,261 --> 00:40:39,540 bisa memiliki frekuensi nilai seperti itu berjalan, 786 00:40:39,540 --> 00:40:43,320 jadi itu hal yang menyenangkan untuk bermain-main. 787 00:40:43,320 --> 00:40:44,930 Keren. 788 00:40:44,930 --> 00:40:46,600 Itu selalu salah satu yang indah untuk menyajikan. 789 00:40:46,600 --> 00:40:48,792 >> SAM GREEN: Kami tidak berpikir tentang itu, apakah kita? 790 00:40:48,792 --> 00:40:50,500 Hugh Zabriskie: Ya, itu adalah salah satu jahat. 791 00:40:50,500 --> 00:40:53,249 Jadi, penyangga loading-- saya akan menunjukkan contoh yang di akhir. 792 00:40:53,249 --> 00:40:55,090 Itu loading MP3. 793 00:40:55,090 --> 00:40:58,880 Dan mikrofon, Anda menggunakan hanya fungsi disebut Navigator.getUserMedia () 794 00:40:58,880 --> 00:41:03,240 untuk meminta akses ke pengguna mikrofon untuk informasi tersebut. 795 00:41:03,240 --> 00:41:05,610 >> Berikut ini penyaringan, aku akan terus bergerak dari ini. 796 00:41:05,610 --> 00:41:08,600 Ini adalah tingkat yang cukup tinggi, tapi filter hanya memungkinkan Anda untuk 797 00:41:08,600 --> 00:41:16,154 >> [Bip] 798 00:41:16,154 --> 00:41:18,320 Penyaringan juga memungkinkan Anda untuk membuat hal-hal seperti pink 799 00:41:18,320 --> 00:41:20,050 kebisingan, kebisingan coklat, white noise. 800 00:41:20,050 --> 00:41:24,330 Jika Anda ingin membuat kebisingan murni, yang beberapa orang suka main-main dengan, 801 00:41:24,330 --> 00:41:27,490 Anda dapat menggunakan Web Audio penyaringan untuk melakukan itu. 802 00:41:27,490 --> 00:41:30,039 >> Audio Panning-- jadi bayangkan jika Anda sedang menulis sebuah permainan 803 00:41:30,039 --> 00:41:32,330 dan Anda ingin suara untuk terdengar seperti itu datang, seperti, 804 00:41:32,330 --> 00:41:36,090 menembak di layar, Anda dapat menggunakan panning audio 805 00:41:36,090 --> 00:41:39,770 untuk membuat semacam ini kerucut, yang like-- itu cukup Mathy, 806 00:41:39,770 --> 00:41:41,850 tapi itu sebenarnya benar-benar keren jika Anda mendapatkannya bekerja, 807 00:41:41,850 --> 00:41:44,500 dan ada beberapa yang baik tutorial di atasnya saya dapat mengirimkan. 808 00:41:44,500 --> 00:41:46,400 Pada dasarnya, Anda dapat jenis dari membuat suara 809 00:41:46,400 --> 00:41:50,480 dari sesuatu yang terjadi dengan cara 3D. 810 00:41:50,480 --> 00:41:57,350 Dan jika Anda memiliki minat DJ, Anda bisa mulai pencampuran dan lintas memudar lagu. 811 00:41:57,350 --> 00:42:01,260 >> Ini hanya beberapa yang sangat dasar kode, pada dasarnya apa yang saya lakukan sebelumnya. 812 00:42:01,260 --> 00:42:06,140 Ini menetapkan volume osilator, jadi kami membuat osilator kami 813 00:42:06,140 --> 00:42:07,380 yang menciptakan gelombang. 814 00:42:07,380 --> 00:42:09,940 Kami membuat GainNode kami, mengatur frekuensi kami, 815 00:42:09,940 --> 00:42:14,170 dan kemudian menghubungkan osilator ke GainNode, yang kemudian pada dasarnya berubah 816 00:42:14,170 --> 00:42:16,760 berapa banyak sinyal diizinkan melalui. 817 00:42:16,760 --> 00:42:20,467 Tapi sungguh, itu digital hal, sehingga lebih hanya-- ya. 818 00:42:20,467 --> 00:42:23,550 Itu bukan apa yang sebenarnya terjadi, tapi itulah yang terjadi dalam kehidupan nyata 819 00:42:23,550 --> 00:42:24,393 dengan gain. 820 00:42:24,393 --> 00:42:27,258 >> AUDIENCE: --quantization parameter volume yang? 821 00:42:27,258 --> 00:42:28,174 Hugh Zabriskie: Maaf? 822 00:42:28,174 --> 00:42:30,360 AUDIENCE: Apakah ini parameter volume yang terkuantisasi? 823 00:42:30,360 --> 00:42:31,840 Hugh Zabriskie: Ya. 824 00:42:31,840 --> 00:42:34,620 Dan ini adalah salah satu hal yang saya benar-benar kekurangan pada pengetahuan saya, 825 00:42:34,620 --> 00:42:38,010 bagaimana keuntungan bekerja pada tingkat digital. 826 00:42:38,010 --> 00:42:40,140 Aku tahu dengan sebenarnya sinyal, itu pada dasarnya 827 00:42:40,140 --> 00:42:45,120 mengendalikan berapa banyak Anda memperkuat sinyal. 828 00:42:45,120 --> 00:42:47,017 Jadi, ya. 829 00:42:47,017 --> 00:42:50,100 Saya akan mengirimkan informasi lebih lanjut tentang itu, karena aku akan penasaran sebenarnya 830 00:42:50,100 --> 00:42:51,099 tahu lebih banyak tentang itu. 831 00:42:51,099 --> 00:42:54,090 Tapi pada dasarnya parameter adalah, salah satu adalah fold-- yang 832 00:42:54,090 --> 00:42:59,690 yang signal-- keras dan nol ada sinyal, atau Anda tidak akan mendengar suara apapun. 833 00:42:59,690 --> 00:43:03,150 Kami akan melewatkan waktu demo untuk karena itu pada dasarnya apa yang saya lakukan sebelumnya. 834 00:43:03,150 --> 00:43:07,630 Dan lagi, Context.Destination yang adalah node tujuan audio. 835 00:43:07,630 --> 00:43:08,360 Mengagumkan, OK. 836 00:43:08,360 --> 00:43:10,470 >> Jadi aku akan melakukan cepat dua demo. 837 00:43:10,470 --> 00:43:11,760 Bagaimana kita lakukan pada waktu? 838 00:43:11,760 --> 00:43:12,640 >> SPEAKER 1: Sekitar 10 menit. 839 00:43:12,640 --> 00:43:13,130 >> Hugh Zabriskie: 10 menit? 840 00:43:13,130 --> 00:43:13,630 Besar! 841 00:43:13,630 --> 00:43:14,320 Mengagumkan. 842 00:43:14,320 --> 00:43:19,010 >> Jadi yang pertama aku akan jangan, itu disebut My Song Favorit. 843 00:43:19,010 --> 00:43:22,410 Jadi ini hanya sedikit HTML JavaScript. 844 00:43:22,410 --> 00:43:25,510 Kita akan memiliki dua tombol pada halaman memutar lagu favorit saya 845 00:43:25,510 --> 00:43:29,192 dan menghentikan lagu favorit saya. 846 00:43:29,192 --> 00:43:30,180 Aku akan mengubah ini. 847 00:43:30,180 --> 00:43:32,110 >> AUDIENCE: Tutup mikrofon Anda. 848 00:43:32,110 --> 00:43:33,430 >> Hugh Zabriskie: Ya. 849 00:43:33,430 --> 00:43:36,300 Dan aku sudah dimuat di sini script yang basically-- 850 00:43:36,300 --> 00:43:38,520 dan ini benar-benar berguna untuk loading MP3, 851 00:43:38,520 --> 00:43:41,820 jadi ini hanya membuat memuat MP3 cara yang lebih cepat. 852 00:43:41,820 --> 00:43:44,180 Itu pada dasarnya hanya pembungkus. 853 00:43:44,180 --> 00:43:48,737 Itu hanya membuat proses memuat di MP3 jauh lebih cepat, 854 00:43:48,737 --> 00:43:51,570 jika Anda menggunakan permintaan HTTP, jenis seperti apa yang kami lakukan 855 00:43:51,570 --> 00:43:53,950 pada bagian saat ini ditetapkan dengan Server. 856 00:43:53,950 --> 00:43:55,950 Ini benar-benar jelek, Anda tidak ingin melakukannya. 857 00:43:55,950 --> 00:44:04,110 >> Jadi orang ini, Boris Menengah Umum, menulis benar-benar alat kecil yang berguna disebut BufferLoader. 858 00:44:04,110 --> 00:44:08,780 Semua Anda lakukan adalah hanya lulus dengan konteks, Anda lulus list-- sebuah 859 00:44:08,780 --> 00:44:11,327 atau, ya, itu daftar di JavaScript? 860 00:44:11,327 --> 00:44:12,160 SAM GREEN: Sebuah array. 861 00:44:12,160 --> 00:44:14,201 Hugh Zabriskie: Oh, itu adalah array, itu benar. 862 00:44:14,201 --> 00:44:18,660 Ini sebuah array dari jalur untuk file yang berbeda. 863 00:44:18,660 --> 00:44:21,990 Dan kemudian Anda lulus fungsi. 864 00:44:21,990 --> 00:44:25,530 Ini adalah callback kita bicarakan tentang dengan asynchronous memuat. 865 00:44:25,530 --> 00:44:28,720 Yang akan dipanggil sekali file dimuat. 866 00:44:28,720 --> 00:44:33,780 Dan fungsi yang yang disebut ketika file ini dimuat mengambil sebagai perimeter sebuah 867 00:44:33,780 --> 00:44:35,840 array buffer dimuat. 868 00:44:35,840 --> 00:44:37,990 Jadi yang terjadi di sini. 869 00:44:37,990 --> 00:44:41,180 Pada dasarnya, BufferList adalah akan menjadi salah satu value-- 870 00:44:41,180 --> 00:44:46,380 atau itu akan menjadi array panjang satu, yang memiliki di dalam indeks 871 00:44:46,380 --> 00:44:51,320 nol seluruh file dimuat dari MP3. 872 00:44:51,320 --> 00:44:53,320 Jadi apa yang saya lakukan ketika saya selesai loading, saya hanya 873 00:44:53,320 --> 00:44:57,430 menciptakan sumber penyangga, yang merupakan sumber penyangga simpul audio. 874 00:44:57,430 --> 00:45:03,410 Langkah berikutnya adalah saya memuat di source.buffer sebagai penyangga dimuat penuh 875 00:45:03,410 --> 00:45:06,740 dari BufferList-- itu banyak buffers-- 876 00:45:06,740 --> 00:45:10,255 dan kemudian Anda menghubungkan audio yang penyangga ke tujuan. 877 00:45:10,255 --> 00:45:12,380 Jadi apa yang akan lakukan hanya hanya menempatkan MP3 878 00:45:12,380 --> 00:45:15,260 langsung melalui ke output, dan mulai segera 879 00:45:15,260 --> 00:45:18,010 setelah mendapatkan panggilan ini. 880 00:45:18,010 --> 00:45:21,660 >> Keren, jadi mari kita lihat ini terjadi dalam tindakan. 881 00:45:21,660 --> 00:45:24,490 Saya [tidak terdengar] di sini, mari kita lihat. 882 00:45:24,490 --> 00:45:26,430 Jadi aku hanya akan mulai server dasar. 883 00:45:26,430 --> 00:45:28,660 Itu sesuatu yang Yang perlu Anda lakukan jika Anda 884 00:45:28,660 --> 00:45:32,490 membuat permintaan untuk loading file. 885 00:45:32,490 --> 00:45:34,140 Aku akan memulai server dasar. 886 00:45:34,140 --> 00:45:38,200 Ini pada dasarnya adalah seluruh Anda PSET sekarang dalam satu baris, 887 00:45:38,200 --> 00:45:43,930 tapi itu baru mulai server pada port 80/80. 888 00:45:43,930 --> 00:45:47,300 Jadi kami pergi ke sini, kita akan memuat 80/80, 889 00:45:47,300 --> 00:45:49,110 kita akan pergi ke My Song Favorit. 890 00:45:49,110 --> 00:45:51,660 Jadi jika aku memukul "Bermain saya lagu favorit "sekarang, 891 00:45:51,660 --> 00:45:53,964 itu akan memuat saya lagu favorit dan bermain itu-- 892 00:45:53,964 --> 00:45:55,880 [MUSIK - THE EAGLES, "HIDUP DI CEPAT  JALUR"] 893 00:45:55,880 --> 00:46:00,490 --kini terjadi menjadi "Life in Fast Lane "oleh The Eagles. 894 00:46:00,490 --> 00:46:06,346 Sekarang, saya bisa memukul "Hentikan saya lagu favorit "dan memutar ulang. 895 00:46:06,346 --> 00:46:09,160 >> [MUSIK - THE EAGLES, "HIDUP DI CEPAT  JALUR"] 896 00:46:09,160 --> 00:46:18,340 >> Dan jika saya pergi ke konsol, karena Saya menggunakan variabel global di sini 897 00:46:18,340 --> 00:46:23,390 untuk melacak nilai ini, itu benar-benar sekarang akan diakui di konsol. 898 00:46:23,390 --> 00:46:25,160 Sehingga otomatis menciptakan bagi saya. 899 00:46:25,160 --> 00:46:29,991 Jadi itulah yang bermain sekarang, dan saya hanya bisa memanggil source.stop () 900 00:46:29,991 --> 00:46:30,490 itu. 901 00:46:30,490 --> 00:46:34,930 902 00:46:34,930 --> 00:46:35,860 Nah, Anda tahu apa? 903 00:46:35,860 --> 00:46:39,760 Hanya begitu kalian telah mendengar ini song-- Anda mungkin mengenali lagu ini. 904 00:46:39,760 --> 00:46:41,801 >> [MUSIK - Rick Astley, "PERNAH AKAN MEMBERIKAN  ANDA UP "] 905 00:46:41,801 --> 00:46:42,299 906 00:46:42,299 --> 00:46:44,215 [MUSIK - THE EAGLES, "HIDUP DI CEPAT  JALUR"] 907 00:46:44,215 --> 00:46:46,195 Kami sudah sekarang semua telah Rickrolled. 908 00:46:46,195 --> 00:46:50,155 OK, besar, pindah. 909 00:46:50,155 --> 00:46:51,160 Keren. 910 00:46:51,160 --> 00:46:54,554 Jadi pada dasarnya ini adalah contoh dari hanya bagaimana Anda dapat memuat MP3 file-- 911 00:46:54,554 --> 00:46:56,470 [MUSIK - THE EAGLES, "HIDUP DI CEPAT  JALUR"] 912 00:46:56,470 --> 00:46:59,590 --dan memainkannya, dan berhenti dan mulai itu. 913 00:46:59,590 --> 00:47:03,008 Saya bisa melakukan lebih banyak [tidak terdengar] 914 00:47:03,008 --> 00:47:07,570 >> Yang terakhir saya akan lakukan adalah, Saya akan menunjukkan [tidak terdengar]. 915 00:47:07,570 --> 00:47:18,070 >> [MUSIC PLAYING] 916 00:47:18,070 --> 00:47:21,800 >> Ini seperti, ogg.wave.mp3. 917 00:47:21,800 --> 00:47:26,450 Saya pikir, jika saya ingat benar, Aku telah lari ke beberapa masalah dengan .m4a, 918 00:47:26,450 --> 00:47:27,721 tapi aku tidak yakin tentang hal itu. 919 00:47:27,721 --> 00:47:28,470 Saya pikir mp3.wave-- 920 00:47:28,470 --> 00:47:28,930 921 00:47:28,930 --> 00:47:30,971 >> [MUSIK - Rick Astley, "PERNAH AKAN MEMBERIKAN  ANDA UP "] 922 00:47:30,971 --> 00:47:35,930 923 00:47:35,930 --> 00:47:36,500 >> OK bagus. 924 00:47:36,500 --> 00:47:37,625 Saya seharusnya tidak mengatakan itu. 925 00:47:37,625 --> 00:47:40,570 Pokoknya, halo. 926 00:47:40,570 --> 00:47:43,430 927 00:47:43,430 --> 00:47:45,490 Jadi kita memiliki ini terbuka. 928 00:47:45,490 --> 00:47:52,320 Jadi sekarang semua saya lakukan adalah, saya pada dasarnya diciptakan sintaks dasar untuk menciptakan musik. 929 00:47:52,320 --> 00:47:57,610 Jadi jika saya melakukan sesuatu seperti, menambahkan g4 pada 1 2, apa itu artinya bahwa, 930 00:47:57,610 --> 00:48:00,950 menambahkan catatan piano, G4, yang merupakan keempat G 931 00:48:00,950 --> 00:48:02,680 di atas piano dari bawah. 932 00:48:02,680 --> 00:48:05,930 Jadi ini adalah jenis MIDI berbicara, sehingga bagi mereka yang berbasis musik, 933 00:48:05,930 --> 00:48:07,860 ini catatan hanya MIDI. 934 00:48:07,860 --> 00:48:10,090 >> AUDIENCE: Itulah G dari C Tengah, kan? 935 00:48:10,090 --> 00:48:11,840 >> Hugh Zabriskie: ini adalah G atas Tengah C, itu benar. 936 00:48:11,840 --> 00:48:12,470 >> AUDIENCE: Di atas Tengah C. 937 00:48:12,470 --> 00:48:13,345 >> Hugh Zabriskie: Ya. 938 00:48:13,345 --> 00:48:14,340 Sebenarnya, ya. 939 00:48:14,340 --> 00:48:16,131 Saya pikir saya benar-benar membuat menjadi salah satu [tidak terdengar], 940 00:48:16,131 --> 00:48:18,860 jadi ini mungkin satu oktaf di atas itu. 941 00:48:18,860 --> 00:48:20,070 Jadi mari kita lihat. 942 00:48:20,070 --> 00:48:21,152 Jika saya memukul Play-- 943 00:48:21,152 --> 00:48:22,110 [PIANO BERULANG CATATAN] 944 00:48:22,110 --> 00:48:23,200 --we're akan mendengarnya. 945 00:48:23,200 --> 00:48:25,700 Idenya adalah bahwa hal itu beroperasi seperti baris perintah akan, 946 00:48:25,700 --> 00:48:27,510 jadi jika saya naik dan turun pada keyboard, Anda 947 00:48:27,510 --> 00:48:31,550 dapat kembali ke sebelumnya perintah, yang cukup berguna. 948 00:48:31,550 --> 00:48:35,136 Dan di bawah ini adalah daftar lagu, yang semuanya berjalan pada lingkaran. 949 00:48:35,136 --> 00:48:38,260 >> AUDIENCE: Kau dengan asumsi 88-tombol keyboard pada itu, kan? 950 00:48:38,260 --> 00:48:41,051 >> Hugh Zabriskie: Pertanyaannya adalah, saya mengasumsikan keyboard 88-key, 951 00:48:41,051 --> 00:48:41,990 dan ya, saya. 952 00:48:41,990 --> 00:48:45,030 Apa yang saya lakukan adalah saya pada dasarnya mengambil sampel 88 953 00:48:45,030 --> 00:48:46,970 dari piano, satu untuk setiap catatan. 954 00:48:46,970 --> 00:48:49,180 Dan setiap kali Anda mendengar catatan dari sekarang, 955 00:48:49,180 --> 00:48:57,550 yang sebenarnya adalah sebuah lingkaran yang terlihat like-- ini semakin dimainkan pada lingkaran, 956 00:48:57,550 --> 00:49:00,120 jadi untuk setiap catatan, ini berjalan. 957 00:49:00,120 --> 00:49:02,860 Yang terjadi adalah, saya membuat buffer lagi, 958 00:49:02,860 --> 00:49:06,010 Saya membuat simpul keuntungan untuk mengatur volume. 959 00:49:06,010 --> 00:49:08,240 Ini hanya benar-benar cara rumit untuk mengatakan saya 960 00:49:08,240 --> 00:49:10,550 menyimpan buffer di source.buffer a. 961 00:49:10,550 --> 00:49:13,160 Saya memberikan gain, saya menghubungkannya ke gain, 962 00:49:13,160 --> 00:49:15,576 gain terhubung ke output, dan kemudian saya memainkannya. 963 00:49:15,576 --> 00:49:20,735 Jadi itu adalah semacam proses mengambil di sumber penyangga. 964 00:49:20,735 --> 00:49:24,820 >> AUDIENCE: Dapatkah Anda benar-benar mengambil suara kering dan membuatnya basah [tidak terdengar]? 965 00:49:24,820 --> 00:49:26,260 >> Hugh Zabriskie: Anda bisa, ya. 966 00:49:26,260 --> 00:49:29,260 Ada re-kata kerja, ada delay, distorsi. 967 00:49:29,260 --> 00:49:33,260 Anda pada dasarnya dapat memasukkan apa pun di antara di sandwich yang of-- baik, 968 00:49:33,260 --> 00:49:37,660 pipa adalah metafora yang lebih baik, tetapi Anda dapat menambahkan apa-apa dalam hal itu. 969 00:49:37,660 --> 00:49:38,200 Keren. 970 00:49:38,200 --> 00:49:40,280 >> Jadi saya akan menyelesaikan demo di sini untuk memberikan rasa 971 00:49:40,280 --> 00:49:46,390 hanya banyaknya kali Anda dapat menjalankan fungsi yang sekaligus. 972 00:49:46,390 --> 00:49:49,280 Jadi aku akan menghapus ini. 973 00:49:49,280 --> 00:49:59,110 Aku akan membuat generator itu-- pada dasarnya apa yang does-- ini benar-benar 974 00:49:59,110 --> 00:50:04,220 semacam syntax-- rumit tapi itu akan menghasilkan catatan dengan cepat, 975 00:50:04,220 --> 00:50:06,601 dan hanya mulai bermain mereka seperti mengevaluasi mereka. 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 >> Jadi kami hanya bisa membuat musik kecil di sini. 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 >> Jadi apa perintah ini tidak, misalnya, adalah 982 00:50:41,470 --> 00:50:46,910 dibutuhkan tiga catatan untuk piano dan kemudian menempatkan mereka pada B3. 983 00:50:46,910 --> 00:50:48,660 Sintaks ini mungkin membuat rasa sedikit lebih 984 00:50:48,660 --> 00:50:50,590 untuk mereka yang memiliki background musik di sini. 985 00:50:50,590 --> 00:50:55,180 986 00:50:55,180 --> 00:50:56,551 >> Saya dapat menambahkan kick drum. 987 00:50:56,551 --> 00:50:57,050 Aku bisa-- 988 00:50:57,050 --> 00:50:58,048 >> [Interposing INSTRUMEN] 989 00:50:58,048 --> 00:50:59,256 >> --Hanya bermain-main dengan itu. 990 00:50:59,256 --> 00:51:12,519 991 00:51:12,519 --> 00:51:13,474 >> Jadi Anda dapat make-- 992 00:51:13,474 --> 00:51:14,515 [Interposing INSTRUMEN] 993 00:51:14,515 --> 00:51:15,513 Satu yang sedikit lebih menjengkelkan. 994 00:51:15,513 --> 00:51:16,554 [Interposing INSTRUMEN] 995 00:51:16,554 --> 00:51:26,491 996 00:51:26,491 --> 00:51:30,981 >> Sehingga secara acak menambahkan cymbal kering pada setiap catatan 16, dengan 16% 997 00:51:30,981 --> 00:51:31,481 [Tidak terdengar]. 998 00:51:31,481 --> 00:51:32,522 >> [Interposing INSTRUMEN] 999 00:51:32,522 --> 00:51:40,962 1000 00:51:40,962 --> 00:51:50,400 >> Ya, jadi cara ini works-- itu selalu di 4: 4. 1001 00:51:50,400 --> 00:51:51,441 [Interposing INSTRUMEN] 1002 00:51:51,441 --> 00:52:06,910 1003 00:52:06,910 --> 00:52:10,902 >> Ya, jadi empat penjuru, dan 16/8. 1004 00:52:10,902 --> 00:52:14,851 1005 00:52:14,851 --> 00:52:15,892 [Interposing INSTRUMEN] 1006 00:52:15,892 --> 00:52:27,970 1007 00:52:27,970 --> 00:52:33,780 >> Jadi rata-rata, Anda mendapatkan 60% dari hits di catatan 16. 1008 00:52:33,780 --> 00:52:35,990 >> Anyways, ini hanya jenis untuk memamerkan 1009 00:52:35,990 --> 00:52:39,780 beberapa hal yang Anda bisa membangun dengan Web Audio API. 1010 00:52:39,780 --> 00:52:43,840 Ini benar-benar kuat, itu benar-benar cepat, dan Anda dapat membuat banyak hal keren 1011 00:52:43,840 --> 00:52:44,340 dengan itu. 1012 00:52:44,340 --> 00:52:51,260 Jadi sekali lagi, setiap pertanyaan yang Anda miliki, email myself-- Hugh-- atau Sam, 1013 00:52:51,260 --> 00:52:55,869 dan jujur, Google memiliki satu ton sumber daya yang baik. 1014 00:52:55,869 --> 00:52:56,660 Pertanyaan terakhir? 1015 00:52:56,660 --> 00:52:57,970 Ya. 1016 00:52:57,970 --> 00:53:00,790 >> AUDIENCE: Jadi Anda dapat mengakses mikrofon built-in. 1017 00:53:00,790 --> 00:53:03,089 Bagaimana jika Anda ingin menggunakan mikrofon yang lebih baik? 1018 00:53:03,089 --> 00:53:05,380 Hugh Zabriskie: Jika Anda ingin menggunakan mikrofon yang lebih baik? 1019 00:53:05,380 --> 00:53:11,320 Jadi sekali lagi, ini adalah bagian dari abstraksi antara Chrome 1020 00:53:11,320 --> 00:53:12,950 dan sisanya dari komputer Anda. 1021 00:53:12,950 --> 00:53:18,950 Kecuali itu tersedia melalui API, seperti Web MIDI API, 1022 00:53:18,950 --> 00:53:22,030 Anda mungkin bisa menemukan beberapa hacks, tetapi umumnya tidak layak. 1023 00:53:22,030 --> 00:53:25,300 >> SAM GREEN: Anda dapat also-- semua Chrome tahu 1024 00:53:25,300 --> 00:53:28,820 adalah apa mikrofon bawaan Anda adalah, dan ia mengakses itu. 1025 00:53:28,820 --> 00:53:33,410 Jadi jika Anda memiliki mikrofon Anda bisa ditetapkan sebagai mikrofon bawaan komputer, 1026 00:53:33,410 --> 00:53:35,990 Anda bisa mengaksesnya dengan cara itu dan itu mungkin akan bekerja. 1027 00:53:35,990 --> 00:53:37,490 Hugh Zabriskie: Itu titik yang baik. 1028 00:53:37,490 --> 00:53:39,656 Aku belum pernah mencoba itu, tapi Anda mungkin bisa baik 1029 00:53:39,656 --> 00:53:45,700 of-- jika Anda mengarahkan speaker input, Anda mungkin bisa melakukan itu, ya. 1030 00:53:45,700 --> 00:53:48,360 >> Pertanyaan terakhir? 1031 00:53:48,360 --> 00:53:49,340 Keren. 1032 00:53:49,340 --> 00:53:51,680 Nah terima kasih guys begitu banyak untuk menonton. 1033 00:53:51,680 --> 00:53:52,199 Aku Hugh. 1034 00:53:52,199 --> 00:53:52,990 SAM GREEN: Saya Sam. 1035 00:53:52,990 --> 00:53:55,410 Hugh Zabriskie: Dan ini adalah CS50. 1036 00:53:55,410 --> 00:53:56,767