Exploring JavaScript and the Web Audio API by Sam Green and Hugh Zabriskie

Exploring JavaScript and the Web Audio API by Sam Green and Hugh Zabriskie

>> VERDE SAM: Hola, todo el mundo. Bienvenido a nuestro seminario. Me llamo Sam. HUGH ZABRISKIE: Soy Hugh. VERDE SAM: Y vamos a hablar hoyacerca de JavaScript y la API de Web Audio. Sólo para empezar, este es un esquemade nuestra agenda para el seminario. Vamos a comenzar hablando depor las que debe estar interesado en la Web API Audio, ¿por qué es JavaScriptel idioma que necesita para ello, y luego hablar de JavaScriptessentials-- así como, Puedes caminar a través de algunosfundamentos de la lengua, y luego hablar de laAPI de audio a un nivel alto. Entonces, Hugh hablará sobre algunosde las etapas de producción de audio y luego una demostración de este impresionante secuenciadorproyecto que construyó y le mostrará el código. Y luego, vamos a tener tiempo parapreguntas al final de la gente que están aquí vivir. >> HUGH ZABRISKIE: Cool. >> VERDE SAM: Cool. >> HUGH ZABRISKIE: Cool. Voy a realizar copias de seguridad. >> SAM VERDE: Así que, primero lo primero. Así que una de las grandes cosassobre la Web API Audio es que no hay puesta en marcha es necesario. Viene integrado enla mayoría de los navegadores modernos, incluyendo Chrome, Edge, en su conjuntomanojo de otros-- todos los que grandes porciones dela gente está utilizando hoy en día. Así que no se ha configurado,aparte de conseguir justo un servidor web en marcha, parausted pueda empezar a trabajar en su proyecto, lo cual es genial. >> Le recomendamos bastanteen gran medida de que se tiene en cuenta utilizando Chrome paraDesarrollo web JavaScript, sólo porque su desarrolladorherramientas son muy fuertes. Como ejemplo de justo lo que queremos decirdiciendo abre tu JavaScript console-- si vas en Chromey nos fijamos en cualquier página web, y te fuiste clicInspeccionar elemento, y luego ir a este pequeño desplegableaquí y hace clic en la consola, verás lo que abre ve unamuy parecido a un símbolo del sistema que podría ver en tu Mac, o en la ID. Y así, podemosTipo manda aquí, como Claro, y otros comandos por el estilo. Podemos crear variables, comoveremos más adelante en JavaScript. Y así que cualquier cosa que podemos hacer enJavaScript, podemos hacerlo con la consola, y eso es una forma súper práctico paraempezar a jugar con las API y sentirse cómodo conJavaScript derecha del palo. Sin puesta en marcha requiere,que es realmente agradable. Guay. Impresionante. >> Así que sólo una cosa más para agregar. Si usted tiene alguna preguntas-- existenmuchos de ustedes que no están aquí viven, no dude en enviar por correo electrónico nosotros-- éstosson nuestras direcciones de correo electrónico. Si tienes preguntasusted no quiere pedirnos, como, oh Tengo un erroren mi código, o algo eso es un poco más específico,quizá en Google en primer lugar. Hay un montón de grandes recursosacerca de la API de audio web por ahí. Es realmente biendocumentado y está siendo utilizado por un montón de gente enla industria y las personas que son simplemente la construcción de cosas divertidas para ellos mismos. Así que debe haber un montónde los recursos que hay. Impresionante. >> Fresco, así que por qué la Web API de audio? Este diagrama es un pocode una evolución de la forma sonido en la web ha crecido con el tiempo. Bgsound era como la etiqueta HTML originalque Internet Explorer utiliza para apoyar. Sólo se permitió sonidos bastante básicas,la funcionalidad no era muy robusta, y no se podía hacersecuenciación complicado, o controlar cuando el sonido comenzóy se detuvo muy robusta. Por lo tanto, no era particularmentebien desarrollado. Luego, después de que, Flashllegó along-- que, Estoy seguro de que ustedes están familiarizadoscon Flash-- quizá no cómo funciona, pero usted ha visto sin duda. Tienes que actualizar flashPlug-in, todo ese tipo de cosas, y que sin duda amplió la gamade funcionalidad que estaba disponible. Pero lo que el usuario instaleun plug-in es, sin duda Un inconveniente de incluyendo Flashen su aplicación, ¿no? Porque entonces usted es dependiente de lausuario ir y encontrar este plug-in, y probablemente se enciendaapagado por este paso adicional que tienen que tomar para usar la aplicación. Y entonces podría haber una actualizaciónque voy a romper toda la aplicación, y que termina siendo una pesadillapara el desarrollador, también. Así que fue una barricada. >> Y luego, después de eso vino a lo largo,la etiqueta de audio HTML, que es una característica de más moderno que HTML--sin duda permitió muchas más cosas, pero incluso las cosas que podrían hacerHabía un poco limitado solo como resultado de las cosasque HTML era capaz. Así que cuando el código JavaScriptAPI, la API Web Audio, se convirtió en un estándarpracticar en todos los navegadores, que realmente ampliado el conjuntode las oportunidades para los desarrolladores para conseguir realmente en el edificiocosas interesantes para la web. Durante mucho tiempo no teníansido herramientas muy robustas para aplicaciones de audio nativo,como-- todo el mundo sabe GarageBand, y luego, obviamente, hay másaudio mezclando aplicaciones profesionales, y ese tipo de cosas. Pero no había unmuy bueno Cloud-- no Nube, sí, supongoPlataforma web Cloud-- que permitiría a los desarrolladores aconstruir aplicaciones para las personas hacer la mezcla de audio. Y como él le mostrarámás adelante, la Web API Audio permite realmente de gran alcancecosas suceda realmente, simplemente, lo cual es muy bueno. Así que esa es la instrucción de por quédebería ver el resto del seminario, básicamente. >> Y ahora, voy a hablar dealgunos elementos básicos simplemente JavaScript-- de la lengua, de modo quepodemos estar en la misma página cuando hablamos de laAPI un poco más tarde. Guay. >> Por lo tanto, este es un resumen. Olvidé que estaba aquí. Sí. >> HUGH ZABRISKIE: Hay dos toboganes aquí. >> VERDE SAM: Este es el resumende algunas de las limitaciones de los otros métodos de unión, de edad. Y entonces ahora, tenemos estas cosas. Guay. Impresionante. >> Por lo tanto, elementos esenciales de JavaScript. Lo primero es lo primero, hay unadiferencia bastante significativa en JavaScript frente en unalenguaje como C, en la forma que se crean variables. Así que en C, que estamos acostumbrados a tenerpara escribir nuestras variables, ¿verdad? Y no me refiero a tipo comoescriba en ellos, quiero decir el tipo como ellos asignar un significado type--como, un int, float, un char. En C, estábamos muy acostumbrados atener que crear una variable y luego se adhieren a ese tipo para eltiempo entero que usamos esa variable. Y eso no es necesariamente peor,pero es probablemente más difícil de usar. Una de las características interesantesde JavaScript es que las variables son lo que se llama"dinámicamente mecanografiado", que significa que yo puedo crear unavariable que la sintaxis, varX es igual a 5, por ejemplo. Eso crea originalmenteun número entero variable-- justo debajo de lacampana somewhere-- pero puede cambiar esa variablepara referirse a una cadena sin hacer nada por el estilocrear una nueva variable. No necesito que preocuparsesobre el tipo de cambio. JavaScript sabe que el tipo decambiado, y eso ocurre de forma dinámica. >> Por lo tanto, hay beneficiosy desventajas a que, como cualquier persona que ha trabajado enJavaScript durante un tiempo podría saber. Hay momentos en queusted puede ser accidental cambiar el tipo de una variable yNo maneje ese tipo de cambio, y entonces tu JavaScriptpuede crash-- o una excepción ser echado, ya que tendrá latipo incorrecto cuando se espera un tipo. Guay. >> Así, scoping-- que es como, sirecordar las primeras semanas en el curso, hace referencia a una variable de forma visiblees y en qué área del código. Todo eso se ve muy similara la forma en que se ve en C. Así que las variables están en el ámbito generaldentro de llaves dentro de una función, y luego también haylas variables a nivel global con ámbito que trate: si escribes una variablefuera de una función, será visible en todo el texto. >> Una diferencia entreJavaScript y C, en particular, es que si se declara un mundialcualquier variable en un archivo de texto es visible en cualquier funcióndentro de ese archivo de texto. Eso es correcto, ¿no? >> HUGH ZABRISKIE: Sí. >> VERDE SAM: ¿Así que es también un pocopoco raro en comparación con C, donde siempre tenía que tener nuestradefiniciones de variables por encima de los lugares que se utilizaron. Eso no es una regla que se aplicamás, así, un poco diferente. Y de nuevo sólo para enfatizar,global frente variables-- locales muy similar a C. Usted podría tenerdos variables con el mismo nombre, y tienen uno de sus nombres se remedenpor una variable local si uno de ellos era global. Así tipo, similar deproblemas que algunos de ustedes pueden haber topado en algunade su problema establece hasta el momento. Fresco, así que eso es variables. >> Control de flujo, es decir, como,-si else-- stuff-- lógico y bucles. Así que para empezar, esto es lo que if-elsedeclaraciones parecen en JavaScript. La colocación de las diversas cosasen las líneas no es importante. Esta es sólo una de las convencionespor la forma en código de estructura que. Al igual que en C, tenemos una"si," una declaración paréntesis. Eso no es lo que quería hacer. Lo hice otra vez. >> HUGH ZABRISKIE: Tratando de salir? SAM VERDE: No, estoytratando de acercar la imagen. No importa. >> Así pues, tenemos una declaración "if" ytenemos una condición dentro de ella que evalúa a verdadero o falso,y que determina si o no entramos en ese bloque de código. Y del mismo modo, tenemos una cosa, si yuna persona, al igual que estamos acostumbrados en C. >> También debe ser bastante cómodola derecha del palo con bucles, porque también se venmuy parecido a C parece. Pero te darás cuenta de nuevo quetienen, en lugar de int inicializaciones, tenemos inicializaciones var. Y supongo que tienestener cuidado de hacer Seguro de que no cambie el valorde I a partir de un int a una cadena, por ejemplo, debido a que va aprovocar un comportamiento extraño puede que no esperar. Pero esto debe serbastante familiar, también. >> Así que aquí es donde las cosas empiezan aconseguir un poco loco en JavaScript para alguien que va desde unfondo de C. Hay funciones en JavaScript, y no hay una manerapara declarar una función que se ve tipo de similar a C, yluego hay otro que se ve un poco diferente. >> La primera versión,que podemos ver aquí, es una especie de C-como, en sudecimos, esta es una función, darle un nombre, darel número de argumentos, y luego el contenido de la funciónir dentro de esas llaves. Vamos a ver un ejemplo deargumentos en sólo un segundo. >> Mientras que en la línea siguiente, vemos, oh,aquí está una variable llamada "myFunction" y somos iguales a estefunction-- cosa-- genérico que no parece tener nada que hacer. La razón por la que es diferenteque C es que JavaScript es lo que se llama un lenguaje funcional,o tiene elementos funcionales, lo que significa que las funciones son en realidad valores. Y eso significa que podemos estableceruna variable para igualar una función y luego pasar esa funciónalrededor, pasarlo como argumento, hacer todo tipo de cosasasí con las funciones. >> Otra cosa a note--funciones se escriben con un cierto número de argumentos. Vamos a ver un ejemplo de una funcióncon un argumento en la siguiente diapositiva. Pero JavaScript no lo harágritarte si intenta utilizar una función con elnúmero incorrecto de argumentos. Simplemente va a hacer su mejor esfuerzo para hacerhacer, lo que significa que si se pasa, se llama a una función que espera undiscusión con ningún argumento, todo lo que va a pasar es que va a hacer su mejor momentopara tratar de ejecutar ese código, y si se ejecuta con el tiempoen una excepción o un error, que va a lanzar esa excepción y sólo seguirgoing-- que es sólo una de las formas que funciona JavaScript. Sí. >> AUDIENCIA: ¿Qué sucede sihay demasiados argumentos? VERDE Carter: Así que lapregunta era, ¿qué sucede si hay demasiados argumentos? Y la respuesta es queJavaScript será justo ignorar los que estándespués de los que espera. Se tratará de ejecutar la funciónllamar como si era sólo los dos primeros. ¿Correcto? >> HUGH ZABRISKIE: Eso es correcto, sí. Del mismo modo, si hayson muy pocos argumentos, sólo tipo de da nula a todos losargumentos que no tiene ningún valor para. >> SAM VERDE: ¿Qué se puedeser realmente útil, si quiero escribir una función quetoma unos argumentos numéricos variables. Puede establecer valores por defecto enla definición de la función, y se puede ignorar el hecho deque la entrada no está allí. Así que quiero hablar un pocomás sobre esta última bala punto, que es las funciones son valores. Este es un ejemplo que esun alucinante poco si usted acaba de leer, y no creeacerca de lo que está pasando por un segundo. Por lo tanto, echemos un vistazo justo enla primera línea aquí. Tenemos esta variable, f1, que decimoses una función que hace esto. Y el contenido de la funciónse console.log ('hola'). Usted puede pensar en console.log como elEquivalente JavaScript de printf. Entonces, ¿qué va a pasar es que, si nosejecutar este código en nuestro navegador, que va a imprimir una cadena. Puedo demostrar que. AUDIENCIA: Por registro, sin embargo, hace quesignifica que sea que se está grabando en alguna parte? VERDE SAM: Sí. Así que te voy a mostrar lo que va a suceder. Así que la pregunta era, ¿qué significa log? >> HUGH ZABRISKIE: Así console.loges como printf de C. SAM VERDE: Así console.loges como printf, por lo que si tengo este console.log ('hola'),y yo llamo a eso, la cadena "hola" se imprime en la consola. Esta es la consola. Es como printf, dondeimprime a cabo estándar. Y veremos en un minuto,pero esto es en realidad se hace referencia al objeto de la consola,y llamar a un método en ese objeto. Eso va a hacer más sentidoen un minuto cuando nos llegar a hablar deobjetos en JavaScript, pero yo pensaba que iba a mencionar eso. HUGH ZABRISKIE: Estamosutilizado en el C, derecha- escribimos generalmente un gran programaen principal para hacer cualquier cosa. Pero lo que es fresco en JavaScript que estener este tipo de intérprete que carreras en tiempo real, por lo quetoma simplemente línea por línea, que sólo puede interpretar que en el acto. Y no pierde de vistalas cosas que se han ejecutado antes, por lo que es una herramienta muy útil parautilizar console.log, o la consola, en general, por sólo jugaralrededor con JavaScript. >> VERDE Carter: Así que volver a esteejemplo-- la segunda línea de código aquí es bastante alucinante en mi cabeza. La primera vez que leo esto,era como, ¿qué está pasando? Así que lo que está sucediendo es decir, estedeclaración de la función, dice, Tengo una función llamada f2que está esperando un argumento, f, y luego se llama a esofunción, f, que se le pasa como argumentoni por sí mismo con argumentos. Por lo tanto, que podría haber sido confuso. Si entendemos esto como f2 f1 tomacomo argumento, y luego dentro de f2, f consigue called-- cuyos mediosque esta línea de código, después de estas dos líneas decódigo, da como resultado "hola" que se está imprimiendo a la consola. >> El hecho de que podemos pasarfunciones alrededor como valores termina siendo uno de los máspotentes funciones de JavaScript como un lenguaje de programación. Fuera de toda lacosas increíbles que puede hacer, así como una característica de lalengua en términos de la forma que hace las cosas fácilesprogramar y permite por las cosas que no son particularmentebien adaptado a la web, programación funcional y funcionalaspectos de programación de JavaScript es uno de los másconceptos de gran alcance que existe en JavaScript-- si usted me pregunta. Guay. >> Por lo tanto, lo siguiente. Además de ser funcional,también hay elementos de JavaScript que son orientada a objetos,que es uno de los muy palabras de moda populares en ciencias de la computación. Programación orientada a objetoses un dato popular. JavaScript tiene una versión de que,donde creo que todo valor es también un objeto, lo que significa que todos los objetosenvuelve a algunos número de valores. Así que para valores que son simples, comoun número entero, como varX es igual a 5, ese objeto simplemente envuelve que un valor. >> Pero también podemos imaginar una situaciónwhere-- podemos pensar en situaciones en C donde queríamos haceralgo con estructuras, por ejemplo, que envuelve variosvalores juntos y marcas Es realmente fácil de pasar las cosas. Fue entonces cuando un objeto está en JavaScript. >> Es importante recordarcuando digo que los objetos envueltos algunos número de valores juntos,que las funciones son también valores, lo que significa que las funciones puedenTambién estar dentro de un objeto de JavaScript. Y la razón por la que es importantees que, mientras que a menudo pensar en llamar a un métodoen un objeto que es de un término popular de otroslenguajes orientados a objetos populares, Una de las diferencias es que aquítodo lo que es un método en JavaScript es un valor almacenado en el interior de un objetoque realiza alguna Action-- posiblemente usando los otros valores que están dentro dede ese objeto, pero no necesariamente. Así que usted puede imaginar una situación,Supongo que en un poco de una manera loca, donde llamó un método de unaobjeto en otro objeto, por ejemplo. Así que es un poco cobarde de esa manera. >> Y también se puede cambiar los métodosque están asociados con un objeto mediante la asignación de un método quenueva función, que es también bastante diferente de otroslenguajes orientados a objetos, donde una vez que declaramos un objetoy crear instancias de ella, no podemos cambiar los métodos que sonasociado con ese objeto más. Así que eso es bastante diferente. Guay. >> Así que aquí está un ejemplo, en primer lugar,de un objeto en la acción. Esto es lo que se llamaun objeto genérico, que significa que no tiene ningúnen particular nombre, no tiene una clase, que es sólo un poco de envoltura de valores. Y la forma en que se ve es que tenemoseste par exterior de rizado se prepara aquí que indicar a JavaScripty decir, se trata de un objeto. Los valores dentro de ellason cada uno de los valores en el interior del objeto que debeser envuelto juntos. Y dentro de ese objeto,entonces tenemos pares de valores clave, donde la clave se refiere al nombredel valor en el interior del objeto, y el otro side--frente a la aquí-- de colon es el valor realque deben ser almacenados. >> Así que ver aquí que tenemos unaclave llamada fn con valor sam, seguido de una coma,diciendo a la siguiente entrada. A continuación, una clave llamada ln,con un valor de verde, seguido de una coma,seguido de "imprimir" que va a tener un valor de la funciónque va a hacer esta línea de código. Vamos a dar un paso atrás ydesempacar lo que está pasando aquí. Así que esto es un poco complicado,y estamos viendo algo nuevo por primera vez. La palabra "this" es lo nuevoque estamos viendo aquí, y lo que esto hace es decir, se refiere a la actualobjetar en su alcance, ¿no? Así que cuando decimos, estoseñala el final de nuevo a todo este objeto--cuando hacemos this.fn, vamos a ir todo el camino de regresoa este objeto, vaya al valor fn y obtener sam, tire de él hasta el finalespalda, pegarlo aquí, y luego seguir adelante. >> AUDIENCIA: Así que con la recuperación, esque hecho por el parámetro ¿definición? VERDE Carter: Así que la pregunta era, es elrecuperación de hecho porque del parámetro ¿definición? Sí, absolutamente. ¿Qué va a pasar aquí es,este punto dice que el código JavaScript, OK, me estoy poniendo un poco de valorde este objeto de mí mismo. Y entonces va a buscar una entradallamada fn, y si lo encuentra, que va a volver que value-- así, es sam. Pero también podría haber escritoalgo que no se define aquí, y luego lo haría solovolver undefined-- que es una cosa que puede JavaScripthacer, que puede tener beneficios, pero es También-- si usted comete un error tipográfico,puede dar lugar a errores extraños. Así que sólo voy a tratar de encontrarlo que le dices a encontrar y no va aquejarse si no lo encuentra. Simplemente va a decir, no lo hiceencontrarlo, y luego seguir adelante. Por lo que sería indefinido,más blanco, más el apellido. Sí. Y entonces podemos ver que sientonces podría bajar y access-- y llamamos tf.print () con paréntesis. Se va a llamar a esa impresiónfunción sin argumentos, ¿no? Pero si acabamos de decir tf.print ()punto y coma, sin los paréntesis, todo lo que habría hecho es tirarla función del valor, pero en realidad no lo llamó. Guay. HUGH ZABRISKIE: En caso dehacemos un objeto? VERDE SAM: Claro, vamos a hacer eso. Así que me puedo mover esteejemplo a la consola. Podemos imaginar que tengo un objeto. Así que esto es un simple objeto. Este es un objeto que contiene dosvalores con dos llaves, dos valores clave pares. Así que entonces puedo acceder al valor almacenadodentro de este objeto haciendo x.x1, por ejemplo, y me da 1 vuelta. Del mismo modo, x.x2, conseguir ese valor de nuevo. >> Y ahora lo realmente interesante es, que puedarealmente añadir algo a este objeto después de que yo he creado. Así que usted puede imaginar, vamosdecir que tengo una función. >> HUGH ZABRISKIE: Ustedtener que hacer Shift-Enter. >> VERDE SAM: Oh, eso es molesto. ¿Qué no le gusta? Oh. Aquí vamos. Guay. >> Así que he creadoesta función, f, que va a ir a la corrienteobjeto y this.x1 impresión. Así que si me llamo por fsí, nada va a suceder, ¿verdad, porque no hay x1campo en el objeto que se está refiriendo a. Pero, si yo digo, x.f = f, y luego mellamar x.f (), me voy a volver 1. Esa función f es ahoraasociado con el objeto x, que tiene una clave llamada x1asociado con el valor 1, así que cuando nos llamamos this.x1, esva a encontrar lo que está buscando y ser capaz de imprimir un valor fuera. Así que eso es sólo un ejemplodel tipo de las cosas locas que puede hacer con los objetos en JavaScript. >> Así que fue la versiónversión genérica, significado que hemos creado un objeto utilizando esteparéntesis notación corsé notation--, rather-- y eso esmuy útil si sólo queremos una instancia de un objeto en particular, pero¿y si queremos tener más de un de la misma clase? Y la respuesta a esapregunta es, hay cosas llamado clases en JavaScript también. Podemos crear una función quehace algún tipo de inicialización para un objeto extraño,y diríamos, como, mi class-- lo que el nombredel objeto-- reutilizable es igual a la función que lo configura. Así que lo que esto sería equivalenteque es la creación de un objeto que sería como,corchete, str, colon, esto es una cadena,punto y coma, corchete. Ese sería el genéricoobjeto inicializamos, con la única diferencia de estar en elsiguientes líneas creamos un prototipo, que significa que es una clave por defecto queañadimos a nuestro objeto de que tiene el valor indicado aquí. Lo que significa que, cuando creo un nuevoinstancia de este objeto MiClase, que va a haber pre-construido en el interior dees un valor llamado str y otro valor myPrint llamada, que esva a ser una función. Impresionante. >> Excelente. Así que lo último que sedecir de JavaScript es que es muy útil para lose denominan operaciones asincrónicas. Medios asíncrona es que nosotrospuede esperar a que alguna operación para completar antes de pasar, pero seguir adelante mientras esperamos y luego hacer que algo suceda en el futuro. Y lo que quiero decir con esto es que ustedpuede imaginar una situación en la que envía una solicitud aalgún servidor web en cualquier sitio, y que va a que le envíe de vueltaalguna gran parte de los datos, ¿no? Y el usuario podría esperar en elMientras tanto para que eso suceda, y nada podría serpasando en ese momento. Pero eso no es un gran diseño, ¿no? Usted no quiere que la página web se congele. ¿Qué pasa si el usuario deseahaga clic en un menú desplegable? No es un gran patrón de diseño. En cambio, en el fondo lo queJavaScript no se dice, OK, realizar esta operación de forma asíncrona. Así como, esperar en el fondo,y luego, cuando se realiza la operación, llame a la devolución de llamada function--llamar a alguna función, Haga un poco de Action-- para señalar que eloperación que estábamos esperando para terminar se acabó. Y la razón de que es súper poderosa es,podemos hacer algo, pasar un argumento, hacer algo, y luego esperarpara que algo suceda. Luego, una vez que algocompleta, podemos llamar a una devolución de llamada. Eso es muy útil, ya que permitenosotros hacemos las cosas con Web API Audio, por ejemplo, como una cargaarchivo de audio desde un servidor remoto sin tener que esperar a que elarchivo de audio que va a cargar, lo cual sería realmentemalo para la experiencia del usuario. Guay. >> Última pareja observa sobredepuración, ya que este es una cosa que vas a tener que hacercomo parte de su proyecto, garantizado. Mencioné la consola JavaScript. Es una característica muy útilde todos los navegadores modernos, Y realmente invitamos a obtenercómodo usando la consola, si quieres ser bueno en JavaScript. Es súper útil paradepuración, pero también es muy útil para calcularcómo utilizar una API. Permite la realidadfácil experimentación sin tener que escribir algunacódigo y, a continuación, compilarlo. Usted no tiene que hacer todos esos pasos. Usted puede escribiralgo de código en una línea, y luego obtener información inmediata sobresi esa línea de código worked-- muy práctico. >> Y también, sólo una note-- técnicala consola de JavaScript es un ejemplo de un REPL-- así que eso es R-E-P-L, REPL,que significa leer, evaluar, lazo de impresión. Vas a escribir algunas cosasen, va a leer lo que ha escrito en, que va a evaluar, y que va a imprimir elde salida, y luego se va a empezar de nuevo. Eso le permite ir rápidamente encírculos iteración, que es realmente genial. >> Supongo última verdadera note-- estees la verdadera última nota, sí. ¿Cómo podemos realmente utilizamos JavaScript? Así que primero, podemos importarusando una etiqueta de script en la parte superior o inferior de un HTML file--en cualquier lugar dentro de un archivo HTML, De Verdad. Y dentro de una etiqueta de script, haydos sub-modos de importación JavaScript. El primero es por tener unaarchivo JavaScript independiente que importamos en su totalidad, opor tener un área de código como guión para empezar, y luegoscript de barra invertida a fin. Y entonces sólo escribimosJavaScript dentro del archivo HTML. Esas son las dos maneras. No se puede tener dentro de HTML. AUDIENCIA: ¿Es uno mejor que el otro? VERDE SAM: La pregunta era,Es uno mejor que el otro. Así que, sí, como una práctica estilo de codificación,y también es como una práctica de diseño. Hay dos razonespor qué podría ser mejor. La primera es, que hace que su código de unamucho más legible si todo el código HTML está en un solo lugar, todos los de su CSS está enotro lugar, todo tu JavaScript se encuentra en un tercer lugar. ¿Correcto? Creo que ya deberíamos haber habladoal respecto en las Categorías-- como CSS-- lo que es-- y vaa menudo en otro archivo. Así, el mismo tipo de concepto aquí. También puede imaginar que JavaScriptsería ser reutilizado en más de una Página HTML, o tal vez unagran número de páginas HTML, y que tiene que JavaScriptrefactorizado en uno archivo que se puede importaren más de un lugar permite que el código seamanera más fácil de mantener. Se puede imaginar hacer unocambiar el JavaScript y tener que cambiarloen 100 archivos diferentes. Y en vez podemos simplemente cambiarloen uno, que es mucho más potente. ¿He respondido a su pregunta? Guay. >> También podemos escribir en la consola,como hemos mencionado antes. Y una vez más, una última note--Web Audio está construido, usted no tiene que cargar nada. Guay. ¿Hay alguna pregunta, ¿tienecualquier más preguntas acerca de JavaScript, antes de seguir adelante? >> AUDIENCIA: [inaudible] VERDE SAM: Muy bien, fresco. Así que ahora él va a hablar de la API. >> HUGH ZABRISKIE: Cool. Gracias, Sam. >> VERDE SAM: Claro. HUGH ZABRISKIE: impresionante, por lo quevamos a pasar de JavaScript. Así que hemos hablado de algunos delo esencial de JavaScript, y esas son las variables, funciones,objetos, funciones como variables, carga asíncrona. Estas son todas las cosas que usted va aver como se utiliza la Web Audio. Así que sólo vamos a hablaracerca de lo primero en un nivel alto. >> Es una API, así que es algoque se construye, como dijo Sam, a la derecha en el código JavaScriptque se utiliza en la consola. Y en realidad es como código C ++lo que realmente se construyeron en Chrome y Firefox, y todos estos navegadores. Así que la idea principal con la WebAudio es que tienes este tipo de tubería de audio, ¿verdad? Así sus datos de audioviene en alguna forma. >> Hay clase de de tres forms-- principalusted tiene el oscilador, que crea una onda sinusoidal, onda coseno,vamos a ver cómo funciona. Otro muy común,por supuesto, es un MP3. Así que tal vez usted comienza conuna canción, y luego querer hacer algún tipo de filtradoa eso y de salida que- que podría ser una posible fuente. Y luego un muy cooluno es el micrófono. Así que usted puede utilizar algunos muyllamadas básicas en JavaScript para obtener acceso a lamicrófono, por lo que si usted quería hacer una aplicacióncomo un detector de tono, por ejemplo, que lleva ensu voz y datos fuera el pitch-- manera muy fácil de eso. Puede sólo tipo de leerloen, averiguar la frecuencia, y entonces la salida un número. Así que vamos a ver cómo funciona, también. >> El destino es básicamentedonde los datos de audio se emite. Así que en general, eso es comolos altavoces portátiles. Otras opciones son comoun ScriptProcessorNode-- vamos a llegar a los nodos de unsecond-- pero básicamente, ya sea que usted está poniendo sonido a caboa través de su ordenador a través de altavoces, o si buscas tipo de grabación, por loestás almacenarla como datos de audio. Así que tal vez si alguien creala música en su aplicación y después que desea grabar eso y tal vez comoexportarlo a SoundCloud, por ejemplo-- eso sería una manera de hacer eso. Todas las cosas divertidas,que hablaremos, que ocurre entre estos dos puntos,donde cargamos en la música y luego salida de la misma. >> Así que voy a hablar de los cincoetapas de producción de audio en un segundo. Tenemos esta cosa llamadaun AudioContext, que es este pequeño envoltorio que vemos aquí. Básicamente lo AudioContext es-- siir a la consola de JavaScript en este momento, podemos crear uno ahora mismo. Sólo un ejemplo de REPL, ¿verdad? Estaban leyendo,evaluar y que imprime. >> AudioContext es un estado global. Es una estructura, es un objetoaquí, y mantiene la información acerca de las cosas que están pasandoen la pantalla relacionados con el audio. Un ejemplo es la hora actual. Esto le indica el númerode segundo, con mucha precisión, desde la página web cargada. Así que esta es una muy útilpequeña propiedad que puede utilizar. Ha leído only-- creo que en realidadse puede tratar de establecer un valor. Se dirá que establezca,y luego, si lo imprima nuevo-- no fue así en realidad bastante trabajo. Así que no son de sólo lecturapropiedades en JavaScript. Esto es realmente útil siestás tipo de sincronización una gran cantidad de diferentesinformación, cuando estás tipo de tocar diferentes sonidos. >> Otra muy útiles el destino contexto. En definitiva, si te interesa, ya seaintentar esto en su propio derecho de la consola ahora. Así que este es un AudioDestinationNode. Básicamente lo que dice es,¿Hacia dónde va la salida? Así que hay dos opciones reales aquí. Por lo general, el valor por defectoes sólo de los altavoces, así AudioDestinationNodebásicamente dice hay cero salidas al sonidoentrando, enviado al altavoz. Así que en general, no lo hacetienes que jugar con eso. Si usted está interesado en utilizar realmentela ScriptProcessorNode para la grabación, Definitivamente me an dispararcorreo electrónico más tarde porque eso es un poco más complicado. Pero, en general, usted es sólo un pocode la salida de sonido en alguna forma. Tan guay, vamos a saltar de nuevo aquí. AUDIENCIA: Lo siento. HUGH ZABRISKIE: Sí. AUDIENCIA: Sé que usted dijo que hablara usted más tarde acerca de la grabación. ¿Puedes interfaz que con Pro Tools? >> HUGH ZABRISKIE: Con Pro Tools? Veamos. No lo creo. Así que va entre el cliente,que es el JavaScript consola, y su realcomputadora, es generalmente algo que es una especiede fuera de los límites, si voluntad, tipo por la naturaleza de el--es una especie de cosa diseño, pero intenta mantener el explorador independientedesde el ordenador real del usuario. Por lo general, lo único que es capaz dede acceso es el micrófono o la cámara. No eres capaz de hacerlo, meno creo, utilice Pro Tools. Sin embargo, si ha creadouna pista en Pro Tools, exportado que, usted podría cargar eseaquí, filtrarla, por ejemplo, proceso que, y registrar que en unAudio Destination-- o no-- una Esfera Nodo procesador. Y a continuación, a partir de ahí, se podíaexportar que a SoundCloud, que podría enviar en un correo electrónico, olo que quiera a partir de ahí. >> Pero hay una especie de pequeña barreraentre hacer música en su computadora y hacer música en línea. >> SAM VERDE: Y eso esno es exclusivo de esta API. Es una característica de seguridad de Chrome, yCreo que cualquier otro navegador moderno. El navegador es autónomo. Así, por ejemplo, una página web no puedeutilizar JavaScript para activar el sonido en los altavoces, por ejemplo. O no puede apagar la computadora. Y no hay punto intermedioentre esas dos cosas, a la derecha, así que o tienes unacompleta abstracción, o se abre lafalla de seguridad de dejar un programador con malas intenciones hacerlo que quieran con su computadora portátil. Y es por eso Chrome es autónomo. >> HUGH ZABRISKIE: Sí. Tiene sentido? Guay guay. Yo sólo iba amostrar un ejemplo de uno. Esto es más o menos comola medida de lo que se obtiene, en términos de acceder a la computadora del usuario. Si tiene un teclado USB conectado,puede utilizar algo que se llama la Web API MIDI, que no lo haremosrealmente hablar aquí, pero esto es otra API que esincorporada en al menos Chrome-- de nuevo, es por eso que nos encanta Chrome--Creo que Firefox o Safari, esto es una cosa fácil degoogle-- navegadores diferentes tienen diferente de soporte para los cualesAPIs que han implementado. Pero si usted quiere conectar un tecladoy trabajar con esa información, tipo de enviar el tecladola información a la computadora y luego utilizar esa línea, esta APIes el lugar donde quiere estar trabajando eso. >> Guay. OKAY. Así, moviéndose rápidamente de aquí. ¿Cómo vamos a tiempo? >> ALTAVOZ 1: Sobre 15. >> HUGH ZABRISKIE: 15 minutos para el final? Vale, guay. Así que vamos a carrera por delante aquí. >> Así que, básicamente, el principal punto depensar en esto como una tubería es que cada paso en la tuberíaes una serie de nodos de audio. Nuestra fuente, digamos, es un oscilador. Tenemos que crear un nodo de oscilador. Y eso es sólo un pocode la pequeña function-- y están todos basados ​​cabodel contexto audio aquí. >> AUDIENCIA: Cuando se dijooscilador, ¿significa que en realidad es, literalmente, al pasar dedos polos diferentes de ida y vuelta? >> HUGH ZABRISKIE: No, es comouna representación digital. Se aplica realmente en C ++. En realidad no sé las especificacionesde cómo se llevan a la práctica, pero todo esto está funcionando como datos binarios. En realidad, sí. Eso estaría diciendo, que pudeEn realidad, si te interesa, Yo podría enviar un poco másinformación sobre cómo las formas de onda se mantienen con un formato digital. Vale, guay. >> Así que estamos generando un tono como un sineonda o algo así, tal vez 440 Hertz. Creamos un oscilador. Si queremos ajustar el volumen, nosconecte nada a un GainNode, que podríamos ver con .creategain. Que establece su volumen. Puede pasar que en cualquierdel otro options-- así, por lo que una fuente de búfer de audionodo es donde usted puede ser almacenar un MP3 que usted ha cargado en. >> Biquad filtro es para el filtrado siusted quiere tomar toda la base fuera de una canción, o algo así. Dios no lo quiera usted quiere tomarla base de una canción. Y el nodo AudioDestination es, de nuevo,al igual que nuestra conclusión es. Si alguna vez interesado en vertodas las diferentes opciones posibles, sólo tiene que ir a la pestaña y dejarla auto-completar subir. Y si usted no cree, usted verá todo eldiferentes cosas que se pueden crear. Puede crear dinámicaprocesadores de secuencia de comandos, Ni siquiera sé lo quees decir, para la mezcla de fusiones de canal y divisores de canal y todo eso. Guay. >> Así que esto es sólo unaejemplo de una tubería. Así que tenemos tres fuentes entrando. Tal vez estos son formas de onda,tal vez se trata de archivos MP3. Uno va a través de unfiltro, de otra siendo distorsionada otrala propia paneo de izquierda y derecha. Usted puede hacer todo tipo de cosas ytodos ellos se mezclan todo junto, y luego sale el audioal final, como destino. Este es un ejemplo de lo máscomplicada Web código de audio se parece. Usted está creando todos estosdiferentes objetos derecho aquí-- No estoy seguro de esto. No, no tiene zoom. OKAY. >> VERDE SAM: Haces de control, Scroll-Up. HUGH ZABRISKIE: Control Scroll-- VERDE SAM: No, no. Controlar-- >> HUGH ZABRISKIE: Oh, control, desplácese? Oh, te pillé. Sí. Vaya, pues no, pues no. OKAY. No haré eso. >> Así que sí, en esta primerasección aquí, ves estamos creando todas estas diferentesnodos fuera del contexto. Estamos formando con ellasjuntos en la segunda parte por esta función llamada Connect. Esa es una realidad clavefunción en Web Audio. Simplemente significa que una vez que has hechoalgo con el sonido en un nodo, pasarlo a la siguiente nodo. Así que tenemos la fuente,conecta al analizador, el analizador hace algo con él,que va a la distorsión, y así sucesivamente, y al destinoabajo a la derecha aquí. Guay. OK, así que vamos a seguir avanzando. >> El pipeline-- de nuevo, éstosson las tuberías más comunes, así que hablamos de todas estas cosas comodistorsión, paneo, todas estas cosas. Si usted está realmente interesadoen el uso de las cosas de Pro Tools, quienes probablemente le interesen. Si no es así, tal vez sóloquiero jugar el sonido, o tal vez lo que desea esajustar el volumen del sonido. Esos son los dos tipo más comúnde gasoductos en la producción de audio. >> Una vez más, las formas en que pueden tomarloen como oscillator-- así, vamos a hacer la demostración de que aquí. Así que vamos a crear uncontexto de audio sencillo aquí, y de que vamoscrear nuestro oscilador. Así que esto es, de nuevo, sólo estamosva a llamar Crear oscilador. Vamos a establecer una frecuencia deque, 440 Hertz, de todos favorito. Entonces nos conectamos que al destinopoint-- que es el altavoz, por lo el destino contexto. Por último, nos limitamos a decir, empezar de cerosegundo a partir de ahora, y qué nos suena? >> [ZUMBIDO] >> HUGH ZABRISKIE: Aquí vamos. Es sólo una onda sinusoidal. Vale, guay. Y luego nos detendremos eso. >> AUDIENCIA: ¿De dóndeque la retroalimentación viene? >> HUGH ZABRISKIE: La retroalimentación? Oh, probablemente nuestros micrófonos. Así que sí, así es como lo haces. Y de hecho, si tuvieramantenido en funcionamiento, podría tener la frecuenciavalor que se está ejecutando, así que eso es una cosa divertida de jugar. Guay. Eso es siempre una encantadora una a presentar. >> VERDE SAM: No lo hizopensamos en eso, hicimos? HUGH ZABRISKIE: Sí,eso es una desagradable. Así, tampón loading-- voy a mostrar unejemplo de ello en el final. Eso es cargar un MP3. Y el micrófono, se utiliza sólo una funciónllamado Navigator.getUserMedia () para solicitar el acceso al usuario demicrófono para esa información. >> Aquí está filtrando, voy asimplemente mantenerse en movimiento de este. Esto es muy alto nivel,pero los filtros sólo le permiten >> [SONIDO] Filtrado también le permitepara crear cosas como el rosa el ruido, el ruido marrón, ruido blanco. Si desea crear ruido puro, quealgunas personas les encanta perder el tiempo con, puede utilizar Web Audiofiltrado para hacer eso. >> Audio Panning-- así que imaginasi usted está escribiendo un juego y desea que el sonidosuena como si viniera, como, disparar a través de la pantalla,puede usar el paneo del audio para crear este tipo de cono,que como-- es bastante mathy, pero en realidad es muyfresco si consigues que funcione, y hay algunas buenastutoriales sobre lo que se puede enviar. Básicamente, usted puede clasede crear el sonido de que algo salga por una forma 3D. Y si usted tiene un interés de DJ, puedeempezar a mezclar y cruzar canciones desvanecimiento. >> Este es sólo un muy básicocódigo, básicamente lo que hice antes. Ajusta el volumen de laoscilador, así que creamos nuestro oscilador que crea la forma de onda. Creamos nuestra GainNode,establecer nuestra frecuencia, y luego conectar el oscilador a laGainNode, que luego cambia básicamente la cantidad de señal se permite a través. Pero, en realidad, es una cámara digitalcosa, por lo que es más sólo-- sí. Eso no es lo que está sucediendo realmente,pero eso es lo que sucede en la vida real con una ganancia. >> AUDIENCIA: --quantizationdel parámetro de volumen? HUGH ZABRISKIE: Lo siento? AUDIENCIA: ¿Es unaparámetro de volumen cuantificado? HUGH ZABRISKIE: Sí. Y esto es una cosa que estoy muydeficiente en mi conocimiento, cómo funciona la ganancia a nivel digital. Sé que con realseñales, es básicamente la cantidad de control que eresamplificar la señal. Así que sí. Te voy a enviar más información sobreeso, porque tengo curiosidad realidad saber más sobre eso. Pero básicamente los parámetrosson, uno es el fold-- el signal-- más fuerte y el cero no esseñal, o no se oye ningún sonido. Nos saltaremos tiempo de demostración de que, debido aque es básicamente lo que hice antes. Y de nuevo, la Context.Destinationes el nodo de destino audio. Impresionante, OK. >> Así que me voy a hacer un rápido dos demos. ¿Cómo vamos a tiempo? >> ALTAVOZ 1: Cerca de 10 minutos. >> HUGH ZABRISKIE: 10 minutos? ¡Excelente! Impresionante. >> Así que lo primero que yo voy ado, se llama mi canción favorita. Así que esto es sólo unapoco de HTML JavaScript. Vamos a tener dos botonesen la página de jugar mi canción favorita y detener mi canción favorita. Voy a cambiar esto. >> AUDIENCIA: Cubra su micrófono. >> HUGH ZABRISKIE: Sí. Y yo he cargado aquíun guión que basically-- y esto es realmente útilpara cargar un MP3, así que esto sólo hacecargar manera MP3s más rápido. Es básicamente una envoltura. Simplemente hace que el proceso deloading MP3s mucho más rápido, de lo contrario estás usando petición HTTP,algo así como lo que estábamos haciendo en la pieza actual establecido con el servidor. Es muy feo, queno quieren hacerlo. >> Así que este chico, Boris Smus, escribió una realidadpequeña herramienta útil llamada BufferLoader. Todo lo que hacemos es simplemente pasarlo alcontexto, se pasa un películas-- o, sí, es una lista en JavaScript? SAM VERDE: Una matriz. HUGH ZABRISKIE: Oh, esuna matriz, que sea adecuado. Es un conjunto de caminosa diferentes archivos. Y luego se le pasa una función. Se trata de la devolución de llamada hablábamosacerca de con la carga asíncrona. Eso se llamaUna vez que los archivos cargados. Y esa función que se llama cuandoel archivo de carga toma como un perímetro una serie de amortiguadores cargados. Así que se produce aquí. Básicamente, es BufferListva a ser uno value-- o que va a ser una serie delongitud uno, que tiene en ella en el índice cero el archivo cargado entera del MP3. Así que lo que hago cuando terminocarga es, simplemente crear una fuente de tampón, quees un nodo de origen búfer de audio. El siguiente paso es que se carga en elsource.buffer como tampón de carga completa Del BufferList--que es un montón de buffers-- y luego conectar ese audioamortiguar al destino. Entonces, ¿qué se va a haceres simplemente poner el MP3 directamente a través de la salida,y comenzar inmediatamente al llegar a esta llamada. >> Fresco, así que vamos a veresto sucede en la acción. Mi [inaudible] aquí, vamos a ver. Así que sólo voy ainiciar un servidor básico. Eso es algo queque tiene que hacer si estás hacer peticiones de archivos de carga. Voy a iniciar un servidor básico. Esto es básicamente su totalidadPSET ahora mismo en una línea, pero se acaba de empezarun servidor en el puerto 80/80. Así que vamos por aquí, nosva a cargar 80/80, vamos a ir a mi canción favorita. Así que si me golpeó "Jugar micanción favorita "en este momento, que va a cargar micanción favorita y jugar it-- [MÚSICA - The Eagles, "LA VIDA EN EL RÁPIDO CARRIL"] -que pasa a ser "La vida enel carril rápido "de The Eagles. Ahora, yo podría golpear "Deja de micanción favorita "y reproducirlo. >> [MÚSICA - The Eagles, "LA VIDA EN EL RÁPIDO CARRIL"] >> Y si me voy a consolar, porqueHe utilizado una variable global por aquí hacer un seguimiento de este valor, que en realidadahora será reconocido en la consola. Por lo tanto, auto-crea para mí. Así que eso es lo que está sonando en este momento,y yo simplemente puedo llamar source.stop () en eso. Bueno, ¿sabes qué? Sólo para que ustedes han oído estosong-- es posible reconocer esta canción. >> [MÚSICA - Rick Astley, "Never Gonna DAR USTED UP "] [MÚSICA - The Eagles, "LA VIDA EN EL RÁPIDO CARRIL"] Hemos ahora todos han rickrolled. OK, genial, de seguir adelante. Guay. Así que esto es básicamente un ejemplo delo que podría cargar un MP3 file-- [MÚSICA - The Eagles, "LA VIDA EN EL RÁPIDO CARRIL"] --y jugarlo, y detener y comenzar a ella. Yo podría haber hecho mucho más [inaudible] >> El último que voy a hacer es,Te voy a mostrar un [inaudible]. >> [REPRODUCCIÓN DE MÚSICA] >> Es como, ogg.wave.mp3. Creo que, si no recuerdo mal,Me he topado con algunos problemas con .m4a, pero no estoy seguro de eso. Creo mp3.wave-- >> [MÚSICA - Rick Astley, "Never Gonna DAR USTED UP "] >> Vale genial. No debería haber dicho eso. De todos modos, hola. Así que tenemos esta abierta. Así que ahora todo lo que hago es, básicamente creadouna sintaxis básica para crear música. Así que si no hago algo así, agregue g4el 1 de 2, lo que eso significa es que, añadir la nota piano, G4,que es la cuarta G arriba en el piano de la parte inferior. Así que esto es una especie de MIDI hablar,así que para aquellos que se basan la música, esto es simplemente notas MIDI. >> AUDIENCIA: Esa es la Gdel Medio C, ¿verdad? >> HUGH ZABRISKIE: Esta es la Gpor encima de Medio C, es cierto. >> AUDIENCIA: Sobre Medio C. >> HUGH ZABRISKIE: Sí. Actualmente, si. Creo que en realidad hicenos [inaudible], por lo que esta podría ser una octava por encima de eso. Así que vamos a ver. Si me golpeó Play-- [PIANO REPETITIVOS NOTA] --we're va a oír eso. La idea es que operaal igual que una línea de comandos sería, así que si me voy arriba y abajoen mi teclado, puede volver a la anteriorcomandos, lo cual es bastante útil. Y a continuación es mi lista de pistas,que están todos funcionando en bucle. >> AUDIENCIA: Usted fue asumiendo la88 teclas del teclado en eso, ¿verdad? >> HUGH ZABRISKIE: La pregunta era,estoy asumiendo un teclado de 88 teclas, y sí, lo soy. Lo que hice es quebásicamente tomó 88 muestras del piano, uno para cada nota. Y así, cada vez queescuchar una nota de ahora en adelante, que en realidad es un bucle que se parececomo-- Esto se está poniendo reproducir en bucle, por lo que para cada nota, esto se está ejecutando. Lo que pasa es que yocrear un tampón de nuevo, Puedo crear un nodo de ganancia para ajustar el volumen. Esto sólo una realidadcomplicada manera de decir que almacenar el tampón en un source.buffer. Le doy la ganancia, yoconectarlo a la ganancia, la ganancia está conectado a lade salida, y luego la toco. Así que es una especie de procesode tomar en una fuente de búfer. >> AUDIENCIA: ¿Puede usted realmente tomar esesonido seco y que sea húmeda [inaudible]? >> HUGH ZABRISKIE: Puede, sí. Hay re-verbo, hayretardo, distorsión. Básicamente, puede poner cualquier cosa enentre en ese sándwich de-- así, tubería es una metáfora mejor,pero usted puede añadir nada a eso. Guay. >> Así que voy a terminar la demoaquí para darle un sentido apenas de la gran cantidad de veces que sepuede ejecutar esa función a la vez. Así que me voy a quitar esto. Voy a crear un generador que--básicamente lo does-- esto es realmente una especie de syntax-- complicado pero esva a generar notas sobre la marcha, y acaba de empezar a jugarellos ya que les evalúa. [PIANO interponiendo] >> Así que sólo podemos hacer un poco de música aquí. [PIANO interponiendo] >> Así que lo que este comandohace, por ejemplo, es que toma esas tres notas para elpiano y luego los pone en B3. Esta sintaxis puede hacerun poco más de sentido para aquellos que tienen unmúsica de fondo aquí. >> Puedo añadir un bombo. Yo puedo-- >> [Interponiendo INSTRUMENTOS] >> --sólo jugar con eso. >> Así que usted puede make-- [Interponiendo INSTRUMENTOS] Que uno es un poco más molesto. [Interponiendo INSTRUMENTOS] >> Así que se suma al azar címbalo secaen cada nota 16a, con un 16% [INAUDIBLE]. >> [Interponiendo INSTRUMENTOS] >> Sí, por lo que la forma en que estaworks-- siempre en 4: 4. [Interponiendo INSTRUMENTOS] >> Sí, por lo que los cuatro trimestres, y 16/8. [Interponiendo INSTRUMENTOS] >> Así que, en promedio, se obtiene el 60%de accesos a las notas 16. >> De todas formas, esto era sólotipo de mostrarse algunas de las cosas que podríaconstruir con la Web API Audio. Es muy potente, es muy rápido,y usted puede hacer un montón de cosas interesantes con ello. Así que de nuevo, cualquier pregunta que tenga,email myself-- Hugh-- o Sam, y honestamente, Google tieneun montón de buenos recursos. Alguna última pregunta? Sí. >> AUDIENCIA: Así que usted puede acceder ael micrófono incorporado. ¿Qué pasa si usted quiereutilizar un micrófono mejor? HUGH ZABRISKIE: Si queríaspara utilizar mejor micrófono? Así que de nuevo, esto es parte de laabstracción entre Cromo y el resto de su equipo. A menos que sea disponible a través deuna API, como API Web MIDI, que probablemente podría encontrar algunos hacks,pero generalmente no es tan viable. >> VERDE SAM: Puede También--todo el cromo sabe es lo que el micrófono predeterminadoes, y tiene acceso a eso. Así que si usted tenía un micrófono pudierasestablecer como micrófono predeterminado del equipo, usted puede acceder a él de esa maneray probablemente trabajar. HUGH ZABRISKIE: Ese es un buen punto. Nunca lo he intentado, perousted podría ser capaz de clase de-- si redirige el altavoz de entrada,usted podría ser capaz de hacer eso, sí. >> Alguna última pregunta? Guay. Bueno, gracias chicostanto por su atención. Estoy Hugh. VERDE SAM: Soy Sam. HUGH ZABRISKIE: Y esto es CS50.

Noticias relacionadas