1 00:00:00,000 --> 00:00:05,900 2 00:00:05,900 --> 00:00:07,170 >> SAM GREEN: Salut, toată lumea. 3 00:00:07,170 --> 00:00:08,640 Bine ati venit la seminar nostru. 4 00:00:08,640 --> 00:00:10,009 Numele meu este Sam. 5 00:00:10,009 --> 00:00:11,050 HUGH Zabriskie: Sunt Hugh. 6 00:00:11,050 --> 00:00:17,420 SAM GREEN: Și vom vorbi astăzi la despre JavaScript și API Web Audio. 7 00:00:17,420 --> 00:00:21,180 Doar pentru a începe, aceasta este o schiță de agenda noastră pentru seminar. 8 00:00:21,180 --> 00:00:25,350 Vom începe prin a vorbi despre de ce ar trebui să fie interesat în Web 9 00:00:25,350 --> 00:00:30,130 API audio, de ce este JavaScript limba aveți nevoie pentru el, 10 00:00:30,130 --> 00:00:32,619 și apoi vorbesc despre JavaScript essentials-- așa cum ar fi, 11 00:00:32,619 --> 00:00:34,800 te plimbi prin unele Elementele de bază ale limbii, 12 00:00:34,800 --> 00:00:37,290 și apoi vorbesc despre API audio la un nivel ridicat. 13 00:00:37,290 --> 00:00:41,140 Apoi, Hugh va vorbi despre unele dintre etapele de producție audio 14 00:00:41,140 --> 00:00:45,509 iar apoi demo acest sequencer minunat proiect a construit și să vă arate codul. 15 00:00:45,509 --> 00:00:48,050 Și apoi, vom avea timp pentru întrebări la sfârșitul pentru persoane 16 00:00:48,050 --> 00:00:49,593 care sunt aici trăiesc. 17 00:00:49,593 --> 00:00:50,540 >> HUGH Zabriskie: cool. 18 00:00:50,540 --> 00:00:50,990 >> SAM VERDE: cool. 19 00:00:50,990 --> 00:00:51,383 >> HUGH Zabriskie: cool. 20 00:00:51,383 --> 00:00:52,170 Voi copii de rezervă. 21 00:00:52,170 --> 00:00:54,960 >> SAM GREEN: Deci, primele lucruri mai întâi. 22 00:00:54,960 --> 00:00:57,840 Deci, unul din lucrurile mari despre API-ul Audio Web 23 00:00:57,840 --> 00:01:00,480 este că nu există nici o configurare este necesar. 24 00:01:00,480 --> 00:01:04,230 Se livreaza built-in pentru a cele mai multe browsere moderne, 25 00:01:04,230 --> 00:01:08,630 inclusiv Chrome, Edge, un întreg grămadă de others-- toți cei 26 00:01:08,630 --> 00:01:12,650 porțiuni mari de care oamenii folosesc astăzi. 27 00:01:12,650 --> 00:01:14,807 Deci nu e nici înființat, În afară de doar obtinerea 28 00:01:14,807 --> 00:01:16,890 un server web merge, pentru vă pentru a începe să lucreze 29 00:01:16,890 --> 00:01:18,420 pe proiect, care este mare. 30 00:01:18,420 --> 00:01:21,500 31 00:01:21,500 --> 00:01:24,190 >> Vă recomandăm destul de puternic să luați în considerare 32 00:01:24,190 --> 00:01:26,530 folosind Chrome pentru Dezvoltare web JavaScript, 33 00:01:26,530 --> 00:01:30,260 doar pentru ca dezvoltator sa instrumente sunt cu adevărat puternic. 34 00:01:30,260 --> 00:01:33,220 Ca un exemplu de ceea ce ne referim doar prin a spune deschide JavaScript 35 00:01:33,220 --> 00:01:38,600 console-- dacă te duci în Chrome și te uiți la orice pagină de web, 36 00:01:38,600 --> 00:01:43,897 și ai plecat clic Verificați Element, și apoi 37 00:01:43,897 --> 00:01:46,730 te duci la acest mic drop-down aici și faceți clic pe consola, 38 00:01:46,730 --> 00:01:50,660 veți vedea ce se deschide arata o mult ca un prompt de comandă pe care le 39 00:01:50,660 --> 00:01:53,720 s-ar putea vedea pe Mac, sau pe ID-ul. 40 00:01:53,720 --> 00:01:59,260 Și uite așa, putem Tip comenzi aici, cum ar fi Clear, 41 00:01:59,260 --> 00:02:01,350 și alte comenzi de genul asta. 42 00:02:01,350 --> 00:02:04,267 Putem crea variabile, așa cum vom vedea mai târziu în JavaScript. 43 00:02:04,267 --> 00:02:07,100 Și astfel tot ce putem face în JavaScript, putem face cu consola, 44 00:02:07,100 --> 00:02:11,430 și că este un mod de super-la îndemână pentru a începe să joci în jurul valorii de cu API-uri 45 00:02:11,430 --> 00:02:15,760 si obtinerea confortabil cu JavaScript right off BAT. 46 00:02:15,760 --> 00:02:18,290 Nici un set în sus este necesar, care este foarte frumos. 47 00:02:18,290 --> 00:02:18,790 Misto. 48 00:02:18,790 --> 00:02:22,064 49 00:02:22,064 --> 00:02:22,880 Incredibil. 50 00:02:22,880 --> 00:02:24,780 >> Deci, doar un lucru pentru a adăuga. 51 00:02:24,780 --> 00:02:27,780 Dacă aveți orice questions-- există multi dintre voi care nu sunt aici trăiesc, 52 00:02:27,780 --> 00:02:31,232 nu ezitați să us-- aceste e-mail sunt adresele noastre de e-mail. 53 00:02:31,232 --> 00:02:33,190 Dacă aveți întrebări nu vrei să ne întrebi, 54 00:02:33,190 --> 00:02:36,160 cum ar fi, oh am un bug în codul meu, sau ceva 55 00:02:36,160 --> 00:02:39,270 care este un pic mai specific, Poate că Google. 56 00:02:39,270 --> 00:02:42,340 Există o mulțime de resurse de mare despre API-ul Web Audio acolo. 57 00:02:42,340 --> 00:02:44,089 E foarte bine documentate și se fi 58 00:02:44,089 --> 00:02:47,194 folosit de o tona de oameni în industrie, și oameni care sunt doar 59 00:02:47,194 --> 00:02:48,610 construirea chestii distractive pentru ei înșiși. 60 00:02:48,610 --> 00:02:51,306 Deci, ar trebui să existe o mulțime resurselor acolo. 61 00:02:51,306 --> 00:02:53,040 Incredibil. 62 00:02:53,040 --> 00:02:56,100 >> Rece, asa ca de ce API Audio Web? 63 00:02:56,100 --> 00:02:59,840 Această diagramă este un pic de o evoluție a modului 64 00:02:59,840 --> 00:03:04,100 sunet pe web a crescut în timp. 65 00:03:04,100 --> 00:03:13,080 Bgsound fost ca tag-ul HTML originală că Internet Explorer utilizate pentru a susține. 66 00:03:13,080 --> 00:03:16,790 A permis doar pentru sunete destul de bază, funcționalitatea nu a fost foarte robust, 67 00:03:16,790 --> 00:03:19,380 și nu ai putea face secvențiere complicat, 68 00:03:19,380 --> 00:03:21,890 sau de control, atunci când a început sunet și sa oprit foarte robust. 69 00:03:21,890 --> 00:03:23,930 Deci, nu a fost deosebit de bine dezvoltat. 70 00:03:23,930 --> 00:03:27,470 Apoi, după care, Flash a venit along-- care, 71 00:03:27,470 --> 00:03:31,712 Sunt sigur că voi sunt familiarizați cu Flash-- poate nu cum funcționează, 72 00:03:31,712 --> 00:03:32,920 dar ai văzut cu siguranță. 73 00:03:32,920 --> 00:03:35,586 Trebuie să actualizați Flash dvs. Plug-in, toate acest tip de lucruri, 74 00:03:35,586 --> 00:03:40,110 și că a extins gama de siguranță de funcționalitate care a fost disponibil. 75 00:03:40,110 --> 00:03:45,370 Dar ceea ce face utilizatorul instala un plug-in este cu siguranta 76 00:03:45,370 --> 00:03:48,480 un dezavantaj pentru inclusiv Flash în cererea dumneavoastră, nu? 77 00:03:48,480 --> 00:03:52,410 Pentru că atunci ești dependent de utilizator merge și de a găsi acest plug-in, 78 00:03:52,410 --> 00:03:54,660 și, probabil, fiind transformat în afara de acest pas suplimentar 79 00:03:54,660 --> 00:03:56,640 ei trebuie să ia pentru a utiliza aplicația. 80 00:03:56,640 --> 00:04:01,270 Și apoi ar putea exista o actualizare care va rupe toată aplicația, 81 00:04:01,270 --> 00:04:03,880 și se termină prin a fi un coșmar pentru dezvoltator, de asemenea. 82 00:04:03,880 --> 00:04:06,230 Deci, asta a fost o baricadă. 83 00:04:06,230 --> 00:04:10,480 >> Și apoi, după care a venit de-a lungul, eticheta audio HTML, care 84 00:04:10,480 --> 00:04:16,579 este o caracteristică a mai HTML-- modern, care cu siguranță permis pentru o mulțime mai multe lucruri, 85 00:04:16,579 --> 00:04:20,050 dar chiar și lucrurile pe care le putea face au fost un pic limitat doar 86 00:04:20,050 --> 00:04:22,730 ca urmare a lucrurilor care a fost capabil de HTML. 87 00:04:22,730 --> 00:04:26,060 Deci, atunci când JavaScript API, API Audio Web, 88 00:04:26,060 --> 00:04:29,290 a devenit un standard practici în browsere, 89 00:04:29,290 --> 00:04:32,490 că într-adevăr extins setul de oportunități pentru dezvoltatori 90 00:04:32,490 --> 00:04:36,590 pentru a obține într-adevăr în construcție chestii misto pentru web. 91 00:04:36,590 --> 00:04:39,220 Pentru o lungă perioadă de timp trebuia fost într-adevăr instrumente robuste 92 00:04:39,220 --> 00:04:44,360 pentru aplicații audio native, like-- toată lumea știe GarageBand, 93 00:04:44,360 --> 00:04:48,360 și apoi, evident, există mai aplicații audio profesionale, de amestecare 94 00:04:48,360 --> 00:04:49,640 și acest tip de lucruri. 95 00:04:49,640 --> 00:04:52,690 Dar nu a fost o foarte bine Cloud-- nu 96 00:04:52,690 --> 00:04:55,811 Nor, da, cred că Cloud-- platforma web-based 97 00:04:55,811 --> 00:04:58,310 care ar permite dezvoltatorilor sa construi aplicatii pentru persoane 98 00:04:58,310 --> 00:05:00,570 pentru a face amestecare audio. 99 00:05:00,570 --> 00:05:03,960 Și, după cum el vă va arăta mai târziu, API-ul Audio Web 100 00:05:03,960 --> 00:05:07,470 permite foarte puternic lucruri să se întâmple într-adevăr pur și simplu, 101 00:05:07,470 --> 00:05:09,597 care este destul de rece. 102 00:05:09,597 --> 00:05:12,680 Deci asta e instrucțiunea de a de ce ar trebui să urmărească seminarului, 103 00:05:12,680 --> 00:05:14,350 practic. 104 00:05:14,350 --> 00:05:17,880 >> Și acum, am de gând să vorbesc despre unele elemente de JavaScript-- doar de bază 105 00:05:17,880 --> 00:05:20,240 limbii, astfel încât putem fi pe aceeasi pagina 106 00:05:20,240 --> 00:05:22,470 când vorbim despre API un pic mai târziu. 107 00:05:22,470 --> 00:05:23,260 Misto. 108 00:05:23,260 --> 00:05:26,192 >> Deci, acest lucru este un rezumat. 109 00:05:26,192 --> 00:05:27,150 Am uitat acest lucru a fost aici. 110 00:05:27,150 --> 00:05:27,510 Da. 111 00:05:27,510 --> 00:05:27,870 >> HUGH Zabriskie: Sunt două tobogane aici. 112 00:05:27,870 --> 00:05:30,245 >> SAM GREEN: Acesta este un rezumat unora dintre limitările 113 00:05:30,245 --> 00:05:35,220 de celelalte metode de legare, vechi. 114 00:05:35,220 --> 00:05:37,828 Și apoi acum, avem aceste lucruri. 115 00:05:37,828 --> 00:05:40,011 Misto. 116 00:05:40,011 --> 00:05:40,510 Incredibil. 117 00:05:40,510 --> 00:05:43,200 >> Deci, esențiale JavaScript. 118 00:05:43,200 --> 00:05:47,230 În primul rând lucrurile în primul rând, există o diferență destul de semnificativă 119 00:05:47,230 --> 00:05:49,940 în JavaScript versus într-o limbaj ca C, în modul în care 120 00:05:49,940 --> 00:05:52,050 care variabilele sunt create. 121 00:05:52,050 --> 00:05:55,634 Deci, în C, suntem obișnuiți pentru a avea de tip variabilele, nu? 122 00:05:55,634 --> 00:05:57,800 Și nu mă refer tip ca tip-le în, vreau să spun de tip 123 00:05:57,800 --> 00:06:01,900 ca ei atribuie un înțeles type-- cum ar fi, un int, un float, char un. 124 00:06:01,900 --> 00:06:05,210 În C, într-adevăr am fost folosit pentru a nevoit să creeze o variabilă 125 00:06:05,210 --> 00:06:09,690 și apoi stick la acest tip de întregul timp pe care le folosim ca variabilă. 126 00:06:09,690 --> 00:06:13,990 Și că nu este neapărat mai rău, dar este, probabil, greu de a utiliza. 127 00:06:13,990 --> 00:06:16,190 Una dintre caracteristici interesante JavaScript este 128 00:06:16,190 --> 00:06:19,740 că variabile sunt ceea ce se numește "dinamic tastat", care 129 00:06:19,740 --> 00:06:22,500 înseamnă că pot crea o variabilă cu sintaxa, 130 00:06:22,500 --> 00:06:25,800 varX este egal 5, de exemplu. 131 00:06:25,800 --> 00:06:27,790 Care creează inițial un număr întreg variable-- 132 00:06:27,790 --> 00:06:29,870 chiar sub capota Undeva dar eu 133 00:06:29,870 --> 00:06:33,040 poate schimba variabila pentru a se referi la un șir 134 00:06:33,040 --> 00:06:35,820 fără a face ceva de genul crearea unui nou variabilă. 135 00:06:35,820 --> 00:06:37,880 Nu am nevoie să vă faceți griji despre tipul de schimbarea. 136 00:06:37,880 --> 00:06:45,440 JavaScript știe că tipul de schimbat, și acest lucru se întâmplă în mod dinamic. 137 00:06:45,440 --> 00:06:48,510 >> Deci, există beneficii și dezavantaje la care, 138 00:06:48,510 --> 00:06:51,250 ca oricine care a lucrat în JavaScript pentru un timp s-ar putea ști. 139 00:06:51,250 --> 00:06:53,600 Există momente când s-ar putea accidental 140 00:06:53,600 --> 00:06:57,720 schimba tipul unei variabile și nu se ocupe de acest tip de schimbare, 141 00:06:57,720 --> 00:07:01,120 și apoi JavaScript pot crash-- sau o excepție 142 00:07:01,120 --> 00:07:06,070 fi aruncat, pentru că veți avea Tip greșit atunci când vă așteptați un tip. 143 00:07:06,070 --> 00:07:07,040 Misto. 144 00:07:07,040 --> 00:07:11,470 >> Deci, scoping-- care este ca, dacă ne amintesc primele săptămâni în curs, 145 00:07:11,470 --> 00:07:15,420 se referă la modul vizibil o variabilă este și în ce zonă a codului. 146 00:07:15,420 --> 00:07:18,400 Toate acestea arata foarte similar pentru modul în care arată în C. 147 00:07:18,400 --> 00:07:24,755 Deci variabile sunt, în general, scoped în acolade în funcție, 148 00:07:24,755 --> 00:07:27,005 și apoi există, de asemenea variabile la nivel global-scoped care 149 00:07:27,005 --> 00:07:29,171 are-- dacă scrie o variabilă în afara unei funcții, 150 00:07:29,171 --> 00:07:31,790 acesta va fi vizibil în întregul text. 151 00:07:31,790 --> 00:07:35,840 >> O diferență între JavaScript și C, în special, 152 00:07:35,840 --> 00:07:40,280 este că, dacă o declara global oriunde variabilă-un fișier text 153 00:07:40,280 --> 00:07:43,324 e vizibil în orice funcție în acest fișier text. 154 00:07:43,324 --> 00:07:44,240 Asta-i corect, nu? 155 00:07:44,240 --> 00:07:46,330 >> HUGH Zabriskie: Da. 156 00:07:46,330 --> 00:07:49,120 >> SAM VERDE: Deci, de asemenea, un pic bit Funky în comparație cu C, 157 00:07:49,120 --> 00:07:52,660 unde am avut întotdeauna să aibă nostru definiții variabile de mai sus locurile 158 00:07:52,660 --> 00:07:53,770 au fost folosite. 159 00:07:53,770 --> 00:07:57,957 Asta nu eo regulă care este aplicată mai, astfel, un pic diferit. 160 00:07:57,957 --> 00:08:00,540 Și din nou doar pentru a reemphasize, global versus variables-- locale 161 00:08:00,540 --> 00:08:03,457 foarte similar cu C. Ai putea avea două variabile cu același nume, 162 00:08:03,457 --> 00:08:06,540 și avea una dintre numele lor să fie umbrite de o variabilă locală dacă unul dintre ei 163 00:08:06,540 --> 00:08:07,546 a fost la nivel mondial. 164 00:08:07,546 --> 00:08:09,420 Deci fel, similară problemele pe care unii dintre voi 165 00:08:09,420 --> 00:08:11,920 pot fi rula în într-un de problema ta stabilește până acum. 166 00:08:11,920 --> 00:08:14,450 Rece, așa că e variabile. 167 00:08:14,450 --> 00:08:20,310 >> Flux de control, ceea ce înseamnă ca, dacă-else-- stuff-- logică și bucle. 168 00:08:20,310 --> 00:08:24,510 Deci, pentru a începe cu, acest lucru este ceea ce în cazul în care-altceva Declarații arata ca in JavaScript. 169 00:08:24,510 --> 00:08:29,750 Plasarea diferitele lucruri pe liniile nu este importantă. 170 00:08:29,750 --> 00:08:34,409 Aceasta este doar una dintre convențiile pentru modul în care codul de structura am. 171 00:08:34,409 --> 00:08:38,634 La fel ca în C, avem o "în cazul în care," o declarație paranteză. 172 00:08:38,634 --> 00:08:40,840 173 00:08:40,840 --> 00:08:42,090 Asta nu e ceea ce am vrut să fac. 174 00:08:42,090 --> 00:08:44,860 175 00:08:44,860 --> 00:08:45,550 Am făcut-o din nou. 176 00:08:45,550 --> 00:08:46,841 >> HUGH Zabriskie: Încercarea de a ieși? 177 00:08:46,841 --> 00:08:49,770 SAM GREEN: Nu, eu sunt Încerc doar pentru a mări. 178 00:08:49,770 --> 00:08:50,660 Nu contează. 179 00:08:50,660 --> 00:08:54,730 180 00:08:54,730 --> 00:08:59,370 >> Deci, avem un "dacă" declarație și avem o condiție în interiorul acestuia 181 00:08:59,370 --> 00:09:03,130 care se evaluează la adevărat sau fals, și care determină dacă este sau nu 182 00:09:03,130 --> 00:09:04,510 intrăm ca bloc de cod. 183 00:09:04,510 --> 00:09:09,860 Si de asemenea, avem o altfel-dacă, și o parte, la fel ca suntem obișnuiți la C. 184 00:09:09,860 --> 00:09:14,010 >> De asemenea, trebui să fie destul de confortabil right off BAT cu bucle, 185 00:09:14,010 --> 00:09:16,440 deoarece ele arata, de asemenea, foarte mult ca C arata. 186 00:09:16,440 --> 00:09:19,600 Dar veți observa din nou că noi au, în loc de Int initializations, 187 00:09:19,600 --> 00:09:22,570 avem initializations var. 188 00:09:22,570 --> 00:09:24,650 Și cred că ai să fie atent pentru a face 189 00:09:24,650 --> 00:09:28,460 vă că nu se schimba valoarea I de la un int la un șir de caractere, 190 00:09:28,460 --> 00:09:31,780 de exemplu, pentru că o să cauza comportament ciudat s-ar putea să nu 191 00:09:31,780 --> 00:09:32,280 aştepta. 192 00:09:32,280 --> 00:09:35,750 Dar acest lucru ar trebui să arate destul de familiar, de asemenea. 193 00:09:35,750 --> 00:09:39,460 >> Deci acest lucru este în cazul în care lucrurile încep să obține un pic nebun în JavaScript 194 00:09:39,460 --> 00:09:44,920 pentru cineva care merge de la o fundal de C. Există funcții 195 00:09:44,920 --> 00:09:48,070 în JavaScript, și nu e un fel să declare o funcție care arată 196 00:09:48,070 --> 00:09:50,361 un fel de similar cu C, și atunci există un altul care 197 00:09:50,361 --> 00:09:52,450 pare un fel de diferite. 198 00:09:52,450 --> 00:09:54,930 >> Prima versiune, care putem vedea aici, 199 00:09:54,930 --> 00:09:59,260 este un fel de C-cum ar fi, în cazul în care spunem, aceasta este o funcție, 200 00:09:59,260 --> 00:10:01,490 da un nume, da numărul de argumente, 201 00:10:01,490 --> 00:10:05,150 și apoi conținutul funcției du-te în interiorul acestor acolade. 202 00:10:05,150 --> 00:10:08,850 Vom vedea un exemplu de argumente în doar o secundă. 203 00:10:08,850 --> 00:10:13,420 >> Întrucât pe linia următoare, vom vedea, oh, aici este o variabilă numită "myFunction" 204 00:10:13,420 --> 00:10:17,546 si l-am egală cu această function-- thing-- generic care 205 00:10:17,546 --> 00:10:19,170 nu pare să aibă ceva se întâmplă. 206 00:10:19,170 --> 00:10:22,780 207 00:10:22,780 --> 00:10:26,080 Motivul pentru care este diferit decât C este că JavaScript 208 00:10:26,080 --> 00:10:30,040 este ceea ce se numește un limbaj funcțional, sau are elemente funcționale, ceea ce înseamnă 209 00:10:30,040 --> 00:10:33,510 că funcțiile sunt de fapt valori. 210 00:10:33,510 --> 00:10:39,520 Și asta înseamnă că putem stabili o variabilă pentru rezulta o funcție 211 00:10:39,520 --> 00:10:43,210 și apoi mutați această funcție în jurul valorii de, să-l dați ca argument, 212 00:10:43,210 --> 00:10:46,550 face tot felul de chestii așa cu funcții. 213 00:10:46,550 --> 00:10:49,682 >> Un alt lucru la note-- Funcțiile sunt scrise 214 00:10:49,682 --> 00:10:51,140 cu un anumit număr de argumente. 215 00:10:51,140 --> 00:10:54,056 Vom vedea un exemplu de funcție cu un argument pe slide-ul urmator. 216 00:10:54,056 --> 00:10:56,720 Dar JavaScript nu va țipă la tine dacă încercați 217 00:10:56,720 --> 00:10:59,330 pentru a utiliza o funcție cu număr greșit de argumente. 218 00:10:59,330 --> 00:11:05,310 Va face doar cel mai bun de a face face, ceea ce înseamnă că dacă treci, 219 00:11:05,310 --> 00:11:09,410 apelați o funcție care se așteaptă la o argument cu nici un argument, tot ce 220 00:11:09,410 --> 00:11:13,990 se va întâmpla este că va face tot posibilul pentru a încerca să execute codul, 221 00:11:13,990 --> 00:11:16,541 și dacă se execută în cele din urmă într-o excepție sau o eroare, 222 00:11:16,541 --> 00:11:19,790 se va arunca această excepție și să păstreze doar going-- care este doar unul dintre modurile 223 00:11:19,790 --> 00:11:21,070 că JavaScript funcționează. 224 00:11:21,070 --> 00:11:21,781 Da. 225 00:11:21,781 --> 00:11:24,207 >> Audiența: Ce se întâmplă dacă există prea multe argumente? 226 00:11:24,207 --> 00:11:26,040 SAM VERDE: Deci Întrebarea a fost, ceea ce se întâmplă 227 00:11:26,040 --> 00:11:27,380 dacă există prea multe argumente? 228 00:11:27,380 --> 00:11:29,171 Și răspunsul este că JavaScript va doar 229 00:11:29,171 --> 00:11:32,120 ignora cele care sunt după cele care se așteaptă. 230 00:11:32,120 --> 00:11:36,420 Va încerca să execute funcția de suna ca și cum ar fost doar primele două. 231 00:11:36,420 --> 00:11:37,075 Dreapta? 232 00:11:37,075 --> 00:11:37,700 >> HUGH Zabriskie: Așa e, da. 233 00:11:37,700 --> 00:11:39,449 În mod similar, în cazul în care există sunt prea puține argumente, 234 00:11:39,449 --> 00:11:42,640 doar un fel de da nul tuturor argumente nu are nici o valoare 235 00:11:42,640 --> 00:11:43,660 pentru. 236 00:11:43,660 --> 00:11:45,810 >> SAM GREEN: care poate fi de fapt la îndemână, dacă 237 00:11:45,810 --> 00:11:49,060 doresc să scrie o funcție care Durează argumente număr variabil. 238 00:11:49,060 --> 00:11:55,830 Puteți seta valori implicite în definiția funcției, 239 00:11:55,830 --> 00:11:59,060 și se poate ignora faptul că de intrare nu e acolo. 240 00:11:59,060 --> 00:12:01,584 241 00:12:01,584 --> 00:12:04,000 Deci, vreau să vorbesc un pic mai multe despre acest ultim glonț 242 00:12:04,000 --> 00:12:05,541 punct, care este functii sunt valori. 243 00:12:05,541 --> 00:12:07,930 244 00:12:07,930 --> 00:12:11,010 Acesta este un exemplu care este un pic minte-suflare 245 00:12:11,010 --> 00:12:14,880 dacă doar citit, și nu cred că despre ceea ce se întâmplă pentru un al doilea. 246 00:12:14,880 --> 00:12:17,910 Deci, să ne uităm doar la prima linie aici. 247 00:12:17,910 --> 00:12:24,360 Avem această variabilă, F1, că spunem este o funcție care face chestia asta. 248 00:12:24,360 --> 00:12:28,535 Și conținutul funcției sunt console.log ("Hello"). 249 00:12:28,535 --> 00:12:32,220 Vă puteți gândi la console.log ca Echivalent JavaScript de printf. 250 00:12:32,220 --> 00:12:35,510 Deci, ce se va întâmpla, dacă vom rula acest cod în browser-ul nostru, 251 00:12:35,510 --> 00:12:37,530 acesta va imprima un șir. 252 00:12:37,530 --> 00:12:39,342 Pot demonstra că. 253 00:12:39,342 --> 00:12:42,300 Audiența: Prin jurnal, însă, că nu înseamnă că este în curs de înregistrat undeva? 254 00:12:42,300 --> 00:12:42,550 SAM VERDE: Da. 255 00:12:42,550 --> 00:12:44,216 Așa că voi arăta ce se va întâmpla. 256 00:12:44,216 --> 00:12:48,085 Deci întrebarea era, ce logaritmică? 257 00:12:48,085 --> 00:12:51,262 >> HUGH Zabriskie: Deci console.log este ca printf pentru C. 258 00:12:51,262 --> 00:12:52,970 SAM GREEN: Deci console.log este ca printf, 259 00:12:52,970 --> 00:12:59,240 Deci, dacă am avea acest console.log ("Bună ziua"), și fac apel că, șirul "Hello" 260 00:12:59,240 --> 00:13:00,730 devine tipărite la consola. 261 00:13:00,730 --> 00:13:03,340 Aceasta este consola. 262 00:13:03,340 --> 00:13:05,930 E la fel ca printf, în cazul în care se imprimă de pe standardul. 263 00:13:05,930 --> 00:13:09,050 264 00:13:09,050 --> 00:13:11,230 Și vom vedea într-un minut, dar acest lucru este de fapt 265 00:13:11,230 --> 00:13:16,529 referindu-se la obiectul consolă, și solicită o metodă pe acel obiect. 266 00:13:16,529 --> 00:13:18,320 Asta va face mai mult sens într-un minut, atunci când ne-am 267 00:13:18,320 --> 00:13:20,660 ajunge la vorbesc despre obiecte în JavaScript, 268 00:13:20,660 --> 00:13:22,509 dar m-am gândit aș menționa doar că. 269 00:13:22,509 --> 00:13:24,300 HUGH Zabriskie: Suntem folosit la C, right-- 270 00:13:24,300 --> 00:13:27,580 De obicei un program de mare a scrie în principal pentru a face ceva. 271 00:13:27,580 --> 00:13:30,700 Dar ceea ce e cool in JavaScript este tine au acest tip de interpret, care 272 00:13:30,700 --> 00:13:33,620 se execută în timp real, așa că nevoie doar de linie cu linie, 273 00:13:33,620 --> 00:13:35,320 se poate interpreta doar că la fața locului. 274 00:13:35,320 --> 00:13:37,403 Și-l ține evidența lucruri care au rula înainte, 275 00:13:37,403 --> 00:13:41,620 așa că este un instrument destul de util pentru utilizați console.log, sau consola, 276 00:13:41,620 --> 00:13:46,870 în general, doar pentru a juca în jurul valorii de cu JavaScript. 277 00:13:46,870 --> 00:13:51,420 >> SAM GREEN: Deci merge înapoi la acest example-- a doua linie de cod 278 00:13:51,420 --> 00:13:55,320 aici este destul de uluitor în capul meu. 279 00:13:55,320 --> 00:13:59,790 Prima dată când am citit acest lucru, A fost ca, ceea ce se întâmplă? 280 00:13:59,790 --> 00:14:04,580 Deci, ceea ce se întâmplă este, acest declarație funcția spune, 281 00:14:04,580 --> 00:14:10,170 Am o funcție numită F2 care este asteapta un argument, f, 282 00:14:10,170 --> 00:14:12,990 și apoi o numește ca Funcția, f, care 283 00:14:12,990 --> 00:14:17,652 a fost adoptată la ea ca un argument cu nici un argument în sine. 284 00:14:17,652 --> 00:14:19,110 Deci, care ar fi fost confuz. 285 00:14:19,110 --> 00:14:21,890 286 00:14:21,890 --> 00:14:28,400 Dacă înțelegem acest lucru ca f2 f1 ia ca un argument, și apoi în interiorul F2, 287 00:14:28,400 --> 00:14:31,190 f devine called-- ce mijloace că această linie de cod, 288 00:14:31,190 --> 00:14:34,192 După aceste două linii de cod, rezultate in "Hello" 289 00:14:34,192 --> 00:14:35,400 fiind tipărite la consola. 290 00:14:35,400 --> 00:14:41,660 291 00:14:41,660 --> 00:14:44,910 >> Faptul că putem trece Funcțiile în jurul valorii de ca valori 292 00:14:44,910 --> 00:14:47,870 sfârșește prin a fi unul dintre cele mai caracteristici puternice de activarea JavaScript- 293 00:14:47,870 --> 00:14:49,700 ca un limbaj de programare. 294 00:14:49,700 --> 00:14:52,782 În afara a tuturor lucruri minunat se poate face, 295 00:14:52,782 --> 00:14:54,990 la fel ca o caracteristică a Limba în ceea ce privește modul în care 296 00:14:54,990 --> 00:14:58,400 că face lucrurile mai ușor pentru a programa și permite 297 00:14:58,400 --> 00:15:01,060 pentru lucruri care nu sunt deosebit de bine-potrivite pentru web, 298 00:15:01,060 --> 00:15:04,500 Programare funcțională și funcțional Aspecte de programare ale JavaScript 299 00:15:04,500 --> 00:15:07,130 este una dintre cele mai concepte puternice, care 300 00:15:07,130 --> 00:15:11,030 există în JavaScript-- dacă mă întrebi pe mine. 301 00:15:11,030 --> 00:15:11,960 Misto. 302 00:15:11,960 --> 00:15:13,534 >> Deci, următorul lucru. 303 00:15:13,534 --> 00:15:16,450 Pe lângă faptul că funcțională, există, de asemenea, elemente de JavaScript 304 00:15:16,450 --> 00:15:20,510 că sunt orientate-obiect, care este unul din foarte 305 00:15:20,510 --> 00:15:23,800 cuvinte buzz populare în informatică. 306 00:15:23,800 --> 00:15:27,040 Programarea orientată pe obiecte este un lucru foarte popular. 307 00:15:27,040 --> 00:15:34,210 JavaScript are o versiune de care, în cazul în care cred că orice valoare este, de asemenea 308 00:15:34,210 --> 00:15:41,475 un obiect, ceea ce înseamnă că fiecare obiect împachetări împreună un numar de valori. 309 00:15:41,475 --> 00:15:44,020 310 00:15:44,020 --> 00:15:49,750 Deci, pentru valori care sunt simple, cum ar fi un număr întreg, cum ar fi varX egal 5, 311 00:15:49,750 --> 00:15:52,250 acel obiect încheie doar că o valoare. 312 00:15:52,250 --> 00:15:54,760 313 00:15:54,760 --> 00:15:59,036 >> Dar ne putem imagina, de asemenea, o situație where-- ne putem gândi la situații în C 314 00:15:59,036 --> 00:16:00,910 în cazul în care ne-am dorit să facem ceva cu structs, 315 00:16:00,910 --> 00:16:03,285 de exemplu, care se infasoara in mai multe Valorile împreună și mărcile 316 00:16:03,285 --> 00:16:05,870 într-adevăr ușor să treci lucrurile în jurul valorii. 317 00:16:05,870 --> 00:16:09,270 Asta e atunci când un obiect este în JavaScript. 318 00:16:09,270 --> 00:16:12,340 >> Este important să ne amintim când spun că obiectele împachetat 319 00:16:12,340 --> 00:16:15,330 unele număr de valori împreună, că funcțiile sunt, de asemenea, 320 00:16:15,330 --> 00:16:21,506 Valorile, ceea ce înseamnă că funcții pot fi, de asemenea în interiorul unui obiect JavaScript. 321 00:16:21,506 --> 00:16:26,910 Și motivul pentru care este important este că, în timp ce noi de multe ori 322 00:16:26,910 --> 00:16:30,290 cred că de asteptare o metodă pe un obiect care este 323 00:16:30,290 --> 00:16:35,200 de un termen populare din alte limbaje orientate-obiect populare, 324 00:16:35,200 --> 00:16:39,330 una dintre diferențele aici este faptul că toate că o metodă este în JavaScript 325 00:16:39,330 --> 00:16:47,270 este o valoare stocată în interiorul unui obiect care efectuează unele action-- posibil 326 00:16:47,270 --> 00:16:51,850 utilizând alte valori care sunt în interiorul de acel obiect, dar nu neapărat. 327 00:16:51,850 --> 00:16:56,930 Deci, vă puteți imagina o situație, am ghici într-un pic de un mod nebun, 328 00:16:56,930 --> 00:17:02,990 în cazul în care te-a chemat o metodă de unul opoziție pe un alt obiect, de exemplu. 329 00:17:02,990 --> 00:17:06,010 Deci, e un pic funky, în acest mod. 330 00:17:06,010 --> 00:17:09,369 >> Și puteți schimba, de asemenea, metodele de care sunt asociate cu un obiect 331 00:17:09,369 --> 00:17:13,740 prin atribuirea acestei metode o Funcția nou, care este, de asemenea, 332 00:17:13,740 --> 00:17:18,250 destul de diferit de alte limbaje orientate-obiect, în cazul în care 333 00:17:18,250 --> 00:17:21,410 odată ce vom declara un obiect și-l instantia, 334 00:17:21,410 --> 00:17:25,839 nu putem schimba metodele care sunt mai asociate cu acel obiect. 335 00:17:25,839 --> 00:17:28,680 Așa că e destul de diferit. 336 00:17:28,680 --> 00:17:29,570 Misto. 337 00:17:29,570 --> 00:17:34,010 >> Deci, aici este un exemplu, în primul rând, a unui obiect în acțiune. 338 00:17:34,010 --> 00:17:36,390 Aceasta este ceea ce se numește un obiect generic, care 339 00:17:36,390 --> 00:17:39,460 înseamnă că nu are nici nume special, nu are o clasă, 340 00:17:39,460 --> 00:17:42,190 e doar o parte ambalaj de valori. 341 00:17:42,190 --> 00:17:49,790 Și modul în care arată este, ne-am această pereche de exterior buclat acolade aici 342 00:17:49,790 --> 00:17:57,950 care indica JavaScript și spune, acest lucru este un obiect. 343 00:17:57,950 --> 00:18:02,130 Valorile interiorul de ea sunt fiecare valori în interiorul 344 00:18:02,130 --> 00:18:04,590 a obiectului care trebuie fi înfășurat împreună. 345 00:18:04,590 --> 00:18:09,180 Și în interiorul acelui obiect, avem apoi perechi de valori-cheie, 346 00:18:09,180 --> 00:18:13,880 în cazul în care cheia se referă la numele din valoarea interiorul obiectului, 347 00:18:13,880 --> 00:18:16,790 iar celălalt side-- vizavi de here-- colon 348 00:18:16,790 --> 00:18:19,850 este valoarea reală care trebuie depozitate. 349 00:18:19,850 --> 00:18:26,210 >> Deci, vedeți aici că avem o cheie numit fn cu valoare Sam, 350 00:18:26,210 --> 00:18:29,430 urmată de o virgulă, spune pe următoarea intrare. 351 00:18:29,430 --> 00:18:33,560 Apoi, o cheie numit LN, cu o valoare de verde, 352 00:18:33,560 --> 00:18:35,840 urmată de o virgulă, urmat de "print", 353 00:18:35,840 --> 00:18:43,209 care va avea o valoare funcție care este de gând să facă acest lucru linie de cod. 354 00:18:43,209 --> 00:18:45,500 Să luăm un pas înapoi și despacheta ce se întâmplă aici. 355 00:18:45,500 --> 00:18:47,280 Deci, acest lucru este un pic complicat, și vedem ceva nou 356 00:18:47,280 --> 00:18:48,071 pentru prima dată. 357 00:18:48,071 --> 00:18:51,190 358 00:18:51,190 --> 00:18:55,065 "This" cuvântul cheie este noul lucru vedem aici, și ceea ce face acest lucru 359 00:18:55,065 --> 00:19:00,540 este, se referă la curentul obiecții în domeniul de aplicare, nu? 360 00:19:00,540 --> 00:19:03,990 Așa că atunci când spunem, aceasta arată tot drumul înapoi 361 00:19:03,990 --> 00:19:08,140 la toată această object-- atunci când facem this.fn, 362 00:19:08,140 --> 00:19:11,990 vom merge tot drumul înapoi la acest obiect, du-te la valoarea fn 363 00:19:11,990 --> 00:19:16,471 și de a lua Sam, trageți-l până la capăt înapoi, stick aici, și apoi trece mai departe. 364 00:19:16,471 --> 00:19:19,838 >> Audiența: Deci, cu recuperarea, este că face din cauza parametrului 365 00:19:19,838 --> 00:19:20,621 definiţie? 366 00:19:20,621 --> 00:19:23,870 SAM VERDE: Deci, întrebarea a fost, este regăsire făcut din cauza parametrului 367 00:19:23,870 --> 00:19:24,727 definiţie? 368 00:19:24,727 --> 00:19:25,435 Da, absolut. 369 00:19:25,435 --> 00:19:29,660 370 00:19:29,660 --> 00:19:32,470 Ce se va întâmpla aici este, acest punct spune JavaScript, 371 00:19:32,470 --> 00:19:39,990 OK, Primesc o anumită valoare de la acest obiect de la mine. 372 00:19:39,990 --> 00:19:46,375 Și apoi o să căutați o intrare numit fn, iar în cazul în care se constată, 373 00:19:46,375 --> 00:19:48,470 acesta va returna că value-- așa, e Sam. 374 00:19:48,470 --> 00:19:51,540 Dar aș fi putut, de asemenea, tastat ceva ce nu a fost definit aici, 375 00:19:51,540 --> 00:19:54,090 și atunci ar doar reveni undefined-- care 376 00:19:54,090 --> 00:19:58,250 este un lucru care poate JavaScript face, ceea ce poate avea beneficii, 377 00:19:58,250 --> 00:20:03,190 dar e also-- dacă faci o greșeală de scriere, aceasta poate duce la erori ciudate. 378 00:20:03,190 --> 00:20:05,617 Așa că voi încerca doar să găsească tot ce se spune pentru a găsi 379 00:20:05,617 --> 00:20:07,700 și nu va se plâng dacă nu-l găsiți. 380 00:20:07,700 --> 00:20:11,390 Va spun doar, nu am se pare, și apoi trece mai departe. 381 00:20:11,390 --> 00:20:17,581 Asa ca ar fi nedefinit, plus martor, plus numele de familie. 382 00:20:17,581 --> 00:20:18,080 Da. 383 00:20:18,080 --> 00:20:21,070 Și apoi putem vedea că dacă ne-am ar putea merge apoi în jos și access-- 384 00:20:21,070 --> 00:20:25,450 și numim tf.print (), cu paranteze. 385 00:20:25,450 --> 00:20:30,000 Se va numi asta imprimare Funcția cu nici un argument, nu? 386 00:20:30,000 --> 00:20:34,490 Dar dacă ne-am spus tf.print () punct și virgulă, fără paranteze, 387 00:20:34,490 --> 00:20:37,480 tot ce ar fi făcut este trage în funcția de valoare, 388 00:20:37,480 --> 00:20:40,609 dar nu de fapt numit. 389 00:20:40,609 --> 00:20:41,162 Misto. 390 00:20:41,162 --> 00:20:42,870 HUGH Zabriskie: În cazul în facem un obiect? 391 00:20:42,870 --> 00:20:44,161 SAM GREEN: Sigur, hai să facem asta. 392 00:20:44,161 --> 00:20:48,750 Așa că am putea muta acest exemplu la consola. 393 00:20:48,750 --> 00:20:51,380 394 00:20:51,380 --> 00:20:55,466 Ne putem imagina că am un obiect. 395 00:20:55,466 --> 00:21:03,026 396 00:21:03,026 --> 00:21:04,150 Deci, acest lucru este un obiect simplu. 397 00:21:04,150 --> 00:21:06,910 398 00:21:06,910 --> 00:21:11,050 Aceasta este un obiect care contine doua valori cu două chei, două valori cheie 399 00:21:11,050 --> 00:21:12,710 perechi. 400 00:21:12,710 --> 00:21:21,850 Deci, eu pot accesa apoi valoarea memorată în interiorul acestui obiect de a face x.x1, 401 00:21:21,850 --> 00:21:23,400 de exemplu, și mă întorc 1. 402 00:21:23,400 --> 00:21:29,590 De asemenea, x.x2, pentru a primi această valoare înapoi. 403 00:21:29,590 --> 00:21:33,330 >> Și acum lucrul foarte cool este, eu pot adăugați de fapt, ceva la acest obiect 404 00:21:33,330 --> 00:21:34,316 după ce l-am creat. 405 00:21:34,316 --> 00:21:36,315 Deci, vă puteți imagina, să spune că au o funcție. 406 00:21:36,315 --> 00:21:44,430 407 00:21:44,430 --> 00:21:46,352 >> HUGH Zabriskie: Ai trebuie să faceți Shift-Enter. 408 00:21:46,352 --> 00:21:47,643 >> SAM GREEN: Oh, asta e enervant. 409 00:21:47,643 --> 00:22:02,460 410 00:22:02,460 --> 00:22:04,324 Ce a făcut-o nu ca? 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 Începem. 414 00:22:08,691 --> 00:22:09,190 Misto. 415 00:22:09,190 --> 00:22:12,840 >> Așa că doar am creat Această funcție, f, care 416 00:22:12,840 --> 00:22:17,590 este de gând să meargă la curent obiect și this.x1 imprimare. 417 00:22:17,590 --> 00:22:20,330 Deci, dacă doar eu numesc f de în sine, nu se întâmplă nimic 418 00:22:20,330 --> 00:22:26,970 să se întâmple, chiar, pentru că nu există nici o x1 câmp în obiectul este referindu-se la. 419 00:22:26,970 --> 00:22:39,710 Dar, dacă spun, x.f = f, și apoi m-am apel x.f (), am de gând să mă întorc 1. 420 00:22:39,710 --> 00:22:42,990 421 00:22:42,990 --> 00:22:46,530 Această funcție f este acum asociată cu obiectul X, 422 00:22:46,530 --> 00:22:51,800 care are o x1 cheie numit asociată cu valoarea 1, 423 00:22:51,800 --> 00:22:54,570 asa ca atunci cand numim this.x1, e de gând să găsească ceea ce caută 424 00:22:54,570 --> 00:22:56,450 și să fie capabil de a imprima o valoare afară. 425 00:22:56,450 --> 00:22:58,700 Deci asta e doar un exemplu de acest fel de lucruri nebunești 426 00:22:58,700 --> 00:23:01,190 se poate face cu obiecte în JavaScript. 427 00:23:01,190 --> 00:23:03,870 428 00:23:03,870 --> 00:23:07,560 >> Astfel încât versiunea a fost versiune generic, sensul 429 00:23:07,560 --> 00:23:13,780 că am creat un obiect folosind acest paranteze notație bretele notation--, 430 00:23:13,780 --> 00:23:16,880 rather-- și asta e îndemână, dacă vrem doar 431 00:23:16,880 --> 00:23:21,440 o instanță a unui anumit obiect, dar Ce se întâmplă dacă vrem să avem mai mult de un 432 00:23:21,440 --> 00:23:22,210 de același tip? 433 00:23:22,210 --> 00:23:24,440 Iar răspunsul la această Întrebarea este, există lucruri 434 00:23:24,440 --> 00:23:26,760 numit clase în JavaScript, de asemenea. 435 00:23:26,760 --> 00:23:31,470 436 00:23:31,470 --> 00:23:36,420 Putem crea o functie care nu un fel de initializare 437 00:23:36,420 --> 00:23:41,690 pentru un obiect străin, și am spune, cum ar fi, 438 00:23:41,690 --> 00:23:44,550 class-- mea astfel încât numele a object-- reutilizabile 439 00:23:44,550 --> 00:23:47,100 este egal cu funcție care se stabilește. 440 00:23:47,100 --> 00:23:52,280 Deci, ce ar fi echivalent a este de a crea un obiect care 441 00:23:52,280 --> 00:23:55,930 ar fi la fel ca, bretele buclat, str, colon, 442 00:23:55,930 --> 00:23:59,630 acest lucru este un șir de caractere, punct și virgulă, bretele buclat. 443 00:23:59,630 --> 00:24:01,880 Asta ar fi generice obiect am inițializa, 444 00:24:01,880 --> 00:24:06,380 cu diferenta o fi pe următoarele linii vom crea un prototip, care 445 00:24:06,380 --> 00:24:11,190 înseamnă că este o cheie implicit care vom adăuga la obiectul nostru, care 446 00:24:11,190 --> 00:24:13,970 are valoarea listate aici. 447 00:24:13,970 --> 00:24:20,570 Ceea ce înseamnă că, atunci când am crea un nou exemplu de acest obiect MyClass, 448 00:24:20,570 --> 00:24:27,440 se va fi pre-construit în interiorul se o valoare numită str și o altă valoare 449 00:24:27,440 --> 00:24:32,418 numit myPrint, care este O să fie o funcție. 450 00:24:32,418 --> 00:24:32,918 Incredibil. 451 00:24:32,918 --> 00:24:37,410 452 00:24:37,410 --> 00:24:37,990 >> Grozav. 453 00:24:37,990 --> 00:24:40,710 Deci, ultimul lucru pe care la spune despre JavaScript 454 00:24:40,710 --> 00:24:46,430 este faptul că este foarte util pentru ceea ce sunt numite operații asincrone. 455 00:24:46,430 --> 00:24:52,500 Mijloace Asynchronous este că noi poate aștepta pentru o operație 456 00:24:52,500 --> 00:24:57,870 pentru a finaliza înainte de a ne muta pe, dar trece în timp ce așteptăm 457 00:24:57,870 --> 00:24:59,690 și apoi au ceva se întâmplă mai târziu. 458 00:24:59,690 --> 00:25:03,480 Și ce vreau să spun prin asta este, tu poate imagina o situație în care 459 00:25:03,480 --> 00:25:06,850 trimiteți o cerere unele server de web undeva, 460 00:25:06,850 --> 00:25:09,670 și o să să te trimit înapoi unele mare parte din date, nu? 461 00:25:09,670 --> 00:25:13,320 Și utilizator ar putea aștept în Între timp pentru ca să se întâmple, 462 00:25:13,320 --> 00:25:15,200 și nimic nu ar putea fi întâmplă în acel moment. 463 00:25:15,200 --> 00:25:18,110 Dar asta nu e un design deosebit, nu? 464 00:25:18,110 --> 00:25:20,214 Nu vrei pagina web să înghețe. 465 00:25:20,214 --> 00:25:22,380 Ce se întâmplă dacă utilizatorul dorește să faceți clic pe un meniu drop-down? 466 00:25:22,380 --> 00:25:24,870 Nu e un model de design mare. 467 00:25:24,870 --> 00:25:29,290 În schimb, practic ceea ce JavaScript nu este spune, 468 00:25:29,290 --> 00:25:31,870 OK, face această operație asincron. 469 00:25:31,870 --> 00:25:36,520 Deci cum ar fi, așteptați în fundal, și apoi atunci când operațiunea se face, 470 00:25:36,520 --> 00:25:39,420 apel apel invers function-- apel o funcție, 471 00:25:39,420 --> 00:25:43,800 nu unele action-- pentru a semnala faptul că operațiune am fost de așteptare pentru a termina 472 00:25:43,800 --> 00:25:45,520 s-a terminat. 473 00:25:45,520 --> 00:25:51,240 Și motivul pentru care este foarte puternic este, putem face ceva, trece un argument, 474 00:25:51,240 --> 00:25:54,440 face ceva, și apoi așteptați să se întâmple ceva. 475 00:25:54,440 --> 00:25:58,970 Apoi, o dată că ceva se încheie, se poate apela un apel invers. 476 00:25:58,970 --> 00:26:03,300 Asta e foarte la îndemână, pentru că vă permite ne facem lucruri cu API-ul Web Audio, 477 00:26:03,300 --> 00:26:07,490 de exemplu, ca o sarcină fișier audio de la un server la distanță 478 00:26:07,490 --> 00:26:11,660 fără a fi nevoie să așteptați pentru întreaga fișier audio pentru a fi încărcate, 479 00:26:11,660 --> 00:26:14,440 care ar fi cu adevărat rau pentru experiență de utilizare. 480 00:26:14,440 --> 00:26:17,080 Misto. 481 00:26:17,080 --> 00:26:19,460 >> Ultima cuplu note despre depanare, deoarece acest 482 00:26:19,460 --> 00:26:23,682 este un lucru pe care ai de gând să aibă de a face ca parte a proiectului, garantat. 483 00:26:23,682 --> 00:26:25,140 Am menționat consola JavaScript. 484 00:26:25,140 --> 00:26:27,550 Este o caracteristică foarte util de toate browserele moderne, 485 00:26:27,550 --> 00:26:30,300 Și suntem cu adevărat, va incurajam pentru a obține confortabil folosind consola, 486 00:26:30,300 --> 00:26:33,660 dacă doriți să obțineți bun la JavaScript. 487 00:26:33,660 --> 00:26:36,320 Este foarte util pentru depanare, dar este, de asemenea 488 00:26:36,320 --> 00:26:39,440 într-adevăr util pentru imaginind cum să folosească un API. 489 00:26:39,440 --> 00:26:41,950 Acesta permite într-adevăr experimentare ușor 490 00:26:41,950 --> 00:26:45,910 fără a fi nevoie să tastați unele cod, și apoi compila. 491 00:26:45,910 --> 00:26:47,500 Tu nu trebuie sa faci toate aceste etape. 492 00:26:47,500 --> 00:26:49,619 Puteți scrie doar unele cod într-o linie, 493 00:26:49,619 --> 00:26:52,410 și apoi obține un feedback imediat sau nu această linie de cod 494 00:26:52,410 --> 00:26:55,230 worked-- foarte util. 495 00:26:55,230 --> 00:26:59,760 >> Și, de asemenea, doar un note-- tehnică consola JavaScript este un exemplu 496 00:26:59,760 --> 00:27:05,680 de un REPL--, astfel încât R-E-P-L, REPL, care vine de la citit, să evalueze, 497 00:27:05,680 --> 00:27:06,180 buclă de imprimare. 498 00:27:06,180 --> 00:27:09,100 499 00:27:09,100 --> 00:27:12,120 Vei tip unele lucruri în, acesta va citi ceea ce ați tastat în, 500 00:27:12,120 --> 00:27:17,280 acesta va evalua, și-l va imprima de ieșire, iar apoi acesta va începe din nou. 501 00:27:17,280 --> 00:27:22,056 Care vă permite să meargă rapid în cercuri iterarea, care este foarte misto. 502 00:27:22,056 --> 00:27:25,150 503 00:27:25,150 --> 00:27:28,930 >> Cred că ultima reală note-- acest este, de fapt nota trecut, da. 504 00:27:28,930 --> 00:27:30,780 Cum putem folosi de fapt JavaScript? 505 00:27:30,780 --> 00:27:34,040 Deci în primul rând, putem importa l folosind o etichetă script 506 00:27:34,040 --> 00:27:39,500 în partea de sus sau de jos a unei HTML file-- oriunde în interiorul unui fișier HTML, 507 00:27:39,500 --> 00:27:40,440 într-adevăr. 508 00:27:40,440 --> 00:27:47,390 Și în termen de o etichetă script, există două sub-moduri de a importatoare JavaScript. 509 00:27:47,390 --> 00:27:51,370 Primul este de a avea o fișier separat JavaScript 510 00:27:51,370 --> 00:27:58,010 pe care le importam in totalitate, sau prin care au o suprafață de cod ca script 511 00:27:58,010 --> 00:28:00,290 pentru a începe, și apoi script backslash să se încheie. 512 00:28:00,290 --> 00:28:02,620 Și apoi ne-am scrie JavaScript în interiorul fișierul HTML. 513 00:28:02,620 --> 00:28:03,790 Acestea sunt cele două moduri. 514 00:28:03,790 --> 00:28:05,165 Nu-l poți avea în interiorul HTML. 515 00:28:05,165 --> 00:28:06,502 516 00:28:06,502 --> 00:28:08,126 Audiența: Este unul mai bun decât altul? 517 00:28:08,126 --> 00:28:10,542 SAM VERDE: Întrebarea a fost, este unul mai bun decât celălalt. 518 00:28:10,542 --> 00:28:18,306 Deci, da, ca practică stil de codificare, și, de asemenea, e ca o practică de design. 519 00:28:18,306 --> 00:28:20,180 Există două motive de ce ar fi mai bine. 520 00:28:20,180 --> 00:28:23,934 Primul este, face codul o mult mai ușor de citit dacă toate HTML 521 00:28:23,934 --> 00:28:27,100 este într-un singur loc, toate CSS este în un alt loc, toate JavaScript 522 00:28:27,100 --> 00:28:28,420 este într-un al treilea loc. 523 00:28:28,420 --> 00:28:28,920 Dreapta? 524 00:28:28,920 --> 00:28:32,370 Cred că ar trebui vorbit deja despre aceasta în sections-- ca CSS-- ce 525 00:28:32,370 --> 00:28:35,220 că este-- și merge de multe ori într-un alt fișier. 526 00:28:35,220 --> 00:28:37,090 Deci, un fel similar de conceptul aici. 527 00:28:37,090 --> 00:28:42,410 Vă puteți imagina, de asemenea, că JavaScript ar fi reutilizate pe mai mult de un 528 00:28:42,410 --> 00:28:47,350 Pagina HTML, sau poate o foarte multe pagini HTML, 529 00:28:47,350 --> 00:28:49,340 și având ca JavaScript refactored într-un singur 530 00:28:49,340 --> 00:28:51,950 fișier pe care le puteți importa în mai mult de un singur loc 531 00:28:51,950 --> 00:28:54,570 permite codul de a fi mod mai întreținut. 532 00:28:54,570 --> 00:28:57,930 Vă puteți imagina a face unul schimba JavaScript 533 00:28:57,930 --> 00:29:00,070 și având să-l schimbe în 100 de fișiere diferite. 534 00:29:00,070 --> 00:29:04,070 Și în loc să putem schimba doar într-o singură, care este mult mai puternic. 535 00:29:04,070 --> 00:29:05,420 Ti-am răspuns la întrebare? 536 00:29:05,420 --> 00:29:07,950 Misto. 537 00:29:07,950 --> 00:29:10,830 >> Putem, de asemenea, de tip în consolă, cum am menționat mai înainte. 538 00:29:10,830 --> 00:29:15,070 Și din nou, o ultimă note-- Web Audio este construit în, 539 00:29:15,070 --> 00:29:16,978 nu aveți nevoie pentru a încărca nimic. 540 00:29:16,978 --> 00:29:17,478 Misto. 541 00:29:17,478 --> 00:29:20,519 Există întrebări, aveți orice mai multe întrebări despre JavaScript, 542 00:29:20,519 --> 00:29:21,930 înainte de a ne muta pe? 543 00:29:21,930 --> 00:29:24,286 >> Audiența: [inaudibil] 544 00:29:24,286 --> 00:29:25,410 SAM GREEN: Bine, rece. 545 00:29:25,410 --> 00:29:27,200 Deci, acum el va vorbi despre API. 546 00:29:27,200 --> 00:29:28,490 >> HUGH Zabriskie: cool. 547 00:29:28,490 --> 00:29:28,990 Mulțumesc, Sam. 548 00:29:28,990 --> 00:29:30,184 >> SAM VERDE: Sigur. 549 00:29:30,184 --> 00:29:32,600 HUGH Zabriskie: Awesome, așa ne vom muta pe la JavaScript. 550 00:29:32,600 --> 00:29:35,350 Așa că am vorbit despre unele dintre principiile de bază ale JavaScript, 551 00:29:35,350 --> 00:29:41,105 iar acestea sunt variabilele, funcțiile, obiecte, funcționează ca variabile, 552 00:29:41,105 --> 00:29:41,980 încărcare asincron. 553 00:29:41,980 --> 00:29:46,100 Acestea sunt toate lucrurile pe care le veți vezi măsură ce utilizați Web Audio. 554 00:29:46,100 --> 00:29:49,230 Deci, noi suntem doar vorbi despre aceasta mai întâi la un nivel ridicat. 555 00:29:49,230 --> 00:29:52,120 >> E un API, asa ca este ceva care este construit, după cum a spus Sam, 556 00:29:52,120 --> 00:29:57,010 chiar în JavaScript pe care le utilizați în consola. 557 00:29:57,010 --> 00:30:01,020 Și este de fapt la fel ca C ++ cod care este cu adevărat construit în Chrome 558 00:30:01,020 --> 00:30:04,470 și Firefox, precum și toate aceste browsere. 559 00:30:04,470 --> 00:30:07,060 Deci, ideea principală cu Web Audio este că aveți 560 00:30:07,060 --> 00:30:09,440 acest tip de conducte de audio, nu? 561 00:30:09,440 --> 00:30:13,670 Deci, datele audio vine în într-o formă. 562 00:30:13,670 --> 00:30:16,690 >> Există un fel de trei forms-- principale aveți oscilator, care 563 00:30:16,690 --> 00:30:21,340 creează o undă sinusoidală, val cosinus, vom vedea cum care funcționează. 564 00:30:21,340 --> 00:30:23,890 Un alt foarte frecvente, Desigur, este un MP3. 565 00:30:23,890 --> 00:30:25,810 Deci, poate începe cu o melodie, și apoi 566 00:30:25,810 --> 00:30:28,320 vrei sa faci unele de filtrare pentru că și de ieșire 567 00:30:28,320 --> 00:30:30,605 that-- care ar putea fi o posibilă sursă. 568 00:30:30,605 --> 00:30:32,480 Și apoi o foarte cool unul este microfonul. 569 00:30:32,480 --> 00:30:37,230 Astfel, puteți utiliza unele foarte solicită de bază în JavaScript 570 00:30:37,230 --> 00:30:39,440 pentru a obține acces la microfon, și așa mai departe, dacă 571 00:30:39,440 --> 00:30:42,870 a vrut să facă o aplicație ca un detector pas, 572 00:30:42,870 --> 00:30:45,290 de exemplu, care ia în voce și dă seama ta 573 00:30:45,290 --> 00:30:47,740 pitch-- mod foarte usor de asta. 574 00:30:47,740 --> 00:30:50,730 Puteți doar un fel de a citit- în, dau seama de frecvența, 575 00:30:50,730 --> 00:30:52,250 și apoi de ieșire un număr. 576 00:30:52,250 --> 00:30:56,080 Deci, vom vedea cum funcționează, de asemenea. 577 00:30:56,080 --> 00:30:59,430 >> Destinația este de fapt în cazul în care datele audio este transmis. 578 00:30:59,430 --> 00:31:02,890 Deci, în general,, e ca și cum difuzoarele laptop. 579 00:31:02,890 --> 00:31:05,610 Alte opțiuni sunt ca un ScriptProcessorNode-- 580 00:31:05,610 --> 00:31:07,990 vom ajunge la noduri într-o second-- dar în esență, 581 00:31:07,990 --> 00:31:11,939 Ori pui de sunet din prin intermediul computerului prin difuzoare, 582 00:31:11,939 --> 00:31:14,730 sau esti un fel de ea de înregistrare, astfel încât te-l stocarea ca date audio. 583 00:31:14,730 --> 00:31:18,980 Deci, poate că, dacă cineva creează muzica în aplicația și apoi 584 00:31:18,980 --> 00:31:22,410 doriți să înregistrați ca și cum ar fi, poate, export-l la SoundCloud, pentru example-- 585 00:31:22,410 --> 00:31:25,281 care ar fi o modalitate de a face acest lucru. 586 00:31:25,281 --> 00:31:27,030 Toate lucrurile distractiv, care vom vorbi despre, 587 00:31:27,030 --> 00:31:29,950 se întâmplă între aceste două puncte, în cazul în care ne-am încărca în muzica 588 00:31:29,950 --> 00:31:31,410 și apoi transmis la ieșire. 589 00:31:31,410 --> 00:31:36,660 >> Deci, am de gând să vorbesc despre cele cinci etapele de producție audio într-o secundă. 590 00:31:36,660 --> 00:31:38,950 Avem acest lucru numit un AudioContext, care 591 00:31:38,950 --> 00:31:41,580 este acest mic înveliș vedem aici. 592 00:31:41,580 --> 00:31:49,980 Practic ceea ce AudioContext este-- dacă am du-te la consola JavaScript, chiar acum, 593 00:31:49,980 --> 00:31:52,740 putem crea unul chiar acum. 594 00:31:52,740 --> 00:31:54,040 Doar un exemplu de REPL, nu? 595 00:31:54,040 --> 00:31:57,880 Suntem de lectură, evaluarea, și se imprimă. 596 00:31:57,880 --> 00:32:00,260 >> AudioContext este un stat global. 597 00:32:00,260 --> 00:32:05,500 E o struct, este un obiect aici, și-l păstrează informații 598 00:32:05,500 --> 00:32:09,960 despre lucrurile care se întâmplă pe ecran legat de audio. 599 00:32:09,960 --> 00:32:15,220 Un exemplu este ora curentă. 600 00:32:15,220 --> 00:32:18,910 Aceasta vă spune numărul de secunde, foarte precis, 601 00:32:18,910 --> 00:32:20,890 deoarece pagina web incarcata. 602 00:32:20,890 --> 00:32:24,110 Deci, aceasta este o foarte util mic de proprietate pe care le puteți folosi. 603 00:32:24,110 --> 00:32:27,898 Este citit only-- cred de fapt puteți încerca să setați o valoare. 604 00:32:27,898 --> 00:32:29,856 Va spune că a stabilit, și apoi, dacă imprima 605 00:32:29,856 --> 00:32:31,439 again-- nu a făcut de fapt munca destul de. 606 00:32:31,439 --> 00:32:34,472 Deci, nu sunt numai în citire proprietăți în JavaScript. 607 00:32:34,472 --> 00:32:36,430 Acest lucru este foarte util în cazul în care te fel de sincronizarea 608 00:32:36,430 --> 00:32:38,610 o mulțime de diferite informații, atunci când sunteți 609 00:32:38,610 --> 00:32:41,280 fel de a juca diferite sunete. 610 00:32:41,280 --> 00:32:43,630 >> Un alt unul foarte util este destinatia context. 611 00:32:43,630 --> 00:32:46,587 612 00:32:46,587 --> 00:32:49,670 Categoric, dacă ești interesat, să fie Încerc acest lucru la propriul drept consolă 613 00:32:49,670 --> 00:32:50,980 acum. 614 00:32:50,980 --> 00:32:53,150 Deci aceasta este o AudioDestinationNode. 615 00:32:53,150 --> 00:32:56,480 Practic ceea ce spune acest lucru este, în cazul în care este de ieșire merge? 616 00:32:56,480 --> 00:32:59,590 Deci, există două opțiuni reale aici. 617 00:32:59,590 --> 00:33:01,940 De obicei, implicit este doar difuzoarele, 618 00:33:01,940 --> 00:33:05,150 așa AudioDestinationNode practic doar spune 619 00:33:05,150 --> 00:33:09,240 există zero, iesiri la sunetul vine, trimis la difuzorul. 620 00:33:09,240 --> 00:33:12,050 Deci, în general,, nu trebuie trebuie să se joace cu asta. 621 00:33:12,050 --> 00:33:15,720 Dacă sunteți interesat de fapt, folosind ScriptProcessorNode pentru înregistrare, 622 00:33:15,720 --> 00:33:16,990 cu siguranta trage-mi un e-mail mai târziu, pentru că este 623 00:33:16,990 --> 00:33:18,330 un pic mai complicat. 624 00:33:18,330 --> 00:33:21,590 Dar, în general, ești doar un fel de scoate sunetul într-o formă. 625 00:33:21,590 --> 00:33:24,347 Atât de cool, vom sări înapoi aici. 626 00:33:24,347 --> 00:33:25,180 Audiența: Îmi pare rău. 627 00:33:25,180 --> 00:33:26,054 HUGH Zabriskie: Da. 628 00:33:26,054 --> 00:33:28,770 Audiența: Stiu ca ai spus să vorbești mai târziu despre înregistrare. 629 00:33:28,770 --> 00:33:31,550 Poți interfață care cu Pro Tools? 630 00:33:31,550 --> 00:33:33,120 >> HUGH Zabriskie: Cu Pro Tools? 631 00:33:33,120 --> 00:33:35,260 Sa vedem. 632 00:33:35,260 --> 00:33:37,220 Eu nu cred acest lucru. 633 00:33:37,220 --> 00:33:41,670 Deci merge între client, care este JavaScript 634 00:33:41,670 --> 00:33:44,310 consolă, și reale dvs. calculator, este în general 635 00:33:44,310 --> 00:33:46,490 ceva care este un fel de în afara limitelor, dacă 636 00:33:46,490 --> 00:33:52,320 va, natură prin natura the-- e un fel de lucru de proiectare, 637 00:33:52,320 --> 00:33:57,770 dar încercați să păstrați browser separată de calculator real utilizatorului. 638 00:33:57,770 --> 00:34:02,310 În general, singurul lucru pe care sunteți în măsură să accesul este microfonul sau camera. 639 00:34:02,310 --> 00:34:04,730 Nu ești în stare să am Nu cred că, utilizați Pro Tools. 640 00:34:04,730 --> 00:34:07,480 Cu toate acestea, în cazul în care ați creat o piesa in Pro Tools, 641 00:34:07,480 --> 00:34:12,710 exportate că, ai putea încărca că aici, se filtreaza, de exemplu, 642 00:34:12,710 --> 00:34:16,820 proces care, și înregistrează că într-un Audio Destination-- sau, no-- o sferă 643 00:34:16,820 --> 00:34:17,870 Nod procesor. 644 00:34:17,870 --> 00:34:20,730 Și apoi de acolo, ai putea de export, care să SoundCloud, vă 645 00:34:20,730 --> 00:34:25,320 ar putea trimite un e-mail la, sau ce vrei de acolo. 646 00:34:25,320 --> 00:34:31,159 >> Dar există un fel de o ușoară barieră între a face muzică de pe computer 647 00:34:31,159 --> 00:34:33,050 și de a face muzică online. 648 00:34:33,050 --> 00:34:37,940 >> SAM VERDE: Și asta nu unic pentru acest API. 649 00:34:37,940 --> 00:34:44,060 Este o caracteristică de securitate de Chrome și Cred ca orice alt browser modern. 650 00:34:44,060 --> 00:34:45,860 Browser-ul este autonom. 651 00:34:45,860 --> 00:34:50,980 Deci, de exemplu, o pagină web nu poate folosesc JavaScript pentru a transforma sunetul 652 00:34:50,980 --> 00:34:54,190 pe la boxe, de exemplu. 653 00:34:54,190 --> 00:34:58,120 Sau nu se poate transforma calculatorul oprit. 654 00:34:58,120 --> 00:35:01,530 Și nu există nici un punct intermediar între aceste două lucruri, chiar, 655 00:35:01,530 --> 00:35:05,960 deci fie aveți o abstracție complet, 656 00:35:05,960 --> 00:35:10,050 sau deschide breșă de securitate de a lasa 657 00:35:10,050 --> 00:35:14,440 un programator cu intenții rele fac ce vor cu laptop-ul. 658 00:35:14,440 --> 00:35:18,104 Și de aceea Chrome este autonom. 659 00:35:18,104 --> 00:35:19,310 >> HUGH Zabriskie: Da. 660 00:35:19,310 --> 00:35:20,840 Are sens? 661 00:35:20,840 --> 00:35:21,369 Foarte tare. 662 00:35:21,369 --> 00:35:23,160 Am fost doar de gând să arată un exemplu de unul. 663 00:35:23,160 --> 00:35:25,118 Acest lucru este destul de mult la fel de măsura în care te, în ceea ce privește 664 00:35:25,118 --> 00:35:26,950 de accesare calculatorul utilizatorului. 665 00:35:26,950 --> 00:35:30,180 Dacă aveți o tastatură USB conectat, puteți utiliza ceva numit Web 666 00:35:30,180 --> 00:35:32,180 MIDI API, care nu vom într-adevăr vorbesc despre aici, 667 00:35:32,180 --> 00:35:36,330 dar aceasta este o altă API care este construit în cel puțin Chrome-- din nou, 668 00:35:36,330 --> 00:35:41,570 de aceea ne place Chrome-- Cred că Firefox sau Safari, 669 00:35:41,570 --> 00:35:44,300 acesta este un lucru ușor de browsere google-- diferite au 670 00:35:44,300 --> 00:35:46,917 suport diferit pentru care API-uri care le-au pus în aplicare. 671 00:35:46,917 --> 00:35:49,875 Dar dacă ai vrut să conectați o tastatură și de a lucra cu aceste informații, 672 00:35:49,875 --> 00:35:52,850 un fel de a trimite tastaturii informații pe la calculator 673 00:35:52,850 --> 00:35:57,620 și apoi utilizați ca on-line, acest API este în cazul în care ai fi de lucru care. 674 00:35:57,620 --> 00:35:58,150 >> Misto. 675 00:35:58,150 --> 00:35:58,710 BINE. 676 00:35:58,710 --> 00:36:01,320 Deci, repede se deplasează pe aici. 677 00:36:01,320 --> 00:36:03,310 Cum facem la timp? 678 00:36:03,310 --> 00:36:04,210 >> SPEAKER 1: Despre 15. 679 00:36:04,210 --> 00:36:05,543 >> HUGH Zabriskie: 15 minute la stânga? 680 00:36:05,543 --> 00:36:06,160 Bine, in regula. 681 00:36:06,160 --> 00:36:08,170 Deci, vom concura înainte aici. 682 00:36:08,170 --> 00:36:13,500 >> Deci, practic, principalul punct de gândire de acest lucru ca pe o conductă 683 00:36:13,500 --> 00:36:16,430 este faptul că fiecare pas în conducta este o serie de noduri audio. 684 00:36:16,430 --> 00:36:19,284 685 00:36:19,284 --> 00:36:20,950 Sursa noastră, să spunem, este un oscilator. 686 00:36:20,950 --> 00:36:23,380 Avem nevoie de a crea un nod oscilator. 687 00:36:23,380 --> 00:36:25,690 Si asta este doar un fel Micii function-- 688 00:36:25,690 --> 00:36:30,460 și acestea sunt toate bazate pe contextului audio aici. 689 00:36:30,460 --> 00:36:32,885 >> Audiența: Când a spus oscilator, nu înseamnă că 690 00:36:32,885 --> 00:36:37,250 este de fapt literalmente merge din doi poli diferite înainte și înapoi? 691 00:36:37,250 --> 00:36:41,170 >> HUGH Zabriskie: Nu, e ca si cum o reprezentare digitală. 692 00:36:41,170 --> 00:36:42,740 Este implementat de fapt, în C ++. 693 00:36:42,740 --> 00:36:46,460 Eu de fapt, nu știu specificațiile de modul în care este pusă în aplicare de fapt se, 694 00:36:46,460 --> 00:36:48,500 dar toate acestea este de lucru ca date binare. 695 00:36:48,500 --> 00:36:51,260 696 00:36:51,260 --> 00:36:52,370 De fapt, da. 697 00:36:52,370 --> 00:36:53,950 Asta ar putea spune, am putut de fapt, daca esti interesat, 698 00:36:53,950 --> 00:36:56,533 Aș putea trimite un pic mai mult informații despre modul în forme de undă 699 00:36:56,533 --> 00:37:00,181 sunt ținute având un format digital. 700 00:37:00,181 --> 00:37:00,680 Bine, in regula. 701 00:37:00,680 --> 00:37:03,120 >> Deci ne generând un sunet ca o condiție sine val sau ceva de genul asta, poate 702 00:37:03,120 --> 00:37:04,190 440 Hertz. 703 00:37:04,190 --> 00:37:05,830 Vom crea un oscilator. 704 00:37:05,830 --> 00:37:09,180 Dacă vrem să setați volumul, am conectați nimic la un GainNode, 705 00:37:09,180 --> 00:37:12,500 pe care am putea face cu .creategain. 706 00:37:12,500 --> 00:37:14,250 Care stabilește volumul. 707 00:37:14,250 --> 00:37:17,820 Puteți trece că pe orice pe de altă parte options-- bine, 708 00:37:17,820 --> 00:37:20,300 astfel o sursă audio tampon nod este în cazul în care s-ar putea 709 00:37:20,300 --> 00:37:23,660 stoca un MP3 care le-ați încărcat în. 710 00:37:23,660 --> 00:37:27,670 >> Filtrul Biquad este pentru filtrarea dacă doriți să luați toate de bază din 711 00:37:27,670 --> 00:37:29,630 de un cântec, sau ceva de genul asta. 712 00:37:29,630 --> 00:37:32,450 Doamne ferește doriți să luați baza dintr-un cântec. 713 00:37:32,450 --> 00:37:36,980 Și nod AudioDestination este, din nou, ca în cazul în care finalizarea noastră este. 714 00:37:36,980 --> 00:37:39,980 Dacă sunteți interesați să vadă vreodată toate diferitele opțiuni posibile, 715 00:37:39,980 --> 00:37:45,190 du-te la tab-ul și lăsați auto-complete veni. 716 00:37:45,190 --> 00:37:48,690 Și dacă creează, veți vedea toate diferite lucruri pe care le poate crea. 717 00:37:48,690 --> 00:37:50,398 Puteți crea dinamic procesoare script, 718 00:37:50,398 --> 00:37:52,940 Nici măcar nu știu ce este, pentru amestecarea fuziuni canal 719 00:37:52,940 --> 00:37:55,930 și repartitoare de canal și tot ce. 720 00:37:55,930 --> 00:37:56,430 Misto. 721 00:37:56,430 --> 00:37:59,560 722 00:37:59,560 --> 00:38:01,390 >> Deci, aceasta este doar o exemplu de conducte. 723 00:38:01,390 --> 00:38:03,580 Deci avem trei surse vine. 724 00:38:03,580 --> 00:38:06,830 Poate acestea sunt sub formă de undă, Poate acestea sunt MP3-uri. 725 00:38:06,830 --> 00:38:08,740 Unul se trece printr-o filtru, un altul de 726 00:38:08,740 --> 00:38:12,404 obtinerea distorsionat un alt panning cuiva stânga și la dreapta. 727 00:38:12,404 --> 00:38:15,320 Puteți face tot felul de lucruri și toate amesteca în jurul împreună, 728 00:38:15,320 --> 00:38:18,880 și apoi afară vine audio la sfârșitul anului, ca destinație. 729 00:38:18,880 --> 00:38:22,720 Acesta este un exemplu de ceea ce mai complicat cod Audio Web arată. 730 00:38:22,720 --> 00:38:26,720 Creezi toate acestea diferite obiecte dreapta here-- 731 00:38:26,720 --> 00:38:27,706 Nu sunt sigur de acest lucru. 732 00:38:27,706 --> 00:38:29,120 Nu, nu mări. 733 00:38:29,120 --> 00:38:29,620 BINE. 734 00:38:29,620 --> 00:38:31,257 >> SAM GREEN: Tu faci de control, Scroll-Up. 735 00:38:31,257 --> 00:38:32,590 HUGH Zabriskie: Controlul Scroll-- 736 00:38:32,590 --> 00:38:33,000 SAM GREEN: Nu, nu. 737 00:38:33,000 --> 00:38:33,500 Controla-- 738 00:38:33,500 --> 00:38:36,540 739 00:38:36,540 --> 00:38:38,140 >> HUGH Zabriskie: Oh, de control, defilați? 740 00:38:38,140 --> 00:38:38,780 Oh, Te-am prins. 741 00:38:38,780 --> 00:38:41,480 Da. 742 00:38:41,480 --> 00:38:42,240 Wow, nope, nope. 743 00:38:42,240 --> 00:38:42,740 BINE. 744 00:38:42,740 --> 00:38:46,090 Nu voi face asta. 745 00:38:46,090 --> 00:38:48,300 >> Deci da, în această primă secțiune aici, veți vedea 746 00:38:48,300 --> 00:38:52,720 suntem crearea toate aceste diferite noduri din cadrul. 747 00:38:52,720 --> 00:38:54,980 Noi doar le piecing împreună în a doua parte 748 00:38:54,980 --> 00:38:56,980 de această funcție numită Connect. 749 00:38:56,980 --> 00:38:58,830 Asta e un adevarat cheie funcție în Web Audio. 750 00:38:58,830 --> 00:39:01,930 Aceasta înseamnă doar după ce ați făcut ceva cu sunetul într-un singur nod, 751 00:39:01,930 --> 00:39:03,705 trece-l pe la nodul următor. 752 00:39:03,705 --> 00:39:05,830 Deci avem sursa, aceasta se conectează la analizor, 753 00:39:05,830 --> 00:39:09,140 analizorul face ceva cu ea, se duce la denaturarea, și așa mai departe, 754 00:39:09,140 --> 00:39:12,725 și la destinația în partea de jos chiar aici. 755 00:39:12,725 --> 00:39:13,225 Misto. 756 00:39:13,225 --> 00:39:14,640 OK, așa că vom păstra în mișcare pe. 757 00:39:14,640 --> 00:39:17,180 >> Pipeline-- din nou, acestea sunt cele mai frecvente conducte, 758 00:39:17,180 --> 00:39:21,300 așa vorbim despre toate aceste lucruri, cum ar fi distorsiune, panning, toate aceste lucruri. 759 00:39:21,300 --> 00:39:24,280 Dacă sunteți cu adevărat interesați în utilizarea lucrurile Pro Tools, 760 00:39:24,280 --> 00:39:25,820 cei probabil vă interesează. 761 00:39:25,820 --> 00:39:27,740 Dacă nu, poate că doar doresc să joace sunetul, 762 00:39:27,740 --> 00:39:29,990 sau poate vrei doar să seta volumul sunetul. 763 00:39:29,990 --> 00:39:35,270 Acestea sunt cele două cele mai frecvente fel conductelor în producție audio. 764 00:39:35,270 --> 00:39:38,640 >> Din nou, modalități în care puteți lua în calitate de oscillator-- Deci, să 765 00:39:38,640 --> 00:39:42,460 face un demo de care chiar aici. 766 00:39:42,460 --> 00:39:47,090 767 00:39:47,090 --> 00:39:52,225 Deci vom crea un context simplu audio aici, 768 00:39:52,225 --> 00:39:54,350 și de la care vom pentru a crea oscilator nostru. 769 00:39:54,350 --> 00:39:58,620 Deci, care este, din nou, suntem doar O să sun Creare Oscilator. 770 00:39:58,620 --> 00:40:07,030 Vom stabili o frecvență pe că, 440 Hertz, tuturor favorit. 771 00:40:07,030 --> 00:40:13,290 Apoi ne-am conecta că la destinație point-- care este vorbitorul, asa ca 772 00:40:13,290 --> 00:40:15,750 destinația context. 773 00:40:15,750 --> 00:40:21,400 În cele din urmă, noi spunem doar, începe la zero secunde de acum, și nu ne-am suna? 774 00:40:21,400 --> 00:40:22,400 >> [Sonerie] 775 00:40:22,400 --> 00:40:24,980 >> HUGH Zabriskie: Aici vom merge. 776 00:40:24,980 --> 00:40:25,940 E doar o undă sinusoidală. 777 00:40:25,940 --> 00:40:26,440 Bine, in regula. 778 00:40:26,440 --> 00:40:28,274 Și apoi ne vom opri asta. 779 00:40:28,274 --> 00:40:30,520 >> Audiența: În cazul în care a făcut feedback-ul de la care provin? 780 00:40:30,520 --> 00:40:31,250 >> HUGH Zabriskie: Feedback-ul? 781 00:40:31,250 --> 00:40:32,458 Oh, probabil microfoane noastre. 782 00:40:32,458 --> 00:40:34,221 783 00:40:34,221 --> 00:40:35,470 Deci da, asta e cum o faci. 784 00:40:35,470 --> 00:40:37,261 Și, de fapt, dacă am avut păstrat de funcționare, vă 785 00:40:37,261 --> 00:40:39,540 ar putea avea frecvența ca valoare se execută, 786 00:40:39,540 --> 00:40:43,320 așa că e un lucru distractiv de a juca în jurul valorii. 787 00:40:43,320 --> 00:40:44,930 Misto. 788 00:40:44,930 --> 00:40:46,600 Asta e întotdeauna un minunat de a prezenta. 789 00:40:46,600 --> 00:40:48,792 >> SAM GREEN: Nu au cred despre asta, am? 790 00:40:48,792 --> 00:40:50,500 HUGH Zabriskie: Da, Asta e urât. 791 00:40:50,500 --> 00:40:53,249 Deci, tampon loading-- voi arata o exemplu de faptul că, la sfârșitul. 792 00:40:53,249 --> 00:40:55,090 Asta încărcarea unui MP3. 793 00:40:55,090 --> 00:40:58,880 Și microfon, puteți utiliza doar o functie numit Navigator.getUserMedia () 794 00:40:58,880 --> 00:41:03,240 să solicite accesul la utilizator microfon pentru aceste informații. 795 00:41:03,240 --> 00:41:05,610 >> Aici e filtrarea, voi ține doar merge de la acest lucru. 796 00:41:05,610 --> 00:41:08,600 Acest lucru este destul de ridicat nivel, dar Filtrele doar vă permit să 797 00:41:08,600 --> 00:41:16,154 >> [Bip] 798 00:41:16,154 --> 00:41:18,320 De asemenea, vă permite de filtrare pentru a crea lucruri, cum ar fi roz 799 00:41:18,320 --> 00:41:20,050 zgomot, zgomot maro, zgomot alb. 800 00:41:20,050 --> 00:41:24,330 Dacă doriți să creați zgomot pur, care unii oameni le place să mizerie în jurul cu, 801 00:41:24,330 --> 00:41:27,490 puteți utiliza Web Audio de filtrare pentru a face asta. 802 00:41:27,490 --> 00:41:30,039 >> Audio Panning-- astfel imagina dacă scrii un joc 803 00:41:30,039 --> 00:41:32,330 si doriti sunetul să suna ca vine, cum ar fi, 804 00:41:32,330 --> 00:41:36,090 fotografiere pe ecran, aveți pot folosi panoramare de audio 805 00:41:36,090 --> 00:41:39,770 pentru a crea acest tip de con, care like-- e destul de Mathy, 806 00:41:39,770 --> 00:41:41,850 dar este de fapt într-adevăr rece dacă aveți funcționează, 807 00:41:41,850 --> 00:41:44,500 și nu există ceva bun tutoriale pe ea pot să vă trimit. 808 00:41:44,500 --> 00:41:46,400 Practic, puteți fel de a crea sunet 809 00:41:46,400 --> 00:41:50,480 de ceva care merge prin într-un mod 3D. 810 00:41:50,480 --> 00:41:57,350 Și, dacă aveți un interes DJ, puteți începe de amestecare și cruce cântece decolorare. 811 00:41:57,350 --> 00:42:01,260 >> Acest lucru este doar un foarte de bază cod, practic ceea ce am făcut înainte. 812 00:42:01,260 --> 00:42:06,140 Aceasta setează volumul oscilator, așa că am crea oscilator nostru 813 00:42:06,140 --> 00:42:07,380 care creează forma de undă. 814 00:42:07,380 --> 00:42:09,940 Noi cream GainNode nostru, setați frecvența noastră, 815 00:42:09,940 --> 00:42:14,170 și apoi conectați la oscilatorul GainNode, care apoi se schimbă în esență 816 00:42:14,170 --> 00:42:16,760 cât de mult semnal este permis prin intermediul. 817 00:42:16,760 --> 00:42:20,467 Dar, de fapt, este un digitală lucru, asa ca este mai doar-- da. 818 00:42:20,467 --> 00:42:23,550 Asta nu e ceea ce se întâmplă de fapt, dar asta e ceea ce se întâmplă în viața reală 819 00:42:23,550 --> 00:42:24,393 cu un câștig. 820 00:42:24,393 --> 00:42:27,258 >> Audiența: --quantization parametrului volum? 821 00:42:27,258 --> 00:42:28,174 HUGH Zabriskie: Ne pare rău? 822 00:42:28,174 --> 00:42:30,360 Audiența: Este un parametru volum cuantizat? 823 00:42:30,360 --> 00:42:31,840 HUGH Zabriskie: Da. 824 00:42:31,840 --> 00:42:34,620 Și acesta este un lucru eu sunt foarte deficit pe la cunoștințele mele, 825 00:42:34,620 --> 00:42:38,010 cum funcționează câștig la un nivel digital. 826 00:42:38,010 --> 00:42:40,140 Știu cu real semnale, este practic 827 00:42:40,140 --> 00:42:45,120 controlul cât de mult sunteți amplificare a semnalelor. 828 00:42:45,120 --> 00:42:47,017 Deci da. 829 00:42:47,017 --> 00:42:50,100 O să-ți trimit mai multe informatii despre că, pentru că aș fi curios de fapt 830 00:42:50,100 --> 00:42:51,099 să știe mai multe despre asta. 831 00:42:51,099 --> 00:42:54,090 Dar în esență parametrii sunt, unul este fold-- 832 00:42:54,090 --> 00:42:59,690 signal-- tare si zero nu este semnal, sau nu veți auzi nici un sunet. 833 00:42:59,690 --> 00:43:03,150 Vom sări peste timp demo pentru că, din cauza este practic ceea ce am făcut înainte. 834 00:43:03,150 --> 00:43:07,630 Și, din nou, Context.Destination este nodul destinație audio. 835 00:43:07,630 --> 00:43:08,360 Minunat, OK. 836 00:43:08,360 --> 00:43:10,470 >> Deci, am de gând să fac o scurtă două demo-uri. 837 00:43:10,470 --> 00:43:11,760 Cum facem la timp? 838 00:43:11,760 --> 00:43:12,640 >> SPEAKER 1: aproximativ 10 minute. 839 00:43:12,640 --> 00:43:13,130 >> HUGH Zabriskie: 10 minute? 840 00:43:13,130 --> 00:43:13,630 Grozav! 841 00:43:13,630 --> 00:43:14,320 Incredibil. 842 00:43:14,320 --> 00:43:19,010 >> Deci primul am de gând să nu, se numește My Song preferat. 843 00:43:19,010 --> 00:43:22,410 Deci, aceasta este doar o mic HTML JavaScript. 844 00:43:22,410 --> 00:43:25,510 Vom avea două butoane pe pagina juca piesa mea preferata 845 00:43:25,510 --> 00:43:29,192 și se va opri melodia mea preferată. 846 00:43:29,192 --> 00:43:30,180 Voi schimba acest lucru. 847 00:43:30,180 --> 00:43:32,110 >> Audiența: Acoperiți microfonul. 848 00:43:32,110 --> 00:43:33,430 >> HUGH Zabriskie: Da. 849 00:43:33,430 --> 00:43:36,300 Și am încărcat aici un script care basically-- 850 00:43:36,300 --> 00:43:38,520 și acest lucru este într-adevăr util pentru încărcarea unui MP3, 851 00:43:38,520 --> 00:43:41,820 astfel încât aceasta face doar încărcare MP3 mod mai rapid. 852 00:43:41,820 --> 00:43:44,180 Este practic doar un înveliș. 853 00:43:44,180 --> 00:43:48,737 Este doar face procesul de încărcare în MP3-uri mult mai rapid, 854 00:43:48,737 --> 00:43:51,570 în caz contrar pe care îl utilizați cerere HTTP, un fel de ceea ce faceam 855 00:43:51,570 --> 00:43:53,950 pe piesa curentă set cu Server. 856 00:43:53,950 --> 00:43:55,950 E foarte urât, tu Nu vreau să o fac. 857 00:43:55,950 --> 00:44:04,110 >> Deci tipul ăsta, Boris IMM-uri, a scris un foarte instrument util mic numit BufferLoader. 858 00:44:04,110 --> 00:44:08,780 Tot ce faci este pur și simplu trece este context, îl o list-- trece 859 00:44:08,780 --> 00:44:11,327 sau, da, este o listă în JavaScript? 860 00:44:11,327 --> 00:44:12,160 SAM GREEN: O matrice. 861 00:44:12,160 --> 00:44:14,201 HUGH Zabriskie: Oh, acesta este o matrice, ce-i drept. 862 00:44:14,201 --> 00:44:18,660 Este o serie de căi la diferite fișiere. 863 00:44:18,660 --> 00:44:21,990 Și apoi l o funcție trece. 864 00:44:21,990 --> 00:44:25,530 Aceasta este callback am vorbit despre cu încărcare asincron. 865 00:44:25,530 --> 00:44:28,720 Acest lucru va fi numit odată fișierele încărcate. 866 00:44:28,720 --> 00:44:33,780 Și această funcție, care este numit, atunci când dosarul anii încărcat ia ca un perimetru 867 00:44:33,780 --> 00:44:35,840 o serie de tampoane încărcate. 868 00:44:35,840 --> 00:44:37,990 Deci, care are loc aici. 869 00:44:37,990 --> 00:44:41,180 Practic, este BufferList O să fie o value-- 870 00:44:41,180 --> 00:44:46,380 sau va fi o serie de lungime unul, care are în el în index 871 00:44:46,380 --> 00:44:51,320 zero întregul dosar încărcat de MP3. 872 00:44:51,320 --> 00:44:53,320 Deci, ceea ce fac atunci când am terminat încărcare este, pur și simplu 873 00:44:53,320 --> 00:44:57,430 a crea o sursă de tampon, care este un nod sursă tampon audio. 874 00:44:57,430 --> 00:45:03,410 Următorul pas este să încărcați în source.buffer ca tampon încărcate completă 875 00:45:03,410 --> 00:45:06,740 din BufferList-- este o mulțime de buffers-- 876 00:45:06,740 --> 00:45:10,255 și apoi vă conectați că audio tampon la destinație. 877 00:45:10,255 --> 00:45:12,380 Deci, ce se va face este pur și simplu pune MP3 878 00:45:12,380 --> 00:45:15,260 aruncată în ieșire, și-l începe imediat 879 00:45:15,260 --> 00:45:18,010 la obtinerea acestui apel. 880 00:45:18,010 --> 00:45:21,660 >> Rece, așa că să vedem acest lucru în acțiune. 881 00:45:21,660 --> 00:45:24,490 My [auzite] aici, să vedem. 882 00:45:24,490 --> 00:45:26,430 Deci, eu sunt doar de gând să începe un server de bază. 883 00:45:26,430 --> 00:45:28,660 Asta e ceva ce ce trebuie sa faci daca esti 884 00:45:28,660 --> 00:45:32,490 face cereri de fișiere de încărcare. 885 00:45:32,490 --> 00:45:34,140 Am de gând să înceapă un server de bază. 886 00:45:34,140 --> 00:45:38,200 Aceasta este de fapt întreaga PSET acum în o singură linie, 887 00:45:38,200 --> 00:45:43,930 dar este doar incepand un server pe portul 80/80. 888 00:45:43,930 --> 00:45:47,300 Deci mergem pe aici, am va pentru a încărca 80/80, 889 00:45:47,300 --> 00:45:49,110 vom merge la My Song Favorite. 890 00:45:49,110 --> 00:45:51,660 Deci, dacă am lovit "piesa mea melodia preferată ", chiar acum, 891 00:45:51,660 --> 00:45:53,964 se va încărca meu de melodia preferată și să se joace it-- 892 00:45:53,964 --> 00:45:55,880 [MUSIC - Eagles, "LIFE în rapid  BANDĂ"] 893 00:45:55,880 --> 00:46:00,490 --which se întâmplă să fie "Viața în Fast Lane "de Eagles. 894 00:46:00,490 --> 00:46:06,346 Acum, aș putea lovi "Stop meu cântec favorit "și reluarea acesteia. 895 00:46:06,346 --> 00:46:09,160 >> [MUSIC - Eagles, "LIFE în rapid  BANDĂ"] 896 00:46:09,160 --> 00:46:18,340 >> Și dacă mă duc pe la consola, deoarece Am folosit o variabilă globală aici 897 00:46:18,340 --> 00:46:23,390 pentru a urmări această valoare, fapt va fi recunoscut în consola. 898 00:46:23,390 --> 00:46:25,160 Deci, auto-creează pentru mine. 899 00:46:25,160 --> 00:46:29,991 Deci, asta e ceea ce se joacă acum, si eu pot pur și simplu apel source.stop () 900 00:46:29,991 --> 00:46:30,490 pe asta. 901 00:46:30,490 --> 00:46:34,930 902 00:46:34,930 --> 00:46:35,860 Ei bine, știi ce? 903 00:46:35,860 --> 00:46:39,760 Doar așa voi au auzit acest song-- s-ar putea recunoaște această melodie. 904 00:46:39,760 --> 00:46:41,801 >> [MUSIC - Rick Astley, "Nu se va GIVE  TE-AI TREZIT"] 905 00:46:41,801 --> 00:46:42,299 906 00:46:42,299 --> 00:46:44,215 [MUSIC - Eagles, "LIFE în rapid  BANDĂ"] 907 00:46:44,215 --> 00:46:46,195 Am fost acum toate Rickrolled. 908 00:46:46,195 --> 00:46:50,155 OK, mare, se deplasează pe. 909 00:46:50,155 --> 00:46:51,160 Misto. 910 00:46:51,160 --> 00:46:54,554 Deci, aceasta este, în principiu un exemplu de doar cum ai putut încărca un MP3 file-- 911 00:46:54,554 --> 00:46:56,470 [MUSIC - Eagles, "LIFE în rapid  BANDĂ"] 912 00:46:56,470 --> 00:46:59,590 --and-l joace, și se va opri și porniți-l. 913 00:46:59,590 --> 00:47:03,008 Aș fi putut face mult mai mult [Inaudibil] 914 00:47:03,008 --> 00:47:07,570 >> Ultima voi face este, Am să-ți arăt o [neauzit]. 915 00:47:07,570 --> 00:47:18,070 >> [MUSIC JOC] 916 00:47:18,070 --> 00:47:21,800 >> E ca și cum, ogg.wave.mp3. 917 00:47:21,800 --> 00:47:26,450 Cred că, dacă îmi amintesc corect, Am rula în unele probleme cu .m4a, 918 00:47:26,450 --> 00:47:27,721 dar eu nu sunt sigur de asta. 919 00:47:27,721 --> 00:47:28,470 Cred că mp3.wave-- 920 00:47:28,470 --> 00:47:28,930 921 00:47:28,930 --> 00:47:30,971 >> [MUSIC - Rick Astley, "Nu se va GIVE  TE-AI TREZIT"] 922 00:47:30,971 --> 00:47:35,930 923 00:47:35,930 --> 00:47:36,500 >> Bine, minunat. 924 00:47:36,500 --> 00:47:37,625 N-ar fi spus asta. 925 00:47:37,625 --> 00:47:40,570 Oricum, salut. 926 00:47:40,570 --> 00:47:43,430 927 00:47:43,430 --> 00:47:45,490 Deci, avem acest deschise. 928 00:47:45,490 --> 00:47:52,320 Așa că acum tot ce fac e, am creat practic o sintaxă de bază pentru crearea de muzica. 929 00:47:52,320 --> 00:47:57,610 Deci, dacă fac ceva de genul, adăugați g4 la 1 2, ceea ce înseamnă că este faptul că, 930 00:47:57,610 --> 00:48:00,950 adauga nota de pian, G4, care este al patrulea G 931 00:48:00,950 --> 00:48:02,680 până la pian din partea de jos. 932 00:48:02,680 --> 00:48:05,930 Deci acest este un fel de MIDI vorbesc, Deci, pentru cei care sunt pe bază de muzică, 933 00:48:05,930 --> 00:48:07,860 acest lucru este doar note MIDI. 934 00:48:07,860 --> 00:48:10,090 >> Audiența: Asta e G a C Mijlociu, nu? 935 00:48:10,090 --> 00:48:11,840 >> HUGH Zabriskie: Aceasta este G de mai sus Orientul Mijlociu C, ce-i drept. 936 00:48:11,840 --> 00:48:12,470 >> Audiența: Deasupra Middle C. 937 00:48:12,470 --> 00:48:13,345 >> HUGH Zabriskie: Da. 938 00:48:13,345 --> 00:48:14,340 De fapt, da. 939 00:48:14,340 --> 00:48:16,131 Cred că am făcut de fapt are un [neauzit], 940 00:48:16,131 --> 00:48:18,860 astfel încât aceasta ar putea fi o octavă mai sus care. 941 00:48:18,860 --> 00:48:20,070 Deci, să vedem. 942 00:48:20,070 --> 00:48:21,152 Dacă am lovit Play-- 943 00:48:21,152 --> 00:48:22,110 [Repetitive PIANO NOTA] 944 00:48:22,110 --> 00:48:23,200 --we're auzi asta. 945 00:48:23,200 --> 00:48:25,700 Ideea este că funcționează la fel ca o linie de comandă ar fi, 946 00:48:25,700 --> 00:48:27,510 Deci, dacă mă duc sus și în jos pe tastatura mea, 947 00:48:27,510 --> 00:48:31,550 poate reveni la anterior comenzi, ceea ce este destul de util. 948 00:48:31,550 --> 00:48:35,136 Și de mai jos este lista mea de piese, care sunt toate execută pe buclă. 949 00:48:35,136 --> 00:48:38,260 >> Audiența: Ai fost asumarea Tastatura 88-cheie de pe asta, nu? 950 00:48:38,260 --> 00:48:41,051 >> HUGH Zabriskie: Întrebarea a fost, eu presupunând o tastatură de 88-cheie, 951 00:48:41,051 --> 00:48:41,990 Și da, eu sunt. 952 00:48:41,990 --> 00:48:45,030 Ceea ce am făcut este să practic a luat 88 de probe 953 00:48:45,030 --> 00:48:46,970 de pian, unul pentru fiecare notă. 954 00:48:46,970 --> 00:48:49,180 Și așa de fiecare dată când auzi o notă de acum înainte, 955 00:48:49,180 --> 00:48:57,550 care este de fapt o buclă care arată like-- acest lucru este obtinerea jucat pe bucla, 956 00:48:57,550 --> 00:49:00,120 astfel încât pentru fiecare notă, aceasta se execută. 957 00:49:00,120 --> 00:49:02,860 Ce se întâmplă este că crea din nou un tampon, 958 00:49:02,860 --> 00:49:06,010 Am crea un nod câștig pentru a seta volumul. 959 00:49:06,010 --> 00:49:08,240 Aceasta doar un foarte mod complicat de a spune I 960 00:49:08,240 --> 00:49:10,550 stoca tamponul într-un source.buffer. 961 00:49:10,550 --> 00:49:13,160 Am da câștig, am conectați-l la câștig, 962 00:49:13,160 --> 00:49:15,576 câștigul este conectat la de ieșire, iar apoi l-am juca. 963 00:49:15,576 --> 00:49:20,735 Așa că este un fel de proces de a lua într-o sursă de tampon. 964 00:49:20,735 --> 00:49:24,820 >> Audiența: Poți lua de fapt, că sunet uscat și să-l umed [Inaudibil]? 965 00:49:24,820 --> 00:49:26,260 >> HUGH Zabriskie: Puteți, da. 966 00:49:26,260 --> 00:49:29,260 Nu e re-verb, nu e întârziere, distorsiuni. 967 00:49:29,260 --> 00:49:33,260 Puteți pune practic nimic în între care în sandviș de-- bine, 968 00:49:33,260 --> 00:49:37,660 conducte este o metaforă mai bună, dar puteți adăuga nimic în asta. 969 00:49:37,660 --> 00:49:38,200 Misto. 970 00:49:38,200 --> 00:49:40,280 >> Așa că vom termina demo aici pentru a vă oferi un sentiment 971 00:49:40,280 --> 00:49:46,390 de doar numărul mare de ori voi poate rula această funcție dintr-o dată. 972 00:49:46,390 --> 00:49:49,280 Deci, am de gând pentru a elimina acest lucru. 973 00:49:49,280 --> 00:49:59,110 Am de gând să creeze un generator that-- Practic ceea ce does-- acest lucru este foarte 974 00:49:59,110 --> 00:50:04,220 un fel de syntax-- complicat, dar e va genera notele pe zbor, 975 00:50:04,220 --> 00:50:06,601 și doar începe să joci le ca le evaluează. 976 00:50:06,601 --> 00:50:07,392 [Interpunerea PIANO] 977 00:50:07,392 --> 00:50:10,990 978 00:50:10,990 --> 00:50:12,817 >> Astfel încât să putem face doar un pic de muzica aici. 979 00:50:12,817 --> 00:50:13,608 [Interpunerea PIANO] 980 00:50:13,608 --> 00:50:39,570 981 00:50:39,570 --> 00:50:41,470 >> Deci, ce această comandă face, de exemplu, este 982 00:50:41,470 --> 00:50:46,910 este nevoie de aceste trei notițe pentru pian si apoi le pune pe B3. 983 00:50:46,910 --> 00:50:48,660 Acest lucru ar putea face sintaxă un pic mai mult sens 984 00:50:48,660 --> 00:50:50,590 pentru cei care au un muzica de fundal aici. 985 00:50:50,590 --> 00:50:55,180 986 00:50:55,180 --> 00:50:56,551 >> Pot adăuga un tambur lovitură. 987 00:50:56,551 --> 00:50:57,050 Eu pot-- 988 00:50:57,050 --> 00:50:58,048 >> [Interpunerea INSTRUMENTE] 989 00:50:58,048 --> 00:50:59,256 >> --just juca în jurul cu. 990 00:50:59,256 --> 00:51:12,519 991 00:51:12,519 --> 00:51:13,474 >> Astfel încât să puteți make-- 992 00:51:13,474 --> 00:51:14,515 [Interpunerea INSTRUMENTE] 993 00:51:14,515 --> 00:51:15,513 Asta o un pic mai enervant. 994 00:51:15,513 --> 00:51:16,554 [Interpunerea INSTRUMENTE] 995 00:51:16,554 --> 00:51:26,491 996 00:51:26,491 --> 00:51:30,981 >> Deci care adaugă la întâmplare un chimval uscat pe fiecare nota 16, cu un 16% 997 00:51:30,981 --> 00:51:31,481 [Neauzit]. 998 00:51:31,481 --> 00:51:32,522 >> [Interpunerea INSTRUMENTE] 999 00:51:32,522 --> 00:51:40,962 1000 00:51:40,962 --> 00:51:50,400 >> Da, astfel încât modul în care acest works-- este întotdeauna în 4: 4. 1001 00:51:50,400 --> 00:51:51,441 [Interpunerea INSTRUMENTE] 1002 00:51:51,441 --> 00:52:06,910 1003 00:52:06,910 --> 00:52:10,902 >> Da, astfel încât patru trimestre, și 16/8. 1004 00:52:10,902 --> 00:52:14,851 1005 00:52:14,851 --> 00:52:15,892 [Interpunerea INSTRUMENTE] 1006 00:52:15,892 --> 00:52:27,970 1007 00:52:27,970 --> 00:52:33,780 >> Deci, în medie, veți obține 60% de accesări pe note 16. 1008 00:52:33,780 --> 00:52:35,990 >> Oricum, acest lucru a fost doar un fel de a scoate în evidență 1009 00:52:35,990 --> 00:52:39,780 unele din lucrurile pe care le-ar putea construi cu API-ul Audio Web. 1010 00:52:39,780 --> 00:52:43,840 Este foarte puternic, e foarte rapid, și puteți face o mulțime de lucruri interesante 1011 00:52:43,840 --> 00:52:44,340 Cu acesta. 1012 00:52:44,340 --> 00:52:51,260 Deci, din nou, orice intrebare aveti, e-mail myself-- Hugh-- sau Sam, 1013 00:52:51,260 --> 00:52:55,869 și sincer, Google are o tona de resurse bune. 1014 00:52:55,869 --> 00:52:56,660 Orice întrebări? Ultimele 1015 00:52:56,660 --> 00:52:57,970 Da. 1016 00:52:57,970 --> 00:53:00,790 >> Audiența: Deci puteți accesa microfonul încorporat. 1017 00:53:00,790 --> 00:53:03,089 Ce se întâmplă dacă ai vrut să utilizați un microfon mai bun? 1018 00:53:03,089 --> 00:53:05,380 HUGH Zabriskie: Dacă ați fi dorit pentru a folosi mai bine microfon? 1019 00:53:05,380 --> 00:53:11,320 Deci, din nou, acest lucru este parte a prezentului abstracție între Chrome 1020 00:53:11,320 --> 00:53:12,950 și restul computerului. 1021 00:53:12,950 --> 00:53:18,950 Dacă nu este disponibil prin intermediul un API, cum ar fi Web MIDI API, 1022 00:53:18,950 --> 00:53:22,030 ai putea găsi, probabil, unele hacks, dar în general nu este realizabil. 1023 00:53:22,030 --> 00:53:25,300 >> SAM VERDE: Puteți also-- toate Chrome știe 1024 00:53:25,300 --> 00:53:28,820 este ceea ce microfonul implicit este, și se accesează asta. 1025 00:53:28,820 --> 00:53:33,410 Deci, dacă ați avut un microfon ai putea setat ca implicit microfonul calculatorului, 1026 00:53:33,410 --> 00:53:35,990 ai putea accesa acest fel și, probabil, s-ar funcționa. 1027 00:53:35,990 --> 00:53:37,490 HUGH Zabriskie: Asta-i un bun punct. 1028 00:53:37,490 --> 00:53:39,656 N-am încercat asta, dar s-ar putea fi în măsură să fel 1029 00:53:39,656 --> 00:53:45,700 de-- dacă redirecționați vorbitor de intrare, s-ar putea fi capabil de a face acest lucru, da. 1030 00:53:45,700 --> 00:53:48,360 >> Orice întrebări? Ultimele 1031 00:53:48,360 --> 00:53:49,340 Misto. 1032 00:53:49,340 --> 00:53:51,680 Ei bine, va multumesc atât de mult pentru vizionarea. 1033 00:53:51,680 --> 00:53:52,199 Sunt Hugh. 1034 00:53:52,199 --> 00:53:52,990 SAM GREEN: Sunt Sam. 1035 00:53:52,990 --> 00:53:55,410 HUGH Zabriskie: Și acest lucru este CS50. 1036 00:53:55,410 --> 00:53:56,767