1 00:00:00,000 --> 00:00:05,900 2 00:00:05,900 --> 00:00:07,170 >> SAM GREEN: Hi, almal. 3 00:00:07,170 --> 00:00:08,640 Welkom by ons seminaar. 4 00:00:08,640 --> 00:00:10,009 My naam is Sam. 5 00:00:10,009 --> 00:00:11,050 HUGH Zabriskie: Ek is Hugh. 6 00:00:11,050 --> 00:00:17,420 SAM GREEN: En ons gaan vandag praat oor JavaScript en die Web Audio API. 7 00:00:17,420 --> 00:00:21,180 Net om te begin, is dit 'n uiteensetting van ons agenda vir die seminaar. 8 00:00:21,180 --> 00:00:25,350 Ons gaan om te begin deur te praat oor Hoekom jy belangstel in die Web te wees 9 00:00:25,350 --> 00:00:30,130 Audio API, hoekom is JavaScript die taal wat jy nodig het vir dit, 10 00:00:30,130 --> 00:00:32,619 en dan praat oor JavaScript essentials-- so soos, 11 00:00:32,619 --> 00:00:34,800 loop jy deur 'n paar basiese beginsels van die taal, 12 00:00:34,800 --> 00:00:37,290 en dan praat oor die klank API op 'n hoë vlak. 13 00:00:37,290 --> 00:00:41,140 Dan sal Hugh praat oor 'n van die stadiums van produksie klank 14 00:00:41,140 --> 00:00:45,509 en dan demo hierdie awesome sequencer projek het hy en wys jou die kode. 15 00:00:45,509 --> 00:00:48,050 En dan, sal ons tyd vir vrae aan die einde vir mense 16 00:00:48,050 --> 00:00:49,593 wat hier woon. 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 Ek sal back-up. 21 00:00:52,170 --> 00:00:54,960 >> SAM GREEN: So, eerste dinge eerste. 22 00:00:54,960 --> 00:00:57,840 So een van die groot dinge oor die Web Audio API 23 00:00:57,840 --> 00:01:00,480 is dat daar geen opstel vereis. 24 00:01:00,480 --> 00:01:04,230 Dit kom ingeboude om mees moderne implementeer, 25 00:01:04,230 --> 00:01:08,630 insluitend Chrome, Edge, 'n hele n klomp van die mense al others-- 26 00:01:08,630 --> 00:01:12,650 dat groot gedeeltes van mense gebruik vandag. 27 00:01:12,650 --> 00:01:14,807 So is daar geen opstel, Afgesien van net om 28 00:01:14,807 --> 00:01:16,890 'n web bediener te gaan, want jy het om te begin werk 29 00:01:16,890 --> 00:01:18,420 op jou projek, wat is groot. 30 00:01:18,420 --> 00:01:21,500 31 00:01:21,500 --> 00:01:24,190 >> Ons beveel mooi swaar dat jy dit oorweeg 32 00:01:24,190 --> 00:01:26,530 gebruik van Chrome vir JavaScript web ontwikkeling, 33 00:01:26,530 --> 00:01:30,260 net omdat die ontwikkelaar gereedskap is baie sterk. 34 00:01:30,260 --> 00:01:33,220 As 'n voorbeeld van net wat ons bedoel deur te sê maak jou JavaScript 35 00:01:33,220 --> 00:01:38,600 console-- as jy gaan in Chrome en jy kyk na 'n webblad, 36 00:01:38,600 --> 00:01:43,897 en jy klik links Inspekteer Element, en dan 37 00:01:43,897 --> 00:01:46,730 jy gaan na hierdie klein drop-down hier en jy op Console, 38 00:01:46,730 --> 00:01:50,660 jy sal sien wat oopmaak lyk baie soos 'n opdrag prompt dat jy 39 00:01:50,660 --> 00:01:53,720 kan sien op jou Mac, of op die ID. 40 00:01:53,720 --> 00:01:59,260 En net soos wat, ons kan tipe opdragte hier, soos Clear, 41 00:01:59,260 --> 00:02:01,350 en ander opdragte soos dit. 42 00:02:01,350 --> 00:02:04,267 Ons kan veranderlikes te skep, soos ons sal later sien in JavaScript. 43 00:02:04,267 --> 00:02:07,100 En so iets is wat ons kan doen in JavaScript, kan ons doen met die konsole, 44 00:02:07,100 --> 00:02:11,430 en dit is 'n super handige manier om begin rondspeel met APIs 45 00:02:11,430 --> 00:02:15,760 en raak gemaklik met JavaScript regs af die vlermuis. 46 00:02:15,760 --> 00:02:18,290 Geen opstel vereis, wat is regtig mooi. 47 00:02:18,290 --> 00:02:18,790 Koel. 48 00:02:18,790 --> 00:02:22,064 49 00:02:22,064 --> 00:02:22,880 Awesome. 50 00:02:22,880 --> 00:02:24,780 >> Dus net een ding om te voeg. 51 00:02:24,780 --> 00:02:27,780 As jy enige questions-- daar baie van julle wat nie hier woon, 52 00:02:27,780 --> 00:02:31,232 voel vry om te e-pos hierdie us-- is ons e-pos adresse. 53 00:02:31,232 --> 00:02:33,190 As jy vrae het jy wil nie om ons te vra, 54 00:02:33,190 --> 00:02:36,160 soos, ag ek het 'n fout in my kode, of iets 55 00:02:36,160 --> 00:02:39,270 dit is 'n bietjie meer spesifiek, Miskien eerste google dit. 56 00:02:39,270 --> 00:02:42,340 Daar is 'n baie groot hulpbronne oor die Web Audio API daar buite. 57 00:02:42,340 --> 00:02:44,089 Dit is baie goed gedokumenteer en dit is wat 58 00:02:44,089 --> 00:02:47,194 gebruik word deur 'n ton van die mense in bedryf, en mense wat net 59 00:02:47,194 --> 00:02:48,610 bou pret dinge vir hulself. 60 00:02:48,610 --> 00:02:51,306 So is daar 'n baie moet van hulpbronne wat daar is. 61 00:02:51,306 --> 00:02:53,040 Awesome. 62 00:02:53,040 --> 00:02:56,100 >> Cool, so hoekom die Web Audio API? 63 00:02:56,100 --> 00:02:59,840 Hierdie diagram is 'n bietjie van 'n evolusie van die pad 64 00:02:59,840 --> 00:03:04,100 klank op die web het gegroei met verloop van tyd. 65 00:03:04,100 --> 00:03:13,080 Bgsound was soos die oorspronklike HTML tag Internet Explorer gebruik om te ondersteun. 66 00:03:13,080 --> 00:03:16,790 Dit slegs toegelaat vir redelik basiese klanke, die funksie was nie baie sterk, 67 00:03:16,790 --> 00:03:19,380 en jy kan dit nie doen nie ingewikkelde opeenvolging, 68 00:03:19,380 --> 00:03:21,890 of beheer wanneer klank begin en gestop baie kragtig. 69 00:03:21,890 --> 00:03:23,930 So, dit was nie besonder goed ontwikkel. 70 00:03:23,930 --> 00:03:27,470 Eers daarna, Flash gekom along-- wat 71 00:03:27,470 --> 00:03:31,712 Ek is seker dat jy ouens is almal bekend met Flash-- miskien nie hoe dit werk, 72 00:03:31,712 --> 00:03:32,920 maar jy het beslis dit gesien. 73 00:03:32,920 --> 00:03:35,586 Jy het om jou Flash werk Plug-in, al daardie soort van dinge, 74 00:03:35,586 --> 00:03:40,110 en wat seker die reeks uitgebrei van funksies wat beskikbaar was. 75 00:03:40,110 --> 00:03:45,370 Maar maak die gebruiker installeer 'n plug-in is beslis 76 00:03:45,370 --> 00:03:48,480 'n nadeel aan insluitend Flash in jou aansoek, reg? 77 00:03:48,480 --> 00:03:52,410 Want dan is jy afhanklik van die is gebruiker gaan en vind hierdie plug-in, 78 00:03:52,410 --> 00:03:54,660 en waarskynlik omgedraai af deur hierdie ekstra stap 79 00:03:54,660 --> 00:03:56,640 hulle moet neem om jou inligting te gebruik. 80 00:03:56,640 --> 00:04:01,270 En dan kan daar 'n update wees dit sal jou hele aansoek te breek, 81 00:04:01,270 --> 00:04:03,880 en dit eindig as 'n nagmerrie vir die ontwikkelaar, ook. 82 00:04:03,880 --> 00:04:06,230 So dit was 'n versper. 83 00:04:06,230 --> 00:04:10,480 >> En dan na wat gekom het, die HTML klank tag, wat 84 00:04:10,480 --> 00:04:16,579 is 'n kenmerk van meer moderne HTML-- wat beslis toegelaat vir 'n baie meer dinge, 85 00:04:16,579 --> 00:04:20,050 maar selfs die dinge wat jy kan doen daar is 'n bietjie beperk net 86 00:04:20,050 --> 00:04:22,730 as 'n gevolg van die dinge dat HTML was in staat is. 87 00:04:22,730 --> 00:04:26,060 So wanneer die JavaScript API, die Web Audio API, 88 00:04:26,060 --> 00:04:29,290 het 'n standaard oefen oor blaaiers, 89 00:04:29,290 --> 00:04:32,490 wat werklik verbreed die stel geleenthede vir ontwikkelaars 90 00:04:32,490 --> 00:04:36,590 om werklik te kry in die bou cool stuff vir die web. 91 00:04:36,590 --> 00:04:39,220 Vir 'n lang tyd was daar was regtig kragtige gereedskap 92 00:04:39,220 --> 00:04:44,360 vir die inheemse klank programme, like-- almal weet Garage 93 00:04:44,360 --> 00:04:48,360 en dan natuurlik is daar meer professionele klank meng aansoeke, 94 00:04:48,360 --> 00:04:49,640 en dat die soort dinge. 95 00:04:49,640 --> 00:04:52,690 Maar daar was nie 'n regtig 'n goeie Cloud-- nie 96 00:04:52,690 --> 00:04:55,811 Wolk, ja, ek dink Cloud-- web-gebaseerde platform 97 00:04:55,811 --> 00:04:58,310 wat sou toelaat dat ontwikkelaars bou aansoeke vir mense 98 00:04:58,310 --> 00:05:00,570 klank meng nie. 99 00:05:00,570 --> 00:05:03,960 En as hy sal jou wys later, die Web Audio API 100 00:05:03,960 --> 00:05:07,470 maak voorsiening vir baie kragtige dinge om werklik net gebeur nie, 101 00:05:07,470 --> 00:05:09,597 wat is pretty cool. 102 00:05:09,597 --> 00:05:12,680 So wat is die opdrag aan waarom jy moet die res van die seminaar te kyk, 103 00:05:12,680 --> 00:05:14,350 basies. 104 00:05:14,350 --> 00:05:17,880 >> En nou, ek gaan om te praat oor sommige JavaScript-- net die basiese elemente 105 00:05:17,880 --> 00:05:20,240 van die taal, sodat kan ons op dieselfde bladsy 106 00:05:20,240 --> 00:05:22,470 wanneer ons praat oor die API 'n bietjie later. 107 00:05:22,470 --> 00:05:23,260 Koel. 108 00:05:23,260 --> 00:05:26,192 >> So, dit is 'n opsomming. 109 00:05:26,192 --> 00:05:27,150 Ek het vergeet hier was. 110 00:05:27,150 --> 00:05:27,510 Ja. 111 00:05:27,510 --> 00:05:27,870 >> HUGH Zabriskie: Daar is hier twee skyfies. 112 00:05:27,870 --> 00:05:30,245 >> SAM GREEN: Dit is die opsomming van sommige van die beperkings 113 00:05:30,245 --> 00:05:35,220 van die ander bindende, ou metodes. 114 00:05:35,220 --> 00:05:37,828 En dan nou, ons het hierdie dinge gesien. 115 00:05:37,828 --> 00:05:40,011 Koel. 116 00:05:40,011 --> 00:05:40,510 Awesome. 117 00:05:40,510 --> 00:05:43,200 >> So, JavaScript noodsaaklikhede. 118 00:05:43,200 --> 00:05:47,230 Eerste dinge eerste, daar is 'n mooi beduidende verskil 119 00:05:47,230 --> 00:05:49,940 in JavaScript versus in 'n taal soos C, in die pad 120 00:05:49,940 --> 00:05:52,050 dat veranderlikes geskep word. 121 00:05:52,050 --> 00:05:55,634 So in C, ons gebruik om met ons veranderlikes tik, reg? 122 00:05:55,634 --> 00:05:57,800 En ek bedoel nie tipe soos tik hulle in, ek bedoel tipe 123 00:05:57,800 --> 00:06:01,900 soos 'n type-- betekenis toeken hulle soos 'n int, 'n float, 'n kar. 124 00:06:01,900 --> 00:06:05,210 In C, is ons regtig gebruik word om dat 'n veranderlike te skep 125 00:06:05,210 --> 00:06:09,690 en dan hou dat die tipe vir die hele tyd wat ons gebruik wat veranderlike. 126 00:06:09,690 --> 00:06:13,990 En dit is nie noodwendig erger, maar dit is waarskynlik harder te gebruik. 127 00:06:13,990 --> 00:06:16,190 Een van die interessante eienskappe JavaScript is 128 00:06:16,190 --> 00:06:19,740 dat veranderlikes is wat genoem "dinamiese getik," wat 129 00:06:19,740 --> 00:06:22,500 beteken dat ek 'n kan skep veranderlike met daardie sintaksis, 130 00:06:22,500 --> 00:06:25,800 varX gelyk 5, byvoorbeeld. 131 00:06:25,800 --> 00:06:27,790 Wat oorspronklik skep 'n heelgetal variable-- 132 00:06:27,790 --> 00:06:29,870 reg onder die kap somewhere-- maar ek 133 00:06:29,870 --> 00:06:33,040 kan daardie veranderlike verander om te verwys na 'n string 134 00:06:33,040 --> 00:06:35,820 sonder om iets te doen soos skep van 'n nuwe veranderlike. 135 00:06:35,820 --> 00:06:37,880 Ek het nie nodig om te bekommer oor die tipe verander. 136 00:06:37,880 --> 00:06:45,440 JavaScript weet dat die tipe se verander, en wat dinamiese gebeur. 137 00:06:45,440 --> 00:06:48,510 >> So, daar is voordele en nadele dat 138 00:06:48,510 --> 00:06:51,250 as iemand wie se werk in JavaScript vir 'n rukkie kan weet. 139 00:06:51,250 --> 00:06:53,600 Daar is tye wanneer jy dalk per ongeluk 140 00:06:53,600 --> 00:06:57,720 verander die tipe van 'n veranderlike en nie hanteer dat die tipe verandering, 141 00:06:57,720 --> 00:07:01,120 en dan jou JavaScript kan crash-- of 'n uitsondering 142 00:07:01,120 --> 00:07:06,070 gegooi word, want jy het die verkeerde tipe wanneer jy verwag 'n tipe. 143 00:07:06,070 --> 00:07:07,040 Koel. 144 00:07:07,040 --> 00:07:11,470 >> So, wat is soos scoping--, as ons onthou die vroeë weke in die kursus, 145 00:07:11,470 --> 00:07:15,420 verwys na hoe sigbaar 'n veranderlike is en in watter area van die kode. 146 00:07:15,420 --> 00:07:18,400 Al wat lyk baie soortgelyk die manier waarop dit lyk in C. 147 00:07:18,400 --> 00:07:24,755 So veranderlikes algemeen scoped binne krulhakies binne 'n funksie, 148 00:07:24,755 --> 00:07:27,005 en dan is daar ook globaal scoped veranderlikes wat 149 00:07:27,005 --> 00:07:29,171 are-- as jy 'n veranderlike te skryf buite 'n funksie, 150 00:07:29,171 --> 00:07:31,790 dit sal sigbaar in die hele teks. 151 00:07:31,790 --> 00:07:35,840 >> Een verskil tussen JavaScript en C in die besonder, 152 00:07:35,840 --> 00:07:40,280 is dat as jy 'n globale verklaar veranderlike oral in 'n teks lêer 153 00:07:40,280 --> 00:07:43,324 dit is sigbaar in enige funksie binne daardie teks lêer. 154 00:07:43,324 --> 00:07:44,240 Dit is korrek, reg? 155 00:07:44,240 --> 00:07:46,330 >> HUGH Zabriskie: Yep. 156 00:07:46,330 --> 00:07:49,120 >> SAM GREEN: So dit is ook 'n bietjie bietjie funky in vergelyking met C, 157 00:07:49,120 --> 00:07:52,660 waar ons moes altyd het ons veranderlike definisies bo die plekke 158 00:07:52,660 --> 00:07:53,770 hulle gebruik is. 159 00:07:53,770 --> 00:07:57,957 Dit is nie 'n reël wat is afgedwing nie, wel, 'n bietjie anders. 160 00:07:57,957 --> 00:08:00,540 En weer net om reemphasize, globale versus plaaslike variables-- 161 00:08:00,540 --> 00:08:03,457 baie soortgelyk aan C. Jy kan hê twee veranderlikes met dieselfde naam, 162 00:08:03,457 --> 00:08:06,540 en het een van hul name word skaduwee deur 'n plaaslike veranderlike as een van hulle 163 00:08:06,540 --> 00:08:07,546 was globale. 164 00:08:07,546 --> 00:08:09,420 So, soortgelyke soort probleme wat sommige van julle 165 00:08:09,420 --> 00:08:11,920 mag in loop in sommige van jou probleem sit so ver. 166 00:08:11,920 --> 00:08:14,450 Cool, so dit is veranderlikes. 167 00:08:14,450 --> 00:08:20,310 >> Beheer vloei, wat beteken soos, if-else-- logiese spul en loops. 168 00:08:20,310 --> 00:08:24,510 So om mee te begin, dit is wat if-else stellings lyk soos in JavaScript. 169 00:08:24,510 --> 00:08:29,750 Die plasing van die verskillende dinge op die lyne is nie belangrik nie. 170 00:08:29,750 --> 00:08:34,409 Dit is net een van die konvensies vir die manier waarop ons struktuur code. 171 00:08:34,409 --> 00:08:38,634 Net soos in C, ons het 'n "As 'n" hakies verklaring. 172 00:08:38,634 --> 00:08:40,840 173 00:08:40,840 --> 00:08:42,090 Dit is nie wat ek bedoel om te doen. 174 00:08:42,090 --> 00:08:44,860 175 00:08:44,860 --> 00:08:45,550 Ek het dit weer. 176 00:08:45,550 --> 00:08:46,841 >> HUGH Zabriskie: Probeer om af te sluit? 177 00:08:46,841 --> 00:08:49,770 SAM GREEN: Nee, ek is net probeer om in te zoomen. 178 00:08:49,770 --> 00:08:50,660 Dit maak nie saak nie. 179 00:08:50,660 --> 00:08:54,730 180 00:08:54,730 --> 00:08:59,370 >> So, ons het 'n "as" verklaring en ons het 'n toestand binnekant van dit 181 00:08:59,370 --> 00:09:03,130 wat evalueer waar of vals, en wat bepaal of nie 182 00:09:03,130 --> 00:09:04,510 ons in daardie blok van die kode. 183 00:09:04,510 --> 00:09:09,860 En so ook, ons het 'n ander-as, en 'n ander, net soos ons gebruik om in C. 184 00:09:09,860 --> 00:09:14,010 >> Jy moet ook mooi gemaklik regs af die vlermuis met loops, 185 00:09:14,010 --> 00:09:16,440 want hulle kyk ook 'n baie soos C lyk. 186 00:09:16,440 --> 00:09:19,600 Maar jy sal weer agterkom dat ons het, in plaas van int initializations, 187 00:09:19,600 --> 00:09:22,570 ons het var initializations. 188 00:09:22,570 --> 00:09:24,650 En ek dink jy het versigtig wees om te maak om te wees 189 00:09:24,650 --> 00:09:28,460 seker dat jy nie die waarde te verander van I van 'n int om 'n string, 190 00:09:28,460 --> 00:09:31,780 byvoorbeeld, omdat dit gaan om veroorsaak vreemde gedrag wat jy dalk nie 191 00:09:31,780 --> 00:09:32,280 verwag. 192 00:09:32,280 --> 00:09:35,750 Maar dit moet kyk mooi bekende, as well. 193 00:09:35,750 --> 00:09:39,460 >> So dit is waar dinge begin kry 'n bietjie mal in JavaScript 194 00:09:39,460 --> 00:09:44,920 vir iemand wat gaan van 'n agtergrond van C. Daar is funksies 195 00:09:44,920 --> 00:09:48,070 in JavaScript, en daar is een manier om 'n funksie wat lyk verklaar 196 00:09:48,070 --> 00:09:50,361 soort van soos C en dan is daar 'n ander een wat 197 00:09:50,361 --> 00:09:52,450 lyk soort van verskillende. 198 00:09:52,450 --> 00:09:54,930 >> Die eerste weergawe, wat kan ons hier sien, 199 00:09:54,930 --> 00:09:59,260 is 'n soort van C-agtige, waar Ons sê, dit is 'n funksie, 200 00:09:59,260 --> 00:10:01,490 gee dit 'n naam gee die aantal argumente, 201 00:10:01,490 --> 00:10:05,150 en dan die inhoud van die funksie gaan binne die krullerige draadjies. 202 00:10:05,150 --> 00:10:08,850 Ons sal 'n voorbeeld van sien argumente in net 'n sekonde. 203 00:10:08,850 --> 00:10:13,420 >> AANGESIEN op die volgende reël, sien ons, o, hier is 'n veranderlike genaamd "myFunction," 204 00:10:13,420 --> 00:10:17,546 en ons vergelyk word om hierdie generiese thing-- function-- dat 205 00:10:17,546 --> 00:10:19,170 Dit lyk nie of enigiets aangaan nie. 206 00:10:19,170 --> 00:10:22,780 207 00:10:22,780 --> 00:10:26,080 Die rede is dat dit anders as C is dat JavaScript 208 00:10:26,080 --> 00:10:30,040 is wat genoem word 'n funksionele taal, of het funksionele elemente, wat beteken 209 00:10:30,040 --> 00:10:33,510 wat funksioneer is eintlik waardes. 210 00:10:33,510 --> 00:10:39,520 En dit beteken dat ons kan stel 'n veranderlike om 'n funksie gelyk 211 00:10:39,520 --> 00:10:43,210 en dan skuif daardie funksie rond, slaag dit as 'n argument, 212 00:10:43,210 --> 00:10:46,550 doen allerhande dinge soos wat met funksies. 213 00:10:46,550 --> 00:10:49,682 >> Een ander ding om te note-- funksies geskryf 214 00:10:49,682 --> 00:10:51,140 met 'n sekere aantal argumente. 215 00:10:51,140 --> 00:10:54,056 Ons sal 'n voorbeeld van 'n funksie te sien met 'n argument op die volgende skuif. 216 00:10:54,056 --> 00:10:56,720 Maar JavaScript sal nie gil op jou as jy probeer 217 00:10:56,720 --> 00:10:59,330 om 'n funksie by die gebruik verkeerde getal argumente. 218 00:10:59,330 --> 00:11:05,310 Dit sal net sy bes doen om te maak doen, wat beteken dat as jy slaag, 219 00:11:05,310 --> 00:11:09,410 jy 'n funksie wat 'n beroep verwag argument met geen argument, alles wat 220 00:11:09,410 --> 00:11:13,990 sal gebeur is dit sal sy bes doen om te probeer en uit te voer wat die kode, 221 00:11:13,990 --> 00:11:16,541 en as dit uiteindelik loop in 'n uitsondering of 'n fout, 222 00:11:16,541 --> 00:11:19,790 dit sal gooi dat uitsondering nie en hou net going-- wat net een van die maniere 223 00:11:19,790 --> 00:11:21,070 dat JavaScript werk. 224 00:11:21,070 --> 00:11:21,781 Ja. 225 00:11:21,781 --> 00:11:24,207 >> GEHOOR: Wat gebeur as daar is te veel argumente? 226 00:11:24,207 --> 00:11:26,040 SAM GREEN: So het die vraag was, wat gebeur 227 00:11:26,040 --> 00:11:27,380 As daar te veel argumente? 228 00:11:27,380 --> 00:11:29,171 En die antwoord is dat JavaScript sal net 229 00:11:29,171 --> 00:11:32,120 ignoreer die kinders wat na die kinders dit verwag. 230 00:11:32,120 --> 00:11:36,420 Dit sal probeer om die funksie uit te voer roep asof dit was net die eerste twee. 231 00:11:36,420 --> 00:11:37,075 Reg? 232 00:11:37,075 --> 00:11:37,700 >> HUGH Zabriskie: Dis reg, ja. 233 00:11:37,700 --> 00:11:39,449 Net so, as daar is te min argumente, 234 00:11:39,449 --> 00:11:42,640 dit net soort van gee null om al die argumente dit nie enige waardes 235 00:11:42,640 --> 00:11:43,660 vir. 236 00:11:43,660 --> 00:11:45,810 >> SAM GREEN: wat eintlik handig, as jy 237 00:11:45,810 --> 00:11:49,060 wil 'n funksie te skryf wat neem 'n veranderlike argumente nommer. 238 00:11:49,060 --> 00:11:55,830 Jy kan die standaard waardes in die definisie van die funksie, 239 00:11:55,830 --> 00:11:59,060 en dit kan ignoreer die feit dat die insette is nie daar nie. 240 00:11:59,060 --> 00:12:01,584 241 00:12:01,584 --> 00:12:04,000 So ek wil 'n bietjie praat meer oor hierdie laaste bullet 242 00:12:04,000 --> 00:12:05,541 punt, wat funksies waardes. 243 00:12:05,541 --> 00:12:07,930 244 00:12:07,930 --> 00:12:11,010 Dit is 'n voorbeeld wat 'n bietjie mind-blowing 245 00:12:11,010 --> 00:12:14,880 as jy net lees nie, en dink nie oor wat aan die gang vir 'n tweede. 246 00:12:14,880 --> 00:12:17,910 So, laat ons kyk net op die eerste reël hier. 247 00:12:17,910 --> 00:12:24,360 Ons het hierdie veranderlike, f1, dat ons sê is 'n funksie wat hierdie ding doen. 248 00:12:24,360 --> 00:12:28,535 En die inhoud van die funksie is console.log ('hallo'). 249 00:12:28,535 --> 00:12:32,220 Jy kan dink console.log as die JavaScript ekwivalent van printf. 250 00:12:32,220 --> 00:12:35,510 So, wat sal gebeur is, as ons hardloop hierdie kode in ons leser, 251 00:12:35,510 --> 00:12:37,530 dit sal druk 'n string. 252 00:12:37,530 --> 00:12:39,342 Ek kan bewys dat. 253 00:12:39,342 --> 00:12:42,300 GEHOOR: Deur log, al is, doen dit bedoel dit is wat iewers opgeteken? 254 00:12:42,300 --> 00:12:42,550 SAM GREEN: Ja. 255 00:12:42,550 --> 00:12:44,216 So ek sal jou wys wat gaan gebeur. 256 00:12:44,216 --> 00:12:48,085 So die vraag is, wat beteken log beteken? 257 00:12:48,085 --> 00:12:51,262 >> HUGH Zabriskie: So console.log is soos printf vir C. 258 00:12:51,262 --> 00:12:52,970 SAM GREEN: So console.log is soos printf, 259 00:12:52,970 --> 00:12:59,240 so as ek hierdie console.log ('hallo'), en ek noem dat die string "hallo" 260 00:12:59,240 --> 00:13:00,730 kry gedruk om die konsole. 261 00:13:00,730 --> 00:13:03,340 Dit is die konsole. 262 00:13:03,340 --> 00:13:05,930 Dit is net soos printf, waar dit druk op standaard nie. 263 00:13:05,930 --> 00:13:09,050 264 00:13:09,050 --> 00:13:11,230 En ons sal sien in 'n minuut, maar dit is eintlik 265 00:13:11,230 --> 00:13:16,529 verwys na die konsole voorwerp, en roep 'n metode op daardie voorwerp. 266 00:13:16,529 --> 00:13:18,320 Dit sal meer sin maak in 'n minuut wanneer ons 267 00:13:18,320 --> 00:13:20,660 kry om te praat oor voorwerpe in JavaScript, 268 00:13:20,660 --> 00:13:22,509 maar ek het gedink ek wil net noem dat. 269 00:13:22,509 --> 00:13:24,300 HUGH Zabriskie: Ons is gebruik om in C, right-- 270 00:13:24,300 --> 00:13:27,580 ons gewoonlik skryf 'n groot program in die belangrikste om iets te doen. 271 00:13:27,580 --> 00:13:30,700 Maar wat is koel in JavaScript is jy hierdie soort van tolk wat 272 00:13:30,700 --> 00:13:33,620 lopies in reële tyd, so dit neem net reël vir reël, 273 00:13:33,620 --> 00:13:35,320 dit kan net interpreteer wat op die plek. 274 00:13:35,320 --> 00:13:37,403 En dit hou van dinge wat voor loop, 275 00:13:37,403 --> 00:13:41,620 so dit is 'n mooi nuttige instrument om gebruik console.log, of die console, 276 00:13:41,620 --> 00:13:46,870 algemeen, vir net speel rond met JavaScript. 277 00:13:46,870 --> 00:13:51,420 >> SAM GREEN: So terug te gaan na die example-- die tweede reël van die kode 278 00:13:51,420 --> 00:13:55,320 hier is redelik hoogs verwonder in my kop. 279 00:13:55,320 --> 00:13:59,790 Die eerste keer wat ek lees hierdie, Dit was soos, wat gaan aan? 280 00:13:59,790 --> 00:14:04,580 So wat gebeur is, is hierdie funksie verklaring sê, 281 00:14:04,580 --> 00:14:10,170 Ek het 'n funksie genoem f2 dit is verwag een argument, f, 282 00:14:10,170 --> 00:14:12,990 en dan is dit 'n beroep wat funksie, f, wat 283 00:14:12,990 --> 00:14:17,652 geslaag om dit as 'n argument met geen argumente self. 284 00:14:17,652 --> 00:14:19,110 So, wat kan verwarrend gewees het. 285 00:14:19,110 --> 00:14:21,890 286 00:14:21,890 --> 00:14:28,400 As ons dit verstaan ​​as f2 neem f1 as 'n argument, en dan binnekant van f2, 287 00:14:28,400 --> 00:14:31,190 f kry called-- wat beteken dat hierdie lyn van die kode, 288 00:14:31,190 --> 00:14:34,192 ná hierdie twee lyne van kode, resultate in "hallo" 289 00:14:34,192 --> 00:14:35,400 gedruk om die konsole. 290 00:14:35,400 --> 00:14:41,660 291 00:14:41,660 --> 00:14:44,910 >> Die feit dat ons kan slaag funksies rond soos waardes 292 00:14:44,910 --> 00:14:47,870 eindig een van die mees kragtige kenmerke van JavaScript 293 00:14:47,870 --> 00:14:49,700 as 'n programmeertaal. 294 00:14:49,700 --> 00:14:52,782 Buitekant van alle van die vreeslike dinge wat dit kan doen, 295 00:14:52,782 --> 00:14:54,990 net soos 'n kenmerk van die taal in terme van die manier 296 00:14:54,990 --> 00:14:58,400 dat dit maak dinge maklik om die program en kan 297 00:14:58,400 --> 00:15:01,060 vir dinge wat nie is veral goed geskik is vir die web, 298 00:15:01,060 --> 00:15:04,500 funksionele programmering en funksionele programmering aspekte van JavaScript 299 00:15:04,500 --> 00:15:07,130 is een van die mees kragtige konsepte wat 300 00:15:07,130 --> 00:15:11,030 bestaan ​​in JavaScript-- as jy my vra. 301 00:15:11,030 --> 00:15:11,960 Koel. 302 00:15:11,960 --> 00:15:13,534 >> So, volgende ding. 303 00:15:13,534 --> 00:15:16,450 Benewens die feit dat funksionele, daar is ook elemente van JavaScript 304 00:15:16,450 --> 00:15:20,510 wat objekgeoriënteerde, wat is een van die baie 305 00:15:20,510 --> 00:15:23,800 gewilde gonswoorde in rekenaarwetenskap. 306 00:15:23,800 --> 00:15:27,040 Objekgeoriënteerde programmering is 'n baie gewilde ding. 307 00:15:27,040 --> 00:15:34,210 JavaScript is 'n weergawe van dat, waar ek glo elke waarde is ook 308 00:15:34,210 --> 00:15:41,475 'n voorwerp, wat beteken dat elke voorwerp vou saam 'n paar aantal waardes. 309 00:15:41,475 --> 00:15:44,020 310 00:15:44,020 --> 00:15:49,750 So vir waardes wat eenvoudig is, soos 'n heelgetal, soos varX gelyk 5, 311 00:15:49,750 --> 00:15:52,250 daardie voorwerp net vou dat een waarde. 312 00:15:52,250 --> 00:15:54,760 313 00:15:54,760 --> 00:15:59,036 >> Maar ons kan ook 'n situasie indink where-- ons kan dink situasies in C 314 00:15:59,036 --> 00:16:00,910 waar ons wou doen iets structs, 315 00:16:00,910 --> 00:16:03,285 byvoorbeeld dat verskeie vou waardes saam en maak die 316 00:16:03,285 --> 00:16:05,870 dit baie maklik om dinge rondom slaag. 317 00:16:05,870 --> 00:16:09,270 Dit is wanneer 'n voorwerp is in JavaScript. 318 00:16:09,270 --> 00:16:12,340 >> Dit is belangrik om te onthou as ek sê dat voorwerpe toegedraai 319 00:16:12,340 --> 00:16:15,330 sommige aantal waardes saam wat funksioneer is ook 320 00:16:15,330 --> 00:16:21,506 waardes, wat beteken dat funksies kan ook binnekant van 'n JavaScript voorwerp. 321 00:16:21,506 --> 00:16:26,910 En die rede wat belangrik is is dat, terwyl ons dikwels 322 00:16:26,910 --> 00:16:30,290 dink roep 'n metode op 'n voorwerp wat 323 00:16:30,290 --> 00:16:35,200 van 'n gewilde term uit ander gewilde objekgeoriënteerde tale, 324 00:16:35,200 --> 00:16:39,330 een van die verskille hier is dat alles wat 'n metode is in JavaScript 325 00:16:39,330 --> 00:16:47,270 'n waarde is gestoor binnekant van 'n voorwerp wat verrig 'n action-- moontlik 326 00:16:47,270 --> 00:16:51,850 die gebruik van die ander waardes wat binne is van daardie voorwerp, maar nie noodwendig nie. 327 00:16:51,850 --> 00:16:56,930 So jy kan dink 'n situasie, ek dink in 'n bietjie van 'n mal manier, 328 00:16:56,930 --> 00:17:02,990 waar jy 'n metode van een wat geroep is beswaar op 'n ander voorwerp, byvoorbeeld. 329 00:17:02,990 --> 00:17:06,010 So, dit is 'n bietjie funky op dié manier. 330 00:17:06,010 --> 00:17:09,369 >> En jy kan ook die metodes verander wat verband hou met 'n voorwerp 331 00:17:09,369 --> 00:17:13,740 deur die toeken van hierdie metode 'n nuwe funksie, wat ook 332 00:17:13,740 --> 00:17:18,250 mooi anders as ander objekgeoriënteerde tale, waar 333 00:17:18,250 --> 00:17:21,410 Sodra ons 'n voorwerp verklaar en instansieer dit 334 00:17:21,410 --> 00:17:25,839 Ons kan nie die metodes wat verander wat verband hou met daardie voorwerp nie. 335 00:17:25,839 --> 00:17:28,680 So dis nogal anders. 336 00:17:28,680 --> 00:17:29,570 Koel. 337 00:17:29,570 --> 00:17:34,010 >> So hier is 'n voorbeeld, in die eerste, van 'n voorwerp in aksie. 338 00:17:34,010 --> 00:17:36,390 Dit is wat genoem 'n generiese voorwerp, wat 339 00:17:36,390 --> 00:17:39,460 beteken dat dit nie het nie bepaalde naam, het nie 'n klas, 340 00:17:39,460 --> 00:17:42,190 dit is net 'n paar wikkel waardes. 341 00:17:42,190 --> 00:17:49,790 En die manier waarop lyk is, het ons ' hierdie buitenste denim krullerige draadjies hier 342 00:17:49,790 --> 00:17:57,950 wat aandui JavaScript en sê, dit is 'n voorwerp. 343 00:17:57,950 --> 00:18:02,130 Die waardes binnekant van dit is elke waardes binnekant 344 00:18:02,130 --> 00:18:04,590 van die voorwerp wat behoort word opgerol. 345 00:18:04,590 --> 00:18:09,180 En binnekant van die voorwerp, ons dan sleutel waarde pare 346 00:18:09,180 --> 00:18:13,880 waar die sleutel verwys na die naam van die waarde binnekant van die voorwerp, 347 00:18:13,880 --> 00:18:16,790 en die ander side-- teenoor die kolon here-- 348 00:18:16,790 --> 00:18:19,850 is die werklike waarde wat gestoor moet word. 349 00:18:19,850 --> 00:18:26,210 >> So jy sien hier dat ons 'n sleutel genoem fn met waarde sam, 350 00:18:26,210 --> 00:18:29,430 gevolg deur 'n komma, sê op die volgende inskrywing. 351 00:18:29,430 --> 00:18:33,560 Dan is 'n sleutel genoem ln, met 'n waarde van groen, 352 00:18:33,560 --> 00:18:35,840 gevolg deur 'n komma, gevolg deur "druk," 353 00:18:35,840 --> 00:18:43,209 wat gaan om 'n funksie waarde wat gaan om hierdie reël van die kode te doen. 354 00:18:43,209 --> 00:18:45,500 Kom ons neem 'n stap terug en pak wat gaan hier aan. 355 00:18:45,500 --> 00:18:47,280 So, dit is 'n bietjie ingewikkeld, en ons sien iets nuuts 356 00:18:47,280 --> 00:18:48,071 vir die eerste keer. 357 00:18:48,071 --> 00:18:51,190 358 00:18:51,190 --> 00:18:55,065 Die "dit" navraag is die nuwe ding ons hier sien, en wat dit doen 359 00:18:55,065 --> 00:19:00,540 is, verwys na die huidige beswaar in omvang, reg? 360 00:19:00,540 --> 00:19:03,990 So wanneer ons sê, dit wys al die pad terug 361 00:19:03,990 --> 00:19:08,140 om hierdie hele object-- wanneer ons dit doen this.fn, 362 00:19:08,140 --> 00:19:11,990 ons gaan al die pad terug te gaan om hierdie voorwerp, gaan na die FN waarde 363 00:19:11,990 --> 00:19:16,471 en kry sam, trek dit al die pad rug, hou dit hier, en dan beweeg op. 364 00:19:16,471 --> 00:19:19,838 >> GEHOOR: So met die herwinning, is wat gedoen as gevolg van die parameter 365 00:19:19,838 --> 00:19:20,621 definisie? 366 00:19:20,621 --> 00:19:23,870 SAM GREEN: So die vraag is, is die herwinning gedoen as gevolg van die parameter 367 00:19:23,870 --> 00:19:24,727 definisie? 368 00:19:24,727 --> 00:19:25,435 Ja, absoluut. 369 00:19:25,435 --> 00:19:29,660 370 00:19:29,660 --> 00:19:32,470 Wat gaan hier gebeur nie, hierdie dot sê die JavaScript, 371 00:19:32,470 --> 00:19:39,990 OK, ek kry 'n bietjie waarde Van hierdie voorwerp van myself. 372 00:19:39,990 --> 00:19:46,375 En dan sal dit vir 'n inskrywing te kyk genoem FN, en as dit kry, 373 00:19:46,375 --> 00:19:48,470 dit sal terugkeer wat value-- so, dit is Sam. 374 00:19:48,470 --> 00:19:51,540 Maar ek kon ook getik iets wat nie hier is gedefinieer, 375 00:19:51,540 --> 00:19:54,090 en dan is dit net terugkeer undefined-- wat 376 00:19:54,090 --> 00:19:58,250 is 'n ding wat kan JavaScript doen, wat voordele kan hê, 377 00:19:58,250 --> 00:20:03,190 maar dit is also-- as jy 'n tikfout maak, dit kan lei tot vreemde foute. 378 00:20:03,190 --> 00:20:05,617 So dit sal net probeer om uit te vind alles wat jy sê dit om uit te vind 379 00:20:05,617 --> 00:20:07,700 en dit is nie van plan om kla as dit nie vind nie. 380 00:20:07,700 --> 00:20:11,390 Dit sal net sê, ek het nie vind dit, en dan beweeg op. 381 00:20:11,390 --> 00:20:17,581 So dit sal ongedefinieerd, plus leeg, plus die laaste naam. 382 00:20:17,581 --> 00:20:18,080 Ja. 383 00:20:18,080 --> 00:20:21,070 En dan kan ons sien dat as ons kan dan neerdaal en access-- 384 00:20:21,070 --> 00:20:25,450 en ons tf.print () met hakies noem. 385 00:20:25,450 --> 00:20:30,000 Dit gaan om daardie druk noem funksie met geen argumente, reg? 386 00:20:30,000 --> 00:20:34,490 Maar as ons sê net tf.print () kommapunt, sonder die hakies, 387 00:20:34,490 --> 00:20:37,480 al sou dit gedoen het, is trek die funksie van die waarde, 388 00:20:37,480 --> 00:20:40,609 maar nie eintlik dit genoem. 389 00:20:40,609 --> 00:20:41,162 Koel. 390 00:20:41,162 --> 00:20:42,870 HUGH Zabriskie: Indien ons 'n voorwerp te maak? 391 00:20:42,870 --> 00:20:44,161 SAM GREEN: Sure, laat ons dit doen. 392 00:20:44,161 --> 00:20:48,750 So ek kan dit beweeg byvoorbeeld om die konsole. 393 00:20:48,750 --> 00:20:51,380 394 00:20:51,380 --> 00:20:55,466 Ons kan dink dat ek 'n voorwerp. 395 00:20:55,466 --> 00:21:03,026 396 00:21:03,026 --> 00:21:04,150 So, dit is 'n eenvoudige voorwerp. 397 00:21:04,150 --> 00:21:06,910 398 00:21:06,910 --> 00:21:11,050 Dit is 'n voorwerp wat twee bevat waardes met twee sleutels, twee belangrike waarde 399 00:21:11,050 --> 00:21:12,710 pare. 400 00:21:12,710 --> 00:21:21,850 So ek kan dan toegang tot die waarde gestoor binnekant van hierdie voorwerp deur te doen x.x1, 401 00:21:21,850 --> 00:21:23,400 byvoorbeeld, en ek kry 1 rug. 402 00:21:23,400 --> 00:21:29,590 Net so, x.x2 kry wat waarde terug. 403 00:21:29,590 --> 00:21:33,330 >> En nou het die regtig cool ding is, ek kan eintlik iets toe te voeg tot hierdie voorwerp 404 00:21:33,330 --> 00:21:34,316 nadat ek dit gemaak het. 405 00:21:34,316 --> 00:21:36,315 So jy kan dink, laat sê ek het 'n funksie. 406 00:21:36,315 --> 00:21:44,430 407 00:21:44,430 --> 00:21:46,352 >> HUGH Zabriskie: Jy hoef te doen shift-Enter. 408 00:21:46,352 --> 00:21:47,643 >> SAM GREEN: O, dit is irriterend. 409 00:21:47,643 --> 00:22:02,460 410 00:22:02,460 --> 00:22:04,324 Wat het dit nie hou nie? 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 Hier gaan ons. 414 00:22:08,691 --> 00:22:09,190 Koel. 415 00:22:09,190 --> 00:22:12,840 >> So ek het net geskep hierdie funksie, f, wat 416 00:22:12,840 --> 00:22:17,590 gaan om te gaan na die huidige voorwerp en druk this.x1. 417 00:22:17,590 --> 00:22:20,330 So as ek net f noem self, niks gaan 418 00:22:20,330 --> 00:22:26,970 gebeur, reg, want daar is geen x1 gebied in die voorwerp dit verwys. 419 00:22:26,970 --> 00:22:39,710 Maar, as ek sê, x.f = f, en dan het ek noem x.f (), ek gaan terug 1 te kry. 420 00:22:39,710 --> 00:22:42,990 421 00:22:42,990 --> 00:22:46,530 F funksie is nou wat verband hou met die voorwerp x, 422 00:22:46,530 --> 00:22:51,800 wat 'n sleutelrol genoem x1 het wat verband hou met die waarde 1, 423 00:22:51,800 --> 00:22:54,570 sodat wanneer ons this.x1 noem, dit is gaan om te vind wat dit is op soek na 424 00:22:54,570 --> 00:22:56,450 en in staat wees om 'n waarde te druk. 425 00:22:56,450 --> 00:22:58,700 So dit is net een voorbeeld van die soort van die mal dinge 426 00:22:58,700 --> 00:23:01,190 wat jy kan doen met voorwerpe in JavaScript. 427 00:23:01,190 --> 00:23:03,870 428 00:23:03,870 --> 00:23:07,560 >> Sodat weergawe was die generiese weergawe, betekenis 429 00:23:07,560 --> 00:23:13,780 dat ons 'n voorwerp gebruik van hierdie geskep het hakies notation-- stut notasie, 430 00:23:13,780 --> 00:23:16,880 rather-- en dit is handig as ons wil net 431 00:23:16,880 --> 00:23:21,440 een voorbeeld van 'n spesifieke voorwerp, maar wat as ons wil meer as een 432 00:23:21,440 --> 00:23:22,210 van dieselfde soort? 433 00:23:22,210 --> 00:23:24,440 En die antwoord op die vraag is, is daar dinge 434 00:23:24,440 --> 00:23:26,760 genoem klasse in JavaScript sowel. 435 00:23:26,760 --> 00:23:31,470 436 00:23:31,470 --> 00:23:36,420 Ons kan 'n funksie te skep wat doen 'n soort van inisialisering 437 00:23:36,420 --> 00:23:41,690 vir 'n vreemde voorwerp, en ons wil sê, soos, 438 00:23:41,690 --> 00:23:44,550 my class-- sodat die naam van die herbruikbare object-- 439 00:23:44,550 --> 00:23:47,100 gelyk funksie wat dit stel. 440 00:23:47,100 --> 00:23:52,280 So, wat sou dit wees ekwivalent om skep 'n voorwerp wat 441 00:23:52,280 --> 00:23:55,930 sou net graag, krullerige brace, str, kolon, 442 00:23:55,930 --> 00:23:59,630 dit is 'n string, kommapunt, krullerige brace. 443 00:23:59,630 --> 00:24:01,880 Dit sou die generiese wees voorwerp wat ons inisialiseer, 444 00:24:01,880 --> 00:24:06,380 met die een verskil dat die volgende lyne skep ons 'n prototipe, wat 445 00:24:06,380 --> 00:24:11,190 beteken dit is 'n standaard sleutel wat ons by ons voorwerp wat 446 00:24:11,190 --> 00:24:13,970 het die hier gelys waarde. 447 00:24:13,970 --> 00:24:20,570 Dit beteken dat, wanneer ek 'n nuwe geval van hierdie MyClass voorwerp, 448 00:24:20,570 --> 00:24:27,440 dit gaan het pre-gebou binnekant van dit nie 'n waarde genoem en 'n ander waarde str 449 00:24:27,440 --> 00:24:32,418 genoem myPrint, wat gaan 'n funksie wees. 450 00:24:32,418 --> 00:24:32,918 Awesome. 451 00:24:32,918 --> 00:24:37,410 452 00:24:37,410 --> 00:24:37,990 >> Groot. 453 00:24:37,990 --> 00:24:40,710 So is die laaste ding om sê oor JavaScript 454 00:24:40,710 --> 00:24:46,430 is dat dit is regtig nuttig vir wat is asynchrone bedrywighede genoem. 455 00:24:46,430 --> 00:24:52,500 Asynchrone beteken is dat ons kan nie wag vir 'n paar werking 456 00:24:52,500 --> 00:24:57,870 om te voltooi voordat ons beweeg op, maar beweeg terwyl ons wag 457 00:24:57,870 --> 00:24:59,690 en dan is daar iets gebeur later. 458 00:24:59,690 --> 00:25:03,480 En wat ek bedoel met dit is, jy kan 'n situasie waar dink 459 00:25:03,480 --> 00:25:06,850 jy 'n versoek om te stuur sommige web server iewers, 460 00:25:06,850 --> 00:25:09,670 en dit gaan om jou terug te stuur 'n paar groot stuk van data, reg? 461 00:25:09,670 --> 00:25:13,320 En jou gebruikers kan wag in die Intussen voor dit gebeur, 462 00:25:13,320 --> 00:25:15,200 en niks kon wees gaan op daardie tydstip. 463 00:25:15,200 --> 00:25:18,110 Maar dit is nie 'n groot ontwerp, reg? 464 00:25:18,110 --> 00:25:20,214 Jy wil nie die webblad te vries. 465 00:25:20,214 --> 00:25:22,380 Wat as die gebruiker wil Klik op 'n drop-down menu? 466 00:25:22,380 --> 00:25:24,870 Dit is nie 'n groot ontwerp patroon. 467 00:25:24,870 --> 00:25:29,290 In plaas daarvan, basies wat JavaScript is sê, 468 00:25:29,290 --> 00:25:31,870 OK, doen hierdie aksie asynchroon. 469 00:25:31,870 --> 00:25:36,520 Dus, net soos, wag in die agtergrond, en dan wanneer die operasie is gedoen, 470 00:25:36,520 --> 00:25:39,420 noem die terugbel function-- noem 'n funksie, 471 00:25:39,420 --> 00:25:43,800 sommige action-- te sein dat die werking ons wag vir tot einde 472 00:25:43,800 --> 00:25:45,520 is verby. 473 00:25:45,520 --> 00:25:51,240 En die rede is dat super kragtige is, kan ons iets doen, slaag 'n argument, 474 00:25:51,240 --> 00:25:54,440 iets te doen, en dan wag vir iets om te gebeur. 475 00:25:54,440 --> 00:25:58,970 Dan, wanneer daar iets rondt, kan ons 'n terugbel noem. 476 00:25:58,970 --> 00:26:03,300 Dit is regtig handig want dit kan ons dinge met Web Audio API te doen, 477 00:26:03,300 --> 00:26:07,490 byvoorbeeld, soos 'n vrag klank-lêer van 'n afgeleë bediener 478 00:26:07,490 --> 00:26:11,660 sonder om te wag vir die hele klank lêer gelaai word, 479 00:26:11,660 --> 00:26:14,440 wat eintlik sou wees sleg vir gebruikers ervaring. 480 00:26:14,440 --> 00:26:17,080 Koel. 481 00:26:17,080 --> 00:26:19,460 >> Laaste paar notas oor ontfouting, aangesien dit 482 00:26:19,460 --> 00:26:23,682 is 'n ding wat jy gaan hê om te doen as deel van die projek, gewaarborg. 483 00:26:23,682 --> 00:26:25,140 Ek het genoem dat die JavaScript console. 484 00:26:25,140 --> 00:26:27,550 Dit is 'n super nuttige funksie van alle moderne blaaiers, 485 00:26:27,550 --> 00:26:30,300 En ons regtig jou aanmoedig om te kry gemaklik met jou console, 486 00:26:30,300 --> 00:26:33,660 as jy wil 'n goeie te kry op JavaScript. 487 00:26:33,660 --> 00:26:36,320 Dit is super handig vir ontfouting, maar dit is ook 488 00:26:36,320 --> 00:26:39,440 regtig nuttig vir uitzoeken hoe om 'n API te gebruik. 489 00:26:39,440 --> 00:26:41,950 Dit maak voorsiening vir baie maklik eksperimentering 490 00:26:41,950 --> 00:26:45,910 sonder om 'n soort kode, en stel dit dan aan. 491 00:26:45,910 --> 00:26:47,500 Jy hoef nie al die stappe te doen. 492 00:26:47,500 --> 00:26:49,619 Jy kan net skryf sommige kode in 'n lyn, 493 00:26:49,619 --> 00:26:52,410 en dan kry onmiddellike terugvoer oor of dat die lyn van die kode 494 00:26:52,410 --> 00:26:55,230 worked-- baie handig. 495 00:26:55,230 --> 00:26:59,760 >> En ook, net 'n tegniese note-- die JavaScript konsole is 'n voorbeeld 496 00:26:59,760 --> 00:27:05,680 van 'n REPL-- so dit is R-E-P-L, repl, wat staan ​​vir lees, evalueer, 497 00:27:05,680 --> 00:27:06,180 Druk lus. 498 00:27:06,180 --> 00:27:09,100 499 00:27:09,100 --> 00:27:12,120 Jy gaan 'n paar dinge te tik in, dit sal lees wat jy getik in, 500 00:27:12,120 --> 00:27:17,280 dit sal evalueer, en dit sal die druk uitvoer, en dan sal dit weer begin. 501 00:27:17,280 --> 00:27:22,056 Wat jou toelaat om vinnig te gaan in sirkels iterating, wat is regtig cool. 502 00:27:22,056 --> 00:27:25,150 503 00:27:25,150 --> 00:27:28,930 >> Ek dink werklike laaste note-- hierdie is die werklike laaste noot, ja. 504 00:27:28,930 --> 00:27:30,780 Hoe gebruik ons ​​eintlik JavaScript? 505 00:27:30,780 --> 00:27:34,040 So die eerste, kan ons invoer dit met behulp van 'n script tag 506 00:27:34,040 --> 00:27:39,500 by die bo-of onderkant van 'n HTML file-- oral binnekant van 'n HTML-lêer, 507 00:27:39,500 --> 00:27:40,440 regtig. 508 00:27:40,440 --> 00:27:47,390 En binne 'n script tag, is daar twee sub-maniere van die invoer JavaScript. 509 00:27:47,390 --> 00:27:51,370 Die eerste is deur 'n aparte JavaScript lêer 510 00:27:51,370 --> 00:27:58,010 wat ons invoer in sy geheel, of deur met 'n oppervlakte van die kode soos script 511 00:27:58,010 --> 00:28:00,290 om te begin, en dan backslash script tot einde. 512 00:28:00,290 --> 00:28:02,620 En dan skryf ons net JavaScript binne-in die HTML-lêer. 513 00:28:02,620 --> 00:28:03,790 Dit is die twee maniere. 514 00:28:03,790 --> 00:28:05,165 Jy kan dit nie binnekant van HTML. 515 00:28:05,165 --> 00:28:06,502 516 00:28:06,502 --> 00:28:08,126 GEHOOR: Is een beter as die ander? 517 00:28:08,126 --> 00:28:10,542 SAM GREEN: Die vraag was, is een beter as die ander. 518 00:28:10,542 --> 00:28:18,306 So, ja, as 'n kodering styl praktyk, en ook dit is soos 'n ontwerp praktyk. 519 00:28:18,306 --> 00:28:20,180 Daar is twee redes waarom dit dalk beter wees. 520 00:28:20,180 --> 00:28:23,934 Die eerste is, dit maak jou kode 'n baie meer leesbare as al jou HTML 521 00:28:23,934 --> 00:28:27,100 is in een plek, al jou CSS is in 'n ander plek, al jou JavaScript 522 00:28:27,100 --> 00:28:28,420 is in 'n derde plek. 523 00:28:28,420 --> 00:28:28,920 Reg? 524 00:28:28,920 --> 00:28:32,370 Ek dink ons ​​het reeds moes gepraat oor dit in sections-- soos CSS-- wat 525 00:28:32,370 --> 00:28:35,220 dat is-- en dit gaan dikwels in 'n ander lêer. 526 00:28:35,220 --> 00:28:37,090 So, soortgelyke soort konsep hier. 527 00:28:37,090 --> 00:28:42,410 Jy kan ook dink dat JavaScript sou hergebruik op meer as een 528 00:28:42,410 --> 00:28:47,350 HTML bladsy, of dalk 'n baie HTML bladsye, 529 00:28:47,350 --> 00:28:49,340 en gesien dat JavaScript refactored in een 530 00:28:49,340 --> 00:28:51,950 lêer wat jy kan invoer in meer as een plek 531 00:28:51,950 --> 00:28:54,570 laat die kode te wees manier om meer te onderhou. 532 00:28:54,570 --> 00:28:57,930 Jy kan dink om een verander na die JavaScript 533 00:28:57,930 --> 00:29:00,070 en om te verander in 100 verskillende lêers. 534 00:29:00,070 --> 00:29:04,070 En in plaas daarvan kan ons net verander dit in een, wat is manier om meer kragtig. 535 00:29:04,070 --> 00:29:05,420 Het ek jou vraag beantwoord? 536 00:29:05,420 --> 00:29:07,950 Koel. 537 00:29:07,950 --> 00:29:10,830 >> Ons kan ook tik in die console, Soos ons reeds genoem het. 538 00:29:10,830 --> 00:29:15,070 En weer, 'n laaste note-- Web Audio is gebou in, 539 00:29:15,070 --> 00:29:16,978 jy hoef nie om iets te laai. 540 00:29:16,978 --> 00:29:17,478 Koel. 541 00:29:17,478 --> 00:29:20,519 Is daar enige vrae, het jy meer vrae oor JavaScript 542 00:29:20,519 --> 00:29:21,930 voordat ons? 543 00:29:21,930 --> 00:29:24,286 >> GEHOOR: [onhoorbaar] 544 00:29:24,286 --> 00:29:25,410 SAM GREEN: Alle reg, cool. 545 00:29:25,410 --> 00:29:27,200 So nou is hy gaan om te praat oor die API. 546 00:29:27,200 --> 00:29:28,490 >> HUGH Zabriskie: Cool. 547 00:29:28,490 --> 00:29:28,990 Dankie, Sam. 548 00:29:28,990 --> 00:29:30,184 >> SAM GREEN: Natuurlik. 549 00:29:30,184 --> 00:29:32,600 HUGH Zabriskie: Awesome, so ons sal op uit JavaScript beweeg. 550 00:29:32,600 --> 00:29:35,350 Dus het ons gepraat oor 'n paar van die noodsaaklikhede van JavaScript, 551 00:29:35,350 --> 00:29:41,105 en dit is die veranderlikes, funksies, voorwerpe, funksies as veranderlikes, 552 00:29:41,105 --> 00:29:41,980 asynchrone laai. 553 00:29:41,980 --> 00:29:46,100 Dit is alles dinge wat jy sal sien as jy die Web Audio gebruik. 554 00:29:46,100 --> 00:29:49,230 So ons is maar net gaan om te praat oor dit die eerste in 'n hoë vlak. 555 00:29:49,230 --> 00:29:52,120 >> Dit is 'n API, so dit is iets dit is gebou, as Sam gesê, 556 00:29:52,120 --> 00:29:57,010 reg in die JavaScript wat jy gebruik in die konsole. 557 00:29:57,010 --> 00:30:01,020 En dit is eintlik net soos C ++ kode wat regtig gebou in Chrome 558 00:30:01,020 --> 00:30:04,470 en Firefox, en al hierdie blaaiers. 559 00:30:04,470 --> 00:30:07,060 Dus is die belangrikste idee Web Audio is dat jy 560 00:30:07,060 --> 00:30:09,440 hierdie soort van pyplyn van die klank, reg? 561 00:30:09,440 --> 00:30:13,670 So jou klank data kom in een of ander vorm. 562 00:30:13,670 --> 00:30:16,690 >> Daar is soort van drie hoof forms-- jy het die ossillator, wat 563 00:30:16,690 --> 00:30:21,340 skep 'n sinusgolf, kosinus golf, ons gaan om te sien hoe dit werk. 564 00:30:21,340 --> 00:30:23,890 Nog 'n baie algemene een, natuurlik, is 'n MP3. 565 00:30:23,890 --> 00:30:25,810 So miskien het jy begin met 'n lied, en dan moet jy 566 00:30:25,810 --> 00:30:28,320 wil 'n paar filtering doen dat die uitset en 567 00:30:28,320 --> 00:30:30,605 that-- wat kan 'n moontlike bron. 568 00:30:30,605 --> 00:30:32,480 En dan 'n baie cool een is die mikrofoon. 569 00:30:32,480 --> 00:30:37,230 Sodat jy kan 'n paar baie gebruik basiese oproepe in JavaScript 570 00:30:37,230 --> 00:30:39,440 om toegang tot die kry mikrofoon, en so as jy 571 00:30:39,440 --> 00:30:42,870 wou 'n app maak soos 'n blad detector, 572 00:30:42,870 --> 00:30:45,290 byvoorbeeld dat neem in jou stem en figure uit 573 00:30:45,290 --> 00:30:47,740 die pitch-- baie maklike manier om dit te. 574 00:30:47,740 --> 00:30:50,730 Jy kan net soort van lees dit in, uit te vind die frekwensie, 575 00:30:50,730 --> 00:30:52,250 en dan uitset 'n nommer. 576 00:30:52,250 --> 00:30:56,080 So ons sal sien hoe dit werk, as well. 577 00:30:56,080 --> 00:30:59,430 >> Die bestemming is basies waar die klank data is uitset. 578 00:30:59,430 --> 00:31:02,890 So algemeen, dit is soos jou laptop sprekers. 579 00:31:02,890 --> 00:31:05,610 Ander opsies is soos 'n ScriptProcessorNode-- 580 00:31:05,610 --> 00:31:07,990 ons nodes in 'n kry second-- maar basies, 581 00:31:07,990 --> 00:31:11,939 óf jy om klank uit deur jou rekenaar deur sprekers, 582 00:31:11,939 --> 00:31:14,730 of jy soort van die opname, so jy dit stoor as klank data. 583 00:31:14,730 --> 00:31:18,980 So miskien as iemand skep musiek in jou jeug en dan 584 00:31:18,980 --> 00:31:22,410 jy wil hê dat die teken en miskien soos uitvoer om dit te SoundCloud vir example-- 585 00:31:22,410 --> 00:31:25,281 dat een manier om dit te doen sou wees. 586 00:31:25,281 --> 00:31:27,030 Al die pret dinge, wat sal ons praat oor, 587 00:31:27,030 --> 00:31:29,950 gebeur tussen hierdie twee punte, waar ons in die musiekbedryf te laai 588 00:31:29,950 --> 00:31:31,410 en dan uitset dit. 589 00:31:31,410 --> 00:31:36,660 >> So ek gaan om te praat oor die vyf stadiums van klank produksie in 'n tweede. 590 00:31:36,660 --> 00:31:38,950 Ons het hierdie ding genoem 'n AudioContext, wat 591 00:31:38,950 --> 00:31:41,580 is hierdie klein wrapper ons hier sien. 592 00:31:41,580 --> 00:31:49,980 Basies wat AudioContext is-- as ons gaan na die JavaScript konsole nou, 593 00:31:49,980 --> 00:31:52,740 Ons kan 'n mens nou skep. 594 00:31:52,740 --> 00:31:54,040 Net 'n voorbeeld van repl, reg? 595 00:31:54,040 --> 00:31:57,880 Ons lees, evaluering, en dit druk. 596 00:31:57,880 --> 00:32:00,260 >> AudioContext is 'n globale toestand. 597 00:32:00,260 --> 00:32:05,500 Dit is 'n struct, dit is 'n voorwerp hier, en dit hou inligting 598 00:32:05,500 --> 00:32:09,960 oor dinge wat aangaan op die skerm wat verband hou met klank. 599 00:32:09,960 --> 00:32:15,220 Een voorbeeld is die huidige tyd. 600 00:32:15,220 --> 00:32:18,910 Dit vertel jou die aantal sekondes, presies, 601 00:32:18,910 --> 00:32:20,890 sedert die webblad gelaai. 602 00:32:20,890 --> 00:32:24,110 So, dit is 'n baie nuttige bietjie eiendom wat jy kan gebruik. 603 00:32:24,110 --> 00:32:27,898 Dit lees only-- Ek dink eintlik jy kan probeer om dit te stel 'n waarde. 604 00:32:27,898 --> 00:32:29,856 Dit sal jou vertel dit stel, en dan as jy dit druk 605 00:32:29,856 --> 00:32:31,439 again-- dit het nie eintlik baie werk. 606 00:32:31,439 --> 00:32:34,472 So is daar lees-alleen eiendomme in JavaScript. 607 00:32:34,472 --> 00:32:36,430 Dit is regtig nuttig as jy soort sinchroniseer 608 00:32:36,430 --> 00:32:38,610 'n baie verskillende inligting, wanneer jy 609 00:32:38,610 --> 00:32:41,280 soort speel verskillende klanke. 610 00:32:41,280 --> 00:32:43,630 >> Nog 'n baie nuttige een is die konteks bestemming. 611 00:32:43,630 --> 00:32:46,587 612 00:32:46,587 --> 00:32:49,670 Beslis, as jy belangstel, wees probeer dit op jou eie konsole reg 613 00:32:49,670 --> 00:32:50,980 nou. 614 00:32:50,980 --> 00:32:53,150 So dit is 'n AudioDestinationNode. 615 00:32:53,150 --> 00:32:56,480 Basies wat hierdie sê is, Waar is die uitset gaan? 616 00:32:56,480 --> 00:32:59,590 So is daar twee opsies real hier. 617 00:32:59,590 --> 00:33:01,940 Gewoonlik is die verstek is net luidsprekers, 618 00:33:01,940 --> 00:33:05,150 so AudioDestinationNode basies net sê 619 00:33:05,150 --> 00:33:09,240 daar is zero uitgange na die geluid kom in, gestuur word aan die spreker. 620 00:33:09,240 --> 00:33:12,050 So algemeen, jy doen nie het om te speel met dit. 621 00:33:12,050 --> 00:33:15,720 As jy belangstel in die gebruik van is eintlik die ScriptProcessorNode vir die opname, 622 00:33:15,720 --> 00:33:16,990 vir my 'n beslis skiet e-pos later, want dit is 623 00:33:16,990 --> 00:33:18,330 'n bietjie meer ingewikkeld. 624 00:33:18,330 --> 00:33:21,590 Maar oor die algemeen, jy is net soort van uitdruk klank in een of ander vorm. 625 00:33:21,590 --> 00:33:24,347 So cool, sal ons weer hier te spring. 626 00:33:24,347 --> 00:33:25,180 GEHOOR: Ek is jammer. 627 00:33:25,180 --> 00:33:26,054 HUGH Zabriskie: Ja. 628 00:33:26,054 --> 00:33:28,770 GEHOOR: Ek weet jy het om te praat om jou later oor die opname. 629 00:33:28,770 --> 00:33:31,550 Kan jy dit koppelvlak met Pro Tools? 630 00:33:31,550 --> 00:33:33,120 >> HUGH Zabriskie: Met Pro Tools? 631 00:33:33,120 --> 00:33:35,260 Kom ons kyk. 632 00:33:35,260 --> 00:33:37,220 Ek dink nie so nie. 633 00:33:37,220 --> 00:33:41,670 So gaan tussen die kliënt, wat is die JavaScript 634 00:33:41,670 --> 00:33:44,310 console, en jou werklike rekenaar, is oor die algemeen 635 00:33:44,310 --> 00:33:46,490 iets wat soort van buite perke, as jy 636 00:33:46,490 --> 00:33:52,320 sal, soort deur die aard van the-- dit is soort van 'n ontwerp ding, 637 00:33:52,320 --> 00:33:57,770 maar jy probeer om die leser apart te hou van werklike die gebruiker se rekenaar. 638 00:33:57,770 --> 00:34:02,310 Oor die algemeen, die enigste ding wat jy kan is toegang is die mikrofoon of die kamera. 639 00:34:02,310 --> 00:34:04,730 Jy is nie in staat om, ek dink nie, gebruik Pro Tools. 640 00:34:04,730 --> 00:34:07,480 As jy egter geskep 'n spoor in Pro Tools, 641 00:34:07,480 --> 00:34:12,710 uitgevoer dat jy kan laai wat hier, filter, byvoorbeeld, 642 00:34:12,710 --> 00:34:16,820 proses wat, en teken wat in 'n Audio Destination-- of, no-- n Bol 643 00:34:16,820 --> 00:34:17,870 Verwerker Node. 644 00:34:17,870 --> 00:34:20,730 En dan van daar af, jy kan uitvoer wat tot SoundCloud, jy 645 00:34:20,730 --> 00:34:25,320 kan dit in 'n e-pos te stuur, of wat jy wil van daar af. 646 00:34:25,320 --> 00:34:31,159 >> Maar daar is 'n soort van 'n effense versperring tussen die maak van musiek op jou rekenaar 647 00:34:31,159 --> 00:34:33,050 en die maak van musiek online. 648 00:34:33,050 --> 00:34:37,940 >> SAM GREEN: En dit is nie uniek aan hierdie API. 649 00:34:37,940 --> 00:34:44,060 Dit is 'n kenmerk van sekuriteit Chrome, en Ek dink elke ander moderne leser. 650 00:34:44,060 --> 00:34:45,860 Die leser is self-vervat. 651 00:34:45,860 --> 00:34:50,980 So byvoorbeeld, 'n web bladsy kan nie gebruik JavaScript om die klank te draai 652 00:34:50,980 --> 00:34:54,190 op die luidsprekers, byvoorbeeld. 653 00:34:54,190 --> 00:34:58,120 Of dit kan nie jou rekenaar afskakel. 654 00:34:58,120 --> 00:35:01,530 En daar is geen intermediêre punt tussen dié twee dinge, regs, 655 00:35:01,530 --> 00:35:05,960 so óf jy het 'n volledige onttrekking, 656 00:35:05,960 --> 00:35:10,050 of jy die oop sekuriteit fout van die verhuring 657 00:35:10,050 --> 00:35:14,440 'n programmeerder met 'n slegte bedoelings doen wat hulle wil met jou laptop. 658 00:35:14,440 --> 00:35:18,104 En dit is hoekom Chrome is self-vervat. 659 00:35:18,104 --> 00:35:19,310 >> HUGH Zabriskie: Ja. 660 00:35:19,310 --> 00:35:20,840 Maak wat sin maak? 661 00:35:20,840 --> 00:35:21,369 Cool, cool. 662 00:35:21,369 --> 00:35:23,160 Ek is net gaan om te toon 'n voorbeeld van een. 663 00:35:23,160 --> 00:35:25,118 Dit is baie soos ver as wat jy kry, in terme 664 00:35:25,118 --> 00:35:26,950 toegang tot die gebruiker se rekenaar. 665 00:35:26,950 --> 00:35:30,180 As jy 'n USB sleutelbord ingeprop in, jy kan iets gebruik het die Web 666 00:35:30,180 --> 00:35:32,180 MIDI API, wat ons sal nie regtig praat oor hier, 667 00:35:32,180 --> 00:35:36,330 maar dit is 'n ander API wat weer gebou in minstens Chrome--, 668 00:35:36,330 --> 00:35:41,570 dit is hoekom ons is lief vir Chrome-- Ek dink Firefox of Safari, 669 00:35:41,570 --> 00:35:44,300 dit is 'n maklike ding om te google-- verskillende blaaiers het 670 00:35:44,300 --> 00:35:46,917 verskillende ondersteuning waarvoor APIs hulle geïmplementeer word. 671 00:35:46,917 --> 00:35:49,875 Maar as jy wil om aan te sluit in 'n sleutelbord en werk met die inligting, 672 00:35:49,875 --> 00:35:52,850 soort stuur die sleutelbord inligting oor die rekenaar 673 00:35:52,850 --> 00:35:57,620 en gebruik dan dat aanlyn, hierdie API is waar jy wil werk nie. 674 00:35:57,620 --> 00:35:58,150 >> Koel. 675 00:35:58,150 --> 00:35:58,710 OK. 676 00:35:58,710 --> 00:36:01,320 So, vinnig beweeg op hier. 677 00:36:01,320 --> 00:36:03,310 Hoe doen ons op tyd? 678 00:36:03,310 --> 00:36:04,210 >> Spreker 1: Sowat 15. 679 00:36:04,210 --> 00:36:05,543 >> HUGH Zabriskie: 15 minute oor? 680 00:36:05,543 --> 00:36:06,160 OK, cool. 681 00:36:06,160 --> 00:36:08,170 So sal ons voor hier ras. 682 00:36:08,170 --> 00:36:13,500 >> So basies, die belangrikste punt van dink van hierdie as 'n pyplyn 683 00:36:13,500 --> 00:36:16,430 is dat elke stap in die pyplyn is 'n reeks van klank nodes. 684 00:36:16,430 --> 00:36:19,284 685 00:36:19,284 --> 00:36:20,950 Ons bron, kom ons sê, is 'n ossillator. 686 00:36:20,950 --> 00:36:23,380 Ons moet 'n ossillator node skep. 687 00:36:23,380 --> 00:36:25,690 En dit is net 'n soort van die min function-- 688 00:36:25,690 --> 00:36:30,460 en hulle is almal gebaseer uit van die klank konteks hier. 689 00:36:30,460 --> 00:36:32,885 >> GEHOOR: Wanneer dit gesê ossillator, beteken dit 690 00:36:32,885 --> 00:36:37,250 dit is eintlik letterlik gaan van twee verskillende pole heen en weer? 691 00:36:37,250 --> 00:36:41,170 >> HUGH Zabriskie: Nee, dit is soos n digitale voorstelling. 692 00:36:41,170 --> 00:36:42,740 Dit is eintlik in C ++ geïmplementeer. 693 00:36:42,740 --> 00:36:46,460 Ek het eintlik nie weet wat die specs van hoe dit eintlik is geïmplementeer, 694 00:36:46,460 --> 00:36:48,500 Maar dit het alles werk as binêre data. 695 00:36:48,500 --> 00:36:51,260 696 00:36:51,260 --> 00:36:52,370 Eintlik, ja. 697 00:36:52,370 --> 00:36:53,950 Dit sou sê, ek kon eintlik, as jy belangstel, 698 00:36:53,950 --> 00:36:56,533 Ek kon 'n bietjie meer aan jou stuur inligting oor hoe golfvorms 699 00:36:56,533 --> 00:37:00,181 gehou met 'n digitale formaat. 700 00:37:00,181 --> 00:37:00,680 OK, cool. 701 00:37:00,680 --> 00:37:03,120 >> So ons genereer 'n toon soos 'n sine waai of iets soos dit, miskien 702 00:37:03,120 --> 00:37:04,190 440 Hertz. 703 00:37:04,190 --> 00:37:05,830 Ons skep 'n ossillator. 704 00:37:05,830 --> 00:37:09,180 As ons wil hê dat die volume te stel, ons koppel niks om 'n GainNode, 705 00:37:09,180 --> 00:37:12,500 wat ons kan doen met .creategain. 706 00:37:12,500 --> 00:37:14,250 Dit stel jou volume. 707 00:37:14,250 --> 00:37:17,820 Jy kan gebeur dat op enige van die ander options-- goed, 708 00:37:17,820 --> 00:37:20,300 so 'n klank buffer bron node is waar jy dalk 709 00:37:20,300 --> 00:37:23,660 stoor 'n MP3 dat jy in het gelaai. 710 00:37:23,660 --> 00:37:27,670 >> Biquad filter is vir die filter as jy wil al die basis uit te neem 711 00:37:27,670 --> 00:37:29,630 van 'n lied, of iets soos dit. 712 00:37:29,630 --> 00:37:32,450 God verbied wat jy wil neem die basis van 'n lied. 713 00:37:32,450 --> 00:37:36,980 En AudioDestination node is, weer, soos waar ons finalisering is. 714 00:37:36,980 --> 00:37:39,980 As jy ooit wil sien al die verskillende moontlike opsies, 715 00:37:39,980 --> 00:37:45,190 gaan net na die blad en laat die motor-volledige kom. 716 00:37:45,190 --> 00:37:48,690 En as jy te skep, sal jy sien al die verskillende dinge wat jy kan skep. 717 00:37:48,690 --> 00:37:50,398 Jy kan dinamiese skep script verwerkers, 718 00:37:50,398 --> 00:37:52,940 Ek weet nie eens wat dit is, vir die meng kanaal samesmeltings 719 00:37:52,940 --> 00:37:55,930 en kanaal ters en alles wat. 720 00:37:55,930 --> 00:37:56,430 Koel. 721 00:37:56,430 --> 00:37:59,560 722 00:37:59,560 --> 00:38:01,390 >> So dit is net 'n voorbeeld van 'n pyplyn. 723 00:38:01,390 --> 00:38:03,580 Het ons so drie bronne kom. 724 00:38:03,580 --> 00:38:06,830 Miskien is hierdie is golfvorms, Miskien is hierdie is MP3s. 725 00:38:06,830 --> 00:38:08,740 Een gaan deur 'n filter, 'n ander mens se 726 00:38:08,740 --> 00:38:12,404 kry verdraai ander 'n mens se panning links en regs. 727 00:38:12,404 --> 00:38:15,320 Jy kan allerhande dinge te doen en hulle almal kry gemeng om saam 728 00:38:15,320 --> 00:38:18,880 en dan kom uit die klank aan die einde, as bestemming. 729 00:38:18,880 --> 00:38:22,720 Dit is 'n voorbeeld van wat meer ingewikkeld Web Audio-kode lyk. 730 00:38:22,720 --> 00:38:26,720 Jy skep al hierdie verskillende voorwerpe reg here-- 731 00:38:26,720 --> 00:38:27,706 Ek is nie seker van hierdie. 732 00:38:27,706 --> 00:38:29,120 Nee, is dit nie in zoom. 733 00:38:29,120 --> 00:38:29,620 OK. 734 00:38:29,620 --> 00:38:31,257 >> SAM GREEN: Jy doen 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: Nee, nee. 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: O, beheer, Scroll? 740 00:38:38,140 --> 00:38:38,780 O, Gotcha. 741 00:38:38,780 --> 00:38:41,480 Ja. 742 00:38:41,480 --> 00:38:42,240 Sjoe, nope, nope. 743 00:38:42,240 --> 00:38:42,740 OK. 744 00:38:42,740 --> 00:38:46,090 Ek sal dit nie doen nie. 745 00:38:46,090 --> 00:38:48,300 >> So ja, in hierdie eerste artikel hier, jy sien 746 00:38:48,300 --> 00:38:52,720 ons skep al hierdie verskillende nodes uit die konteks. 747 00:38:52,720 --> 00:38:54,980 Ons net hulle piece saam in die tweede deel 748 00:38:54,980 --> 00:38:56,980 hierdie funksie genoem Connect. 749 00:38:56,980 --> 00:38:58,830 Dit is 'n baie belangrike funksie in Web Audio. 750 00:38:58,830 --> 00:39:01,930 Dit beteken net een keer jy gedoen het iets met die klank in een knoop, 751 00:39:01,930 --> 00:39:03,705 dit aan die volgende knoop. 752 00:39:03,705 --> 00:39:05,830 So het ons die bron, is dit verbind tot die ontleder, 753 00:39:05,830 --> 00:39:09,140 die ontleder doen iets met dit, dit gaan om die vervorming, en so aan, 754 00:39:09,140 --> 00:39:12,725 en na die bestemming aan die onderkant regs hier. 755 00:39:12,725 --> 00:39:13,225 Koel. 756 00:39:13,225 --> 00:39:14,640 OK, so ons sal bly beweeg aan. 757 00:39:14,640 --> 00:39:17,180 >> Die pipeline-- weer hierdie is die mees algemene pyplyne, 758 00:39:17,180 --> 00:39:21,300 so ons praat oor al hierdie dinge soos vervorming, panning, al hierdie dinge. 759 00:39:21,300 --> 00:39:24,280 As jy regtig belangstel in die gebruik van dinge Pro Tools, 760 00:39:24,280 --> 00:39:25,820 diegene wat jy waarskynlik belangstel. 761 00:39:25,820 --> 00:39:27,740 Indien nie, miskien het jy net wil die klank te speel, 762 00:39:27,740 --> 00:39:29,990 of dalk net wil hê jy moet stel die volume op die klank. 763 00:39:29,990 --> 00:39:35,270 Dit is die mees algemene soort twee van pypleidings in klank produksie. 764 00:39:35,270 --> 00:39:38,640 >> Weereens, die maniere waarop jy kan dit vat in as 'n oscillator-- so, laat 765 00:39:38,640 --> 00:39:42,460 doen 'n demo van daardie reg hier. 766 00:39:42,460 --> 00:39:47,090 767 00:39:47,090 --> 00:39:52,225 So ons gaan na 'n te skep eenvoudige klank konteks hier, 768 00:39:52,225 --> 00:39:54,350 en van dat ons gaan ons ossillator te skep. 769 00:39:54,350 --> 00:39:58,620 So dit is, weer, ons is net gaan roep Skep Ossillator. 770 00:39:58,620 --> 00:40:07,030 Ons gaan 'n frekwensie ingestel op dat 440 Hertz, almal se gunsteling. 771 00:40:07,030 --> 00:40:13,290 Dan koppel ons die bestemming point-- wat die spreker, so 772 00:40:13,290 --> 00:40:15,750 die konteks bestemming. 773 00:40:15,750 --> 00:40:21,400 Ten slotte, ons net sê, begin nul sekondes van nou af, en ons het klink? 774 00:40:21,400 --> 00:40:22,400 >> [Lui] 775 00:40:22,400 --> 00:40:24,980 >> HUGH Zabriskie: Hier gaan ons. 776 00:40:24,980 --> 00:40:25,940 Dit is net 'n sinusgolf. 777 00:40:25,940 --> 00:40:26,440 OK, cool. 778 00:40:26,440 --> 00:40:28,274 En dan sal ons stop nie. 779 00:40:28,274 --> 00:40:30,520 >> GEHOOR: Waar het dat terugvoering vandaan? 780 00:40:30,520 --> 00:40:31,250 >> HUGH Zabriskie: Die terugvoer? 781 00:40:31,250 --> 00:40:32,458 Ag, waarskynlik ons ​​mikrofone. 782 00:40:32,458 --> 00:40:34,221 783 00:40:34,221 --> 00:40:35,470 So ja, dit is hoe jy dit doen. 784 00:40:35,470 --> 00:40:37,261 En eintlik, as ek het dit hardloop, jy 785 00:40:37,261 --> 00:40:39,540 kon die frekwensie het waarde as dit loop, 786 00:40:39,540 --> 00:40:43,320 so dit is 'n prettige ding om te speel. 787 00:40:43,320 --> 00:40:44,930 Koel. 788 00:40:44,930 --> 00:40:46,600 Dit is altyd 'n pragtige een aan te bied. 789 00:40:46,600 --> 00:40:48,792 >> SAM GREEN: Ons het nie dink oor wat, het ons? 790 00:40:48,792 --> 00:40:50,500 HUGH Zabriskie: Ja, dit is 'n nare een. 791 00:40:50,500 --> 00:40:53,249 So, buffer loading-- Ek sal 'n bewys voorbeeld van wat aan die einde. 792 00:40:53,249 --> 00:40:55,090 Dit is 'n MP3 laai. 793 00:40:55,090 --> 00:40:58,880 En mikrofoon, net 'n funksie te gebruik wat jy genoem Navigator.getUserMedia () 794 00:40:58,880 --> 00:41:03,240 om toegang tot die gebruiker se versoek mikrofoon vir daardie inligting. 795 00:41:03,240 --> 00:41:05,610 >> Hier is die filter, sal ek hou net die beweging van hierdie. 796 00:41:05,610 --> 00:41:08,600 Dit is redelik hoë vlak, maar filters net jou toelaat om 797 00:41:08,600 --> 00:41:16,154 >> [Piep] 798 00:41:16,154 --> 00:41:18,320 Filter kan jy ook om dinge soos pienk skep 799 00:41:18,320 --> 00:41:20,050 geraas, bruin geraas, wit geraas. 800 00:41:20,050 --> 00:41:24,330 As jy wil suiwer geraas, te skep wat Sommige mense hou om te speel met, 801 00:41:24,330 --> 00:41:27,490 kan jy Web Audio gebruik filter om dit te doen. 802 00:41:27,490 --> 00:41:30,039 >> Audio Panning-- so dink as jy skryf 'n spel 803 00:41:30,039 --> 00:41:32,330 en jy wil die klank te klink soos dit kom, soos, 804 00:41:32,330 --> 00:41:36,090 skiet oor die skerm, jy kan die panning van die klank gebruik 805 00:41:36,090 --> 00:41:39,770 om hierdie soort van cone skep, wat like-- dit is redelik Mathy, 806 00:41:39,770 --> 00:41:41,850 maar dit is eintlik regtig koel as jy dit werk, 807 00:41:41,850 --> 00:41:44,500 en daar is 'n paar goeie tutoriale op dit kan ek jou stuur nie. 808 00:41:44,500 --> 00:41:46,400 Basies, kan jy soort van die skep van die klank 809 00:41:46,400 --> 00:41:50,480 van iets gaan deur in 'n 3D manier. 810 00:41:50,480 --> 00:41:57,350 En as jy 'n DJ rente, jy kan begin meng en kruis vervaag liedjies. 811 00:41:57,350 --> 00:42:01,260 >> Dit is net 'n paar baie basiese kode, basies wat ek gedoen het voordat. 812 00:42:01,260 --> 00:42:06,140 Dit stel die volume van die ossillator, so skep ons ons ossillator 813 00:42:06,140 --> 00:42:07,380 wat skep die golfvorm. 814 00:42:07,380 --> 00:42:09,940 Ons maak ons ​​GainNode, stel ons frekwensie, 815 00:42:09,940 --> 00:42:14,170 en dan maak die ossillator om die GainNode, wat dan verander basies 816 00:42:14,170 --> 00:42:16,760 hoeveel sein deurgelaat. 817 00:42:16,760 --> 00:42:20,467 Maar regtig, dit is 'n digitale ding, so dit is meer just-- ja. 818 00:42:20,467 --> 00:42:23,550 Dit is nie wat gebeur het, was maar dit is wat gebeur in die werklike lewe 819 00:42:23,550 --> 00:42:24,393 met 'n wins. 820 00:42:24,393 --> 00:42:27,258 >> GEHOOR: --quantization van die parameter volume? 821 00:42:27,258 --> 00:42:28,174 HUGH Zabriskie: Jammer? 822 00:42:28,174 --> 00:42:30,360 GEHOOR: Is dit 'n gekwantiseerde parameter volume? 823 00:42:30,360 --> 00:42:31,840 HUGH Zabriskie: Ja. 824 00:42:31,840 --> 00:42:34,620 En dit is een ding wat ek is regtig gebrekkig in my kennis, 825 00:42:34,620 --> 00:42:38,010 hoe kry werk op 'n digitale vlak. 826 00:42:38,010 --> 00:42:40,140 Ek weet met die werklike seine, dit is basies 827 00:42:40,140 --> 00:42:45,120 beheer hoeveel jy uitbreiding van die sein. 828 00:42:45,120 --> 00:42:47,017 So, ja. 829 00:42:47,017 --> 00:42:50,100 Ek stuur jou meer inligting oor dat omdat ek eintlik nuuskierig wil wees 830 00:42:50,100 --> 00:42:51,099 om meer oor die leer ken. 831 00:42:51,099 --> 00:42:54,090 Maar basies die parameters is, die een is die fold-- 832 00:42:54,090 --> 00:42:59,690 harder signal-- en nul is geen sein, of jy sal 'n geluid hoor nie. 833 00:42:59,690 --> 00:43:03,150 Ons sal demo tyd slaan vir dat, omdat dit is basies wat ek gedoen het voordat. 834 00:43:03,150 --> 00:43:07,630 En weer, die Context.Destination is die klank bestemming node. 835 00:43:07,630 --> 00:43:08,360 Awesome, OK. 836 00:43:08,360 --> 00:43:10,470 >> So ek gaan 'n vinnige twee demos te doen. 837 00:43:10,470 --> 00:43:11,760 Hoe doen ons op tyd? 838 00:43:11,760 --> 00:43:12,640 >> Spreker 1: sowat 10 minute. 839 00:43:12,640 --> 00:43:13,130 >> HUGH Zabriskie: 10 minute? 840 00:43:13,130 --> 00:43:13,630 Groot! 841 00:43:13,630 --> 00:43:14,320 Awesome. 842 00:43:14,320 --> 00:43:19,010 >> Dus is die eerste een wat ek gaan nie, is dit genoem My gunsteling liedjie. 843 00:43:19,010 --> 00:43:22,410 So dit is net 'n bietjie HTML JavaScript. 844 00:43:22,410 --> 00:43:25,510 Ons gaan twee knoppies het op die bladsy speel my gunsteling liedjie 845 00:43:25,510 --> 00:43:29,192 en stop my gunsteling liedjie. 846 00:43:29,192 --> 00:43:30,180 Ek sal dit verander. 847 00:43:30,180 --> 00:43:32,110 >> GEHOOR: Bedek jou mikrofoon. 848 00:43:32,110 --> 00:43:33,430 >> HUGH Zabriskie: Ja. 849 00:43:33,430 --> 00:43:36,300 En ek het hier gelaai 'n script wat basically-- 850 00:43:36,300 --> 00:43:38,520 en dit is werklik nuttig vir die laai 'n MP3, 851 00:43:38,520 --> 00:43:41,820 so dit maak net laai MP3s manier om vinniger. 852 00:43:41,820 --> 00:43:44,180 Dit is basies net 'n wrapper. 853 00:43:44,180 --> 00:43:48,737 Dit maak net die proses van laai in MP3s baie vinniger, 854 00:43:48,737 --> 00:43:51,570 jy andersins gebruik HTTP-versoek, soort van soos wat ons doen 855 00:43:51,570 --> 00:43:53,950 oor die huidige stukkie stel met Server. 856 00:43:53,950 --> 00:43:55,950 Dit is regtig lelik, jy wil nie om dit te doen. 857 00:43:55,950 --> 00:44:04,110 >> So hierdie man, Boris KMO, het 'n baie nuttige klein instrument genoem BufferLoader. 858 00:44:04,110 --> 00:44:08,780 Al wat jy doen is eenvoudig slaag dit die konteks, jy het dit 'n list-- slaag 859 00:44:08,780 --> 00:44:11,327 of, ja, is dit 'n lys in JavaScript? 860 00:44:11,327 --> 00:44:12,160 SAM GREEN: 'n skikking. 861 00:44:12,160 --> 00:44:14,201 HUGH Zabriskie: O, dit is 'n skikking, dit is reg. 862 00:44:14,201 --> 00:44:18,660 Dit is 'n verskeidenheid van paaie om verskillende lêers. 863 00:44:18,660 --> 00:44:21,990 En dan moet jy dit 'n funksie te slaag. 864 00:44:21,990 --> 00:44:25,530 Dit is die terugbel ons praat oor met asynchrone laai. 865 00:44:25,530 --> 00:44:28,720 Dit sal genoem word Sodra die lêers gelaai. 866 00:44:28,720 --> 00:44:33,780 En dat funksie wat genoem word wanneer die lêer se gelaaide neem as 'n omtrek 867 00:44:33,780 --> 00:44:35,840 'n verskeidenheid van gelaaide buffers. 868 00:44:35,840 --> 00:44:37,990 So wat gebeur hier. 869 00:44:37,990 --> 00:44:41,180 Basies, BufferList is gaan een value-- wees 870 00:44:41,180 --> 00:44:46,380 of dit gaan om 'n verskeidenheid van wees lengte een wat in indeks in dit 871 00:44:46,380 --> 00:44:51,320 nul die hele gelaai lêer van die MP3. 872 00:44:51,320 --> 00:44:53,320 So, wat ek doen wanneer ek klaar laai is, het ek net 873 00:44:53,320 --> 00:44:57,430 skep 'n buffer bron, wat is 'n klank buffer bron node. 874 00:44:57,430 --> 00:45:03,410 Die volgende stap is ek in die laai source.buffer as die volle gelaaide buffer 875 00:45:03,410 --> 00:45:06,740 uit die BufferList-- dit is 'n baie buffers-- 876 00:45:06,740 --> 00:45:10,255 en dan kan jy dit klank te verbind buffer na die bestemming. 877 00:45:10,255 --> 00:45:12,380 So wat dit gaan doen is net eenvoudig die MP3 878 00:45:12,380 --> 00:45:15,260 reguit deur na die uitset, en dadelik begin dit 879 00:45:15,260 --> 00:45:18,010 op om hierdie oproep. 880 00:45:18,010 --> 00:45:21,660 >> Cool, so laat ons sien dit gebeur in aksie. 881 00:45:21,660 --> 00:45:24,490 My [onhoorbaar] hier, laat ons sien. 882 00:45:24,490 --> 00:45:26,430 So ek is net gaan om te begin 'n basiese bediener. 883 00:45:26,430 --> 00:45:28,660 Dit is iets wat jy hoef te doen as jy 884 00:45:28,660 --> 00:45:32,490 versoeke vir die laai van lêers. 885 00:45:32,490 --> 00:45:34,140 Ek gaan 'n basiese bediener begin. 886 00:45:34,140 --> 00:45:38,200 Dit is basies jou hele PSET nou in een lyn, 887 00:45:38,200 --> 00:45:43,930 maar dit is net die begin van 'n bediener op poort 80/80. 888 00:45:43,930 --> 00:45:47,300 So ons gaan oor hier, ons gaan om te laai 80/80, 889 00:45:47,300 --> 00:45:49,110 ons gaan om te gaan na my gunsteling liedjie. 890 00:45:49,110 --> 00:45:51,660 So as ek getref "Play my gunsteling liedjie "reg nou, 891 00:45:51,660 --> 00:45:53,964 dit gaan om te laai my gunsteling liedjie en speel it-- 892 00:45:53,964 --> 00:45:55,880 [MUSIEK - die aasvoëls, "lewe in die vinnige  LANE "] 893 00:45:55,880 --> 00:46:00,490 --which gebeur om te wees "Lewe in die Fast Lane "Teen die Eagles. 894 00:46:00,490 --> 00:46:06,346 Nou, ek kon getref "Stop my gunsteling liedjie "en speel dit. 895 00:46:06,346 --> 00:46:09,160 >> [MUSIEK - die aasvoëls, "lewe in die vinnige  LANE "] 896 00:46:09,160 --> 00:46:18,340 >> En as ek gaan oor om te troos, want Ek gebruik 'n globale veranderlike hier 897 00:46:18,340 --> 00:46:23,390 om tred te hou eintlik hou van hierdie waarde, is dit sal nou erken in die konsole. 898 00:46:23,390 --> 00:46:25,160 Sodat dit outomaties skep vir my. 899 00:46:25,160 --> 00:46:29,991 So dit is wat nou speel, en ek kan net noem source.stop () 900 00:46:29,991 --> 00:46:30,490 op daardie. 901 00:46:30,490 --> 00:46:34,930 902 00:46:34,930 --> 00:46:35,860 Wel, jy weet wat? 903 00:46:35,860 --> 00:46:39,760 Net so julle ouens het gehoor hierdie song-- jy dalk hierdie lied erken. 904 00:46:39,760 --> 00:46:41,801 >> [MUSIEK - Rick Astley, "nooit sal GEE  JY OP"] 905 00:46:41,801 --> 00:46:42,299 906 00:46:42,299 --> 00:46:44,215 [MUSIEK - die aasvoëls, "lewe in die vinnige  LANE "] 907 00:46:44,215 --> 00:46:46,195 Ons het nou al is rick rolled. 908 00:46:46,195 --> 00:46:50,155 OK, groot, beweeg aan. 909 00:46:50,155 --> 00:46:51,160 Koel. 910 00:46:51,160 --> 00:46:54,554 So dit is basies 'n voorbeeld van net hoe jy kan 'n MP3 laai file-- 911 00:46:54,554 --> 00:46:56,470 [MUSIEK - die aasvoëls, "lewe in die vinnige  LANE "] 912 00:46:56,470 --> 00:46:59,590 --and speel dit, en stop en begin dit. 913 00:46:59,590 --> 00:47:03,008 Ek kon 'n baie meer gedoen het [onhoorbaar] 914 00:47:03,008 --> 00:47:07,570 >> Die laaste een wat ek sal doen, is, Ek sal jou wys 'n [onhoorbaar]. 915 00:47:07,570 --> 00:47:18,070 >> [Speel van musiek] 916 00:47:18,070 --> 00:47:21,800 >> Dit is soos, ogg.wave.mp3. 917 00:47:21,800 --> 00:47:26,450 Ek dink, as ek reg onthou, Ek het loop in 'n paar kwessies met .m4a, 918 00:47:26,450 --> 00:47:27,721 maar ek is nie seker oor dit. 919 00:47:27,721 --> 00:47:28,470 Ek dink mp3.wave-- 920 00:47:28,470 --> 00:47:28,930 921 00:47:28,930 --> 00:47:30,971 >> [MUSIEK - Rick Astley, "nooit sal GEE  JY OP"] 922 00:47:30,971 --> 00:47:35,930 923 00:47:35,930 --> 00:47:36,500 >> OK, groot. 924 00:47:36,500 --> 00:47:37,625 Ek sou nie sê dat. 925 00:47:37,625 --> 00:47:40,570 In elk geval, hallo. 926 00:47:40,570 --> 00:47:43,430 927 00:47:43,430 --> 00:47:45,490 So ons het hierdie oop. 928 00:47:45,490 --> 00:47:52,320 So nou al wat ek doen is ek basies geskep 'n basiese sintaks vir die skep van musiek. 929 00:47:52,320 --> 00:47:57,610 So as ek iets doen, soos, voeg G4 op 1 2, wat dit beteken, is dat 930 00:47:57,610 --> 00:48:00,950 voeg die klavier note, G4, wat is die vierde G 931 00:48:00,950 --> 00:48:02,680 op die klavier uit die bodem. 932 00:48:02,680 --> 00:48:05,930 So dit is soort van MIDI praat, so vir diegene wat musiek gebaseer is, 933 00:48:05,930 --> 00:48:07,860 dit is net MIDI notas. 934 00:48:07,860 --> 00:48:10,090 >> GEHOOR: Dit is die G van die Midde-C, reg? 935 00:48:10,090 --> 00:48:11,840 >> HUGH Zabriskie: Dit is die G bo Midde C, dit is reg. 936 00:48:11,840 --> 00:48:12,470 >> GEHOOR: Bo Midde C. 937 00:48:12,470 --> 00:48:13,345 >> HUGH Zabriskie: Ja. 938 00:48:13,345 --> 00:48:14,340 Eintlik, ja. 939 00:48:14,340 --> 00:48:16,131 Ek dink ek eintlik gemaak dit een [onhoorbaar], 940 00:48:16,131 --> 00:48:18,860 so dit kan 'n oktaaf ​​hoër as dié nie. 941 00:48:18,860 --> 00:48:20,070 So laat ons sien. 942 00:48:20,070 --> 00:48:21,152 As ek getref Play-- 943 00:48:21,152 --> 00:48:22,110 [Herhalende KLAVIER NOTA] 944 00:48:22,110 --> 00:48:23,200 --we're gaan hoor. 945 00:48:23,200 --> 00:48:25,700 Die idee is dat dit werk net soos 'n command line sou 946 00:48:25,700 --> 00:48:27,510 so as ek op en af ​​te gaan op my sleutelbord, jy 947 00:48:27,510 --> 00:48:31,550 kan terug gaan na vorige beveel, wat is baie handig. 948 00:48:31,550 --> 00:48:35,136 En onder is my lys van liedjies, wat al loop is op lus. 949 00:48:35,136 --> 00:48:38,260 >> GEHOOR: Jy is die aanvaarding van die 88-sleutel sleutelbord op daardie, reg? 950 00:48:38,260 --> 00:48:41,051 >> HUGH Zabriskie: Die vraag was, Ek neem aan 'n 88-sleutel sleutelbord, 951 00:48:41,051 --> 00:48:41,990 en ja, ek is nie. 952 00:48:41,990 --> 00:48:45,030 Wat ek gedoen het, is ek basies het 88 monsters 953 00:48:45,030 --> 00:48:46,970 van die klavier, een vir elke noot. 954 00:48:46,970 --> 00:48:49,180 En so elke keer as jy van nou af hoor 'n aantekening, 955 00:48:49,180 --> 00:48:57,550 wat is eintlik 'n lus wat lyk like-- hierdie is om gespeel op loop, 956 00:48:57,550 --> 00:49:00,120 so vir elke noot, dit is hardloop. 957 00:49:00,120 --> 00:49:02,860 Wat gebeur is, het ek skep 'n buffer weer 958 00:49:02,860 --> 00:49:06,010 Ek skep 'n wins node om die volume te stel. 959 00:49:06,010 --> 00:49:08,240 Dit is net 'n baie ingewikkelde manier om te sê ek 960 00:49:08,240 --> 00:49:10,550 stoor die buffer in 'n source.buffer. 961 00:49:10,550 --> 00:49:13,160 Ek gee dit die wins, ek verbind dit aan die wins, 962 00:49:13,160 --> 00:49:15,576 die wins is verbind tot die uitvoer, en dan speel ek dit. 963 00:49:15,576 --> 00:49:20,735 So dit is soort van die proses van die neem van 'n buffer bron. 964 00:49:20,735 --> 00:49:24,820 >> GEHOOR: Kan jy werklik neem dat droë klank en maak dit nat [onhoorbaar]? 965 00:49:24,820 --> 00:49:26,260 >> HUGH Zabriskie: Jy kan, ja. 966 00:49:26,260 --> 00:49:29,260 Daar is re-werkwoord, daar is vertraging, ondergang. 967 00:49:29,260 --> 00:49:33,260 Jy kan basies sit iets in tussen in daardie broodjie of-- goed, 968 00:49:33,260 --> 00:49:37,660 pyplyn is 'n beter metafoor, maar jy kan enigiets in daardie voeg. 969 00:49:37,660 --> 00:49:38,200 Koel. 970 00:49:38,200 --> 00:49:40,280 >> So sal ek die demo voltooi hier om 'n gevoel te gee jy 971 00:49:40,280 --> 00:49:46,390 van net die groot aantal kere wat jy kan daardie funksie alles op een slag te hardloop. 972 00:49:46,390 --> 00:49:49,280 So ek gaan om dit te verwyder. 973 00:49:49,280 --> 00:49:59,110 Ek gaan 'n kragopwekker te skep that-- basies wat does-- dit is regtig 974 00:49:59,110 --> 00:50:04,220 soort van 'n ingewikkelde syntax-- maar dit is gaan notas genereer op die vlieg, 975 00:50:04,220 --> 00:50:06,601 en net begin speel hulle as dit evalueer hulle. 976 00:50:06,601 --> 00:50:07,392 [INTERPOSING KLAVIER] 977 00:50:07,392 --> 00:50:10,990 978 00:50:10,990 --> 00:50:12,817 >> So kan ons maak net hier 'n bietjie musiek. 979 00:50:12,817 --> 00:50:13,608 [INTERPOSING KLAVIER] 980 00:50:13,608 --> 00:50:39,570 981 00:50:39,570 --> 00:50:41,470 >> So, wat hierdie opdrag doen, byvoorbeeld, is 982 00:50:41,470 --> 00:50:46,910 dit neem die drie notas vir die klavier en sit hulle dan op B3. 983 00:50:46,910 --> 00:50:48,660 Dit sintaksis kan maak 'n bietjie meer sin 984 00:50:48,660 --> 00:50:50,590 om diegene wat 'n musiek agtergrond hier. 985 00:50:50,590 --> 00:50:55,180 986 00:50:55,180 --> 00:50:56,551 >> Ek kan 'n kick drum voeg. 987 00:50:56,551 --> 00:50:57,050 Ek kan-- 988 00:50:57,050 --> 00:50:58,048 >> [INTERPOSING INSTRUMENTE] 989 00:50:58,048 --> 00:50:59,256 >> --just speel rond met dit. 990 00:50:59,256 --> 00:51:12,519 991 00:51:12,519 --> 00:51:13,474 >> Sodat jy kan make-- 992 00:51:13,474 --> 00:51:14,515 [INTERPOSING INSTRUMENTE] 993 00:51:14,515 --> 00:51:15,513 Dat 'n mens 'n bietjie meer irriterende. 994 00:51:15,513 --> 00:51:16,554 [INTERPOSING INSTRUMENTE] 995 00:51:16,554 --> 00:51:26,491 996 00:51:26,491 --> 00:51:30,981 >> So wat lukraak voeg 'n droë simbaal elke 16 noot, met 'n 16% 997 00:51:30,981 --> 00:51:31,481 [Onhoorbaar]. 998 00:51:31,481 --> 00:51:32,522 >> [INTERPOSING INSTRUMENTE] 999 00:51:32,522 --> 00:51:40,962 1000 00:51:40,962 --> 00:51:50,400 >> Ja, so die manier waarop hierdie works-- dit is altyd in 4: 4. 1001 00:51:50,400 --> 00:51:51,441 [INTERPOSING INSTRUMENTE] 1002 00:51:51,441 --> 00:52:06,910 1003 00:52:06,910 --> 00:52:10,902 >> Ja, so die vier kwartale, en 16/8. 1004 00:52:10,902 --> 00:52:14,851 1005 00:52:14,851 --> 00:52:15,892 [INTERPOSING INSTRUMENTE] 1006 00:52:15,892 --> 00:52:27,970 1007 00:52:27,970 --> 00:52:33,780 >> So op die gemiddelde, kry jy 60% hits op die 16de notas. 1008 00:52:33,780 --> 00:52:35,990 >> In elk geval, dit was net soort om te wys af 1009 00:52:35,990 --> 00:52:39,780 sommige van die dinge wat jy kan bou met die Web Audio API. 1010 00:52:39,780 --> 00:52:43,840 Dit is werklik 'n kragtige, dit is regtig 'n vinnige, en jy kan 'n baie van die koel dinge 1011 00:52:43,840 --> 00:52:44,340 met dit. 1012 00:52:44,340 --> 00:52:51,260 So weer, enige vrae wat jy het, e-pos myself-- Hugh-- of Sam, 1013 00:52:51,260 --> 00:52:55,869 en eerlik, Google het 'n ton van goeie hulpbronne. 1014 00:52:55,869 --> 00:52:56,660 Enige laaste vrae? 1015 00:52:56,660 --> 00:52:57,970 Ja. 1016 00:52:57,970 --> 00:53:00,790 >> GEHOOR: So jy kan toegang die ingeboude mikrofoon. 1017 00:53:00,790 --> 00:53:03,089 Wat gebeur as jy wou gebruik 'n beter mikrofoon? 1018 00:53:03,089 --> 00:53:05,380 HUGH Zabriskie: As jy wil beter mikrofoon te gebruik? 1019 00:53:05,380 --> 00:53:11,320 So weer, dit is deel van die abstraksie tussen Chrome 1020 00:53:11,320 --> 00:53:12,950 en die res van jou rekenaar. 1021 00:53:12,950 --> 00:53:18,950 Tensy dit is beskikbaar deur 'n API, soos Web MIDI API, 1022 00:53:18,950 --> 00:53:22,030 jy kan waarskynlik 'n paar hacks te vind, maar oor die algemeen nie as haalbaar. 1023 00:53:22,030 --> 00:53:25,300 >> SAM GREEN: Jy kan also-- al die Chrome weet 1024 00:53:25,300 --> 00:53:28,820 is wat jou standaard mikrofoon is, en dit wat toegang. 1025 00:53:28,820 --> 00:53:33,410 So as jy 'n mikrofoon het jy kon stel as standaard mikrofoon se rekenaar, 1026 00:53:33,410 --> 00:53:35,990 jy kan dit op die manier toegang en dit sou waarskynlik werk. 1027 00:53:35,990 --> 00:53:37,490 HUGH Zabriskie: Dit is 'n goeie punt. 1028 00:53:37,490 --> 00:53:39,656 Ek het nog nooit probeer nie, maar jy dalk in staat wees om die soort 1029 00:53:39,656 --> 00:53:45,700 of-- as jy die insette spreker lei, jy dalk in staat wees om dit te doen, ja. 1030 00:53:45,700 --> 00:53:48,360 >> Enige laaste vrae? 1031 00:53:48,360 --> 00:53:49,340 Koel. 1032 00:53:49,340 --> 00:53:51,680 Wel dankie ouens soveel vir jou kyk. 1033 00:53:51,680 --> 00:53:52,199 Ek is Hugh. 1034 00:53:52,199 --> 00:53:52,990 SAM GREEN: Ek is Sam. 1035 00:53:52,990 --> 00:53:55,410 HUGH Zabriskie: En dit is CS50. 1036 00:53:55,410 --> 00:53:56,767