1 00:00:00,000 --> 00:00:05,900 2 00:00:05,900 --> 00:00:07,170 >> VERDE SAM: Hola, todo el mundo. 3 00:00:07,170 --> 00:00:08,640 Bienvenido a nuestro seminario. 4 00:00:08,640 --> 00:00:10,009 Me llamo Sam. 5 00:00:10,009 --> 00:00:11,050 HUGH ZABRISKIE: Soy Hugh. 6 00:00:11,050 --> 00:00:17,420 VERDE SAM: Y vamos a hablar hoy acerca de JavaScript y la API de Web Audio. 7 00:00:17,420 --> 00:00:21,180 Sólo para empezar, este es un esquema de nuestra agenda para el seminario. 8 00:00:21,180 --> 00:00:25,350 Vamos a comenzar hablando de por las que debe estar interesado en la Web 9 00:00:25,350 --> 00:00:30,130 API Audio, ¿por qué es JavaScript el idioma que necesita para ello, 10 00:00:30,130 --> 00:00:32,619 y luego hablar de JavaScript essentials-- así como, 11 00:00:32,619 --> 00:00:34,800 Puedes caminar a través de algunos fundamentos de la lengua, 12 00:00:34,800 --> 00:00:37,290 y luego hablar de la API de audio a un nivel alto. 13 00:00:37,290 --> 00:00:41,140 Entonces, Hugh hablará sobre algunos de las etapas de producción de audio 14 00:00:41,140 --> 00:00:45,509 y luego una demostración de este impresionante secuenciador proyecto que construyó y le mostrará el código. 15 00:00:45,509 --> 00:00:48,050 Y luego, vamos a tener tiempo para preguntas al final de la gente 16 00:00:48,050 --> 00:00:49,593 que están aquí vivir. 17 00:00:49,593 --> 00:00:50,540 >> HUGH ZABRISKIE: Cool. 18 00:00:50,540 --> 00:00:50,990 >> VERDE SAM: Cool. 19 00:00:50,990 --> 00:00:51,383 >> HUGH ZABRISKIE: Cool. 20 00:00:51,383 --> 00:00:52,170 Voy a realizar copias de seguridad. 21 00:00:52,170 --> 00:00:54,960 >> SAM VERDE: Así que, primero lo primero. 22 00:00:54,960 --> 00:00:57,840 Así que una de las grandes cosas sobre la Web API Audio 23 00:00:57,840 --> 00:01:00,480 es que no hay puesta en marcha es necesario. 24 00:01:00,480 --> 00:01:04,230 Viene integrado en la mayoría de los navegadores modernos, 25 00:01:04,230 --> 00:01:08,630 incluyendo Chrome, Edge, en su conjunto manojo de otros-- todos los 26 00:01:08,630 --> 00:01:12,650 que grandes porciones de la gente está utilizando hoy en día. 27 00:01:12,650 --> 00:01:14,807 Así que no se ha configurado, aparte de conseguir justo 28 00:01:14,807 --> 00:01:16,890 un servidor web en marcha, para usted pueda empezar a trabajar 29 00:01:16,890 --> 00:01:18,420 en su proyecto, lo cual es genial. 30 00:01:18,420 --> 00:01:21,500 31 00:01:21,500 --> 00:01:24,190 >> Le recomendamos bastante en gran medida de que se tiene en cuenta 32 00:01:24,190 --> 00:01:26,530 utilizando Chrome para Desarrollo web JavaScript, 33 00:01:26,530 --> 00:01:30,260 sólo porque su desarrollador herramientas son muy fuertes. 34 00:01:30,260 --> 00:01:33,220 Como ejemplo de justo lo que queremos decir diciendo abre tu JavaScript 35 00:01:33,220 --> 00:01:38,600 console-- si vas en Chrome y nos fijamos en cualquier página web, 36 00:01:38,600 --> 00:01:43,897 y te fuiste clic Inspeccionar elemento, y luego 37 00:01:43,897 --> 00:01:46,730 ir a este pequeño desplegable aquí y hace clic en la consola, 38 00:01:46,730 --> 00:01:50,660 verás lo que abre ve una muy parecido a un símbolo del sistema que 39 00:01:50,660 --> 00:01:53,720 podría ver en tu Mac, o en la ID. 40 00:01:53,720 --> 00:01:59,260 Y así, podemos Tipo manda aquí, como Claro, 41 00:01:59,260 --> 00:02:01,350 y otros comandos por el estilo. 42 00:02:01,350 --> 00:02:04,267 Podemos crear variables, como veremos más adelante en JavaScript. 43 00:02:04,267 --> 00:02:07,100 Y así que cualquier cosa que podemos hacer en JavaScript, podemos hacerlo con la consola, 44 00:02:07,100 --> 00:02:11,430 y eso es una forma súper práctico para empezar a jugar con las API 45 00:02:11,430 --> 00:02:15,760 y sentirse cómodo con JavaScript derecha del palo. 46 00:02:15,760 --> 00:02:18,290 Sin puesta en marcha requiere, que es realmente agradable. 47 00:02:18,290 --> 00:02:18,790 Guay. 48 00:02:18,790 --> 00:02:22,064 49 00:02:22,064 --> 00:02:22,880 Impresionante. 50 00:02:22,880 --> 00:02:24,780 >> Así que sólo una cosa más para agregar. 51 00:02:24,780 --> 00:02:27,780 Si usted tiene alguna preguntas-- existen muchos de ustedes que no están aquí viven, 52 00:02:27,780 --> 00:02:31,232 no dude en enviar por correo electrónico nosotros-- éstos son nuestras direcciones de correo electrónico. 53 00:02:31,232 --> 00:02:33,190 Si tienes preguntas usted no quiere pedirnos, 54 00:02:33,190 --> 00:02:36,160 como, oh Tengo un error en mi código, o algo 55 00:02:36,160 --> 00:02:39,270 eso es un poco más específico, quizá en Google en primer lugar. 56 00:02:39,270 --> 00:02:42,340 Hay un montón de grandes recursos acerca de la API de audio web por ahí. 57 00:02:42,340 --> 00:02:44,089 Es realmente bien documentado y está siendo 58 00:02:44,089 --> 00:02:47,194 utilizado por un montón de gente en la industria y las personas que son simplemente 59 00:02:47,194 --> 00:02:48,610 la construcción de cosas divertidas para ellos mismos. 60 00:02:48,610 --> 00:02:51,306 Así que debe haber un montón de los recursos que hay. 61 00:02:51,306 --> 00:02:53,040 Impresionante. 62 00:02:53,040 --> 00:02:56,100 >> Fresco, así que por qué la Web API de audio? 63 00:02:56,100 --> 00:02:59,840 Este diagrama es un poco de una evolución de la forma 64 00:02:59,840 --> 00:03:04,100 sonido en la web ha crecido con el tiempo. 65 00:03:04,100 --> 00:03:13,080 Bgsound era como la etiqueta HTML original que Internet Explorer utiliza para apoyar. 66 00:03:13,080 --> 00:03:16,790 Sólo se permitió sonidos bastante básicas, la funcionalidad no era muy robusta, 67 00:03:16,790 --> 00:03:19,380 y no se podía hacer secuenciación complicado, 68 00:03:19,380 --> 00:03:21,890 o controlar cuando el sonido comenzó y se detuvo muy robusta. 69 00:03:21,890 --> 00:03:23,930 Por lo tanto, no era particularmente bien desarrollado. 70 00:03:23,930 --> 00:03:27,470 Luego, después de que, Flash llegó along-- que, 71 00:03:27,470 --> 00:03:31,712 Estoy seguro de que ustedes están familiarizados con Flash-- quizá no cómo funciona, 72 00:03:31,712 --> 00:03:32,920 pero usted ha visto sin duda. 73 00:03:32,920 --> 00:03:35,586 Tienes que actualizar flash Plug-in, todo ese tipo de cosas, 74 00:03:35,586 --> 00:03:40,110 y que sin duda amplió la gama de funcionalidad que estaba disponible. 75 00:03:40,110 --> 00:03:45,370 Pero lo que el usuario instale un plug-in es, sin duda 76 00:03:45,370 --> 00:03:48,480 Un inconveniente de incluyendo Flash en su aplicación, ¿no? 77 00:03:48,480 --> 00:03:52,410 Porque entonces usted es dependiente de la usuario ir y encontrar este plug-in, 78 00:03:52,410 --> 00:03:54,660 y probablemente se encienda apagado por este paso adicional 79 00:03:54,660 --> 00:03:56,640 que tienen que tomar para usar la aplicación. 80 00:03:56,640 --> 00:04:01,270 Y entonces podría haber una actualización que voy a romper toda la aplicación, 81 00:04:01,270 --> 00:04:03,880 y que termina siendo una pesadilla para el desarrollador, también. 82 00:04:03,880 --> 00:04:06,230 Así que fue una barricada. 83 00:04:06,230 --> 00:04:10,480 >> Y luego, después de eso vino a lo largo, la etiqueta de audio HTML, que 84 00:04:10,480 --> 00:04:16,579 es una característica de más moderno que HTML-- sin duda permitió muchas más cosas, 85 00:04:16,579 --> 00:04:20,050 pero incluso las cosas que podrían hacer Había un poco limitado solo 86 00:04:20,050 --> 00:04:22,730 como resultado de las cosas que HTML era capaz. 87 00:04:22,730 --> 00:04:26,060 Así que cuando el código JavaScript API, la API Web Audio, 88 00:04:26,060 --> 00:04:29,290 se convirtió en un estándar practicar en todos los navegadores, 89 00:04:29,290 --> 00:04:32,490 que realmente ampliado el conjunto de las oportunidades para los desarrolladores 90 00:04:32,490 --> 00:04:36,590 para conseguir realmente en el edificio cosas interesantes para la web. 91 00:04:36,590 --> 00:04:39,220 Durante mucho tiempo no tenían sido herramientas muy robustas 92 00:04:39,220 --> 00:04:44,360 para aplicaciones de audio nativo, como-- todo el mundo sabe GarageBand, 93 00:04:44,360 --> 00:04:48,360 y luego, obviamente, hay más audio mezclando aplicaciones profesionales, 94 00:04:48,360 --> 00:04:49,640 y ese tipo de cosas. 95 00:04:49,640 --> 00:04:52,690 Pero no había un muy bueno Cloud-- no 96 00:04:52,690 --> 00:04:55,811 Nube, sí, supongo Plataforma web Cloud-- 97 00:04:55,811 --> 00:04:58,310 que permitiría a los desarrolladores a construir aplicaciones para las personas 98 00:04:58,310 --> 00:05:00,570 hacer la mezcla de audio. 99 00:05:00,570 --> 00:05:03,960 Y como él le mostrará más adelante, la Web API Audio 100 00:05:03,960 --> 00:05:07,470 permite realmente de gran alcance cosas suceda realmente, simplemente, 101 00:05:07,470 --> 00:05:09,597 lo cual es muy bueno. 102 00:05:09,597 --> 00:05:12,680 Así que esa es la instrucción de por qué debería ver el resto del seminario, 103 00:05:12,680 --> 00:05:14,350 básicamente. 104 00:05:14,350 --> 00:05:17,880 >> Y ahora, voy a hablar de algunos elementos básicos simplemente JavaScript-- 105 00:05:17,880 --> 00:05:20,240 de la lengua, de modo que podemos estar en la misma página 106 00:05:20,240 --> 00:05:22,470 cuando hablamos de la API un poco más tarde. 107 00:05:22,470 --> 00:05:23,260 Guay. 108 00:05:23,260 --> 00:05:26,192 >> Por lo tanto, este es un resumen. 109 00:05:26,192 --> 00:05:27,150 Olvidé que estaba aquí. 110 00:05:27,150 --> 00:05:27,510 Sí. 111 00:05:27,510 --> 00:05:27,870 >> HUGH ZABRISKIE: Hay dos toboganes aquí. 112 00:05:27,870 --> 00:05:30,245 >> VERDE SAM: Este es el resumen de algunas de las limitaciones 113 00:05:30,245 --> 00:05:35,220 de los otros métodos de unión, de edad. 114 00:05:35,220 --> 00:05:37,828 Y entonces ahora, tenemos estas cosas. 115 00:05:37,828 --> 00:05:40,011 Guay. 116 00:05:40,011 --> 00:05:40,510 Impresionante. 117 00:05:40,510 --> 00:05:43,200 >> Por lo tanto, elementos esenciales de JavaScript. 118 00:05:43,200 --> 00:05:47,230 Lo primero es lo primero, hay una diferencia bastante significativa 119 00:05:47,230 --> 00:05:49,940 en JavaScript frente en una lenguaje como C, en la forma 120 00:05:49,940 --> 00:05:52,050 que se crean variables. 121 00:05:52,050 --> 00:05:55,634 Así que en C, que estamos acostumbrados a tener para escribir nuestras variables, ¿verdad? 122 00:05:55,634 --> 00:05:57,800 Y no me refiero a tipo como escriba en ellos, quiero decir el tipo 123 00:05:57,800 --> 00:06:01,900 como ellos asignar un significado type-- como, un int, float, un char. 124 00:06:01,900 --> 00:06:05,210 En C, estábamos muy acostumbrados a tener que crear una variable 125 00:06:05,210 --> 00:06:09,690 y luego se adhieren a ese tipo para el tiempo entero que usamos esa variable. 126 00:06:09,690 --> 00:06:13,990 Y eso no es necesariamente peor, pero es probablemente más difícil de usar. 127 00:06:13,990 --> 00:06:16,190 Una de las características interesantes de JavaScript es 128 00:06:16,190 --> 00:06:19,740 que las variables son lo que se llama "dinámicamente mecanografiado", que 129 00:06:19,740 --> 00:06:22,500 significa que yo puedo crear una variable que la sintaxis, 130 00:06:22,500 --> 00:06:25,800 varX es igual a 5, por ejemplo. 131 00:06:25,800 --> 00:06:27,790 Eso crea originalmente un número entero variable-- 132 00:06:27,790 --> 00:06:29,870 justo debajo de la campana somewhere-- pero 133 00:06:29,870 --> 00:06:33,040 puede cambiar esa variable para referirse a una cadena 134 00:06:33,040 --> 00:06:35,820 sin hacer nada por el estilo crear una nueva variable. 135 00:06:35,820 --> 00:06:37,880 No necesito que preocuparse sobre el tipo de cambio. 136 00:06:37,880 --> 00:06:45,440 JavaScript sabe que el tipo de cambiado, y eso ocurre de forma dinámica. 137 00:06:45,440 --> 00:06:48,510 >> Por lo tanto, hay beneficios y desventajas a que, 138 00:06:48,510 --> 00:06:51,250 como cualquier persona que ha trabajado en JavaScript durante un tiempo podría saber. 139 00:06:51,250 --> 00:06:53,600 Hay momentos en que usted puede ser accidental 140 00:06:53,600 --> 00:06:57,720 cambiar el tipo de una variable y No maneje ese tipo de cambio, 141 00:06:57,720 --> 00:07:01,120 y entonces tu JavaScript puede crash-- o una excepción 142 00:07:01,120 --> 00:07:06,070 ser echado, ya que tendrá la tipo incorrecto cuando se espera un tipo. 143 00:07:06,070 --> 00:07:07,040 Guay. 144 00:07:07,040 --> 00:07:11,470 >> Así, scoping-- que es como, si recordar las primeras semanas en el curso, 145 00:07:11,470 --> 00:07:15,420 hace referencia a una variable de forma visible es y en qué área del código. 146 00:07:15,420 --> 00:07:18,400 Todo eso se ve muy similar a la forma en que se ve en C. 147 00:07:18,400 --> 00:07:24,755 Así que las variables están en el ámbito general dentro de llaves dentro de una función, 148 00:07:24,755 --> 00:07:27,005 y luego también hay las variables a nivel global con ámbito que 149 00:07:27,005 --> 00:07:29,171 trate: si escribes una variable fuera de una función, 150 00:07:29,171 --> 00:07:31,790 será visible en todo el texto. 151 00:07:31,790 --> 00:07:35,840 >> Una diferencia entre JavaScript y C, en particular, 152 00:07:35,840 --> 00:07:40,280 es que si se declara un mundial cualquier variable en un archivo de texto 153 00:07:40,280 --> 00:07:43,324 es visible en cualquier función dentro de ese archivo de texto. 154 00:07:43,324 --> 00:07:44,240 Eso es correcto, ¿no? 155 00:07:44,240 --> 00:07:46,330 >> HUGH ZABRISKIE: Sí. 156 00:07:46,330 --> 00:07:49,120 >> VERDE SAM: ¿Así que es también un poco poco raro en comparación con C, 157 00:07:49,120 --> 00:07:52,660 donde siempre tenía que tener nuestra definiciones de variables por encima de los lugares 158 00:07:52,660 --> 00:07:53,770 que se utilizaron. 159 00:07:53,770 --> 00:07:57,957 Eso no es una regla que se aplica más, así, un poco diferente. 160 00:07:57,957 --> 00:08:00,540 Y de nuevo sólo para enfatizar, global frente variables-- locales 161 00:08:00,540 --> 00:08:03,457 muy similar a C. Usted podría tener dos variables con el mismo nombre, 162 00:08:03,457 --> 00:08:06,540 y tienen uno de sus nombres se remeden por una variable local si uno de ellos 163 00:08:06,540 --> 00:08:07,546 era global. 164 00:08:07,546 --> 00:08:09,420 Así tipo, similar de problemas que algunos de ustedes 165 00:08:09,420 --> 00:08:11,920 pueden haber topado en alguna de su problema establece hasta el momento. 166 00:08:11,920 --> 00:08:14,450 Fresco, así que eso es variables. 167 00:08:14,450 --> 00:08:20,310 >> Control de flujo, es decir, como, -si else-- stuff-- lógico y bucles. 168 00:08:20,310 --> 00:08:24,510 Así que para empezar, esto es lo que if-else declaraciones parecen en JavaScript. 169 00:08:24,510 --> 00:08:29,750 La colocación de las diversas cosas en las líneas no es importante. 170 00:08:29,750 --> 00:08:34,409 Esta es sólo una de las convenciones por la forma en código de estructura que. 171 00:08:34,409 --> 00:08:38,634 Al igual que en C, tenemos una "si," una declaración paréntesis. 172 00:08:38,634 --> 00:08:40,840 173 00:08:40,840 --> 00:08:42,090 Eso no es lo que quería hacer. 174 00:08:42,090 --> 00:08:44,860 175 00:08:44,860 --> 00:08:45,550 Lo hice otra vez. 176 00:08:45,550 --> 00:08:46,841 >> HUGH ZABRISKIE: Tratando de salir? 177 00:08:46,841 --> 00:08:49,770 SAM VERDE: No, estoy tratando de acercar la imagen. 178 00:08:49,770 --> 00:08:50,660 No importa. 179 00:08:50,660 --> 00:08:54,730 180 00:08:54,730 --> 00:08:59,370 >> Así pues, tenemos una declaración "if" y tenemos una condición dentro de ella 181 00:08:59,370 --> 00:09:03,130 que evalúa a verdadero o falso, y que determina si o no 182 00:09:03,130 --> 00:09:04,510 entramos en ese bloque de código. 183 00:09:04,510 --> 00:09:09,860 Y del mismo modo, tenemos una cosa, si y una persona, al igual que estamos acostumbrados en C. 184 00:09:09,860 --> 00:09:14,010 >> También debe ser bastante cómodo la derecha del palo con bucles, 185 00:09:14,010 --> 00:09:16,440 porque también se ven muy parecido a C parece. 186 00:09:16,440 --> 00:09:19,600 Pero te darás cuenta de nuevo que tienen, en lugar de int inicializaciones, 187 00:09:19,600 --> 00:09:22,570 tenemos inicializaciones var. 188 00:09:22,570 --> 00:09:24,650 Y supongo que tienes tener cuidado de hacer 189 00:09:24,650 --> 00:09:28,460 Seguro de que no cambie el valor de I a partir de un int a una cadena, 190 00:09:28,460 --> 00:09:31,780 por ejemplo, debido a que va a provocar un comportamiento extraño puede que no 191 00:09:31,780 --> 00:09:32,280 esperar. 192 00:09:32,280 --> 00:09:35,750 Pero esto debe ser bastante familiar, también. 193 00:09:35,750 --> 00:09:39,460 >> Así que aquí es donde las cosas empiezan a conseguir un poco loco en JavaScript 194 00:09:39,460 --> 00:09:44,920 para alguien que va desde un fondo de C. Hay funciones 195 00:09:44,920 --> 00:09:48,070 en JavaScript, y no hay una manera para declarar una función que se ve 196 00:09:48,070 --> 00:09:50,361 tipo de similar a C, y luego hay otro que 197 00:09:50,361 --> 00:09:52,450 se ve un poco diferente. 198 00:09:52,450 --> 00:09:54,930 >> La primera versión, que podemos ver aquí, 199 00:09:54,930 --> 00:09:59,260 es una especie de C-como, en su decimos, esta es una función, 200 00:09:59,260 --> 00:10:01,490 darle un nombre, dar el número de argumentos, 201 00:10:01,490 --> 00:10:05,150 y luego el contenido de la función ir dentro de esas llaves. 202 00:10:05,150 --> 00:10:08,850 Vamos a ver un ejemplo de argumentos en sólo un segundo. 203 00:10:08,850 --> 00:10:13,420 >> Mientras que en la línea siguiente, vemos, oh, aquí está una variable llamada "myFunction" 204 00:10:13,420 --> 00:10:17,546 y somos iguales a este function-- cosa-- genérico que 205 00:10:17,546 --> 00:10:19,170 no parece tener nada que hacer. 206 00:10:19,170 --> 00:10:22,780 207 00:10:22,780 --> 00:10:26,080 La razón por la que es diferente que C es que JavaScript 208 00:10:26,080 --> 00:10:30,040 es lo que se llama un lenguaje funcional, o tiene elementos funcionales, lo que significa 209 00:10:30,040 --> 00:10:33,510 que las funciones son en realidad valores. 210 00:10:33,510 --> 00:10:39,520 Y eso significa que podemos establecer una variable para igualar una función 211 00:10:39,520 --> 00:10:43,210 y luego pasar esa función alrededor, pasarlo como argumento, 212 00:10:43,210 --> 00:10:46,550 hacer todo tipo de cosas así con las funciones. 213 00:10:46,550 --> 00:10:49,682 >> Otra cosa a note-- funciones se escriben 214 00:10:49,682 --> 00:10:51,140 con un cierto número de argumentos. 215 00:10:51,140 --> 00:10:54,056 Vamos a ver un ejemplo de una función con un argumento en la siguiente diapositiva. 216 00:10:54,056 --> 00:10:56,720 Pero JavaScript no lo hará gritarte si intenta 217 00:10:56,720 --> 00:10:59,330 utilizar una función con el número incorrecto de argumentos. 218 00:10:59,330 --> 00:11:05,310 Simplemente va a hacer su mejor esfuerzo para hacer hacer, lo que significa que si se pasa, 219 00:11:05,310 --> 00:11:09,410 se llama a una función que espera un discusión con ningún argumento, todo lo que 220 00:11:09,410 --> 00:11:13,990 va a pasar es que va a hacer su mejor momento para tratar de ejecutar ese código, 221 00:11:13,990 --> 00:11:16,541 y si se ejecuta con el tiempo en una excepción o un error, 222 00:11:16,541 --> 00:11:19,790 que va a lanzar esa excepción y sólo seguir going-- que es sólo una de las formas 223 00:11:19,790 --> 00:11:21,070 que funciona JavaScript. 224 00:11:21,070 --> 00:11:21,781 Sí. 225 00:11:21,781 --> 00:11:24,207 >> AUDIENCIA: ¿Qué sucede si hay demasiados argumentos? 226 00:11:24,207 --> 00:11:26,040 VERDE Carter: Así que la pregunta era, ¿qué sucede 227 00:11:26,040 --> 00:11:27,380 si hay demasiados argumentos? 228 00:11:27,380 --> 00:11:29,171 Y la respuesta es que JavaScript será justo 229 00:11:29,171 --> 00:11:32,120 ignorar los que están después de los que espera. 230 00:11:32,120 --> 00:11:36,420 Se tratará de ejecutar la función llamar como si era sólo los dos primeros. 231 00:11:36,420 --> 00:11:37,075 ¿Correcto? 232 00:11:37,075 --> 00:11:37,700 >> HUGH ZABRISKIE: Eso es correcto, sí. 233 00:11:37,700 --> 00:11:39,449 Del mismo modo, si hay son muy pocos argumentos, 234 00:11:39,449 --> 00:11:42,640 sólo tipo de da nula a todos los argumentos que no tiene ningún valor 235 00:11:42,640 --> 00:11:43,660 para. 236 00:11:43,660 --> 00:11:45,810 >> SAM VERDE: ¿Qué se puede ser realmente útil, si 237 00:11:45,810 --> 00:11:49,060 quiero escribir una función que toma unos argumentos numéricos variables. 238 00:11:49,060 --> 00:11:55,830 Puede establecer valores por defecto en la definición de la función, 239 00:11:55,830 --> 00:11:59,060 y se puede ignorar el hecho de que la entrada no está allí. 240 00:11:59,060 --> 00:12:01,584 241 00:12:01,584 --> 00:12:04,000 Así que quiero hablar un poco más sobre esta última bala 242 00:12:04,000 --> 00:12:05,541 punto, que es las funciones son valores. 243 00:12:05,541 --> 00:12:07,930 244 00:12:07,930 --> 00:12:11,010 Este es un ejemplo que es un alucinante poco 245 00:12:11,010 --> 00:12:14,880 si usted acaba de leer, y no cree acerca de lo que está pasando por un segundo. 246 00:12:14,880 --> 00:12:17,910 Por lo tanto, echemos un vistazo justo en la primera línea aquí. 247 00:12:17,910 --> 00:12:24,360 Tenemos esta variable, f1, que decimos es una función que hace esto. 248 00:12:24,360 --> 00:12:28,535 Y el contenido de la función se console.log ('hola'). 249 00:12:28,535 --> 00:12:32,220 Usted puede pensar en console.log como el Equivalente JavaScript de printf. 250 00:12:32,220 --> 00:12:35,510 Entonces, ¿qué va a pasar es que, si nos ejecutar este código en nuestro navegador, 251 00:12:35,510 --> 00:12:37,530 que va a imprimir una cadena. 252 00:12:37,530 --> 00:12:39,342 Puedo demostrar que. 253 00:12:39,342 --> 00:12:42,300 AUDIENCIA: Por registro, sin embargo, hace que significa que sea que se está grabando en alguna parte? 254 00:12:42,300 --> 00:12:42,550 VERDE SAM: Sí. 255 00:12:42,550 --> 00:12:44,216 Así que te voy a mostrar lo que va a suceder. 256 00:12:44,216 --> 00:12:48,085 Así que la pregunta era, ¿qué significa log? 257 00:12:48,085 --> 00:12:51,262 >> HUGH ZABRISKIE: Así console.log es como printf de C. 258 00:12:51,262 --> 00:12:52,970 SAM VERDE: Así console.log es como printf, 259 00:12:52,970 --> 00:12:59,240 por lo que si tengo este console.log ('hola'), y yo llamo a eso, la cadena "hola" 260 00:12:59,240 --> 00:13:00,730 se imprime en la consola. 261 00:13:00,730 --> 00:13:03,340 Esta es la consola. 262 00:13:03,340 --> 00:13:05,930 Es como printf, donde imprime a cabo estándar. 263 00:13:05,930 --> 00:13:09,050 264 00:13:09,050 --> 00:13:11,230 Y veremos en un minuto, pero esto es en realidad 265 00:13:11,230 --> 00:13:16,529 se hace referencia al objeto de la consola, y llamar a un método en ese objeto. 266 00:13:16,529 --> 00:13:18,320 Eso va a hacer más sentido en un minuto cuando nos 267 00:13:18,320 --> 00:13:20,660 llegar a hablar de objetos en JavaScript, 268 00:13:20,660 --> 00:13:22,509 pero yo pensaba que iba a mencionar eso. 269 00:13:22,509 --> 00:13:24,300 HUGH ZABRISKIE: Estamos utilizado en el C, derecha- 270 00:13:24,300 --> 00:13:27,580 escribimos generalmente un gran programa en principal para hacer cualquier cosa. 271 00:13:27,580 --> 00:13:30,700 Pero lo que es fresco en JavaScript que es tener este tipo de intérprete que 272 00:13:30,700 --> 00:13:33,620 carreras en tiempo real, por lo que toma simplemente línea por línea, 273 00:13:33,620 --> 00:13:35,320 que sólo puede interpretar que en el acto. 274 00:13:35,320 --> 00:13:37,403 Y no pierde de vista las cosas que se han ejecutado antes, 275 00:13:37,403 --> 00:13:41,620 por lo que es una herramienta muy útil para utilizar console.log, o la consola, 276 00:13:41,620 --> 00:13:46,870 en general, por sólo jugar alrededor con JavaScript. 277 00:13:46,870 --> 00:13:51,420 >> VERDE Carter: Así que volver a este ejemplo-- la segunda línea de código 278 00:13:51,420 --> 00:13:55,320 aquí es bastante alucinante en mi cabeza. 279 00:13:55,320 --> 00:13:59,790 La primera vez que leo esto, era como, ¿qué está pasando? 280 00:13:59,790 --> 00:14:04,580 Así que lo que está sucediendo es decir, este declaración de la función, dice, 281 00:14:04,580 --> 00:14:10,170 Tengo una función llamada f2 que está esperando un argumento, f, 282 00:14:10,170 --> 00:14:12,990 y luego se llama a eso función, f, que 283 00:14:12,990 --> 00:14:17,652 se le pasa como argumento ni por sí mismo con argumentos. 284 00:14:17,652 --> 00:14:19,110 Por lo tanto, que podría haber sido confuso. 285 00:14:19,110 --> 00:14:21,890 286 00:14:21,890 --> 00:14:28,400 Si entendemos esto como f2 f1 toma como argumento, y luego dentro de f2, 287 00:14:28,400 --> 00:14:31,190 f consigue called-- cuyos medios que esta línea de código, 288 00:14:31,190 --> 00:14:34,192 después de estas dos líneas de código, da como resultado "hola" 289 00:14:34,192 --> 00:14:35,400 que se está imprimiendo a la consola. 290 00:14:35,400 --> 00:14:41,660 291 00:14:41,660 --> 00:14:44,910 >> El hecho de que podemos pasar funciones alrededor como valores 292 00:14:44,910 --> 00:14:47,870 termina siendo uno de los más potentes funciones de JavaScript 293 00:14:47,870 --> 00:14:49,700 como un lenguaje de programación. 294 00:14:49,700 --> 00:14:52,782 Fuera de toda la cosas increíbles que puede hacer, 295 00:14:52,782 --> 00:14:54,990 así como una característica de la lengua en términos de la forma 296 00:14:54,990 --> 00:14:58,400 que hace las cosas fáciles programar y permite 297 00:14:58,400 --> 00:15:01,060 por las cosas que no son particularmente bien adaptado a la web, 298 00:15:01,060 --> 00:15:04,500 programación funcional y funcional aspectos de programación de JavaScript 299 00:15:04,500 --> 00:15:07,130 es uno de los más conceptos de gran alcance que 300 00:15:07,130 --> 00:15:11,030 existe en JavaScript-- si usted me pregunta. 301 00:15:11,030 --> 00:15:11,960 Guay. 302 00:15:11,960 --> 00:15:13,534 >> Por lo tanto, lo siguiente. 303 00:15:13,534 --> 00:15:16,450 Además de ser funcional, también hay elementos de JavaScript 304 00:15:16,450 --> 00:15:20,510 que son orientada a objetos, que es uno de los muy 305 00:15:20,510 --> 00:15:23,800 palabras de moda populares en ciencias de la computación. 306 00:15:23,800 --> 00:15:27,040 Programación orientada a objetos es un dato popular. 307 00:15:27,040 --> 00:15:34,210 JavaScript tiene una versión de que, donde creo que todo valor es también 308 00:15:34,210 --> 00:15:41,475 un objeto, lo que significa que todos los objetos envuelve a algunos número de valores. 309 00:15:41,475 --> 00:15:44,020 310 00:15:44,020 --> 00:15:49,750 Así que para valores que son simples, como un número entero, como varX es igual a 5, 311 00:15:49,750 --> 00:15:52,250 ese objeto simplemente envuelve que un valor. 312 00:15:52,250 --> 00:15:54,760 313 00:15:54,760 --> 00:15:59,036 >> Pero también podemos imaginar una situación where-- podemos pensar en situaciones en C 314 00:15:59,036 --> 00:16:00,910 donde queríamos hacer algo con estructuras, 315 00:16:00,910 --> 00:16:03,285 por ejemplo, que envuelve varios valores juntos y marcas 316 00:16:03,285 --> 00:16:05,870 Es realmente fácil de pasar las cosas. 317 00:16:05,870 --> 00:16:09,270 Fue entonces cuando un objeto está en JavaScript. 318 00:16:09,270 --> 00:16:12,340 >> Es importante recordar cuando digo que los objetos envueltos 319 00:16:12,340 --> 00:16:15,330 algunos número de valores juntos, que las funciones son también 320 00:16:15,330 --> 00:16:21,506 valores, lo que significa que las funciones pueden También estar dentro de un objeto de JavaScript. 321 00:16:21,506 --> 00:16:26,910 Y la razón por la que es importante es que, mientras que a menudo 322 00:16:26,910 --> 00:16:30,290 pensar en llamar a un método en un objeto que es 323 00:16:30,290 --> 00:16:35,200 de un término popular de otros lenguajes orientados a objetos populares, 324 00:16:35,200 --> 00:16:39,330 Una de las diferencias es que aquí todo lo que es un método en JavaScript 325 00:16:39,330 --> 00:16:47,270 es un valor almacenado en el interior de un objeto que realiza alguna Action-- posiblemente 326 00:16:47,270 --> 00:16:51,850 usando los otros valores que están dentro de de ese objeto, pero no necesariamente. 327 00:16:51,850 --> 00:16:56,930 Así que usted puede imaginar una situación, Supongo que en un poco de una manera loca, 328 00:16:56,930 --> 00:17:02,990 donde llamó un método de una objeto en otro objeto, por ejemplo. 329 00:17:02,990 --> 00:17:06,010 Así que es un poco cobarde de esa manera. 330 00:17:06,010 --> 00:17:09,369 >> Y también se puede cambiar los métodos que están asociados con un objeto 331 00:17:09,369 --> 00:17:13,740 mediante la asignación de un método que nueva función, que es también 332 00:17:13,740 --> 00:17:18,250 bastante diferente de otros lenguajes orientados a objetos, donde 333 00:17:18,250 --> 00:17:21,410 una vez que declaramos un objeto y crear instancias de ella, 334 00:17:21,410 --> 00:17:25,839 no podemos cambiar los métodos que son asociado con ese objeto más. 335 00:17:25,839 --> 00:17:28,680 Así que eso es bastante diferente. 336 00:17:28,680 --> 00:17:29,570 Guay. 337 00:17:29,570 --> 00:17:34,010 >> Así que aquí está un ejemplo, en primer lugar, de un objeto en la acción. 338 00:17:34,010 --> 00:17:36,390 Esto es lo que se llama un objeto genérico, que 339 00:17:36,390 --> 00:17:39,460 significa que no tiene ningún en particular nombre, no tiene una clase, 340 00:17:39,460 --> 00:17:42,190 que es sólo un poco de envoltura de valores. 341 00:17:42,190 --> 00:17:49,790 Y la forma en que se ve es que tenemos este par exterior de rizado se prepara aquí 342 00:17:49,790 --> 00:17:57,950 que indicar a JavaScript y decir, se trata de un objeto. 343 00:17:57,950 --> 00:18:02,130 Los valores dentro de ella son cada uno de los valores en el interior 344 00:18:02,130 --> 00:18:04,590 del objeto que debe ser envuelto juntos. 345 00:18:04,590 --> 00:18:09,180 Y dentro de ese objeto, entonces tenemos pares de valores clave, 346 00:18:09,180 --> 00:18:13,880 donde la clave se refiere al nombre del valor en el interior del objeto, 347 00:18:13,880 --> 00:18:16,790 y el otro side-- frente a la aquí-- de colon 348 00:18:16,790 --> 00:18:19,850 es el valor real que deben ser almacenados. 349 00:18:19,850 --> 00:18:26,210 >> Así que ver aquí que tenemos una clave llamada fn con valor sam, 350 00:18:26,210 --> 00:18:29,430 seguido de una coma, diciendo a la siguiente entrada. 351 00:18:29,430 --> 00:18:33,560 A continuación, una clave llamada ln, con un valor de verde, 352 00:18:33,560 --> 00:18:35,840 seguido de una coma, seguido de "imprimir" 353 00:18:35,840 --> 00:18:43,209 que va a tener un valor de la función que va a hacer esta línea de código. 354 00:18:43,209 --> 00:18:45,500 Vamos a dar un paso atrás y desempacar lo que está pasando aquí. 355 00:18:45,500 --> 00:18:47,280 Así que esto es un poco complicado, y estamos viendo algo nuevo 356 00:18:47,280 --> 00:18:48,071 por primera vez. 357 00:18:48,071 --> 00:18:51,190 358 00:18:51,190 --> 00:18:55,065 La palabra "this" es lo nuevo que estamos viendo aquí, y lo que esto hace 359 00:18:55,065 --> 00:19:00,540 es decir, se refiere a la actual objetar en su alcance, ¿no? 360 00:19:00,540 --> 00:19:03,990 Así que cuando decimos, esto señala el final de nuevo 361 00:19:03,990 --> 00:19:08,140 a todo este objeto-- cuando hacemos this.fn, 362 00:19:08,140 --> 00:19:11,990 vamos a ir todo el camino de regreso a este objeto, vaya al valor fn 363 00:19:11,990 --> 00:19:16,471 y obtener sam, tire de él hasta el final espalda, pegarlo aquí, y luego seguir adelante. 364 00:19:16,471 --> 00:19:19,838 >> AUDIENCIA: Así que con la recuperación, es que hecho por el parámetro 365 00:19:19,838 --> 00:19:20,621 ¿definición? 366 00:19:20,621 --> 00:19:23,870 VERDE Carter: Así que la pregunta era, es el recuperación de hecho porque del parámetro 367 00:19:23,870 --> 00:19:24,727 ¿definición? 368 00:19:24,727 --> 00:19:25,435 Sí, absolutamente. 369 00:19:25,435 --> 00:19:29,660 370 00:19:29,660 --> 00:19:32,470 ¿Qué va a pasar aquí es, este punto dice que el código JavaScript, 371 00:19:32,470 --> 00:19:39,990 OK, me estoy poniendo un poco de valor de este objeto de mí mismo. 372 00:19:39,990 --> 00:19:46,375 Y entonces va a buscar una entrada llamada fn, y si lo encuentra, 373 00:19:46,375 --> 00:19:48,470 que va a volver que value-- así, es sam. 374 00:19:48,470 --> 00:19:51,540 Pero también podría haber escrito algo que no se define aquí, 375 00:19:51,540 --> 00:19:54,090 y luego lo haría solo volver undefined-- que 376 00:19:54,090 --> 00:19:58,250 es una cosa que puede JavaScript hacer, que puede tener beneficios, 377 00:19:58,250 --> 00:20:03,190 pero es También-- si usted comete un error tipográfico, puede dar lugar a errores extraños. 378 00:20:03,190 --> 00:20:05,617 Así que sólo voy a tratar de encontrar lo que le dices a encontrar 379 00:20:05,617 --> 00:20:07,700 y no va a quejarse si no lo encuentra. 380 00:20:07,700 --> 00:20:11,390 Simplemente va a decir, no lo hice encontrarlo, y luego seguir adelante. 381 00:20:11,390 --> 00:20:17,581 Por lo que sería indefinido, más blanco, más el apellido. 382 00:20:17,581 --> 00:20:18,080 Sí. 383 00:20:18,080 --> 00:20:21,070 Y entonces podemos ver que si entonces podría bajar y access-- 384 00:20:21,070 --> 00:20:25,450 y llamamos tf.print () con paréntesis. 385 00:20:25,450 --> 00:20:30,000 Se va a llamar a esa impresión función sin argumentos, ¿no? 386 00:20:30,000 --> 00:20:34,490 Pero si acabamos de decir tf.print () punto y coma, sin los paréntesis, 387 00:20:34,490 --> 00:20:37,480 todo lo que habría hecho es tirar la función del valor, 388 00:20:37,480 --> 00:20:40,609 pero en realidad no lo llamó. 389 00:20:40,609 --> 00:20:41,162 Guay. 390 00:20:41,162 --> 00:20:42,870 HUGH ZABRISKIE: En caso de hacemos un objeto? 391 00:20:42,870 --> 00:20:44,161 VERDE SAM: Claro, vamos a hacer eso. 392 00:20:44,161 --> 00:20:48,750 Así que me puedo mover este ejemplo a la consola. 393 00:20:48,750 --> 00:20:51,380 394 00:20:51,380 --> 00:20:55,466 Podemos imaginar que tengo un objeto. 395 00:20:55,466 --> 00:21:03,026 396 00:21:03,026 --> 00:21:04,150 Así que esto es un simple objeto. 397 00:21:04,150 --> 00:21:06,910 398 00:21:06,910 --> 00:21:11,050 Este es un objeto que contiene dos valores con dos llaves, dos valores clave 399 00:21:11,050 --> 00:21:12,710 pares. 400 00:21:12,710 --> 00:21:21,850 Así que entonces puedo acceder al valor almacenado dentro de este objeto haciendo x.x1, 401 00:21:21,850 --> 00:21:23,400 por ejemplo, y me da 1 vuelta. 402 00:21:23,400 --> 00:21:29,590 Del mismo modo, x.x2, conseguir ese valor de nuevo. 403 00:21:29,590 --> 00:21:33,330 >> Y ahora lo realmente interesante es, que pueda realmente añadir algo a este objeto 404 00:21:33,330 --> 00:21:34,316 después de que yo he creado. 405 00:21:34,316 --> 00:21:36,315 Así que usted puede imaginar, vamos decir que tengo una función. 406 00:21:36,315 --> 00:21:44,430 407 00:21:44,430 --> 00:21:46,352 >> HUGH ZABRISKIE: Usted tener que hacer Shift-Enter. 408 00:21:46,352 --> 00:21:47,643 >> VERDE SAM: Oh, eso es molesto. 409 00:21:47,643 --> 00:22:02,460 410 00:22:02,460 --> 00:22:04,324 ¿Qué no le gusta? 411 00:22:04,324 --> 00:22:04,824 Oh. 412 00:22:04,824 --> 00:22:07,532 413 00:22:07,532 --> 00:22:08,691 Aquí vamos. 414 00:22:08,691 --> 00:22:09,190 Guay. 415 00:22:09,190 --> 00:22:12,840 >> Así que he creado esta función, f, que 416 00:22:12,840 --> 00:22:17,590 va a ir a la corriente objeto y this.x1 impresión. 417 00:22:17,590 --> 00:22:20,330 Así que si me llamo por f sí, nada va 418 00:22:20,330 --> 00:22:26,970 a suceder, ¿verdad, porque no hay x1 campo en el objeto que se está refiriendo a. 419 00:22:26,970 --> 00:22:39,710 Pero, si yo digo, x.f = f, y luego me llamar x.f (), me voy a volver 1. 420 00:22:39,710 --> 00:22:42,990 421 00:22:42,990 --> 00:22:46,530 Esa función f es ahora asociado con el objeto x, 422 00:22:46,530 --> 00:22:51,800 que tiene una clave llamada x1 asociado con el valor 1, 423 00:22:51,800 --> 00:22:54,570 así que cuando nos llamamos this.x1, es va a encontrar lo que está buscando 424 00:22:54,570 --> 00:22:56,450 y ser capaz de imprimir un valor fuera. 425 00:22:56,450 --> 00:22:58,700 Así que eso es sólo un ejemplo del tipo de las cosas locas 426 00:22:58,700 --> 00:23:01,190 que puede hacer con los objetos en JavaScript. 427 00:23:01,190 --> 00:23:03,870 428 00:23:03,870 --> 00:23:07,560 >> Así que fue la versión versión genérica, significado 429 00:23:07,560 --> 00:23:13,780 que hemos creado un objeto utilizando este paréntesis notación corsé notation--, 430 00:23:13,780 --> 00:23:16,880 rather-- y eso es muy útil si sólo queremos 431 00:23:16,880 --> 00:23:21,440 una instancia de un objeto en particular, pero ¿y si queremos tener más de un 432 00:23:21,440 --> 00:23:22,210 de la misma clase? 433 00:23:22,210 --> 00:23:24,440 Y la respuesta a esa pregunta es, hay cosas 434 00:23:24,440 --> 00:23:26,760 llamado clases en JavaScript también. 435 00:23:26,760 --> 00:23:31,470 436 00:23:31,470 --> 00:23:36,420 Podemos crear una función que hace algún tipo de inicialización 437 00:23:36,420 --> 00:23:41,690 para un objeto extraño, y diríamos, como, 438 00:23:41,690 --> 00:23:44,550 mi class-- lo que el nombre del objeto-- reutilizable 439 00:23:44,550 --> 00:23:47,100 es igual a la función que lo configura. 440 00:23:47,100 --> 00:23:52,280 Así que lo que esto sería equivalente que es la creación de un objeto que 441 00:23:52,280 --> 00:23:55,930 sería como, corchete, str, colon, 442 00:23:55,930 --> 00:23:59,630 esto es una cadena, punto y coma, corchete. 443 00:23:59,630 --> 00:24:01,880 Ese sería el genérico objeto inicializamos, 444 00:24:01,880 --> 00:24:06,380 con la única diferencia de estar en el siguientes líneas creamos un prototipo, que 445 00:24:06,380 --> 00:24:11,190 significa que es una clave por defecto que añadimos a nuestro objeto de que 446 00:24:11,190 --> 00:24:13,970 tiene el valor indicado aquí. 447 00:24:13,970 --> 00:24:20,570 Lo que significa que, cuando creo un nuevo instancia de este objeto MiClase, 448 00:24:20,570 --> 00:24:27,440 que va a haber pre-construido en el interior de es un valor llamado str y otro valor 449 00:24:27,440 --> 00:24:32,418 myPrint llamada, que es va a ser una función. 450 00:24:32,418 --> 00:24:32,918 Impresionante. 451 00:24:32,918 --> 00:24:37,410 452 00:24:37,410 --> 00:24:37,990 >> Excelente. 453 00:24:37,990 --> 00:24:40,710 Así que lo último que se decir de JavaScript 454 00:24:40,710 --> 00:24:46,430 es que es muy útil para lo se denominan operaciones asincrónicas. 455 00:24:46,430 --> 00:24:52,500 Medios asíncrona es que nosotros puede esperar a que alguna operación 456 00:24:52,500 --> 00:24:57,870 para completar antes de pasar , pero seguir adelante mientras esperamos 457 00:24:57,870 --> 00:24:59,690 y luego hacer que algo suceda en el futuro. 458 00:24:59,690 --> 00:25:03,480 Y lo que quiero decir con esto es que usted puede imaginar una situación en la que 459 00:25:03,480 --> 00:25:06,850 envía una solicitud a algún servidor web en cualquier sitio, 460 00:25:06,850 --> 00:25:09,670 y que va a que le envíe de vuelta alguna gran parte de los datos, ¿no? 461 00:25:09,670 --> 00:25:13,320 Y el usuario podría esperar en el Mientras tanto para que eso suceda, 462 00:25:13,320 --> 00:25:15,200 y nada podría ser pasando en ese momento. 463 00:25:15,200 --> 00:25:18,110 Pero eso no es un gran diseño, ¿no? 464 00:25:18,110 --> 00:25:20,214 Usted no quiere que la página web se congele. 465 00:25:20,214 --> 00:25:22,380 ¿Qué pasa si el usuario desea haga clic en un menú desplegable? 466 00:25:22,380 --> 00:25:24,870 No es un gran patrón de diseño. 467 00:25:24,870 --> 00:25:29,290 En cambio, en el fondo lo que JavaScript no se dice, 468 00:25:29,290 --> 00:25:31,870 OK, realizar esta operación de forma asíncrona. 469 00:25:31,870 --> 00:25:36,520 Así como, esperar en el fondo, y luego, cuando se realiza la operación, 470 00:25:36,520 --> 00:25:39,420 llame a la devolución de llamada function-- llamar a alguna función, 471 00:25:39,420 --> 00:25:43,800 Haga un poco de Action-- para señalar que el operación que estábamos esperando para terminar 472 00:25:43,800 --> 00:25:45,520 se acabó. 473 00:25:45,520 --> 00:25:51,240 Y la razón de que es súper poderosa es, podemos hacer algo, pasar un argumento, 474 00:25:51,240 --> 00:25:54,440 hacer algo, y luego esperar para que algo suceda. 475 00:25:54,440 --> 00:25:58,970 Luego, una vez que algo completa, podemos llamar a una devolución de llamada. 476 00:25:58,970 --> 00:26:03,300 Eso es muy útil, ya que permite nosotros hacemos las cosas con Web API Audio, 477 00:26:03,300 --> 00:26:07,490 por ejemplo, como una carga archivo de audio desde un servidor remoto 478 00:26:07,490 --> 00:26:11,660 sin tener que esperar a que el archivo de audio que va a cargar, 479 00:26:11,660 --> 00:26:14,440 lo cual sería realmente malo para la experiencia del usuario. 480 00:26:14,440 --> 00:26:17,080 Guay. 481 00:26:17,080 --> 00:26:19,460 >> Última pareja observa sobre depuración, ya que este 482 00:26:19,460 --> 00:26:23,682 es una cosa que vas a tener que hacer como parte de su proyecto, garantizado. 483 00:26:23,682 --> 00:26:25,140 Mencioné la consola JavaScript. 484 00:26:25,140 --> 00:26:27,550 Es una característica muy útil de todos los navegadores modernos, 485 00:26:27,550 --> 00:26:30,300 Y realmente invitamos a obtener cómodo usando la consola, 486 00:26:30,300 --> 00:26:33,660 si quieres ser bueno en JavaScript. 487 00:26:33,660 --> 00:26:36,320 Es súper útil para depuración, pero también es 488 00:26:36,320 --> 00:26:39,440 muy útil para calcular cómo utilizar una API. 489 00:26:39,440 --> 00:26:41,950 Permite la realidad fácil experimentación 490 00:26:41,950 --> 00:26:45,910 sin tener que escribir alguna código y, a continuación, compilarlo. 491 00:26:45,910 --> 00:26:47,500 Usted no tiene que hacer todos esos pasos. 492 00:26:47,500 --> 00:26:49,619 Usted puede escribir algo de código en una línea, 493 00:26:49,619 --> 00:26:52,410 y luego obtener información inmediata sobre si esa línea de código 494 00:26:52,410 --> 00:26:55,230 worked-- muy práctico. 495 00:26:55,230 --> 00:26:59,760 >> Y también, sólo una note-- técnica la consola de JavaScript es un ejemplo 496 00:26:59,760 --> 00:27:05,680 de un REPL-- así que eso es R-E-P-L, REPL, que significa leer, evaluar, 497 00:27:05,680 --> 00:27:06,180 lazo de impresión. 498 00:27:06,180 --> 00:27:09,100 499 00:27:09,100 --> 00:27:12,120 Vas a escribir algunas cosas en, va a leer lo que ha escrito en, 500 00:27:12,120 --> 00:27:17,280 que va a evaluar, y que va a imprimir el de salida, y luego se va a empezar de nuevo. 501 00:27:17,280 --> 00:27:22,056 Eso le permite ir rápidamente en círculos iteración, que es realmente genial. 502 00:27:22,056 --> 00:27:25,150 503 00:27:25,150 --> 00:27:28,930 >> Supongo última verdadera note-- este es la verdadera última nota, sí. 504 00:27:28,930 --> 00:27:30,780 ¿Cómo podemos realmente utilizamos JavaScript? 505 00:27:30,780 --> 00:27:34,040 Así que primero, podemos importar usando una etiqueta de script 506 00:27:34,040 --> 00:27:39,500 en la parte superior o inferior de un HTML file-- en cualquier lugar dentro de un archivo HTML, 507 00:27:39,500 --> 00:27:40,440 De Verdad. 508 00:27:40,440 --> 00:27:47,390 Y dentro de una etiqueta de script, hay dos sub-modos de importación JavaScript. 509 00:27:47,390 --> 00:27:51,370 El primero es por tener una archivo JavaScript independiente 510 00:27:51,370 --> 00:27:58,010 que importamos en su totalidad, o por tener un área de código como guión 511 00:27:58,010 --> 00:28:00,290 para empezar, y luego script de barra invertida a fin. 512 00:28:00,290 --> 00:28:02,620 Y entonces sólo escribimos JavaScript dentro del archivo HTML. 513 00:28:02,620 --> 00:28:03,790 Esas son las dos maneras. 514 00:28:03,790 --> 00:28:05,165 No se puede tener dentro de HTML. 515 00:28:05,165 --> 00:28:06,502 516 00:28:06,502 --> 00:28:08,126 AUDIENCIA: ¿Es uno mejor que el otro? 517 00:28:08,126 --> 00:28:10,542 VERDE SAM: La pregunta era, Es uno mejor que el otro. 518 00:28:10,542 --> 00:28:18,306 Así que, sí, como una práctica estilo de codificación, y también es como una práctica de diseño. 519 00:28:18,306 --> 00:28:20,180 Hay dos razones por qué podría ser mejor. 520 00:28:20,180 --> 00:28:23,934 La primera es, que hace que su código de una mucho más legible si todo el código HTML 521 00:28:23,934 --> 00:28:27,100 está en un solo lugar, todos los de su CSS está en otro lugar, todo tu JavaScript 522 00:28:27,100 --> 00:28:28,420 se encuentra en un tercer lugar. 523 00:28:28,420 --> 00:28:28,920 ¿Correcto? 524 00:28:28,920 --> 00:28:32,370 Creo que ya deberíamos haber hablado al respecto en las Categorías-- como CSS-- lo 525 00:28:32,370 --> 00:28:35,220 que es-- y va a menudo en otro archivo. 526 00:28:35,220 --> 00:28:37,090 Así, el mismo tipo de concepto aquí. 527 00:28:37,090 --> 00:28:42,410 También puede imaginar que JavaScript sería ser reutilizado en más de una 528 00:28:42,410 --> 00:28:47,350 Página HTML, o tal vez una gran número de páginas HTML, 529 00:28:47,350 --> 00:28:49,340 y que tiene que JavaScript refactorizado en uno 530 00:28:49,340 --> 00:28:51,950 archivo que se puede importar en más de un lugar 531 00:28:51,950 --> 00:28:54,570 permite que el código sea manera más fácil de mantener. 532 00:28:54,570 --> 00:28:57,930 Se puede imaginar hacer uno cambiar el JavaScript 533 00:28:57,930 --> 00:29:00,070 y tener que cambiarlo en 100 archivos diferentes. 534 00:29:00,070 --> 00:29:04,070 Y en vez podemos simplemente cambiarlo en uno, que es mucho más potente. 535 00:29:04,070 --> 00:29:05,420 ¿He respondido a su pregunta? 536 00:29:05,420 --> 00:29:07,950 Guay. 537 00:29:07,950 --> 00:29:10,830 >> También podemos escribir en la consola, como hemos mencionado antes. 538 00:29:10,830 --> 00:29:15,070 Y una vez más, una última note-- Web Audio está construido, 539 00:29:15,070 --> 00:29:16,978 usted no tiene que cargar nada. 540 00:29:16,978 --> 00:29:17,478 Guay. 541 00:29:17,478 --> 00:29:20,519 ¿Hay alguna pregunta, ¿tiene cualquier más preguntas acerca de JavaScript, 542 00:29:20,519 --> 00:29:21,930 antes de seguir adelante? 543 00:29:21,930 --> 00:29:24,286 >> AUDIENCIA: [inaudible] 544 00:29:24,286 --> 00:29:25,410 VERDE SAM: Muy bien, fresco. 545 00:29:25,410 --> 00:29:27,200 Así que ahora él va a hablar de la API. 546 00:29:27,200 --> 00:29:28,490 >> HUGH ZABRISKIE: Cool. 547 00:29:28,490 --> 00:29:28,990 Gracias, Sam. 548 00:29:28,990 --> 00:29:30,184 >> VERDE SAM: Claro. 549 00:29:30,184 --> 00:29:32,600 HUGH ZABRISKIE: impresionante, por lo que vamos a pasar de JavaScript. 550 00:29:32,600 --> 00:29:35,350 Así que hemos hablado de algunos de lo esencial de JavaScript, 551 00:29:35,350 --> 00:29:41,105 y esas son las variables, funciones, objetos, funciones como variables, 552 00:29:41,105 --> 00:29:41,980 carga asíncrona. 553 00:29:41,980 --> 00:29:46,100 Estas son todas las cosas que usted va a ver como se utiliza la Web Audio. 554 00:29:46,100 --> 00:29:49,230 Así que sólo vamos a hablar acerca de lo primero en un nivel alto. 555 00:29:49,230 --> 00:29:52,120 >> Es una API, así que es algo que se construye, como dijo Sam, 556 00:29:52,120 --> 00:29:57,010 a la derecha en el código JavaScript que se utiliza en la consola. 557 00:29:57,010 --> 00:30:01,020 Y en realidad es como código C ++ lo que realmente se construyeron en Chrome 558 00:30:01,020 --> 00:30:04,470 y Firefox, y todos estos navegadores. 559 00:30:04,470 --> 00:30:07,060 Así que la idea principal con la Web Audio es que tienes 560 00:30:07,060 --> 00:30:09,440 este tipo de tubería de audio, ¿verdad? 561 00:30:09,440 --> 00:30:13,670 Así sus datos de audio viene en alguna forma. 562 00:30:13,670 --> 00:30:16,690 >> Hay clase de de tres forms-- principal usted tiene el oscilador, que 563 00:30:16,690 --> 00:30:21,340 crea una onda sinusoidal, onda coseno, vamos a ver cómo funciona. 564 00:30:21,340 --> 00:30:23,890 Otro muy común, por supuesto, es un MP3. 565 00:30:23,890 --> 00:30:25,810 Así que tal vez usted comienza con una canción, y luego 566 00:30:25,810 --> 00:30:28,320 querer hacer algún tipo de filtrado a eso y de salida 567 00:30:28,320 --> 00:30:30,605 que- que podría ser una posible fuente. 568 00:30:30,605 --> 00:30:32,480 Y luego un muy cool uno es el micrófono. 569 00:30:32,480 --> 00:30:37,230 Así que usted puede utilizar algunos muy llamadas básicas en JavaScript 570 00:30:37,230 --> 00:30:39,440 para obtener acceso a la micrófono, por lo que si usted 571 00:30:39,440 --> 00:30:42,870 quería hacer una aplicación como un detector de tono, 572 00:30:42,870 --> 00:30:45,290 por ejemplo, que lleva en su voz y datos fuera 573 00:30:45,290 --> 00:30:47,740 el pitch-- manera muy fácil de eso. 574 00:30:47,740 --> 00:30:50,730 Puede sólo tipo de leerlo en, averiguar la frecuencia, 575 00:30:50,730 --> 00:30:52,250 y entonces la salida un número. 576 00:30:52,250 --> 00:30:56,080 Así que vamos a ver cómo funciona, también. 577 00:30:56,080 --> 00:30:59,430 >> El destino es básicamente donde los datos de audio se emite. 578 00:30:59,430 --> 00:31:02,890 Así que en general, eso es como los altavoces portátiles. 579 00:31:02,890 --> 00:31:05,610 Otras opciones son como un ScriptProcessorNode-- 580 00:31:05,610 --> 00:31:07,990 vamos a llegar a los nodos de un second-- pero básicamente, 581 00:31:07,990 --> 00:31:11,939 ya sea que usted está poniendo sonido a cabo a través de su ordenador a través de altavoces, 582 00:31:11,939 --> 00:31:14,730 o si buscas tipo de grabación, por lo estás almacenarla como datos de audio. 583 00:31:14,730 --> 00:31:18,980 Así que tal vez si alguien crea la música en su aplicación y después 584 00:31:18,980 --> 00:31:22,410 que desea grabar eso y tal vez como exportarlo a SoundCloud, por ejemplo-- 585 00:31:22,410 --> 00:31:25,281 eso sería una manera de hacer eso. 586 00:31:25,281 --> 00:31:27,030 Todas las cosas divertidas, que hablaremos, 587 00:31:27,030 --> 00:31:29,950 que ocurre entre estos dos puntos, donde cargamos en la música 588 00:31:29,950 --> 00:31:31,410 y luego salida de la misma. 589 00:31:31,410 --> 00:31:36,660 >> Así que voy a hablar de los cinco etapas de producción de audio en un segundo. 590 00:31:36,660 --> 00:31:38,950 Tenemos esta cosa llamada un AudioContext, que 591 00:31:38,950 --> 00:31:41,580 es este pequeño envoltorio que vemos aquí. 592 00:31:41,580 --> 00:31:49,980 Básicamente lo AudioContext es-- si ir a la consola de JavaScript en este momento, 593 00:31:49,980 --> 00:31:52,740 podemos crear uno ahora mismo. 594 00:31:52,740 --> 00:31:54,040 Sólo un ejemplo de REPL, ¿verdad? 595 00:31:54,040 --> 00:31:57,880 Estaban leyendo, evaluar y que imprime. 596 00:31:57,880 --> 00:32:00,260 >> AudioContext es un estado global. 597 00:32:00,260 --> 00:32:05,500 Es una estructura, es un objeto aquí, y mantiene la información 598 00:32:05,500 --> 00:32:09,960 acerca de las cosas que están pasando en la pantalla relacionados con el audio. 599 00:32:09,960 --> 00:32:15,220 Un ejemplo es la hora actual. 600 00:32:15,220 --> 00:32:18,910 Esto le indica el número de segundo, con mucha precisión, 601 00:32:18,910 --> 00:32:20,890 desde la página web cargada. 602 00:32:20,890 --> 00:32:24,110 Así que esta es una muy útil pequeña propiedad que puede utilizar. 603 00:32:24,110 --> 00:32:27,898 Ha leído only-- creo que en realidad se puede tratar de establecer un valor. 604 00:32:27,898 --> 00:32:29,856 Se dirá que establezca, y luego, si lo imprima 605 00:32:29,856 --> 00:32:31,439 nuevo-- no fue así en realidad bastante trabajo. 606 00:32:31,439 --> 00:32:34,472 Así que no son de sólo lectura propiedades en JavaScript. 607 00:32:34,472 --> 00:32:36,430 Esto es realmente útil si estás tipo de sincronización 608 00:32:36,430 --> 00:32:38,610 una gran cantidad de diferentes información, cuando estás 609 00:32:38,610 --> 00:32:41,280 tipo de tocar diferentes sonidos. 610 00:32:41,280 --> 00:32:43,630 >> Otra muy útil es el destino contexto. 611 00:32:43,630 --> 00:32:46,587 612 00:32:46,587 --> 00:32:49,670 En definitiva, si te interesa, ya sea intentar esto en su propio derecho de la consola 613 00:32:49,670 --> 00:32:50,980 ahora. 614 00:32:50,980 --> 00:32:53,150 Así que este es un AudioDestinationNode. 615 00:32:53,150 --> 00:32:56,480 Básicamente lo que dice es, ¿Hacia dónde va la salida? 616 00:32:56,480 --> 00:32:59,590 Así que hay dos opciones reales aquí. 617 00:32:59,590 --> 00:33:01,940 Por lo general, el valor por defecto es sólo de los altavoces, 618 00:33:01,940 --> 00:33:05,150 así AudioDestinationNode básicamente dice 619 00:33:05,150 --> 00:33:09,240 hay cero salidas al sonido entrando, enviado al altavoz. 620 00:33:09,240 --> 00:33:12,050 Así que en general, no lo hace tienes que jugar con eso. 621 00:33:12,050 --> 00:33:15,720 Si usted está interesado en utilizar realmente la ScriptProcessorNode para la grabación, 622 00:33:15,720 --> 00:33:16,990 Definitivamente me an disparar correo electrónico más tarde porque eso es 623 00:33:16,990 --> 00:33:18,330 un poco más complicado. 624 00:33:18,330 --> 00:33:21,590 Pero, en general, usted es sólo un poco de la salida de sonido en alguna forma. 625 00:33:21,590 --> 00:33:24,347 Tan guay, vamos a saltar de nuevo aquí. 626 00:33:24,347 --> 00:33:25,180 AUDIENCIA: Lo siento. 627 00:33:25,180 --> 00:33:26,054 HUGH ZABRISKIE: Sí. 628 00:33:26,054 --> 00:33:28,770 AUDIENCIA: Sé que usted dijo que hablar a usted más tarde acerca de la grabación. 629 00:33:28,770 --> 00:33:31,550 ¿Puedes interfaz que con Pro Tools? 630 00:33:31,550 --> 00:33:33,120 >> HUGH ZABRISKIE: Con Pro Tools? 631 00:33:33,120 --> 00:33:35,260 Veamos. 632 00:33:35,260 --> 00:33:37,220 No lo creo. 633 00:33:37,220 --> 00:33:41,670 Así que va entre el cliente, que es el JavaScript 634 00:33:41,670 --> 00:33:44,310 consola, y su real computadora, es generalmente 635 00:33:44,310 --> 00:33:46,490 algo que es una especie de fuera de los límites, si 636 00:33:46,490 --> 00:33:52,320 voluntad, tipo por la naturaleza de el-- es una especie de cosa diseño, 637 00:33:52,320 --> 00:33:57,770 pero intenta mantener el explorador independiente desde el ordenador real del usuario. 638 00:33:57,770 --> 00:34:02,310 Por lo general, lo único que es capaz de de acceso es el micrófono o la cámara. 639 00:34:02,310 --> 00:34:04,730 No eres capaz de hacerlo, me no creo, utilice Pro Tools. 640 00:34:04,730 --> 00:34:07,480 Sin embargo, si ha creado una pista en Pro Tools, 641 00:34:07,480 --> 00:34:12,710 exportado que, usted podría cargar ese aquí, filtrarla, por ejemplo, 642 00:34:12,710 --> 00:34:16,820 proceso que, y registrar que en un Audio Destination-- o no-- una Esfera 643 00:34:16,820 --> 00:34:17,870 Nodo procesador. 644 00:34:17,870 --> 00:34:20,730 Y a continuación, a partir de ahí, se podía exportar que a SoundCloud, que 645 00:34:20,730 --> 00:34:25,320 podría enviar en un correo electrónico, o lo que quiera a partir de ahí. 646 00:34:25,320 --> 00:34:31,159 >> Pero hay una especie de pequeña barrera entre hacer música en su computadora 647 00:34:31,159 --> 00:34:33,050 y hacer música en línea. 648 00:34:33,050 --> 00:34:37,940 >> SAM VERDE: Y eso es no es exclusivo de esta API. 649 00:34:37,940 --> 00:34:44,060 Es una característica de seguridad de Chrome, y Creo que cualquier otro navegador moderno. 650 00:34:44,060 --> 00:34:45,860 El navegador es autónomo. 651 00:34:45,860 --> 00:34:50,980 Así, por ejemplo, una página web no puede utilizar JavaScript para activar el sonido 652 00:34:50,980 --> 00:34:54,190 en los altavoces, por ejemplo. 653 00:34:54,190 --> 00:34:58,120 O no puede apagar la computadora. 654 00:34:58,120 --> 00:35:01,530 Y no hay punto intermedio entre esas dos cosas, a la derecha, 655 00:35:01,530 --> 00:35:05,960 así que o tienes una completa abstracción, 656 00:35:05,960 --> 00:35:10,050 o se abre la falla de seguridad de dejar 657 00:35:10,050 --> 00:35:14,440 un programador con malas intenciones hacer lo que quieran con su computadora portátil. 658 00:35:14,440 --> 00:35:18,104 Y es por eso Chrome es autónomo. 659 00:35:18,104 --> 00:35:19,310 >> HUGH ZABRISKIE: Sí. 660 00:35:19,310 --> 00:35:20,840 Tiene sentido? 661 00:35:20,840 --> 00:35:21,369 Guay guay. 662 00:35:21,369 --> 00:35:23,160 Yo sólo iba a mostrar un ejemplo de uno. 663 00:35:23,160 --> 00:35:25,118 Esto es más o menos como la medida de lo que se obtiene, en términos 664 00:35:25,118 --> 00:35:26,950 de acceder a la computadora del usuario. 665 00:35:26,950 --> 00:35:30,180 Si tiene un teclado USB conectado, puede utilizar algo que se llama la Web 666 00:35:30,180 --> 00:35:32,180 API MIDI, que no lo haremos realmente hablar aquí, 667 00:35:32,180 --> 00:35:36,330 pero esto es otra API que es incorporada en al menos Chrome-- de nuevo, 668 00:35:36,330 --> 00:35:41,570 es por eso que nos encanta Chrome-- Creo que Firefox o Safari, 669 00:35:41,570 --> 00:35:44,300 esto es una cosa fácil de google-- navegadores diferentes tienen 670 00:35:44,300 --> 00:35:46,917 diferente de soporte para los cuales APIs que han implementado. 671 00:35:46,917 --> 00:35:49,875 Pero si usted quiere conectar un teclado y trabajar con esa información, 672 00:35:49,875 --> 00:35:52,850 tipo de enviar el teclado la información a la computadora 673 00:35:52,850 --> 00:35:57,620 y luego utilizar esa línea, esta API es el lugar donde quiere estar trabajando eso. 674 00:35:57,620 --> 00:35:58,150 >> Guay. 675 00:35:58,150 --> 00:35:58,710 OKAY. 676 00:35:58,710 --> 00:36:01,320 Así, moviéndose rápidamente de aquí. 677 00:36:01,320 --> 00:36:03,310 ¿Cómo vamos a tiempo? 678 00:36:03,310 --> 00:36:04,210 >> ALTAVOZ 1: Sobre 15. 679 00:36:04,210 --> 00:36:05,543 >> HUGH ZABRISKIE: 15 minutos para el final? 680 00:36:05,543 --> 00:36:06,160 Vale, guay. 681 00:36:06,160 --> 00:36:08,170 Así que vamos a carrera por delante aquí. 682 00:36:08,170 --> 00:36:13,500 >> Así que, básicamente, el principal punto de pensar en esto como una tubería 683 00:36:13,500 --> 00:36:16,430 es que cada paso en la tubería es una serie de nodos de audio. 684 00:36:16,430 --> 00:36:19,284 685 00:36:19,284 --> 00:36:20,950 Nuestra fuente, digamos, es un oscilador. 686 00:36:20,950 --> 00:36:23,380 Tenemos que crear un nodo de oscilador. 687 00:36:23,380 --> 00:36:25,690 Y eso es sólo un poco de la pequeña function-- 688 00:36:25,690 --> 00:36:30,460 y están todos basados ​​cabo del contexto audio aquí. 689 00:36:30,460 --> 00:36:32,885 >> AUDIENCIA: Cuando se dijo oscilador, ¿significa que 690 00:36:32,885 --> 00:36:37,250 en realidad es, literalmente, al pasar de dos polos diferentes de ida y vuelta? 691 00:36:37,250 --> 00:36:41,170 >> HUGH ZABRISKIE: No, es como una representación digital. 692 00:36:41,170 --> 00:36:42,740 Se aplica realmente en C ++. 693 00:36:42,740 --> 00:36:46,460 En realidad no sé las especificaciones de cómo se llevan a la práctica, 694 00:36:46,460 --> 00:36:48,500 pero todo esto está funcionando como datos binarios. 695 00:36:48,500 --> 00:36:51,260 696 00:36:51,260 --> 00:36:52,370 En realidad, sí. 697 00:36:52,370 --> 00:36:53,950 Eso estaría diciendo, que pude En realidad, si te interesa, 698 00:36:53,950 --> 00:36:56,533 Yo podría enviar un poco más información sobre cómo las formas de onda 699 00:36:56,533 --> 00:37:00,181 se mantienen con un formato digital. 700 00:37:00,181 --> 00:37:00,680 Vale, guay. 701 00:37:00,680 --> 00:37:03,120 >> Así que estamos generando un tono como un sine onda o algo así, tal vez 702 00:37:03,120 --> 00:37:04,190 440 Hertz. 703 00:37:04,190 --> 00:37:05,830 Creamos un oscilador. 704 00:37:05,830 --> 00:37:09,180 Si queremos ajustar el volumen, nos conecte nada a un GainNode, 705 00:37:09,180 --> 00:37:12,500 que podríamos ver con .creategain. 706 00:37:12,500 --> 00:37:14,250 Que establece su volumen. 707 00:37:14,250 --> 00:37:17,820 Puede pasar que en cualquier del otro options-- así, 708 00:37:17,820 --> 00:37:20,300 por lo que una fuente de búfer de audio nodo es donde usted puede ser 709 00:37:20,300 --> 00:37:23,660 almacenar un MP3 que usted ha cargado en. 710 00:37:23,660 --> 00:37:27,670 >> Biquad filtro es para el filtrado si usted quiere tomar toda la base fuera 711 00:37:27,670 --> 00:37:29,630 de una canción, o algo así. 712 00:37:29,630 --> 00:37:32,450 Dios no lo quiera usted quiere tomar la base de una canción. 713 00:37:32,450 --> 00:37:36,980 Y el nodo AudioDestination es, de nuevo, al igual que nuestra conclusión es. 714 00:37:36,980 --> 00:37:39,980 Si alguna vez interesado en ver todas las diferentes opciones posibles, 715 00:37:39,980 --> 00:37:45,190 sólo tiene que ir a la pestaña y dejar la auto-completar subir. 716 00:37:45,190 --> 00:37:48,690 Y si usted no cree, usted verá todo el diferentes cosas que se pueden crear. 717 00:37:48,690 --> 00:37:50,398 Puede crear dinámica procesadores de secuencia de comandos, 718 00:37:50,398 --> 00:37:52,940 Ni siquiera sé lo que es decir, para la mezcla de fusiones de canal 719 00:37:52,940 --> 00:37:55,930 y divisores de canal y todo eso. 720 00:37:55,930 --> 00:37:56,430 Guay. 721 00:37:56,430 --> 00:37:59,560 722 00:37:59,560 --> 00:38:01,390 >> Así que esto es sólo una ejemplo de una tubería. 723 00:38:01,390 --> 00:38:03,580 Así que tenemos tres fuentes entrando. 724 00:38:03,580 --> 00:38:06,830 Tal vez estos son formas de onda, tal vez se trata de archivos MP3. 725 00:38:06,830 --> 00:38:08,740 Uno va a través de un filtro, de otra 726 00:38:08,740 --> 00:38:12,404 siendo distorsionada otra la propia paneo de izquierda y derecha. 727 00:38:12,404 --> 00:38:15,320 Usted puede hacer todo tipo de cosas y todos ellos se mezclan todo junto, 728 00:38:15,320 --> 00:38:18,880 y luego sale el audio al final, como destino. 729 00:38:18,880 --> 00:38:22,720 Este es un ejemplo de lo más complicada Web código de audio se parece. 730 00:38:22,720 --> 00:38:26,720 Usted está creando todos estos diferentes objetos derecho aquí-- 731 00:38:26,720 --> 00:38:27,706 No estoy seguro de esto. 732 00:38:27,706 --> 00:38:29,120 No, no tiene zoom. 733 00:38:29,120 --> 00:38:29,620 OKAY. 734 00:38:29,620 --> 00:38:31,257 >> VERDE SAM: Haces de control, Scroll-Up. 735 00:38:31,257 --> 00:38:32,590 HUGH ZABRISKIE: Control Scroll-- 736 00:38:32,590 --> 00:38:33,000 VERDE SAM: No, no. 737 00:38:33,000 --> 00:38:33,500 Controlar-- 738 00:38:33,500 --> 00:38:36,540 739 00:38:36,540 --> 00:38:38,140 >> HUGH ZABRISKIE: Oh, control, desplácese? 740 00:38:38,140 --> 00:38:38,780 Oh, te pillé. 741 00:38:38,780 --> 00:38:41,480 Sí. 742 00:38:41,480 --> 00:38:42,240 Vaya, pues no, pues no. 743 00:38:42,240 --> 00:38:42,740 OKAY. 744 00:38:42,740 --> 00:38:46,090 No haré eso. 745 00:38:46,090 --> 00:38:48,300 >> Así que sí, en esta primera sección aquí, ves 746 00:38:48,300 --> 00:38:52,720 estamos creando todas estas diferentes nodos fuera del contexto. 747 00:38:52,720 --> 00:38:54,980 Estamos formando con ellas juntos en la segunda parte 748 00:38:54,980 --> 00:38:56,980 por esta función llamada Connect. 749 00:38:56,980 --> 00:38:58,830 Esa es una realidad clave función en Web Audio. 750 00:38:58,830 --> 00:39:01,930 Simplemente significa que una vez que has hecho algo con el sonido en un nodo, 751 00:39:01,930 --> 00:39:03,705 pasarlo a la siguiente nodo. 752 00:39:03,705 --> 00:39:05,830 Así que tenemos la fuente, conecta al analizador, 753 00:39:05,830 --> 00:39:09,140 el analizador hace algo con él, que va a la distorsión, y así sucesivamente, 754 00:39:09,140 --> 00:39:12,725 y al destino abajo a la derecha aquí. 755 00:39:12,725 --> 00:39:13,225 Guay. 756 00:39:13,225 --> 00:39:14,640 OK, así que vamos a seguir avanzando. 757 00:39:14,640 --> 00:39:17,180 >> El pipeline-- de nuevo, éstos son las tuberías más comunes, 758 00:39:17,180 --> 00:39:21,300 así que hablamos de todas estas cosas como distorsión, paneo, todas estas cosas. 759 00:39:21,300 --> 00:39:24,280 Si usted está realmente interesado en el uso de las cosas de Pro Tools, 760 00:39:24,280 --> 00:39:25,820 quienes probablemente le interesen. 761 00:39:25,820 --> 00:39:27,740 Si no es así, tal vez sólo quiero jugar el sonido, 762 00:39:27,740 --> 00:39:29,990 o tal vez lo que desea es ajustar el volumen del sonido. 763 00:39:29,990 --> 00:39:35,270 Esos son los dos tipo más común de gasoductos en la producción de audio. 764 00:39:35,270 --> 00:39:38,640 >> Una vez más, las formas en que pueden tomarlo en como oscillator-- así, vamos a 765 00:39:38,640 --> 00:39:42,460 hacer la demostración de que aquí. 766 00:39:42,460 --> 00:39:47,090 767 00:39:47,090 --> 00:39:52,225 Así que vamos a crear un contexto de audio sencillo aquí, 768 00:39:52,225 --> 00:39:54,350 y de que vamos crear nuestro oscilador. 769 00:39:54,350 --> 00:39:58,620 Así que esto es, de nuevo, sólo estamos va a llamar Crear oscilador. 770 00:39:58,620 --> 00:40:07,030 Vamos a establecer una frecuencia de que, 440 Hertz, de todos favorito. 771 00:40:07,030 --> 00:40:13,290 Entonces nos conectamos que al destino point-- que es el altavoz, por lo 772 00:40:13,290 --> 00:40:15,750 el destino contexto. 773 00:40:15,750 --> 00:40:21,400 Por último, nos limitamos a decir, empezar de cero segundo a partir de ahora, y qué nos suena? 774 00:40:21,400 --> 00:40:22,400 >> [ZUMBIDO] 775 00:40:22,400 --> 00:40:24,980 >> HUGH ZABRISKIE: Aquí vamos. 776 00:40:24,980 --> 00:40:25,940 Es sólo una onda sinusoidal. 777 00:40:25,940 --> 00:40:26,440 Vale, guay. 778 00:40:26,440 --> 00:40:28,274 Y luego nos detendremos eso. 779 00:40:28,274 --> 00:40:30,520 >> AUDIENCIA: ¿De dónde que la retroalimentación viene? 780 00:40:30,520 --> 00:40:31,250 >> HUGH ZABRISKIE: La retroalimentación? 781 00:40:31,250 --> 00:40:32,458 Oh, probablemente nuestros micrófonos. 782 00:40:32,458 --> 00:40:34,221 783 00:40:34,221 --> 00:40:35,470 Así que sí, así es como lo haces. 784 00:40:35,470 --> 00:40:37,261 Y de hecho, si tuviera mantenido en funcionamiento, 785 00:40:37,261 --> 00:40:39,540 podría tener la frecuencia valor que se está ejecutando, 786 00:40:39,540 --> 00:40:43,320 así que eso es una cosa divertida de jugar. 787 00:40:43,320 --> 00:40:44,930 Guay. 788 00:40:44,930 --> 00:40:46,600 Eso es siempre una encantadora una a presentar. 789 00:40:46,600 --> 00:40:48,792 >> VERDE SAM: No lo hizo pensamos en eso, hicimos? 790 00:40:48,792 --> 00:40:50,500 HUGH ZABRISKIE: Sí, eso es una desagradable. 791 00:40:50,500 --> 00:40:53,249 Así, tampón loading-- voy a mostrar un ejemplo de ello en el final. 792 00:40:53,249 --> 00:40:55,090 Eso es cargar un MP3. 793 00:40:55,090 --> 00:40:58,880 Y el micrófono, se utiliza sólo una función llamado Navigator.getUserMedia () 794 00:40:58,880 --> 00:41:03,240 para solicitar el acceso al usuario de micrófono para esa información. 795 00:41:03,240 --> 00:41:05,610 >> Aquí está filtrando, voy a simplemente mantenerse en movimiento de este. 796 00:41:05,610 --> 00:41:08,600 Esto es muy alto nivel, pero los filtros sólo le permiten 797 00:41:08,600 --> 00:41:16,154 >> [SONIDO] 798 00:41:16,154 --> 00:41:18,320 Filtrado también le permite para crear cosas como el rosa 799 00:41:18,320 --> 00:41:20,050 el ruido, el ruido marrón, ruido blanco. 800 00:41:20,050 --> 00:41:24,330 Si desea crear ruido puro, que algunas personas les encanta perder el tiempo con, 801 00:41:24,330 --> 00:41:27,490 puede utilizar Web Audio filtrado para hacer eso. 802 00:41:27,490 --> 00:41:30,039 >> Audio Panning-- así que imagina si usted está escribiendo un juego 803 00:41:30,039 --> 00:41:32,330 y desea que el sonido suena como si viniera, como, 804 00:41:32,330 --> 00:41:36,090 disparar a través de la pantalla, puede usar el paneo del audio 805 00:41:36,090 --> 00:41:39,770 para crear este tipo de cono, que como-- es bastante mathy, 806 00:41:39,770 --> 00:41:41,850 pero en realidad es muy fresco si consigues que funcione, 807 00:41:41,850 --> 00:41:44,500 y hay algunas buenas tutoriales sobre lo que se puede enviar. 808 00:41:44,500 --> 00:41:46,400 Básicamente, usted puede clase de crear el sonido 809 00:41:46,400 --> 00:41:50,480 de que algo salga por una forma 3D. 810 00:41:50,480 --> 00:41:57,350 Y si usted tiene un interés de DJ, puede empezar a mezclar y cruzar canciones desvanecimiento. 811 00:41:57,350 --> 00:42:01,260 >> Este es sólo un muy básico código, básicamente lo que hice antes. 812 00:42:01,260 --> 00:42:06,140 Ajusta el volumen de la oscilador, así que creamos nuestro oscilador 813 00:42:06,140 --> 00:42:07,380 que crea la forma de onda. 814 00:42:07,380 --> 00:42:09,940 Creamos nuestra GainNode, establecer nuestra frecuencia, 815 00:42:09,940 --> 00:42:14,170 y luego conectar el oscilador a la GainNode, que luego cambia básicamente 816 00:42:14,170 --> 00:42:16,760 la cantidad de señal se permite a través. 817 00:42:16,760 --> 00:42:20,467 Pero, en realidad, es una cámara digital cosa, por lo que es más sólo-- sí. 818 00:42:20,467 --> 00:42:23,550 Eso no es lo que está sucediendo realmente, pero eso es lo que sucede en la vida real 819 00:42:23,550 --> 00:42:24,393 con una ganancia. 820 00:42:24,393 --> 00:42:27,258 >> AUDIENCIA: --quantization del parámetro de volumen? 821 00:42:27,258 --> 00:42:28,174 HUGH ZABRISKIE: Lo siento? 822 00:42:28,174 --> 00:42:30,360 AUDIENCIA: ¿Es una parámetro de volumen cuantificado? 823 00:42:30,360 --> 00:42:31,840 HUGH ZABRISKIE: Sí. 824 00:42:31,840 --> 00:42:34,620 Y esto es una cosa que estoy muy deficiente en mi conocimiento, 825 00:42:34,620 --> 00:42:38,010 cómo funciona la ganancia a nivel digital. 826 00:42:38,010 --> 00:42:40,140 Sé que con real señales, es básicamente 827 00:42:40,140 --> 00:42:45,120 la cantidad de control que eres amplificar la señal. 828 00:42:45,120 --> 00:42:47,017 Así que sí. 829 00:42:47,017 --> 00:42:50,100 Te voy a enviar más información sobre eso, porque tengo curiosidad realidad 830 00:42:50,100 --> 00:42:51,099 saber más sobre eso. 831 00:42:51,099 --> 00:42:54,090 Pero básicamente los parámetros son, uno es el fold-- 832 00:42:54,090 --> 00:42:59,690 el signal-- más fuerte y el cero no es señal, o no se oye ningún sonido. 833 00:42:59,690 --> 00:43:03,150 Nos saltaremos tiempo de demostración de que, debido a que es básicamente lo que hice antes. 834 00:43:03,150 --> 00:43:07,630 Y de nuevo, la Context.Destination es el nodo de destino audio. 835 00:43:07,630 --> 00:43:08,360 Impresionante, OK. 836 00:43:08,360 --> 00:43:10,470 >> Así que me voy a hacer un rápido dos demos. 837 00:43:10,470 --> 00:43:11,760 ¿Cómo vamos a tiempo? 838 00:43:11,760 --> 00:43:12,640 >> ALTAVOZ 1: Cerca de 10 minutos. 839 00:43:12,640 --> 00:43:13,130 >> HUGH ZABRISKIE: 10 minutos? 840 00:43:13,130 --> 00:43:13,630 ¡Excelente! 841 00:43:13,630 --> 00:43:14,320 Impresionante. 842 00:43:14,320 --> 00:43:19,010 >> Así que lo primero que yo voy a do, se llama mi canción favorita. 843 00:43:19,010 --> 00:43:22,410 Así que esto es sólo una poco de HTML JavaScript. 844 00:43:22,410 --> 00:43:25,510 Vamos a tener dos botones en la página de jugar mi canción favorita 845 00:43:25,510 --> 00:43:29,192 y detener mi canción favorita. 846 00:43:29,192 --> 00:43:30,180 Voy a cambiar esto. 847 00:43:30,180 --> 00:43:32,110 >> AUDIENCIA: Cubra su micrófono. 848 00:43:32,110 --> 00:43:33,430 >> HUGH ZABRISKIE: Sí. 849 00:43:33,430 --> 00:43:36,300 Y yo he cargado aquí un guión que basically-- 850 00:43:36,300 --> 00:43:38,520 y esto es realmente útil para cargar un MP3, 851 00:43:38,520 --> 00:43:41,820 así que esto sólo hace cargar manera MP3s más rápido. 852 00:43:41,820 --> 00:43:44,180 Es básicamente una envoltura. 853 00:43:44,180 --> 00:43:48,737 Simplemente hace que el proceso de loading MP3s mucho más rápido, 854 00:43:48,737 --> 00:43:51,570 de lo contrario estás usando petición HTTP, algo así como lo que estábamos haciendo 855 00:43:51,570 --> 00:43:53,950 en la pieza actual establecido con el servidor. 856 00:43:53,950 --> 00:43:55,950 Es muy feo, que no quieren hacerlo. 857 00:43:55,950 --> 00:44:04,110 >> Así que este chico, Boris Smus, escribió una realidad pequeña herramienta útil llamada BufferLoader. 858 00:44:04,110 --> 00:44:08,780 Todo lo que hacemos es simplemente pasarlo al contexto, se pasa un películas-- 859 00:44:08,780 --> 00:44:11,327 o, sí, es una lista en JavaScript? 860 00:44:11,327 --> 00:44:12,160 SAM VERDE: Una matriz. 861 00:44:12,160 --> 00:44:14,201 HUGH ZABRISKIE: Oh, es una matriz, que sea adecuado. 862 00:44:14,201 --> 00:44:18,660 Es un conjunto de caminos a diferentes archivos. 863 00:44:18,660 --> 00:44:21,990 Y luego se le pasa una función. 864 00:44:21,990 --> 00:44:25,530 Se trata de la devolución de llamada hablábamos acerca de con la carga asíncrona. 865 00:44:25,530 --> 00:44:28,720 Eso se llama Una vez que los archivos cargados. 866 00:44:28,720 --> 00:44:33,780 Y esa función que se llama cuando el archivo de carga toma como un perímetro 867 00:44:33,780 --> 00:44:35,840 una serie de amortiguadores cargados. 868 00:44:35,840 --> 00:44:37,990 Así que se produce aquí. 869 00:44:37,990 --> 00:44:41,180 Básicamente, es BufferList va a ser uno value-- 870 00:44:41,180 --> 00:44:46,380 o que va a ser una serie de longitud uno, que tiene en ella en el índice 871 00:44:46,380 --> 00:44:51,320 cero el archivo cargado entera del MP3. 872 00:44:51,320 --> 00:44:53,320 Así que lo que hago cuando termino carga es, simplemente 873 00:44:53,320 --> 00:44:57,430 crear una fuente de tampón, que es un nodo de origen búfer de audio. 874 00:44:57,430 --> 00:45:03,410 El siguiente paso es que se carga en el source.buffer como tampón de carga completa 875 00:45:03,410 --> 00:45:06,740 Del BufferList-- que es un montón de buffers-- 876 00:45:06,740 --> 00:45:10,255 y luego conectar ese audio amortiguar al destino. 877 00:45:10,255 --> 00:45:12,380 Entonces, ¿qué se va a hacer es simplemente poner el MP3 878 00:45:12,380 --> 00:45:15,260 directamente a través de la salida, y comenzar inmediatamente 879 00:45:15,260 --> 00:45:18,010 al llegar a esta llamada. 880 00:45:18,010 --> 00:45:21,660 >> Fresco, así que vamos a ver esto sucede en la acción. 881 00:45:21,660 --> 00:45:24,490 Mi [inaudible] aquí, vamos a ver. 882 00:45:24,490 --> 00:45:26,430 Así que sólo voy a iniciar un servidor básico. 883 00:45:26,430 --> 00:45:28,660 Eso es algo que que tiene que hacer si estás 884 00:45:28,660 --> 00:45:32,490 hacer peticiones de archivos de carga. 885 00:45:32,490 --> 00:45:34,140 Voy a iniciar un servidor básico. 886 00:45:34,140 --> 00:45:38,200 Esto es básicamente su totalidad PSET ahora mismo en una línea, 887 00:45:38,200 --> 00:45:43,930 pero se acaba de empezar un servidor en el puerto 80/80. 888 00:45:43,930 --> 00:45:47,300 Así que vamos por aquí, nos va a cargar 80/80, 889 00:45:47,300 --> 00:45:49,110 vamos a ir a mi canción favorita. 890 00:45:49,110 --> 00:45:51,660 Así que si me golpeó "Jugar mi canción favorita "en este momento, 891 00:45:51,660 --> 00:45:53,964 que va a cargar mi canción favorita y jugar it-- 892 00:45:53,964 --> 00:45:55,880 [MÚSICA - The Eagles, "LA VIDA EN EL RÁPIDO  CARRIL"] 893 00:45:55,880 --> 00:46:00,490 -que pasa a ser "La vida en el carril rápido "de The Eagles. 894 00:46:00,490 --> 00:46:06,346 Ahora, yo podría golpear "Deja de mi canción favorita "y reproducirlo. 895 00:46:06,346 --> 00:46:09,160 >> [MÚSICA - The Eagles, "LA VIDA EN EL RÁPIDO  CARRIL"] 896 00:46:09,160 --> 00:46:18,340 >> Y si me voy a consolar, porque He utilizado una variable global por aquí 897 00:46:18,340 --> 00:46:23,390 hacer un seguimiento de este valor, que en realidad ahora será reconocido en la consola. 898 00:46:23,390 --> 00:46:25,160 Por lo tanto, auto-crea para mí. 899 00:46:25,160 --> 00:46:29,991 Así que eso es lo que está sonando en este momento, y yo simplemente puedo llamar source.stop () 900 00:46:29,991 --> 00:46:30,490 en eso. 901 00:46:30,490 --> 00:46:34,930 902 00:46:34,930 --> 00:46:35,860 Bueno, ¿sabes qué? 903 00:46:35,860 --> 00:46:39,760 Sólo para que ustedes han oído esto song-- es posible reconocer esta canción. 904 00:46:39,760 --> 00:46:41,801 >> [MÚSICA - Rick Astley, "Never Gonna DAR  USTED UP "] 905 00:46:41,801 --> 00:46:42,299 906 00:46:42,299 --> 00:46:44,215 [MÚSICA - The Eagles, "LA VIDA EN EL RÁPIDO  CARRIL"] 907 00:46:44,215 --> 00:46:46,195 Hemos ahora todos han rickrolled. 908 00:46:46,195 --> 00:46:50,155 OK, genial, de seguir adelante. 909 00:46:50,155 --> 00:46:51,160 Guay. 910 00:46:51,160 --> 00:46:54,554 Así que esto es básicamente un ejemplo de lo que podría cargar un MP3 file-- 911 00:46:54,554 --> 00:46:56,470 [MÚSICA - The Eagles, "LA VIDA EN EL RÁPIDO  CARRIL"] 912 00:46:56,470 --> 00:46:59,590 --y jugarlo, y detener y comenzar a ella. 913 00:46:59,590 --> 00:47:03,008 Yo podría haber hecho mucho más [inaudible] 914 00:47:03,008 --> 00:47:07,570 >> El último que voy a hacer es, Te voy a mostrar un [inaudible]. 915 00:47:07,570 --> 00:47:18,070 >> [REPRODUCCIÓN DE MÚSICA] 916 00:47:18,070 --> 00:47:21,800 >> Es como, ogg.wave.mp3. 917 00:47:21,800 --> 00:47:26,450 Creo que, si no recuerdo mal, Me he topado con algunos problemas con .m4a, 918 00:47:26,450 --> 00:47:27,721 pero no estoy seguro de eso. 919 00:47:27,721 --> 00:47:28,470 Creo mp3.wave-- 920 00:47:28,470 --> 00:47:28,930 921 00:47:28,930 --> 00:47:30,971 >> [MÚSICA - Rick Astley, "Never Gonna DAR  USTED UP "] 922 00:47:30,971 --> 00:47:35,930 923 00:47:35,930 --> 00:47:36,500 >> Vale genial. 924 00:47:36,500 --> 00:47:37,625 No debería haber dicho eso. 925 00:47:37,625 --> 00:47:40,570 De todos modos, hola. 926 00:47:40,570 --> 00:47:43,430 927 00:47:43,430 --> 00:47:45,490 Así que tenemos esta abierta. 928 00:47:45,490 --> 00:47:52,320 Así que ahora todo lo que hago es, básicamente creado una sintaxis básica para crear música. 929 00:47:52,320 --> 00:47:57,610 Así que si no hago algo así, agregue g4 el 1 de 2, lo que eso significa es que, 930 00:47:57,610 --> 00:48:00,950 añadir la nota piano, G4, que es la cuarta G 931 00:48:00,950 --> 00:48:02,680 arriba en el piano de la parte inferior. 932 00:48:02,680 --> 00:48:05,930 Así que esto es una especie de MIDI hablar, así que para aquellos que se basan la música, 933 00:48:05,930 --> 00:48:07,860 esto es simplemente notas MIDI. 934 00:48:07,860 --> 00:48:10,090 >> AUDIENCIA: Esa es la G del Medio C, ¿verdad? 935 00:48:10,090 --> 00:48:11,840 >> HUGH ZABRISKIE: Esta es la G por encima de Medio C, es cierto. 936 00:48:11,840 --> 00:48:12,470 >> AUDIENCIA: Sobre Medio C. 937 00:48:12,470 --> 00:48:13,345 >> HUGH ZABRISKIE: Sí. 938 00:48:13,345 --> 00:48:14,340 Actualmente, si. 939 00:48:14,340 --> 00:48:16,131 Creo que en realidad hice nos [inaudible], 940 00:48:16,131 --> 00:48:18,860 por lo que esta podría ser una octava por encima de eso. 941 00:48:18,860 --> 00:48:20,070 Así que vamos a ver. 942 00:48:20,070 --> 00:48:21,152 Si me golpeó Play-- 943 00:48:21,152 --> 00:48:22,110 [PIANO REPETITIVOS NOTA] 944 00:48:22,110 --> 00:48:23,200 --we're va a oír eso. 945 00:48:23,200 --> 00:48:25,700 La idea es que opera al igual que una línea de comandos sería, 946 00:48:25,700 --> 00:48:27,510 así que si me voy arriba y abajo en mi teclado, 947 00:48:27,510 --> 00:48:31,550 puede volver a la anterior comandos, lo cual es bastante útil. 948 00:48:31,550 --> 00:48:35,136 Y a continuación es mi lista de pistas, que están todos funcionando en bucle. 949 00:48:35,136 --> 00:48:38,260 >> AUDIENCIA: Usted fue asumiendo la 88 teclas del teclado en eso, ¿verdad? 950 00:48:38,260 --> 00:48:41,051 >> HUGH ZABRISKIE: La pregunta era, estoy asumiendo un teclado de 88 teclas, 951 00:48:41,051 --> 00:48:41,990 y sí, lo soy. 952 00:48:41,990 --> 00:48:45,030 Lo que hice es que básicamente tomó 88 muestras 953 00:48:45,030 --> 00:48:46,970 del piano, uno para cada nota. 954 00:48:46,970 --> 00:48:49,180 Y así, cada vez que escuchar una nota de ahora en adelante, 955 00:48:49,180 --> 00:48:57,550 que en realidad es un bucle que se parece como-- Esto se está poniendo reproducir en bucle, 956 00:48:57,550 --> 00:49:00,120 por lo que para cada nota, esto se está ejecutando. 957 00:49:00,120 --> 00:49:02,860 Lo que pasa es que yo crear un tampón de nuevo, 958 00:49:02,860 --> 00:49:06,010 Puedo crear un nodo de ganancia para ajustar el volumen. 959 00:49:06,010 --> 00:49:08,240 Esto sólo una realidad complicada manera de decir que 960 00:49:08,240 --> 00:49:10,550 almacenar el tampón en un source.buffer. 961 00:49:10,550 --> 00:49:13,160 Le doy la ganancia, yo conectarlo a la ganancia, 962 00:49:13,160 --> 00:49:15,576 la ganancia está conectado a la de salida, y luego la toco. 963 00:49:15,576 --> 00:49:20,735 Así que es una especie de proceso de tomar en una fuente de búfer. 964 00:49:20,735 --> 00:49:24,820 >> AUDIENCIA: ¿Puede usted realmente tomar ese sonido seco y que sea húmeda [inaudible]? 965 00:49:24,820 --> 00:49:26,260 >> HUGH ZABRISKIE: Puede, sí. 966 00:49:26,260 --> 00:49:29,260 Hay re-verbo, hay retardo, distorsión. 967 00:49:29,260 --> 00:49:33,260 Básicamente, puede poner cualquier cosa en entre en ese sándwich de-- así, 968 00:49:33,260 --> 00:49:37,660 tubería es una metáfora mejor, pero usted puede añadir nada a eso. 969 00:49:37,660 --> 00:49:38,200 Guay. 970 00:49:38,200 --> 00:49:40,280 >> Así que voy a terminar la demo aquí para darle un sentido 971 00:49:40,280 --> 00:49:46,390 apenas de la gran cantidad de veces que se puede ejecutar esa función a la vez. 972 00:49:46,390 --> 00:49:49,280 Así que me voy a quitar esto. 973 00:49:49,280 --> 00:49:59,110 Voy a crear un generador que-- básicamente lo does-- esto es realmente 974 00:49:59,110 --> 00:50:04,220 una especie de syntax-- complicado pero es va a generar notas sobre la marcha, 975 00:50:04,220 --> 00:50:06,601 y acaba de empezar a jugar ellos ya que les evalúa. 976 00:50:06,601 --> 00:50:07,392 [PIANO interponiendo] 977 00:50:07,392 --> 00:50:10,990 978 00:50:10,990 --> 00:50:12,817 >> Así que sólo podemos hacer un poco de música aquí. 979 00:50:12,817 --> 00:50:13,608 [PIANO interponiendo] 980 00:50:13,608 --> 00:50:39,570 981 00:50:39,570 --> 00:50:41,470 >> Así que lo que este comando hace, por ejemplo, es 982 00:50:41,470 --> 00:50:46,910 que toma esas tres notas para el piano y luego los pone en B3. 983 00:50:46,910 --> 00:50:48,660 Esta sintaxis puede hacer un poco más de sentido 984 00:50:48,660 --> 00:50:50,590 para aquellos que tienen un música de fondo aquí. 985 00:50:50,590 --> 00:50:55,180 986 00:50:55,180 --> 00:50:56,551 >> Puedo añadir un bombo. 987 00:50:56,551 --> 00:50:57,050 Yo puedo-- 988 00:50:57,050 --> 00:50:58,048 >> [Interponiendo INSTRUMENTOS] 989 00:50:58,048 --> 00:50:59,256 >> --sólo jugar con eso. 990 00:50:59,256 --> 00:51:12,519 991 00:51:12,519 --> 00:51:13,474 >> Así que usted puede make-- 992 00:51:13,474 --> 00:51:14,515 [Interponiendo INSTRUMENTOS] 993 00:51:14,515 --> 00:51:15,513 Que uno es un poco más molesto. 994 00:51:15,513 --> 00:51:16,554 [Interponiendo INSTRUMENTOS] 995 00:51:16,554 --> 00:51:26,491 996 00:51:26,491 --> 00:51:30,981 >> Así que se suma al azar címbalo seca en cada nota 16a, con un 16% 997 00:51:30,981 --> 00:51:31,481 [INAUDIBLE]. 998 00:51:31,481 --> 00:51:32,522 >> [Interponiendo INSTRUMENTOS] 999 00:51:32,522 --> 00:51:40,962 1000 00:51:40,962 --> 00:51:50,400 >> Sí, por lo que la forma en que esta works-- siempre en 4: 4. 1001 00:51:50,400 --> 00:51:51,441 [Interponiendo INSTRUMENTOS] 1002 00:51:51,441 --> 00:52:06,910 1003 00:52:06,910 --> 00:52:10,902 >> Sí, por lo que los cuatro trimestres, y 16/8. 1004 00:52:10,902 --> 00:52:14,851 1005 00:52:14,851 --> 00:52:15,892 [Interponiendo INSTRUMENTOS] 1006 00:52:15,892 --> 00:52:27,970 1007 00:52:27,970 --> 00:52:33,780 >> Así que, en promedio, se obtiene el 60% de accesos a las notas 16. 1008 00:52:33,780 --> 00:52:35,990 >> De todas formas, esto era sólo tipo de mostrarse 1009 00:52:35,990 --> 00:52:39,780 algunas de las cosas que podría construir con la Web API Audio. 1010 00:52:39,780 --> 00:52:43,840 Es muy potente, es muy rápido, y usted puede hacer un montón de cosas interesantes 1011 00:52:43,840 --> 00:52:44,340 con ello. 1012 00:52:44,340 --> 00:52:51,260 Así que de nuevo, cualquier pregunta que tenga, email myself-- Hugh-- o Sam, 1013 00:52:51,260 --> 00:52:55,869 y honestamente, Google tiene un montón de buenos recursos. 1014 00:52:55,869 --> 00:52:56,660 Alguna última pregunta? 1015 00:52:56,660 --> 00:52:57,970 Sí. 1016 00:52:57,970 --> 00:53:00,790 >> AUDIENCIA: Así que usted puede acceder a el micrófono incorporado. 1017 00:53:00,790 --> 00:53:03,089 ¿Qué pasa si usted quiere utilizar un micrófono mejor? 1018 00:53:03,089 --> 00:53:05,380 HUGH ZABRISKIE: Si querías para utilizar mejor micrófono? 1019 00:53:05,380 --> 00:53:11,320 Así que de nuevo, esto es parte de la abstracción entre Cromo 1020 00:53:11,320 --> 00:53:12,950 y el resto de su equipo. 1021 00:53:12,950 --> 00:53:18,950 A menos que sea disponible a través de una API, como API Web MIDI, 1022 00:53:18,950 --> 00:53:22,030 que probablemente podría encontrar algunos hacks, pero generalmente no es tan viable. 1023 00:53:22,030 --> 00:53:25,300 >> VERDE SAM: Puede También-- todo el cromo sabe 1024 00:53:25,300 --> 00:53:28,820 es lo que el micrófono predeterminado es, y tiene acceso a eso. 1025 00:53:28,820 --> 00:53:33,410 Así que si usted tenía un micrófono pudieras establecer como micrófono predeterminado del equipo, 1026 00:53:33,410 --> 00:53:35,990 usted puede acceder a él de esa manera y probablemente trabajar. 1027 00:53:35,990 --> 00:53:37,490 HUGH ZABRISKIE: Ese es un buen punto. 1028 00:53:37,490 --> 00:53:39,656 Nunca lo he intentado, pero usted podría ser capaz de clase 1029 00:53:39,656 --> 00:53:45,700 de-- si redirige el altavoz de entrada, usted podría ser capaz de hacer eso, sí. 1030 00:53:45,700 --> 00:53:48,360 >> Alguna última pregunta? 1031 00:53:48,360 --> 00:53:49,340 Guay. 1032 00:53:49,340 --> 00:53:51,680 Bueno, gracias chicos tanto por su atención. 1033 00:53:51,680 --> 00:53:52,199 Estoy Hugh. 1034 00:53:52,199 --> 00:53:52,990 VERDE SAM: Soy Sam. 1035 00:53:52,990 --> 00:53:55,410 HUGH ZABRISKIE: Y esto es CS50. 1036 00:53:55,410 --> 00:53:56,767