SAM GREEN: Hi, të gjithë. Mirë se vini në seminarin tonë. Emri im është Sam. Hugh Zabriskie: Jam Hugh. SAM GREEN: Dhe ne jemi duke shkuar për të folur sot për JavaScript dhe API Web Audio. Vetëm për të filluar, ky është një skicë e agjendës sonë për seminar. Ne jemi duke shkuar për të filluar duke folur për pse ju duhet të jenë të interesuar në Web Audio API, pse është JavaScript gjuha që ju duhet për të, dhe pastaj të flasim për JavaScript essentials-- kështu si, të ecin nëpër disa bazat e gjuhës, dhe pastaj të flasim për API Audio në nivel të lartë. Pastaj, Hugh do të flasim për disa nga fazat e prodhimit audio dhe pastaj demo këtë sequencer tmerrshëm Projekti ai ndërtoi dhe ju tregojnë kodin. Dhe pastaj, ne do të kemi kohë për Pyetjet në fund për njerëzit që janë këtu jetojnë. Hugh Zabriskie: Best. SAM GREEN: Best. Hugh Zabriskie: Best. Unë do të të mbështetur. SAM GREEN: Pra, gjërat e para të parë. Pra, një nga gjërat e mëdha në lidhje me Web Audio API është se nuk ka asnjë set deri nevojshme. Ajo vjen ndërtuar në të shfletuesit më moderne, duke përfshirë Chrome, EDGE, një e tërë bandë e others-- gjithë atyre pjesë që të mëdha të njerëzit janë duke përdorur sot. Kështu që nuk ka ngritur asnjë, përveç vetëm duke u një web server shkuar, për ju të merrni filluar punën në projektin tuaj, i cili është i madh. Ne rekomandojmë goxha rëndë që ju e konsideroni duke përdorur Chrome për Mjete Zhvillimi JavaScript, vetëm për shkak se zhvilluesi i saj Mjetet janë me të vërtetë të fortë. Si një shembull të vetëm atë që ne do të thotë duke thënë hapur tuaj JavaScript console-- në qoftë se ju shkoni në Chrome dhe ju shikoni në ndonjë web faqe, dhe ju la klikoni Inspect Element, dhe pastaj ju shkoni në këtë pak drop-down të drejtë këtu dhe ju klikoni mbi tastierë, ju do të shihni se çfarë hap duket shumë si një komandë të shpejtë që ju mund të shihni në Mac tuaj, ose në ID. Dhe vetëm si kjo, ne mund të lloj urdhëron këtu, si të qarta, dhe komandat e tjera si kjo. Ne mund të krijojë variablave, si ne do të shohim më vonë në JavaScript. Dhe kështu që çdo gjë që ne mund të bëjmë në JavaScript, ne mund të bëjmë me tastierë, dhe kjo është një mënyrë super të dobishëm për të fillojnë të luajnë rreth me TV dhe duke u kënaqur me JavaScript drejtë të fjalës. Nuk ka ngritur kërkohet, e cila është me të vërtetë e bukur. Ftohtë. Mbresëlënës. Pra, vetëm një gjë më shumë për të shtuar. Nëse keni ndonjë questions-- ka shumë prej jush që nuk janë këtu jetojnë, të ndjehen të lirë të email us-- këto janë adresat tona email. Nëse keni pyetje ju nuk doni të na pyesin, si, oh unë kam një bug në kodin tim, apo diçka kjo është pak më specifike, ndoshta Google atë më parë. Nuk janë një shumë e burimeve të mëdha në lidhje me Web Audio API atje. Është me të vërtetë mirë dokumentuar dhe ajo e të qenit përdorur nga një ton të njerëzve në industrisë, dhe njerëz të cilët janë vetëm ndërtuar gjëra zbavitëse për veten e tyre. Pra, nuk duhet të jetë shumë e burimeve atje. Mbresëlënës. I ftohtë, kështu që pse Web Audio API? Ky diagram është pak e një evoluimin e rrugës shëndoshë në web është rritur me kalimin e kohës. Bgsound ishte si HTML tag origjinale se Internet Explorer përdoren për të mbështetur. Është e lejuar vetëm për tingëllon mjaft themelore, funksionalitetin nuk ishte shumë e fuqishme, dhe ju nuk mund të bëjë sekuenca e komplikuar, ose kontroll kur zë filluar dhe u ndal shumë fuqishëm. Pra, kjo nuk ishte veçanërisht zhvilluar mirë. Pastaj, pas kësaj, Flash erdhi along-- cili, Unë jam i sigurt se ju djema janë të gjithë të njohur me Flash-- ndoshta jo se si funksionon, por ju keni parë me siguri atë. Ju keni marrë për të rinovuar Flash tuaj Plug-në, gjithë atë lloj stuff, dhe që sigurisht zgjeruar gamën i funksionalitetit që ishte në dispozicion. Por duke e bërë përdoruesit të instaluar një plug-in është definitivisht një pengesë për të përfshirë Flash në aplikimin tuaj, apo jo? Sepse atëherë ju jeni i varur nga përdorues shkuar dhe gjetur këtë plug-in, dhe ndoshta duke u shndërruar nga jashtë këtë hap shtesë ata duhet të marrin për të përdorur app tuaj. Dhe pastaj nuk mund të jetë një update që do të thyejnë të gjithë aplikimin tuaj, dhe ai përfundon duke qenë një makth për zhvilluesi i saj, too. Kështu që ishte një barrikadë. Dhe pas kësaj erdhi së bashku, tag audio HTML, i cili është një tipar i HTML-- më moderne në të cilën sigurisht lejuar për shumë më tepër gjëra, por edhe gjëra që ju mund të bëni Ka qenë një pak të kufizuara vetëm si rezultat i gjërave se HTML ishte në gjendje të. Pra, kur të aktivizoni Java API, Web Audio API, u bë një standard praktikë në të gjithë shfletuesit, që me të vërtetë zgjeruar vendosur e mundësive për zhvilluesit të vërtetë të marrë në ndërtimin e gjëra të ftohtë për web. Për një kohë të gjatë nuk kishte qenë mjetet me të vërtetë të fuqishme për aplikime të native speakers audio, like-- të gjithë e dinë GarageBand, dhe atëherë padyshim ka më shumë Audio përzierjen kërkesat profesionale, dhe atë lloj stuff. Por nuk ka pasur një Cloud-- të vërtetë të mirë nuk Cloud, vërtet, unë mendoj Cloud-- platformë web-based që do të lejojë zhvilluesve të të ndërtuar aplikime për njerëzit për të bërë audio përzierjen. Dhe, ndërsa ai do t'ju tregojë më vonë, Web Audio API lejon për të vërtetë i fuqishëm gjëra të ndodhë me të vërtetë thjesht, e cila është pretty cool. Pra, kjo është udhëzim për pse ju duhet të ndiqte vazhdimin e seminarit, në thelb. Dhe tani, unë jam duke shkuar për të folur për disa elemente themelore vetëm JavaScript-- e gjuhës, në mënyrë që ne mund të jetë në të njëjtën faqe kur ne flasim për API pak më vonë. Ftohtë. Pra, kjo është një përmbledhje. Harrova kjo ishte këtu. Po. Hugh Zabriskie: Ka dy slides këtu. SAM GREEN: Kjo është përmbledhje e disa prej kufizimeve e detyrueshme, metodat e tjera të vjetra. Dhe pastaj tani, ne kemi këto gjëra. Ftohtë. Mbresëlënës. Pra, të domosdoshme JavaScript. Së pari gjërat parë, ka një ndryshim mjaft i rëndësishëm në JavaScript kundrejt në një gjuhë si C, në mënyrë se variablat janë krijuar. Pra në C, ne jemi të përdoret për të pasur të tipit variablave tona, e drejtë? Dhe unë nuk do të thotë lloj si shkruani ato në, unë do të thotë lloj si të caktojë atyre një kuptim type-- si, një int, një noton, një char. Në C, ishim mësuar me të vërtetë për pasur nevojë të krijojë një ndryshore dhe pastaj rrinë në atë tip për Gjithë kohës që ne i përdorim këtë ndryshore. Dhe kjo nuk është domosdoshmërisht e keqe, por kjo është ndoshta më e vështirë për t'u përdorur. Një nga karakteristikat e ftohtë JavaScript është e se variablat janë atë që e quajti "shtypur dinamike", e cila do të thotë se unë mund të krijojë një ndryshueshme me atë sintaksë, varX barabartë me 5, për shembull. Që krijon fillimisht një numër të plotë variable-- drejtë nën individualitet somewhere-- por unë mund ta ndryshojë këtë variabël për t'iu referuar një varg pa bërë asgjë si duke krijuar një ndryshore të re. Unë nuk kam nevojë për t'u shqetësuar për tipit ndryshimin. JavaScript e di se lloji të ndryshuar, dhe kjo ndodh dinamike. Pra, ka përfitime dhe të meta në atë, si të gjithë ata që ka punuar në JavaScript për një kohë mund të dini. Ka raste kur ju mund të aksidentalisht të ndryshojë llojin e një variable dhe Nuk trajtuar këtë lloj ndryshimi, dhe pastaj juaj JavaScript mund të crash-- ose një përjashtim t'u hedhur, sepse ju do të keni llojin e gabuar kur ju presin një lloj. Ftohtë. Pra, scoping-- cila është si, në qoftë se ne kujtoj javët e para në kurs, referohet si dukshme një variable është dhe në atë zonë të kodit. E gjithë kjo duket shumë e ngjashme për mënyrën se si ajo duket në C. Pra, variablat janë scoped në përgjithësi brenda formatimin e teksteve kaçurrel brenda një funksion, dhe pastaj ka edhe Variablat globalisht-scoped se are-- në qoftë se ju shkruani një ndryshore jashtë funksionit, ajo do të jetë i dukshëm në tërë tekstin. Një dallim në mes JavaScript dhe C në mënyrë të veçantë, është se në qoftë se ju të deklarojë një globale kudo ndryshueshme në një skedar teksti kjo është e dukshme në çdo funksion brenda këtij file teksti. Kjo është e saktë, e drejtë? Hugh Zabriskie: Po. SAM GREEN: Pra, kjo është gjithashtu një pak bit i shokuar në krahasim me C, ku ne gjithmonë duhet të kishte tonë përkufizime ndryshueshme mësipërme vendet ato janë përdorur. Kjo nuk është një rregull që është zbatuar më, kështu, një pak të ndryshme. Dhe përsëri vetëm për të ritheksoj, globale kundrejt variables-- lokale shumë të ngjashme me C. Ju mund të keni dy variabla me të njëjtin emër, dhe kanë një nga emrat e tyre të hije nga një variabël lokale, nëse njëri prej tyre ishte globale. Lloj Pra, i ngjashëm i Problemet se disa prej jush mund të kandidojë në në disa e problemit tuaj vendos deri tani. Ftohtë, kështu që është variablave. Flow Control, që do të thotë si, nëse-else-- stuff-- logjik dhe sythe. Pra, për të filluar me, kjo është ajo që nëse-tjetër deklarata duket si në JavaScript. Vendosja e gjërave të ndryshme në linjat nuk është e rëndësishme. Kjo është vetëm një prej konventave për mënyrën se si ne strukturën kodi. Ashtu si në C, ne kemi një "në qoftë se," një deklaratë kllapë. Kjo nuk është ajo që unë do të thotë të bëj. Unë e bëri atë përsëri. Hugh Zabriskie: Tentimi për të dalë? SAM GREEN: Jo, unë jam vetëm duke u përpjekur për të zmadhuar. Kjo nuk ka rëndësi. Pra, ne kemi një "nëse" deklaratë dhe ne kemi një gjendje brenda saj që vlerëson të vërtetë apo e rreme, dhe që përcakton ose jo ne hyjmë në atë bllok i kodit. Dhe gjithashtu, ne kemi një tjetër-nëse, dhe një tjetër, ashtu si ne jemi duke përdorur për të në C. Ju gjithashtu duhet të jetë goxha të rehatshme të drejtën off bat me sythe, sepse ata gjithashtu duken shumë si C duket. Por ju do të vëreni edhe një herë se ne kanë, në vend të int initializations, ne kemi initializations var. Dhe unë mendoj se ju keni të jenë të kujdesshëm për të bërë i sigurt që ju nuk do të ndryshojë vlerën e unë nga një int në një varg, për shembull, për shkak se kjo do të të shkaktojë sjellje të çuditshme që ju nuk mund presin. Por kjo duhet të shikoni goxha e njohur, po ashtu. Pra, kjo është ajo ku gjërat fillojnë të të marrë një pak i çmendur në JavaScript për dikë që është duke shkuar nga një sfond i C. Ka funksione në JavaScript, dhe ka një mënyrë për të deklaruar një funksion që duket lloj i ngjashëm me C, dhe atëherë ka një tjetër që duket lloj i ndryshëm. Versioni i parë, të cilat ne mund të shohim këtu, është lloj i C-si, ku të themi, kjo është një funksion, t'i jepte një emër, të dhënë numri i argumenteve, dhe pastaj përmbajtja e funksionit shkoni brenda këtyre formatimin e teksteve kaçurrel. Ne do të shohim një shembull të Argumentet në vetëm një sekondë. Ndërsa në rreshtin tjetër, ne shohim, oh, këtu është një ndryshore të quajtur "myFunction" dhe ne barabartë atë për këtë function-- gjenerik thing-- se nuk duket të ketë ndonjë gjë në vazhdim e sipër. Arsyeja që është e ndryshme se C është se JavaScript është ajo që quhet një gjuhë funksionale, ose ka elemente funksionale, që do të thotë që funksionet janë në fakt vlera. Dhe kjo do të thotë që ne mund të vënë një ndryshore të barabartë një funksion dhe më pas të shkojë atë funksion rreth, të kalojë atë si argument, të bëjë të gjitha llojet e gjëra si kjo me funksione. Një gjë tjetër për të note-- Funksionet janë të shkruara me një numër të caktuar të argumenteve. Ne do të shohim një shembull i një funksioni me një argument në rrëshqitje të ardhshëm. Por JavaScript nuk do të çirrem në ju, nëse ju përpiqeni për të përdorur një funksion me të Numri i gabuar i argumenteve. Ajo thjesht do të bëjë çmos për të bërë bëjnë, do të thotë se në qoftë se ju të kalojë, ju e quani një funksion që pret një Argumenti pa argumentin, të gjitha që do të ndodhë është se do të bëjë çmos për të përpiqen dhe të ekzekutuar atë kod, dhe në qoftë se ai përfundimisht shkon në një përjashtim apo një gabim, ajo do të hedhin se përjashtim dhe vetëm i mbajnë going-- e cila është vetëm një nga mënyrat se JavaScript punon. Po. Audienca: Çfarë ndodh nëse ka shumë argumente? SAM GREEN: Pra, Pyetja ishte, çfarë ndodh nëse ka shumë argumente? Dhe përgjigja është se JavaScript do të vetëm injorojnë ato që janë pas atyre se pret. Ajo do të përpiqen për të ekzekutuar funksionin e quajnë si në qoftë se ajo ishte vetëm dy të parët. E drejtë? Hugh Zabriskie: Kjo është e drejtë, vërtet. Në mënyrë të ngjashme, në qoftë se ka janë shumë pak argumente, ajo vetëm lloj i jep null të gjithë Argumentet ajo nuk ka ndonjë vlerat për. SAM GREEN: Cili mund të në fakt të jetë i dobishëm, në qoftë se ju dua të shkruaj një funksion që merr argumente numër të ndryshueshëm. Ju mund të vendosni vlerat e prezgjedhura në përkufizimi i funksionit, dhe kjo mund të injorojë faktin se input nuk është atje. Kështu që unë dua të flas pak më shumë në lidhje me këtë plumbin e fundit Pika, e cila është funksione janë vlera. Ky është një shembull që është i një pak mendje-defekt në qoftë se ju vetëm lexuar atë, dhe nuk mendoj në lidhje me atë që po ndodh për një të dytë. Pra, le të shohim vetëm në rreshtin e parë këtu. Ne e kemi këtë ndryshueshme, f1, që ne themi është një funksion që e bën këtë gjë. Dhe përmbajtjen e funksionit janë console.log ('hello'). Ju mund të mendoj për console.log si më të JavaScript ekuivalent i printf. Pra, çfarë do të ndodhë është, në qoftë se ne drejtuar këtë kod në shfletuesin tonë, ajo do të shtypura nga një varg. Unë mund të tregojë se. Audienca: Me log, edhe pse, bën që thotë se është duke u regjistruar diku? SAM GREEN: Po. Kështu që unë do të ju tregojnë se çfarë do të ndodhë. Pra, pyetja është, çfarë do të thotë Identifikohu? Hugh Zabriskie: Pra console.log është si printf për C. SAM GREEN: Pra console.log është si printf, kështu që në qoftë se unë kam këtë console.log ('hello'), dhe unë e quaj se, string "hello" merr shtypura jashtë në tastierë. Kjo është konsol. Është vetëm si printf, ku ajo printon për jashtë standardit. Dhe ne do të shohim në një minutë, por kjo është në fakt duke iu referuar konsol objektin, dhe duke e quajtur një metodë në atë objekt. Kjo do të bëjë më shumë kuptim në një minutë, kur ne merrni për të folur për objekteve në JavaScript, por unë mendova se do të përmend vetëm se. Hugh Zabriskie: Ne jemi të përdoret për të në C, right-- ne zakonisht shkruani një program të madh në kryesore për të bërë asgjë. Por ajo që është e ftohtë në JavaScript është që ju kanë këtë lloj përkthyesi që Shkon në kohë reale, kështu që merr vetëm rresht pas rreshti, ajo vetëm mund të interpretojë se në vend. Dhe ajo mban gjurmët e gjëra që kanë drejtuar më parë, kështu që kjo është një mjet mjaft i dobishëm për përdorni console.log, ose konsol, në përgjithësi, për vetëm duke luajtur rreth me JavaScript. SAM GREEN: Pra, duke shkuar prapa në këtë example-- rreshtin e dytë të kodit këtu është shumë marramendëse në kokën time. Hera e parë që kam lexuar këtë, ajo ishte si, çfarë po ndodh? Pra, çfarë po ndodh është, kjo Deklarata funksion thotë: Unë kam një funksion të quajtur F2 që është duke pritur një argument, f, dhe pastaj ajo e quan se funksion, f, e cila u miratua në atë si një argument pa argumente vetë. Pra, kjo mund të ketë qenë konfuze. Nëse ne e kuptojmë këtë si F2 merr f1 si një argumenti, dhe pastaj brenda f2, f merr called-- që do të thotë se këtë linjë të kodit, pas këtyre dy linjave të Kodi, rezulton në "hello" duke shtypur në tastierë. Fakti që ne mund të kalojë Funksionet e rreth si vlera përfundon duke qenë një nga më të Karakteristika të fuqishme të JavaScript si një gjuhë programimi. Jashtë të gjitha të gjëra të tmerrshme mund të bëjë, ashtu si një tipar i gjuha në aspektin e mënyrës se ajo bën gjërat lehtë të programit dhe lejon për gjëra që nuk janë veçanërisht të i përshtatshëm për web, programimit funksional dhe funksionale Aspektet programimin e JavaScript është një nga të më koncepte të fuqishme që ekziston në JavaScript-- nëse ju pyesni mua. Ftohtë. Pra, gjë tjetër. Përveç kësaj për të qenë funksional, ka edhe elemente të JavaScript që janë object-oriented, i cili është një shumë fjalë popullore lëvizje në shkenca kompjuterike. Programimit object-oriented është një gjë me të vërtetë popullor. Java ka një version të që, ku unë besoj se çdo vlerë është edhe një objekt, që do të thotë se çdo objekt përfundon së bashku disa numrin e vlerave. Pra, për vlerat që janë të thjeshta, si një numër i plotë, si varX barabartë me 5, se objekti vetëm përfundon se një vlerë. Por ne mund të imagjinojmë një situatë where-- ne mund të mendojmë për situatat në C ku kemi dashur të bëjmë diçka me structs, për shembull, që përfundon disa Vlerat së bashku dhe bën të vërtetë e lehtë për të kaluar gjërat rreth. Kjo është kur një objekt është në JavaScript. Është e rëndësishme të kujtoni kur them se objekte përfundoi disa numri i vlerave së bashku, që funksionet janë gjithashtu vlerat, që do të thotë se funksionon mund të jetë brenda një objekti JavaScript. Dhe arsyeja që është e rëndësishme është se, ndërsa ne shpesh mendoj se e quajtur një metodë në një objekt që është e një afat popullore nga tjetri gjuhë popullore object-oriented, një nga diferencave është se të gjitha që një metodë është në JavaScript është një vlerë e ruajtur në brendësi të një objekti që kryen disa action-- ndoshta duke përdorur vlerat e tjera që janë brenda e atë objekt, por jo domosdoshmërisht. Kështu që ju mund të imagjinohet një situatë, unë mendoj në një pak e një mënyrë të çmendur, ku ju quajti një metodë të një kundërshtojnë në një tjetër objekt, për shembull. Pra, kjo është pak i shokuar në këtë mënyrë. Dhe ju gjithashtu mund të ndryshojë metodat e që janë të lidhur me një objekt duke caktuar se metoda A funksion i ri, i cili eshte gjithashtu mjaft i ndryshëm nga tjetri gjuhë object-oriented, ku dikur ne të deklarojë një objekt dhe ilustroj me shembull konkret atë, ne nuk mund të ndryshojë metodat që janë lidhur me atë objekt më. Pra, kjo është mjaft e ndryshme. Ftohtë. Kështu që këtu është një shembull, së pari, e një objekti në veprim. Kjo është ajo që quhet një objekt i përgjithshëm, i cili do të thotë se nuk ka asnjë Emri veçanti, nuk ka një klasë, kjo është vetëm një mbështjellës i vlerave. Dhe mënyra që duket është, ne kemi kjo palë e jashtme e kaçurrel formatimin e teksteve këtu që tregojnë për JavaScript dhe thonë se, kjo është një objekt. Vlerat brenda saj janë secili vlera brenda e objektit që duhet të të palosur. Dhe brenda këtij objekti, ne pastaj kemi palë kryesore me vlerë, ku çelësi i referohet emrit të vlerës brenda e objektit, dhe side-- tjetër përballë here-- zorrës së trashë është vlera aktuale që duhet të ruhen. Kështu që ju shihni këtu se ne kemi një Çelësi i quajtur fn me vlerës Sam, i ndjekur nga një presje, duke thënë se mbi hyrjen e ardhshme. Pastaj një kyç të quajtur ln, me një vlerë prej gjelbër, i ndjekur nga një presje, e ndjekur nga "print" e cila do të ketë një vlerë funksion që do të bëjë këtë linjë të kodit. Le të bëjmë një hap prapa dhe shpaketoj çfarë po ndodh këtu. Pra, kjo është pak e komplikuar, dhe ne jemi duke parë diçka të re për herë të parë. E "kjo" Keyword është gjë e re ne jemi duke parë këtu, dhe çfarë kjo e bën është, i referohet aktuale kundërshtojë në fushëveprimin, e drejtë? Pra, kur themi, kjo tregon të gjithë rrugën prapa për tërë këtë object-- kur ne bëjmë this.fn, ne jemi duke shkuar për të shkuar gjatë gjithë rrugës prapa në këtë objekt, të shkojnë në vlerën fn dhe për të marrë Sam, të tërheqë atë gjatë gjithë rrugës prapa, ngjit atë këtu, dhe pastaj të lëvizë. Audienca: Pra, me rikthim, është që bëhet për shkak të parametri përkufizim? SAM GREEN: Pra pyetja ishte, është rikthim bëhet për shkak të parametri përkufizim? Po, absolutisht. Çfarë do të ndodhë këtu është, kjo dot thotë në JavaScript, OK, unë jam marrë disa vlera nga ky objekt nga vetja ime. Dhe atëherë ajo do të shikoni për një hyrje quajtur FN, dhe nëse e gjen atë, ajo do të kthehet se value-- kështu, është sam. Por unë mund të keni shtypur diçka që nuk është përcaktuar këtu, dhe pastaj ajo do të vetëm kthehen undefined-- që është një gjë që mund të aktivizoni Java bërë, të cilat mund të kenë përfitime, por kjo është also-- në qoftë se ju bëni një typo, ajo mund të rezultojë në gabime pazakontë. Pra, kjo vetëm do të përpiqemi për të gjetur çdo gjë që ju thoni atë për të gjetur dhe kjo nuk do të ankohen në qoftë se nuk e gjejnë atë. Ajo do të them vetëm, unë nuk e bëri gjeni atë, dhe pastaj të lëvizë. Pra, kjo do të jetë e pacaktuar, plus bosh, plus mbiemri. Po. Dhe pastaj ne mund të shohim se në qoftë se ne atëherë mund të shkojë poshtë dhe access-- dhe ne e quajmë tf.print () me kllapa. Ajo do të thërrasë atë shtypura Funksioni pa argumente, e drejtë? Por në qoftë se ne vetëm tha tf.print () pikëpresje, pa kllapa, të gjitha ato që do të kishte bërë është tërhequr jashtë funksionit nga vlera, por nuk quhet në të vërtetë atë. Ftohtë. Hugh Zabriskie: Nëse ne kemi bërë një objekt? SAM GREEN: Sigurisht, le të bëjë atë. Kështu që unë mund të lëvizin këtë shembull për konsol. Ne mund të imagjinojmë se unë kam një objekt. Pra, kjo është një objekt i thjeshtë. Ky është një objekt i cili përmban dy Vlerat me dy çelësat, dy vlera kryesore çifte. Kështu që unë pastaj mund të hyni në vlerën e ruajtur brenda këtij objekti duke bërë x.x1, për shembull, dhe të shkoj 1 mbrapa. Gjithashtu, x.x2, të merrni atë vlerë mbrapa. Dhe tani gjë me të vërtetë ftohtë është, unë mund të në fakt shtoni diçka për këtë objekt pasi unë e kam krijuar atë. Kështu që ju mund të imagjinoni, le të thonë se unë kam një funksion. Hugh Zabriskie: Ju duhet të bëni Shift-Enter. SAM GREEN: Oh, kjo është i bezdisshëm. Çfarë e bëri atë nuk pëlqen? Oh. Këtu ne do të shkojmë. Ftohtë. Kështu që unë kam krijuar vetëm ky funksion, f, që do të shkojë në tanishme objekt dhe this.x1 shtypura. Pra, nëse unë vetëm thirrje f nga në vetvete, asgjë nuk po ndodh të ndodhë, të drejtë, sepse nuk ka x1 fushë në objektin është e referuar. Por, në qoftë se unë them, x.f = f, dhe pastaj unë quajnë x.f (), unë jam duke shkuar për të marrë përsëri 1. Se funksioni f është tani lidhur me objekt x, e cila ka një kyç të quajtur x1 lidhur me vlere 1, kështu që kur ne e quajmë this.x1, është do të gjeni atë që është në kërkim të dhe të jetë në gjendje për të shtypur një vlerë jashtë. Pra, kjo është vetëm një shembull këtij lloji të gjërave çmendur ju mund të bëni me objekte në JavaScript. Kështu që versioni ishte version gjenerik, kuptimi që ne kemi krijuar një objekt duke përdorur këtë kllapa simbol notation-- Braçe, rather-- dhe kjo është dobishëm në qoftë se ne vetëm duam një shembull i një objekt të veçantë, por çfarë nëse ne duam të kemi më shumë se një të të njëjtit lloj? Dhe përgjigja për këtë Pyetja është, ka shumë gjëra të quajtur klasa në JavaScript, si dhe. Ne mund të krijojë një funksion që ka një lloj të inicializimit për një objekt të huaj, dhe ne do të themi, si, class-- im kështu emrin i object-- reusable është e barabartë me funksion që përcakton atë. Pra, çfarë kjo do të jetë e barabartë të po krijon një objekt që do të jetë vetëm donte, mbajtëse kaçurrel, rr, zorrës së trashë, kjo është një varg, pikëpresje, mbajtëse kaçurrel. Që do të jetë i përgjithshëm objekt ne nisja, me një ndryshim të qenë në Linjat e ardhshëm ne kemi krijuar një prototip, i cili do të thotë se është një çelës që parazgjedhur shtojmë objektin tonë ka vlerën më të listuara këtu. Do të thotë se, kur unë krijuar një të re shembull i këtij objekti MyClass, ajo do të ketë para-ndërtuar brenda ajo një vlerë quajtur str dhe një tjetër vlerë quajtur myPrint, i cili është do të jetë një funksion. Mbresëlënës. I madh. Pra, gjëja e fundit për të thonë se rreth JavaScript është se ajo është me të vërtetë e dobishme për çfarë quhen operacionet asinkron. Do të thotë asinkron është se ne mund të presin për disa operacion për të përfunduar para se të shkojë në, por lëvizin në ndërkohë që ne presim dhe pastaj të ketë diçka të ndodhë më vonë. Dhe ajo që dua të them me këtë është, ju mund të imagjinohet një situatë ku ju të dërgoni një kërkesë për disa web server diku, dhe ajo do të të ju dërgojnë prapa disa copë të madhe të të dhënave, e drejtë? Dhe përdoruesit tuaj mund të presim në ndërkohë që kjo të ndodhë, dhe asgjë nuk mund të jetë ndodh në atë kohë. Por kjo nuk është një dizajn të madh, e drejtë? Ju nuk duan web faqe për të ngrirë. Çfarë ndodh nëse përdoruesi dëshiron të klikoni mbi një drop-down menu? Kjo nuk është një model i madh të projektimit. Në vend të kësaj, në thelb ajo JavaScript nuk është thotë: OK, bëj këtë operacion asynchronously. Pra si, prisni në sfond, dhe pastaj kur operacioni është bërë, telefononi callback function-- e quajnë disa funksion, e disa action-- për të sinjalizuar se Operacioni ne ishim duke pritur për t'i dhënë fund mbaroi. Dhe arsyeja që është super i fuqishëm është, ne mund të bëjmë diçka, të kalojë një argument, të bëjë diçka, dhe pastaj të presin për diçka të ndodhë. Pastaj, pasi që diçka përfundon, ne mund ta quajmë një callback. Kjo është me të vërtetë i dobishëm për shkak se ajo lejon bëjmë gjëra me Web Audio API, për shembull, si të ngarkesës një file audio nga një server në distancë pa pasur nevojë të presin për tërë audio file të ngarkuar, e cila do të jetë me të vërtetë keq për user experience. Ftohtë. Çift i fundit vë në dukje në lidhje me debugging, pasi kjo është një gjë që ju jeni do të duhet të bëni si pjesë e projektit tuaj, e garantuar. Kam përmendur JavaScript konsol. Kjo është një tipar i dobishëm super të gjithë shfletuesit modern, Dhe ne me të vërtetë ju inkurajojmë që të marrë të rehatshëm duke përdorur tuaj konsol, në qoftë se ju doni të merrni mirë në JavaScript. Kjo është super i dobishëm për debugging, por është edhe të vërtetë e dobishme për zbulimin se si të përdorin një API. Kjo lejon për të vërtetë eksperimentimi lehtë pa pasur nevojë të shkruani disa Kodi, dhe pastaj përpilojnë atë. Ju nuk keni për të bërë të gjitha këto hapa. Ju vetëm mund të shkruani kod në një linjë, dhe pastaj të marrë reagime të menjëhershme në nëse janë apo jo ajo linjë e kodit worked-- shumë i dobishëm. Dhe gjithashtu, vetëm një note-- teknik JavaScript konsol është një shembull e një REPL-- kështu që është R-E-P-L, repl, i cili qëndron për të lexuar, të vlerësojë, loop shtypura. Ju jeni do të shkruani disa sende në, ajo do të lexoni se çfarë keni shtypur në, ajo do të vlerësojë atë, dhe ajo do të printoni prodhimit, dhe pastaj ajo do të fillojë përsëri. Kjo ju lejon për të shkuar me shpejtësi në qarqe iterating, e cila është me të vërtetë cool. I guess Last vërtetë note-- kjo është shënim aktual fundit, po. Si nuk kemi në fakt përdorin JavaScript? Pra, së pari, ne mund të importojë ajo duke përdorur një tag script në krye ose në fund të një HTML file-- kudo brenda një skedar HTML, me të vërtetë. Dhe brenda një tag script, ka dy nën-mënyra e importimit JavaScript. I pari është nga të paturit e një veçantë skedar JavaScript se ne import në tërësinë e saj, ose nga që ka një sipërfaqe prej kodit si shkrimit për të filluar, dhe pastaj script backslash për t'i dhënë fund. Dhe pastaj ne thjesht shkruani JavaScript brenda file HTML. Këto janë dy mënyra. Ju nuk mund të keni atë brenda HTML. Audienca: A është një më të mirë se sa të tjera? SAM GREEN: Pyetja ishte, më mirë është një se tjetri. Pra, po, si një praktikë stil coding, dhe gjithashtu është si një praktikë e projektimit. Ka dy arsye pse ajo mund të jetë më mirë. E para është, kjo e bën Kodi tuaj një shumë më i lexueshëm në qoftë se të gjitha të HTML tuaj është në një vend, të gjithë CSS tuaj është në një vend tjetër, të gjithë e juaj JavaScript është në një vend të tretë. E drejtë? Unë mendoj se ne duhet të kemi folur tashmë në lidhje me atë në sections-- si CSS-- çfarë se is-- dhe ajo shkon shpesh në një tjetër fotografi. Pra, lloj i ngjashëm i konceptit këtu. Ju gjithashtu mund të imagjinoni se JavaScript do të ripërdoren në më shumë se një Faqe HTML, ose ndoshta një shumë faqe të mëdha HTML, dhe të kesh atë JavaScript refactored në një fotografi që ju mund të importojë në më shumë se një vend lejon kodi të jetë Mënyra më maintainable. Ju mund të imagjinoni bërë një të ndryshojë në JavaScript dhe të kesh për të ndryshuar atë në 100 fotografi të ndryshme. Dhe në vend ne vetëm mund të ndryshojë atë në një, e cila është mënyra më e fuqishme. A e kam të përgjigjem pyetjes tuaj? Ftohtë. Ne gjithashtu mund të shtypni në tastierë, siç e kemi përmendur më parë. Dhe përsëri, një note-- fundit Web Audio është ndërtuar në, ju nuk keni nevojë të ngarkesës ndonjë gjë. Ftohtë. A ka ndonjë pyetje, a keni ndonjë shumë pyetje në lidhje me JavaScript, para se të shkojë në? Audienca: [padëgjueshme] SAM GREEN: Në rregull, i ftohtë. Pra, tani ai do të flasim për API. Hugh Zabriskie: Best. Thanks, Sam. SAM GREEN: Sigurisht. Hugh Zabriskie: mbresëlënës, kështu ne do të lëvizë nga JavaScript. Pra, ne kemi biseduar për disa nga bazat e JavaScript, dhe ata janë variablat, funksionet, objekte, funksionon si variablave, ngarkimit asinkron. Këto janë të gjitha gjërat që ju do të shohin si ju përdorni Web Audio. Pra, ne jemi vetëm do të flasim në lidhje me atë për herë të parë në një nivel të lartë. Kjo është një API, kështu që kjo është diçka që është ndërtuar, siç ka thënë Sam: drejtë në JavaScript që ju përdorni në tastierë. Dhe kjo është në fakt vetëm si C ++ kodi që është ndërtuar me të vërtetë në Chrome dhe Firefox, dhe të gjitha këto shfletues. Pra, ideja kryesore me Web Audio është se ju keni ky lloj i tubacionit të audio, e drejtë? Pra, të dhënat tuaja audio vjen në në një formë. Nuk janë lloj i tre forms-- kryesore ju keni oshilator, e cila krijon një valë sine, valë kosinus, ne jemi duke shkuar për të parë se si punon kjo. Një tjetër shumë e zakonshme, natyrisht, është një MP3. Pra, ndoshta ju filloni me një këngë, dhe pastaj ju dëshironi të bëni disa filtrim për atë dhe prodhimit that-- që mund të jetë një burim i mundshëm. Dhe pastaj një të vërtetë cool një është mikrofon. Kështu që ju mund të përdorni disa shumë thirrjet themelore në JavaScript për të marrë qasje në mikrofon, dhe kështu që nëse ju kërkuar për të bërë një app si një detektor katran, për shembull, që merr në zëri juaj dhe figura nga pitch-- mënyra shumë e lehtë për atë. Ju mund vetëm lloji i lexojnë atë në, të kuptoj se frekuencën, dhe pastaj të prodhimit një numër. Pra, ne do të shohim se si punon që, po ashtu. Destinacioni është në thelb ku të dhënat audio. Pra në përgjithësi, kjo është si folësit tuaj laptopë. Mundësi të tjera janë si një ScriptProcessorNode-- ne do të merrni për nyjet në një second-- por në thelb, ose ju jeni vënë tingull jashtë përmes kompjuterit tuaj përmes folësit, ose ju jeni lloji i regjistrimit atë, kështu që ju jeni ruajtjen atë si të dhëna audio. Pra, ndoshta, nëse dikush krijon muzikë në app tuaj dhe pastaj ju doni të regjistroni atë dhe ndoshta si eksportojë atë në SoundCloud, për example-- që do të jetë një mënyrë për të bërë këtë. Të gjitha fun stuff, të cilat ne do të flasim, ndodh në mes të këtyre dy pikave, ku ne ngarkesës në muzikë dhe pastaj të prodhimit ajo. Kështu që unë jam duke shkuar për të folur për pesë fazat e prodhimit audio në një të dytë. Ne kemi këtë gjë të quajtur një AudioContext, e cila është kjo këmishë pak ne shohim këtu. Në thelb ajo që AudioContext is-- nëse ne shkoni në JavaScript konsol tani, ne mund të krijojmë një të drejtë tani. Vetëm një shembull i repl, e drejtë? Ne jemi duke lexuar, vlerësimin, dhe printime. AudioContext është një shtet globale. Është një struct, është një objekt këtu, dhe ajo mban informacion për gjërat që janë në vazhdim e sipër në ekran në lidhje me audio. Një shembull është koha e tanishme. Kjo ju tregon numrin e sekondave, shumë saktësisht, që nga ueb faqja e ngarkuar. Pra, kjo është një të vërtetë të dobishme pak pronë që ju mund të përdorni. Është lexuar only-- Unë mendoj në fakt ju mund të përpiquni për të vendosur atë një vlerë. Ajo do të tregoni ju vendosur atë, dhe pastaj në qoftë se keni shkruar atë again-- ai nuk e bëri në fakt mjaft punë. Pra, nuk janë vetëm për lexim Pronat në JavaScript. Kjo është me të vërtetë e dobishme në qoftë se ju jeni lloj i syncing një shumë të ndryshme informacion, kur ju jeni lloj i luajtur tinguj të ndryshëm. Një tjetër të vërtetë të dobishme është destinacioni konteksti. Definitely, në qoftë se ju jeni të interesuar, të jetë duke u përpjekur për këtë në vetë të drejtën tuaj konsol tani. Pra, kjo është një AudioDestinationNode. Në thelb ajo që ky thotë është, ku prodhimi shkon? Pra, ka dy opsione të vërtetë këtu. Zakonisht default është vetëm folësit tuaj, kështu AudioDestinationNode në thelb vetëm thotë ka zero rezultate të shëndosha që vijnë në, ka dërguar për të folësit. Pra në përgjithësi, ju nuk e bëni duhet të luajë me atë. Nëse jeni të interesuar në fakt duke përdorur ScriptProcessorNode për regjistrim, patjetër të xhiruar mua një email më vonë, sepse kjo është pak më e komplikuar. Por në përgjithësi, ju jeni vetëm lloji e kompjuteri tingull në disa forma. Pra ftohtë, ne do të hidhen përsëri këtu. Audienca: Më vjen keq. Hugh Zabriskie: Po. Audienca: Unë e di që ju thënë për të folur për ju më vonë në lidhje me regjistrimin. A mund të ndërfaqe që me Pro Tools? Hugh Zabriskie: Me Tools Pro? Le të shohim. Nuk ma ha mendja. Pra, duke shkuar në mes të klientit, që është JavaScript konsol, dhe aktuale tuaj kompjuter, në përgjithësi është diçka që është lloj e jashtë kufijve, në qoftë se ju do, lloj nga natyra e the-- kjo është lloj i një gjë të projektimit, por ju përpiqen për të mbajtur shfletuesin veçantë nga kompjuteri aktual e përdoruesit. Në përgjithësi, e vetmja gjë që ju jeni në gjendje për të qasja është mikrofon ose kamera. Ju nuk jeni në gjendje për të, unë nuk mendoj, përdorni Pro Tools. Megjithatë, nëse ju krijoi një udhë në Pro Tools, eksportohen se, ju mund të ngarkesës që këtu, filtruar atë, për shembull, proces i cili, dhe rekord atë në një Audio Destination-- ose, no-- një sferë Nyja procesor. Dhe pastaj nga atje, ju mund të eksportit që të SoundCloud, ju mund të dërgoni atë në një e-mail, ose çdo gjë që ju pëlqen nga atje. Por nuk është lloj i një pengesë të vogël në mes të bërë muzikë në kompjuterin tuaj dhe duke e bërë muzikë në internet. SAM GREEN: Dhe kjo është jo unike për këtë API. Kjo është një tipar sigurinë e Chrome, dhe Unë mendoj se çdo shfletues tjetër modern. Shfletuesi është vetë-përmbante. Kështu për shembull, një faqe interneti nuk mund të përdorin JavaScript për ta kthyer shëndoshë në në folësit tuaj, për shembull. Ose ajo nuk mund të kthehet kompjuterin tuaj off. Dhe nuk ka asnjë pikë e ndërmjetme në mes këtyre dy gjërave, e drejtë, kështu që ose ju keni një abstragim i plotë, ose keni hapur deri krisje sigurinë e lënë një programues me qëllime të këqija të bëjë çdo gjë që ata duan me laptop. Dhe kjo është arsyeja pse Chrome është vetë-përmbante. Hugh Zabriskie: Po. A ka kjo kuptim? Ftohtë, të ftohtë. Unë kam qenë vetëm duke shkuar për të tregojnë një shembull të një. Kjo është shumë e shumë si më shumë ju të merrni, në terma të i qasja në kompjuterin e përdoruesit. Nëse keni një tastierë USB mbyllën në, ju mund të përdorni diçka që quhet Web API MIDI, të cilat ne nuk do të me të vërtetë flasim për këtu, por kjo është një tjetër API kjo është ndërtuar në të paktën Chrome-- përsëri, kjo është arsyeja pse ne duam Chrome-- Unë mendoj Firefox ose Safari, kjo është një gjë e lehtë për të shfletues google-- ndryshme kanë mbështetje të ndryshme për të cilat TV ata kanë zbatuar. Por në qoftë se ju të kërkuar për të vihet në prizë një tastierë dhe të punojnë me këtë informacion, lloj i dërgoni tastierë informacion mbi kompjuter dhe pastaj të përdorin atë online, këtë API është ajo ku ju do të jetë duke punuar se. Ftohtë. NE RREGULL. Pra, shpejt duke lëvizur këtu. Si po e bëjmë në kohë? SPEAKER 1: Rreth 15. Hugh Zabriskie: 15 minuta u largua? OK, i ftohtë. Pra, ne do të racës përpara këtu. Pra, në thelb, pika kryesore e duke menduar për këtë si një tubacion është se çdo hap në tubacion është një seri e nyjeve audio. Burimi ynë, le të themi, është një oshilator. Ne kemi nevojë për të krijuar një nyje oshilator. Dhe kjo është vetëm lloji i function-- vogël dhe ata janë të bazuara të gjitha jashtë e kontekstit audio këtu. Audienca: Kur ai tha oshilator, nuk do të thotë kjo është në të vërtetë fjalë për fjalë duke shkuar nga dy pole të ndryshme dhe andej Hugh Zabriskie: Jo, kjo është si një përfaqësim dixhitale. Është zbatuar aktualisht në C ++. Unë në fakt nuk e di syze se si është e zbatuar në të vërtetë, Por e gjithë kjo është duke punuar si të dhëna binare. Në fakt, po. Që do të thotë, unë mund të në fakt, në qoftë se ju jeni të interesuar, Unë mund t'ju dërgojë një më të vogël informacion në lidhje me se si waveforms janë mbajtur të paturit e një format dixhital. OK, i ftohtë. Pra, ne jemi duke gjeneruar një ton si një sine valë ose diçka të tillë, ndoshta 440 Hertz. Ne krijimin e një oshilator. Në qoftë se ne duam të cilësuar volumin, ne lidheni asgjë për një GainNode, që ne mund të bëjmë me .creategain. Që përcakton vëllimin tuaj. Ju mund të ndodhë që mbi çdo e të tjera options-- mirë, kështu një burim audio tampon Nyja është ajo ku ju fuqia ruajtur një MP3 që keni ngarkuar në. Biquad filtër është për filtrimin nëse ju doni të merrni të gjithë bazën e jashtë e një këngë, ose diçka të tillë. Zoti na ruajt ju doni të merrni baza nga një këngë. Dhe nyje AudioDestination është, përsëri, si ku përfundimi ynë është. Nëse jeni të interesuar ndonjëherë të shohim të gjitha opsionet e ndryshme të mundshme, thjesht shkoni në tab dhe le të auto-plotë të dalë. Dhe në qoftë se ju do të krijoni, ju do të shihni të gjitha gjëra të ndryshme që ju mund të krijojë. Ju mund të krijoni dinamikë procesorë script, Unë nuk e di edhe se çka është, për përzierjen bashkimet channel dhe splitters channel dhe të gjitha atë. Ftohtë. Pra, kjo është vetëm një shembull i një tubacioni. Pra, ne kemi tre burime që vijnë në. Ndoshta këto janë waveforms, Ndoshta këto janë MP3s. Një që po ndodh përmes një filtër, një tjetër s duke u shtrembëruar tjetër dikujt Humor majtë dhe të djathtë. Ju mund të bëni të gjitha llojet e gjërave dhe ata të gjithë të përziera rreth së bashku, dhe pastaj nga vjen audio në fund, si destinacion. Ky është një shembull i asaj që më shumë komplikuar Web Kodi Audio duket si. Ju jeni duke krijuar të gjitha këto objekte të ndryshme drejtë here-- Unë nuk jam i sigurt për këtë. Jo, kjo nuk do të zmadhuar. NE RREGULL. SAM GREEN: Ju bëni Kontrolli, lëvizni-Up. Hugh Zabriskie: Kontrolli Scroll-- SAM GREEN: Jo, jo. Control-- Hugh Zabriskie: Oh, Kontrollit, shkoni? Oh, Gotcha. Po. Wow, Jo, Jo. NE RREGULL. Unë nuk do të bëjë atë. Pra, vërtet, në këtë së pari Seksioni këtu, ju shihni ne jemi duke krijuar të gjitha këto të ndryshëm nyjet jashtë kontekstit. Ne jemi vetëm piecing ato së bashku në pjesën e dytë nga ky funksion të quajtur Connect. Kjo është një të vërtetë kyç funksion në Web Audio. Kjo thjesht do të thotë një herë ju kam bërë diçka me zë në një nyje, të kalojë atë të nyjen e ardhshëm. Pra, ne kemi burimin, atë lidhet me analyzer, analyzer bën diçka me të, ajo shkon për shtrembërim, dhe kështu me radhë, dhe në destinacionin në pjesën e poshtme të drejtë këtu. Ftohtë. OK, kështu që ne do të vazhdojmë të lëvizin. Pipeline-- përsëri, këto janë tubacionet më të zakonshme, kështu që ne flasim për të gjitha këto gjëra të tilla si shtrembërim, Humor, të gjitha këto gjëra. Nëse jeni të vërtetë të interesuar në duke përdorur gjëra Pro Tools, ata ndoshta ju interesojnë. Nëse jo, ndoshta ju vetëm duan të luajnë të shëndoshë, Apo ndoshta ju doni vetëm për të të cilësuar volumin në zë. Ata janë dy lloj më të zakonshme e tubacioneve në prodhim audio. Përsëri, mënyrat që ju mund të merrni atë në si një oscillator-- Pra, le të të bëjë një demo e që këtu. Pra, ne jemi duke shkuar për të krijuar një Konteksti i thjeshtë Audio këtu, dhe nga se ne jemi duke shkuar për të krijuar oshilator tonë. Kështu që është, përsëri, ne jemi vetëm do të thërrasë Krijo oshilator. Ne jemi duke shkuar për të vendosur një frekuencë në se, 440 Hertz, preferuar të gjithëve. Pastaj ne të lidheni atë në destinacionin e point-- që është Gjuha, kështu destinacioni konteksti. Së fundi, ne vetëm të themi, të fillojë zero sekonda nga tani, dhe nuk e kemi të shëndosha? [Kumbues] Hugh Zabriskie: Këtu ne do të shkojmë. Është vetëm një valë sine. OK, i ftohtë. Dhe pastaj ne do të ndalet atë. Audienca: Ku ka që reagimet vijnë nga? Hugh Zabriskie: Reagime? Oh, ndoshta mikrofona tona. Pra, vërtet, kjo është se si ju bëni atë. Dhe në fakt, në qoftë se unë kam mbajtur atë running, ju mund të ketë frekuencën Vlera derisa është i aktivizuar, kështu që është një gjë e bukur për të luajtur rreth. Ftohtë. Kjo është gjithmonë një e bukur për të paraqitur. SAM GREEN: Ne nuk u bëmë mendoj për këtë, nuk kemi? Hugh Zabriskie: Po, kjo është një e keqe. Pra, tampon loading-- unë do të tregoj një shembull i kësaj në fund. Kjo është ngarkimit të një MP3. Dhe mikrofon, ju përdorni vetëm një funksion quajtur Navigator.getUserMedia () të kërkojë qasje në përdorues të mikrofon për këtë informacion. Ja filtrim, unë do vetëm i mbajnë duke lëvizur nga kjo. Ky është niveli shumë e lartë, por filtra vetëm të ju lejojnë për të [Beeping] Filtrim gjithashtu ju lejon të për të krijuar gjëra të tilla si trëndafili zhurmë, zhurmë kafe, zhurmë të bardhë. Nëse ju doni të krijoni zhurmë të pastër, e cila disa njerëz duan të bela rreth me, ju mund të përdorni Web Audio filtrim për të bërë këtë. Audio Panning-- kështu imagjinojmë në qoftë se ju jeni duke shkruar një lojë dhe ju doni të shëndosha për tingëllojë si ajo vjen, si, shtënat nëpër ekran, ju mund të përdorin zhvendosjen e audio për të krijuar këtë lloj të kon, që like-- kjo është goxha Mathy, por është e vërtetë me të vërtetë ftohtë në qoftë se ju merrni atë punë, dhe ka disa të mira mësime mbi të unë mund të ju dërgojnë. Në thelb, ju mund të lloj të krijuar tingullin e diçka ndodh me në një mënyrë 3D. Dhe në qoftë se ju keni një interes DJ, ju mund të të fillojë përzierjen dhe kryq venitje këngë. Kjo është vetëm disa shumë themelore Kodi, në thelb ajo që kam bërë më parë. Kjo përcakton volumin e oshilator, kështu që ne krijojmë oshilator tonë e cila krijon waveform. Ne krijojmë GainNode tonë, të vendosur frekuencën tonë, dhe pastaj lidheni oshilator në GainNode, e cila më pas në thelb ndryshon sa sinjal është i lejuar përmes. Por me të vërtetë, kjo është një dixhital gjë, kështu që është më shumë just-- vërtet. Kjo nuk është ajo që ndodh në të vërtetë, por kjo është ajo që ndodh në jetën e vërtetë me një fitim. Audienca: --quantization i parametri vëllimit? Hugh Zabriskie: Na vjen keq? Audienca: A është kjo një kuantizuar parametri vëllim? Hugh Zabriskie: Po. Dhe kjo është një gjë që unë jam me të vërtetë mangët në në njohuritë e mia, si fitim punon në një nivel dixhitale. Unë e di me aktual Sinjalet, kjo është në thelb kontrollin se sa ju jeni amplifikimin sinjal. Pra, vërtet. Unë do të ju dërgojnë më shumë informacion në lidhje me kjo, sepse unë do të jetë në fakt kurioz të dini më shumë në lidhje me atë. Por në thelb parametrat janë, një është fold-- signal-- louder dhe zero nuk është sinjal, ose ju nuk do të dëgjoni ndonjë tingull. Ne do të kaloni kohë të demo për këtë shkak kjo është në thelb ajo që kam bërë më parë. Dhe një herë, Context.Destination është nyja audio destinacion. Awesome, OK. Kështu që unë jam duke shkuar për të bërë një të shpejtë dy popull. Si po e bëjmë në kohë? SPEAKER 1: Rreth 10 minuta. Hugh Zabriskie: 10 minuta? E madhe! Mbresëlënës. Pra, i pari unë jam duke shkuar për bëni, ajo që quhet kënga ime e preferuar. Pra, kjo është vetëm një pak HTML JavaScript. Ne do të kemi dy butona në faqe të luajnë këngën time të preferuar dhe ndalojnë këngën time të preferuar. Unë do të ndryshojë këtë. Audienca: Cover mikrofonin tuaj. Hugh Zabriskie: Po. Dhe unë e kam ngarkuar në këtu një skenar që basically-- dhe kjo është me të vërtetë e dobishme për ngarkimin e një MP3, kështu që kjo vetëm e bën ngarkimit mënyrë MP3s shpejtë. Kjo është në thelb vetëm një këmishë. Kjo vetëm e bën procesin e ngarkimit në MP3s shumë më të shpejtë, përndryshe ju jeni duke përdorur HTTP kërkesë, lloj si ajo që ne ishim duke bërë në copë tanishme vendosur me Server. Është me të vërtetë e shëmtuar, ju nuk duan të bëhet kjo. Pra ky djalë, Boris njësitë ndërkomunale, shkroi një të vërtetë mjet i dobishëm i vogël i quajtur BufferLoader. Të gjithë ju bëni është thjesht të kalojë atë të konteksti, ju të kalojë atë një list-- apo, vërtet, ajo është një listë në JavaScript? SAM GREEN: Një grup. Hugh Zabriskie: Oh, kjo është e një grup, kjo është e drejtë. Është një grup i shtigjeve në fotografi të ndryshme. Dhe pastaj ju të kalojë atë një funksion. Kjo është callback ne ishim duke folur në lidhje me ngarkimin asinkron. Që do të quhet Pasi fotografi ngarkuar. Dhe kjo funksion që quhet kur dosja e ngarkuar e merr si një perimetër një sërë mbulesë ngarkuar. Kështu që ndodh këtu. Në thelb, BufferList është do të jetë një value-- ose ajo do të jetë një grup i gjatësi një, që e ka në të në indeksin zero të gjithë dosjen ngarkuar e MP3. Pra, çfarë të bëj kur unë të përfunduar ngarkimit është, unë thjesht të krijojë një burim tampon, e cila është një audio nyje tampon burim. Hapi tjetër është i ngarkesës në source.buffer si tampon plotë ngarkuar nga BufferList-- kjo është një shumë e buffers-- dhe pastaj ju lidhë atë audio tampon në destinacion. Pra, atë që do të bëjë është thjesht vënë MP3 direkt përmes të prodhimit, dhe të fillojnë atë menjëherë me marrjen e kësaj thirrjeje. I ftohtë, kështu që le të shohim kjo të ndodhë në veprim. My [e padëgjueshme] këtu, le të shohim. Kështu që unë jam vetëm do të të fillojë një server bazë. Kjo është diçka që ju duhet të bëni nëse ju jeni bërjen e kërkesave për fotografi ngarkimit. Unë jam duke shkuar për të filluar një server bazë. Kjo është në thelb tërë tuaj Pset tani në një linjë, por kjo është vetëm fillimi një server në portin 80/80. Pra, ne do të shkojmë këtu, ne do të ngarkesës 80/80, ne jemi duke shkuar për të shkuar në kënga ime e preferuar. Pra, nëse unë goditi "Luaj tim Kënga e preferuar "Tani për tani, ajo do të ngarkesës tim Kënga e preferuar dhe luajnë it-- [MUSIC - shqiponjat, "Jeta në FAST  LANE "] që bën të ndodh të jetë "Jeta në korsi të shpejtë "nga The Eagles. Tani, unë mund të godiste "Stop tim Kënga e preferuar "dhe sërish atë. [MUSIC - shqiponjat, "Jeta në FAST  LANE "] Dhe kur të shkoj mbi të ngushëlluar, sepse I përdorur një ndryshore globale gjatë këtu të mbajnë gjurmët e kësaj vlere, ai në fakt tani do të njihet në tastierë. Pra, kjo auto-krijon për mua. Pra, kjo është ajo që është duke luajtur tani, dhe unë thjesht mund të telefononi source.stop () në atë. E pra, ju e dini se çfarë? Vetëm kështu që ju djema keni dëgjuar këtë song-- ju mund të njohin këtë këngë. [MUSIC - Rick Astley "Never Gonna JAP  Ju lart "] [MUSIC - shqiponjat, "Jeta në FAST  LANE "] Ne kemi tani të gjithë janë Rickrolled. OK, i madh, duke lëvizur në. Ftohtë. Pra, kjo është në thelb një shembull i se sa ju mund të ngarkesës një MP3 file-- [MUSIC - shqiponjat, "Jeta në FAST  LANE "] --and luajnë atë, dhe të ndaluar dhe të fillojnë atë. Unë mund të ketë bërë shumë më [e padëgjueshme] E fundit unë do të bëj është, Unë do t'ju tregoj një [e padëgjueshme]. [Muzika] Është si, ogg.wave.mp3. Unë mendoj se, nëse më kujtohet saktë, Unë e kam drejtuar në disa çështje me .m4a, por unë nuk jam i sigurt për këtë. Unë mendoj mp3.wave-- [MUSIC - Rick Astley "Never Gonna JAP  Ju lart "] OK, e madhe. Unë nuk duhet të ketë thënë se. Gjithsesi, përshëndetje. Pra, ne kemi hapur këtë. Pra, tani të gjitha unë bëj është, unë krijuar në thelb një sintaksë bazë për krijimin e muzikë. Pra, nëse unë bëj diçka si, shtoni G4 më 1 2, çka do të thotë është se, shtoni shënim piano, G4, i cili është i katërt G deri në piano nga poshtë. Pra, kjo është lloj i MIDI flasin, kështu që për ata që janë të bazuara muzikë, kjo është vetëm shënime MIDI. Audienca: Kjo është G e Mesme C, e drejtë? Hugh Zabriskie: Kjo është G sipër Mesme C, kjo është e drejtë. Audienca: Mbi Mesme C. Hugh Zabriskie: Po. Në fakt, po. Unë mendoj se unë në fakt e bëri atë një [e padëgjueshme], kështu që kjo mund të jetë një oktavë më lart se. Pra, le të shohim. Nëse unë goditi Play-- [SHËNIM e përsëritura bukurise] --we're shkuar për të dëgjuar se. Ideja është se ajo vepron vetëm si një linjë komande do, kështu që nëse unë shkoj lart e poshtë në tastierën time, mund të shkoni përsëri në mëparshme urdhëron, e cila është shumë e dobishme. Dhe më poshtë është lista ime e këngë, të cilat janë të gjitha të vrapojnë në lak. Audienca: Ju keni qenë duke supozuar 88-kyç keyboard për atë, e drejtë? Hugh Zabriskie: Pyetja ishte, Unë jam duke supozuar një tastierë 88-kyç, dhe po, unë jam. Ajo që kam bërë është që unë në thelb mori 88 mostra e piano, një për çdo shënim. Dhe kështu çdo herë që dëgjojë një shënim nga tani e tutje, që është në fakt një lak që duket like-- kjo është duke u luajtur në lak, kështu që për çdo shënim, kjo po kandidon. Çfarë ndodh është, unë të krijojë një tampon përsëri, Unë krijoj një nyje të fitojë Për të cilësuar volumin. Kjo vetëm një të vërtetë mënyrë e komplikuar për të thënë unë ruajtur tampon në një source.buffer. I jepte fitimin, unë lidhë atë me fitim, përfitimi është i lidhur me prodhimit, dhe pastaj kam luajtur atë. Pra, kjo është lloj i procesit të të marrë në një burim tampon. Audienca: A mund të vërtetë të marrë atë shëndoshë të thatë dhe të bëjë atë të lagësht [e padëgjueshme]? Hugh Zabriskie: Ju mund të, vërtet. Ka ri-folje, nuk ka vonesë, shtrembërim. Ju në thelb mund të vënë çdo gjë në në mes në atë sanduiç of-- mirë, Tubacioni është një metaforë e mirë, por ju mund të shtoni ndonjë gjë në atë. Ftohtë. Kështu që unë do të përfundojë demo këtu për të ju jap një kuptim i vetëm numri i madh i herë ju mund të kandidojë atë funksion të gjitha përnjëherë. Kështu që unë jam duke shkuar për të hequr këtë. Unë jam duke shkuar për të krijuar një gjenerator that-- në thelb ajo që does-- kjo është me të vërtetë lloj i një syntax-- komplikuar, por kjo është duke shkuar për të gjeneruar shënime të fluturojnë, dhe vetëm të fillojnë të luajnë ato siç i vlerëson ato. [Ndërhynte bukurise] Pra, ne mund të bëjë vetëm një muzikë pak këtu. [Ndërhynte bukurise] Pra, çfarë kjo komandë bën, për shembull, është ajo merr ato tre shënime për piano dhe pastaj i vë ata në B3. Kjo sintaksë mund të bëjë një kuptim pak më shumë për ata që kanë një sfond muzikë këtu. Unë mund të shtoni një goditje daulle. Unë mundem-- [Ndërhynte INSTRUMENTET] --just luajnë rreth me atë. Kështu që ju mund make-- [Ndërhynte INSTRUMENTET] Kjo është pak më shumë i bezdisshëm. [Ndërhynte INSTRUMENTET] Kështu që rastësisht shton një cimbali thatë në çdo shënim 16, me një 16% [Padëgjueshme]. [Ndërhynte INSTRUMENTET] Yeah, kështu që mënyra kjo works-- është gjithmonë në 4: 4. [Ndërhynte INSTRUMENTET] Yeah, kështu që të katër anët, dhe 16/8. [Ndërhynte INSTRUMENTET] Pra mesatarisht, ju merrni 60% e godet në shënimet 16. Anyways, kjo ishte vetëm lloj i të nxjerr disa nga gjërat që ju mund të ndërtuar me Web Audio API. Është me të vërtetë i fuqishëm, kjo është me të vërtetë i shpejtë, dhe ju mund të bëni shumë gjëra të ftohtë me të. Pra, përsëri, çdo pyetje që keni, email myself-- Hugh-- apo Sam, dhe sinqerisht, Google ka një ton të burimeve të mira. Çdo pyetje të fundit? Po. Audienca: Pra, ju mund të hyni ndërtuar në mikrofon. Çfarë nëse do të donit të përdorni një mikrofon të mirë? Hugh Zabriskie: Në qoftë se ju të kërkuar për të përdorur mikrofon të mirë? Pra, përsëri, kjo është pjesë e abstraksion në mes Chrome dhe pjesa tjetër e kompjuterit tuaj. Përveç nëse kjo është në dispozicion përmes një API, si Web MIDI API, ju ndoshta mund të gjeni disa hacks, por në përgjithësi jo të jetë e mundur. SAM GREEN: Ju mund also-- të gjitha Chrome di është ajo që mikrofon tuaj parazgjedhje është, dhe kjo akseson se. Pra, nëse keni pasur një mikrofon ju mund të vendosur si default mikrofon kompjuterit, ju mund të hyni në atë në këtë mënyrë dhe kjo ndoshta do të punojë. Hugh Zabriskie: Kjo është një pikë e mirë. Unë kurrë nuk e kam provuar atë, por ju mund të jetë në gjendje të llojit of-- nëse ju përcjellim folësin input, ju mund të jetë në gjendje të bëjë atë, po. Çdo pyetje të fundit? Ftohtë. E pra faleminderit djema aq shumë për të shikuar. Unë jam Hugh. SAM GREEN: Unë jam Sam. Hugh Zabriskie: Dhe kjo është CS50.