1 00:00:00,000 --> 00:00:05,900 2 00:00:05,900 --> 00:00:07,170 >> Sam GREEN: Hi, sa lahat. 3 00:00:07,170 --> 00:00:08,640 Maligayang pagdating sa aming seminar. 4 00:00:08,640 --> 00:00:10,009 Ang pangalan ko ay Sam. 5 00:00:10,009 --> 00:00:11,050 HUGH Zabriskie: Ako Hugh. 6 00:00:11,050 --> 00:00:17,420 Sam GREEN: At kami ay pagpunta sa makipag-usap ngayon tungkol sa JavaScript at ang Web Audio API. 7 00:00:17,420 --> 00:00:21,180 Just upang simulan out, ito ay isang balangkas ng aming mga agenda para sa seminar. 8 00:00:21,180 --> 00:00:25,350 Kami ay pagpunta sa magsimula sa pamamagitan ng pakikipag-usap tungkol kung bakit dapat kang maging interesado sa Web 9 00:00:25,350 --> 00:00:30,130 Audio API, bakit JavaScript ang wika na kailangan mo para sa mga ito, 10 00:00:30,130 --> 00:00:32,619 at pagkatapos ay makipag-usap tungkol JavaScript essentials-- kaya gusto, 11 00:00:32,619 --> 00:00:34,800 ituturo sa iyo ang ilang mga pangunahing kaalaman sa wika, 12 00:00:34,800 --> 00:00:37,290 at pagkatapos ay makipag-usap tungkol sa audio API sa isang mataas na antas. 13 00:00:37,290 --> 00:00:41,140 Pagkatapos, Hugh ay makipag-usap tungkol sa ilang sa mga yugto ng audio produksyon 14 00:00:41,140 --> 00:00:45,509 at pagkatapos ay demo ang kahanga-hangang sequencer proyekto ay nagtayo siya at ipapakita sa iyo ang code. 15 00:00:45,509 --> 00:00:48,050 At pagkatapos, kami ay magkaroon ng panahon para tanong sa dulo para sa mga tao 16 00:00:48,050 --> 00:00:49,593 na dito nakatira. 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 Ako ay i-back up. 21 00:00:52,170 --> 00:00:54,960 >> Sam GREEN: So, unang unang bagay-bagay. 22 00:00:54,960 --> 00:00:57,840 Kaya isa sa mga mahusay na mga bagay tungkol sa Web Audio API 23 00:00:57,840 --> 00:01:00,480 ay na mayroong walang kinakailangang set up. 24 00:01:00,480 --> 00:01:04,230 Ito ay built-in na karamihan sa mga modernong browser, 25 00:01:04,230 --> 00:01:08,630 kabilang ang Chrome, Edge, isang buong grupo ng mga others-- lahat ng mga iyan 26 00:01:08,630 --> 00:01:12,650 na ang malaking bahagi ng mga tao ay gumagamit ngayon. 27 00:01:12,650 --> 00:01:14,807 Kaya't mayroong walang-set up, sa tabi mula sa pagkuha lamang 28 00:01:14,807 --> 00:01:16,890 isang web server pagpunta, para sa iyo upang makapagsimula nagtatrabaho 29 00:01:16,890 --> 00:01:18,420 sa iyong proyekto, na kung saan ay malaki. 30 00:01:18,420 --> 00:01:21,500 31 00:01:21,500 --> 00:01:24,190 >> Inirerekumenda namin pretty mabigat na isaalang-alang mo 32 00:01:24,190 --> 00:01:26,530 gamit ang Chrome para sa Web development JavaScript, 33 00:01:26,530 --> 00:01:30,260 dahil lang sa developer nito kasangkapan ay talagang malakas. 34 00:01:30,260 --> 00:01:33,220 Bilang isang halimbawa ng kung ano ang ibig sabihin namin sa pamamagitan ng pagsasabi buksan ang iyong JavaScript 35 00:01:33,220 --> 00:01:38,600 console-- kung pumunta ka sa Chrome at tumingin ka sa anumang web page, 36 00:01:38,600 --> 00:01:43,897 at iniwan mo click Siyasatin ang Elemento, at pagkatapos ay 37 00:01:43,897 --> 00:01:46,730 pumunta ka sa mga ito maliit na drop-down karapatan dito at nag-click sa Console, 38 00:01:46,730 --> 00:01:50,660 makikita mo kung ano ay bubukas up ng isang hitsura maraming tulad ng isang command prompt na kayo 39 00:01:50,660 --> 00:01:53,720 maaaring makita sa iyong Mac, o sa ID. 40 00:01:53,720 --> 00:01:59,260 At katulad nito, maaari naming command type dito, tulad ng I-clear, 41 00:01:59,260 --> 00:02:01,350 at iba pang mga utos na tulad ng. 42 00:02:01,350 --> 00:02:04,267 Maaari naming lumikha ng variable, tulad ng kami ay makita sa ibang pagkakataon sa JavaScript. 43 00:02:04,267 --> 00:02:07,100 At kaya kahit ano ang magagawa natin sa JavaScript, maaari naming gawin sa mga console, 44 00:02:07,100 --> 00:02:11,430 at iyon ang isang super madaling gamitin na paraan upang simulan ang paglalaro sa paligid na may mga API 45 00:02:11,430 --> 00:02:15,760 at pagkuha ng komportable sa JavaScript karapatan off ang bat. 46 00:02:15,760 --> 00:02:18,290 Walang kinakailangang set up, na kung saan ay talagang maganda. 47 00:02:18,290 --> 00:02:18,790 Cool. 48 00:02:18,790 --> 00:02:22,064 49 00:02:22,064 --> 00:02:22,880 Kahanga-hanga. 50 00:02:22,880 --> 00:02:24,780 >> Kaya lang ang isa pang bagay upang idagdag. 51 00:02:24,780 --> 00:02:27,780 Kung mayroon kang anumang questions-- may mga marami sa inyo na hindi dito nakatira, 52 00:02:27,780 --> 00:02:31,232 huwag mag-atubili na mag-email us-- mga ay ang aming mga email address. 53 00:02:31,232 --> 00:02:33,190 Kung mayroon kang mga katanungan hindi mo nais na hilingin sa amin, 54 00:02:33,190 --> 00:02:36,160 tulad ng, oh Mayroon akong isang bug sa aking code, o ng isang bagay 55 00:02:36,160 --> 00:02:39,270 na ang isang maliit na mas tiyak, siguro Google muna ito. 56 00:02:39,270 --> 00:02:42,340 Mayroong maraming mga mahusay na mga mapagkukunan tungkol sa Web Audio API out doon. 57 00:02:42,340 --> 00:02:44,089 Ito ay talagang mahusay dokumentado at ito ay pagiging 58 00:02:44,089 --> 00:02:47,194 ginagamit ng isang tonelada ng mga tao sa industriya, at mga tao na lamang 59 00:02:47,194 --> 00:02:48,610 pagbuo ng mga nakakatuwang bagay para sa kanilang sarili. 60 00:02:48,610 --> 00:02:51,306 Kaya dapat maging isang pulutong doon ng mga mapagkukunan out doon. 61 00:02:51,306 --> 00:02:53,040 Kahanga-hanga. 62 00:02:53,040 --> 00:02:56,100 >> Cool, bakit kaya ang Web Audio API? 63 00:02:56,100 --> 00:02:59,840 Diagram na ito ay isang maliit na piraso ng isang ebolusyon ng paraan 64 00:02:59,840 --> 00:03:04,100 sound sa web ay lumago sa paglipas ng panahon. 65 00:03:04,100 --> 00:03:13,080 Bgsound ay tulad ng sa orihinal na tag na HTML na ang Internet Explorer na ginamit upang suportahan. 66 00:03:13,080 --> 00:03:16,790 Ito lamang ang pinapayagan para sa pretty basic na tunog, ang pag-andar ay hindi masyadong matatag, 67 00:03:16,790 --> 00:03:19,380 at hindi mo maaaring gawin kumplikado sequencing, 68 00:03:19,380 --> 00:03:21,890 o kontrolin kapag nagsimula sound at tumigil very robustly. 69 00:03:21,890 --> 00:03:23,930 Kaya, ito ay hindi partikular na mahusay na binuo. 70 00:03:23,930 --> 00:03:27,470 Pagkatapos matapos na, Flash dumating along-- kung saan, 71 00:03:27,470 --> 00:03:31,712 Ako ba na iyong guys ay ang lahat ng mga pamilyar may Flash-- marahil hindi kung paano ito gumagana, 72 00:03:31,712 --> 00:03:32,920 ngunit tiyak na iyong nakita ito. 73 00:03:32,920 --> 00:03:35,586 Mayroon kayong na-update ang iyong Flash Plug-in, lahat na uri ng mga bagay-bagay, 74 00:03:35,586 --> 00:03:40,110 at na pinalawig tiyak ang range ng pag-andar na magagamit. 75 00:03:40,110 --> 00:03:45,370 Subalit ang paggawa ng paggamit ng i-install isang plug-in ay tiyak 76 00:03:45,370 --> 00:03:48,480 isang sagabal sa kabilang Flash sa iyong application, tama? 77 00:03:48,480 --> 00:03:52,410 Dahil pagkatapos ikaw ay nakasalalay sa mga pagpunta sa paggamit at paghahanap na ito plug-in, 78 00:03:52,410 --> 00:03:54,660 at marahil na nakabukas off ito sa pamamagitan ng dagdag na hakbang 79 00:03:54,660 --> 00:03:56,640 mayroon sila upang gawin upang gamitin ang iyong app. 80 00:03:56,640 --> 00:04:01,270 At pagkatapos ay maaaring maging isang update doon na makikita masira ang iyong buong application, 81 00:04:01,270 --> 00:04:03,880 at ito ay nagtatapos up pagiging isang bangungot para sa mga developer, masyadong. 82 00:04:03,880 --> 00:04:06,230 Kaya na ay isang sagabal. 83 00:04:06,230 --> 00:04:10,480 >> At pagkatapos ay pagkatapos na dumating kasama, mga tag na HTML audio, kung saan 84 00:04:10,480 --> 00:04:16,579 ay isang tampok ng mas modernong HTML-- saan tiyak na pinapayagan para sa isang pulutong ng mas maraming mga bagay-bagay, 85 00:04:16,579 --> 00:04:20,050 pero kahit na ang mga bagay-bagay na maaari mong gawin doon ay isang maliit na bit limitado lamang 86 00:04:20,050 --> 00:04:22,730 bilang resulta ng mga bagay-bagay na HTML ay may kakayahang. 87 00:04:22,730 --> 00:04:26,060 Kaya kapag ang JavaScript API, ang Web Audio API, 88 00:04:26,060 --> 00:04:29,290 naging isang standard pagsasanay sa mga browser, 89 00:04:29,290 --> 00:04:32,490 na talagang broadened ang set ng mga pagkakataon para sa mga developer 90 00:04:32,490 --> 00:04:36,590 upang makakuha ng tunay sa gusali cool na bagay para sa web. 91 00:04:36,590 --> 00:04:39,220 Para sa isang mahabang panahon doon ay nagkaroon ay talagang matatag na tool 92 00:04:39,220 --> 00:04:44,360 para sa mga katutubong aplikasyon audio, like-- alam ng lahat GarageBand, 93 00:04:44,360 --> 00:04:48,360 at pagkatapos ay malinaw naman may mga mas propesyonal na mga application audio paghahalo, 94 00:04:48,360 --> 00:04:49,640 at ang uri ng mga bagay-bagay. 95 00:04:49,640 --> 00:04:52,690 Ngunit may ay hindi isang talagang magandang Cloud-- hindi 96 00:04:52,690 --> 00:04:55,811 Cloud, oo, palagay ko Cloud-- platform na batay sa web 97 00:04:55,811 --> 00:04:58,310 na ay magpapahintulot sa mga developer na bumuo ng mga application para sa mga tao 98 00:04:58,310 --> 00:05:00,570 gawin audio paghahalo. 99 00:05:00,570 --> 00:05:03,960 At bilang siya ay magpapakita sa iyo mamaya, ang Web Audio API 100 00:05:03,960 --> 00:05:07,470 nagbibigay-daan para talagang malakas mga bagay-bagay na mangyari talagang lamang, 101 00:05:07,470 --> 00:05:09,597 na kung saan ay medyo cool. 102 00:05:09,597 --> 00:05:12,680 Kaya na ang pagtuturo sa kung bakit mo dapat panoorin ang natitirang bahagi ng seminar, 103 00:05:12,680 --> 00:05:14,350 talaga. 104 00:05:14,350 --> 00:05:17,880 >> At ngayon, ako pagpunta sa makipag-usap tungkol ilang JavaScript-- lamang pangunahing elemento 105 00:05:17,880 --> 00:05:20,240 ng wika, upang ang kami ay maaaring maging sa parehong pahina 106 00:05:20,240 --> 00:05:22,470 kapag kami makipag-usap tungkol sa API nang kaunti bago. 107 00:05:22,470 --> 00:05:23,260 Cool. 108 00:05:23,260 --> 00:05:26,192 >> Kaya, ito ay isang buod. 109 00:05:26,192 --> 00:05:27,150 Nakalimutan ko na ito ay dito. 110 00:05:27,150 --> 00:05:27,510 Oo. 111 00:05:27,510 --> 00:05:27,870 >> HUGH Zabriskie: Mayroong dalawang mga slide dito. 112 00:05:27,870 --> 00:05:30,245 >> Sam GREEN: Ito ang buod ng ilan sa mga limitasyon 113 00:05:30,245 --> 00:05:35,220 sa mga iba pang bisa, lumang paraan. 114 00:05:35,220 --> 00:05:37,828 At pagkatapos ngayon, mayroon kaming mga bagay na ito. 115 00:05:37,828 --> 00:05:40,011 Cool. 116 00:05:40,011 --> 00:05:40,510 Kahanga-hanga. 117 00:05:40,510 --> 00:05:43,200 >> Kaya, mahahalaga JavaScript. 118 00:05:43,200 --> 00:05:47,230 Unang unang bagay, may isang pretty makabuluhang pagkakaiba 119 00:05:47,230 --> 00:05:49,940 sa JavaScript laban sa isang wika tulad ng C, sa paraan 120 00:05:49,940 --> 00:05:52,050 na mga variable ay nilikha. 121 00:05:52,050 --> 00:05:55,634 Kaya sa C, kami ay ginagamit upang pagkakaroon i-type ang aming mga variable, di ba? 122 00:05:55,634 --> 00:05:57,800 At hindi ko ibig sabihin na uri tulad ng type ang mga ito sa uri, ibig sabihin ko 123 00:05:57,800 --> 00:06:01,900 tulad ng magtalaga ng mga ito ng isang type-- kahulugan tulad ng, isang int, isang float, isang pansamantalang trabaho. 124 00:06:01,900 --> 00:06:05,210 Sa C, talagang kami ay ginagamit sa hindi upang lumikha ng isang variable 125 00:06:05,210 --> 00:06:09,690 at pagkatapos ay dumikit na uri para sa buong oras na ginagamit namin na variable. 126 00:06:09,690 --> 00:06:13,990 At iyon ay hindi kinakailangang mas masahol pa, ngunit ito ay malamang na mas mahirap gamitin. 127 00:06:13,990 --> 00:06:16,190 Isa sa mga cool na tampok ng JavaScript ay 128 00:06:16,190 --> 00:06:19,740 na mga variable ay kung ano ang tinatawag "dynamic na-type," kung saan 129 00:06:19,740 --> 00:06:22,500 Nangangahulugan ito na maaari kong lumikha ng isang variable sa na syntax, 130 00:06:22,500 --> 00:06:25,800 varX katumbas ng 5, halimbawa. 131 00:06:25,800 --> 00:06:27,790 Na orihinal na lumilikha isang integer variable-- 132 00:06:27,790 --> 00:06:29,870 karapatan sa ilalim ng hood somewhere-- ngunit ako 133 00:06:29,870 --> 00:06:33,040 maaaring baguhin variable na upang tingnan ang isang string 134 00:06:33,040 --> 00:06:35,820 nang hindi ginagawa ang anumang tulad paglikha ng isang bagong variable. 135 00:06:35,820 --> 00:06:37,880 Hindi ko kailangan mag-alala tungkol sa pagbabago ng uri. 136 00:06:37,880 --> 00:06:45,440 Alam na ang mga uri ng JavaScript nagbago, at na dynamic na mangyayari. 137 00:06:45,440 --> 00:06:48,510 >> Kaya, may mga benepisyo at kahinaan sa mga iyon, 138 00:06:48,510 --> 00:06:51,250 tulad ng kahit sino ay nagtrabaho sa Upang makilala ng JavaScript para sa isang habang. 139 00:06:51,250 --> 00:06:53,600 May mga pagkakataon na maaaring hindi mo sinasadyang 140 00:06:53,600 --> 00:06:57,720 palitan ang uri ng isang variable at hindi mahawakan na pagpapalit ng uri, 141 00:06:57,720 --> 00:07:01,120 at pagkatapos ang iyong JavaScript Maaari crash-- o isang exception 142 00:07:01,120 --> 00:07:06,070 bumalibag, dahil ikaw ay magkakaroon ng maling uri kapag inaasahan mo sa isang uri. 143 00:07:06,070 --> 00:07:07,040 Cool. 144 00:07:07,040 --> 00:07:11,470 >> Kaya, scoping-- na kung saan ay tulad ng, kung tayo tandaan ang mga unang linggo sa kurso, 145 00:07:11,470 --> 00:07:15,420 ay tumutukoy sa kung paano nakikita ng isang variable ay at sa kung ano ang lugar ng code. 146 00:07:15,420 --> 00:07:18,400 Ang lahat ng na mukhang katulad sa paraan ng hitsura nito sa C. 147 00:07:18,400 --> 00:07:24,755 Kaya variable ay scoped sa pangkalahatan sa loob ng kulot tirante sa loob ng isang function, 148 00:07:24,755 --> 00:07:27,005 at pagkatapos ay mayroon ding globally-scoped variable na 149 00:07:27,005 --> 00:07:29,171 are-- kung sumulat ka ng isang variable sa labas ng isang function, 150 00:07:29,171 --> 00:07:31,790 ito ay makikita sa buong teksto. 151 00:07:31,790 --> 00:07:35,840 >> Isang pagkakaiba sa pagitan ng JavaScript at C sa partikular, 152 00:07:35,840 --> 00:07:40,280 ay na kung ipinapahayag mo ang isang global variable kahit saan sa isang text file 153 00:07:40,280 --> 00:07:43,324 ito ay makikita sa anumang function sa loob na text file. 154 00:07:43,324 --> 00:07:44,240 Iyan ay tama, di ba? 155 00:07:44,240 --> 00:07:46,330 >> HUGH Zabriskie: Yep. 156 00:07:46,330 --> 00:07:49,120 >> Sam GREEN: Kaya na ang isang maliit na ring bit funky sa paghahambing sa C, 157 00:07:49,120 --> 00:07:52,660 kung saan kami ay palaging upang magkaroon ng aming variable kahulugan sa itaas ng lugar 158 00:07:52,660 --> 00:07:53,770 sila ay ginagamit. 159 00:07:53,770 --> 00:07:57,957 Iyan ay hindi isang patakaran na ipapatupad anymore, kaya, Medyo naiiba. 160 00:07:57,957 --> 00:08:00,540 At muli lamang upang muling bigyang-diin, pandaigdigang laban sa mga lokal na variables-- 161 00:08:00,540 --> 00:08:03,457 halos katulad sa C. Maaari kang magkaroon ng dalawang variable na may parehong pangalan, 162 00:08:03,457 --> 00:08:06,540 at magkaroon ng isa sa kanilang mga pangalan ay shadowed sa pamamagitan ng isang lokal na variable na kung ang isa sa kanila 163 00:08:06,540 --> 00:08:07,546 ay global. 164 00:08:07,546 --> 00:08:09,420 Kaya, katulad na uri ng mga problema na ang ilan sa inyo 165 00:08:09,420 --> 00:08:11,920 maaaring tumakbo sa sa ilang ng iyong problema nagtatakda sa ngayon. 166 00:08:11,920 --> 00:08:14,450 Cool, kaya na ang mga variable. 167 00:08:14,450 --> 00:08:20,310 >> Control daloy, ibig sabihin ay tulad ng, kung-else-- lohikal stuff-- at mga loop. 168 00:08:20,310 --> 00:08:24,510 Kaya upang magsimula sa, ito ay kung ano kung-ibang Tumingin pahayag tulad ng sa JavaScript. 169 00:08:24,510 --> 00:08:29,750 Ang paglalagay ng mga iba't-ibang mga bagay-bagay sa mga linya ay hindi mahalaga. 170 00:08:29,750 --> 00:08:34,409 Ito ang isa sa mga kombensiyon lamang para sa mga paraan ng istraktura namin code. 171 00:08:34,409 --> 00:08:38,634 Katulad ng sa C, mayroon kaming isang "kung," isang parenthesis statement. 172 00:08:38,634 --> 00:08:40,840 173 00:08:40,840 --> 00:08:42,090 Iyan ay hindi kung ano ang ibig sabihin ko na gawin. 174 00:08:42,090 --> 00:08:44,860 175 00:08:44,860 --> 00:08:45,550 Ginawa ko itong muli. 176 00:08:45,550 --> 00:08:46,841 >> HUGH Zabriskie: Sinusubukang upang lumabas? 177 00:08:46,841 --> 00:08:49,770 Sam GREEN: Hindi, ako lamang sinusubukan upang mag-zoom in. 178 00:08:49,770 --> 00:08:50,660 Hindi mahalaga. 179 00:08:50,660 --> 00:08:54,730 180 00:08:54,730 --> 00:08:59,370 >> Kaya, kami ay isang "kung" pahayag at kami ay may isang kondisyon loob ng mga ito 181 00:08:59,370 --> 00:09:03,130 na sinusuri sa true o false, at na tumutukoy kung o hindi 182 00:09:03,130 --> 00:09:04,510 ipasok natin na block ng code. 183 00:09:04,510 --> 00:09:09,860 Sa gayon ding paraan, mayroon kaming isang tao-kung, at isang tao, tulad ng kami ay ginagamit upang sa C. 184 00:09:09,860 --> 00:09:14,010 >> Dapat kang maging pretty din kumportable karapatan off ang bat na may mga loop, 185 00:09:14,010 --> 00:09:16,440 dahil sila rin tumingin isang pulutong tulad ng C hitsura. 186 00:09:16,440 --> 00:09:19,600 Ngunit mapapansin mo muli na naming Mayroon, sa halip ng int initializations, 187 00:09:19,600 --> 00:09:22,570 mayroon kaming var initializations. 188 00:09:22,570 --> 00:09:24,650 At ako hulaan ikaw ay mag-ingat upang gumawa ng 189 00:09:24,650 --> 00:09:28,460 Tiyaking hindi mo baguhin ang mga halaga ng ko mula sa isang int sa isang string, 190 00:09:28,460 --> 00:09:31,780 halimbawa, dahil na pupuntahan maging sanhi ng kakaibang pag-uugali na hindi mo maaaring 191 00:09:31,780 --> 00:09:32,280 asahan. 192 00:09:32,280 --> 00:09:35,750 Ngunit ito ay dapat magmukhang medyo pamilyar, pati na rin. 193 00:09:35,750 --> 00:09:39,460 >> Kaya ito ay kung saan ang mga bagay simulan upang makakuha ng isang maliit na piraso ng mabaliw sa JavaScript 194 00:09:39,460 --> 00:09:44,920 para sa isang tao kung sino ang pagpunta mula sa isang background ng C. May mga pag-andar 195 00:09:44,920 --> 00:09:48,070 sa JavaScript, at mayroong isang paraan upang magpahayag ng isang function na ganito 196 00:09:48,070 --> 00:09:50,361 uri ng katulad sa C, at pagkatapos ay may isa pa na 197 00:09:50,361 --> 00:09:52,450 mukhang uri ng iba't-ibang. 198 00:09:52,450 --> 00:09:54,930 >> Ang unang bersyon, kung saan maaari naming makita dito, 199 00:09:54,930 --> 00:09:59,260 ay uri ng C-tulad ng, kung saan sabihin namin, ito ay isang function, 200 00:09:59,260 --> 00:10:01,490 bigyan ito ng pangalan, bigyan ang bilang ng mga argumento, 201 00:10:01,490 --> 00:10:05,150 at pagkatapos ay ang mga nilalaman ng ang pag-andar pumunta sa loob ng mga kulot braces. 202 00:10:05,150 --> 00:10:08,850 Susubukan naming makita ang isang halimbawa ng argumento sa isang segundo lang. 203 00:10:08,850 --> 00:10:13,420 >> Sapagkat sa susunod na linya, nakita namin, oh, narito ang isang variable na tinatawag na "myFunction," 204 00:10:13,420 --> 00:10:17,546 at pantay na namin ito sa ganitong generic thing-- function-- na 205 00:10:17,546 --> 00:10:19,170 Mukhang hindi magkaroon ng anumang bagay na nangyayari. 206 00:10:19,170 --> 00:10:22,780 207 00:10:22,780 --> 00:10:26,080 Ang dahilan na iba kaysa sa C ay na JavaScript 208 00:10:26,080 --> 00:10:30,040 ay kung ano ang tinatawag na isang functional na wika, o may functional na mga elemento, na nangangahulugan 209 00:10:30,040 --> 00:10:33,510 na function ay talagang halaga. 210 00:10:33,510 --> 00:10:39,520 At na nangangahulugan na maaari naming i-set isang variable sa pantay na ang isang function 211 00:10:39,520 --> 00:10:43,210 at pagkatapos ay ilipat ang function sa paligid, ipasa ang mga ito bilang isang argument, 212 00:10:43,210 --> 00:10:46,550 gawin ang lahat ng mga uri ng mga bagay-bagay tulad na sa pag-andar. 213 00:10:46,550 --> 00:10:49,682 >> Isa iba pang mga bagay na note-- function ay nakasulat 214 00:10:49,682 --> 00:10:51,140 na may isang tiyak na bilang ng mga argumento. 215 00:10:51,140 --> 00:10:54,056 Susubukan naming makita ang isang halimbawa ng isang function may isang argument sa susunod na slide. 216 00:10:54,056 --> 00:10:56,720 Ngunit JavaScript ay hindi sumigaw sa iyo kung susubukan mo 217 00:10:56,720 --> 00:10:59,330 na gumamit ng isang function na may mga maling bilang ng mga argumento. 218 00:10:59,330 --> 00:11:05,310 Makikita lamang ito gawin ang lahat upang gumawa ng gawin, ibig sabihin na kung ikaw ay pumasa, 219 00:11:05,310 --> 00:11:09,410 tumawag ka ng isang function na inaasahan ng isang argument na walang argument, ang lahat na 220 00:11:09,410 --> 00:11:13,990 ang mangyayari ay magkakaroon ito gawin ang kanyang pinakamahusay upang subukan at execute na code, 221 00:11:13,990 --> 00:11:16,541 at kung sa huli ito ay tumatakbo sa isang pagbubukod o ng isang error, 222 00:11:16,541 --> 00:11:19,790 makikita ito ihagis exception na iyon at magpatuloy lang going-- na kung saan ay isa sa mga paraan lamang 223 00:11:19,790 --> 00:11:21,070 na gumagana ang JavaScript. 224 00:11:21,070 --> 00:11:21,781 Oo. 225 00:11:21,781 --> 00:11:24,207 >> Madla: Ano ang mangyayari kung may masyadong maraming mga argumento? 226 00:11:24,207 --> 00:11:26,040 Sam GREEN: Kaya ang tanong ay, kung ano ang mangyayari 227 00:11:26,040 --> 00:11:27,380 kung may masyadong maraming mga argumento? 228 00:11:27,380 --> 00:11:29,171 At ang sagot ay na JavaScript ay lamang 229 00:11:29,171 --> 00:11:32,120 huwag pansinin ang mga iyon ay matapos ang mga ito inaasahan. 230 00:11:32,120 --> 00:11:36,420 Makikita ito subukan upang maisagawa ang pag-andar tumawag na parang ito ay lamang ang unang dalawang. 231 00:11:36,420 --> 00:11:37,075 Right? 232 00:11:37,075 --> 00:11:37,700 >> HUGH Zabriskie: Tama iyon, oo. 233 00:11:37,700 --> 00:11:39,449 Katulad nito, kung may ay masyadong ilang mga argumento, 234 00:11:39,449 --> 00:11:42,640 ito lamang ang uri ng mga nagbibigay sa null sa lahat ng mga argumento ito ay walang anumang mga halaga 235 00:11:42,640 --> 00:11:43,660 para sa. 236 00:11:43,660 --> 00:11:45,810 >> Sam GREEN: Aling Maaari tunay na maging madaling-magamit, kung ikaw 237 00:11:45,810 --> 00:11:49,060 nais na magsulat ng isang function na tumatagal ng isang variable arguments number. 238 00:11:49,060 --> 00:11:55,830 Maaari mong itakda ang default na halaga sa mga kahulugan ng mga function, 239 00:11:55,830 --> 00:11:59,060 at maaari itong huwag pansinin ang katunayan na ang input ay hindi doon. 240 00:11:59,060 --> 00:12:01,584 241 00:12:01,584 --> 00:12:04,000 Kaya gusto kong makipag-usap nang kaunti ang nalalaman tungkol sa huling bala 242 00:12:04,000 --> 00:12:05,541 point, na kung saan ay pag-andar ay halaga. 243 00:12:05,541 --> 00:12:07,930 244 00:12:07,930 --> 00:12:11,010 Ito ay isang halimbawa na Medyo isip-pamumulaklak 245 00:12:11,010 --> 00:12:14,880 kung ikaw lamang basahin ito, at huwag mag-isip tungkol sa kung ano ang nangyayari para sa isang segundo. 246 00:12:14,880 --> 00:12:17,910 Kaya, sabihin lamang tumingin sa ipaalam ang unang linya dito. 247 00:12:17,910 --> 00:12:24,360 Mayroon kaming na ito variable, F1, na sinasabi namin ay isang function na ang bagay na ito. 248 00:12:24,360 --> 00:12:28,535 At ang mga nilalaman ng ang pag-andar ay console.log ('hello'). 249 00:12:28,535 --> 00:12:32,220 Maaari mong isipin na console.log bilang ang JavaScript katumbas ng printf. 250 00:12:32,220 --> 00:12:35,510 Kaya kung ano ang mangyayari ay, kung kami ay tumakbo ang code na ito sa aming mga browser, 251 00:12:35,510 --> 00:12:37,530 makikita ito i-print out ang isang string. 252 00:12:37,530 --> 00:12:39,342 Maaari ko bang ipakita na. 253 00:12:39,342 --> 00:12:42,300 Madla: Sa pamamagitan ng log, bagaman, ay na Ibig sabihin ito ay ini-record na lugar? 254 00:12:42,300 --> 00:12:42,550 Sam GREEN: Oo. 255 00:12:42,550 --> 00:12:44,216 Kaya kukunin ko na ipakita sa iyo kung ano ang nangyayari sa mangyari. 256 00:12:44,216 --> 00:12:48,085 Kaya ang tanong ay, kung ano ang ibig sabihin ng mag-log? 257 00:12:48,085 --> 00:12:51,262 >> HUGH Zabriskie: So console.log ay tulad ng printf para sa C. 258 00:12:51,262 --> 00:12:52,970 Sam GREEN: So console.log ay tulad ng printf, 259 00:12:52,970 --> 00:12:59,240 kaya kung may ganito akong console.log ('hello'), at tawagan ko na, ang string "hello" 260 00:12:59,240 --> 00:13:00,730 makakakuha ng naka-print out sa console. 261 00:13:00,730 --> 00:13:03,340 Ito ay ang console. 262 00:13:03,340 --> 00:13:05,930 Ito ay tulad ng printf, kung saan ito kopya sa standard out. 263 00:13:05,930 --> 00:13:09,050 264 00:13:09,050 --> 00:13:11,230 At kami na makita sa isang minuto, ngunit ito ay tunay na 265 00:13:11,230 --> 00:13:16,529 pagsangguni sa mga console object, at pagtawag ng isang paraan sa bagay na iyon. 266 00:13:16,529 --> 00:13:18,320 Na kailangan maging mas makatuturan sa isang minuto kapag kami 267 00:13:18,320 --> 00:13:20,660 kumuha sa pakikipag-usap tungkol mga bagay sa JavaScript, 268 00:13:20,660 --> 00:13:22,509 ngunit naisip ko na gusto kong banggitin na lang. 269 00:13:22,509 --> 00:13:24,300 HUGH Zabriskie: Kami ginagamit upang sa C, right-- 270 00:13:24,300 --> 00:13:27,580 kami ay karaniwang magsulat ng isang malaking programa sa pangunahing gawin. 271 00:13:27,580 --> 00:13:30,700 Ngunit kung ano ang cool na sa JavaScript ay sa iyo magkaroon ng ganitong uri ng interpreter na 272 00:13:30,700 --> 00:13:33,620 ay tumatakbo sa real time, sa gayon ito tumatagal lamang linya sa pamamagitan ng linya, 273 00:13:33,620 --> 00:13:35,320 maaari itong lamang bigyan ng kahulugan na sa lugar. 274 00:13:35,320 --> 00:13:37,403 At iniingatan nito ang track ng mga bagay na tumakbo bago, 275 00:13:37,403 --> 00:13:41,620 kaya ito ay isang medyo kapaki-pakinabang na tool upang gamitin console.log, o ang console, 276 00:13:41,620 --> 00:13:46,870 sa pangkalahatan, para sa pag-play lamang sa paligid sa JavaScript. 277 00:13:46,870 --> 00:13:51,420 >> Sam GREEN: So balik sa ito example-- ang pangalawang linya ng code 278 00:13:51,420 --> 00:13:55,320 dito ay medyo isip-boggling sa aking ulo. 279 00:13:55,320 --> 00:13:59,790 Ang unang pagkakataon na basahin ko ito, ito ay tulad ng, kung ano ang nangyari? 280 00:13:59,790 --> 00:14:04,580 Kaya kung ano ang nangyayari ay, ito sabi function deklarasyon, 281 00:14:04,580 --> 00:14:10,170 Mayroon akong isang function na tinatawag na F2 na umaasa sa isang argument, f, 282 00:14:10,170 --> 00:14:12,990 at pagkatapos ito tawag na function, f, na 283 00:14:12,990 --> 00:14:17,652 ay lumipas na ito bilang isang argument na walang argumento mismo. 284 00:14:17,652 --> 00:14:19,110 Kaya, na maaaring ay nakalilito. 285 00:14:19,110 --> 00:14:21,890 286 00:14:21,890 --> 00:14:28,400 Kung nauunawaan natin na ito bilang F2 tumatagal F1 bilang isang argument, at pagkatapos ay sa loob ng F2, 287 00:14:28,400 --> 00:14:31,190 f makakakuha called-- na paraan na ito sa linya ng code, 288 00:14:31,190 --> 00:14:34,192 Pagkatapos ng mga dalawang linya ng code, mga resulta sa "hello" 289 00:14:34,192 --> 00:14:35,400 na naka-print sa console. 290 00:14:35,400 --> 00:14:41,660 291 00:14:41,660 --> 00:14:44,910 >> Ang katotohanan na maaari naming pumasa function sa paligid bilang mga halaga 292 00:14:44,910 --> 00:14:47,870 ay nauuwi sa pagiging isa sa mga pinaka malakas na tampok ng JavaScript 293 00:14:47,870 --> 00:14:49,700 bilang isang programming language. 294 00:14:49,700 --> 00:14:52,782 Sa labas ng lahat ng mga kahanga-hangang mga bagay na maaari itong gawin, 295 00:14:52,782 --> 00:14:54,990 tulad ng isang tampok ng wika sa mga tuntunin ng ang paraan 296 00:14:54,990 --> 00:14:58,400 na ito ay gumagawa ng mga bagay na madali sa mga programa at nagbibigay-daan sa 297 00:14:58,400 --> 00:15:01,060 para sa mga bagay na hindi partikular na well-ugma sa web, 298 00:15:01,060 --> 00:15:04,500 functional programming at functional programming aspeto ng JavaScript 299 00:15:04,500 --> 00:15:07,130 ay isa sa mga pinaka malakas na konsepto na 300 00:15:07,130 --> 00:15:11,030 umiiral sa JavaScript-- kung magtatanong kayo sa akin. 301 00:15:11,030 --> 00:15:11,960 Cool. 302 00:15:11,960 --> 00:15:13,534 >> Kaya, sa susunod na bagay. 303 00:15:13,534 --> 00:15:16,450 Bilang karagdagan sa pagiging functional, mayroong mga elemento ng JavaScript din 304 00:15:16,450 --> 00:15:20,510 na object-oriented, na kung saan ay isa sa mga tunay 305 00:15:20,510 --> 00:15:23,800 popular na mga salita buzz sa computer science. 306 00:15:23,800 --> 00:15:27,040 Object-oriented programming ay isang tunay popular na bagay. 307 00:15:27,040 --> 00:15:34,210 Ay isang bersyon ng na JavaScript, kung saan sa tingin ko ang bawat halaga ay din 308 00:15:34,210 --> 00:15:41,475 isang bagay, na nangangahulugan na ang bawat bagay bumabalot sama ang ilang bilang ng mga halaga. 309 00:15:41,475 --> 00:15:44,020 310 00:15:44,020 --> 00:15:49,750 Kaya para sa mga halaga na simple, tulad ng isang integer, tulad varX katumbas ng 5, 311 00:15:49,750 --> 00:15:52,250 object na bumabalot lamang na ang isa na halaga. 312 00:15:52,250 --> 00:15:54,760 313 00:15:54,760 --> 00:15:59,036 >> Ngunit maaari rin naming isipin ang isang sitwasyon where-- maaari naming isipin ng mga sitwasyon sa C 314 00:15:59,036 --> 00:16:00,910 kung saan gusto naming gawin isang bagay na may structs, 315 00:16:00,910 --> 00:16:03,285 halimbawa, na bumabalot sa ilang mga halaga ng sama-sama at gumagawa 316 00:16:03,285 --> 00:16:05,870 talagang madali upang pumasa sa mga bagay sa paligid. 317 00:16:05,870 --> 00:16:09,270 Iyan ay kapag ang isang bagay ay sa JavaScript. 318 00:16:09,270 --> 00:16:12,340 >> Ito ay mahalaga na tandaan kapag sinasabi ko na ang mga bagay na nakabalot 319 00:16:12,340 --> 00:16:15,330 ilang bilang ng mga halaga ng magkasama, na function ay din 320 00:16:15,330 --> 00:16:21,506 mga halaga, na nangangahulugan na ang mga pag-andar na maaari din sa loob ng isang JavaScript object. 321 00:16:21,506 --> 00:16:26,910 At ang dahilan na mahalaga ay na, samantalang kami ay madalas 322 00:16:26,910 --> 00:16:30,290 tingin ng pagtawag ng isang paraan sa isang bagay na 323 00:16:30,290 --> 00:16:35,200 ng isang popular na kataga mula sa iba pang popular object-oriented wika, 324 00:16:35,200 --> 00:16:39,330 isa sa mga pagkakaiba dito ay na lahat na ang isang paraan ay sa JavaScript 325 00:16:39,330 --> 00:16:47,270 ay ang halaga na naka-imbak sa loob ng isang bagay na gumaganap ng ilang action-- posibleng 326 00:16:47,270 --> 00:16:51,850 gamit ang iba pang mga halaga na loob ng bagay na iyon, ngunit hindi kinakailangan. 327 00:16:51,850 --> 00:16:56,930 Kaya maaari mong isipin ang isang sitwasyon, ako hulaan sa isang maliit na piraso ng isang nakatutuwang paraan, 328 00:16:56,930 --> 00:17:02,990 kung saan tinatawag na sa iyo ng isang paraan ng isa bagay sa isa pang bagay, halimbawa. 329 00:17:02,990 --> 00:17:06,010 Kaya, ito ay isang maliit na bit funky sa paraang iyon. 330 00:17:06,010 --> 00:17:09,369 >> At maaari mo ring baguhin ang mga pamamaraan na nauugnay sa isang bagay 331 00:17:09,369 --> 00:17:13,740 sa pamamagitan ng pagtatalaga na paraan ng bagong pag-andar, kung saan ay din 332 00:17:13,740 --> 00:17:18,250 medyo iba mula sa iba pang mga object-oriented wika, kung saan 333 00:17:18,250 --> 00:17:21,410 isang beses ipinahahayag natin ang isang bagay at magbigay ng halimbawa nito, 334 00:17:21,410 --> 00:17:25,839 hindi namin maaaring baguhin ang mga pamamaraan na kaugnay sa bagay na iyon ngayon. 335 00:17:25,839 --> 00:17:28,680 Kaya na medyo naiiba. 336 00:17:28,680 --> 00:17:29,570 Cool. 337 00:17:29,570 --> 00:17:34,010 >> Kaya narito ang isang halimbawa, una, ng isang bagay sa aksyon. 338 00:17:34,010 --> 00:17:36,390 Ito ay kung ano ang tawag dito isang pangkaraniwang bagay, na 339 00:17:36,390 --> 00:17:39,460 ay nangangahulugan na ito ay walang anumang partikular na pangalan, ay hindi magkaroon ng isang klase, 340 00:17:39,460 --> 00:17:42,190 ito ay ilan lamang wrapping ng mga halaga. 341 00:17:42,190 --> 00:17:49,790 At ang paraan na mukhang ay, kami ay ito panlabas na pares ng mga kulot tirante dito 342 00:17:49,790 --> 00:17:57,950 na nagpapahiwatig sa JavaScript at sabihin, ito ay isang bagay. 343 00:17:57,950 --> 00:18:02,130 Ang mga halaga sa loob ng mga ito ay bawat halaga sa loob 344 00:18:02,130 --> 00:18:04,590 ng mga bagay na dapat balot magkasama. 345 00:18:04,590 --> 00:18:09,180 At sa loob ng bagay na iyon, pagkatapos kami ay may pangunahing mga pares ng halaga, 346 00:18:09,180 --> 00:18:13,880 kung saan ang susi ay tumutukoy sa pangalan ng halaga sa loob ng mga bagay, 347 00:18:13,880 --> 00:18:16,790 at ang iba pang side-- sa tapat ng colon here-- 348 00:18:16,790 --> 00:18:19,850 ay ang aktwal na halaga na dapat ay naka-imbak. 349 00:18:19,850 --> 00:18:26,210 >> Kaya tingnan mo dito na kami ay may isang key na tinatawag fn na may halaga Sam, 350 00:18:26,210 --> 00:18:29,430 sinusundan ng isang kuwit, sinasabi papunta sa susunod na entry. 351 00:18:29,430 --> 00:18:33,560 Pagkatapos ng isang key na tinatawag na ln, may isang halaga ng green, 352 00:18:33,560 --> 00:18:35,840 sinusundan ng isang kuwit, sinusundan ng "print" 353 00:18:35,840 --> 00:18:43,209 na kung saan ay pagpunta sa magkaroon ng isang halaga ng function na pagpunta sa gawin ito sa linya ng code. 354 00:18:43,209 --> 00:18:45,500 Tingnan natin ang isang hakbang pabalik at alisan ng laman kung ano ang nangyayari sa dito. 355 00:18:45,500 --> 00:18:47,280 Kaya ito ay isang maliit na bit kumplikado, at kami ay nakakakita ng isang bagong bagay 356 00:18:47,280 --> 00:18:48,071 sa unang beses. 357 00:18:48,071 --> 00:18:51,190 358 00:18:51,190 --> 00:18:55,065 Ang mga keyword na "ito" ay ang bagong bagay namin nakikita dito, at kung ano ang ginagawa 359 00:18:55,065 --> 00:19:00,540 ay, ay tumutukoy sa kasalukuyang tumutol sa saklaw, right? 360 00:19:00,540 --> 00:19:03,990 Kaya kapag sinabi namin, ito points lahat ng paraan bumalik 361 00:19:03,990 --> 00:19:08,140 upang ang buong object-- kapag ginagawa namin this.fn, 362 00:19:08,140 --> 00:19:11,990 kami ay pagpunta sa pumunta sa lahat ng mga paraan pabalik sa bagay na ito, pumunta sa ang halaga fn 363 00:19:11,990 --> 00:19:16,471 at makakuha ng Sam, hilahin ito ang lahat ng paraan likod, ilagay ito dito, at pagkatapos ay ilipat sa. 364 00:19:16,471 --> 00:19:19,838 >> Madla: Kaya sa pagkuha, ay na nagawa dahil sa mga parameter 365 00:19:19,838 --> 00:19:20,621 kahulugan? 366 00:19:20,621 --> 00:19:23,870 Sam GREEN: Kaya ang tanong ay, ay ang tapos retrieval dahil sa mga parameter 367 00:19:23,870 --> 00:19:24,727 kahulugan? 368 00:19:24,727 --> 00:19:25,435 Oo, walang pasubali. 369 00:19:25,435 --> 00:19:29,660 370 00:19:29,660 --> 00:19:32,470 Ano kaya ang mangyari dito ay, ito dot sabi sa JavaScript, 371 00:19:32,470 --> 00:19:39,990 OK, Nakakakuha ako ng ilang mga halaga mula sa bagay na ito mula sa aking sarili. 372 00:19:39,990 --> 00:19:46,375 At pagkatapos ay makikita ito hitsura para sa isang entry tinatawag fn, at kung ito ay hahanap ng mga ito, 373 00:19:46,375 --> 00:19:48,470 Makikita ito ay babalik upang ang value--, ito ay Sam. 374 00:19:48,470 --> 00:19:51,540 Ngunit ko rin ay nag-type isang bagay na hindi tinukoy dito, 375 00:19:51,540 --> 00:19:54,090 at pagkatapos ay ito lamang bumalik undefined-- saan 376 00:19:54,090 --> 00:19:58,250 ay isang bagay na JavaScript ay maaaring gawin, na kung saan ay maaaring magkaroon ng mga benepisyo, 377 00:19:58,250 --> 00:20:03,190 ngunit ito ay also-- kung gumawa ka ng typo, Maaari itong magresulta sa mga kakaibang mga error. 378 00:20:03,190 --> 00:20:05,617 Kaya ito na lang subukan upang mahanap ang kahit anong sabihin mo ito upang makahanap ng 379 00:20:05,617 --> 00:20:07,700 at ito ay hindi pagpunta sa magreklamo kung hindi mahanap ito. 380 00:20:07,700 --> 00:20:11,390 Makikita lamang ito sabihin, ako ay hindi hanapin ito, at pagkatapos ay ilipat sa. 381 00:20:11,390 --> 00:20:17,581 Kaya ito ay hindi natukoy, plus blangko, plus apelyido. 382 00:20:17,581 --> 00:20:18,080 Oo. 383 00:20:18,080 --> 00:20:21,070 At pagkatapos ay maaari naming makita na kung tayo maaaring bumaba pagkatapos at access-- 384 00:20:21,070 --> 00:20:25,450 at ang tawag namin tf.print () na may panaklong. 385 00:20:25,450 --> 00:20:30,000 Ito ay pagpunta sa tumawag na print function na walang arguments, di ba? 386 00:20:30,000 --> 00:20:34,490 Ngunit kung sinabi lang namin tf.print () semicolon, wala ang mga panaklong, 387 00:20:34,490 --> 00:20:37,480 lahat na ay nagawa ay hilahin ang mga function mula sa halaga, 388 00:20:37,480 --> 00:20:40,609 ngunit hindi tunay na tinatawag na ito. 389 00:20:40,609 --> 00:20:41,162 Cool. 390 00:20:41,162 --> 00:20:42,870 HUGH Zabriskie: Dapat gawin namin ang isang bagay? 391 00:20:42,870 --> 00:20:44,161 Sam GREEN: Oo naman, ni gawin na ipaalam. 392 00:20:44,161 --> 00:20:48,750 Kaya ang maaari kong ilipat ito halimbawa sa mga console. 393 00:20:48,750 --> 00:20:51,380 394 00:20:51,380 --> 00:20:55,466 Maaari naming isipin na mayroon akong isang bagay. 395 00:20:55,466 --> 00:21:03,026 396 00:21:03,026 --> 00:21:04,150 Kaya ito ay isang simpleng bagay. 397 00:21:04,150 --> 00:21:06,910 398 00:21:06,910 --> 00:21:11,050 Ito ang isang bagay na naglalaman ng dalawang mga halaga na may dalawang mga pindutan, dalawang susi halaga 399 00:21:11,050 --> 00:21:12,710 pares. 400 00:21:12,710 --> 00:21:21,850 Kaya maaari pagkatapos ma-access ko ang halaga na naka-imbak sa loob ng bagay na ito sa pamamagitan ng paggawa x.x1, 401 00:21:21,850 --> 00:21:23,400 halimbawa, at kumuha ako ng 1 pabalik. 402 00:21:23,400 --> 00:21:29,590 Gayon din naman, x.x2, makakuha ng halaga na bumalik. 403 00:21:29,590 --> 00:21:33,330 >> At ngayon, ang talagang cool na bagay ay, maaari ko tunay na magdagdag ng isang bagay sa bagay na ito 404 00:21:33,330 --> 00:21:34,316 pagkatapos nilikha ko na ito. 405 00:21:34,316 --> 00:21:36,315 Kaya maaari mong isipin, sabihin sabihin ako ng isang function. 406 00:21:36,315 --> 00:21:44,430 407 00:21:44,430 --> 00:21:46,352 >> HUGH Zabriskie: You kailangang gawin Shift-Enter. 408 00:21:46,352 --> 00:21:47,643 >> Sam GREEN: Oh, na nakakainis. 409 00:21:47,643 --> 00:22:02,460 410 00:22:02,460 --> 00:22:04,324 Ano ang hindi gusto ang mga ito? 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 Ayan na naman. 414 00:22:08,691 --> 00:22:09,190 Cool. 415 00:22:09,190 --> 00:22:12,840 >> Kaya lang Lumikha ako mga function na ito, f, na 416 00:22:12,840 --> 00:22:17,590 ay pagpunta sa pumunta sa kasalukuyang object at i-print this.x1. 417 00:22:17,590 --> 00:22:20,330 Kaya kung tawagin ko lang f pamamagitan mismo, walang pupuntahan 418 00:22:20,330 --> 00:22:26,970 mangyari, kanan, dahil walang x1 patlang sa object na ito ay tumutukoy sa. 419 00:22:26,970 --> 00:22:39,710 Subalit, kung ang sinasabi ko, x.f = f, at pagkatapos ay ako tumawag x.f (), ako pagpunta upang makabalik 1. 420 00:22:39,710 --> 00:22:42,990 421 00:22:42,990 --> 00:22:46,530 Na f function ay ngayon kaugnay sa mga object x, 422 00:22:46,530 --> 00:22:51,800 na may isang key na tinatawag na x1 na nauugnay sa halaga ng 1, 423 00:22:51,800 --> 00:22:54,570 kaya kapag ang tawag namin this.x1, ito ay pagpunta upang makita kung ano ito ay naghahanap para sa 424 00:22:54,570 --> 00:22:56,450 at maaaring i-print ang halaga ng isang out. 425 00:22:56,450 --> 00:22:58,700 Kaya na ang isa lamang halimbawa ng uri ng mga nakatutuwang bagay 426 00:22:58,700 --> 00:23:01,190 maaari mong gawin sa mga bagay sa JavaScript. 427 00:23:01,190 --> 00:23:03,870 428 00:23:03,870 --> 00:23:07,560 >> Kaya na bersyon ay ang generic na bersyon, kahulugan 429 00:23:07,560 --> 00:23:13,780 na lumikha kami ng isang bagay gamit ang panaklong notation-- notation suhay, 430 00:23:13,780 --> 00:23:16,880 rather-- at iyon ang madaling gamitin kung gusto namin lamang 431 00:23:16,880 --> 00:23:21,440 sa isang pagkakataon ng isang partikular na bagay, ngunit paano kung gusto naming magkaroon ng higit sa isang 432 00:23:21,440 --> 00:23:22,210 ng parehong uri? 433 00:23:22,210 --> 00:23:24,440 At ang kasagutan sa na tanong ay, may mga bagay 434 00:23:24,440 --> 00:23:26,760 tinatawag na mga klase sa JavaScript rin. 435 00:23:26,760 --> 00:23:31,470 436 00:23:31,470 --> 00:23:36,420 Maaari naming lumikha ng isang function na ang ilang mga uri ng Pinasimulan 437 00:23:36,420 --> 00:23:41,690 para sa isang banyagang bagay, at gusto naming sabihin, tulad ng, 438 00:23:41,690 --> 00:23:44,550 aking class-- kaya ang pangalan ng magagamit muli object-- 439 00:23:44,550 --> 00:23:47,100 ay katumbas ng pag-andar na set up ito. 440 00:23:47,100 --> 00:23:52,280 Kaya kung ano ito ay magiging katumbas na ay ang paglikha ng isang bagay na 441 00:23:52,280 --> 00:23:55,930 ay magiging tulad lamang, kulot suhay, STR, colon, 442 00:23:55,930 --> 00:23:59,630 ito ay isang string, tuldok-kuwit, kulot suhay. 443 00:23:59,630 --> 00:24:01,880 Iyon ay ang generic object namin initialize, 444 00:24:01,880 --> 00:24:06,380 may isang pagkakaiba sa pagiging sa susunod na linya naming lumikha ng isang prototype, na 445 00:24:06,380 --> 00:24:11,190 nangangahulugan na ito ay isang default na key na magdagdag kami sa aming object na 446 00:24:11,190 --> 00:24:13,970 ay ang halaga na nakalista dito. 447 00:24:13,970 --> 00:24:20,570 Ibig sabihin na, kapag lumikha ako ng bagong Halimbawa ng mga ito MyClass object, 448 00:24:20,570 --> 00:24:27,440 ito ay pagpunta sa may pre-binuo sa loob ng ito ng isang halaga na tinatawag na str at ng iba pang halaga 449 00:24:27,440 --> 00:24:32,418 tinatawag myPrint, na kung saan ay pagpunta sa isang function. 450 00:24:32,418 --> 00:24:32,918 Kahanga-hanga. 451 00:24:32,918 --> 00:24:37,410 452 00:24:37,410 --> 00:24:37,990 >> Great. 453 00:24:37,990 --> 00:24:40,710 Kaya ang huling bagay na sabihin tungkol sa JavaScript 454 00:24:40,710 --> 00:24:46,430 ay na ito ay talagang kapaki-pakinabang para sa kung ano ay tinatawag na asynchronous operasyon. 455 00:24:46,430 --> 00:24:52,500 Asynchronous paraan ay na tayo maghintay para sa ilang mga operasyon 456 00:24:52,500 --> 00:24:57,870 upang makumpleto bago naming ilipat sa, ngunit lumipat sa habang naghihintay kami 457 00:24:57,870 --> 00:24:59,690 at pagkatapos ay may isang bagay na mangyayari sa susunod. 458 00:24:59,690 --> 00:25:03,480 At kung ano ang ibig sabihin ng mga iyon ay, ikaw maaaring maisip ng isang sitwasyon kung saan 459 00:25:03,480 --> 00:25:06,850 magpadala sa iyo ng isang kahilingan sa ang ilang mga web server sa isang lugar, 460 00:25:06,850 --> 00:25:09,670 at ito ay pagpunta sa na padalhan ka ng bumalik ilang malaking tipak ng data, i-right? 461 00:25:09,670 --> 00:25:13,320 At ang iyong mga user ay maaaring maghintay sa Samantala para sa na mangyari, 462 00:25:13,320 --> 00:25:15,200 at wala ay maaaring nangyayari sa oras na iyon. 463 00:25:15,200 --> 00:25:18,110 Ngunit hindi iyon isang mahusay na disenyo, tama? 464 00:25:18,110 --> 00:25:20,214 Hindi mo gusto ang mga web page upang mag-freeze. 465 00:25:20,214 --> 00:25:22,380 Paano kung ang user ay nagnanais na mag-click sa isang drop-down menu? 466 00:25:22,380 --> 00:25:24,870 Ito ay hindi isang mahusay na disenyo ng pattern. 467 00:25:24,870 --> 00:25:29,290 Sa halip, kung ano talaga JavaScript ay ay nagsasabing, 468 00:25:29,290 --> 00:25:31,870 OK, gawin ang operasyon na ito asynchronously. 469 00:25:31,870 --> 00:25:36,520 Kaya tulad ng, maghintay sa background, at pagkatapos ay kapag ang operasyon ay tapos na, 470 00:25:36,520 --> 00:25:39,420 tawagan ang callback function-- tumawag ilang function, 471 00:25:39,420 --> 00:25:43,800 ang ilang mga action-- sa signal na ang operasyon kami ay naghihintay para sa mga end 472 00:25:43,800 --> 00:25:45,520 Tapos na. 473 00:25:45,520 --> 00:25:51,240 At ang dahilan na ang sobrang malakas na ay, maaari naming gawin ang isang bagay, ipasa ang isang argument, 474 00:25:51,240 --> 00:25:54,440 gawin ang isang bagay, at pagkatapos ay maghintay para sa isang bagay na mangyayari. 475 00:25:54,440 --> 00:25:58,970 Pagkatapos, sa sandaling na ang isang bagay nakatapos, maaari naming tumawag ng callback. 476 00:25:58,970 --> 00:26:03,300 Iyan ay tunay na magaling dahil nagbibigay-daan ito amin gawin ang mga bagay na may Web Audio API, 477 00:26:03,300 --> 00:26:07,490 halimbawa, tulad ng pag-load ng isang audio file mula sa isang remote server 478 00:26:07,490 --> 00:26:11,660 nang hindi na maghintay para sa mga buong audio file upang i-load, 479 00:26:11,660 --> 00:26:14,440 na kung saan ay talagang masama para sa karanasan ng gumagamit. 480 00:26:14,440 --> 00:26:17,080 Cool. 481 00:26:17,080 --> 00:26:19,460 >> Huling ilang mga tala tungkol sa debugging, dahil ito 482 00:26:19,460 --> 00:26:23,682 ay isang bagay na ikaw ay pagpunta sa may sa gawin bilang bahagi ng iyong proyekto, garantisadong. 483 00:26:23,682 --> 00:26:25,140 Nabanggit ko ang console ng JavaScript. 484 00:26:25,140 --> 00:26:27,550 Ito ay isang super-pakinabang na tampok ng lahat ng mga modernong browser, 485 00:26:27,550 --> 00:26:30,300 At kami ay talagang hinihikayat ka upang makakuha ng komportable gamit ang iyong console, 486 00:26:30,300 --> 00:26:33,660 kung gusto mong makakuha ng magandang sa JavaScript. 487 00:26:33,660 --> 00:26:36,320 Ito ay sobrang madaling gamitin para sa debugging, ngunit ito rin ang 488 00:26:36,320 --> 00:26:39,440 talagang kapaki-pakinabang para sa pag-uunawa kung paano gamitin ang isang API. 489 00:26:39,440 --> 00:26:41,950 Pinapayagan nito para sa tunay na madaling pag-eksperimento 490 00:26:41,950 --> 00:26:45,910 nang hindi na kinakailangang i-type ang ilang mga code, at pagkatapos ay sumulat ng libro ito. 491 00:26:45,910 --> 00:26:47,500 Hindi mo kailangang gawin ang lahat ng mga hakbang na ito. 492 00:26:47,500 --> 00:26:49,619 Maaari mo lamang isulat ang ilang mga code sa isang linya, 493 00:26:49,619 --> 00:26:52,410 at pagkatapos ay agad na makakuha ng feedback sa kung o hindi na linya ng code 494 00:26:52,410 --> 00:26:55,230 worked-- tunay magaling. 495 00:26:55,230 --> 00:26:59,760 >> At din, isa lamang sa mga teknikal na note-- ang console ng JavaScript ay isang halimbawa 496 00:26:59,760 --> 00:27:05,680 ng isang REPL-- kaya na R-E-P-L, REPL, na ang ibig sabihin nabasa, suriin, 497 00:27:05,680 --> 00:27:06,180 loop print. 498 00:27:06,180 --> 00:27:09,100 499 00:27:09,100 --> 00:27:12,120 Ikaw ay pagpunta sa uri ng ilang mga bagay-bagay in, makikita ito basahin kung ano ang iyong nai-type sa, 500 00:27:12,120 --> 00:27:17,280 makikita ito suriin ito, at makikita ito i-print ang mga output, at pagkatapos ay magsisimula itong muli. 501 00:27:17,280 --> 00:27:22,056 Na nagbibigay-daan sa mabilis mong upang pumunta sa circles iterating, na kung saan ay talagang cool. 502 00:27:22,056 --> 00:27:25,150 503 00:27:25,150 --> 00:27:28,930 >> Hulaan ko real huling note-- ito ay ang aktwal na huling nota, yes. 504 00:27:28,930 --> 00:27:30,780 Paano namin talagang gamitin JavaScript? 505 00:27:30,780 --> 00:27:34,040 Kaya unang, maaari naming i-import ito gamit ang isang script tag 506 00:27:34,040 --> 00:27:39,500 sa tuktok o ibaba ng isang HTML file-- kahit saan sa loob ng isang file na HTML, 507 00:27:39,500 --> 00:27:40,440 Talaga. 508 00:27:40,440 --> 00:27:47,390 At sa loob ng isang script tag, may mga dalawang sub-paraan ng pag-import JavaScript. 509 00:27:47,390 --> 00:27:51,370 Ang una ay sa pamamagitan ng pagkakaroon ng isang hiwalay na JavaScript file 510 00:27:51,370 --> 00:27:58,010 na-import namin sa kabuuan nito, o sa pamamagitan ng pagkakaroon ng isang lugar ng code tulad ng script 511 00:27:58,010 --> 00:28:00,290 upang simulan, at pagkatapos ay backslash script sa dulo. 512 00:28:00,290 --> 00:28:02,620 At pagkatapos ay isulat namin lamang JavaScript sa loob ng HTML file. 513 00:28:02,620 --> 00:28:03,790 Ang mga ay ang dalawang paraan. 514 00:28:03,790 --> 00:28:05,165 Hindi ka maaaring magkaroon ng mga ito sa loob ng HTML. 515 00:28:05,165 --> 00:28:06,502 516 00:28:06,502 --> 00:28:08,126 Madla: isang mas mahusay kaysa sa iba pang mga ba? 517 00:28:08,126 --> 00:28:10,542 Sam GREEN: Ang tanong ay, ay isang mas mahusay kaysa sa iba. 518 00:28:10,542 --> 00:28:18,306 Kaya, oo, bilang isang pagsasanay style coding, at ito rin ay tulad ng isang disenyo ng pagsasanay. 519 00:28:18,306 --> 00:28:20,180 Mayroong dalawang dahilan bakit maaaring maging mas mahusay. 520 00:28:20,180 --> 00:28:23,934 Ang una ay, ito ay gumagawa ng iyong code sa isang mas nababasa maraming kung ang lahat ng iyong HTML 521 00:28:23,934 --> 00:28:27,100 ay sa isang lugar, ang lahat ng iyong CSS ay sa ibang lugar, ang lahat ng iyong JavaScript 522 00:28:27,100 --> 00:28:28,420 ay nasa isang third place. 523 00:28:28,420 --> 00:28:28,920 Right? 524 00:28:28,920 --> 00:28:32,370 Sa tingin ko dapat na namin ang usapan tungkol dito sa sections-- tulad CSS-- ano 525 00:28:32,370 --> 00:28:35,220 na is-- at ito napupunta madalas sa isa pang file. 526 00:28:35,220 --> 00:28:37,090 Kaya, katulad na uri ng konsepto dito. 527 00:28:37,090 --> 00:28:42,410 Maaari mo ring isipin na ang JavaScript Gusto gamiting muli sa higit sa isang 528 00:28:42,410 --> 00:28:47,350 HTML na pahina, o marahil ay isang mahusay na maraming mga pahina ng HTML, 529 00:28:47,350 --> 00:28:49,340 at ang pagkakaroon ng na JavaScript refactored sa isa 530 00:28:49,340 --> 00:28:51,950 maghain na maaari mong i-import sa higit sa isang lugar 531 00:28:51,950 --> 00:28:54,570 Pinapayagan ang code upang maging paraan na mas maintainable. 532 00:28:54,570 --> 00:28:57,930 Maaari mong isipin ang paggawa ng isa baguhin sa JavaScript 533 00:28:57,930 --> 00:29:00,070 at pagkakaroon upang baguhin ito sa 100 iba't ibang mga file. 534 00:29:00,070 --> 00:29:04,070 At sa halip na lamang namin maaaring baguhin ito sa isa, na kung saan ay paraan mas malakas. 535 00:29:04,070 --> 00:29:05,420 Nasagot ba ang iyong katanungan? 536 00:29:05,420 --> 00:29:07,950 Cool. 537 00:29:07,950 --> 00:29:10,830 >> Maaari din namin type sa console, bilang namin na nabanggit bago. 538 00:29:10,830 --> 00:29:15,070 At muli, isa huling note-- Web Audio ay built-in, 539 00:29:15,070 --> 00:29:16,978 hindi mo na kailangan mag-load ng kahit ano. 540 00:29:16,978 --> 00:29:17,478 Cool. 541 00:29:17,478 --> 00:29:20,519 Mayroon bang anumang mga katanungan, ang mayroon kayo anumang karagdagang mga katanungan tungkol JavaScript, 542 00:29:20,519 --> 00:29:21,930 bago lumipat kami sa? 543 00:29:21,930 --> 00:29:24,286 >> Madla: [hindi marinig] 544 00:29:24,286 --> 00:29:25,410 Sam GREEN: Ang lahat ng mga karapatan, cool. 545 00:29:25,410 --> 00:29:27,200 Kaya ngayon siya ay pagpunta sa makipag-usap tungkol sa mga API. 546 00:29:27,200 --> 00:29:28,490 >> HUGH Zabriskie: Cool. 547 00:29:28,490 --> 00:29:28,990 Salamat, Sam. 548 00:29:28,990 --> 00:29:30,184 >> Sam GREEN: Oo naman. 549 00:29:30,184 --> 00:29:32,600 HUGH Zabriskie: Galing, kaya kami ay ilipat sa mula sa JavaScript. 550 00:29:32,600 --> 00:29:35,350 Kaya ko na usapan natin ang tungkol sa ilan sa ang mga mahahalaga ng JavaScript, 551 00:29:35,350 --> 00:29:41,105 at iyon ay ang mga variable, function, mga bagay, pag-andar ng mga variable, 552 00:29:41,105 --> 00:29:41,980 asynchronous loading. 553 00:29:41,980 --> 00:29:46,100 Ito ang lahat ng mga bagay na makikita mo tignan habang ginagamit mo ang Web Audio. 554 00:29:46,100 --> 00:29:49,230 Kaya lamang kami ay pagpunta sa makipag-usap tungkol dito muna sa isang mataas na antas. 555 00:29:49,230 --> 00:29:52,120 >> Ito ay isang API, kaya ito ay isang bagay na na binuo, tulad ng sabi ni Sam, 556 00:29:52,120 --> 00:29:57,010 pakanan papunta sa JavaScript na gamitin mo sa console. 557 00:29:57,010 --> 00:30:01,020 At ito ay tunay na tulad ng C ++ code na ang tunay na binuo sa Chrome 558 00:30:01,020 --> 00:30:04,470 at Firefox, at lahat ng mga browser. 559 00:30:04,470 --> 00:30:07,060 Kaya ang pangunahing ideya sa Web Audio ay na mayroon ka 560 00:30:07,060 --> 00:30:09,440 ang ganitong uri ng pipeline ng audio, i-right? 561 00:30:09,440 --> 00:30:13,670 Kaya ang iyong mga audio data lumapit sa sa ilang mga form. 562 00:30:13,670 --> 00:30:16,690 >> May mga uri ng tatlong pangunahing forms-- mayroon ka ng osileytor, na 563 00:30:16,690 --> 00:30:21,340 lumilikha ng isang sine wave, cosine alon, kami ay pagpunta upang makita kung paano na gumagana. 564 00:30:21,340 --> 00:30:23,890 Isa pang napaka-karaniwang isa, siyempre, ay isang MP3. 565 00:30:23,890 --> 00:30:25,810 Kaya marahil kang magsimula sa isang kanta, at pagkatapos ay sa iyo 566 00:30:25,810 --> 00:30:28,320 nais na gawin ang ilang mga pag-filter na iyon at output 567 00:30:28,320 --> 00:30:30,605 na- na maaaring maging isang posibleng pinagmulan. 568 00:30:30,605 --> 00:30:32,480 At pagkatapos ay isang tunay na cool ang isa ay ang microphone. 569 00:30:32,480 --> 00:30:37,230 Kaya maaari mong gamitin ang ilang mga napaka pangunahing mga tawag sa JavaScript 570 00:30:37,230 --> 00:30:39,440 upang makakuha ng access sa mga mikropono, at kaya kung ikaw 571 00:30:39,440 --> 00:30:42,870 Nais na gumawa ng isang app tulad ng isang sukdulang detector, 572 00:30:42,870 --> 00:30:45,290 halimbawa, na tumatagal sa ang iyong boses at mga numero out 573 00:30:45,290 --> 00:30:47,740 ang pitch-- napakadaling paraan upang iyon. 574 00:30:47,740 --> 00:30:50,730 Maaari mo lamang uri ng basahin ito sa, malaman kung ang dalas, 575 00:30:50,730 --> 00:30:52,250 at pagkatapos ay output ng isang numero. 576 00:30:52,250 --> 00:30:56,080 Kaya makikita namin makita kung paano na gumagana, pati na rin. 577 00:30:56,080 --> 00:30:59,430 >> Ang patutunguhan ay talaga kung saan ang data ng audio ay output. 578 00:30:59,430 --> 00:31:02,890 Kaya sa pangkalahatan, na tulad ng iyong laptop speakers. 579 00:31:02,890 --> 00:31:05,610 Iba pang mga opsyon ay tulad ng isang ScriptProcessorNode-- 580 00:31:05,610 --> 00:31:07,990 susuriin namin ang mga node sa isang second-- ngunit karaniwang, 581 00:31:07,990 --> 00:31:11,939 alinman naglalagay ka ng sound out sa pamamagitan ng iyong computer sa pamamagitan ng mga nagsasalita, 582 00:31:11,939 --> 00:31:14,730 o ikaw ay uri ng pagtatala ng mga ito, kaya ikaw ay pagtatago ito bilang data ng audio. 583 00:31:14,730 --> 00:31:18,980 Kaya siguro kung may isang taong lumilikha ng musika sa iyong app at pagkatapos ay 584 00:31:18,980 --> 00:31:22,410 Gusto mong i-record na at baka gusto i-export ito sa SoundCloud, para example-- 585 00:31:22,410 --> 00:31:25,281 na magiging isang paraan upang gawin iyon. 586 00:31:25,281 --> 00:31:27,030 Ang lahat ng mga nakakatuwang bagay-bagay, na kung saan namin makipag-usap tungkol sa, 587 00:31:27,030 --> 00:31:29,950 ang mangyayari sa pagitan ng dalawang mga punto, kung saan namin load sa musika 588 00:31:29,950 --> 00:31:31,410 at pagkatapos ay output ito. 589 00:31:31,410 --> 00:31:36,660 >> Kaya ako ng pagpunta sa makipag-usap tungkol sa limang yugto ng audio produksyon sa isang segundo. 590 00:31:36,660 --> 00:31:38,950 Mayroon kaming ito bagay na tinatawag isang AudioContext, na 591 00:31:38,950 --> 00:31:41,580 ay ang maliit na wrapper nakikita natin dito. 592 00:31:41,580 --> 00:31:49,980 Talaga kung ano AudioContext is-- kung tayo pumunta sa JavaScript console sa ngayon, 593 00:31:49,980 --> 00:31:52,740 maaari naming lumikha ng isa ngayon. 594 00:31:52,740 --> 00:31:54,040 Isang halimbawa lang ng REPL, di ba? 595 00:31:54,040 --> 00:31:57,880 Kami ay pagbabasa, evaluate, at ito ng mga kopya. 596 00:31:57,880 --> 00:32:00,260 >> AudioContext ay isang pandaigdigang estado. 597 00:32:00,260 --> 00:32:05,500 Ito ay isang struct, na ang lahat ng isang bagay dito, iniingatan at ito impormasyon 598 00:32:05,500 --> 00:32:09,960 tungkol sa mga bagay na nangyayari sa sa screen na may kaugnayan sa audio. 599 00:32:09,960 --> 00:32:15,220 Ang isang halimbawa ay ang kasalukuyang oras. 600 00:32:15,220 --> 00:32:18,910 Ito ay nagsasabi sa iyo ang bilang ng mga segundo, napaka tiyak, 601 00:32:18,910 --> 00:32:20,890 dahil sa ang mga web page load. 602 00:32:20,890 --> 00:32:24,110 Kaya ito ay isang talagang kapaki-pakinabang maliit na ari-arian na maaari mong gamitin. 603 00:32:24,110 --> 00:32:27,898 Ito ay basahin only-- tingin ko talaga maaari mong subukan na i-set ito ng isang halaga. 604 00:32:27,898 --> 00:32:29,856 Makikita ito sabihin itinakda mo ito, at pagkatapos ay kung i-print mo ito 605 00:32:29,856 --> 00:32:31,439 again-- ito ay hindi tunay na ganap na trabaho. 606 00:32:31,439 --> 00:32:34,472 Kaya doon ay read-only mga katangian sa JavaScript. 607 00:32:34,472 --> 00:32:36,430 Ito ay talagang kapaki-pakinabang kung ikaw ay ang uri ng pag-sync 608 00:32:36,430 --> 00:32:38,610 isang pulutong ng mga iba't-ibang impormasyon, kapag ikaw ay 609 00:32:38,610 --> 00:32:41,280 uri ng paglalaro ng iba't ibang mga tunog. 610 00:32:41,280 --> 00:32:43,630 >> Ang isa pang talagang kapaki-pakinabang ang isa ay ang konteksto destination. 611 00:32:43,630 --> 00:32:46,587 612 00:32:46,587 --> 00:32:49,670 Tiyak, kung interesado ka, maging sinusubukan ito sa iyong sariling console karapatan 613 00:32:49,670 --> 00:32:50,980 ngayon. 614 00:32:50,980 --> 00:32:53,150 Kaya ito ay isang AudioDestinationNode. 615 00:32:53,150 --> 00:32:56,480 Talaga kung ano ang sinasabi ay, kung saan ang pagpunta ay ang output? 616 00:32:56,480 --> 00:32:59,590 Kaya may dalawang tunay na mga pagpipilian dito. 617 00:32:59,590 --> 00:33:01,940 Karaniwan ang mga default ay ang iyong mga nagsasalita lamang, 618 00:33:01,940 --> 00:33:05,150 kaya AudioDestinationNode talaga lang sabi 619 00:33:05,150 --> 00:33:09,240 may mga zero output sa tunog pagpasok, na ipinadala sa mga speaker. 620 00:33:09,240 --> 00:33:12,050 Kaya sa pangkalahatan, hindi mo upang i-play sa mga iyon. 621 00:33:12,050 --> 00:33:15,720 Kung ikaw ay interesado sa aktwal na paggamit ang ScriptProcessorNode para sa recording, 622 00:33:15,720 --> 00:33:16,990 siguradong shoot akin ng isang email sa ibang pagkakataon dahil na 623 00:33:16,990 --> 00:33:18,330 mas kumplikado nang kaunti. 624 00:33:18,330 --> 00:33:21,590 Ngunit sa pangkalahatan, ikaw ay uri lamang ng outputting tunog sa ilang mga form. 625 00:33:21,590 --> 00:33:24,347 So cool, makikita namin lumipat pabalik dito. 626 00:33:24,347 --> 00:33:25,180 Madla: Sorry. 627 00:33:25,180 --> 00:33:26,054 HUGH Zabriskie: Oo. 628 00:33:26,054 --> 00:33:28,770 Madla: alam ko sinabi mong makipag-usap sa iyo mamaya tungkol sa pagtatala. 629 00:33:28,770 --> 00:33:31,550 Maaari mong interface na may Tools Pro? 630 00:33:31,550 --> 00:33:33,120 >> HUGH Zabriskie: Sa Tools Pro? 631 00:33:33,120 --> 00:33:35,260 Tingnan natin. 632 00:33:35,260 --> 00:33:37,220 Hindi sa tingin ko. 633 00:33:37,220 --> 00:33:41,670 Kaya pagpunta sa pagitan ng mga client, kung saan ay ang JavaScript 634 00:33:41,670 --> 00:33:44,310 console, at ang iyong aktwal computer, ay sa pangkalahatan 635 00:33:44,310 --> 00:33:46,490 isang bagay na uri ng off ang mga limitasyon, kung ikaw 636 00:33:46,490 --> 00:33:52,320 ay, uri ng likas na katangian ng the-- ito ay uri ng isang disenyo ng bagay, 637 00:33:52,320 --> 00:33:57,770 ngunit subukan mong panatilihing hiwalay ang browser mula sa aktwal na computer ng user. 638 00:33:57,770 --> 00:34:02,310 Sa pangkalahatan, ang tanging bagay na nagawa mong access ang mikropono o camera. 639 00:34:02,310 --> 00:34:04,730 Kayo ay hindi maaaring, ako hindi nag-iisip, gamitin ang Tools Pro. 640 00:34:04,730 --> 00:34:07,480 Gayunpaman, kung ikaw ay lumikha isang track sa Tools Pro, 641 00:34:07,480 --> 00:34:12,710 nailipat na, maaari mong i-load na sa dito, ang filter na ito, halimbawa, 642 00:34:12,710 --> 00:34:16,820 prosesong iyon, at i-record na ito sa isang Audio Destination-- o, no-- isang globo 643 00:34:16,820 --> 00:34:17,870 Processor Node. 644 00:34:17,870 --> 00:34:20,730 At pagkatapos ay mula doon, maaari mong i-export na sa SoundCloud, ikaw 645 00:34:20,730 --> 00:34:25,320 maaaring ipadala ito sa isang email, o kahit anong gusto mo mula doon. 646 00:34:25,320 --> 00:34:31,159 >> Subalit mayroong mga uri ng isang bahagyang barrier pagitan ng paggawa ng musika sa iyong computer 647 00:34:31,159 --> 00:34:33,050 at sa paggawa ng musika online. 648 00:34:33,050 --> 00:34:37,940 >> Sam GREEN: At na hindi natatangi sa API na ito. 649 00:34:37,940 --> 00:34:44,060 Ito ay isang tampok ng seguridad ng Chrome, at Tingin ko ang bawat iba pang mga modernong browser. 650 00:34:44,060 --> 00:34:45,860 Ang browser ay self-contained. 651 00:34:45,860 --> 00:34:50,980 Kaya halimbawa, ang isang pahina ng web ay hindi maaaring gumamit ng JavaScript upang i-on ang tunog 652 00:34:50,980 --> 00:34:54,190 on sa iyong speaker, halimbawa. 653 00:34:54,190 --> 00:34:58,120 O kaya hindi ito maaaring buksan ang iyong computer off. 654 00:34:58,120 --> 00:35:01,530 At walang intermediate point pagitan ng mga dalawang mga bagay, kanan, 655 00:35:01,530 --> 00:35:05,960 kaya alinman mayroon kang isang kumpleto abstraction, 656 00:35:05,960 --> 00:35:10,050 o buksan mo ang seguridad kapintasan ng pagpapaalam 657 00:35:10,050 --> 00:35:14,440 isang programmer may hindi magandang intensyon gawin kahit anong gusto nila sa iyong laptop. 658 00:35:14,440 --> 00:35:18,104 At iyon ang dahilan kung bakit Chrome ay self-contained. 659 00:35:18,104 --> 00:35:19,310 >> HUGH Zabriskie: Oo. 660 00:35:19,310 --> 00:35:20,840 Ba na magkaroon ng kahulugan? 661 00:35:20,840 --> 00:35:21,369 Cool, cool. 662 00:35:21,369 --> 00:35:23,160 Lamang ako ay pumapasok sa ipakita ang isang halimbawa ng isa. 663 00:35:23,160 --> 00:35:25,118 Ito ay medyo marami bilang malayo gaya ka ng, sa mga tuntunin 664 00:35:25,118 --> 00:35:26,950 ng pag-access sa computer ng gumagamit. 665 00:35:26,950 --> 00:35:30,180 Kung mayroon kang isang USB keyboard naka-plug in, maaari mong gamitin ang isang bagay na tinatawag na ang Web 666 00:35:30,180 --> 00:35:32,180 MIDI API, na kung saan hindi kami talagang makipag-usap tungkol dito, 667 00:35:32,180 --> 00:35:36,330 ngunit ito ay isa pang API na binuo sa hindi bababa sa Chrome-- muli, 668 00:35:36,330 --> 00:35:41,570 ito ang dahilan kung bakit gustung-gusto namin Chrome-- Sa tingin ko ang Firefox o Safari, 669 00:35:41,570 --> 00:35:44,300 ito ay isang madaling bagay na Mayroon google-- iba't ibang mga browser 670 00:35:44,300 --> 00:35:46,917 iba't-ibang suporta para saan APIs sila ay ipinatupad. 671 00:35:46,917 --> 00:35:49,875 Ngunit kung nais mong i-plug sa isang keyboard at trabaho sa impormasyon na iyon, 672 00:35:49,875 --> 00:35:52,850 uri ng ipadala ang keyboard impormasyon sa paglipas ng sa computer 673 00:35:52,850 --> 00:35:57,620 at pagkatapos ay gamitin na online, ito API ay kung saan gusto mo ay nagtatrabaho na. 674 00:35:57,620 --> 00:35:58,150 >> Cool. 675 00:35:58,150 --> 00:35:58,710 SIGE. 676 00:35:58,710 --> 00:36:01,320 Kaya, mabilis na gumagalaw sa dito. 677 00:36:01,320 --> 00:36:03,310 Paano kami ginagawa sa oras? 678 00:36:03,310 --> 00:36:04,210 >> Tagapagsalita 1: Mga 15. 679 00:36:04,210 --> 00:36:05,543 >> HUGH Zabriskie: 15 minuto ang natitira? 680 00:36:05,543 --> 00:36:06,160 OK, cool. 681 00:36:06,160 --> 00:36:08,170 Kaya makikita namin lahi maaga dito. 682 00:36:08,170 --> 00:36:13,500 >> Kaya talaga, ang pangunahing punto ng nag-iisip ng mga ito bilang isang tubo 683 00:36:13,500 --> 00:36:16,430 ay na ang bawat hakbang sa tubo ay isang serye ng mga nodes audio. 684 00:36:16,430 --> 00:36:19,284 685 00:36:19,284 --> 00:36:20,950 Ang aming source, sabihin natin, ay isang osileytor. 686 00:36:20,950 --> 00:36:23,380 Kailangan namin na lumikha ng isang osileytor node. 687 00:36:23,380 --> 00:36:25,690 At iyon ay uri lamang ng maliit na function-- 688 00:36:25,690 --> 00:36:30,460 at lahat sila ay base sa labas ng audio konteksto dito. 689 00:36:30,460 --> 00:36:32,885 >> Madla: Kapag nagsabi na ito osileytor, ang ibig sabihin na 690 00:36:32,885 --> 00:36:37,250 ito ay tunay na literal ng pagpunta mula sa dalawang magkaibang pole pabalik-balik? 691 00:36:37,250 --> 00:36:41,170 >> HUGH Zabriskie: Hindi, ito ay tulad ng isang digital representasyon. 692 00:36:41,170 --> 00:36:42,740 Talaga Ito ay ipinatupad sa C ++. 693 00:36:42,740 --> 00:36:46,460 Ako, hindi nga ang specs ng kung paano aktwal na ito ay ipinatupad, 694 00:36:46,460 --> 00:36:48,500 ngunit ang lahat ng ito ay gumagana tulad ng binary data. 695 00:36:48,500 --> 00:36:51,260 696 00:36:51,260 --> 00:36:52,370 Sa totoo lang, oo. 697 00:36:52,370 --> 00:36:53,950 Iyon ay nagsasabi, kaya kong talaga, kung kayo ay interesado, 698 00:36:53,950 --> 00:36:56,533 Kaya kong magpadala sa iyo ng kaunti pa impormasyon tungkol sa kung paano waveforms 699 00:36:56,533 --> 00:37:00,181 ay nag-iingat sa pagkakaroon ng isang digital format. 700 00:37:00,181 --> 00:37:00,680 OK, cool. 701 00:37:00,680 --> 00:37:03,120 >> Kaya kami ay pagbuo ng isang tono tulad ng isang sine iwagayway o isang bagay tulad na, siguro 702 00:37:03,120 --> 00:37:04,190 440 Hertz. 703 00:37:04,190 --> 00:37:05,830 Lumikha kami ng isang osileytor. 704 00:37:05,830 --> 00:37:09,180 Kung gusto naming i-set ang lakas ng tunog, namin kumonekta sa anumang bagay sa isang GainNode, 705 00:37:09,180 --> 00:37:12,500 kung saan maaari naming gawin sa .creategain. 706 00:37:12,500 --> 00:37:14,250 Na set ang iyong lakas ng tunog. 707 00:37:14,250 --> 00:37:17,820 Maaari mong pumasa na papunta sa anumang sa mga iba pang options-- rin, 708 00:37:17,820 --> 00:37:20,300 kaya isang pinagmulan buffer audio node ay kung saan maaari ka 709 00:37:20,300 --> 00:37:23,660 tindahan ng isang MP3 na na-load sa. 710 00:37:23,660 --> 00:37:27,670 >> Biquad filter ay para sa pag-filter kung gusto mong gawin ang lahat ng base sa labas 711 00:37:27,670 --> 00:37:29,630 ng isang kanta, o isang bagay na tulad ng. 712 00:37:29,630 --> 00:37:32,450 Huwag sana nais mong kumuha ng ang base sa labas ng isang kanta. 713 00:37:32,450 --> 00:37:36,980 At AudioDestination node ay, muli, tulad ng kung saan ang aming mga finalization ay. 714 00:37:36,980 --> 00:37:39,980 Kung ikaw ba ay interesado sa nakikita mo lahat ng iba't ibang posibleng pagpipilian, 715 00:37:39,980 --> 00:37:45,190 pumunta lamang sa tab at hayaan ang auto-complete lumapit. 716 00:37:45,190 --> 00:37:48,690 At kung ikaw ay lumikha, makikita mo ang lahat ng iba't-ibang mga bagay-bagay na maaari mong likhain. 717 00:37:48,690 --> 00:37:50,398 Maaari kang lumikha ng mga dynamic na script processors, 718 00:37:50,398 --> 00:37:52,940 Hindi ko kahit na alam kung ano na ay, para sa paghahalo mergers channel 719 00:37:52,940 --> 00:37:55,930 at splitters channel at lahat na. 720 00:37:55,930 --> 00:37:56,430 Cool. 721 00:37:56,430 --> 00:37:59,560 722 00:37:59,560 --> 00:38:01,390 >> Kaya ito ay lamang ng isang halimbawa ng isang pipeline. 723 00:38:01,390 --> 00:38:03,580 Kaya kami ay may tatlong mga pinagkukunan na pumapasok. 724 00:38:03,580 --> 00:38:06,830 Siguro ang mga ito ay waveforms, marahil ito ay mga MP3. 725 00:38:06,830 --> 00:38:08,740 One ang pagpunta sa pamamagitan ng isang filter, isa pa ni 726 00:38:08,740 --> 00:38:12,404 pagkuha ng pangit ng ibang ang sariling pag-pan pakaliwa at pakanan. 727 00:38:12,404 --> 00:38:15,320 Maaari mong gawin ang lahat ng uri ng bagay at lahat sila makakuha ng mixed paligid ng sama-sama, 728 00:38:15,320 --> 00:38:18,880 at pagkatapos ay sa labas dumating ang audio sa dulo, tulad ng destination. 729 00:38:18,880 --> 00:38:22,720 Ito ay isang halimbawa ng kung ano ang higit pa Mukhang kumplikado Web code Audio. 730 00:38:22,720 --> 00:38:26,720 Lumilikha ka ng lahat ng mga iba't ibang bagay kanan here-- 731 00:38:26,720 --> 00:38:27,706 Hindi ako sigurado ng mga ito. 732 00:38:27,706 --> 00:38:29,120 Hindi, ito ay hindi mag-zoom in. 733 00:38:29,120 --> 00:38:29,620 SIGE. 734 00:38:29,620 --> 00:38:31,257 >> Sam GREEN: Gawin mo 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: Hindi, hindi. 737 00:38:33,000 --> 00:38:33,500 Control-- 738 00:38:33,500 --> 00:38:36,540 739 00:38:36,540 --> 00:38:38,140 >> HUGH Zabriskie: Oh, Control, scroll? 740 00:38:38,140 --> 00:38:38,780 Oh, gotcha. 741 00:38:38,780 --> 00:38:41,480 Oo. 742 00:38:41,480 --> 00:38:42,240 Wow, nope, nope. 743 00:38:42,240 --> 00:38:42,740 SIGE. 744 00:38:42,740 --> 00:38:46,090 Hindi ko gagawin iyon. 745 00:38:46,090 --> 00:38:48,300 >> Kaya oo, ito sa unang section dito, tingnan mo 746 00:38:48,300 --> 00:38:52,720 kami ay ang paglikha ng lahat ng mga iba't-ibang nodes sa labas ng konteksto. 747 00:38:52,720 --> 00:38:54,980 Lang kami piecing ito magkasama sa ikalawang bahagi 748 00:38:54,980 --> 00:38:56,980 sa pamamagitan ng function na ito na tinatawag na Connect. 749 00:38:56,980 --> 00:38:58,830 Iyan ay isang tunay na key function sa Web Audio. 750 00:38:58,830 --> 00:39:01,930 Ito ay nangangahulugan lamang sa sandaling nagawa mo isang bagay na may tunog sa isang node, 751 00:39:01,930 --> 00:39:03,705 ipasa ito sa mga susunod na node. 752 00:39:03,705 --> 00:39:05,830 Kaya kami ng pinagmulan, ito nag-uugnay sa analyzer, 753 00:39:05,830 --> 00:39:09,140 analyzer ay isang bagay na may ito, ito ang papunta sa pagbaluktot, at iba pa, 754 00:39:09,140 --> 00:39:12,725 at sa patutunguhang sa ibaba dito mismo. 755 00:39:12,725 --> 00:39:13,225 Cool. 756 00:39:13,225 --> 00:39:14,640 OK, kaya kami ay patuloy na gumagalaw sa. 757 00:39:14,640 --> 00:39:17,180 >> Pipeline-- Ang muli, ang mga ang pinaka karaniwang mga pipeline, 758 00:39:17,180 --> 00:39:21,300 kaya makipag-usap namin tungkol sa lahat ng mga bagay tulad ng pagbaluktot, pag-pan, ang lahat ng mga bagay-bagay na ito. 759 00:39:21,300 --> 00:39:24,280 Kung talagang interesado ka sa iyo sa paggamit ng mga bagay-bagay Tools Pro, 760 00:39:24,280 --> 00:39:25,820 mga marahil interes sa inyo. 761 00:39:25,820 --> 00:39:27,740 Kung hindi, maaaring mo lamang nais na i-play ang tunog, 762 00:39:27,740 --> 00:39:29,990 o marahil ay gusto mo lamang itakda ang lakas ng tunog sa tunog. 763 00:39:29,990 --> 00:39:35,270 Ang mga ay ang dalawang pinaka-karaniwang uri ng pipelines sa audio produksyon. 764 00:39:35,270 --> 00:39:38,640 >> Muli, ang mga paraan na maaari mong gawin ito in bilang isang oscillator-- gayon, sabihin 765 00:39:38,640 --> 00:39:42,460 gawin ang isang demo ng na karapatan dito. 766 00:39:42,460 --> 00:39:47,090 767 00:39:47,090 --> 00:39:52,225 Kaya kami ay pagpunta upang lumikha ng isang simpleng context audio dito, 768 00:39:52,225 --> 00:39:54,350 at mula sa na kami ay pagpunta upang lumikha ng aming osileytor. 769 00:39:54,350 --> 00:39:58,620 Kaya na ay, muli, hindi namin lamang pagpunta sa tawag Lumikha Oscillator. 770 00:39:58,620 --> 00:40:07,030 Kami ay pagpunta upang itakda ang isang dalas sa na iyon, 440 Hertz, paborito ng lahat. 771 00:40:07,030 --> 00:40:13,290 Pagkatapos ay ikonekta namin na sa destination point-- na kung saan ay ang speaker, para 772 00:40:13,290 --> 00:40:15,750 context destination. 773 00:40:15,750 --> 00:40:21,400 Sa wakas, sinasabi lang namin, simulan zero segundo mula ngayon, at kami ay may tunog? 774 00:40:21,400 --> 00:40:22,400 >> [Tugtog] 775 00:40:22,400 --> 00:40:24,980 >> HUGH Zabriskie: Ayan na naman. 776 00:40:24,980 --> 00:40:25,940 Ito lamang ay isang sine wave. 777 00:40:25,940 --> 00:40:26,440 OK, cool. 778 00:40:26,440 --> 00:40:28,274 At pagkatapos ay makikita itigil namin na. 779 00:40:28,274 --> 00:40:30,520 >> Madla: Saan mo dumating feedback na mula sa? 780 00:40:30,520 --> 00:40:31,250 >> HUGH Zabriskie: feedback Ang? 781 00:40:31,250 --> 00:40:32,458 Oh, marahil ang aming mga mikropono. 782 00:40:32,458 --> 00:40:34,221 783 00:40:34,221 --> 00:40:35,470 Kaya oo, na kung paano mo gawin ito. 784 00:40:35,470 --> 00:40:37,261 At talagang, kung ako ay iningatan ito tumatakbo, ikaw ay 785 00:40:37,261 --> 00:40:39,540 ay maaaring magkaroon ng mga frequency halaga bilang ito ay tumatakbo, 786 00:40:39,540 --> 00:40:43,320 kaya na ang isang bagay na masaya upang i-play sa paligid. 787 00:40:43,320 --> 00:40:44,930 Cool. 788 00:40:44,930 --> 00:40:46,600 Iyan ay palaging isang magandang isa upang ipakita. 789 00:40:46,600 --> 00:40:48,792 >> Sam GREEN: Kami ay hindi isipin ang tungkol na, ay namin? 790 00:40:48,792 --> 00:40:50,500 HUGH Zabriskie: Oo, iyan ay isang isang bastos. 791 00:40:50,500 --> 00:40:53,249 Kaya, buffer loading-- kukunin ko na ipakita ang isang halimbawa ng na sa dulo. 792 00:40:53,249 --> 00:40:55,090 Na-load ng isang MP3. 793 00:40:55,090 --> 00:40:58,880 At mikropono, gumamit ka ng isang function na lamang tinatawag Navigator.getUserMedia () 794 00:40:58,880 --> 00:41:03,240 upang humiling ng access sa mga gumagamit mikropono para sa impormasyon na iyon. 795 00:41:03,240 --> 00:41:05,610 >> Narito ang pag-filter, makikita ko lamang panatilihin ang paglipat mula sa ito. 796 00:41:05,610 --> 00:41:08,600 Ito ay medyo mataas na antas, ngunit lamang daan sa iyo filter upang 797 00:41:08,600 --> 00:41:16,154 >> [Beep] 798 00:41:16,154 --> 00:41:18,320 Pinapayagan din ng Filtering mo upang lumikha ng mga bagay-bagay tulad ng rosas 799 00:41:18,320 --> 00:41:20,050 ingay, brown ingay, puti ingay. 800 00:41:20,050 --> 00:41:24,330 Kung nais mong lumikha ng purong ingay, na ang ilang mga tao ang pag-ibig sa gulo sa paligid na may, 801 00:41:24,330 --> 00:41:27,490 maaari mong gamitin ang Web Audio pag-filter upang gawin iyon. 802 00:41:27,490 --> 00:41:30,039 >> Audio Panning-- kaya isipin kung ikaw ay sumusulat ng isang laro 803 00:41:30,039 --> 00:41:32,330 at gusto mo ang tunog sa tunog tulad ng ito ay darating, tulad ng, 804 00:41:32,330 --> 00:41:36,090 shooting sa buong screen, ikaw ay maaaring gamitin ang pag-pan ng audio 805 00:41:36,090 --> 00:41:39,770 upang lumikha ng ganitong uri ng kono, saan like-- ito ay medyo mathy, 806 00:41:39,770 --> 00:41:41,850 ngunit ito ay aktwal na talagang cool na kung ikaw ay makakuha ito ng trabaho, 807 00:41:41,850 --> 00:41:44,500 at mayroong ilang mga mabuting tutorial sa mga ito ang maaari kong ipadala sa iyo. 808 00:41:44,500 --> 00:41:46,400 Talaga, maaari mong uri ng lumikha ng mga sound 809 00:41:46,400 --> 00:41:50,480 ng isang bagay na nangyayari sa pamamagitan ng sa isang 3D na paraan. 810 00:41:50,480 --> 00:41:57,350 At kung ikaw ay may isang DJ interes, maaari mong simulan ang paghahalo at cross-dahan songs. 811 00:41:57,350 --> 00:42:01,260 >> Ito ay lamang ng ilang mga tunay pangunahing code, talaga kung ano ang aking ginawa bago. 812 00:42:01,260 --> 00:42:06,140 Itinatakda nito ang dami ng osileytor, kaya gumawa kami ng aming mga oscillator 813 00:42:06,140 --> 00:42:07,380 na lumilikha ng waveform. 814 00:42:07,380 --> 00:42:09,940 Gumawa kami ng aming GainNode, itakda ang aming mga frequency, 815 00:42:09,940 --> 00:42:14,170 at pagkatapos ay ikonekta ang osileytor sa GainNode, na pagkatapos ay karaniwang nagbabago 816 00:42:14,170 --> 00:42:16,760 kung magkano ang signal ay pinahihintulutan sa pamamagitan ng. 817 00:42:16,760 --> 00:42:20,467 Ngunit talagang, ito ay isang digital bagay, kaya ito ay mas just-- oo. 818 00:42:20,467 --> 00:42:23,550 Iyan ay hindi kung ano ang aktwal na nangyayari, ngunit iyan ay kung ano ang mangyayari sa tunay na buhay 819 00:42:23,550 --> 00:42:24,393 may makakuha. 820 00:42:24,393 --> 00:42:27,258 >> Madla: --quantization mga parameter lakas ng tunog? 821 00:42:27,258 --> 00:42:28,174 HUGH Zabriskie: Sorry? 822 00:42:28,174 --> 00:42:30,360 Madla: Ito ba ay isang quantized parameter volume? 823 00:42:30,360 --> 00:42:31,840 HUGH Zabriskie: Oo. 824 00:42:31,840 --> 00:42:34,620 At ito ay isang bagay na talagang ako kulang pa sa aking kaalaman, 825 00:42:34,620 --> 00:42:38,010 kung paano gumagana ang pakinabang sa isang digital na antas. 826 00:42:38,010 --> 00:42:40,140 Alam ko na may aktwal na signal, ito ay isa lamang 827 00:42:40,140 --> 00:42:45,120 pagkontrol ng kung magkano ang iyong pagpapalakas ng signal. 828 00:42:45,120 --> 00:42:47,017 Kaya, oo. 829 00:42:47,017 --> 00:42:50,100 Magpapadala ako sa iyo ng karagdagang impormasyon tungkol na, dahil gusto ko maging curious talaga 830 00:42:50,100 --> 00:42:51,099 upang malaman ang higit pa tungkol sa na. 831 00:42:51,099 --> 00:42:54,090 Ngunit isa lamang ang mga parameter ay, ang isa ay ang fold-- 832 00:42:54,090 --> 00:42:59,690 ang louder signal-- at zero ay walang signal, o hindi mo marinig ang anumang tunog. 833 00:42:59,690 --> 00:43:03,150 Susubukan naming laktawan time demo para dahil na ito ay isa lamang ang aking ginawa bago. 834 00:43:03,150 --> 00:43:07,630 At muli, ang Context.Destination ay ang destination node audio. 835 00:43:07,630 --> 00:43:08,360 Kahanga-hanga, OK. 836 00:43:08,360 --> 00:43:10,470 >> Kaya ako ng pagpunta sa gawin ang isang mabilis na dalawang demo. 837 00:43:10,470 --> 00:43:11,760 Paano kami ginagawa sa oras? 838 00:43:11,760 --> 00:43:12,640 >> Tagapagsalita 1: Tungkol sa 10 minuto. 839 00:43:12,640 --> 00:43:13,130 >> HUGH Zabriskie: 10 minuto? 840 00:43:13,130 --> 00:43:13,630 Great! 841 00:43:13,630 --> 00:43:14,320 Kahanga-hanga. 842 00:43:14,320 --> 00:43:19,010 >> Kaya ang unang isa ako pagpunta sa huwag, ito ay tinatawag My Favorite Song. 843 00:43:19,010 --> 00:43:22,410 Kaya ito ay lamang ng isang maliit na HTML JavaScript. 844 00:43:22,410 --> 00:43:25,510 Kami ay pagpunta sa may dalawang mga pindutan sa pahina ng i-play ang aking paboritong kanta 845 00:43:25,510 --> 00:43:29,192 at itigil ang aking mga paboritong kanta. 846 00:43:29,192 --> 00:43:30,180 Kukunin ko na baguhin ito. 847 00:43:30,180 --> 00:43:32,110 >> Madla: Takpan ang iyong mikropono. 848 00:43:32,110 --> 00:43:33,430 >> HUGH Zabriskie: Oo. 849 00:43:33,430 --> 00:43:36,300 At ako load in dito isang script na basically-- 850 00:43:36,300 --> 00:43:38,520 at ito ay talagang kapaki-pakinabang para sa paglo-load ng isang MP3, 851 00:43:38,520 --> 00:43:41,820 kaya ito ay gumagawa lamang ng naglo-load ng mga MP3 na paraan ng mas mabilis. 852 00:43:41,820 --> 00:43:44,180 Ito ay karaniwang lamang ng isang bata. 853 00:43:44,180 --> 00:43:48,737 Ito lamang ang gumagawa ang proseso ng naglo-load sa MP3s mas mabilis, 854 00:43:48,737 --> 00:43:51,570 sa kabilang banda ikaw ay gumagamit ng HTTP kahilingan, uri ng tulad ng kung ano ang aming ginagawa 855 00:43:51,570 --> 00:43:53,950 sa kasalukuyang piraso-set na may Server. 856 00:43:53,950 --> 00:43:55,950 Ito ay talagang pangit, mo hindi mo nais na gawin ito. 857 00:43:55,950 --> 00:44:04,110 >> Kaya ang tao na ito, Boris SMUs, isinulat ng isang tunay na kapaki-pakinabang na maliit na kasangkapan na tinatawag na BufferLoader. 858 00:44:04,110 --> 00:44:08,780 Lahat ng gagawin mo ay para lang pumasa ito sa konteksto, ipasa mo ito ng isang list-- 859 00:44:08,780 --> 00:44:11,327 o, oo, ito ay isang listahan sa JavaScript? 860 00:44:11,327 --> 00:44:12,160 Sam GREEN: Ang isang array. 861 00:44:12,160 --> 00:44:14,201 HUGH Zabriskie: Oh, ito ay isang array, na karapatan. 862 00:44:14,201 --> 00:44:18,660 Ito ay isang hanay ng mga landas sa iba't-ibang mga file. 863 00:44:18,660 --> 00:44:21,990 At pagkatapos mong ipasa ito ng isang function. 864 00:44:21,990 --> 00:44:25,530 Ito ang callback kami ay pakikipag-usap tungkol sa asynchronous loading. 865 00:44:25,530 --> 00:44:28,720 Iyon ay tatawaging sa sandaling ang file load. 866 00:44:28,720 --> 00:44:33,780 At na function na ay tinatawag na kapag ng file load tumatagal bilang perimeter 867 00:44:33,780 --> 00:44:35,840 isang array ng load buffer. 868 00:44:35,840 --> 00:44:37,990 Kaya na nangyayari dito. 869 00:44:37,990 --> 00:44:41,180 Karaniwang, BufferList ay magiging isa value-- 870 00:44:41,180 --> 00:44:46,380 o ito ay magiging isang hanay ng mga haba ng isa, na may sa ito sa index 871 00:44:46,380 --> 00:44:51,320 zero ang buong load ng file ng MP3. 872 00:44:51,320 --> 00:44:53,320 Kaya kung ano ang gagawin ko kapag matapos ko loading ay, ako lang 873 00:44:53,320 --> 00:44:57,430 lumikha ng isang pinagmulan buffer, na ay isang audio buffer source node. 874 00:44:57,430 --> 00:45:03,410 Ang susunod na hakbang ay ang load ko sa source.buffer bilang ang buong load buffer 875 00:45:03,410 --> 00:45:06,740 mula sa BufferList-- ito ay isang pulutong ng mga buffers-- 876 00:45:06,740 --> 00:45:10,255 at pagkatapos ay kumonekta sa iyo na ang audio nagpapahina ng lakas sa patutunguhan. 877 00:45:10,255 --> 00:45:12,380 Kaya kung ano ito ay pagpunta sa gawin ay lamang maglagay lamang ng mga MP3 878 00:45:12,380 --> 00:45:15,260 sa pamamagitan ng tuwid sa output, at agad na simulan ito 879 00:45:15,260 --> 00:45:18,010 sa pagkuha ng mga tawag na ito. 880 00:45:18,010 --> 00:45:21,660 >> Cool, ni makita kaya hayaan ito mangyayari sa pagkilos. 881 00:45:21,660 --> 00:45:24,490 Aking [hindi marinig] dito, tingnan natin. 882 00:45:24,490 --> 00:45:26,430 Kaya ako lamang ang pagpunta sa magsimula ng isang pangunahing server. 883 00:45:26,430 --> 00:45:28,660 Iyan ay isang bagay na kailangan mong gawin kung ikaw ay 884 00:45:28,660 --> 00:45:32,490 paggawa ng mga kahilingan para sa paglo-load ng mga file. 885 00:45:32,490 --> 00:45:34,140 Pupunta ako upang simulan ang isang pangunahing server. 886 00:45:34,140 --> 00:45:38,200 Ito ay isa lamang ang iyong buong Pset ngayon sa isang linya, 887 00:45:38,200 --> 00:45:43,930 ngunit lamang ito ay nagsisimula isang server sa port 80/80. 888 00:45:43,930 --> 00:45:47,300 Kaya pumunta kami sa paglipas dito, kami ay pagpunta sa load 80/80, 889 00:45:47,300 --> 00:45:49,110 kami ay pagpunta sa pumunta sa My Favorite Song. 890 00:45:49,110 --> 00:45:51,660 Kaya kung ako pindutin ang "Play aking paboritong kanta "sa ngayon, 891 00:45:51,660 --> 00:45:53,964 ito ay pagpunta upang i-load ang aking paboritong kanta at maglaro it-- 892 00:45:53,964 --> 00:45:55,880 [MUSIC - THE EAGLES, "BUHAY SA FAST  LANE "] 893 00:45:55,880 --> 00:46:00,490 --which ang mangyayari sa "Life in Mabilis Lane "sa pamamagitan ng Eagles. 894 00:46:00,490 --> 00:46:06,346 Ngayon, maaari ko pindutin ang "Ihinto ang aking paboritong kanta "at i-replay ito. 895 00:46:06,346 --> 00:46:09,160 >> [MUSIC - THE EAGLES, "BUHAY SA FAST  LANE "] 896 00:46:09,160 --> 00:46:18,340 >> At kung pumunta ako sa ibabaw sa console, dahil Ginamit ko ang isang global variable sa paglipas dito 897 00:46:18,340 --> 00:46:23,390 upang subaybayan ang mga halaga na ito, ito ang tunay ay ngayon ay kinikilala sa console. 898 00:46:23,390 --> 00:46:25,160 Kaya ito ang auto-lumilikha para sa akin. 899 00:46:25,160 --> 00:46:29,991 Kaya na kung ano ang pag-play sa ngayon, at maaari kong tumawag source.stop lang () 900 00:46:29,991 --> 00:46:30,490 sa mga iyon. 901 00:46:30,490 --> 00:46:34,930 902 00:46:34,930 --> 00:46:35,860 Well, alam mo kung ano? 903 00:46:35,860 --> 00:46:39,760 Kaya lang kayo guys may naririnig na ito song-- maaaring makilala mo ang kantang ito. 904 00:46:39,760 --> 00:46:41,801 >> [MUSIC - Rick Astley, "HINDI GONNA GIVE  YOU UP "] 905 00:46:41,801 --> 00:46:42,299 906 00:46:42,299 --> 00:46:44,215 [MUSIC - THE EAGLES, "BUHAY SA FAST  LANE "] 907 00:46:44,215 --> 00:46:46,195 Aming ngayon ang lahat ng na-Rickrolled. 908 00:46:46,195 --> 00:46:50,155 OK, mahusay, lumipat sa. 909 00:46:50,155 --> 00:46:51,160 Cool. 910 00:46:51,160 --> 00:46:54,554 Kaya ito ay isa lamang ng isang halimbawa ng lamang kung paano maaari mong i-load ang isang MP3 file-- 911 00:46:54,554 --> 00:46:56,470 [MUSIC - THE EAGLES, "BUHAY SA FAST  LANE "] 912 00:46:56,470 --> 00:46:59,590 --at i-play ito, at itigil at simulan ang mga ito. 913 00:46:59,590 --> 00:47:03,008 Kaya kong nagawa pa ng maraming [hindi marinig] 914 00:47:03,008 --> 00:47:07,570 >> Ang huling isa ang makikita ko ay, Ipapakita ko sa iyo ng isang [hindi marinig]. 915 00:47:07,570 --> 00:47:18,070 >> [MUSIC nagpe-play] 916 00:47:18,070 --> 00:47:21,800 >> Ito ay tulad ng, ogg.wave.mp3. 917 00:47:21,800 --> 00:47:26,450 Sa tingin ko, kung matandaan ko nang tama, Ko na tumakbo sa ilang mga isyu sa M4a, 918 00:47:26,450 --> 00:47:27,721 ngunit hindi ako sigurado tungkol na. 919 00:47:27,721 --> 00:47:28,470 Sa tingin ko mp3.wave-- 920 00:47:28,470 --> 00:47:28,930 921 00:47:28,930 --> 00:47:30,971 >> [MUSIC - Rick Astley, "HINDI GONNA GIVE  YOU UP "] 922 00:47:30,971 --> 00:47:35,930 923 00:47:35,930 --> 00:47:36,500 >> OK, malaki. 924 00:47:36,500 --> 00:47:37,625 Hindi mo dapat sinabi ko na. 925 00:47:37,625 --> 00:47:40,570 Gayon pa man, hello. 926 00:47:40,570 --> 00:47:43,430 927 00:47:43,430 --> 00:47:45,490 Kaya mayroon kaming ito bukas. 928 00:47:45,490 --> 00:47:52,320 Kaya ngayon ang lahat ko ay, talaga aking nilikha isang pangunahing syntax para sa paglikha ng musika. 929 00:47:52,320 --> 00:47:57,610 Kaya kung gagawin ko ang isang bagay tulad ng, magdagdag g4 on 1 2, ano ang ibig sabihin nito ay na, 930 00:47:57,610 --> 00:48:00,950 idagdag ang mga piano note, G4, kung saan ay ang ika-apat na G 931 00:48:00,950 --> 00:48:02,680 up sa piano mula sa ibaba. 932 00:48:02,680 --> 00:48:05,930 Kaya ito ay uri ng MIDI makipag-usap, kaya para sa mga taong based music, 933 00:48:05,930 --> 00:48:07,860 ito ay lamang ng MIDI tala. 934 00:48:07,860 --> 00:48:10,090 >> Madla: Iyan ang G ng Middle C, right? 935 00:48:10,090 --> 00:48:11,840 >> HUGH Zabriskie: Ito ang G itaas Middle C, na karapatan. 936 00:48:11,840 --> 00:48:12,470 >> Madla: Above Middle C. 937 00:48:12,470 --> 00:48:13,345 >> HUGH Zabriskie: Oo. 938 00:48:13,345 --> 00:48:14,340 Sa totoo lang, oo. 939 00:48:14,340 --> 00:48:16,131 Sa tingin ko ang tunay na ako ginawa itong isa [hindi marinig], 940 00:48:16,131 --> 00:48:18,860 kaya ito ay maaaring maging isang oktaba sa itaas na. 941 00:48:18,860 --> 00:48:20,070 Kaya sabihin makita. 942 00:48:20,070 --> 00:48:21,152 Kung pinindot ko Play-- 943 00:48:21,152 --> 00:48:22,110 [Paulit-ulit na piano NOTE] 944 00:48:22,110 --> 00:48:23,200 --we're pagpunta sa marinig na. 945 00:48:23,200 --> 00:48:25,700 Ang ideya ay na ito ay nagpapatakbo tulad ng isang command line ay, 946 00:48:25,700 --> 00:48:27,510 kaya kung pumunta ako pataas at pababa sa aking keyboard, ikaw 947 00:48:27,510 --> 00:48:31,550 maaaring bumalik sa nakaraan utos, na kung saan ay medyo kapaki-pakinabang. 948 00:48:31,550 --> 00:48:35,136 At sa ibaba ay ang aking listahan ng track, na kung saan ay nagpapatakbo ng lahat sa loop. 949 00:48:35,136 --> 00:48:38,260 >> Madla: Ikaw ay pag-aakala ang 88-key keyboard sa na, i-right? 950 00:48:38,260 --> 00:48:41,051 >> HUGH Zabriskie: Ang tanong ay, ako sa pag-aakala ng isang 88-key keyboard, 951 00:48:41,051 --> 00:48:41,990 at oo, ako. 952 00:48:41,990 --> 00:48:45,030 Ano ang ginawa ko ay ako talaga kinuha 88 samples 953 00:48:45,030 --> 00:48:46,970 ng piano, isa para sa bawat tala. 954 00:48:46,970 --> 00:48:49,180 At kaya sa bawat oras na marinig ng isang tala mula ngayon, 955 00:48:49,180 --> 00:48:57,550 iyon ay talagang isang loop na ganito like-- ito ay nakakakuha ng play sa loop, 956 00:48:57,550 --> 00:49:00,120 kaya para sa bawat tala, ito ay tumatakbo. 957 00:49:00,120 --> 00:49:02,860 Ano ang mangyayari ay, ako lumikha muli ng isang buffer, 958 00:49:02,860 --> 00:49:06,010 Gumawa ako ng isang makakuha node upang itakda ang lakas ng tunog. 959 00:49:06,010 --> 00:49:08,240 Ito lamang ng isang tunay masalimuot na paraan ng pagsasabi ko 960 00:49:08,240 --> 00:49:10,550 tindahan ang buffer sa isang source.buffer. 961 00:49:10,550 --> 00:49:13,160 Ako bigyan ito ng pakinabang, ako ikonekta ito sa ang makakuha, 962 00:49:13,160 --> 00:49:15,576 ang makakuha ay konektado sa output, at pagkatapos i-play ko ito. 963 00:49:15,576 --> 00:49:20,735 Kaya na ay uri ng proseso ng pagkuha sa isang source buffer. 964 00:49:20,735 --> 00:49:24,820 >> Madla: Maaari mong aktwal na tumagal na dry sound at gawin itong wet [hindi marinig]? 965 00:49:24,820 --> 00:49:26,260 >> HUGH Zabriskie: Maaari mong, oo. 966 00:49:26,260 --> 00:49:29,260 May re-verb, may pagkaantala, kabaligtaran. 967 00:49:29,260 --> 00:49:33,260 Maaari ka talaga maglagay ng anumang bagay sa pagitan of-- rin sa sandwich na iyon, 968 00:49:33,260 --> 00:49:37,660 pipeline ay isang mas mahusay na talinghaga, ngunit maaari kang magdagdag ng kahit na ano sa mga iyon. 969 00:49:37,660 --> 00:49:38,200 Cool. 970 00:49:38,200 --> 00:49:40,280 >> Kaya kailangan ko tapusin ang demo dito upang mabigyan ka ng ideya 971 00:49:40,280 --> 00:49:46,390 na lamang ang lubos na bilang ng beses na kayo maaaring tumakbo na function na ang lahat nang sabay-sabay. 972 00:49:46,390 --> 00:49:49,280 Kaya ako pagpunta sa alisin ito. 973 00:49:49,280 --> 00:49:59,110 Pupunta ako upang lumikha ng isang generator na- talaga kung ano does-- ito ay talagang 974 00:49:59,110 --> 00:50:04,220 uri ng isang komplikadong syntax-- ngunit ito ay pagpunta upang bumuo ng mga tala sa mabilisang, 975 00:50:04,220 --> 00:50:06,601 at simulan ang pag-play lamang ang mga ito bilang ito sinusuri ang mga ito. 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 >> Kaya maaari lamang naming gumawa ng isang maliit na musika dito. 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 >> Kaya kung ano ang command na ito ay, halimbawa, ay 982 00:50:41,470 --> 00:50:46,910 ito ay tumatagal ng tatlong tala ang mga para sa piano at pagkatapos ay inilalagay ang mga ito sa B3. 983 00:50:46,910 --> 00:50:48,660 Maaaring gumawa ng syntax na ito isang maliit na higit pang-unawa 984 00:50:48,660 --> 00:50:50,590 sa mga taong magkaroon ng isang background music dito. 985 00:50:50,590 --> 00:50:55,180 986 00:50:55,180 --> 00:50:56,551 >> Maaari ba akong magdagdag ng isang sipa drum. 987 00:50:56,551 --> 00:50:57,050 Kaya ko-- 988 00:50:57,050 --> 00:50:58,048 >> [INTERPOSING Instrumentong] 989 00:50:58,048 --> 00:50:59,256 >> --just play sa paligid na may. 990 00:50:59,256 --> 00:51:12,519 991 00:51:12,519 --> 00:51:13,474 >> Kaya maaari mong make-- 992 00:51:13,474 --> 00:51:14,515 [INTERPOSING Instrumentong] 993 00:51:14,515 --> 00:51:15,513 Ang isang iyon ay isang maliit na mas nakakainis. 994 00:51:15,513 --> 00:51:16,554 [INTERPOSING Instrumentong] 995 00:51:16,554 --> 00:51:26,491 996 00:51:26,491 --> 00:51:30,981 >> Kaya na random na nagdadagdag ng isang dry umaalingawngaw sa bawat ika-16 ng tala, na may isang 16% 997 00:51:30,981 --> 00:51:31,481 [Hindi marinig]. 998 00:51:31,481 --> 00:51:32,522 >> [INTERPOSING Instrumentong] 999 00:51:32,522 --> 00:51:40,962 1000 00:51:40,962 --> 00:51:50,400 >> Oo, kaya ang paraan na ito works-- ito ay palaging sa 4: 4. 1001 00:51:50,400 --> 00:51:51,441 [INTERPOSING Instrumentong] 1002 00:51:51,441 --> 00:52:06,910 1003 00:52:06,910 --> 00:52:10,902 >> Oo, kaya sa apat na sulok, at 16/8. 1004 00:52:10,902 --> 00:52:14,851 1005 00:52:14,851 --> 00:52:15,892 [INTERPOSING Instrumentong] 1006 00:52:15,892 --> 00:52:27,970 1007 00:52:27,970 --> 00:52:33,780 >> Kaya sa karaniwan, makakakuha ka ng 60% ng mga hit sa ika-16 na mga tala. 1008 00:52:33,780 --> 00:52:35,990 >> Anyways, ito ay lamang uri ng gustong ipakita 1009 00:52:35,990 --> 00:52:39,780 ang ilan sa mga bagay na maaari mong bumuo sa Web Audio API. 1010 00:52:39,780 --> 00:52:43,840 Ito ay talagang malakas, ito ay talagang mabilis, at maaari kang gumawa ng maraming cool na mga bagay-bagay 1011 00:52:43,840 --> 00:52:44,340 kasama. 1012 00:52:44,340 --> 00:52:51,260 Kaya muli, ang anumang mga tanong na mayroon ka, email myself-- Hugh-- o Sam, 1013 00:52:51,260 --> 00:52:55,869 at sa totoo lang, ang Google ay may isang tonelada ng mahusay na mga mapagkukunan. 1014 00:52:55,869 --> 00:52:56,660 Anumang mga huling katanungan? 1015 00:52:56,660 --> 00:52:57,970 Oo. 1016 00:52:57,970 --> 00:53:00,790 >> Madla: Kaya maaari mong ma-access ang ang built-in na mikropono. 1017 00:53:00,790 --> 00:53:03,089 Paano kung gusto mong gumamit ng isang mas mahusay na mikropono? 1018 00:53:03,089 --> 00:53:05,380 HUGH Zabriskie: Kung iyong nais upang gamitin ang mas mahusay na mikropono? 1019 00:53:05,380 --> 00:53:11,320 Kaya muli, ito ay bahagi ng abstraction sa pagitan ng Chrome 1020 00:53:11,320 --> 00:53:12,950 at ang natitirang bahagi ng iyong computer. 1021 00:53:12,950 --> 00:53:18,950 Maliban kung ito ay magagamit sa pamamagitan ng isang API, tulad ng Web MIDI API, 1022 00:53:18,950 --> 00:53:22,030 maaari mong malamang na mahanap ang ilang mga hack, ngunit sa pangkalahatan ay hindi bilang magagawa. 1023 00:53:22,030 --> 00:53:25,300 >> Sam GREEN: Maaari mong also-- lahat alam ang Chrome 1024 00:53:25,300 --> 00:53:28,820 ay kung ano ang iyong default microphone ay, at ito-access na iyon. 1025 00:53:28,820 --> 00:53:33,410 Kaya't kung ikaw ay isang mikropono dati mo itakda bilang default microphone computer, 1026 00:53:33,410 --> 00:53:35,990 maaari mong ma-access ang mga ito na paraan at ito ay marahil sa trabaho. 1027 00:53:35,990 --> 00:53:37,490 HUGH Zabriskie: Iyon ay isang magandang punto. 1028 00:53:37,490 --> 00:53:39,656 Hindi ko na sinubukan na, ngunit maaari mong ma-uri 1029 00:53:39,656 --> 00:53:45,700 of-- kung redirect ka sa input na speaker, maaaring ikaw ay maaaring gawin na, oo. 1030 00:53:45,700 --> 00:53:48,360 >> Anumang mga huling katanungan? 1031 00:53:48,360 --> 00:53:49,340 Cool. 1032 00:53:49,340 --> 00:53:51,680 Well thank you guys magkano kaya para sa panonood. 1033 00:53:51,680 --> 00:53:52,199 Ako ay Hugh. 1034 00:53:52,199 --> 00:53:52,990 Sam GREEN: Ako Sam. 1035 00:53:52,990 --> 00:53:55,410 HUGH Zabriskie: At ito ay CS50. 1036 00:53:55,410 --> 00:53:56,767