1 00:00:00,000 --> 00:00:05,900 2 00:00:05,900 --> 00:00:07,170 >> VERD SAM: Hola, tothom. 3 00:00:07,170 --> 00:00:08,640 Benvingut al nostre seminari. 4 00:00:08,640 --> 00:00:10,009 El meu nom és Sam. 5 00:00:10,009 --> 00:00:11,050 HUGH Zabriskie: Sóc Hugh. 6 00:00:11,050 --> 00:00:17,420 VERD SAM: I anem a parlar avui sobre JavaScript i l'API de Web Àudio. 7 00:00:17,420 --> 00:00:21,180 Només per començar, aquest és un esquema de la nostra agenda per al seminari. 8 00:00:21,180 --> 00:00:25,350 Anem a començar parlant de per les que ha d'estar interessat en la web 9 00:00:25,350 --> 00:00:30,130 API Audio, per què és JavaScript l'idioma que necessita per a això, 10 00:00:30,130 --> 00:00:32,619 i després parlar de JavaScript essentials-- així com, 11 00:00:32,619 --> 00:00:34,800 Pots caminar a través d'alguns fonaments de la llengua, 12 00:00:34,800 --> 00:00:37,290 i després parlar de la API d'àudio a un nivell alt. 13 00:00:37,290 --> 00:00:41,140 Llavors, Hugh parlarà sobre alguns de les etapes de producció d'àudio 14 00:00:41,140 --> 00:00:45,509 i després una demostració d'aquest impressionant seqüenciador projecte que va construir i li mostrarà el codi. 15 00:00:45,509 --> 00:00:48,050 I després, tindrem temps per preguntes al final de la gent 16 00:00:48,050 --> 00:00:49,593 que són aquí viure. 17 00:00:49,593 --> 00:00:50,540 >> HUGH Zabriskie: Cool. 18 00:00:50,540 --> 00:00:50,990 >> VERD SAM: Cool. 19 00:00:50,990 --> 00:00:51,383 >> HUGH Zabriskie: Cool. 20 00:00:51,383 --> 00:00:52,170 Vaig a fer còpies de seguretat. 21 00:00:52,170 --> 00:00:54,960 >> SAM VERD: Així que, primer el primer. 22 00:00:54,960 --> 00:00:57,840 Així que una de les grans coses sobre el Web API Audio 23 00:00:57,840 --> 00:01:00,480 és que no hi ha posada en marxa és necessari. 24 00:01:00,480 --> 00:01:04,230 Ve integrat en la majoria dels navegadors moderns, 25 00:01:04,230 --> 00:01:08,630 incloent Chrome, Edge, en el seu conjunt manat de altres-- tots els 26 00:01:08,630 --> 00:01:12,650 que grans porcions de la gent està utilitzant avui en dia. 27 00:01:12,650 --> 00:01:14,807 Així que no s'ha configurat, a part d'aconseguir just 28 00:01:14,807 --> 00:01:16,890 un servidor web en marxa, per tu per començar a treballar 29 00:01:16,890 --> 00:01:18,420 en el seu projecte, la qual cosa és genial. 30 00:01:18,420 --> 00:01:21,500 31 00:01:21,500 --> 00:01:24,190 >> Li recomanem bastant en gran mesura de que es té en compte 32 00:01:24,190 --> 00:01:26,530 utilitzant Chrome per Desenvolupament web JavaScript, 33 00:01:26,530 --> 00:01:30,260 només perquè el seu desenvolupador eines són molt forts. 34 00:01:30,260 --> 00:01:33,220 Com a exemple de just el que volem dir dient obre el teu Javascript 35 00:01:33,220 --> 00:01:38,600 console-- si vas a Chrome i ens fixem en qualsevol pàgina web, 36 00:01:38,600 --> 00:01:43,897 i et vas anar clic Inspeccionar element, i després 37 00:01:43,897 --> 00:01:46,730 anar a aquest petit desplegable aquí i fa clic a la consola, 38 00:01:46,730 --> 00:01:50,660 veuràs el que obre veu una molt semblant a un símbol del sistema que 39 00:01:50,660 --> 00:01:53,720 podria veure en el teu Mac, oa la ID. 40 00:01:53,720 --> 00:01:59,260 I així, podem Tipus mana aquí, com Clar, 41 00:01:59,260 --> 00:02:01,350 i altres comandaments per l'estil. 42 00:02:01,350 --> 00:02:04,267 Podem crear variables, com veurem més endavant en JavaScript. 43 00:02:04,267 --> 00:02:07,100 I així que qualsevol cosa que podem fer en JavaScript, podem fer-ho amb la consola, 44 00:02:07,100 --> 00:02:11,430 i això és una forma súper pràctic per començar a jugar amb les API 45 00:02:11,430 --> 00:02:15,760 i sentir-se còmode amb JavaScript dreta del pal. 46 00:02:15,760 --> 00:02:18,290 Sense posada en marxa requereix, que és realment agradable. 47 00:02:18,290 --> 00:02:18,790 Fresc. 48 00:02:18,790 --> 00:02:22,064 49 00:02:22,064 --> 00:02:22,880 Impressionant. 50 00:02:22,880 --> 00:02:24,780 >> Així que només una cosa més per afegir. 51 00:02:24,780 --> 00:02:27,780 Si vostè té alguna preguntes-- hi molts de vostès que no són aquí viuen, 52 00:02:27,780 --> 00:02:31,232 no dubteu a enviar per correu electrònic nosaltres-- aquests són les nostres adreces de correu electrònic. 53 00:02:31,232 --> 00:02:33,190 Si té alguna pregunta no vol demanar-nos, 54 00:02:33,190 --> 00:02:36,160 com, oh Tinc un error en el meu codi, o alguna cosa 55 00:02:36,160 --> 00:02:39,270 això és una mica més específic, potser a Google en primer lloc. 56 00:02:39,270 --> 00:02:42,340 Hi ha un munt de grans recursos sobre l'API d'àudio web per aquí. 57 00:02:42,340 --> 00:02:44,089 És realment bé documentat i està sent 58 00:02:44,089 --> 00:02:47,194 utilitzat per un munt de gent a la indústria i les persones que són simplement 59 00:02:47,194 --> 00:02:48,610 la construcció de coses divertides per a ells mateixos. 60 00:02:48,610 --> 00:02:51,306 Així que ha d'haver un munt dels recursos que hi ha. 61 00:02:51,306 --> 00:02:53,040 Impressionant. 62 00:02:53,040 --> 00:02:56,100 >> Fresc, així que per què la web API d'àudio? 63 00:02:56,100 --> 00:02:59,840 Aquest diagrama és una mica d'una evolució de la forma 64 00:02:59,840 --> 00:03:04,100 so en la web ha crescut amb el temps. 65 00:03:04,100 --> 00:03:13,080 BGSound era com l'etiqueta HTML original que Internet Explorer fa servir per donar suport. 66 00:03:13,080 --> 00:03:16,790 Només es va permetre sons bastant bàsiques, la funcionalitat no era molt robusta, 67 00:03:16,790 --> 00:03:19,380 i no es podia fer seqüenciació complicat, 68 00:03:19,380 --> 00:03:21,890 o controlar quan el so va començar i es va aturar molt robusta. 69 00:03:21,890 --> 00:03:23,930 Per tant, no era particularment ben desenvolupat. 70 00:03:23,930 --> 00:03:27,470 Després, després que, Flash va arribar along-- que, 71 00:03:27,470 --> 00:03:31,712 Estic segur que vostès estan familiaritzats amb Flash-- potser no com funciona, 72 00:03:31,712 --> 00:03:32,920 però vostè ha vist sens dubte. 73 00:03:32,920 --> 00:03:35,586 Has d'actualitzar flash Plug-in, tot aquest tipus de coses, 74 00:03:35,586 --> 00:03:40,110 i que sens dubte va ampliar la gamma de funcionalitat que estava disponible. 75 00:03:40,110 --> 00:03:45,370 Però el que l'usuari instal·li un plug-in és, sens dubte 76 00:03:45,370 --> 00:03:48,480 Un inconvenient de incloent Flash en la seva aplicació, no? 77 00:03:48,480 --> 00:03:52,410 Perquè llavors vostè és depenent de la usuari anar i trobar aquest plug-in, 78 00:03:52,410 --> 00:03:54,660 i probablement s'encengui apagat per aquest pas addicional 79 00:03:54,660 --> 00:03:56,640 que han de prendre per utilitzar l'aplicació. 80 00:03:56,640 --> 00:04:01,270 I llavors podria haver-hi una actualització que vaig a trencar tota l'aplicació, 81 00:04:01,270 --> 00:04:03,880 i que acaba sent un malson per al desenvolupador, també. 82 00:04:03,880 --> 00:04:06,230 Així que va ser una barricada. 83 00:04:06,230 --> 00:04:10,480 >> I després, després d'això va venir al llarg, l'etiqueta d'àudio HTML, que 84 00:04:10,480 --> 00:04:16,579 és una característica de més modern que HTML-- sens dubte va permetre moltes més coses, 85 00:04:16,579 --> 00:04:20,050 però fins i tot les coses que podrien fer Hi havia una mica limitat sol 86 00:04:20,050 --> 00:04:22,730 com a resultat de les coses que HTML era capaç. 87 00:04:22,730 --> 00:04:26,060 Així que quan el codi JavaScript API, l'API Web Àudio, 88 00:04:26,060 --> 00:04:29,290 es va convertir en un estàndard practicar en tots els navegadors, 89 00:04:29,290 --> 00:04:32,490 que realment ampliat el conjunt de les oportunitats per als desenvolupadors 90 00:04:32,490 --> 00:04:36,590 per aconseguir realment a l'edifici coses interessants per a la web. 91 00:04:36,590 --> 00:04:39,220 Durant molt temps no tenien estat eines molt robustes 92 00:04:39,220 --> 00:04:44,360 per a aplicacions d'àudio natiu, com-- tothom sap GarageBand, 93 00:04:44,360 --> 00:04:48,360 i després, òbviament, hi ha més àudio barrejant aplicacions professionals, 94 00:04:48,360 --> 00:04:49,640 i aquest tipus de coses. 95 00:04:49,640 --> 00:04:52,690 Però no hi havia un molt bo Cloud-- no 96 00:04:52,690 --> 00:04:55,811 Núvol, sí, suposo Plataforma web Cloud-- 97 00:04:55,811 --> 00:04:58,310 que permetria als desenvolupadors a construir aplicacions per a les persones 98 00:04:58,310 --> 00:05:00,570 fer la mescla d'àudio. 99 00:05:00,570 --> 00:05:03,960 I com ell li mostrarà més endavant, la Web API Audio 100 00:05:03,960 --> 00:05:07,470 permet realment de gran abast coses succeeixi realment, simplement, 101 00:05:07,470 --> 00:05:09,597 la qual cosa és molt bo. 102 00:05:09,597 --> 00:05:12,680 Així que aquesta és la instrucció de per què hauria de veure la resta del seminari, 103 00:05:12,680 --> 00:05:14,350 bàsicament. 104 00:05:14,350 --> 00:05:17,880 >> I ara, vaig a parlar de alguns elements bàsics simplement JavaScript-- 105 00:05:17,880 --> 00:05:20,240 de la llengua, de manera que podem estar a la mateixa pàgina 106 00:05:20,240 --> 00:05:22,470 quan parlem de la API una mica més tard. 107 00:05:22,470 --> 00:05:23,260 Fresc. 108 00:05:23,260 --> 00:05:26,192 >> Per tant, aquest és un resum. 109 00:05:26,192 --> 00:05:27,150 Vaig oblidar que era aquí. 110 00:05:27,150 --> 00:05:27,510 Sí. 111 00:05:27,510 --> 00:05:27,870 >> HUGH Zabriskie: Hi ha dos tobogans aquí. 112 00:05:27,870 --> 00:05:30,245 >> VERD SAM: Aquest és el resum d'algunes de les limitacions 113 00:05:30,245 --> 00:05:35,220 dels altres mètodes d'unió, d'edat. 114 00:05:35,220 --> 00:05:37,828 I llavors ara, tenim aquestes coses. 115 00:05:37,828 --> 00:05:40,011 Fresc. 116 00:05:40,011 --> 00:05:40,510 Impressionant. 117 00:05:40,510 --> 00:05:43,200 >> Per tant, elements essencials de JavaScript. 118 00:05:43,200 --> 00:05:47,230 El primer és el primer, hi ha una diferència prou significativa 119 00:05:47,230 --> 00:05:49,940 en JavaScript front en una llenguatge com C, en la forma 120 00:05:49,940 --> 00:05:52,050 que es creen variables. 121 00:05:52,050 --> 00:05:55,634 Així que en C, que estem acostumats a tenir per escriure les nostres variables, oi? 122 00:05:55,634 --> 00:05:57,800 I no em refereixo a tipus com escrigui, vull dir el tipus 123 00:05:57,800 --> 00:06:01,900 com ells assignar un significat type-- com, 1 int, float, un char. 124 00:06:01,900 --> 00:06:05,210 En C, estàvem molt acostumats a haver de crear una variable 125 00:06:05,210 --> 00:06:09,690 i després s'adhereixen a aquest tipus per al temps sencer que fem servir aquesta variable. 126 00:06:09,690 --> 00:06:13,990 I això no és necessàriament pitjor, però és probablement més difícil d'utilitzar. 127 00:06:13,990 --> 00:06:16,190 Una de les característiques interessants de JavaScript és 128 00:06:16,190 --> 00:06:19,740 que les variables són el que s'anomena "dinàmicament mecanografiat", que 129 00:06:19,740 --> 00:06:22,500 vol dir que jo puc crear una variable que la sintaxi, 130 00:06:22,500 --> 00:06:25,800 varX és igual a 5, per exemple. 131 00:06:25,800 --> 00:06:27,790 Això crea originalment un nombre enter variable-- 132 00:06:27,790 --> 00:06:29,870 just sota la campana somewhere-- però 133 00:06:29,870 --> 00:06:33,040 pot canviar aquesta variable per referir-se a una cadena 134 00:06:33,040 --> 00:06:35,820 sense fer res per l'estil crear una nova variable. 135 00:06:35,820 --> 00:06:37,880 No necessito de preocupar sobre el tipus de canvi. 136 00:06:37,880 --> 00:06:45,440 JavaScript sap que el tipus de canviat, i això passa de forma dinàmica. 137 00:06:45,440 --> 00:06:48,510 >> Per tant, hi ha beneficis i desavantatges al fet que, 138 00:06:48,510 --> 00:06:51,250 com qualsevol persona que ha treballat en JavaScript durant un temps podria saber. 139 00:06:51,250 --> 00:06:53,600 Hi ha moments en què vostè pot ser accidental 140 00:06:53,600 --> 00:06:57,720 canviar el tipus d'una variable i No manegi aquest tipus de canvi, 141 00:06:57,720 --> 00:07:01,120 i llavors el teu Javascript pot crash-- o una excepció 142 00:07:01,120 --> 00:07:06,070 ser fet fora, ja que tindrà la tipus incorrecte quan s'espera un tipus. 143 00:07:06,070 --> 00:07:07,040 Fresc. 144 00:07:07,040 --> 00:07:11,470 >> Així, scoping-- que és com, si recordar les primeres setmanes al curs, 145 00:07:11,470 --> 00:07:15,420 fa referència a una variable de forma visible és i en quina àrea del codi. 146 00:07:15,420 --> 00:07:18,400 Tot això es veu molt similar a la forma en què es veu en C. 147 00:07:18,400 --> 00:07:24,755 Així que les variables estan en l'àmbit general dins de claus dins d'una funció, 148 00:07:24,755 --> 00:07:27,005 i després també hi ha les variables a nivell global amb àmbit que 149 00:07:27,005 --> 00:07:29,171 tracti: si escrius una variable fora d'una funció, 150 00:07:29,171 --> 00:07:31,790 serà visible en tot el text. 151 00:07:31,790 --> 00:07:35,840 >> Una diferència entre JavaScript i C, en particular, 152 00:07:35,840 --> 00:07:40,280 és que si es declara un mundial qualsevol variable en un arxiu de text 153 00:07:40,280 --> 00:07:43,324 és visible en qualsevol funció dins d'aquest arxiu de text. 154 00:07:43,324 --> 00:07:44,240 Això és correcte, no? 155 00:07:44,240 --> 00:07:46,330 >> HUGH Zabriskie: Sí. 156 00:07:46,330 --> 00:07:49,120 >> VERD SAM: Així que és també una mica mica estrany en comparació amb C, 157 00:07:49,120 --> 00:07:52,660 on sempre havia de tenir la nostra definicions de variables per sobre dels llocs 158 00:07:52,660 --> 00:07:53,770 que es van utilitzar. 159 00:07:53,770 --> 00:07:57,957 Això no és una regla que s'aplica més, així, una mica diferent. 160 00:07:57,957 --> 00:08:00,540 I de nou només per emfatitzar, global davant variables-- locals 161 00:08:00,540 --> 00:08:03,457 molt similar a C. Vostè podria tenir dues variables amb el mateix nom, 162 00:08:03,457 --> 00:08:06,540 i tenen un dels seus noms es remeden per una variable local si un d'ells 163 00:08:06,540 --> 00:08:07,546 era global. 164 00:08:07,546 --> 00:08:09,420 Així tipus, similar de problemes que alguns de vostès 165 00:08:09,420 --> 00:08:11,920 poden haver topat en alguna del seu problema s'estableix fins al moment. 166 00:08:11,920 --> 00:08:14,450 Fresc, així que això és variables. 167 00:08:14,450 --> 00:08:20,310 >> Control de flux, és a dir, com, -si else-- stuff-- lògic i bucles. 168 00:08:20,310 --> 00:08:24,510 Així que per començar, això és el que if-else declaracions semblen en JavaScript. 169 00:08:24,510 --> 00:08:29,750 La col·locació de les diverses coses en les línies no és important. 170 00:08:29,750 --> 00:08:34,409 Aquesta és només una de les convencions per la forma en codi d'estructura que. 171 00:08:34,409 --> 00:08:38,634 Igual que a C, tenim una "si," una declaració parèntesi. 172 00:08:38,634 --> 00:08:40,840 173 00:08:40,840 --> 00:08:42,090 Això no és el que volia fer. 174 00:08:42,090 --> 00:08:44,860 175 00:08:44,860 --> 00:08:45,550 Ho he tornat a fer. 176 00:08:45,550 --> 00:08:46,841 >> HUGH Zabriskie: Tractant de sortir? 177 00:08:46,841 --> 00:08:49,770 SAM VERD: No, estic tractant d'apropar la imatge. 178 00:08:49,770 --> 00:08:50,660 No importa. 179 00:08:50,660 --> 00:08:54,730 180 00:08:54,730 --> 00:08:59,370 >> Així doncs, tenim una declaració "if" i tenim una condició dins d'ella 181 00:08:59,370 --> 00:09:03,130 que avalua a vertader o fals, i que determina si o no 182 00:09:03,130 --> 00:09:04,510 entrem en aquest bloc de codi. 183 00:09:04,510 --> 00:09:09,860 I de la mateixa manera, tenim una cosa, si i una persona, igual que estem acostumats a C. 184 00:09:09,860 --> 00:09:14,010 >> També ha de ser bastant còmode la dreta del pal amb bucles, 185 00:09:14,010 --> 00:09:16,440 perquè també es veuen molt semblant a C sembla. 186 00:09:16,440 --> 00:09:19,600 Però et donaràs compte de nou que tenen, en lloc de int inicialitzacions, 187 00:09:19,600 --> 00:09:22,570 tenim inicialitzacions var. 188 00:09:22,570 --> 00:09:24,650 I suposo que tens tenir cura de fer 189 00:09:24,650 --> 00:09:28,460 Segur que no canviï el valor d'I a partir d'un int a una cadena, 190 00:09:28,460 --> 00:09:31,780 per exemple, pel fet que va provocar un comportament estrany pot ser que no 191 00:09:31,780 --> 00:09:32,280 esperar. 192 00:09:32,280 --> 00:09:35,750 Però això ha de ser bastant familiar, també. 193 00:09:35,750 --> 00:09:39,460 >> Així que aquí és on les coses comencen a aconseguir una mica boig en JavaScript 194 00:09:39,460 --> 00:09:44,920 per a algú que va des d'un fons de C. Hi ha funcions 195 00:09:44,920 --> 00:09:48,070 en JavaScript, i no hi ha una manera per declarar una funció que es veu 196 00:09:48,070 --> 00:09:50,361 tipus de similar a C, i després hi ha un altre que 197 00:09:50,361 --> 00:09:52,450 es veu una mica diferent. 198 00:09:52,450 --> 00:09:54,930 >> La primera versió, que podem veure aquí, 199 00:09:54,930 --> 00:09:59,260 és una espècie de C-com, si diem, aquesta és una funció, 200 00:09:59,260 --> 00:10:01,490 donar-li un nom, donar el nombre d'arguments, 201 00:10:01,490 --> 00:10:05,150 i després el contingut de la funció anar dins d'aquestes claus. 202 00:10:05,150 --> 00:10:08,850 Anem a veure un exemple de arguments en només un segon. 203 00:10:08,850 --> 00:10:13,420 >> Mentre que a la línia següent, veiem, oh, aquí hi ha una variable anomenada "myFunction" 204 00:10:13,420 --> 00:10:17,546 i som iguals a aquest function-- cosa-- genèric que 205 00:10:17,546 --> 00:10:19,170 no sembla tenir res a fer. 206 00:10:19,170 --> 00:10:22,780 207 00:10:22,780 --> 00:10:26,080 La raó per la qual és diferent que C és que JavaScript 208 00:10:26,080 --> 00:10:30,040 és el que s'anomena un llenguatge funcional, o té elements funcionals, el que significa 209 00:10:30,040 --> 00:10:33,510 que les funcions són en realitat valors. 210 00:10:33,510 --> 00:10:39,520 I això vol dir que podem establir una variable per igualar una funció 211 00:10:39,520 --> 00:10:43,210 i després passar aquesta funció voltant, passar-ho com a argument, 212 00:10:43,210 --> 00:10:46,550 fer tot tipus de coses així amb les funcions. 213 00:10:46,550 --> 00:10:49,682 >> Una altra cosa a note-- funcions s'escriuen 214 00:10:49,682 --> 00:10:51,140 amb un cert nombre d'arguments. 215 00:10:51,140 --> 00:10:54,056 Anem a veure un exemple d'una funció amb un argument en la següent diapositiva. 216 00:10:54,056 --> 00:10:56,720 Però JavaScript no ho farà gritarte si intenta 217 00:10:56,720 --> 00:10:59,330 utilitzar una funció amb el nombre incorrecte d'arguments. 218 00:10:59,330 --> 00:11:05,310 Simplement va a fer el seu millor esforç per fer fer, el que significa que si es passa, 219 00:11:05,310 --> 00:11:09,410 es crida a una funció que espera un discussió amb cap argument, tot el que 220 00:11:09,410 --> 00:11:13,990 passarà és que va a fer el seu millor moment per tractar d'executar aquest codi, 221 00:11:13,990 --> 00:11:16,541 i si s'executa amb el temps en una excepció o un error, 222 00:11:16,541 --> 00:11:19,790 que va a llançar aquesta excepció i només seguir going-- que és només una de les formes 223 00:11:19,790 --> 00:11:21,070 que funciona JavaScript. 224 00:11:21,070 --> 00:11:21,781 Sí. 225 00:11:21,781 --> 00:11:24,207 >> AUDIÈNCIA: Què passa si hi ha massa arguments? 226 00:11:24,207 --> 00:11:26,040 VERD Carter: Així que la pregunta era, què passa 227 00:11:26,040 --> 00:11:27,380 si hi ha massa arguments? 228 00:11:27,380 --> 00:11:29,171 I la resposta és que JavaScript serà just 229 00:11:29,171 --> 00:11:32,120 ignorar els que estan després dels quals espera. 230 00:11:32,120 --> 00:11:36,420 Es tractarà d'executar la funció cridar com si era només els dos primers. 231 00:11:36,420 --> 00:11:37,075 Oi? 232 00:11:37,075 --> 00:11:37,700 >> HUGH Zabriskie: Això és correcte, sí. 233 00:11:37,700 --> 00:11:39,449 De la mateixa manera, si hi ha són molt pocs arguments, 234 00:11:39,449 --> 00:11:42,640 només tipus de dóna nul·la a tots els arguments que no té cap valor 235 00:11:42,640 --> 00:11:43,660 per. 236 00:11:43,660 --> 00:11:45,810 >> SAM VERD: Què es pot ser realment útil, si 237 00:11:45,810 --> 00:11:49,060 vull escriure una funció que pren uns arguments numèrics variables. 238 00:11:49,060 --> 00:11:55,830 Podeu establir valors per defecte en la definició de la funció, 239 00:11:55,830 --> 00:11:59,060 i es pot ignorar el fet que l'entrada no hi és. 240 00:11:59,060 --> 00:12:01,584 241 00:12:01,584 --> 00:12:04,000 Així que vull parlar una mica més sobre aquesta última bala 242 00:12:04,000 --> 00:12:05,541 punt, que és les funcions són valors. 243 00:12:05,541 --> 00:12:07,930 244 00:12:07,930 --> 00:12:11,010 Aquest és un exemple que és un lucinant mica 245 00:12:11,010 --> 00:12:14,880 si vostè acaba de llegir, i no creu sobre el que està passant per un segon. 246 00:12:14,880 --> 00:12:17,910 Per tant, donem una ullada just en la primera línia aquí. 247 00:12:17,910 --> 00:12:24,360 Tenim aquesta variable, f1, que diem és una funció que fa això. 248 00:12:24,360 --> 00:12:28,535 I el contingut de la funció es console.log ('hola'). 249 00:12:28,535 --> 00:12:32,220 Vostè pot pensar en console.log com el Equivalent JavaScript de printf. 250 00:12:32,220 --> 00:12:35,510 Llavors, què passarà és que, si ens executar aquest codi en el nostre navegador, 251 00:12:35,510 --> 00:12:37,530 que va a imprimir una cadena. 252 00:12:37,530 --> 00:12:39,342 Puc demostrar que. 253 00:12:39,342 --> 00:12:42,300 AUDIÈNCIA: Per registre, però, fa que vol dir que sigui que s'està gravant en algun lloc? 254 00:12:42,300 --> 00:12:42,550 VERD SAM: Sí. 255 00:12:42,550 --> 00:12:44,216 Així que et vaig a mostrar el que ha de passar. 256 00:12:44,216 --> 00:12:48,085 Per tant el dubte era, què significa log? 257 00:12:48,085 --> 00:12:51,262 >> HUGH Zabriskie: Així console.log és com printf de C. 258 00:12:51,262 --> 00:12:52,970 SAM VERD: Així console.log és com printf, 259 00:12:52,970 --> 00:12:59,240 pel que si tinc aquest console.log ('hola'), i jo dic a això, la cadena "hola" 260 00:12:59,240 --> 00:13:00,730 s'imprimeix a la consola. 261 00:13:00,730 --> 00:13:03,340 Aquesta és la consola. 262 00:13:03,340 --> 00:13:05,930 És com printf, on imprimeix a terme estàndard. 263 00:13:05,930 --> 00:13:09,050 264 00:13:09,050 --> 00:13:11,230 I veurem en un minut, però això és en realitat 265 00:13:11,230 --> 00:13:16,529 es fa referència a l'objecte de la consola, i trucar a un mètode en aquest objecte. 266 00:13:16,529 --> 00:13:18,320 Això farà més sentit en un minut quan ens 267 00:13:18,320 --> 00:13:20,660 arribar a parlar de objectes en JavaScript, 268 00:13:20,660 --> 00:13:22,509 però jo pensava que anava a esmentar això. 269 00:13:22,509 --> 00:13:24,300 HUGH Zabriskie: Estem utilitzat en el C, dreta- 270 00:13:24,300 --> 00:13:27,580 escrivim generalment un gran programa en principal per fer qualsevol cosa. 271 00:13:27,580 --> 00:13:30,700 Però el que és fresc en JavaScript que és tenir aquest tipus d'intèrpret que 272 00:13:30,700 --> 00:13:33,620 carreres en temps real, de manera que pren simplement línia per línia, 273 00:13:33,620 --> 00:13:35,320 que només pot interpretar que a l'acte. 274 00:13:35,320 --> 00:13:37,403 I no perd de vista les coses que s'han executat abans, 275 00:13:37,403 --> 00:13:41,620 pel que és una eina molt útil per utilitzar console.log, o la consola, 276 00:13:41,620 --> 00:13:46,870 en general, per només jugar voltant amb JavaScript. 277 00:13:46,870 --> 00:13:51,420 >> VERD Carter: Així que tornar a aquest exemple-- la segona línia de codi 278 00:13:51,420 --> 00:13:55,320 aquí és bastant al·lucinant al meu cap. 279 00:13:55,320 --> 00:13:59,790 La primera vegada que llegeixo això, era com, què està passant? 280 00:13:59,790 --> 00:14:04,580 Així que el que està succeint és a dir, aquest declaració de la funció, diu, 281 00:14:04,580 --> 00:14:10,170 Tinc una funció anomenada f2 que està esperant un argument, f, 282 00:14:10,170 --> 00:14:12,990 i després es diu a això funció, f, que 283 00:14:12,990 --> 00:14:17,652 se li passa com a argument ni per si mateix amb arguments. 284 00:14:17,652 --> 00:14:19,110 Per tant, que podria haver estat confús. 285 00:14:19,110 --> 00:14:21,890 286 00:14:21,890 --> 00:14:28,400 Si entenem això com f2 f1 presa com a argument, i després dins de f2, 287 00:14:28,400 --> 00:14:31,190 f aconsegueix called-- els mitjans que aquesta línia de codi, 288 00:14:31,190 --> 00:14:34,192 després d'aquestes dues línies de codi, dóna com a resultat "hola" 289 00:14:34,192 --> 00:14:35,400 que s'està imprimint a la consola. 290 00:14:35,400 --> 00:14:41,660 291 00:14:41,660 --> 00:14:44,910 >> El fet que podem passar funcions voltant com a valors 292 00:14:44,910 --> 00:14:47,870 acaba sent un dels més potents funcions de JavaScript 293 00:14:47,870 --> 00:14:49,700 com un llenguatge de programació. 294 00:14:49,700 --> 00:14:52,782 Fora de tota la coses increïbles que pot fer, 295 00:14:52,782 --> 00:14:54,990 així com una característica de la llengua en termes de la forma 296 00:14:54,990 --> 00:14:58,400 que fa les coses fàcils programar i permet 297 00:14:58,400 --> 00:15:01,060 per les coses que no són particularment ben adaptat al web, 298 00:15:01,060 --> 00:15:04,500 programació funcional i funcional aspectes de programació de JavaScript 299 00:15:04,500 --> 00:15:07,130 és un dels més conceptes de gran abast que 300 00:15:07,130 --> 00:15:11,030 existeix en JavaScript-- si vostè em pregunta. 301 00:15:11,030 --> 00:15:11,960 Fresc. 302 00:15:11,960 --> 00:15:13,534 >> Per tant, el següent. 303 00:15:13,534 --> 00:15:16,450 A més de ser funcional, també hi ha elements de JavaScript 304 00:15:16,450 --> 00:15:20,510 que són orientada a objectes, que és un dels molt 305 00:15:20,510 --> 00:15:23,800 paraules de moda populars en ciències de la computació. 306 00:15:23,800 --> 00:15:27,040 Programació orientada a objectes és una dada popular. 307 00:15:27,040 --> 00:15:34,210 JavaScript té una versió que, on crec que tot valor és també 308 00:15:34,210 --> 00:15:41,475 un objecte, el que significa que tots els objectes envolta a alguns nombre de valors. 309 00:15:41,475 --> 00:15:44,020 310 00:15:44,020 --> 00:15:49,750 Així que per a valors que són simples, com un nombre sencer, com varX és igual a 5, 311 00:15:49,750 --> 00:15:52,250 aquest objecte simplement envolta que un valor. 312 00:15:52,250 --> 00:15:54,760 313 00:15:54,760 --> 00:15:59,036 >> Però també podem imaginar una situació where-- podem pensar en situacions en C 314 00:15:59,036 --> 00:16:00,910 on volíem fer alguna cosa amb estructures, 315 00:16:00,910 --> 00:16:03,285 per exemple, que envolta diversos valors junts i marques 316 00:16:03,285 --> 00:16:05,870 És realment fàcil de passar les coses. 317 00:16:05,870 --> 00:16:09,270 Va ser llavors quan un objecte està en JavaScript. 318 00:16:09,270 --> 00:16:12,340 >> És important recordar quan dic que els objectes embolicats 319 00:16:12,340 --> 00:16:15,330 alguns nombre de valors junts, que les funcions són també 320 00:16:15,330 --> 00:16:21,506 valors, el que significa que les funcions poden També estar dins d'un objecte de JavaScript. 321 00:16:21,506 --> 00:16:26,910 I la raó per la qual és important és que, mentre que sovint 322 00:16:26,910 --> 00:16:30,290 pensar en trucar a un mètode en un objecte que és 323 00:16:30,290 --> 00:16:35,200 d'un terme popular d'altres llenguatges orientats a objectes populars, 324 00:16:35,200 --> 00:16:39,330 Una de les diferències és que aquí tot el que és un mètode en JavaScript 325 00:16:39,330 --> 00:16:47,270 és un valor emmagatzemat a l'interior d'un objecte que realitza alguna Action-- possiblement 326 00:16:47,270 --> 00:16:51,850 usant els altres valors que estan dins de d'aquest objecte, però no necessàriament. 327 00:16:51,850 --> 00:16:56,930 Així que vostè pot imaginar una situació, Suposo que en una mica d'una manera boja, 328 00:16:56,930 --> 00:17:02,990 on va cridar un mètode d'una objecte en un altre objecte, per exemple. 329 00:17:02,990 --> 00:17:06,010 Així que és una mica covard d'aquesta manera. 330 00:17:06,010 --> 00:17:09,369 >> I també es pot canviar els mètodes que estan vinculats a un objecte 331 00:17:09,369 --> 00:17:13,740 mitjançant l'assignació d'un mètode que nova funció, que és també 332 00:17:13,740 --> 00:17:18,250 bastant diferent d'altres llenguatges orientats a objectes, on 333 00:17:18,250 --> 00:17:21,410 una vegada que declarem un objecte i crear instàncies d'ella, 334 00:17:21,410 --> 00:17:25,839 no podem canviar els mètodes que són associat amb aquest objecte més. 335 00:17:25,839 --> 00:17:28,680 Així que això és bastant diferent. 336 00:17:28,680 --> 00:17:29,570 Fresc. 337 00:17:29,570 --> 00:17:34,010 >> Així que aquí està un exemple, en primer lloc, d'un objecte en l'acció. 338 00:17:34,010 --> 00:17:36,390 Això és el que s'anomena un objecte genèric, que 339 00:17:36,390 --> 00:17:39,460 vol dir que no té cap en particular nom, no té una classe, 340 00:17:39,460 --> 00:17:42,190 que és només una mica d'embolcall de valors. 341 00:17:42,190 --> 00:17:49,790 I la forma en què es veu és que tenim aquest parell exterior de arrissat es prepara aquí 342 00:17:49,790 --> 00:17:57,950 d'indicar a JavaScript i dir, es tracta d'un objecte. 343 00:17:57,950 --> 00:18:02,130 Els valors dins d'ella són cada un dels valors a l'interior 344 00:18:02,130 --> 00:18:04,590 l'objecte que ha de ser embolicat junts. 345 00:18:04,590 --> 00:18:09,180 I dins d'aquest objecte, llavors tenim parells de valors clau, 346 00:18:09,180 --> 00:18:13,880 on la clau es refereix al nom del valor a l'interior de l'objecte, 347 00:18:13,880 --> 00:18:16,790 i l'altre side-- enfront de la aquí-- de còlon 348 00:18:16,790 --> 00:18:19,850 és el valor real que han de ser emmagatzemats. 349 00:18:19,850 --> 00:18:26,210 >> Així que veure aquí que tenim una clau anomenada fn amb valor sam, 350 00:18:26,210 --> 00:18:29,430 seguit d'una coma, dient a la següent entrada. 351 00:18:29,430 --> 00:18:33,560 A continuació, una clau anomenada ln, amb un valor de verd, 352 00:18:33,560 --> 00:18:35,840 seguit d'una coma, seguit de "imprimir" 353 00:18:35,840 --> 00:18:43,209 que va a tenir un valor de la funció que va a fer aquesta línia de codi. 354 00:18:43,209 --> 00:18:45,500 Anem a fer un pas enrere i desempacar el que està passant aquí. 355 00:18:45,500 --> 00:18:47,280 Així que això és una mica complicat, i estem veient una cosa nova 356 00:18:47,280 --> 00:18:48,071 per primera vegada. 357 00:18:48,071 --> 00:18:51,190 358 00:18:51,190 --> 00:18:55,065 La paraula "this" és el nou que estem veient aquí, i el que això fa 359 00:18:55,065 --> 00:19:00,540 és a dir, es refereix a l'actual objectar en el seu abast, no? 360 00:19:00,540 --> 00:19:03,990 Així que quan diem, això assenyala el final de nou 361 00:19:03,990 --> 00:19:08,140 a tot aquest objeto-- quan fem this.fn, 362 00:19:08,140 --> 00:19:11,990 anirem tot el camí de tornada a aquest objecte, aneu al valor fn 363 00:19:11,990 --> 00:19:16,471 i obtenir sam, estireu-lo fins al final esquena, enganxar-lo aquí, i després seguir endavant. 364 00:19:16,471 --> 00:19:19,838 >> AUDIÈNCIA: Així que amb la recuperació, és que fet pel paràmetre 365 00:19:19,838 --> 00:19:20,621 definició? 366 00:19:20,621 --> 00:19:23,870 VERD Carter: tant el dubte era, és el recuperació de fet perquè del paràmetre 367 00:19:23,870 --> 00:19:24,727 definició? 368 00:19:24,727 --> 00:19:25,435 Sí, absolutament. 369 00:19:25,435 --> 00:19:29,660 370 00:19:29,660 --> 00:19:32,470 ¿Què passarà aquí és, aquest punt diu que el codi JavaScript, 371 00:19:32,470 --> 00:19:39,990 OK, m'estic posant una mica de valor d'aquest objecte de mi mateix. 372 00:19:39,990 --> 00:19:46,375 I llavors va a buscar una entrada anomenada fn, i si el troba, 373 00:19:46,375 --> 00:19:48,470 que tornarà que value-- així, és sam. 374 00:19:48,470 --> 00:19:51,540 Però també podria haver escrit cosa que no es defineix aquí, 375 00:19:51,540 --> 00:19:54,090 i després ho faria només tornar undefined-- que 376 00:19:54,090 --> 00:19:58,250 és una cosa que pot JavaScript fer, que pot tenir beneficis, 377 00:19:58,250 --> 00:20:03,190 però és també- si vostè comet un error tipogràfic, pot donar lloc a errors estranys. 378 00:20:03,190 --> 00:20:05,617 Així que només vaig a tractar de trobar el que li dius a trobar 379 00:20:05,617 --> 00:20:07,700 i no va a queixar-se si no el troba. 380 00:20:07,700 --> 00:20:11,390 Simplement dirà, no ho vaig fer trobar-lo, i després seguir endavant. 381 00:20:11,390 --> 00:20:17,581 Pel que seria indefinit, més blanc, més el cognom. 382 00:20:17,581 --> 00:20:18,080 Sí. 383 00:20:18,080 --> 00:20:21,070 I llavors podem veure que si llavors podria baixar i access-- 384 00:20:21,070 --> 00:20:25,450 i anomenem tf.print () amb parèntesis. 385 00:20:25,450 --> 00:20:30,000 Es va a trucar a aquesta impressió funció sense arguments, no? 386 00:20:30,000 --> 00:20:34,490 Però si acabem de dir tf.print () punt i coma, sense els parèntesis, 387 00:20:34,490 --> 00:20:37,480 tot el que hauria fet és tirar la funció del valor, 388 00:20:37,480 --> 00:20:40,609 però en realitat no el va cridar. 389 00:20:40,609 --> 00:20:41,162 Fresc. 390 00:20:41,162 --> 00:20:42,870 HUGH Zabriskie: En cas de fem un objecte? 391 00:20:42,870 --> 00:20:44,161 VERD SAM: És clar, farem això. 392 00:20:44,161 --> 00:20:48,750 Així que em puc moure aquest exemple a la consola. 393 00:20:48,750 --> 00:20:51,380 394 00:20:51,380 --> 00:20:55,466 Podem imaginar que tinc un objecte. 395 00:20:55,466 --> 00:21:03,026 396 00:21:03,026 --> 00:21:04,150 Així que això és un simple objecte. 397 00:21:04,150 --> 00:21:06,910 398 00:21:06,910 --> 00:21:11,050 Aquest és un objecte que conté dos valors amb dues claus, dos valors clau 399 00:21:11,050 --> 00:21:12,710 parells. 400 00:21:12,710 --> 00:21:21,850 Així que llavors puc accedir al valor emmagatzemat dins d'aquest objecte fent x.x1, 401 00:21:21,850 --> 00:21:23,400 per exemple, i em dóna 1 volta. 402 00:21:23,400 --> 00:21:29,590 De la mateixa manera, x.x2, aconseguir aquest valor de nou. 403 00:21:29,590 --> 00:21:33,330 >> I ara el realment interessant és, que pugui realment afegir alguna cosa a aquest objecte 404 00:21:33,330 --> 00:21:34,316 després que jo he creat. 405 00:21:34,316 --> 00:21:36,315 Així que vostè pot imaginar, anem dir que tinc una funció. 406 00:21:36,315 --> 00:21:44,430 407 00:21:44,430 --> 00:21:46,352 >> HUGH Zabriskie: Vostè haver de fer Maj-Enter. 408 00:21:46,352 --> 00:21:47,643 >> VERD SAM: Oh, això és molest. 409 00:21:47,643 --> 00:22:02,460 410 00:22:02,460 --> 00:22:04,324 Què no li agrada? 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 Aquí anem. 414 00:22:08,691 --> 00:22:09,190 Fresc. 415 00:22:09,190 --> 00:22:12,840 >> Així que he creat aquesta funció, f, que 416 00:22:12,840 --> 00:22:17,590 va a anar a la corrent objecte i this.x1 impressió. 417 00:22:17,590 --> 00:22:20,330 Així que si em dic per f sí, res va 418 00:22:20,330 --> 00:22:26,970 a succeir, oi, perquè no hi ha x1 camp en l'objecte que s'està referint a. 419 00:22:26,970 --> 00:22:39,710 Però, si jo dic, x.f = f, i després em cridar x.f (), em vaig a tornar 1. 420 00:22:39,710 --> 00:22:42,990 421 00:22:42,990 --> 00:22:46,530 Aquesta funció f és ara associat amb l'objecte x, 422 00:22:46,530 --> 00:22:51,800 que té una clau anomenada x1 associat amb el valor 1, 423 00:22:51,800 --> 00:22:54,570 així que quan ens diem this.x1, és va a trobar el que està buscant 424 00:22:54,570 --> 00:22:56,450 i ser capaç d'imprimir un valor fora. 425 00:22:56,450 --> 00:22:58,700 Així que això és només un exemple del tipus de les coses boges 426 00:22:58,700 --> 00:23:01,190 que pot fer amb els objectes en JavaScript. 427 00:23:01,190 --> 00:23:03,870 428 00:23:03,870 --> 00:23:07,560 >> Així que va ser la versió versió genèrica, significat 429 00:23:07,560 --> 00:23:13,780 que hem creat un objecte utilitzant aquest parèntesi notació cotilla notation--, 430 00:23:13,780 --> 00:23:16,880 rather-- i això és molt útil si només volem 431 00:23:16,880 --> 00:23:21,440 una instància d'un objecte en particular, però ¿I si volem tenir més d'un 432 00:23:21,440 --> 00:23:22,210 de la mateixa classe? 433 00:23:22,210 --> 00:23:24,440 I la resposta a aquesta pregunta és, hi ha coses 434 00:23:24,440 --> 00:23:26,760 anomenat classes en JavaScript també. 435 00:23:26,760 --> 00:23:31,470 436 00:23:31,470 --> 00:23:36,420 Podem crear una funció que fa algun tipus d'inicialització 437 00:23:36,420 --> 00:23:41,690 per a un objecte estrany, i diríem, com, 438 00:23:41,690 --> 00:23:44,550 la meva class-- el que el nom del objeto-- reutilitzable 439 00:23:44,550 --> 00:23:47,100 és igual a la funció que el configura. 440 00:23:47,100 --> 00:23:52,280 Així que el que això seria equivalent que és la creació d'un objecte que 441 00:23:52,280 --> 00:23:55,930 seria com, claudàtor, str, còlon, 442 00:23:55,930 --> 00:23:59,630 això és una cadena, punt i coma, claudàtor. 443 00:23:59,630 --> 00:24:01,880 Aquest seria el genèric objecte inicialitzem, 444 00:24:01,880 --> 00:24:06,380 amb l'única diferència de ser al següents línies vam crear un prototip, que 445 00:24:06,380 --> 00:24:11,190 significa que és una clau per defecte que afegim al nostre objecte que 446 00:24:11,190 --> 00:24:13,970 té el valor indicat aquí. 447 00:24:13,970 --> 00:24:20,570 El que significa que, quan creo un nou instància d'aquest objecte MiClase, 448 00:24:20,570 --> 00:24:27,440 que hi haurà pre-construït a l'interior de és un valor anomenat str i un altre valor 449 00:24:27,440 --> 00:24:32,418 myPrint trucada, que és serà una funció. 450 00:24:32,418 --> 00:24:32,918 Impressionant. 451 00:24:32,918 --> 00:24:37,410 452 00:24:37,410 --> 00:24:37,990 >> Gran. 453 00:24:37,990 --> 00:24:40,710 Així que l'últim que es dir de JavaScript 454 00:24:40,710 --> 00:24:46,430 és que és molt útil per a la qual s'anomenen operacions asíncrones. 455 00:24:46,430 --> 00:24:52,500 Mitjans asíncrona és que nosaltres pot esperar que alguna operació 456 00:24:52,500 --> 00:24:57,870 per completar abans de passar , Però seguir endavant mentre esperem 457 00:24:57,870 --> 00:24:59,690 i després fer que alguna cosa succeeixi en el futur. 458 00:24:59,690 --> 00:25:03,480 I el que vull dir amb això és que vostè pot imaginar una situació en què 459 00:25:03,480 --> 00:25:06,850 envia una sol·licitud a algun lloc web en qualsevol lloc, 460 00:25:06,850 --> 00:25:09,670 i que va a que li enviï de tornada alguna gran part de les dades, no? 461 00:25:09,670 --> 00:25:13,320 I l'usuari podria esperar en el Mentrestant perquè això succeeixi, 462 00:25:13,320 --> 00:25:15,200 i res podria ser passant en aquest moment. 463 00:25:15,200 --> 00:25:18,110 Però això no és un gran disseny, no? 464 00:25:18,110 --> 00:25:20,214 No vol que la pàgina web es congeli. 465 00:25:20,214 --> 00:25:22,380 Què passa si l'usuari desitja feu clic a un menú desplegable? 466 00:25:22,380 --> 00:25:24,870 No és un gran patró de disseny. 467 00:25:24,870 --> 00:25:29,290 En canvi, en el fons el que JavaScript no es diu, 468 00:25:29,290 --> 00:25:31,870 OK, realitzar aquesta operació de forma asíncrona. 469 00:25:31,870 --> 00:25:36,520 Així com, esperar en el fons, i després, quan es realitza l'operació, 470 00:25:36,520 --> 00:25:39,420 truqui a la devolució de trucada function-- trucar a alguna funció, 471 00:25:39,420 --> 00:25:43,800 Feu una mica de Action-- per assenyalar que el operació que estàvem esperant per acabar 472 00:25:43,800 --> 00:25:45,520 S'ha acabat. 473 00:25:45,520 --> 00:25:51,240 I la raó que és súper poderosa és, podem fer alguna cosa, passar un argument, 474 00:25:51,240 --> 00:25:54,440 fer alguna cosa, i després esperar perquè alguna cosa succeeixi. 475 00:25:54,440 --> 00:25:58,970 Després, una vegada que alguna cosa completa, podem trucar a una devolució de trucada. 476 00:25:58,970 --> 00:26:03,300 Això és molt útil, ja que permet nosaltres fem les coses amb Web API Audio, 477 00:26:03,300 --> 00:26:07,490 per exemple, com una càrrega arxiu d'àudio des d'un servidor remot 478 00:26:07,490 --> 00:26:11,660 sense haver d'esperar a que el arxiu d'àudio que va a carregar, 479 00:26:11,660 --> 00:26:14,440 la qual cosa seria realment dolent per a l'experiència de l'usuari. 480 00:26:14,440 --> 00:26:17,080 Fresc. 481 00:26:17,080 --> 00:26:19,460 >> Darrera parella observa sobre depuració, ja que aquest 482 00:26:19,460 --> 00:26:23,682 és una cosa que hauràs de fer com a part del seu projecte, garantit. 483 00:26:23,682 --> 00:26:25,140 Vaig esmentar la consola JavaScript. 484 00:26:25,140 --> 00:26:27,550 És una característica molt útil de tots els navegadors moderns, 485 00:26:27,550 --> 00:26:30,300 I realment convidem a obtenir còmode usant la consola, 486 00:26:30,300 --> 00:26:33,660 si vols ser bo en JavaScript. 487 00:26:33,660 --> 00:26:36,320 És súper útil per depuració, però també és 488 00:26:36,320 --> 00:26:39,440 molt útil per calcular com utilitzar una API. 489 00:26:39,440 --> 00:26:41,950 Permet la realitat fàcil experimentació 490 00:26:41,950 --> 00:26:45,910 sense haver d'escriure alguna codi i, a continuació, compilar-lo. 491 00:26:45,910 --> 00:26:47,500 No ha de fer tots aquests passos. 492 00:26:47,500 --> 00:26:49,619 Vostè pot escriure una mica de codi en una línia, 493 00:26:49,619 --> 00:26:52,410 i després obtenir informació immediata sobre si aquesta línia de codi 494 00:26:52,410 --> 00:26:55,230 worked-- molt pràctic. 495 00:26:55,230 --> 00:26:59,760 >> I també, només una note-- tècnica la consola de JavaScript és un exemple 496 00:26:59,760 --> 00:27:05,680 d'un REPL-- així que això és R-E-P-L, REPL, que significa llegir, avaluar, 497 00:27:05,680 --> 00:27:06,180 llaç d'impressió. 498 00:27:06,180 --> 00:27:09,100 499 00:27:09,100 --> 00:27:12,120 Vas a escriure algunes coses en, va llegir el que ha escrit en, 500 00:27:12,120 --> 00:27:17,280 que va a avaluar, i que va a imprimir el de sortida, i després es va a començar de nou. 501 00:27:17,280 --> 00:27:22,056 Això li permet anar ràpidament a cercles iteració, que és realment genial. 502 00:27:22,056 --> 00:27:25,150 503 00:27:25,150 --> 00:27:28,930 >> Suposo última veritable note-- aquest és la veritable darrera nota, si. 504 00:27:28,930 --> 00:27:30,780 Com podem realment utilitzem JavaScript? 505 00:27:30,780 --> 00:27:34,040 Així que primer, podem importar usant una etiqueta de script 506 00:27:34,040 --> 00:27:39,500 a la part superior o inferior d'un HTML file-- en qualsevol lloc dins d'un arxiu HTML, 507 00:27:39,500 --> 00:27:40,440 realment. 508 00:27:40,440 --> 00:27:47,390 I dins d'una etiqueta de script, hi ha dos sub-maneres d'importació JavaScript. 509 00:27:47,390 --> 00:27:51,370 El primer és per tenir una arxiu JavaScript diferent 510 00:27:51,370 --> 00:27:58,010 que importem íntegrament, o per tenir una àrea de codi com a guió 511 00:27:58,010 --> 00:28:00,290 per començar, i després script de barra invertida a fi. 512 00:28:00,290 --> 00:28:02,620 I llavors només escrivim JavaScript dins de l'arxiu HTML. 513 00:28:02,620 --> 00:28:03,790 Aquestes són les dues maneres. 514 00:28:03,790 --> 00:28:05,165 No es pot tenir dins d'HTML. 515 00:28:05,165 --> 00:28:06,502 516 00:28:06,502 --> 00:28:08,126 AUDIÈNCIA: És un de millor que l'altre? 517 00:28:08,126 --> 00:28:10,542 VERD SAM: La pregunta era, és un de millor que l'altre. 518 00:28:10,542 --> 00:28:18,306 Així que, sí, com una pràctica estil de codificació, i també és com una pràctica de disseny. 519 00:28:18,306 --> 00:28:20,180 Hi ha dues raons per què podria ser millor. 520 00:28:20,180 --> 00:28:23,934 La primera és, que fa que el seu codi d'una molt més llegible si tot el codi HTML 521 00:28:23,934 --> 00:28:27,100 està en un sol lloc, tots els de la seva CSS està en un altre lloc, tot el teu Javascript 522 00:28:27,100 --> 00:28:28,420 es troba en un tercer lloc. 523 00:28:28,420 --> 00:28:28,920 Oi? 524 00:28:28,920 --> 00:28:32,370 Crec que ja hauríem d'haver parlat al respecte en les Categorías-- com CSS-- el 525 00:28:32,370 --> 00:28:35,220 que és-- i va sovint en un altre arxiu. 526 00:28:35,220 --> 00:28:37,090 Així, el mateix tipus de concepte aquí. 527 00:28:37,090 --> 00:28:42,410 També pot imaginar que JavaScript seria ser reutilitzat en més d'una 528 00:28:42,410 --> 00:28:47,350 Pàgina HTML, o potser una gran nombre de pàgines HTML, 529 00:28:47,350 --> 00:28:49,340 i que ha de JavaScript refactorizado en un 530 00:28:49,340 --> 00:28:51,950 arxiu que es pot importar en més d'un lloc 531 00:28:51,950 --> 00:28:54,570 permet que el codi sigui manera més fàcil de mantenir. 532 00:28:54,570 --> 00:28:57,930 Es pot imaginar fer-ne un canviar el JavaScript 533 00:28:57,930 --> 00:29:00,070 i haver de canviar- en 100 arxius diferents. 534 00:29:00,070 --> 00:29:04,070 I en comptes podem simplement canviar- en un, que és molt més potent. 535 00:29:04,070 --> 00:29:05,420 He respost a la seva pregunta? 536 00:29:05,420 --> 00:29:07,950 Fresc. 537 00:29:07,950 --> 00:29:10,830 >> També podem escriure a la consola, com hem esmentat abans. 538 00:29:10,830 --> 00:29:15,070 I un cop més, una última note-- Web Audio està construït, 539 00:29:15,070 --> 00:29:16,978 vostè no ha de carregar res. 540 00:29:16,978 --> 00:29:17,478 Fresc. 541 00:29:17,478 --> 00:29:20,519 Hi ha alguna pregunta, ¿té qualsevol més preguntes sobre JavaScript, 542 00:29:20,519 --> 00:29:21,930 abans de seguir endavant? 543 00:29:21,930 --> 00:29:24,286 >> AUDIÈNCIA: [inaudible] 544 00:29:24,286 --> 00:29:25,410 VERD SAM: Molt bé, fresc. 545 00:29:25,410 --> 00:29:27,200 Així que ara ell va a parlar de l'API. 546 00:29:27,200 --> 00:29:28,490 >> HUGH Zabriskie: Cool. 547 00:29:28,490 --> 00:29:28,990 Gràcies, Sam. 548 00:29:28,990 --> 00:29:30,184 >> VERD SAM: És clar. 549 00:29:30,184 --> 00:29:32,600 HUGH Zabriskie: impressionant, per la qual cosa anem a passar de JavaScript. 550 00:29:32,600 --> 00:29:35,350 Així que hem parlat d'alguns l'essencial de JavaScript, 551 00:29:35,350 --> 00:29:41,105 i aquestes són les variables, funcions, objectes, funcions com a variables, 552 00:29:41,105 --> 00:29:41,980 càrrega asíncrona. 553 00:29:41,980 --> 00:29:46,100 Aquestes són totes les coses que vostè va a veure com s'utilitza la Web Àudio. 554 00:29:46,100 --> 00:29:49,230 Així que només anem a parlar sobre el primer en un nivell alt. 555 00:29:49,230 --> 00:29:52,120 >> És una API, així que és una cosa que es construeix, com va dir Sam, 556 00:29:52,120 --> 00:29:57,010 a la dreta en el codi JavaScript que s'utilitza en la consola. 557 00:29:57,010 --> 00:30:01,020 I en realitat és com codi C ++ el que realment es van construir a Chrome 558 00:30:01,020 --> 00:30:04,470 i Firefox, i tots aquests navegadors. 559 00:30:04,470 --> 00:30:07,060 Així que la idea principal amb la web Audio és que tens 560 00:30:07,060 --> 00:30:09,440 aquest tipus de canonada d'àudio, oi? 561 00:30:09,440 --> 00:30:13,670 Així les seves dades d'àudio ve en alguna forma. 562 00:30:13,670 --> 00:30:16,690 >> Hi ha classe de de tres forms-- principal vostè té l'oscil·lador, que 563 00:30:16,690 --> 00:30:21,340 crea una ona sinusoïdal, ona cosinus, anem a veure com funciona. 564 00:30:21,340 --> 00:30:23,890 Un altre molt comú, per descomptat, és un MP3. 565 00:30:23,890 --> 00:30:25,810 Així que potser vostè comença amb una cançó, i després 566 00:30:25,810 --> 00:30:28,320 voler fer algun tipus de filtrat a això i de sortida 567 00:30:28,320 --> 00:30:30,605 que- que podria ser una possible font. 568 00:30:30,605 --> 00:30:32,480 I després un molt cool un és el micròfon. 569 00:30:32,480 --> 00:30:37,230 Així que vostè pot utilitzar alguns molt trucades bàsiques en JavaScript 570 00:30:37,230 --> 00:30:39,440 per accedir a la micròfon, pel que si vostè 571 00:30:39,440 --> 00:30:42,870 volia fer una aplicació com un detector de to, 572 00:30:42,870 --> 00:30:45,290 per exemple, que porta a la seva veu i dades fora 573 00:30:45,290 --> 00:30:47,740 el pitch-- manera molt fàcil d'això. 574 00:30:47,740 --> 00:30:50,730 Pot només tipus de llegir-lo en, esbrinar la freqüència, 575 00:30:50,730 --> 00:30:52,250 i llavors la sortida un nombre. 576 00:30:52,250 --> 00:30:56,080 Així que anem a veure com funciona, també. 577 00:30:56,080 --> 00:30:59,430 >> El destí és bàsicament on les dades d'àudio s'emet. 578 00:30:59,430 --> 00:31:02,890 Així que en general, això és com els altaveus portàtils. 579 00:31:02,890 --> 00:31:05,610 Altres opcions són com 1 ScriptProcessorNode-- 580 00:31:05,610 --> 00:31:07,990 arribarem als nodes d'un second-- però bàsicament, 581 00:31:07,990 --> 00:31:11,939 ja sigui que vostè està posant so a terme a través del seu ordinador a través d'altaveus, 582 00:31:11,939 --> 00:31:14,730 o si busques tipus de gravació, per la qual estàs emmagatzemar com a dades d'àudio. 583 00:31:14,730 --> 00:31:18,980 Així que potser si algú crea la música en la seva aplicació i després 584 00:31:18,980 --> 00:31:22,410 que voleu escriure això i potser com exportar-ho a SoundCloud, per exemple-- 585 00:31:22,410 --> 00:31:25,281 això seria una manera de fer això. 586 00:31:25,281 --> 00:31:27,030 Totes les coses divertides, que parlarem, 587 00:31:27,030 --> 00:31:29,950 que ocorre entre aquests dos punts, on carreguem en la música 588 00:31:29,950 --> 00:31:31,410 i després sortida de la mateixa. 589 00:31:31,410 --> 00:31:36,660 >> Així que vaig a parlar dels cinc etapes de producció d'àudio en un segon. 590 00:31:36,660 --> 00:31:38,950 Tenim aquesta cosa anomenada 1 AudioContext, que 591 00:31:38,950 --> 00:31:41,580 és aquest petit embolcall que veiem aquí. 592 00:31:41,580 --> 00:31:49,980 Bàsicament el AudioContext és-- si anar a la consola de JavaScript en aquest moment, 593 00:31:49,980 --> 00:31:52,740 podem crear-ne un ara mateix. 594 00:31:52,740 --> 00:31:54,040 Només un exemple de REPL, oi? 595 00:31:54,040 --> 00:31:57,880 Estem llegint, avaluar i que imprimeix. 596 00:31:57,880 --> 00:32:00,260 >> AudioContext és un estat global. 597 00:32:00,260 --> 00:32:05,500 És una estructura, és un objecte aquí, i manté la informació 598 00:32:05,500 --> 00:32:09,960 sobre les coses que estan passant a la pantalla relacionats amb l'àudio. 599 00:32:09,960 --> 00:32:15,220 Un exemple és l'hora actual. 600 00:32:15,220 --> 00:32:18,910 Això li indica el nombre de segon, amb molta precisió, 601 00:32:18,910 --> 00:32:20,890 des de la pàgina web carregada. 602 00:32:20,890 --> 00:32:24,110 Així que aquesta és una molt útil petita propietat que pot utilitzar. 603 00:32:24,110 --> 00:32:27,898 Ha llegit only-- crec que en realitat es pot tractar d'establir un valor. 604 00:32:27,898 --> 00:32:29,856 Es dirà que estableixi, i després, si ho imprimeixi 605 00:32:29,856 --> 00:32:31,439 nou-- no va ser així en realitat força feina. 606 00:32:31,439 --> 00:32:34,472 Així que no són de només lectura propietats en JavaScript. 607 00:32:34,472 --> 00:32:36,430 Això és realment útil si estàs tipus de sincronització 608 00:32:36,430 --> 00:32:38,610 una gran quantitat de diferents informació, quan estàs 609 00:32:38,610 --> 00:32:41,280 tipus de tocar diferents sons. 610 00:32:41,280 --> 00:32:43,630 >> Una altra molt útil és el destí context. 611 00:32:43,630 --> 00:32:46,587 612 00:32:46,587 --> 00:32:49,670 En definitiva, si t'interessa, ja sigui intentar això en el seu propi dret de la consola 613 00:32:49,670 --> 00:32:50,980 ara. 614 00:32:50,980 --> 00:32:53,150 Així que aquest és un AudioDestinationNode. 615 00:32:53,150 --> 00:32:56,480 Bàsicament el que diu és, Cap a on va la sortida? 616 00:32:56,480 --> 00:32:59,590 Així que hi ha dues opcions reals aquí. 617 00:32:59,590 --> 00:33:01,940 En general, el valor per defecte és només dels altaveus, 618 00:33:01,940 --> 00:33:05,150 així AudioDestinationNode bàsicament diu 619 00:33:05,150 --> 00:33:09,240 hi ha zero sortides al so entrant, enviat a l'altaveu. 620 00:33:09,240 --> 00:33:12,050 Així que en general, no ho fa has de jugar amb això. 621 00:33:12,050 --> 00:33:15,720 Si vostè està interessat en utilitzar realment la ScriptProcessorNode per a la gravació, 622 00:33:15,720 --> 00:33:16,990 Definitivament em an disparar correu electrònic més tard perquè això és 623 00:33:16,990 --> 00:33:18,330 una mica més complicat. 624 00:33:18,330 --> 00:33:21,590 Però, en general, vostè és només una mica de la sortida de so en alguna forma. 625 00:33:21,590 --> 00:33:24,347 Tan guai, anem a saltar de nou aquí. 626 00:33:24,347 --> 00:33:25,180 AUDIÈNCIA: Ho sento. 627 00:33:25,180 --> 00:33:26,054 HUGH Zabriskie: Sí. 628 00:33:26,054 --> 00:33:28,770 AUDIÈNCIA: Sé que vostè va dir que parlar a vostè més tard sobre la gravació. 629 00:33:28,770 --> 00:33:31,550 Pots interfície que amb Pro Tools? 630 00:33:31,550 --> 00:33:33,120 >> HUGH Zabriskie: Amb Pro Tools? 631 00:33:33,120 --> 00:33:35,260 Anem a veure. 632 00:33:35,260 --> 00:33:37,220 No penso així. 633 00:33:37,220 --> 00:33:41,670 Així que va entre el client, que és el JavaScript 634 00:33:41,670 --> 00:33:44,310 consola, i la seva real ordinador, és generalment 635 00:33:44,310 --> 00:33:46,490 cosa que és una espècie de fora dels límits, si 636 00:33:46,490 --> 00:33:52,320 voluntat, tipus per la naturalesa d'ell-- és una mena de cosa disseny, 637 00:33:52,320 --> 00:33:57,770 però intenta mantenir l'explorador independent des de l'ordinador real de l'usuari. 638 00:33:57,770 --> 00:34:02,310 En general, l'únic que és capaç de d'accés és el micròfon o la càmera. 639 00:34:02,310 --> 00:34:04,730 No ets capaç de fer-ho, em no crec, utilitzeu Pro Tools. 640 00:34:04,730 --> 00:34:07,480 No obstant això, si ha creat una pista en Pro Tools, 641 00:34:07,480 --> 00:34:12,710 exportat que, vostè podria carregar aquest aquí, filtrar-la, per exemple, 642 00:34:12,710 --> 00:34:16,820 procés que, i registrar que en un Audio Destination-- o no-- una Esfera 643 00:34:16,820 --> 00:34:17,870 Node processador. 644 00:34:17,870 --> 00:34:20,730 I a continuació, a partir d'aquí, es podia exportar que a SoundCloud, que 645 00:34:20,730 --> 00:34:25,320 podria enviar en un correu electrònic, o el que vulgui a partir d'aquí. 646 00:34:25,320 --> 00:34:31,159 >> Però hi ha una mena de petita barrera entre fer música a l'ordinador 647 00:34:31,159 --> 00:34:33,050 i fer música en línia. 648 00:34:33,050 --> 00:34:37,940 >> SAM VERD: I això és no és exclusiu d'aquesta API. 649 00:34:37,940 --> 00:34:44,060 És una característica de seguretat de Chrome, i Crec que qualsevol altre navegador modern. 650 00:34:44,060 --> 00:34:45,860 El navegador és autònom. 651 00:34:45,860 --> 00:34:50,980 Així, per exemple, una pàgina web no pot utilitzar JavaScript per activar el so 652 00:34:50,980 --> 00:34:54,190 en els altaveus, per exemple. 653 00:34:54,190 --> 00:34:58,120 O no pot apagar l'ordinador. 654 00:34:58,120 --> 00:35:01,530 I no hi ha punt intermedi entre aquestes dues coses, a la dreta, 655 00:35:01,530 --> 00:35:05,960 així que o tens una completa abstracció, 656 00:35:05,960 --> 00:35:10,050 o s'obre la falla de seguretat de deixar 657 00:35:10,050 --> 00:35:14,440 un programador amb males intencions fer el que vulguin amb el seu ordinador portàtil. 658 00:35:14,440 --> 00:35:18,104 I és per això Chrome és autònom. 659 00:35:18,104 --> 00:35:19,310 >> HUGH Zabriskie: Sí. 660 00:35:19,310 --> 00:35:20,840 Això té sentit? 661 00:35:20,840 --> 00:35:21,369 Fresc, fresc. 662 00:35:21,369 --> 00:35:23,160 Jo només anava a mostrar un exemple d'un. 663 00:35:23,160 --> 00:35:25,118 Això és més o menys com la mesura del que s'obté, en termes 664 00:35:25,118 --> 00:35:26,950 d'accedir a l'ordinador de l'usuari. 665 00:35:26,950 --> 00:35:30,180 Si té un teclat USB connectat, pot utilitzar una cosa que es diu la web 666 00:35:30,180 --> 00:35:32,180 API MIDI, que no ho farem realment parlar aquí, 667 00:35:32,180 --> 00:35:36,330 però això és una altra API que és incorporada en almenys Chrome-- de nou, 668 00:35:36,330 --> 00:35:41,570 és per això que ens encanta Chrome-- Crec que el Firefox o Safari, 669 00:35:41,570 --> 00:35:44,300 això és una cosa fàcil de Google-- navegadors diferents tenen 670 00:35:44,300 --> 00:35:46,917 diferent de suport per als quals APIs que han implementat. 671 00:35:46,917 --> 00:35:49,875 Però si vostè vol connectar un teclat i treballar amb aquesta informació, 672 00:35:49,875 --> 00:35:52,850 tipus d'enviar el teclat la informació a l'ordinador 673 00:35:52,850 --> 00:35:57,620 i després utilitzar aquesta línia, aquesta API és el lloc on vol estar treballant això. 674 00:35:57,620 --> 00:35:58,150 >> Fresc. 675 00:35:58,150 --> 00:35:58,710 D'ACORD. 676 00:35:58,710 --> 00:36:01,320 Així, movent-se ràpidament d'aquí. 677 00:36:01,320 --> 00:36:03,310 Com anem a temps? 678 00:36:03,310 --> 00:36:04,210 >> ALTAVEU 1: Sobre 15. 679 00:36:04,210 --> 00:36:05,543 >> HUGH Zabriskie: 15 minuts per al final? 680 00:36:05,543 --> 00:36:06,160 D'acord, guai. 681 00:36:06,160 --> 00:36:08,170 Així que anem a cursa per davant aquí. 682 00:36:08,170 --> 00:36:13,500 >> Així que, bàsicament, el principal punt de pensar en això com una canonada 683 00:36:13,500 --> 00:36:16,430 és que cada pas en la canonada és una sèrie de nodes d'àudio. 684 00:36:16,430 --> 00:36:19,284 685 00:36:19,284 --> 00:36:20,950 La nostra font, diguem, és un oscil·lador. 686 00:36:20,950 --> 00:36:23,380 Hem de crear un node d'oscil·lador. 687 00:36:23,380 --> 00:36:25,690 I això és només una mica de la petita function-- 688 00:36:25,690 --> 00:36:30,460 i estan tots basats terme del context àudio aquí. 689 00:36:30,460 --> 00:36:32,885 >> AUDIÈNCIA: Quan es va dir oscil·lador, ¿vol dir que 690 00:36:32,885 --> 00:36:37,250 en realitat és, literalment, en passar de dos pols diferents d'anada i tornada? 691 00:36:37,250 --> 00:36:41,170 >> HUGH Zabriskie: No, és com una representació digital. 692 00:36:41,170 --> 00:36:42,740 S'aplica realment en C ++. 693 00:36:42,740 --> 00:36:46,460 En realitat no sé les especificacions de com es porten a la pràctica, 694 00:36:46,460 --> 00:36:48,500 però tot això està funcionant com dades binàries. 695 00:36:48,500 --> 00:36:51,260 696 00:36:51,260 --> 00:36:52,370 En realitat, si. 697 00:36:52,370 --> 00:36:53,950 Això estaria dient, que vaig poder En realitat, si t'interessa, 698 00:36:53,950 --> 00:36:56,533 Jo podria enviar una mica més informació sobre com les formes d'ona 699 00:36:56,533 --> 00:37:00,181 es mantenen amb un format digital. 700 00:37:00,181 --> 00:37:00,680 D'acord, guai. 701 00:37:00,680 --> 00:37:03,120 >> Així que estem generant un to com un sine ona o alguna cosa així, potser 702 00:37:03,120 --> 00:37:04,190 440 Hertz. 703 00:37:04,190 --> 00:37:05,830 Creem un oscil·lador. 704 00:37:05,830 --> 00:37:09,180 Si volem ajustar el volum, ens connecti res a un GainNode, 705 00:37:09,180 --> 00:37:12,500 que podríem veure amb .creategain. 706 00:37:12,500 --> 00:37:14,250 Que estableix el seu volum. 707 00:37:14,250 --> 00:37:17,820 Pot passar que en qualsevol de l'altre options-- així, 708 00:37:17,820 --> 00:37:20,300 pel que una font de memòria intermèdia d'àudio node és on vostè pot ser 709 00:37:20,300 --> 00:37:23,660 emmagatzemar un MP3 que vostè ha carregat en. 710 00:37:23,660 --> 00:37:27,670 >> Biquad filtre és per al filtrat si vostè vol prendre tota la base fos 711 00:37:27,670 --> 00:37:29,630 d'una cançó, o alguna cosa així. 712 00:37:29,630 --> 00:37:32,450 Déu no ho vulgui vostè vol prendre la base d'una cançó. 713 00:37:32,450 --> 00:37:36,980 I el node AudioDestination és, de nou, igual que la nostra conclusió és. 714 00:37:36,980 --> 00:37:39,980 Si alguna vegada interessat en veure totes les diferents opcions possibles, 715 00:37:39,980 --> 00:37:45,190 només ha d'anar a la pestanya i deixar l'auto-completar pujar. 716 00:37:45,190 --> 00:37:48,690 I si vostè no creu, vostè veurà tot el diferents coses que es poden crear. 717 00:37:48,690 --> 00:37:50,398 Podeu crear dinàmica processadors de seqüència de comandaments, 718 00:37:50,398 --> 00:37:52,940 Ni tan sols sé el que és a dir, per la barreja de fusions de canal 719 00:37:52,940 --> 00:37:55,930 i divisors de canal i tot això. 720 00:37:55,930 --> 00:37:56,430 Fresc. 721 00:37:56,430 --> 00:37:59,560 722 00:37:59,560 --> 00:38:01,390 >> Així que això és només una exemple d'una canonada. 723 00:38:01,390 --> 00:38:03,580 Així que tenim tres fonts entrant. 724 00:38:03,580 --> 00:38:06,830 Potser aquests són formes d'ona, potser es tracta d'arxius MP3. 725 00:38:06,830 --> 00:38:08,740 Un va a través d'un filtre, d'una altra 726 00:38:08,740 --> 00:38:12,404 sent distorsionada altra la pròpia pane d'esquerra i dreta. 727 00:38:12,404 --> 00:38:15,320 Vostè pot fer tot tipus de coses i tots ells es barregen tot junt, 728 00:38:15,320 --> 00:38:18,880 i després surt l'àudio al final, com a destinació. 729 00:38:18,880 --> 00:38:22,720 Aquest és un exemple del més complicada Web codi d'àudio es sembla. 730 00:38:22,720 --> 00:38:26,720 Vostè està creant tots aquests diferents objectes dret aquí-- 731 00:38:26,720 --> 00:38:27,706 No estic segur d'això. 732 00:38:27,706 --> 00:38:29,120 No, no té zoom. 733 00:38:29,120 --> 00:38:29,620 D'ACORD. 734 00:38:29,620 --> 00:38:31,257 >> VERD SAM: Fas de 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 VERD SAM: No, no. 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, cerqueu? 740 00:38:38,140 --> 00:38:38,780 Oh, et vaig enxampar. 741 00:38:38,780 --> 00:38:41,480 Sí. 742 00:38:41,480 --> 00:38:42,240 Vaja, doncs no, doncs no. 743 00:38:42,240 --> 00:38:42,740 D'ACORD. 744 00:38:42,740 --> 00:38:46,090 No faré això. 745 00:38:46,090 --> 00:38:48,300 >> Així que sí, en aquesta primera secció aquí, veus 746 00:38:48,300 --> 00:38:52,720 estem creant totes aquestes diferents nodes fora del context. 747 00:38:52,720 --> 00:38:54,980 Estem formant amb elles junts en la segona part 748 00:38:54,980 --> 00:38:56,980 per aquesta funció anomenada Connect. 749 00:38:56,980 --> 00:38:58,830 Aquesta és una realitat clau funció en Web Àudio. 750 00:38:58,830 --> 00:39:01,930 Simplement vol dir que una vegada que has fet alguna cosa amb el so en un node, 751 00:39:01,930 --> 00:39:03,705 passar-lo a la següent node. 752 00:39:03,705 --> 00:39:05,830 Així que tenim la font, connecta a l'analitzador, 753 00:39:05,830 --> 00:39:09,140 l'analitzador fa alguna cosa amb ell, que va a la distorsió, i així successivament, 754 00:39:09,140 --> 00:39:12,725 i al destí baix a la dreta aquí. 755 00:39:12,725 --> 00:39:13,225 Fresc. 756 00:39:13,225 --> 00:39:14,640 OK, així que seguirem avançant. 757 00:39:14,640 --> 00:39:17,180 >> El pipeline-- de nou, aquests són les canonades més comunes, 758 00:39:17,180 --> 00:39:21,300 així que parlem de totes aquestes coses com distorsió, pane, totes aquestes coses. 759 00:39:21,300 --> 00:39:24,280 Si vostè està realment interessat en l'ús de les coses de Pro Tools, 760 00:39:24,280 --> 00:39:25,820 qui probablement li interessen. 761 00:39:25,820 --> 00:39:27,740 Si no és així, potser només vull jugar el so, 762 00:39:27,740 --> 00:39:29,990 o potser el que desitja és ajustar el volum del so. 763 00:39:29,990 --> 00:39:35,270 Aquests són els dos tipus més comú de gasoductes en la producció d'àudio. 764 00:39:35,270 --> 00:39:38,640 >> Un cop més, les formes en què poden prendre-ho en com oscillator-- així, anem a 765 00:39:38,640 --> 00:39:42,460 fer la demostració que aquí. 766 00:39:42,460 --> 00:39:47,090 767 00:39:47,090 --> 00:39:52,225 Així que anem a crear un context d'àudio senzill aquí, 768 00:39:52,225 --> 00:39:54,350 i que anem crear el nostre oscil·lador. 769 00:39:54,350 --> 00:39:58,620 Així que això és, de nou, només estem va a cridar Crear oscil·lador. 770 00:39:58,620 --> 00:40:07,030 Anem a establir una freqüència de que, 440 Hertz, de tots favorit. 771 00:40:07,030 --> 00:40:13,290 Llavors ens connectem que a la destinació point-- que és l'altaveu, per la qual 772 00:40:13,290 --> 00:40:15,750 el destí context. 773 00:40:15,750 --> 00:40:21,400 Finalment, ens limitem a dir, començar de zero segon a partir d'ara, i què ens sona? 774 00:40:21,400 --> 00:40:22,400 >> [SO] 775 00:40:22,400 --> 00:40:24,980 >> HUGH Zabriskie: Aquí anem. 776 00:40:24,980 --> 00:40:25,940 És només una ona sinusoïdal. 777 00:40:25,940 --> 00:40:26,440 D'acord, guai. 778 00:40:26,440 --> 00:40:28,274 I després ens aturarem això. 779 00:40:28,274 --> 00:40:30,520 >> AUDIÈNCIA: D'on que la retroalimentació ve? 780 00:40:30,520 --> 00:40:31,250 >> HUGH Zabriskie: La retroalimentació? 781 00:40:31,250 --> 00:40:32,458 Oh, probablement els nostres micròfons. 782 00:40:32,458 --> 00:40:34,221 783 00:40:34,221 --> 00:40:35,470 Així que sí, així és com ho fas. 784 00:40:35,470 --> 00:40:37,261 I de fet, si tingués mantingut en funcionament, 785 00:40:37,261 --> 00:40:39,540 podria tenir la freqüència valor que s'està executant, 786 00:40:39,540 --> 00:40:43,320 així que això és una cosa divertida de jugar. 787 00:40:43,320 --> 00:40:44,930 Fresc. 788 00:40:44,930 --> 00:40:46,600 Això és sempre una encantadora 01:00 a presentar. 789 00:40:46,600 --> 00:40:48,792 >> VERD SAM: No ho va fer pensem en això, vam fer? 790 00:40:48,792 --> 00:40:50,500 HUGH Zabriskie: Sí, això és una desagradable. 791 00:40:50,500 --> 00:40:53,249 Així, tampó loading-- vaig a mostrar un exemple d'això en el final. 792 00:40:53,249 --> 00:40:55,090 Això és carregar un MP3. 793 00:40:55,090 --> 00:40:58,880 I el micròfon, s'utilitza només una funció anomenat Navigator.getUserMedia () 794 00:40:58,880 --> 00:41:03,240 per sol·licitar l'accés a l'usuari de micròfon per a aquesta informació. 795 00:41:03,240 --> 00:41:05,610 >> Aquí està filtrant, vaig a simplement mantenir-se en moviment d'aquest. 796 00:41:05,610 --> 00:41:08,600 Això és molt alt nivell, però els filtres només li permeten 797 00:41:08,600 --> 00:41:16,154 >> [SO] 798 00:41:16,154 --> 00:41:18,320 Filtrat també li permet per crear coses com el rosa 799 00:41:18,320 --> 00:41:20,050 el soroll, el soroll marró, soroll blanc. 800 00:41:20,050 --> 00:41:24,330 Per crear soroll pur, que algunes persones els encanta perdre el temps amb, 801 00:41:24,330 --> 00:41:27,490 pot utilitzar Web Audio filtrat per fer això. 802 00:41:27,490 --> 00:41:30,039 >> Audio Panning-- així que imagina si vostè està escrivint un joc 803 00:41:30,039 --> 00:41:32,330 i desitja que el so sona com si vingués, com, 804 00:41:32,330 --> 00:41:36,090 disparar a través de la pantalla, pot utilitzar el pane de l'àudio 805 00:41:36,090 --> 00:41:39,770 per crear aquest tipus de con, que com-- és bastant Mathy, 806 00:41:39,770 --> 00:41:41,850 però en realitat és molt fresc si aconsegueixes que funcioni, 807 00:41:41,850 --> 00:41:44,500 i hi ha algunes bones tutorials sobre el que es pot enviar. 808 00:41:44,500 --> 00:41:46,400 Bàsicament, vostè pot classe de crear el so 809 00:41:46,400 --> 00:41:50,480 que alguna cosa surti per una forma 3D. 810 00:41:50,480 --> 00:41:57,350 I si vostè té un interès de DJ, pot començar a barrejar i creuar cançons esvaniment. 811 00:41:57,350 --> 00:42:01,260 >> Aquest és només un molt bàsic codi, bàsicament el que vaig fer abans. 812 00:42:01,260 --> 00:42:06,140 Ajusta el volum de la oscil·lador, així que vam crear el nostre oscil·lador 813 00:42:06,140 --> 00:42:07,380 que crea la forma d'ona. 814 00:42:07,380 --> 00:42:09,940 Creem la nostra GainNode, establir la nostra freqüència, 815 00:42:09,940 --> 00:42:14,170 i després connectar l'oscil·lador a la GainNode, que després canvia bàsicament 816 00:42:14,170 --> 00:42:16,760 la quantitat de senyal es permet a través. 817 00:42:16,760 --> 00:42:20,467 Però, en realitat, és una càmera digital cosa, pel que és més sol-- si. 818 00:42:20,467 --> 00:42:23,550 Això no és el que està succeint realment, però això és el que succeeix en la vida real 819 00:42:23,550 --> 00:42:24,393 amb un guany. 820 00:42:24,393 --> 00:42:27,258 >> AUDIÈNCIA: --quantization del paràmetre de volum? 821 00:42:27,258 --> 00:42:28,174 HUGH Zabriskie: Ho sento? 822 00:42:28,174 --> 00:42:30,360 AUDIÈNCIA: ¿És una paràmetre de volum quantificat? 823 00:42:30,360 --> 00:42:31,840 HUGH Zabriskie: Sí. 824 00:42:31,840 --> 00:42:34,620 I això és una cosa que estic molt deficient en el meu coneixement, 825 00:42:34,620 --> 00:42:38,010 com funciona el guany a nivell digital. 826 00:42:38,010 --> 00:42:40,140 Sé que amb real senyals, és bàsicament 827 00:42:40,140 --> 00:42:45,120 la quantitat de control que ets amplificar el senyal. 828 00:42:45,120 --> 00:42:47,017 Així que, sí. 829 00:42:47,017 --> 00:42:50,100 Et vaig a enviar més informació sobre això, perquè tinc curiositat realitat 830 00:42:50,100 --> 00:42:51,099 saber més sobre això. 831 00:42:51,099 --> 00:42:54,090 Però bàsicament els paràmetres són, un és el fold-- 832 00:42:54,090 --> 00:42:59,690 el signal-- més fort i el zero no és senyal, o no se sent cap so. 833 00:42:59,690 --> 00:43:03,150 Ens saltarem temps de demostració que, a causa de que és bàsicament el que vaig fer abans. 834 00:43:03,150 --> 00:43:07,630 I de nou, la Context.Destination és el node de destinació àudio. 835 00:43:07,630 --> 00:43:08,360 Impressionant, OK. 836 00:43:08,360 --> 00:43:10,470 >> Així que em vaig a fer un ràpid dos donem. 837 00:43:10,470 --> 00:43:11,760 Com anem a temps? 838 00:43:11,760 --> 00:43:12,640 >> ALTAVEU 1: Prop de 10 minuts. 839 00:43:12,640 --> 00:43:13,130 >> HUGH Zabriskie: 10 minuts? 840 00:43:13,130 --> 00:43:13,630 Genial! 841 00:43:13,630 --> 00:43:14,320 Impressionant. 842 00:43:14,320 --> 00:43:19,010 >> Així que el primer que jo vaig a do, es diu la meva cançó favorita. 843 00:43:19,010 --> 00:43:22,410 Així que això és només una mica d'HTML JavaScript. 844 00:43:22,410 --> 00:43:25,510 Tindrem dos botons a la pàgina de jugar la meva cançó preferida 845 00:43:25,510 --> 00:43:29,192 i aturar la meva cançó preferida. 846 00:43:29,192 --> 00:43:30,180 Vaig a canviar això. 847 00:43:30,180 --> 00:43:32,110 >> AUDIÈNCIA: Cobreixi el seu micròfon. 848 00:43:32,110 --> 00:43:33,430 >> HUGH Zabriskie: Sí. 849 00:43:33,430 --> 00:43:36,300 I jo he carregat aquí un guió que basically-- 850 00:43:36,300 --> 00:43:38,520 i això és realment útil per carregar un MP3, 851 00:43:38,520 --> 00:43:41,820 així que això només fa carregar manera MP3s més ràpid. 852 00:43:41,820 --> 00:43:44,180 És bàsicament un embolcall. 853 00:43:44,180 --> 00:43:48,737 Simplement fa que el procés de loading MP3s molt més ràpid, 854 00:43:48,737 --> 00:43:51,570 en cas contrari utilitzeu petició HTTP, alguna cosa així com el que estàvem fent 855 00:43:51,570 --> 00:43:53,950 en la peça actual establert amb el servidor. 856 00:43:53,950 --> 00:43:55,950 És molt lleig, que no volen fer-ho. 857 00:43:55,950 --> 00:44:04,110 >> Així que aquest noi, Boris SMUS, va escriure una realitat petita eina útil anomenada BufferLoader. 858 00:44:04,110 --> 00:44:08,780 Tot el que fem és simplement passar-ho al context, es passa un pel·lícules-- 859 00:44:08,780 --> 00:44:11,327 o, sí, és una llista en JavaScript? 860 00:44:11,327 --> 00:44:12,160 SAM VERD: Una matriu. 861 00:44:12,160 --> 00:44:14,201 HUGH Zabriskie: Oh, és una matriu, que sigui adequat. 862 00:44:14,201 --> 00:44:18,660 És un conjunt de camins a diferents arxius. 863 00:44:18,660 --> 00:44:21,990 I després se li passa una funció. 864 00:44:21,990 --> 00:44:25,530 Es tracta de la devolució de trucada parlàvem sobre amb la càrrega asíncrona. 865 00:44:25,530 --> 00:44:28,720 Això es diu Una vegada que els arxius carregats. 866 00:44:28,720 --> 00:44:33,780 I aquesta funció que es diu quan l'arxiu de càrrega pren com un perímetre 867 00:44:33,780 --> 00:44:35,840 una sèrie d'amortidors carregats. 868 00:44:35,840 --> 00:44:37,990 Així que es produeix aquí. 869 00:44:37,990 --> 00:44:41,180 Bàsicament, és BufferList serà un value-- 870 00:44:41,180 --> 00:44:46,380 o que serà una sèrie de longitud un, que té en ella en l'índex 871 00:44:46,380 --> 00:44:51,320 zero l'arxiu carregat sencera de l'MP3. 872 00:44:51,320 --> 00:44:53,320 Així que el que faig quan acabo càrrega és, simplement 873 00:44:53,320 --> 00:44:57,430 crear una font de tampó, que és un node d'origen memòria intermèdia d'àudio. 874 00:44:57,430 --> 00:45:03,410 El següent pas és que es carrega en el source.buffer com tampó de càrrega completa 875 00:45:03,410 --> 00:45:06,740 Del BufferList-- que és un munt de buffers-- 876 00:45:06,740 --> 00:45:10,255 i després connectar aquest àudio esmorteir a la destinació. 877 00:45:10,255 --> 00:45:12,380 Llavors, què es va a fer és simplement posar l'MP3 878 00:45:12,380 --> 00:45:15,260 directament a través de la sortida, i començar immediatament 879 00:45:15,260 --> 00:45:18,010 en arribar a aquesta crida. 880 00:45:18,010 --> 00:45:21,660 >> Fresc, així que anem a veure això succeeix en l'acció. 881 00:45:21,660 --> 00:45:24,490 El meu [inaudible] aquí, anem a veure. 882 00:45:24,490 --> 00:45:26,430 Així que només vaig a iniciar un servidor bàsic. 883 00:45:26,430 --> 00:45:28,660 Això és una cosa que que ha de fer si estàs 884 00:45:28,660 --> 00:45:32,490 fer peticions d'arxius de càrrega. 885 00:45:32,490 --> 00:45:34,140 Vaig a iniciar un servidor bàsic. 886 00:45:34,140 --> 00:45:38,200 Això és bàsicament la seva totalitat PSET ara mateix en una línia, 887 00:45:38,200 --> 00:45:43,930 però s'acaba de començar un servidor al port 80/80. 888 00:45:43,930 --> 00:45:47,300 Així que anem per aquí, ens va a carregar 80/80, 889 00:45:47,300 --> 00:45:49,110 anirem a la meva cançó preferida. 890 00:45:49,110 --> 00:45:51,660 Així que si em va colpejar "Jugar el meu cançó favorita "en aquest moment, 891 00:45:51,660 --> 00:45:53,964 que va a carregar la meva cançó favorita i jugar it-- 892 00:45:53,964 --> 00:45:55,880 [MÚSICA - The Eagles, "LA VIDA AL RÀPID  CARRIL "] 893 00:45:55,880 --> 00:46:00,490 -que passa a ser "La vida a el carril ràpid "de The Eagles. 894 00:46:00,490 --> 00:46:06,346 Ara, jo podria colpejar "Deixa de la meva cançó favorita "i reproduir-lo. 895 00:46:06,346 --> 00:46:09,160 >> [MÚSICA - The Eagles, "LA VIDA AL RÀPID  CARRIL "] 896 00:46:09,160 --> 00:46:18,340 >> I si em vaig a consolar, perquè He utilitzat una variable global per aquí 897 00:46:18,340 --> 00:46:23,390 fer un seguiment d'aquest valor, que en realitat ara serà reconegut a la consola. 898 00:46:23,390 --> 00:46:25,160 Per tant, acte-crea per a mi. 899 00:46:25,160 --> 00:46:29,991 Així que això és el que està sonant en aquest moment, i jo simplement puc cridar source.stop () 900 00:46:29,991 --> 00:46:30,490 en això. 901 00:46:30,490 --> 00:46:34,930 902 00:46:34,930 --> 00:46:35,860 Bé, saps què? 903 00:46:35,860 --> 00:46:39,760 Només perquè vostès han sentit això song-- és possible reconèixer aquesta cançó. 904 00:46:39,760 --> 00:46:41,801 >> [MÚSICA - Rick Astley, "Never Gonna DONAR  VOSTÈ UP "] 905 00:46:41,801 --> 00:46:42,299 906 00:46:42,299 --> 00:46:44,215 [MÚSICA - The Eagles, "LA VIDA AL RÀPID  CARRIL "] 907 00:46:44,215 --> 00:46:46,195 Hem ara tots han rickrolled. 908 00:46:46,195 --> 00:46:50,155 OK, genial, de seguir endavant. 909 00:46:50,155 --> 00:46:51,160 Fresc. 910 00:46:51,160 --> 00:46:54,554 Així que això és bàsicament un exemple de el que podria carregar un MP3 file-- 911 00:46:54,554 --> 00:46:56,470 [MÚSICA - The Eagles, "LA VIDA AL RÀPID  CARRIL "] 912 00:46:56,470 --> 00:46:59,590 --i jugar-ho, i detenir i començar a ella. 913 00:46:59,590 --> 00:47:03,008 Jo podria haver fet molt més [inaudible] 914 00:47:03,008 --> 00:47:07,570 >> L'últim que vaig a fer és, Et vaig a mostrar un [inaudible]. 915 00:47:07,570 --> 00:47:18,070 >> [REPRODUCCIÓ DE MÚSICA] 916 00:47:18,070 --> 00:47:21,800 >> És com, ogg.wave.mp3. 917 00:47:21,800 --> 00:47:26,450 Crec que, si no recordo malament, M'he topat amb alguns problemes amb .m4a, 918 00:47:26,450 --> 00:47:27,721 però no estic segur d'això. 919 00:47:27,721 --> 00:47:28,470 Crec mp3.wave-- 920 00:47:28,470 --> 00:47:28,930 921 00:47:28,930 --> 00:47:30,971 >> [MÚSICA - Rick Astley, "Never Gonna DONAR  VOSTÈ UP "] 922 00:47:30,971 --> 00:47:35,930 923 00:47:35,930 --> 00:47:36,500 >> D'acord perfecte. 924 00:47:36,500 --> 00:47:37,625 No hauria d'haver dit això. 925 00:47:37,625 --> 00:47:40,570 De totes maneres, hola. 926 00:47:40,570 --> 00:47:43,430 927 00:47:43,430 --> 00:47:45,490 Així que tenim aquesta oberta. 928 00:47:45,490 --> 00:47:52,320 Així que ara tot el que faig és, bàsicament creat una sintaxi bàsica per crear música. 929 00:47:52,320 --> 00:47:57,610 Així que si no faig alguna cosa així, afegiu g4 l'1 de 2, el que això significa és que, 930 00:47:57,610 --> 00:48:00,950 afegir la nota piano, G4, que és la quarta G 931 00:48:00,950 --> 00:48:02,680 dalt al piano de la part inferior. 932 00:48:02,680 --> 00:48:05,930 Així que això és una espècie de MIDI parlar, així que per a aquells que es basen la música, 933 00:48:05,930 --> 00:48:07,860 això és simplement notes MIDI. 934 00:48:07,860 --> 00:48:10,090 >> AUDIÈNCIA: Aquesta és la G del Medi C, oi? 935 00:48:10,090 --> 00:48:11,840 >> HUGH Zabriskie: Aquesta és la G per sobre de Medi C, és cert. 936 00:48:11,840 --> 00:48:12,470 >> AUDIÈNCIA: Sobre Medi C. 937 00:48:12,470 --> 00:48:13,345 >> HUGH Zabriskie: Sí. 938 00:48:13,345 --> 00:48:14,340 En realitat, si. 939 00:48:14,340 --> 00:48:16,131 Crec que en realitat vaig fer ens [inaudible], 940 00:48:16,131 --> 00:48:18,860 de manera que aquesta podria ser una octava per sobre d'això. 941 00:48:18,860 --> 00:48:20,070 Així que anem a veure. 942 00:48:20,070 --> 00:48:21,152 Si em va colpejar Play-- 943 00:48:21,152 --> 00:48:22,110 [PIANO REPETITIUS NOTA] 944 00:48:22,110 --> 00:48:23,200 --we're va sentir això. 945 00:48:23,200 --> 00:48:25,700 La idea és que opera de la mateixa manera que una línia d'ordres seria, 946 00:48:25,700 --> 00:48:27,510 així que si em vaig amunt i avall en el meu teclat, 947 00:48:27,510 --> 00:48:31,550 pot tornar a l'anterior ordres, la qual cosa és força útil. 948 00:48:31,550 --> 00:48:35,136 I a continuació és la meva llista de pistes, que estan tots funcionant en bucle. 949 00:48:35,136 --> 00:48:38,260 >> AUDIÈNCIA: Vostè va ser assumint la 88 tecles del teclat en això, oi? 950 00:48:38,260 --> 00:48:41,051 >> HUGH Zabriskie: La pregunta era, estic assumint un teclat de 88 tecles, 951 00:48:41,051 --> 00:48:41,990 i sí, ho sóc. 952 00:48:41,990 --> 00:48:45,030 El que vaig fer és que bàsicament va prendre 88 mostres 953 00:48:45,030 --> 00:48:46,970 del piano, un per a cada nota. 954 00:48:46,970 --> 00:48:49,180 I així, cada vegada que escoltar una nota d'ara endavant, 955 00:48:49,180 --> 00:48:57,550 que en realitat és un bucle que s'assembla com-- Això s'està posant reproduir en bucle, 956 00:48:57,550 --> 00:49:00,120 de manera que per cada nota, això s'està executant. 957 00:49:00,120 --> 00:49:02,860 El que passa és que jo crear un tampó de nou, 958 00:49:02,860 --> 00:49:06,010 Puc crear un node de guany per ajustar el volum. 959 00:49:06,010 --> 00:49:08,240 Això només una realitat complicada manera de dir que 960 00:49:08,240 --> 00:49:10,550 emmagatzemar el tampó en un source.buffer. 961 00:49:10,550 --> 00:49:13,160 Li dono el guany, jo connectar al guany, 962 00:49:13,160 --> 00:49:15,576 el guany està connectat a la de sortida, i després la toco. 963 00:49:15,576 --> 00:49:20,735 Així que és una mena de procés de prendre en una font de memòria intermèdia. 964 00:49:20,735 --> 00:49:24,820 >> AUDIÈNCIA: Pot vostè realment prendre aquest so sec i que sigui humida [inaudible]? 965 00:49:24,820 --> 00:49:26,260 >> HUGH Zabriskie: Pot, si. 966 00:49:26,260 --> 00:49:29,260 Hi ha re-verb, hi ha retard, distorsió. 967 00:49:29,260 --> 00:49:33,260 Bàsicament, pot posar qualsevol cosa en entri en aquest sandvitx de-- així, 968 00:49:33,260 --> 00:49:37,660 canonada és una metàfora millor, però vostè pot afegir res a això. 969 00:49:37,660 --> 00:49:38,200 Fresc. 970 00:49:38,200 --> 00:49:40,280 >> Així que vaig a acabar la demo aquí per donar-li un sentit 971 00:49:40,280 --> 00:49:46,390 tot just de la gran quantitat de vegades que es pot executar aquesta funció alhora. 972 00:49:46,390 --> 00:49:49,280 Així que em vaig a treure això. 973 00:49:49,280 --> 00:49:59,110 Vaig a crear un generador que-- bàsicament el does-- això és realment 974 00:49:59,110 --> 00:50:04,220 una mena de syntax-- complicat però és generarà notes sobre la marxa, 975 00:50:04,220 --> 00:50:06,601 i acaba de començar a jugar ells ja que els avalua. 976 00:50:06,601 --> 00:50:07,392 [PIANO interposant] 977 00:50:07,392 --> 00:50:10,990 978 00:50:10,990 --> 00:50:12,817 >> Així que només podem fer una mica de música aquí. 979 00:50:12,817 --> 00:50:13,608 [PIANO interposant] 980 00:50:13,608 --> 00:50:39,570 981 00:50:39,570 --> 00:50:41,470 >> Així que el que aquesta comanda fa, per exemple, és 982 00:50:41,470 --> 00:50:46,910 que pren aquestes tres notes per al piano i després els posa en B3. 983 00:50:46,910 --> 00:50:48,660 Aquesta sintaxi pot fer una mica més de sentit 984 00:50:48,660 --> 00:50:50,590 per a aquells que tenen un música de fons aquí. 985 00:50:50,590 --> 00:50:55,180 986 00:50:55,180 --> 00:50:56,551 >> Puc afegir un bombo. 987 00:50:56,551 --> 00:50:57,050 Jo puc-- 988 00:50:57,050 --> 00:50:58,048 >> [Interposant INSTRUMENTS] 989 00:50:58,048 --> 00:50:59,256 >> --només jugar amb això. 990 00:50:59,256 --> 00:51:12,519 991 00:51:12,519 --> 00:51:13,474 >> Així que vostè pot make-- 992 00:51:13,474 --> 00:51:14,515 [Interposant INSTRUMENTS] 993 00:51:14,515 --> 00:51:15,513 Que un és una mica més molest. 994 00:51:15,513 --> 00:51:16,554 [Interposant INSTRUMENTS] 995 00:51:16,554 --> 00:51:26,491 996 00:51:26,491 --> 00:51:30,981 >> Així que se suma a l'atzar címbal seca en cada nota 16a, amb un 16% 997 00:51:30,981 --> 00:51:31,481 [Inaudible]. 998 00:51:31,481 --> 00:51:32,522 >> [Interposant INSTRUMENTS] 999 00:51:32,522 --> 00:51:40,962 1000 00:51:40,962 --> 00:51:50,400 >> Sí, de manera que la forma en què aquesta works-- sempre en 4: 4. 1001 00:51:50,400 --> 00:51:51,441 [Interposant INSTRUMENTS] 1002 00:51:51,441 --> 00:52:06,910 1003 00:52:06,910 --> 00:52:10,902 >> Sí, de manera que els quatre trimestres, i 16/8. 1004 00:52:10,902 --> 00:52:14,851 1005 00:52:14,851 --> 00:52:15,892 [Interposant INSTRUMENTS] 1006 00:52:15,892 --> 00:52:27,970 1007 00:52:27,970 --> 00:52:33,780 >> Així que, de mitjana, s'obté el 60% d'accessos a les notes 16. 1008 00:52:33,780 --> 00:52:35,990 >> De totes maneres, això era només tipus de mostrar- 1009 00:52:35,990 --> 00:52:39,780 algunes de les coses que podria construir amb la Web API Audio. 1010 00:52:39,780 --> 00:52:43,840 És molt potent, és molt ràpid, i vostè pot fer un munt de coses interessants 1011 00:52:43,840 --> 00:52:44,340 amb ell. 1012 00:52:44,340 --> 00:52:51,260 Així que de nou, qualsevol pregunta que tingui, email myself-- Hugh-- o Sam, 1013 00:52:51,260 --> 00:52:55,869 i honestament, Google té un munt de bons recursos. 1014 00:52:55,869 --> 00:52:56,660 Alguna darrera pregunta? 1015 00:52:56,660 --> 00:52:57,970 Sí. 1016 00:52:57,970 --> 00:53:00,790 >> AUDIÈNCIA: Així que vostè pot accedir a el micròfon incorporat. 1017 00:53:00,790 --> 00:53:03,089 Què passa si vostè vol utilitzar un micròfon millor? 1018 00:53:03,089 --> 00:53:05,380 HUGH Zabriskie: Si volies per utilitzar millor micròfon? 1019 00:53:05,380 --> 00:53:11,320 Així que de nou, això és part de la abstracció entre Crom 1020 00:53:11,320 --> 00:53:12,950 i la resta del seu equip. 1021 00:53:12,950 --> 00:53:18,950 Si no sou disponible a través de una API, com API Web MIDI, 1022 00:53:18,950 --> 00:53:22,030 que probablement podria trobar alguns hacks, però generalment no és tan viable. 1023 00:53:22,030 --> 00:53:25,300 >> VERD SAM: Pot també-- tot el crom sap 1024 00:53:25,300 --> 00:53:28,820 és el que el micròfon predeterminat és, i té accés a això. 1025 00:53:28,820 --> 00:53:33,410 Així que si vostè tenia un micròfon poguessis establir com micròfon predeterminat de l'equip, 1026 00:53:33,410 --> 00:53:35,990 vostè pot accedir-hi d'aquesta manera i probablement treballar. 1027 00:53:35,990 --> 00:53:37,490 HUGH Zabriskie: Aquest és un bon punt. 1028 00:53:37,490 --> 00:53:39,656 Mai ho he intentat, però vostè podria ser capaç de classe 1029 00:53:39,656 --> 00:53:45,700 de-- si redirigeix ​​l'altaveu d'entrada, vostè podria ser capaç de fer això, si. 1030 00:53:45,700 --> 00:53:48,360 >> Alguna darrera pregunta? 1031 00:53:48,360 --> 00:53:49,340 Fresc. 1032 00:53:49,340 --> 00:53:51,680 Bé, gràcies nois tant per la seva atenció. 1033 00:53:51,680 --> 00:53:52,199 Estic Hugh. 1034 00:53:52,199 --> 00:53:52,990 VERD SAM: Sóc Sam. 1035 00:53:52,990 --> 00:53:55,410 HUGH Zabriskie: I això és CS50. 1036 00:53:55,410 --> 00:53:56,767