SAM GREEN: Salut, toată lumea. Bine ati venit la seminar nostru. Numele meu este Sam. HUGH Zabriskie: Sunt Hugh. SAM GREEN: Și vom vorbi astăzi la despre JavaScript și API Web Audio. Doar pentru a începe, aceasta este o schiță de agenda noastră pentru seminar. Vom începe prin a vorbi despre de ce ar trebui să fie interesat în Web API audio, de ce este JavaScript limba aveți nevoie pentru el, și apoi vorbesc despre JavaScript essentials-- așa cum ar fi, te plimbi prin unele Elementele de bază ale limbii, și apoi vorbesc despre API audio la un nivel ridicat. Apoi, Hugh va vorbi despre unele dintre etapele de producție audio iar apoi demo acest sequencer minunat proiect a construit și să vă arate codul. Și apoi, vom avea timp pentru întrebări la sfârșitul pentru persoane care sunt aici trăiesc. HUGH Zabriskie: cool. SAM VERDE: cool. HUGH Zabriskie: cool. Voi copii de rezervă. SAM GREEN: Deci, primele lucruri mai întâi. Deci, unul din lucrurile mari despre API-ul Audio Web este că nu există nici o configurare este necesar. Se livreaza built-in pentru a cele mai multe browsere moderne, inclusiv Chrome, Edge, un întreg grămadă de others-- toți cei porțiuni mari de care oamenii folosesc astăzi. Deci nu e nici înființat, În afară de doar obtinerea un server web merge, pentru vă pentru a începe să lucreze pe proiect, care este mare. Vă recomandăm destul de puternic să luați în considerare folosind Chrome pentru Dezvoltare web JavaScript, doar pentru ca dezvoltator sa instrumente sunt cu adevărat puternic. Ca un exemplu de ceea ce ne referim doar prin a spune deschide JavaScript console-- dacă te duci în Chrome și te uiți la orice pagină de web, și ai plecat clic Verificați Element, și apoi te duci la acest mic drop-down aici și faceți clic pe consola, veți vedea ce se deschide arata o mult ca un prompt de comandă pe care le s-ar putea vedea pe Mac, sau pe ID-ul. Și uite așa, putem Tip comenzi aici, cum ar fi Clear, și alte comenzi de genul asta. Putem crea variabile, așa cum vom vedea mai târziu în JavaScript. Și astfel tot ce putem face în JavaScript, putem face cu consola, și că este un mod de super-la îndemână pentru a începe să joci în jurul valorii de cu API-uri si obtinerea confortabil cu JavaScript right off BAT. Nici un set în sus este necesar, care este foarte frumos. Misto. Incredibil. Deci, doar un lucru pentru a adăuga. Dacă aveți orice questions-- există multi dintre voi care nu sunt aici trăiesc, nu ezitați să us-- aceste e-mail sunt adresele noastre de e-mail. Dacă aveți întrebări nu vrei să ne întrebi, cum ar fi, oh am un bug în codul meu, sau ceva care este un pic mai specific, Poate că Google. Există o mulțime de resurse de mare despre API-ul Web Audio acolo. E foarte bine documentate și se fi folosit de o tona de oameni în industrie, și oameni care sunt doar construirea chestii distractive pentru ei înșiși. Deci, ar trebui să existe o mulțime resurselor acolo. Incredibil. Rece, asa ca de ce API Audio Web? Această diagramă este un pic de o evoluție a modului sunet pe web a crescut în timp. Bgsound fost ca tag-ul HTML originală că Internet Explorer utilizate pentru a susține. A permis doar pentru sunete destul de bază, funcționalitatea nu a fost foarte robust, și nu ai putea face secvențiere complicat, sau de control, atunci când a început sunet și sa oprit foarte robust. Deci, nu a fost deosebit de bine dezvoltat. Apoi, după care, Flash a venit along-- care, Sunt sigur că voi sunt familiarizați cu Flash-- poate nu cum funcționează, dar ai văzut cu siguranță. Trebuie să actualizați Flash dvs. Plug-in, toate acest tip de lucruri, și că a extins gama de siguranță de funcționalitate care a fost disponibil. Dar ceea ce face utilizatorul instala un plug-in este cu siguranta un dezavantaj pentru inclusiv Flash în cererea dumneavoastră, nu? Pentru că atunci ești dependent de utilizator merge și de a găsi acest plug-in, și, probabil, fiind transformat în afara de acest pas suplimentar ei trebuie să ia pentru a utiliza aplicația. Și apoi ar putea exista o actualizare care va rupe toată aplicația, și se termină prin a fi un coșmar pentru dezvoltator, de asemenea. Deci, asta a fost o baricadă. Și apoi, după care a venit de-a lungul, eticheta audio HTML, care este o caracteristică a mai HTML-- modern, care cu siguranță permis pentru o mulțime mai multe lucruri, dar chiar și lucrurile pe care le putea face au fost un pic limitat doar ca urmare a lucrurilor care a fost capabil de HTML. Deci, atunci când JavaScript API, API Audio Web, a devenit un standard practici în browsere, că într-adevăr extins setul de oportunități pentru dezvoltatori pentru a obține într-adevăr în construcție chestii misto pentru web. Pentru o lungă perioadă de timp trebuia fost într-adevăr instrumente robuste pentru aplicații audio native, like-- toată lumea știe GarageBand, și apoi, evident, există mai aplicații audio profesionale, de amestecare și acest tip de lucruri. Dar nu a fost o foarte bine Cloud-- nu Nor, da, cred că Cloud-- platforma web-based care ar permite dezvoltatorilor sa construi aplicatii pentru persoane pentru a face amestecare audio. Și, după cum el vă va arăta mai târziu, API-ul Audio Web permite foarte puternic lucruri să se întâmple într-adevăr pur și simplu, care este destul de rece. Deci asta e instrucțiunea de a de ce ar trebui să urmărească seminarului, practic. Și acum, am de gând să vorbesc despre unele elemente de JavaScript-- doar de bază limbii, astfel încât putem fi pe aceeasi pagina când vorbim despre API un pic mai târziu. Misto. Deci, acest lucru este un rezumat. Am uitat acest lucru a fost aici. Da. HUGH Zabriskie: Sunt două tobogane aici. SAM GREEN: Acesta este un rezumat unora dintre limitările de celelalte metode de legare, vechi. Și apoi acum, avem aceste lucruri. Misto. Incredibil. Deci, esențiale JavaScript. În primul rând lucrurile în primul rând, există o diferență destul de semnificativă în JavaScript versus într-o limbaj ca C, în modul în care care variabilele sunt create. Deci, în C, suntem obișnuiți pentru a avea de tip variabilele, nu? Și nu mă refer tip ca tip-le în, vreau să spun de tip ca ei atribuie un înțeles type-- cum ar fi, un int, un float, char un. În C, într-adevăr am fost folosit pentru a nevoit să creeze o variabilă și apoi stick la acest tip de întregul timp pe care le folosim ca variabilă. Și că nu este neapărat mai rău, dar este, probabil, greu de a utiliza. Una dintre caracteristici interesante JavaScript este că variabile sunt ceea ce se numește "dinamic tastat", care înseamnă că pot crea o variabilă cu sintaxa, varX este egal 5, de exemplu. Care creează inițial un număr întreg variable-- chiar sub capota Undeva dar eu poate schimba variabila pentru a se referi la un șir fără a face ceva de genul crearea unui nou variabilă. Nu am nevoie să vă faceți griji despre tipul de schimbarea. JavaScript știe că tipul de schimbat, și acest lucru se întâmplă în mod dinamic. Deci, există beneficii și dezavantaje la care, ca oricine care a lucrat în JavaScript pentru un timp s-ar putea ști. Există momente când s-ar putea accidental schimba tipul unei variabile și nu se ocupe de acest tip de schimbare, și apoi JavaScript pot crash-- sau o excepție fi aruncat, pentru că veți avea Tip greșit atunci când vă așteptați un tip. Misto. Deci, scoping-- care este ca, dacă ne amintesc primele săptămâni în curs, se referă la modul vizibil o variabilă este și în ce zonă a codului. Toate acestea arata foarte similar pentru modul în care arată în C. Deci variabile sunt, în general, scoped în acolade în funcție, și apoi există, de asemenea variabile la nivel global-scoped care are-- dacă scrie o variabilă în afara unei funcții, acesta va fi vizibil în întregul text. O diferență între JavaScript și C, în special, este că, dacă o declara global oriunde variabilă-un fișier text e vizibil în orice funcție în acest fișier text. Asta-i corect, nu? HUGH Zabriskie: Da. SAM VERDE: Deci, de asemenea, un pic bit Funky în comparație cu C, unde am avut întotdeauna să aibă nostru definiții variabile de mai sus locurile au fost folosite. Asta nu eo regulă care este aplicată mai, astfel, un pic diferit. Și din nou doar pentru a reemphasize, global versus variables-- locale foarte similar cu C. Ai putea avea două variabile cu același nume, și avea una dintre numele lor să fie umbrite de o variabilă locală dacă unul dintre ei a fost la nivel mondial. Deci fel, similară problemele pe care unii dintre voi pot fi rula în într-un de problema ta stabilește până acum. Rece, așa că e variabile. Flux de control, ceea ce înseamnă ca, dacă-else-- stuff-- logică și bucle. Deci, pentru a începe cu, acest lucru este ceea ce în cazul în care-altceva Declarații arata ca in JavaScript. Plasarea diferitele lucruri pe liniile nu este importantă. Aceasta este doar una dintre convențiile pentru modul în care codul de structura am. La fel ca în C, avem o "în cazul în care," o declarație paranteză. Asta nu e ceea ce am vrut să fac. Am făcut-o din nou. HUGH Zabriskie: Încercarea de a ieși? SAM GREEN: Nu, eu sunt Încerc doar pentru a mări. Nu contează. Deci, avem un "dacă" declarație și avem o condiție în interiorul acestuia care se evaluează la adevărat sau fals, și care determină dacă este sau nu intrăm ca bloc de cod. Si de asemenea, avem o altfel-dacă, și o parte, la fel ca suntem obișnuiți la C. De asemenea, trebui să fie destul de confortabil right off BAT cu bucle, deoarece ele arata, de asemenea, foarte mult ca C arata. Dar veți observa din nou că noi au, în loc de Int initializations, avem initializations var. Și cred că ai să fie atent pentru a face vă că nu se schimba valoarea I de la un int la un șir de caractere, de exemplu, pentru că o să cauza comportament ciudat s-ar putea să nu aştepta. Dar acest lucru ar trebui să arate destul de familiar, de asemenea. Deci acest lucru este în cazul în care lucrurile încep să obține un pic nebun în JavaScript pentru cineva care merge de la o fundal de C. Există funcții în JavaScript, și nu e un fel să declare o funcție care arată un fel de similar cu C, și atunci există un altul care pare un fel de diferite. Prima versiune, care putem vedea aici, este un fel de C-cum ar fi, în cazul în care spunem, aceasta este o funcție, da un nume, da numărul de argumente, și apoi conținutul funcției du-te în interiorul acestor acolade. Vom vedea un exemplu de argumente în doar o secundă. Întrucât pe linia următoare, vom vedea, oh, aici este o variabilă numită "myFunction" si l-am egală cu această function-- thing-- generic care nu pare să aibă ceva se întâmplă. Motivul pentru care este diferit decât C este că JavaScript este ceea ce se numește un limbaj funcțional, sau are elemente funcționale, ceea ce înseamnă că funcțiile sunt de fapt valori. Și asta înseamnă că putem stabili o variabilă pentru rezulta o funcție și apoi mutați această funcție în jurul valorii de, să-l dați ca argument, face tot felul de chestii așa cu funcții. Un alt lucru la note-- Funcțiile sunt scrise cu un anumit număr de argumente. Vom vedea un exemplu de funcție cu un argument pe slide-ul urmator. Dar JavaScript nu va țipă la tine dacă încercați pentru a utiliza o funcție cu număr greșit de argumente. Va face doar cel mai bun de a face face, ceea ce înseamnă că dacă treci, apelați o funcție care se așteaptă la o argument cu nici un argument, tot ce se va întâmpla este că va face tot posibilul pentru a încerca să execute codul, și dacă se execută în cele din urmă într-o excepție sau o eroare, se va arunca această excepție și să păstreze doar going-- care este doar unul dintre modurile că JavaScript funcționează. Da. Audiența: Ce se întâmplă dacă există prea multe argumente? SAM VERDE: Deci Întrebarea a fost, ceea ce se întâmplă dacă există prea multe argumente? Și răspunsul este că JavaScript va doar ignora cele care sunt după cele care se așteaptă. Va încerca să execute funcția de suna ca și cum ar fost doar primele două. Dreapta? HUGH Zabriskie: Așa e, da. În mod similar, în cazul în care există sunt prea puține argumente, doar un fel de da nul tuturor argumente nu are nici o valoare pentru. SAM GREEN: care poate fi de fapt la îndemână, dacă doresc să scrie o funcție care Durează argumente număr variabil. Puteți seta valori implicite în definiția funcției, și se poate ignora faptul că de intrare nu e acolo. Deci, vreau să vorbesc un pic mai multe despre acest ultim glonț punct, care este functii sunt valori. Acesta este un exemplu care este un pic minte-suflare dacă doar citit, și nu cred că despre ceea ce se întâmplă pentru un al doilea. Deci, să ne uităm doar la prima linie aici. Avem această variabilă, F1, că spunem este o funcție care face chestia asta. Și conținutul funcției sunt console.log ("Hello"). Vă puteți gândi la console.log ca Echivalent JavaScript de printf. Deci, ce se va întâmpla, dacă vom rula acest cod în browser-ul nostru, acesta va imprima un șir. Pot demonstra că. Audiența: Prin jurnal, însă, că nu înseamnă că este în curs de înregistrat undeva? SAM VERDE: Da. Așa că voi arăta ce se va întâmpla. Deci întrebarea era, ce logaritmică? HUGH Zabriskie: Deci console.log este ca printf pentru C. SAM GREEN: Deci console.log este ca printf, Deci, dacă am avea acest console.log ("Bună ziua"), și fac apel că, șirul "Hello" devine tipărite la consola. Aceasta este consola. E la fel ca printf, în cazul în care se imprimă de pe standardul. Și vom vedea într-un minut, dar acest lucru este de fapt referindu-se la obiectul consolă, și solicită o metodă pe acel obiect. Asta va face mai mult sens într-un minut, atunci când ne-am ajunge la vorbesc despre obiecte în JavaScript, dar m-am gândit aș menționa doar că. HUGH Zabriskie: Suntem folosit la C, right-- De obicei un program de mare a scrie în principal pentru a face ceva. Dar ceea ce e cool in JavaScript este tine au acest tip de interpret, care se execută în timp real, așa că nevoie doar de linie cu linie, se poate interpreta doar că la fața locului. Și-l ține evidența lucruri care au rula înainte, așa că este un instrument destul de util pentru utilizați console.log, sau consola, în general, doar pentru a juca în jurul valorii de cu JavaScript. SAM GREEN: Deci merge înapoi la acest example-- a doua linie de cod aici este destul de uluitor în capul meu. Prima dată când am citit acest lucru, A fost ca, ceea ce se întâmplă? Deci, ceea ce se întâmplă este, acest declarație funcția spune, Am o funcție numită F2 care este asteapta un argument, f, și apoi o numește ca Funcția, f, care a fost adoptată la ea ca un argument cu nici un argument în sine. Deci, care ar fi fost confuz. Dacă înțelegem acest lucru ca f2 f1 ia ca un argument, și apoi în interiorul F2, f devine called-- ce mijloace că această linie de cod, După aceste două linii de cod, rezultate in "Hello" fiind tipărite la consola. Faptul că putem trece Funcțiile în jurul valorii de ca valori sfârșește prin a fi unul dintre cele mai caracteristici puternice de activarea JavaScript- ca un limbaj de programare. În afara a tuturor lucruri minunat se poate face, la fel ca o caracteristică a Limba în ceea ce privește modul în care că face lucrurile mai ușor pentru a programa și permite pentru lucruri care nu sunt deosebit de bine-potrivite pentru web, Programare funcțională și funcțional Aspecte de programare ale JavaScript este una dintre cele mai concepte puternice, care există în JavaScript-- dacă mă întrebi pe mine. Misto. Deci, următorul lucru. Pe lângă faptul că funcțională, există, de asemenea, elemente de JavaScript că sunt orientate-obiect, care este unul din foarte cuvinte buzz populare în informatică. Programarea orientată pe obiecte este un lucru foarte popular. JavaScript are o versiune de care, în cazul în care cred că orice valoare este, de asemenea un obiect, ceea ce înseamnă că fiecare obiect împachetări împreună un numar de valori. Deci, pentru valori care sunt simple, cum ar fi un număr întreg, cum ar fi varX egal 5, acel obiect încheie doar că o valoare. Dar ne putem imagina, de asemenea, o situație where-- ne putem gândi la situații în C în cazul în care ne-am dorit să facem ceva cu structs, de exemplu, care se infasoara in mai multe Valorile împreună și mărcile într-adevăr ușor să treci lucrurile în jurul valorii. Asta e atunci când un obiect este în JavaScript. Este important să ne amintim când spun că obiectele împachetat unele număr de valori împreună, că funcțiile sunt, de asemenea, Valorile, ceea ce înseamnă că funcții pot fi, de asemenea în interiorul unui obiect JavaScript. Și motivul pentru care este important este că, în timp ce noi de multe ori cred că de asteptare o metodă pe un obiect care este de un termen populare din alte limbaje orientate-obiect populare, una dintre diferențele aici este faptul că toate că o metodă este în JavaScript este o valoare stocată în interiorul unui obiect care efectuează unele action-- posibil utilizând alte valori care sunt în interiorul de acel obiect, dar nu neapărat. Deci, vă puteți imagina o situație, am ghici într-un pic de un mod nebun, în cazul în care te-a chemat o metodă de unul opoziție pe un alt obiect, de exemplu. Deci, e un pic funky, în acest mod. Și puteți schimba, de asemenea, metodele de care sunt asociate cu un obiect prin atribuirea acestei metode o Funcția nou, care este, de asemenea, destul de diferit de alte limbaje orientate-obiect, în cazul în care odată ce vom declara un obiect și-l instantia, nu putem schimba metodele care sunt mai asociate cu acel obiect. Așa că e destul de diferit. Misto. Deci, aici este un exemplu, în primul rând, a unui obiect în acțiune. Aceasta este ceea ce se numește un obiect generic, care înseamnă că nu are nici nume special, nu are o clasă, e doar o parte ambalaj de valori. Și modul în care arată este, ne-am această pereche de exterior buclat acolade aici care indica JavaScript și spune, acest lucru este un obiect. Valorile interiorul de ea sunt fiecare valori în interiorul a obiectului care trebuie fi înfășurat împreună. Și în interiorul acelui obiect, avem apoi perechi de valori-cheie, în cazul în care cheia se referă la numele din valoarea interiorul obiectului, iar celălalt side-- vizavi de here-- colon este valoarea reală care trebuie depozitate. Deci, vedeți aici că avem o cheie numit fn cu valoare Sam, urmată de o virgulă, spune pe următoarea intrare. Apoi, o cheie numit LN, cu o valoare de verde, urmată de o virgulă, urmat de "print", care va avea o valoare funcție care este de gând să facă acest lucru linie de cod. Să luăm un pas înapoi și despacheta ce se întâmplă aici. Deci, acest lucru este un pic complicat, și vedem ceva nou pentru prima dată. "This" cuvântul cheie este noul lucru vedem aici, și ceea ce face acest lucru este, se referă la curentul obiecții în domeniul de aplicare, nu? Așa că atunci când spunem, aceasta arată tot drumul înapoi la toată această object-- atunci când facem this.fn, vom merge tot drumul înapoi la acest obiect, du-te la valoarea fn și de a lua Sam, trageți-l până la capăt înapoi, stick aici, și apoi trece mai departe. Audiența: Deci, cu recuperarea, este că face din cauza parametrului definiţie? SAM VERDE: Deci, întrebarea a fost, este regăsire făcut din cauza parametrului definiţie? Da, absolut. Ce se va întâmpla aici este, acest punct spune JavaScript, OK, Primesc o anumită valoare de la acest obiect de la mine. Și apoi o să căutați o intrare numit fn, iar în cazul în care se constată, acesta va returna că value-- așa, e Sam. Dar aș fi putut, de asemenea, tastat ceva ce nu a fost definit aici, și atunci ar doar reveni undefined-- care este un lucru care poate JavaScript face, ceea ce poate avea beneficii, dar e also-- dacă faci o greșeală de scriere, aceasta poate duce la erori ciudate. Așa că voi încerca doar să găsească tot ce se spune pentru a găsi și nu va se plâng dacă nu-l găsiți. Va spun doar, nu am se pare, și apoi trece mai departe. Asa ca ar fi nedefinit, plus martor, plus numele de familie. Da. Și apoi putem vedea că dacă ne-am ar putea merge apoi în jos și access-- și numim tf.print (), cu paranteze. Se va numi asta imprimare Funcția cu nici un argument, nu? Dar dacă ne-am spus tf.print () punct și virgulă, fără paranteze, tot ce ar fi făcut este trage în funcția de valoare, dar nu de fapt numit. Misto. HUGH Zabriskie: În cazul în facem un obiect? SAM GREEN: Sigur, hai să facem asta. Așa că am putea muta acest exemplu la consola. Ne putem imagina că am un obiect. Deci, acest lucru este un obiect simplu. Aceasta este un obiect care contine doua valori cu două chei, două valori cheie perechi. Deci, eu pot accesa apoi valoarea memorată în interiorul acestui obiect de a face x.x1, de exemplu, și mă întorc 1. De asemenea, x.x2, pentru a primi această valoare înapoi. Și acum lucrul foarte cool este, eu pot adăugați de fapt, ceva la acest obiect după ce l-am creat. Deci, vă puteți imagina, să spune că au o funcție. HUGH Zabriskie: Ai trebuie să faceți Shift-Enter. SAM GREEN: Oh, asta e enervant. Ce a făcut-o nu ca? Oh. Începem. Misto. Așa că doar am creat Această funcție, f, care este de gând să meargă la curent obiect și this.x1 imprimare. Deci, dacă doar eu numesc f de în sine, nu se întâmplă nimic să se întâmple, chiar, pentru că nu există nici o x1 câmp în obiectul este referindu-se la. Dar, dacă spun, x.f = f, și apoi m-am apel x.f (), am de gând să mă întorc 1. Această funcție f este acum asociată cu obiectul X, care are o x1 cheie numit asociată cu valoarea 1, asa ca atunci cand numim this.x1, e de gând să găsească ceea ce caută și să fie capabil de a imprima o valoare afară. Deci asta e doar un exemplu de acest fel de lucruri nebunești se poate face cu obiecte în JavaScript. Astfel încât versiunea a fost versiune generic, sensul că am creat un obiect folosind acest paranteze notație bretele notation--, rather-- și asta e îndemână, dacă vrem doar o instanță a unui anumit obiect, dar Ce se întâmplă dacă vrem să avem mai mult de un de același tip? Iar răspunsul la această Întrebarea este, există lucruri numit clase în JavaScript, de asemenea. Putem crea o functie care nu un fel de initializare pentru un obiect străin, și am spune, cum ar fi, class-- mea astfel încât numele a object-- reutilizabile este egal cu funcție care se stabilește. Deci, ce ar fi echivalent a este de a crea un obiect care ar fi la fel ca, bretele buclat, str, colon, acest lucru este un șir de caractere, punct și virgulă, bretele buclat. Asta ar fi generice obiect am inițializa, cu diferenta o fi pe următoarele linii vom crea un prototip, care înseamnă că este o cheie implicit care vom adăuga la obiectul nostru, care are valoarea listate aici. Ceea ce înseamnă că, atunci când am crea un nou exemplu de acest obiect MyClass, se va fi pre-construit în interiorul se o valoare numită str și o altă valoare numit myPrint, care este O să fie o funcție. Incredibil. Grozav. Deci, ultimul lucru pe care la spune despre JavaScript este faptul că este foarte util pentru ceea ce sunt numite operații asincrone. Mijloace Asynchronous este că noi poate aștepta pentru o operație pentru a finaliza înainte de a ne muta pe, dar trece în timp ce așteptăm și apoi au ceva se întâmplă mai târziu. Și ce vreau să spun prin asta este, tu poate imagina o situație în care trimiteți o cerere unele server de web undeva, și o să să te trimit înapoi unele mare parte din date, nu? Și utilizator ar putea aștept în Între timp pentru ca să se întâmple, și nimic nu ar putea fi întâmplă în acel moment. Dar asta nu e un design deosebit, nu? Nu vrei pagina web să înghețe. Ce se întâmplă dacă utilizatorul dorește să faceți clic pe un meniu drop-down? Nu e un model de design mare. În schimb, practic ceea ce JavaScript nu este spune, OK, face această operație asincron. Deci cum ar fi, așteptați în fundal, și apoi atunci când operațiunea se face, apel apel invers function-- apel o funcție, nu unele action-- pentru a semnala faptul că operațiune am fost de așteptare pentru a termina s-a terminat. Și motivul pentru care este foarte puternic este, putem face ceva, trece un argument, face ceva, și apoi așteptați să se întâmple ceva. Apoi, o dată că ceva se încheie, se poate apela un apel invers. Asta e foarte la îndemână, pentru că vă permite ne facem lucruri cu API-ul Web Audio, de exemplu, ca o sarcină fișier audio de la un server la distanță fără a fi nevoie să așteptați pentru întreaga fișier audio pentru a fi încărcate, care ar fi cu adevărat rau pentru experiență de utilizare. Misto. Ultima cuplu note despre depanare, deoarece acest este un lucru pe care ai de gând să aibă de a face ca parte a proiectului, garantat. Am menționat consola JavaScript. Este o caracteristică foarte util de toate browserele moderne, Și suntem cu adevărat, va incurajam pentru a obține confortabil folosind consola, dacă doriți să obțineți bun la JavaScript. Este foarte util pentru depanare, dar este, de asemenea într-adevăr util pentru imaginind cum să folosească un API. Acesta permite într-adevăr experimentare ușor fără a fi nevoie să tastați unele cod, și apoi compila. Tu nu trebuie sa faci toate aceste etape. Puteți scrie doar unele cod într-o linie, și apoi obține un feedback imediat sau nu această linie de cod worked-- foarte util. Și, de asemenea, doar un note-- tehnică consola JavaScript este un exemplu de un REPL--, astfel încât R-E-P-L, REPL, care vine de la citit, să evalueze, buclă de imprimare. Vei tip unele lucruri în, acesta va citi ceea ce ați tastat în, acesta va evalua, și-l va imprima de ieșire, iar apoi acesta va începe din nou. Care vă permite să meargă rapid în cercuri iterarea, care este foarte misto. Cred că ultima reală note-- acest este, de fapt nota trecut, da. Cum putem folosi de fapt JavaScript? Deci în primul rând, putem importa l folosind o etichetă script în partea de sus sau de jos a unei HTML file-- oriunde în interiorul unui fișier HTML, într-adevăr. Și în termen de o etichetă script, există două sub-moduri de a importatoare JavaScript. Primul este de a avea o fișier separat JavaScript pe care le importam in totalitate, sau prin care au o suprafață de cod ca script pentru a începe, și apoi script backslash să se încheie. Și apoi ne-am scrie JavaScript în interiorul fișierul HTML. Acestea sunt cele două moduri. Nu-l poți avea în interiorul HTML. Audiența: Este unul mai bun decât altul? SAM VERDE: Întrebarea a fost, este unul mai bun decât celălalt. Deci, da, ca practică stil de codificare, și, de asemenea, e ca o practică de design. Există două motive de ce ar fi mai bine. Primul este, face codul o mult mai ușor de citit dacă toate HTML este într-un singur loc, toate CSS este în un alt loc, toate JavaScript este într-un al treilea loc. Dreapta? Cred că ar trebui vorbit deja despre aceasta în sections-- ca CSS-- ce că este-- și merge de multe ori într-un alt fișier. Deci, un fel similar de conceptul aici. Vă puteți imagina, de asemenea, că JavaScript ar fi reutilizate pe mai mult de un Pagina HTML, sau poate o foarte multe pagini HTML, și având ca JavaScript refactored într-un singur fișier pe care le puteți importa în mai mult de un singur loc permite codul de a fi mod mai întreținut. Vă puteți imagina a face unul schimba JavaScript și având să-l schimbe în 100 de fișiere diferite. Și în loc să putem schimba doar într-o singură, care este mult mai puternic. Ti-am răspuns la întrebare? Misto. Putem, de asemenea, de tip în consolă, cum am menționat mai înainte. Și din nou, o ultimă note-- Web Audio este construit în, nu aveți nevoie pentru a încărca nimic. Misto. Există întrebări, aveți orice mai multe întrebări despre JavaScript, înainte de a ne muta pe? Audiența: [inaudibil] SAM GREEN: Bine, rece. Deci, acum el va vorbi despre API. HUGH Zabriskie: cool. Mulțumesc, Sam. SAM VERDE: Sigur. HUGH Zabriskie: Awesome, așa ne vom muta pe la JavaScript. Așa că am vorbit despre unele dintre principiile de bază ale JavaScript, iar acestea sunt variabilele, funcțiile, obiecte, funcționează ca variabile, încărcare asincron. Acestea sunt toate lucrurile pe care le veți vezi măsură ce utilizați Web Audio. Deci, noi suntem doar vorbi despre aceasta mai întâi la un nivel ridicat. E un API, asa ca este ceva care este construit, după cum a spus Sam, chiar în JavaScript pe care le utilizați în consola. Și este de fapt la fel ca C ++ cod care este cu adevărat construit în Chrome și Firefox, precum și toate aceste browsere. Deci, ideea principală cu Web Audio este că aveți acest tip de conducte de audio, nu? Deci, datele audio vine în într-o formă. Există un fel de trei forms-- principale aveți oscilator, care creează o undă sinusoidală, val cosinus, vom vedea cum care funcționează. Un alt foarte frecvente, Desigur, este un MP3. Deci, poate începe cu o melodie, și apoi vrei sa faci unele de filtrare pentru că și de ieșire that-- care ar putea fi o posibilă sursă. Și apoi o foarte cool unul este microfonul. Astfel, puteți utiliza unele foarte solicită de bază în JavaScript pentru a obține acces la microfon, și așa mai departe, dacă a vrut să facă o aplicație ca un detector pas, de exemplu, care ia în voce și dă seama ta pitch-- mod foarte usor de asta. Puteți doar un fel de a citit- în, dau seama de frecvența, și apoi de ieșire un număr. Deci, vom vedea cum funcționează, de asemenea. Destinația este de fapt în cazul în care datele audio este transmis. Deci, în general,, e ca și cum difuzoarele laptop. Alte opțiuni sunt ca un ScriptProcessorNode-- vom ajunge la noduri într-o second-- dar în esență, Ori pui de sunet din prin intermediul computerului prin difuzoare, sau esti un fel de ea de înregistrare, astfel încât te-l stocarea ca date audio. Deci, poate că, dacă cineva creează muzica în aplicația și apoi doriți să înregistrați ca și cum ar fi, poate, export-l la SoundCloud, pentru example-- care ar fi o modalitate de a face acest lucru. Toate lucrurile distractiv, care vom vorbi despre, se întâmplă între aceste două puncte, în cazul în care ne-am încărca în muzica și apoi transmis la ieșire. Deci, am de gând să vorbesc despre cele cinci etapele de producție audio într-o secundă. Avem acest lucru numit un AudioContext, care este acest mic înveliș vedem aici. Practic ceea ce AudioContext este-- dacă am du-te la consola JavaScript, chiar acum, putem crea unul chiar acum. Doar un exemplu de REPL, nu? Suntem de lectură, evaluarea, și se imprimă. AudioContext este un stat global. E o struct, este un obiect aici, și-l păstrează informații despre lucrurile care se întâmplă pe ecran legat de audio. Un exemplu este ora curentă. Aceasta vă spune numărul de secunde, foarte precis, deoarece pagina web incarcata. Deci, aceasta este o foarte util mic de proprietate pe care le puteți folosi. Este citit only-- cred de fapt puteți încerca să setați o valoare. Va spune că a stabilit, și apoi, dacă imprima again-- nu a făcut de fapt munca destul de. Deci, nu sunt numai în citire proprietăți în JavaScript. Acest lucru este foarte util în cazul în care te fel de sincronizarea o mulțime de diferite informații, atunci când sunteți fel de a juca diferite sunete. Un alt unul foarte util este destinatia context. Categoric, dacă ești interesat, să fie Încerc acest lucru la propriul drept consolă acum. Deci aceasta este o AudioDestinationNode. Practic ceea ce spune acest lucru este, în cazul în care este de ieșire merge? Deci, există două opțiuni reale aici. De obicei, implicit este doar difuzoarele, așa AudioDestinationNode practic doar spune există zero, iesiri la sunetul vine, trimis la difuzorul. Deci, în general,, nu trebuie trebuie să se joace cu asta. Dacă sunteți interesat de fapt, folosind ScriptProcessorNode pentru înregistrare, cu siguranta trage-mi un e-mail mai târziu, pentru că este un pic mai complicat. Dar, în general, ești doar un fel de scoate sunetul într-o formă. Atât de cool, vom sări înapoi aici. Audiența: Îmi pare rău. HUGH Zabriskie: Da. Audiența: Stiu ca ai spus să vorbești mai târziu despre înregistrare. Poți interfață care cu Pro Tools? HUGH Zabriskie: Cu Pro Tools? Sa vedem. Eu nu cred acest lucru. Deci merge între client, care este JavaScript consolă, și reale dvs. calculator, este în general ceva care este un fel de în afara limitelor, dacă va, natură prin natura the-- e un fel de lucru de proiectare, dar încercați să păstrați browser separată de calculator real utilizatorului. În general, singurul lucru pe care sunteți în măsură să accesul este microfonul sau camera. Nu ești în stare să am Nu cred că, utilizați Pro Tools. Cu toate acestea, în cazul în care ați creat o piesa in Pro Tools, exportate că, ai putea încărca că aici, se filtreaza, de exemplu, proces care, și înregistrează că într-un Audio Destination-- sau, no-- o sferă Nod procesor. Și apoi de acolo, ai putea de export, care să SoundCloud, vă ar putea trimite un e-mail la, sau ce vrei de acolo. Dar există un fel de o ușoară barieră între a face muzică de pe computer și de a face muzică online. SAM VERDE: Și asta nu unic pentru acest API. Este o caracteristică de securitate de Chrome și Cred ca orice alt browser modern. Browser-ul este autonom. Deci, de exemplu, o pagină web nu poate folosesc JavaScript pentru a transforma sunetul pe la boxe, de exemplu. Sau nu se poate transforma calculatorul oprit. Și nu există nici un punct intermediar între aceste două lucruri, chiar, deci fie aveți o abstracție complet, sau deschide breșă de securitate de a lasa un programator cu intenții rele fac ce vor cu laptop-ul. Și de aceea Chrome este autonom. HUGH Zabriskie: Da. Are sens? Foarte tare. Am fost doar de gând să arată un exemplu de unul. Acest lucru este destul de mult la fel de măsura în care te, în ceea ce privește de accesare calculatorul utilizatorului. Dacă aveți o tastatură USB conectat, puteți utiliza ceva numit Web MIDI API, care nu vom într-adevăr vorbesc despre aici, dar aceasta este o altă API care este construit în cel puțin Chrome-- din nou, de aceea ne place Chrome-- Cred că Firefox sau Safari, acesta este un lucru ușor de browsere google-- diferite au suport diferit pentru care API-uri care le-au pus în aplicare. Dar dacă ai vrut să conectați o tastatură și de a lucra cu aceste informații, un fel de a trimite tastaturii informații pe la calculator și apoi utilizați ca on-line, acest API este în cazul în care ai fi de lucru care. Misto. BINE. Deci, repede se deplasează pe aici. Cum facem la timp? SPEAKER 1: Despre 15. HUGH Zabriskie: 15 minute la stânga? Bine, in regula. Deci, vom concura înainte aici. Deci, practic, principalul punct de gândire de acest lucru ca pe o conductă este faptul că fiecare pas în conducta este o serie de noduri audio. Sursa noastră, să spunem, este un oscilator. Avem nevoie de a crea un nod oscilator. Si asta este doar un fel Micii function-- și acestea sunt toate bazate pe contextului audio aici. Audiența: Când a spus oscilator, nu înseamnă că este de fapt literalmente merge din doi poli diferite înainte și înapoi? HUGH Zabriskie: Nu, e ca si cum o reprezentare digitală. Este implementat de fapt, în C ++. Eu de fapt, nu știu specificațiile de modul în care este pusă în aplicare de fapt se, dar toate acestea este de lucru ca date binare. De fapt, da. Asta ar putea spune, am putut de fapt, daca esti interesat, Aș putea trimite un pic mai mult informații despre modul în forme de undă sunt ținute având un format digital. Bine, in regula. Deci ne generând un sunet ca o condiție sine val sau ceva de genul asta, poate 440 Hertz. Vom crea un oscilator. Dacă vrem să setați volumul, am conectați nimic la un GainNode, pe care am putea face cu .creategain. Care stabilește volumul. Puteți trece că pe orice pe de altă parte options-- bine, astfel o sursă audio tampon nod este în cazul în care s-ar putea stoca un MP3 care le-ați încărcat în. Filtrul Biquad este pentru filtrarea dacă doriți să luați toate de bază din de un cântec, sau ceva de genul asta. Doamne ferește doriți să luați baza dintr-un cântec. Și nod AudioDestination este, din nou, ca în cazul în care finalizarea noastră este. Dacă sunteți interesați să vadă vreodată toate diferitele opțiuni posibile, du-te la tab-ul și lăsați auto-complete veni. Și dacă creează, veți vedea toate diferite lucruri pe care le poate crea. Puteți crea dinamic procesoare script, Nici măcar nu știu ce este, pentru amestecarea fuziuni canal și repartitoare de canal și tot ce. Misto. Deci, aceasta este doar o exemplu de conducte. Deci avem trei surse vine. Poate acestea sunt sub formă de undă, Poate acestea sunt MP3-uri. Unul se trece printr-o filtru, un altul de obtinerea distorsionat un alt panning cuiva stânga și la dreapta. Puteți face tot felul de lucruri și toate amesteca în jurul împreună, și apoi afară vine audio la sfârșitul anului, ca destinație. Acesta este un exemplu de ceea ce mai complicat cod Audio Web arată. Creezi toate acestea diferite obiecte dreapta here-- Nu sunt sigur de acest lucru. Nu, nu mări. BINE. SAM GREEN: Tu faci de control, Scroll-Up. HUGH Zabriskie: Controlul Scroll-- SAM GREEN: Nu, nu. Controla-- HUGH Zabriskie: Oh, de control, defilați? Oh, Te-am prins. Da. Wow, nope, nope. BINE. Nu voi face asta. Deci da, în această primă secțiune aici, veți vedea suntem crearea toate aceste diferite noduri din cadrul. Noi doar le piecing împreună în a doua parte de această funcție numită Connect. Asta e un adevarat cheie funcție în Web Audio. Aceasta înseamnă doar după ce ați făcut ceva cu sunetul într-un singur nod, trece-l pe la nodul următor. Deci avem sursa, aceasta se conectează la analizor, analizorul face ceva cu ea, se duce la denaturarea, și așa mai departe, și la destinația în partea de jos chiar aici. Misto. OK, așa că vom păstra în mișcare pe. Pipeline-- din nou, acestea sunt cele mai frecvente conducte, așa vorbim despre toate aceste lucruri, cum ar fi distorsiune, panning, toate aceste lucruri. Dacă sunteți cu adevărat interesați în utilizarea lucrurile Pro Tools, cei probabil vă interesează. Dacă nu, poate că doar doresc să joace sunetul, sau poate vrei doar să seta volumul sunetul. Acestea sunt cele două cele mai frecvente fel conductelor în producție audio. Din nou, modalități în care puteți lua în calitate de oscillator-- Deci, să face un demo de care chiar aici. Deci vom crea un context simplu audio aici, și de la care vom pentru a crea oscilator nostru. Deci, care este, din nou, suntem doar O să sun Creare Oscilator. Vom stabili o frecvență pe că, 440 Hertz, tuturor favorit. Apoi ne-am conecta că la destinație point-- care este vorbitorul, asa ca destinația context. În cele din urmă, noi spunem doar, începe la zero secunde de acum, și nu ne-am suna? [Sonerie] HUGH Zabriskie: Aici vom merge. E doar o undă sinusoidală. Bine, in regula. Și apoi ne vom opri asta. Audiența: În cazul în care a făcut feedback-ul de la care provin? HUGH Zabriskie: Feedback-ul? Oh, probabil microfoane noastre. Deci da, asta e cum o faci. Și, de fapt, dacă am avut păstrat de funcționare, vă ar putea avea frecvența ca valoare se execută, așa că e un lucru distractiv de a juca în jurul valorii. Misto. Asta e întotdeauna un minunat de a prezenta. SAM GREEN: Nu au cred despre asta, am? HUGH Zabriskie: Da, Asta e urât. Deci, tampon loading-- voi arata o exemplu de faptul că, la sfârșitul. Asta încărcarea unui MP3. Și microfon, puteți utiliza doar o functie numit Navigator.getUserMedia () să solicite accesul la utilizator microfon pentru aceste informații. Aici e filtrarea, voi ține doar merge de la acest lucru. Acest lucru este destul de ridicat nivel, dar Filtrele doar vă permit să [Bip] De asemenea, vă permite de filtrare pentru a crea lucruri, cum ar fi roz zgomot, zgomot maro, zgomot alb. Dacă doriți să creați zgomot pur, care unii oameni le place să mizerie în jurul cu, puteți utiliza Web Audio de filtrare pentru a face asta. Audio Panning-- astfel imagina dacă scrii un joc si doriti sunetul să suna ca vine, cum ar fi, fotografiere pe ecran, aveți pot folosi panoramare de audio pentru a crea acest tip de con, care like-- e destul de Mathy, dar este de fapt într-adevăr rece dacă aveți funcționează, și nu există ceva bun tutoriale pe ea pot să vă trimit. Practic, puteți fel de a crea sunet de ceva care merge prin într-un mod 3D. Și, dacă aveți un interes DJ, puteți începe de amestecare și cruce cântece decolorare. Acest lucru este doar un foarte de bază cod, practic ceea ce am făcut înainte. Aceasta setează volumul oscilator, așa că am crea oscilator nostru care creează forma de undă. Noi cream GainNode nostru, setați frecvența noastră, și apoi conectați la oscilatorul GainNode, care apoi se schimbă în esență cât de mult semnal este permis prin intermediul. Dar, de fapt, este un digitală lucru, asa ca este mai doar-- da. Asta nu e ceea ce se întâmplă de fapt, dar asta e ceea ce se întâmplă în viața reală cu un câștig. Audiența: --quantization parametrului volum? HUGH Zabriskie: Ne pare rău? Audiența: Este un parametru volum cuantizat? HUGH Zabriskie: Da. Și acesta este un lucru eu sunt foarte deficit pe la cunoștințele mele, cum funcționează câștig la un nivel digital. Știu cu real semnale, este practic controlul cât de mult sunteți amplificare a semnalelor. Deci da. O să-ți trimit mai multe informatii despre că, pentru că aș fi curios de fapt să știe mai multe despre asta. Dar în esență parametrii sunt, unul este fold-- signal-- tare si zero nu este semnal, sau nu veți auzi nici un sunet. Vom sări peste timp demo pentru că, din cauza este practic ceea ce am făcut înainte. Și, din nou, Context.Destination este nodul destinație audio. Minunat, OK. Deci, am de gând să fac o scurtă două demo-uri. Cum facem la timp? SPEAKER 1: aproximativ 10 minute. HUGH Zabriskie: 10 minute? Grozav! Incredibil. Deci primul am de gând să nu, se numește My Song preferat. Deci, aceasta este doar o mic HTML JavaScript. Vom avea două butoane pe pagina juca piesa mea preferata și se va opri melodia mea preferată. Voi schimba acest lucru. Audiența: Acoperiți microfonul. HUGH Zabriskie: Da. Și am încărcat aici un script care basically-- și acest lucru este într-adevăr util pentru încărcarea unui MP3, astfel încât aceasta face doar încărcare MP3 mod mai rapid. Este practic doar un înveliș. Este doar face procesul de încărcare în MP3-uri mult mai rapid, în caz contrar pe care îl utilizați cerere HTTP, un fel de ceea ce faceam pe piesa curentă set cu Server. E foarte urât, tu Nu vreau să o fac. Deci tipul ăsta, Boris IMM-uri, a scris un foarte instrument util mic numit BufferLoader. Tot ce faci este pur și simplu trece este context, îl o list-- trece sau, da, este o listă în JavaScript? SAM GREEN: O matrice. HUGH Zabriskie: Oh, acesta este o matrice, ce-i drept. Este o serie de căi la diferite fișiere. Și apoi l o funcție trece. Aceasta este callback am vorbit despre cu încărcare asincron. Acest lucru va fi numit odată fișierele încărcate. Și această funcție, care este numit, atunci când dosarul anii încărcat ia ca un perimetru o serie de tampoane încărcate. Deci, care are loc aici. Practic, este BufferList O să fie o value-- sau va fi o serie de lungime unul, care are în el în index zero întregul dosar încărcat de MP3. Deci, ceea ce fac atunci când am terminat încărcare este, pur și simplu a crea o sursă de tampon, care este un nod sursă tampon audio. Următorul pas este să încărcați în source.buffer ca tampon încărcate completă din BufferList-- este o mulțime de buffers-- și apoi vă conectați că audio tampon la destinație. Deci, ce se va face este pur și simplu pune MP3 aruncată în ieșire, și-l începe imediat la obtinerea acestui apel. Rece, așa că să vedem acest lucru în acțiune. My [auzite] aici, să vedem. Deci, eu sunt doar de gând să începe un server de bază. Asta e ceva ce ce trebuie sa faci daca esti face cereri de fișiere de încărcare. Am de gând să înceapă un server de bază. Aceasta este de fapt întreaga PSET acum în o singură linie, dar este doar incepand un server pe portul 80/80. Deci mergem pe aici, am va pentru a încărca 80/80, vom merge la My Song Favorite. Deci, dacă am lovit "piesa mea melodia preferată ", chiar acum, se va încărca meu de melodia preferată și să se joace it-- [MUSIC - Eagles, "LIFE în rapid  BANDĂ"] --which se întâmplă să fie "Viața în Fast Lane "de Eagles. Acum, aș putea lovi "Stop meu cântec favorit "și reluarea acesteia. [MUSIC - Eagles, "LIFE în rapid  BANDĂ"] Și dacă mă duc pe la consola, deoarece Am folosit o variabilă globală aici pentru a urmări această valoare, fapt va fi recunoscut în consola. Deci, auto-creează pentru mine. Deci, asta e ceea ce se joacă acum, si eu pot pur și simplu apel source.stop () pe asta. Ei bine, știi ce? Doar așa voi au auzit acest song-- s-ar putea recunoaște această melodie. [MUSIC - Rick Astley, "Nu se va GIVE  TE-AI TREZIT"] [MUSIC - Eagles, "LIFE în rapid  BANDĂ"] Am fost acum toate Rickrolled. OK, mare, se deplasează pe. Misto. Deci, aceasta este, în principiu un exemplu de doar cum ai putut încărca un MP3 file-- [MUSIC - Eagles, "LIFE în rapid  BANDĂ"] --and-l joace, și se va opri și porniți-l. Aș fi putut face mult mai mult [Inaudibil] Ultima voi face este, Am să-ți arăt o [neauzit]. [MUSIC JOC] E ca și cum, ogg.wave.mp3. Cred că, dacă îmi amintesc corect, Am rula în unele probleme cu .m4a, dar eu nu sunt sigur de asta. Cred că mp3.wave-- [MUSIC - Rick Astley, "Nu se va GIVE  TE-AI TREZIT"] Bine, minunat. N-ar fi spus asta. Oricum, salut. Deci, avem acest deschise. Așa că acum tot ce fac e, am creat practic o sintaxă de bază pentru crearea de muzica. Deci, dacă fac ceva de genul, adăugați g4 la 1 2, ceea ce înseamnă că este faptul că, adauga nota de pian, G4, care este al patrulea G până la pian din partea de jos. Deci acest este un fel de MIDI vorbesc, Deci, pentru cei care sunt pe bază de muzică, acest lucru este doar note MIDI. Audiența: Asta e G a C Mijlociu, nu? HUGH Zabriskie: Aceasta este G de mai sus Orientul Mijlociu C, ce-i drept. Audiența: Deasupra Middle C. HUGH Zabriskie: Da. De fapt, da. Cred că am făcut de fapt are un [neauzit], astfel încât aceasta ar putea fi o octavă mai sus care. Deci, să vedem. Dacă am lovit Play-- [Repetitive PIANO NOTA] --we're auzi asta. Ideea este că funcționează la fel ca o linie de comandă ar fi, Deci, dacă mă duc sus și în jos pe tastatura mea, poate reveni la anterior comenzi, ceea ce este destul de util. Și de mai jos este lista mea de piese, care sunt toate execută pe buclă. Audiența: Ai fost asumarea Tastatura 88-cheie de pe asta, nu? HUGH Zabriskie: Întrebarea a fost, eu presupunând o tastatură de 88-cheie, Și da, eu sunt. Ceea ce am făcut este să practic a luat 88 de probe de pian, unul pentru fiecare notă. Și așa de fiecare dată când auzi o notă de acum înainte, care este de fapt o buclă care arată like-- acest lucru este obtinerea jucat pe bucla, astfel încât pentru fiecare notă, aceasta se execută. Ce se întâmplă este că crea din nou un tampon, Am crea un nod câștig pentru a seta volumul. Aceasta doar un foarte mod complicat de a spune I stoca tamponul într-un source.buffer. Am da câștig, am conectați-l la câștig, câștigul este conectat la de ieșire, iar apoi l-am juca. Așa că este un fel de proces de a lua într-o sursă de tampon. Audiența: Poți lua de fapt, că sunet uscat și să-l umed [Inaudibil]? HUGH Zabriskie: Puteți, da. Nu e re-verb, nu e întârziere, distorsiuni. Puteți pune practic nimic în între care în sandviș de-- bine, conducte este o metaforă mai bună, dar puteți adăuga nimic în asta. Misto. Așa că vom termina demo aici pentru a vă oferi un sentiment de doar numărul mare de ori voi poate rula această funcție dintr-o dată. Deci, am de gând pentru a elimina acest lucru. Am de gând să creeze un generator that-- Practic ceea ce does-- acest lucru este foarte un fel de syntax-- complicat, dar e va genera notele pe zbor, și doar începe să joci le ca le evaluează. [Interpunerea PIANO] Astfel încât să putem face doar un pic de muzica aici. [Interpunerea PIANO] Deci, ce această comandă face, de exemplu, este este nevoie de aceste trei notițe pentru pian si apoi le pune pe B3. Acest lucru ar putea face sintaxă un pic mai mult sens pentru cei care au un muzica de fundal aici. Pot adăuga un tambur lovitură. Eu pot-- [Interpunerea INSTRUMENTE] --just juca în jurul cu. Astfel încât să puteți make-- [Interpunerea INSTRUMENTE] Asta o un pic mai enervant. [Interpunerea INSTRUMENTE] Deci care adaugă la întâmplare un chimval uscat pe fiecare nota 16, cu un 16% [Neauzit]. [Interpunerea INSTRUMENTE] Da, astfel încât modul în care acest works-- este întotdeauna în 4: 4. [Interpunerea INSTRUMENTE] Da, astfel încât patru trimestre, și 16/8. [Interpunerea INSTRUMENTE] Deci, în medie, veți obține 60% de accesări pe note 16. Oricum, acest lucru a fost doar un fel de a scoate în evidență unele din lucrurile pe care le-ar putea construi cu API-ul Audio Web. Este foarte puternic, e foarte rapid, și puteți face o mulțime de lucruri interesante Cu acesta. Deci, din nou, orice intrebare aveti, e-mail myself-- Hugh-- sau Sam, și sincer, Google are o tona de resurse bune. Orice întrebări? Ultimele Da. Audiența: Deci puteți accesa microfonul încorporat. Ce se întâmplă dacă ai vrut să utilizați un microfon mai bun? HUGH Zabriskie: Dacă ați fi dorit pentru a folosi mai bine microfon? Deci, din nou, acest lucru este parte a prezentului abstracție între Chrome și restul computerului. Dacă nu este disponibil prin intermediul un API, cum ar fi Web MIDI API, ai putea găsi, probabil, unele hacks, dar în general nu este realizabil. SAM VERDE: Puteți also-- toate Chrome știe este ceea ce microfonul implicit este, și se accesează asta. Deci, dacă ați avut un microfon ai putea setat ca implicit microfonul calculatorului, ai putea accesa acest fel și, probabil, s-ar funcționa. HUGH Zabriskie: Asta-i un bun punct. N-am încercat asta, dar s-ar putea fi în măsură să fel de-- dacă redirecționați vorbitor de intrare, s-ar putea fi capabil de a face acest lucru, da. Orice întrebări? Ultimele Misto. Ei bine, va multumesc atât de mult pentru vizionarea. Sunt Hugh. SAM GREEN: Sunt Sam. HUGH Zabriskie: Și acest lucru este CS50.