SAM ZÖLD: Üdv mindenkinek. Üdvözöljük a szemináriumon. A nevem Sam. Hugh Zabriskie: Én vagyok Hugh. SAM ZÖLD: És mi beszélni fogunk ma mintegy JavaScript és a Web Audio API. Csak indulni, ez egy vázlat A napirenden a szemináriumra. Fogunk kezdeni beszélni miért kell érdekli a Web Audio API, miért JavaScript A nyelvi, amire szükség van rá, majd beszélni JavaScript essentials-- így, mint, végigvezeti néhány nyelvének alapjait, majd beszélni a audio API magas szinten. Aztán, Hugh fog beszélni néhány a szakaszában a hangmérnöki majd demo ez a félelmetes sequencer projekt épített és mutassa meg a kódot. És akkor, mi lesz ideje kérdések végére az emberek akik itt élnek. Hugh Zabriskie: Cool. SAM ZÖLD: Cool. Hugh Zabriskie: Cool. Én majd fel. SAM ZÖLD: Szóval, kezdjük az elején. Tehát az egyik legjobb dolog a Web Audio API az, hogy nincs felállított szükséges. Jön beépítve a legtöbb modern böngésző, beleértve a Chrome, Edge, egy egész csomó others-- összes közül hogy a nagy részei ember használja ma. Szóval nincs létre, eltekintve csak egyre egy webszerver megy, a az induláshoz dolgozik a projekt, ami nagyszerű. Javasoljuk, csinos erősen, hogy Ön szerint a Chrome JavaScript webfejlesztés, csak azért, mert a fejlesztő szerszámok igazán erős. Példaként hogy mire is gondolunk azzal nyit a JavaScript console-- ha bemegy Chrome és nézd meg bármelyik weboldalon, és a bal gombbal Elem vizsgálata, majd megy ez a kis legördülő itt és rákattint konzol, látni fogja, mit nyit néz ki egy csomó, mint egy parancssort, hogy Lehet látni a Mac, illetve az azonosító. És csak úgy, tudjuk típusú parancsok itt, mint a Clear, és más parancsokat, mint ezt. Mi is létrehozhatunk változó, mivel később látni fogjuk a JavaScript. És így bármit tehetünk a JavaScript, amit tehetünk a konzol, és ez egy szuper jól jön, kezdj el játszani körül API-k és egyre kényelmesebb JavaScript rögtön a denevér. Nem felállított szükséges, ami igazán szép. Hűvös. Fantasztikus. Tehát csak még egy dolog, hogy adjunk. Ha bármilyen questions-- vannak sokan közületek, akik nincsenek itt élni, nyugodtan írd us-- ezeknek a mi e-mail címeket. Ha kérdése van nem akarja feltenni nekünk, mint, oh van egy bug a kódomat, vagy valami ez egy kicsit pontosabb, Talán a Google is az első. Van egy csomó nagyszerű források a Web Audio API odakint. Ez igazán jól dokumentálni és ez alatt által használt egy csomó ember ipar, és az emberek, akik csak épület szórakoztató dolgokat a maguk számára. Így nem kell sokat A források odakinn. Fantasztikus. Cool, hogy miért a Web Audio API? Ez az ábra egy kicsit Az evolúció a módja hang az interneten nőtt az idő múlásával. Bgsound volt, mint az eredeti HTML tag hogy az Internet Explorer támogatására használják fel. Csak engedélyezett elég alap hangok, A funkcionalitás nem volt túl erős, és nem lehetett csinálni bonyolult szekvenálás, vagy ellenőrzik, ha a hang kezdett és megállt nagyon erőteljesen. Tehát, ez nem volt különösebben jól fejlett. Majd ezt követően, a Flash jött along-- amely Biztos vagyok benne, hogy a srácok számára ismerős A Flash-- talán nem így működik, de már biztosan látta. Van, hogy frissítse a Flash Plug-in, minden ilyen dolgot, és hogy biztosan kiterjesztett tartományban Az elérhető funkciót. De ha a felhasználó telepíti egy plug-in határozottan Egy hátránya beleértve a Flash az alkalmazásban, ugye? Mert akkor te függ felhasználói megy, és megállapította, a plug-in, és valószínűleg a bekapcsolás ki ez az extra lépés azok, hogy kell használni a app. És akkor ott lehet egy frissítést hogy eltöröm a teljes alkalmazás, és ez végül is egy rémálom a fejlesztő is. Szóval ez volt a barikádot. És azután, hogy jött, A HTML audio tag, amely egyik jellemzője, modernebb HTML-- amely minden bizonnyal lehetővé tette sokkal több dolgot, de még a dolog, amit tehetünk, Volt egy kicsit korlátozza magát Ennek eredményeként a dolgok hogy a HTML képes. Tehát amikor a JavaScript API, a Web Audio API, szabvánnyá vált gyakorolni az egész böngészőt, Tényleg bővült a készlet A lehetőségek a fejlesztők hogy igazán bele épület klassz dolog az interneten. Hosszú ideig ott volt Már nagyon masszív szerszámok A natív audió alkalmazások, általam elvártnál mindenki tudja GarageBand, és akkor nyilván több professzionális hangkeverő alkalmazások, és az ilyen dolgok. De nem volt nagyon jó Cloud-- nem Cloud, igen, azt hiszem, Cloud-- webalapú platform amely lehetővé tenné a fejlesztők számára alkalmazásokat készíthetnek az emberek csinálni hangkeverés. És ahogy megmutatja Később, a Web Audio API lehetővé teszi a nagyon erős dolgokat megtörténni nagyon egyszerűen, ami elég jó. Szóval ez az utasítás, hogy miért kell nézni a többi szeminárium, alapvetően. És most, fogok beszélni Néhány JavaScript-- csak az alapvető elemeket a nyelv, úgy, hogy mi lehet ugyanazon az oldalon amikor arról beszélünk, a API egy kicsit később. Hűvös. Szóval, ez egy összefoglaló. Elfelejtettem ezt itt volt. Igen. Hugh Zabriskie: Van két diák itt. SAM ZÖLD: Ez az összefoglaló néhány korlátozások a másik kötési, régi módszerek. És akkor most már ezek a dolgok. Hűvös. Fantasztikus. Szóval, a JavaScript lényegre. Kezdjük az elején, van egy elég jelentős különbség A JavaScript szemben egy nyelv, mint a C, az úton hogy a változók jönnek létre. Tehát a C, hozzá vagyunk szokva, hogy miután begépelni a változókat, ugye? És nem úgy értem, típus, mint írja be őket, úgy értem típus mint sorolják őket egy type-- jelentését mint egy int, float, egy kar. A C-ben voltunk igazán használják kelljen létrehozni egy változó majd tartsa be az ilyen típusú a Egész idő alatt, hogy használjuk a változót. És ez nem feltétlenül rosszabb, de ez talán nehezebb használni. Az egyik nagyszerű tulajdonsága A JavaScript is hogy a változók az úgynevezett "dinamikus típusú", amely azt jelenti, hogy tudok létrehozni változó, hogy szintaktikai, varX egyenlő 5, például. Hogy az eredetileg teremt egy egész szám változó-- jobb alatta a motorháztető somewhere-- de Módosíthatja, hogy a változó utalni egy string nem csinál semmit, mint új változó létrehozása. Nem kell aggódni arról a típusú változó. JavaScript tudja, hogy a típus megváltozott, és ez történik dinamikusan. Szóval, vannak előnyei és hátrányai, hogy mint bárki más, aki dolgozott JavaScript egy darabig talán tudja. Vannak esetek, amikor lehet, hogy véletlenül változtatni a változó típusát és nem tudja kezelni az ilyen típusú változó, majd a JavaScript lehet crash-- vagy kivételt dobni, mert akkor már a megfelelő típusú, amikor vársz egy típusú. Hűvös. Szóval, scoping-- ami olyan, mint, ha emlékszem az első hetekben során, utal, hogy láthatóvá változó van, és milyen területen a kódot. Minden, ami úgy néz ki, nagyon hasonlít hogy hogyan néz ki a C- Tehát változók távcsöves általában belül kapcsoszárójele egy függvényen belül, majd ott is globálisan hatókörű változók are-- ha írsz egy változó kívül egy függvény, látható lesz a teljes szöveget. Az egyik különbség JavaScript és a C, különösen, az, hogy ha kijelentem globális változó bárhol egy szöveges fájlt ez látható minden funkció ezen belül a szöveges fájlt. Ez igaz, ugye? Hugh Zabriskie: Ja. SAM ZÖLD: Szóval ez is egy kicsit kicsit funky képest C, ahol mindig kellett a változócsoporttal feletti települések használták őket. Ez nem szabály, ami érvényesíthető már, így, egy kicsit más. És ismét csak reemphasize, globális versus helyi variables-- Nagyon hasonló a C. Lehetne két változó azonos nevű, és egy nevük árnyék Egy helyi változót, ha egyikük volt globális. Szóval, hasonló jellegű problémákat, hogy néhányan közületek Lehet, hogy befut néhány a probléma határozza eddig. Cool, úgyhogy ez változó. Ellenőrzési folyamatok, azaz tetszik, ha-else-- logikai stuff-- és hurkok. Így kezdeni, ez az, amit az if-else nyilatkozatok néz ki, mint a JavaScript. Hol van a különböző dolgokat A vonalak nem fontos. Ez csak az egyik egyezmények Az, hogy hogyan szerkezete kódot. Csakúgy, mint a C-ben van egy "ha", egy zárójel nyilatkozatot. Nem ezt akartam csinálni. Megcsináltam újra. Hugh Zabriskie: Próbál lépni? SAM ZÖLD: Nem, nem vagyok csak próbál nagyításhoz. Nem számít. Szóval, van egy "ha" nyilatkozatot, és van egy feltétele annak belsejébe amely azt vizsgálja, hogy igaz vagy hamis, és meghatározza, hogy vagy nem belépünk, hogy kódtömb. És hasonlóképpen, van egy else-if és Egy más, mint mi vagyunk szokva, hogy a C. Akkor is kell nagyon kényelmes jobb kapásból a hurkok, mert ők is néznek egy csomó, mint a C néz ki. De észre fogod venni ismét, hogy van, ahelyett, hogy int inicializálásától, mi var inicializálónak. És azt hiszem ezt hogy legyen óvatos, hogy Biztos, hogy nem változtathatja meg az értéket Az I-re egy int, hogy egy string, például azért, mert ez fog furcsa viselkedést talán nem számíthat. De ez kell nézni elég ismerős, valamint. Szóval ez az, ahol a dolgok kezdenek hogy egy kicsit őrült JavaScript valaki, aki majd egy háttérben a C. Vannak olyan funkciók, A JavaScript és van egy út arra, hogy függvényeket úgy néz ki, fajta hasonlít a C, és Aztán ott van egy másik, néz ki, milyen más. Az első változat, amelyből láthatjuk itt, a fajta C-szerű, ahol azt mondjuk, ez egy olyan funkció, adja meg a nevét, hogy A számos érvet, majd a tartalmát a funkció bemenni azok, zárójelek segítségével. Meglátjuk példát érvek pillanatok alatt. Mivel a következő sorban, azt látjuk, ó, itt egy változó úgynevezett "myFunction" és mi ér fel vele, hogy ez a generikus thing-- function--, hogy úgy tűnik, nem kell semmit folyik. Az ok, hogy ez más mint a C, hogy a JavaScript van egy úgynevezett funkcionális nyelv, vagy funkcionális elemek, ami azt jelenti, hogy a funkciók valóban értékeket. És ez azt jelenti, hogy meg tudjuk állítani Változó, hogy megegyezzen egy funkciót majd lépni, hogy a funkció körül, add meg azt, csinálni mindenféle dolgok így a funkciókat. Egy másik dolog, hogy note-- funkciók vannak írva egy bizonyos számú érveket. Meglátjuk egy példa a függvény egy érv a következő dián. De a JavaScript nem fog kiabálni veled, ha megpróbálod függvények használatára a megfelelő számú argumentummal. Akkor csak megtesz annak érdekében, hogy csinálni, ami azt jelenti, hogy ha elmúlik, hívja a funkciót, hogy arra számít, érv nem érv, minden, fog történni akkor megteszem a legjobb hogy megpróbálja végrehajtani a kódot, és ha ez végül fut egy kivételt, vagy hiba, ez lesz dobni ezt a kivételt, és csak tartani going-- amely csak az egyik módja hogy a JavaScript működik. Igen. Közönség: Mi történik, ha Túl sok érv? SAM ZÖLD: Tehát a kérdés az volt, mi történik ha túl sok érv? És a válasz az, hogy JavaScript majd csak figyelmen kívül hagyja az is, hogy után is arra számít. Ez megpróbálom futtatni a függvényt hívni, mintha ez csak az első kettő. Jobbra? Hugh Zabriskie: Így van, igen. Hasonlóképpen, ha ott Túl kevés érvek, ez csak egyfajta ad null minden érvek nem rendelkezik semmilyen értékek A. SAM ZÖLD: Amely valóban hasznos lehet, ha akarsz írni egy függvényt, amely tart egy változó számú érveket. Beállíthatjuk az alapértelmezett értékek a meghatározása a függvény, és ez a tényről hogy a bemeneti nincs ott. Szóval szeretnék beszélni egy kicsit többet erről az utolsó golyót pont, amely a funkciók értékeket. Ez egy példa, amely egy kicsit észbontó ha csak olvasni, és nem hiszem, arról, hogy mi folyik itt egy pillanatra. Szóval, nézzük csak meg az első sorban van. Van ez a változó, f1, hogy azt mondjuk, egy olyan funkció, hogy nem ez a dolog. És a tartalmát a függvény vannak console.log ("hello"). Azt lehet gondolni console.log a JavaScript megfelelője printf. Tehát mi fog történni, ha ezt a kódot a mi böngésző, ez lesz nyomtassa ki a húr. Én bizonyítani tudja, hogy. Közönség: A napló, mégis, ez azt értem ez alatt felvett valahol? SAM ZÖLD: Igen. Szóval én megmutatom, mi fog történni. Szóval a kérdés az volt, hogy mit jelent log jelent? Hugh Zabriskie: Szóval console.log olyan, mint a printf C. SAM ZÖLD: Szóval console.log olyan, mint a printf, tehát ha én ezt console.log ("hello"), és arra kérem, hogy a "Hello" lesz kinyomtatható, hogy a konzol. Ez a konzol. Olyan, mint a printf, ahol nyomtat a szabványos ki. És majd meglátjuk, egy perc, de ez valójában utalva a konzol tárgy, és az eljárás meghívásakor az objektumon. Majd, hogy több értelme Egy perc, amikor eljutni beszél tárgyak JavaScript, de azt gondoltam, csak annyit, hogy. Hugh Zabriskie: vagyunk használt C, right-- szoktunk írni egy nagy programot A fő, hogy semmit. De mi jó a JavaScript te ez a fajta értelmező, fut valós időben, így Mindössze sorról sorra, ez is csak értelmezni, hogy a helyszínen. És nyomon követi a dolog, hogy futok, így ez egy nagyon hasznos eszköz Használja console.log, vagy a konzol, Általában, az csak játék körül a JavaScript. SAM ZÖLD: Szóval megy vissza erre example-- második kódsort itt elég elképesztő a fejemben. Amikor először olvastam ezt, Olyan volt, mint, hogy mi folyik itt? Tehát mi történik az, hogy ez függvény deklaráció azt mondja, Van olyan függvény f2 ami vár egyik érv, f, és akkor kéri, hogy függvény, f, amelyek átadták meg azt paraméterek nélkül is. Szóval, hogy megtévesztő lett volna. Ha megértjük ezt az f2 veszi f1 érvként, majd belsejét f2, f kap called-- amelyek segítségével hogy ezt a kódsort, miután e két kódot, az eredmények "hello" nyomtatás alatt a konzol. Az a tény, hogy tudjuk átadni funkciók körül, mint érték végül is az egyik leginkább nagy teljesítményű funkciók JavaScript mint egy programozási nyelv. Kívül minden a félelmetes dolgok meg tudja csinálni, Csak, mint a jellemzője a nyelvi szempontból az utat hogy ez teszi a dolgokat egyszerű programozni, és lehetővé teszi A dolgok, amelyek nem különösebben jól illeszkedik a weben, funkcionális programozás és funkcionális programozási szempontból a JavaScript az egyik leginkább erőteljes fogalmak Létezik JavaScript-- ha engem kérdezel. Hűvös. Szóval, a következő dolog. Azon túlmenően, hogy a funkcionális, ott is elemei JavaScript amelyek az objektum-orientált, amely egyike a nagyon népszerű buzz szó a számítástechnikában. Objektumorientált programozás egy nagyon népszerű dolog. JavaScript van egy változata, amely, ahol Azt hiszem minden értéket is egy tárgy, ami azt jelenti, hogy minden tárgy pakolások össze néhány értékek száma. Tehát értékek, amelyek egyszerűek, mint a egy egész szám, mint varX egyenlő 5, azt a tárgyat csak titokban, hogy egy értéket. De azt is képzelni olyan helyzetet, where-- el tudunk képzelni helyzeteket C ahol szerettünk volna csinálni valamit struktúrákat, például, hogy a pakolások több értékeket össze és teszi ez tényleg könnyen át a dolgokat. Ez az, amikor egy objektum a JavaScript. Fontos megjegyezni amikor azt mondom, hogy a tárgyak csomagolva néhány értékek száma együtt, hogy a funkciók is értékek, ami azt jelenti, hogy a funkciók szintén belsejében egy JavaScript objektum. És az ok, ami fontos az, hogy míg mi gyakran gondolni eljárás meghívásakor egy objektumot, ez Egy népszerű kifejezés más népszerű objektum-orientált nyelvek, Az egyik különbség az, hogy Ez a módszer van JavaScript van egy tárolt érték belsejében egy tárgy amely bizonyos action-- esetleg az egyéb értékek, amelyek belsejében az adott objektum, de nem feltétlenül. Így el lehet képzelni olyan helyzetet, én Szerintem egy kicsit egy őrült módon, ahol nevezett eljárás egy objektum egy másik objektum, például. Szóval, ez egy kicsit funky ilyen módon. És akkor is változtatni módszerek társított egy tárgy hozzárendelésével, hogy a módszer egy új funkció, amely szintén eléggé különbözik az egyéb objektum-orientált nyelvek, ahol Egyszer kijelentjük egy tárgy és példányosítani meg, nem tudunk változtatni a módszereket, amelyek társított objektumok többé. Szóval ez eléggé különbözik. Hűvös. Tehát itt egy példa, az első, egy tárgy akcióban. Ez az úgynevezett egy általános objektum, amely azt jelenti, hogy nem rendelkezik semmilyen Különösen nevet és nem egy osztály, ez csak néhány csomagolópapír értékek. És az is, hogy úgy néz ki, van, van Ez a külső pár kapcsoszárójele itt azt jelzik, hogy a JavaScript és azt mondják, ez egy tárgy. Az értékek belsejébe mindegyike értékek belülről Az objektum ténylegesen csomagolni együtt. És aztán az objektumot, akkor már csak kulcs érték párok, hol a kulcs nevére utal értékének belsejében az objektum, és a többi side-- szemben a vastagbél here-- a tényleges érték hogy kell tárolni. Így látod, hogy itt van egy kulcs nevű FN értéke sam, követ vessző, mondván rá a következő bejegyzést. Aztán egyik legfontosabb nevű ln, értékű zöld, követ vessző, majd a "print" ami megy, hogy egy függvény értéke hogy megy, hogy ezt a kódsort. Vessünk egy lépést hátra, és csomagolja ki, mi folyik itt. Szóval ez egy kicsit bonyolultabb, és látjuk valami újat elsö alkalommal. Az "ez" kulcsszó az új dolog látunk itt és mit is csinál ez van, utal, hogy a jelenlegi ellenzi az hatálya, ugye? Tehát amikor azt mondjuk, ez a rámutat egészen vissza ennek az egész object-- amikor mi this.fn, fogunk menni egészen vissza hogy ez a tárgy, menj a fn értéke és kap sam, húzza végig vissza, bottal, hogy itt, és majd lépni. Közönség: Tehát a visszakeresés, az hogy kész, mert a paraméter meghatározás? SAM ZÖLD: Szóval a kérdés az volt, a lehívása történik, mert a paraméter meghatározás? Igen, abszolút. Mi fog történni itt, az az, ez a pont azt mondja, hogy a JavaScript, OK, kapok valamilyen érték ettől a tárgyat magam. És akkor majd keresnek egy bejegyzést nevezett fn, és ha talál, ez lesz visszatérni, hogy value-- igen, akkor Sam. De azt is el lehetne gépelt valamit, ami nem az itt meghatározott, és akkor is csak visszatér undefined-- amely egy dolog, hogy JavaScript csinálni, ami lehet juttatások, de ez also-- ha egy elírás, ez vezethet fura hibák. Szóval akkor csak meg kell találnia bármit is mondani, hogy megtalálják és ez nem fog panaszkodj, ha nem találják meg. Ez csak mondom, én nem találják, majd lépni. Így lenne nem definiált, plusz üres, plusz a vezetéknevét. Igen. És akkor azt látjuk, hogy ha aztán menj le és access-- és felhívjuk tf.print () zárójelben. Meg fog hívni, hogy a nyomtatási függvény paraméterek nélkül, ugye? De ha csak azt mondta tf.print () pontosvessző áll, a zárójelek, minden megtett volna, hogy húzza ki azt a funkciót, az értéket, de valójában nem nevezte. Hűvös. Hugh Zabriskie: Amennyiben teszünk egy tárgyat? SAM GREEN: Persze, csináljuk meg. Szóval lehet mozgatni ezt Például, hogy a konzol. El tudjuk képzelni, hogy van egy tárgy. Szóval ez egy egyszerű tárgy. Ez egy olyan objektum, amely két értékeket két kulccsal, két fontos érték párok. Így tudok majd elérni a tárolt érték belsejében ez a tárgy csinál x.x1, például, és kapok 1 vissza. Hasonlóképpen, x.x2, hogy ezt az értéket vissza. És most az igazán klassz dolog, tudom valóban hozzá valamit ez az objektum miután már létrehozta. Így el lehet képzelni, hadd mondom, van egy funkciója. Hugh Zabriskie: Ön kell tennie SHIFT-ENTER. SAM ZÖLD: Ó, ez bosszantó. Mit tett ez nem tetszik? Ó. Essünk neki. Hűvös. Szóval már csak teremtett Ezt a funkciót, f, hogy fog menni, hogy a jelenlegi tárgya és nyomtatási this.x1. Szóval ha csak hívja f által önmagában semmi sem fog történni, igaz, mert nincs x1 mező a tárgy ez utalva. De, ha azt mondom, x.f = f, és aztán hívja x.f (), megyek vissza 1. Hogy f függvény most objektumhoz társított x, amely egy kulcsfontosságú úgynevezett X1 társított érték 1, így ha hívjuk this.x1, ez Megkeresem amit keres és képes nyomtatni érték el. Szóval ez csak egy példa Az a fajta őrült dolgokat meg tudod csinálni a tárgyakat a JavaScript. Tehát e változat a generikus változata, jelentése hogy már létrehozott egy objektumról ezzel zárójelek notation-- zárójel jelölést, rather-- és ez kapóra jön, ha mi csak szeretnénk az egyik esetben az adott tárgy, hanem mi van, ha azt akarjuk, hogy több mint egy a hasonló jellegű? És a válasz, hogy Kérdés, vannak dolgok, nevezett osztályok JavaScript is. Mi is létrehozhatunk, hogy a funkció nem valamiféle indítása Egy idegen tárgy, és azt mondanám, mint, én class-- így a neve Az újrahasználható object-- megegyezik a funkció, amely meghatározza azt. Szóval mi ez egyenlő lenne hogy jelenleg egy objektum, lenne, mint, kapcsos zárójel, str, vastagbél, Ez egy szöveg, pontosvessző, kapcsos zárójel. Ez lenne a generikus objektum Inicializáljuk, a különbséggel, hogy a következő sorokat hozunk létre egy prototípus, ami azt jelenti, hogy ez egy gyári kulcsot, hogy ehhez hozzátesszük, hogy a tárgy, az értéke szerepel itt. Azt jelenti, hogy, ha létrehozok egy új Például az e MyClass tárgy, ez lesz a már előre elkészített belsejét ez az érték az úgynevezett str és más értéket nevezett myprint, ami lesz egy függvény. Fantasztikus. Nagy. Tehát az utolsó dolog, hogy mondanak JavaScript az, hogy ez tényleg hasznos, amit nevezzük aszinkron műveleteket. Aszinkron azt jelenti, hogy mi lehet várni egy műveletet befejezni, mielőtt mi , de lépni, amíg várunk majd valami történni később. És mit értek ez alatt van, akkor lehet képzelni olyan helyzetet, ahol elküld egy kérést néhány webkiszolgáló valahol, és ez fog küldeni vissza Néhány nagy darab adatok, nem igaz? És a felhasználó tudta várni a Közben, hogy ez megtörténjen, és semmi nem lehet folyik abban az időben. De ez nem egy nagy design, ugye? Nem akarod, hogy a weboldal fagyasztható. Mi van, ha a felhasználó szeretné kattintson a legördülő menüben? Ez nem egy nagy tervezési minta. Ehelyett alapvetően mi JavaScript nem is mondja, OK, ezt a műveletet aszinkron. Szóval tetszik, várjon a háttérben, majd amikor a művelet befejeződött, hívja a visszahívás function-- hívja néhány funkciót, van néhány action-- hogy jelezze, hogy a működés vártuk, hogy vessen véget vége. És az oka, hogy a szuper erős is, tehetünk valamit, át egy érv, tenni valamit, és várjon hogy történjen valami. Aztán egyszer, hogy valami befejezi, akkor hívja a visszahívás. Ez nagyon hasznos, mert lehetővé teszi velünk csinálni a dolgokat a Web Audio API, Például, mint terhelés egy audio fájlt egy távoli szerveren anélkül, hogy várni a teljes audio file betöltése, ami igazán rossz felhasználói élményt. Hűvös. Utolsó pár megjegyzésekkel hibakeresés, mivel ez egy dolog, fogsz kell tennie, részeként a projekt, garantált. Már említettem a JavaScript konzol. Ez egy szuper hasznos funkció Az összes modern böngésző, És valóban arra kérjük Önt, hogy kényelmes használata a konzolt, Ha azt szeretnénk, hogy jó a JavaScript. Ez szuper kapóra hibakeresés, de ez is Nagyon hasznos rájönni , hogyan kell használni az API-t. Ez lehetővé teszi a valóban egyszerű kísérletezés anélkül, hogy be is kódot, majd fordítsuk le. Nem kell mást tennie minden ezeket a lépéseket. Akkor csak írni Néhány kódot egy sort, majd azonnali visszajelzést e vagy sem, hogy a kódsort worked-- nagyon praktikus. És azt is, csak egy technikai note-- A JavaScript konzol egy példa Egy REPL-- hogy az, R-E-P-L, REPL, amelynek jelentése olvasni, értékelni, print hurok. Fogsz írja néhány dolgot a, ez lesz olvasni, amit beírt, ez lesz értékelni azt, és akkor nyomtassa ki a kimenet, és akkor kezdjük újra. Amely lehetővé teszi, hogy gyorsan menjen körök ciklussal, ami nagyon klassz. Azt hiszem, igazi utolsó note-- ezt a tényleges utolsó hang, igen. Hogyan ténylegesen használni JavaScript? Tehát az első, tudjuk importálni ez egy script tag tetején vagy alján egy HTML file-- bárhol belsejében egy HTML fájlt, igazán. És egy script tag van két al-módon importáló JavaScript. Az első az, azáltal, hogy egy Külön JavaScript fájl hogy a behozatali teljes egészében, vagy azáltal, hogy egy olyan terület kódot, mint szkript kezdeni, majd backslash script véget. És akkor csak írni JavaScript belül a HTML fájlt. Ez a két módon. Nem lehet belsejébe a HTML. Közönség: Jobb az egyik, mint a másik? SAM Zöld: A kérdés az volt, az egyik jobb, mint a másik. Szóval, igen, mint egy kódolási stílus gyakorlat, és ez olyan, mint egy tervezési gyakorlat. Ennek két oka van Ezért lehet, hogy jobb. Az első az, mert megkönnyíti a kód egy Sok olvashatóbb, ha minden HTML- van egy helyen, az összes CSS van egy másik helyen, az összes JavaScript egy harmadik helyet. Jobbra? Azt hiszem, már beszéltem róla sections-- mint CSS-- mi hogy is-- és a lövés Gyakran egy másik fájl. Szóval, hasonló jellegű fogalom itt. Azt is képzelni, hogy a JavaScript újra fel lehet használni több mint egy HTML oldal, vagy esetleg egy Nagyon sok HTML oldalak, és miután a JavaScript refactored egyetlen fájlt importálhat egynél több helyen lehetővé teszi a kódot kell így több karbantartható. El lehet képzelni, hogy egy megváltoztatni a JavaScript és el kell változtatni 100 különböző fájlokat. És ahelyett, hogy mi csak változtatni Egy, ami így erősebb. Mondtam a válasz? Hűvös. Azt is írja a konzolba, ahogy már említettem. És még egyszer, utoljára note-- Web Audio épült, Önnek nem kell betölteni semmit. Hűvös. Van-e olyan kérdés, van- bármilyen további kérdése van a JavaScript, mielőtt továbbmegyünk? Közönség: [hallható] SAM ZÖLD: Rendben, jó. Tehát most ő fog beszélni az API. Hugh Zabriskie: Cool. Köszönöm, Sam. SAM GREEN: Persze. Hugh Zabriskie: Félelmetes, így fogunk lépni a JavaScript. Így már beszélt néhány a lényegét JavaScript, és ezek azok a változók, függvények, objektumok, függvények, mint változók, aszinkron betöltése. Ezek mind olyan dolgok, hogy akkor lásd, mint használ a Web Audio. Szóval mi csak beszélni fog róla először magas szinten. Ez egy API, így ez valami hogy épített, mint Sam azt mondta, jobbra a JavaScript hogy használja a konzolt. És ez valójában csak, mint a C ++ kódot hogy valóban épített Chrome és a Firefox, és az összes ilyen böngészők. Tehát a fő gondolata a Web Audio, hogy van ez a fajta vezeték audio, ugye? Szóval a hang-adat jön valamilyen formában. Vannak olyan három fő forms-- van az oszcillátor, amely létrehoz egy szinusz hullám, koszinusz hullám, fogjuk látni, hogy hogyan működik. Egy másik igen gyakori, Persze, egy MP3. Így talán elkezd egy dalt, és akkor szeretnénk, hogy némi szűrés e és kimeneti hogy--, hogy lehet egy lehetséges forrása. És akkor egy nagyon klassz az egyik a mikrofont. Szóval lehet használni néhány nagyon alap hívások JavaScript hogy hozzáférjenek a mikrofon, és így ha akarta, hogy egy app mint egy pitch detektor, például, hogy vesz a hangja, és kitalálja A pitch-- nagyon egyszerű módja annak, hogy. Akkor csak egyfajta olvasni a, kitalálni a frekvencia, majd a kimenetet egy számot. Szóval majd meglátjuk, hogyan működik is. Az úti cél alapvetően ahol az audio kimeneti adatok. Így általában, ez olyan, mint A laptop hangszóró. További lehetőségek olyanok, mint a Egy ScriptProcessorNode-- mi lesz csomópontját second-- de alapvetően, vagy te olyan hangot keresztül a számítógép segítségével hangszórók, vagy te ilyen felvétel, így te tárolja a hang-adat. Szóval talán ha valaki létrehoz Zenéje a app, majd rögzíteni kívánt, és talán, mint az export, hogy SoundCloud, a example-- ez lenne az egyik módja, hogy. Minden szórakoztató dolgokat, amely fogunk beszélni, történik e két pont között, ahol betölteni a zenét majd kimenetet. Így fogok beszélni az öt szakaszában audio termelés a második. Van ez a dolog, az úgynevezett Egy AudioContext, amely ez a kis wrapper itt látunk. Alapvetően mi AudioContext is-- ha menj a JavaScript konzol most, mi is létrehozhatunk egy most. Csak egy példa REPL, ugye? Mi olvasod, értékelésére, és nyomtat. AudioContext egy globális állam. Ez egy struct, ez egy tárgy itt, és ez tartja információk dolgokról folynak A képernyőn kapcsolódó hang. Az egyik példa az aktuális időt. Ez megmondja száma másodperc, nagyon pontosan, mivel ez az internetes oldal betöltésekor. Tehát ez egy nagyon hasznos kisbirtokosok, hogy tudod használni. Ez olvasható only-- Azt hiszem, valójában akkor próbálja meg azt az értéket. Ez Megmondom meg azt, majd ha nyomtatni again-- ez valójában nem igazán működik. Tehát csak olvashatók tulajdonságok a JavaScript. Ez nagyon hasznos, ha te ilyen szinkronizálás egy csomó más információkat, ha éppen fajta játszik különböző hangokat. Egy másik nagyon hasznos egy van összefüggésben célpontja. Határozottan, ha érdekel, legyen próbálják ezt a saját konzolon jobb Most. Szóval ez egy AudioDestinationNode. Alapvetően mi ez mond, hol van a kimeneti megy? Tehát van két valós lehetőség van. Általában az alapértelmezett csak a hangszórókat, így AudioDestinationNode alapvetően csak azt mondja, vannak nulla kimenetet, hogy a hang jön, elküldte a hangszóró. Tehát általánosságban, akkor nem kell játszani vele. Ha érdekel a ténylegesen használt A ScriptProcessorNode rögzítésére, határozottan lőni nekem egy e-mail később, mert ez az, egy kicsit bonyolultabb. De általában, te csak ilyen A kimenetre hangot valamilyen formában. Így jó, akkor ugorj vissza ide. Közönség: Sajnálom. Hugh Zabriskie: Igen. Közönség: Tudom, hogy azt mondta, hogy beszéljen hogy később a felvételeihez. Tud felület, amely a Pro Tools? Hugh Zabriskie: A Pro Tools? Lássuk. Nem hiszem. Szóval megy a kliens, amely a JavaScript konzol, és a tényleges számítógép, általában valamit ez a fajta A behajtani tilos, ha lesz, kedves természete által the-- ez a fajta tervezési dolog, de próbálja tartani a böngésző külön a felhasználó tényleges számítógép. Általánosságban az egyetlen dolog, te képes hozzáférés a mikrofon vagy kamera. Maga nem tudja, én Nem hiszem, használja a Pro Tools. Azonban, ha létrehozott a pálya Pro Tools, exportált, hogy meg tudná betölteni, hogy itt, szűrjük le, például folyamat, és rögzíti, hogy egy Audió Destination-- vagy, no-- Gömb Processzor csomópont. Aztán onnan, akkor exportálni, hogy a SoundCloud, akkor tudna küldeni egy e-mailbe vagy amit akarsz onnan. De van egyfajta enyhe gáton között zenél a számítógépen és a zenélés az interneten. SAM ZÖLD: És ez nem kizárólag ezen API. Ez egy biztonsági funkció a Chrome, és Azt hiszem, minden más modern böngészőben. A böngésző zárt. Így például egy weboldal nem JavaScript használatát kapcsolja ki a hangot A a hangszórókból, például. Vagy nem tudja kapcsolni a számítógépet. És nincs köztes pont e két dolog, igaz, Tehát vagy van egy teljes elvonását, vagy megnyitod az biztonsági hiba hagyta programozó rossz szándék nem amit akarnak a laptop. És ezért Chrome zárt. Hugh Zabriskie: Igen. Ennek van értelme? Hűvös, hideg. Csak azt akartam, hogy példát mutatnak az egyik. Ez nagyjából az amennyire kapsz, tekintve való hozzáférés a felhasználó számítógépén. Ha van egy USB billentyűzet csatlakoztatva, akkor használja valamit az úgynevezett Web MIDI API, amely nem fogunk Tényleg beszélni itt, de ez egy másik API ez épített, legalább Chrome-- újra, ez az, amiért szeretjük Chrome-- Azt hiszem, a Firefox vagy a Safari, ez egy egyszerű dolog google-- különböző böngészők különböző amelynek támogatása API hajtották végre. De ha akarod, hogy csatlakoztassa a billentyűzetet és a munka az információkat, fajta küldje el a billentyűzetet információ át a számítógép majd ezeknek az interneten, ez API ahol azt kell dolgozni, hogy. Hűvös. OKÉ. Szóval, gyorsan mozgó itt. Hogy állunk az ideje? 1. Előadó: Körülbelül 15. Hugh Zabriskie: 15 perc van hátra? Oké, rendben. Így fogunk versenyezni előre itt. Tehát alapvetően a lényeget gondolkodás ez, mint egy csővezeték az, hogy minden egyes lépés a csővezeték egy sor audio csomópontok. A forrásunk, mondjuk, egy oszcillátor. Létre kell hoznunk egy oszcillátor csomópontot. És ez csak egyfajta A kis function-- és ezek mind alapuló out Az audio összefüggésben van. Közönség: amikor azt mondta oszcillátor, ez azt jelenti, ez valójában szó haladva Két különböző oszlopok oda-vissza? Hugh Zabriskie: Nem, ez olyan, mint digitális ábrázolása. Ez ténylegesen végrehajtott C ++. Igazából nem tudom, a specifikációk A hogyan is ténylegesen végrehajtotta De mindez működik, mint bináris adatokat. Tulajdonképpen igen. Ez lenne mondván tudtam valóban, ha érdekel, Azt lehetne küldeni, egy kicsit információt arról, hogyan hullámformák tartják, amelynek digitális formátumban. Oké, rendben. Szóval így egy hang, mint egy szinusz hullám vagy valami ilyesmi, talán 440 Hertz. Mi oszcillátor létre. Ha szeretné beállítani a hangerőt, akkor csatlakoztasson semmit a GainNode, amit megtehetett .creategain. Amely meghatározza a hangerőt. Akkor át, hogy a gépre A többi options-- is, így egy audio buffer forrás csomópont, ahol lehet, egy MP3 hogy már betöltött. Biquad szűrőnek a szűrés, ha azt szeretné, hogy minden alap ki egy dal, vagy valami ilyesmi. Isten ments szeretne venni az alap ki egy dalt. És AudioDestination csomópont, újra, mint ahol a véglegesítés. Ha valaha kíváncsi a különböző lehetséges opciókat, csak megy a lapot, és hagyja, Az automatikus teljes jön. És ha létre, látni fogod az összes különböző dolog, hogy lehet létrehozni. Akkor dinamikus script processzorok, Azt sem tudom, hogy mit van, keveréséhez csatorna fúziók és a csatorna osztók és ennyi. Hűvös. Tehát ez csak egy Például egy gázvezeték. Tehát van három forrásból érkező. Talán ezek hullámformák, Talán ezek MP3. Az egyik megy keresztül szűrő, egy másik ember egyre torzul a másik az ember panoráma balra és jobbra. Meg tudod csinálni mindenféle dolgokat, és mind összekeverednek körül együtt, majd ki jön a hang a végén, mint a rendeltetési hely. Ez egy példa arra, mi több, bonyolultabb Web Audio kód így néz ki. Te létre mindezeket különböző objektumok jobb here-- Nem vagyok biztos ebben. Nem, ez nem közelíthet. OKÉ. SAM ZÖLD: Te Ellenőrző Scroll-Up. Hugh Zabriskie: Ellenőrző Scroll-- SAM ZÖLD: Nem, nem. Ellenőrzés-- Hugh Zabriskie: Ó, vezérlés, Lapozzunk? Ó, megvagy. Igen. Wow, dehogy, dehogy. OKÉ. Én nem fogom megtenni. Szóval igen, ebben az első szakaszban van, látod hozunk létre ezeket a különböző csomópontok ki keretében. Mi csak piecing őket együtt a második részben Ennek a funkciónak nevezett Csatlakozás. Ez egy igazán kulcs funkció Web Audio. Ez csak azt jelenti, ha már megcsináltad valamit a hang az egyik csomópont, adja át a következő csomópontot. Tehát van a forrás, csatlakozik az oldalon, Az oldalon csinál valamit vele, megy torzítás, és így tovább, és a cél a jobb alsó sarokban van. Hűvös. OK, így fogunk haladni tovább. A pipeline-- megint, ezek a leggyakoribb csővezetékek, így beszélünk mindezek a dolgok, mint torzítás, aranymosás, ezt a cuccot. Ha tényleg érdekel használatával dolgokat Pro Tools, ezeket valószínűleg érdekelni fogja. Ha nem, talán csak szeretnék játszani a hang, vagy talán csak azt, hogy állítsa be a hangerőt a hang. Ez a két leggyakoribb sorrend csővezetékek audio termelés. Ismét a módon tudod venni a mint oscillator-- Nos, nézzük nem egy a demo, hogy itt van. Mi is így fogjuk létrehozni egyszerű audio összefüggésben van, és hogy fogunk hogy hozzon létre a oszcillátor. Ez tehát megint mi csak Felhívom létrehozása oszcillátor. Fogunk beállítani egy frekvenciát hogy 440 Hertz, mindenki kedvence. Aztán csatlakozni, hogy a cél point-- ami a hangszóró, így összefüggésben célpontja. Végül, mi csak azt mondják, indul a nulla másodperc múlva, és tudjuk, hogy megbízható? [RINGING] Hugh Zabriskie: Itt vagyunk. Ez csak egy szinuszhullám. Oké, rendben. És akkor majd abba. Közönség: Hol volt hogy visszajelzést származik? Hugh Zabriskie: A visszajelzések? Ó, talán a mikrofon. Szóval igen, ez hogyan csinálod. És valóban, ha lenne tartotta fut, az lehet a jelentése értéket, ami futtatja, Szóval ez egy jó dolog, hogy a játék körül. Hűvös. Ez mindig szép egy bemutatni. SAM ZÖLD: Mi nem gondolni, hogy jutottunk? Hugh Zabriskie: Igen, hogy egy csúnya egyet. Szóval, puffer loading-- megmutatom egy Például az, hogy a legvégén. Ez az betöltése MP3. És mikrofonnal használni csak egy függvény nevű Navigator.getUserMedia () hozzáférést kérhetnek a felhasználó mikrofon az információt. Itt szűrési, én Csak menj tovább ettől. Ez elég magas szinten, de szűrőket csak lehetővé teszi, hogy [Csipogó] Szűrés is lehetővé teszi, hogy hozzon létre a dolgokat, mint a rózsaszín zaj, barna zaj, fehér zaj. Ha szeretne létrehozni tiszta zaj, ami Vannak, akik szeretnek szórakozni, akkor a Web Audio szűrés erre. Audió Panning-- tehát képzelni, Ha írsz egy játék és azt szeretné, hogy a hang hangzik, hogy jön, mint, forgatás az egész képernyőt, akkor Használhatja a panoráma a hang hogy hozza létre ezt a fajta kúp, amely az általam elvártnál ez elég Mathy, de valójában nagyon Hűvös, ha kap ez a munka, és van néhány jó oktatóanyagok rajta tudok küldeni. Alapvetően, akkor milyen Az létre a hang valami megy a 3D-ben módon. És ha van egy DJ kamatot, akkor Keverje össze és át gyengült dalokat. Ez csak néhány alapvető kódot, alapvetően amit tettem, mielőtt. Ez állítja a hangerőt a oszcillátor, így mi teremtjük oszcillátor amely megteremti a görbe. Mi hozzuk létre a GainNode, állítsuk gyakorisága, majd csatlakoztassa az oszcillátor a GainNode, ami aztán alapvetően megváltoztatja hogy mennyi jelet hagytuk keresztül. De tényleg, ez egy digitális dolog, így ez inkább csak-- igen. Ez nem amit valójában, de ez az, ami történik a való életben a nyereség. Közönség: --quantization A kötetparaméter? Hugh Zabriskie: Sajnáljuk? Közönség: Ez egy kvantált kötetparaméter? Hugh Zabriskie: Igen. És ez az egyik dolog, én nagyon hiányos be tudásom, hogyan nyereség működik a digitális szinten. Tudom, a tényleges jelek, ez alapvetően kontrolling el, hogy mekkora felerősítve a jelet. Szóval, igen. Majd küldök bővebb információkat hogy mivel Kíváncsi lennék ténylegesen többet tudni, hogy. De alapvetően a paraméterek vannak, az egyik a fold-- A hangosabb signal-- és nulla nincs jel, vagy nem fogsz hallani semmilyen hangot. Majd hagyja demo ideje, hogy azért, mert ez alapvetően amit tettem, mielőtt. És ismét, a Context.Destination a hang célcsomópontnál. Félelmetes, OK. Így fogok tenni egy gyors két demót. Hogy állunk az ideje? 1. Előadó: Körülbelül 10 perc. Hugh Zabriskie: 10 perc? Nagy! Fantasztikus. Tehát az első fogok igen, ezt hívják a kedvenc dalom. Tehát ez csak egy kis HTML JavaScript. Fogunk van két gomb Az oldalon játszani a kedvenc számom és megáll a kedvenc számom. Én ezen változtatni. Közönség: Fedjük le a mikrofont. Hugh Zabriskie: Igen. És feltöltöm ide egy script, ami basically-- és ez tényleg hasznos kirak MP3, így ez csak teszi loading MP3 módon gyorsabban. Ez alapvetően csak egy átalakító. Ez csak teszi a folyamatot töltődnek be, MP3 sokkal gyorsabb, különben az Ön által használt HTTP kérés, olyan, mint amit csináltunk Az aktuális darab szett Server. Ez nagyon csúnya, akkor Nem akarom csinálni. Szóval ez a fickó, Boris KKV-k, írt egy nagyon hasznos kis eszköz nevű BufferLoader. Minden, amit csinál, egyszerűen adja át a összefüggésben, akkor adja át a list-- vagy, igen, ez egy listát a JavaScript? SAM ZÖLD: Egy tömb. Hugh Zabriskie: Ó, ez tömb, ez így van. Ez egy sor utak a különböző fájlokat. És akkor adja át a funkciót. Ez a visszahívási beszéltünk mintegy aszinkron betöltése. Hogy fogják hívni ha a betöltött fájlok. És ez a funkció, hogy az úgynevezett amikor A fájl betöltött úgy, mint a kerülete egy sor betöltött pufferek. Szóval, hogy itt zajlik. Alapvetően BufferList van lesz az egyik value-- vagy ez lesz egy sor hossza egy, azaz van benne az index nulla egész betöltött fájlt az MP3. Szóval mit csinálok, ha befejezem betöltés, egyszerűen hozzon létre egy puffer forrás, amely egy audió buffer forrás csomópont. A következő lépés az töltsem a source.buffer mint a teljes betöltött puffert A BufferList-- ez egy csomó buffers-- és akkor csatlakozhat, hogy a hang puffer a cél. Tehát mit fog csinálni csak egyszerűen fogalmazva az MP3 egyenesen a kimenetre, és indítsa el azonnal upon egyre ezt a hívást. Cool, így lássuk ez történik akcióban. Saját [hallhatatlan] itt, lássuk. Szóval én csak fog elkezd egy alap szerver. Ez olyasmi, annyit kell tennie, ha kérjen betöltéssel. Megyek kezdeni egy alap szerver. Ez alapvetően az egész PSET most egy sorban, de ez csak most kezdődik szerveren porton 80/80. Szóval megy át itt, fog betölteni 80/80, fogunk menni a kedvenc dalom. Tehát, ha megüt a "Play my kedvenc dalom "most, ez meg fog betölteni az én kedvenc dala, és játszani it-- [ZENE - The Eagles, "az élet a gyorsan  SÁV"] --which előfordul, hogy "Élet A Fast Lane "az Eagles. Most tudtam hit "Ne az én kedvenc dal "és lejátszását teszi. [ZENE - The Eagles, "az élet a gyorsan  SÁV"] És ha átmegyek vigasztalni, mert Én is egy globális változó ide nyomon követni ezt az értéket, hogy valójában Most el kell ismerni a konzol. Tehát automatikus teremt számomra. Szóval ez mit játszik most, és én egyszerűen hívja source.stop () azon a. Hát, tudod mit? Csak, hogy ti hallottam ezt song-- lehet, hogy ismeri ezt a dalt. [ZENE - Rick Astley, "soha nem adod  ÖN AKÁR"] [ZENE - The Eagles, "az élet a gyorsan  SÁV"] Már most mind Rickrolled. OK, jó, a továbblépés. Hűvös. Szóval ez alapvetően egy példa Csak hogyan lehetne be egy MP3 file-- [ZENE - The Eagles, "az élet a gyorsan  SÁV"] --and játszani, és állítsa le és indítsa be. Tudtam volna sokkal több [hallható] Az utolsó fogok csinálni az, Megmutatom neked egy [hallható]. [Zenelejátszási] Ez olyan, mint, ogg.wave.mp3. Azt hiszem, ha jól emlékszem, Már befut néhány kérdést a .m4a, de nem vagyok biztos benne. Azt hiszem mp3.wave-- [ZENE - Rick Astley, "soha nem adod  ÖN AKÁR"] Jólvan szuper. Nem kellett volna mondanom. Különben is, helló. Így van ez a nyitott. Most mind én csinálok, én alapvetően létre alapvető szintaxis zenét készíteni. Szóval, ha valami ilyesmire, add g4 1 2, mit jelent az, hogy add a zongora tudomásul, G4, ami a negyedik G akár a zongorán alulról. Tehát ez a fajta MIDI beszélni, így azok számára, akik a zene alapján, ez csak MIDI esemény. Közönség: Ez a G A Közel-C, ugye? Hugh Zabriskie: Ez a G közép C feletti, ez így van. Közönség: Above Közel C. Hugh Zabriskie: Igen. Tulajdonképpen igen. Azt hiszem, ténylegesen Ez [hallhatatlan], így ez lehet egy oktávval fölött. Tehát lássuk. Ha elütöttem Play-- [Ismétlődő PIANO Megjegyzés] --we're fog hallani. Az elképzelés az, hogy ez működik mint egy parancssori lenne, így ha megyek fel és le én billentyűzetet, akkor mehet vissza az előző parancsok, ami elég hasznos. És alatta van a lista a pályák, amelyek mind futó hurok. Közönség: Te voltál feltételezve, hogy a 88-gombos billentyűzet, igaz? Hugh Zabriskie: A kérdés az volt, én feltételezve egy 88 gombos billentyűzet, és igen, én vagyok. Amit tettem, az I. Alapvetően vett 88 mintát A zongora, egy-egy megjegyzést. És így minden alkalommal, amikor hallani egy megjegyzés mostantól, hogy valójában egy ciklus, ami úgy néz ki, általam elvártnál ez már játszott hurok, így minden figyelmét, hogy ez működik. Mi történik az, hogy hozzon létre egy puffer újra, Létrehozok egy erősítés csomópont beállítani a hangerőt. Ez csak egy nagyon bonyolultabb szóval én tárolja a pufferben egy source.buffer. Azt, hogy ez az erősítés, én csatlakoztassa a nyereség, az erősítés van kötve a kimenet, aztán játszani. Tehát ez a fajta folyamat A vevő a puffer forrás. Közönség: Lehet, hogy tényleg megteszi, hogy száraz hang, és azt nedvesen [hallhatatlan]? Hugh Zabriskie: Tudod, igen. Van újra ige, ott késedelem torzítás. Tudod alapvetően fel semmit között az, hogy a szendvics of-- is, gázvezeték jobb metafora, de lehet hozzá semmit ebben. Hűvös. Szóval én befejezem a demó itt, hogy egyfajta csak a puszta hányszor futhat, hogy a funkció egyszerre. Így fogok, hogy távolítsa el ezt. Megyek, hogy hozzon létre egy generátort hogy-- alapvetően mi does-- ez tényleg egyfajta bonyolult syntax-- de ez fog generálni megjegyzések menet közben, és csak elkezd játszani őket, hogy értékelje azokat. [Közbeiktatásával zongora] Így tudunk csak, hogy egy kis zene itt. [Közbeiktatásával zongora] Szóval mi ez a parancs nem, például, tart a három jegyzeteinek zongora, majd teszi őket a B3. Ez a szintaxis teheti Egy kicsit több értelme hogy azok, akik egy zenei háttér itt. Azt is hozzá egy lábdob. Tudok-- [Közbeiktatásával készülékek] --just játék körül, hogy. Szóval lehet make-- [Közbeiktatásával készülékek] Hogy az ember egy kicsit bosszantó. [Közbeiktatásával készülékek] Úgy, hogy véletlenszerűen hozzáteszi száraz cimbalom minden 16. tudomásul, 16% [NEM HALLHATÓ]. [Közbeiktatásával készülékek] Igen, így, ahogy ez works-- ez mindig 4: 4. [Közbeiktatásával készülékek] Igen, így a négy negyedévben, és a 16/8. [Közbeiktatásával készülékek] Így átlagosan kapsz 60% találatának 16. jegyzeteket. Egyébként, ez csak fajta fitogtatni néhány dolog, amit lehetett építeni a Web Audio API. Ez nagyon erős, ez tényleg gyors, és tudod, hogy egy csomó klassz dolgot azzal. Tehát újra, bármilyen kérdése van, e-mail myself-- Hugh-- vagy Sam, és őszintén, a Google egy csomó jó források. Valami utolsó kérdés? Igen. Közönség: így érheti A beépített mikrofon. Mit tegyünk, ha a használja a jobb mikrofont? Hugh Zabriskie: Ha akarta hogy hatékonyabb mikrofont? Tehát újra, ez része a absztrakció közötti Chrome és a számítógép többi részéhez. Hacsak nem érhető el egy API, mint a webes MIDI API, akkor talán talál valami hack, de általában nem megvalósítható. SAM ZÖLD: Akkor also-- minden Chrome tudja, az, amit az alapértelmezett mikrofon van, és újra csatlakozik a. Tehát, ha volt egy mikrofont, amit lehetett beállítva a számítógép alapértelmezett mikrofon, meg tudná elérni, hogy így és ez valószínűleg működni. Hugh Zabriskie: Ez egy jó pont. Még soha nem próbáltam, de akkor lehet, hogy egyfajta of-- ha átirányíthatja az input hangszóró, lehet, hogy képes erre, igen. Valami utolsó kérdés? Hűvös. Hát köszi srácok így sokat nézi. Én Hugh. SAM ZÖLD: Én vagyok Sam. Hugh Zabriskie: És ez CS50.