Paquete de uso de sonido: efectos de sonido en aplicaciones de reacción

Tal vez el hecho es que me dediqué profesionalmente al sonido, pero quiero que la web sea más ruidosa.

Sé que muchos no me apoyarán en este deseo. ¡Y no sin razón! Históricamente, los sonidos en Internet se usaron de manera extremadamente infructuosa y fea:

  • En los primeros días de la web, algunas páginas reproducían música MIDI de fondo.
  • Los estafadores emergentes usan sonidos para lograr sus malos objetivos. Ellos, con la ayuda de los sonidos, buscan atraer la atención de los usuarios y hacer que el fraude sea más creíble.
  • El sonido está presente en los videos de inicio automático (bueno, esto es absolutamente una pesadilla).

Es cierto, estoy seguro de que abandonar completamente el sonido es como si un niño salpique agua. Los sonidos pueden enfatizar las acciones del usuario; pueden mejorar los comentarios. El sonido puede alegrar un poco las acciones aburridas. Si los sonidos en las páginas web se usan con gusto, pueden mejorar la experiencia del usuario del proyecto, haciéndolo más "tangible" y real. Esta idea no es nueva: en los juegos y en las aplicaciones móviles, los sonidos se usan constantemente. De hecho, la web es una extraña excepción a la tendencia general. La mayoría de los productos digitales que se me ocurren usan sonidos. No estoy hablando de la respuesta táctil que se usa en las aplicaciones móviles para acercarlas a la realidad.





Mientras trabajaba en mi blog, quería experimentar con el sonido. Muchos de los elementos de la interfaz de mi blog con los que los usuarios interactúan producen sonidos cortos y silenciosos. Por ejemplo, en la parte superior derecha de la página de inicio del blog , hay un par de botones para cambiar de tema y activar y desactivar el sonido.

Dado que los sonidos en la web rara vez se usan, su uso puede tener un gran impacto en la percepción del sitio por parte de los usuarios. Este es un tipo de arma secreta del desarrollador, cuyo uso puede conducir a un impacto positivo sorprendentemente grande en ciertos proyectos.

Para simplificar el uso de sonidos, diseñé el gancho que utilicé para trabajar con sonidos en forma de un paquete npm independiente use-soundy lo publiqué. Aquí hablaré sobre las capacidades de este gancho y compartiré consejos sobre cómo usar el sonido en la web.

Si está ansioso por ver el código y comenzar a usar este gancho, aquí está su repositorio de GitHub.

Visión general


El paquete use-soundes un gancho React que ayuda a los desarrolladores a usar efectos de sonido. Aquí hay un ejemplo:

import useSound from 'use-sound';
import boopSfx from '../../sounds/boop.mp3';
const BoopButton = () => {
  const [play] = useSound(boopSfx);
  return <button onClick={play}>Boop!</button>;
};

El uso de este enlace agrega aproximadamente 1 Kb a la construcción del proyecto. Es cierto que él, en modo asíncrono, carga una dependencia de Howler de terceros , cuyo tamaño es de 10 KB.

El gancho le da al desarrollador muchas características agradables. Entre ellos, quiero señalar lo siguiente:

  • Parar prematuramente la reproducción, así como pausar y reanudar la reproducción.
  • Descargar algo así como una "hoja de sprites" de sonido y dividirlo en sonidos separados.
  • Configuración de la velocidad de reproducción con la capacidad de acelerar y ralentizar la reproducción de sonidos.
  • Muchos oyentes de eventos.
  • Muchas funciones avanzadas disponibles gracias a Howler.

Aquí está la documentación del gancho donde puede encontrar una guía detallada sobre su uso y referencia de API.

Conceptos básicos de uso de sonido


▍Instalación


Primero necesitas instalar el paquete usando hilo o npm:

#  yarn
yarn add use-sound
#  NPM
npm install use-sound

▍ Importar


El paquete use-soundexporta el único valor predeterminado: este es un enlace useSound. Puedes importarlo así:

import useSound from 'use-sound';

Además, deberá importar los archivos de audio que planea usar.

Si, cuando trabajas en proyectos React, usas algo como create-react-appGatsby, entonces deberías poder importar archivos MP3 de la misma manera que importas otros recursos, como imágenes:

import boopSfx from '../../sounds/boop.mp3';

Si utiliza una configuración de paquete web autoescrita, deberá utilizar el cargador de archivos para procesar archivos .mp3 .

Además, puede trabajar con archivos de sonido colocados en carpetas publico static. Por ejemplo, las demostraciones que se muestran en este artículo usan archivos estáticos ubicados en una carpeta pública.

Busca y prepara sonidos


Instalar dependencias y escribir código es solo la mitad de la batalla. Para las páginas de puntuación, necesitamos seleccionar los sonidos apropiados.

Mi recurso favorito para buscar sonidos es freesound.org . Casi todos los sonidos utilizados en mi blog, los encontré allí. Hay muchos sonidos con licencia bajo Creative Commons Zero . Para descargar archivos, debe registrarse en el recurso. Puedes usar sonidos gratis.

Esté preparado para el hecho de que, para seleccionar el sonido correcto, debe hurgar seriamente en el contenido de freesound.org. El punto aquí es, por ejemplo, que muchos sonidos son de baja calidad. El proceso de encontrar el sonido correcto se puede comparar con el proceso de buscar una aguja en un pajar. Y la preparación del sonido encontrado para el uso real se asemeja a una faceta de diamante sin cortar.

▍Preparación de sonidos


Muchos sonidos tomados de freesound.org necesitan algunas mejoras:

  • Los sonidos, como las cadenas, se pueden enmarcar mediante un espacio vacío. Los fragmentos de silencio generalmente se cortan, como resultado, el efecto de sonido correspondiente se reproduce inmediatamente después de la ocurrencia del evento sonoro.
  • Al preparar sonidos, es posible que deba ajustar su volumen, de modo que todos los sonidos utilizados en un proyecto tengan el mismo volumen.
  • Freesound.org tiene sonidos almacenados en varios formatos de audio. Es muy posible que necesite convertir los sonidos que le gustan a MP3.

Puede usar Audacity para completar todas estas ediciones. Este es un editor de audio multiplataforma de código abierto gratuito. Aquí no hablaré sobre cómo usar este editor, pero hay muchos tutoriales geniales sobre él.

¿Por qué estoy hablando de convertir sonidos a MP3? El hecho es que antes no existía ningún formato de audio compatible con todos los navegadores. Por lo tanto, era común incluir archivos MP3, AIFF y WAV en proyectos y usarlos en entornos que los admitieran.

En condiciones modernas, afortunadamente para nosotros, el formato MP3 es compatible con todos los principales navegadores, incluido IE 9. El sonido almacenado en el formato MP3 también está muy bien comprimido. Y esto le permite ir a archivos mucho más pequeños que el uso de formatos alternativos que codifican el sonido sin pérdida de calidad.

Sonido y disponibilidad


Aunque defiendo el uso de sonidos en la web, admito que no a todos los usuarios les gustará. Y aquí estamos hablando de consideraciones que van más allá del deseo subjetivo de silencio.

Las personas que tienen problemas de visión usan lectores de pantalla para usar páginas web. Además, estamos hablando no solo de aquellos que no ven las páginas. Los lectores de pantalla, por ejemplo, son utilizados por personas con dislexia que tienen dificultades para percibir el texto y personas con otros problemas similares. Los lectores de pantalla son programas que analizan documentos y leen textos. Si un sitio contiene muchos efectos de sonido, pueden interferir con el funcionamiento normal de los programas que leen el texto de la pantalla. Y esto, a su vez, evitará que las personas que dependen de dichos programas trabajen con el sitio.

Por esta razón, es importante que se incluya un botón para activar y desactivar el sonido en las páginas del sitio. Además, dicho botón debería estar disponible para la navegación del teclado (usando la tecla Tab). Idealmente, hasta que el usuario llegue a dicho botón con la tecla Tab, no se deben reproducir sonidos. Además, es necesario que el proyecto web recuerde el estado de este botón, para que el usuario no tenga que recurrir constantemente a él para silenciar el sonido.

Por otro lado, los usuarios con discapacidad auditiva ni siquiera sabrán que ciertas interacciones con las páginas van acompañadas de sonido. Lo mismo se aplica a las personas que trabajan en Internet con el sonido apagado. Por esta razón, es importante no confiar únicamente en el sonido al realizar ciertas acciones importantes. Si el sonido se usa como confirmación de alguna acción del usuario, asegúrese de que también se muestre una confirmación visual de esta acción en la página. Los sitios deben permanecer completamente funcionales y sin sonido.

Recetas


Veamos algunos ejemplos (en la sección correspondiente del original de este artículo, puede experimentar con ellos de forma interactiva y escuchar los sonidos producidos por diferentes controles).

▍ Casilla de verificación


Realmente me gusta esta bandera. Si usa un mouse, primero haga clic en él muy rápidamente, y luego para que haya una pequeña pausa entre el momento en que hace clic y suelta el botón del mouse.

function Demo() {
  const [isChecked, setIsChecked] = React.useState(
    false
  );

  const [playActive] = useSound(
    '/sounds/pop-down.mp3',
    { volume: 0.25 }
  );
  const [playOn] = useSound(
    '/sounds/pop-up-on.mp3',
    { volume: 0.25 }
  );
  const [playOff] = useSound(
    '/sounds/pop-up-off.mp3',
    { volume: 0.25 }
  );

  return (
    <Checkbox
      name="demo-checkbox"
      checked={isChecked}
      size={24}
      label="I agree to self-isolate"
      onChange={() => setIsChecked(!isChecked)}
      onMouseDown={playActive}
      onMouseUp={() => {
        isChecked ? playOff() : playOn();
      }}
    />
  );
}

▍ Interrupción temprana de la reproducción del sonido.


A veces, desea que el sonido se reproduzca solo cuando el usuario interactúa con un cierto control. Preste atención a la forma en el siguiente ejemplo de que el sonido se reproduce solo cuando el puntero está por encima del control.

function Demo() {
  // ,  ,  'rising-pops' :
  // - fanfare
  // - dun-dun-dun
  // - guitar-loop
  const soundUrl = '/sounds/rising-pops.mp3';

  const [play, { stop }] = useSound(
    soundUrl,
    { volume: 0.5 }
  );

  const [isHovering, setIsHovering] = React.useState(
    false
  );

  return (
    <Button
      onMouseEnter={() => {
        setIsHovering(true);
        play();
      }}
      onMouseLeave={() => {
        setIsHovering(false);
        stop();
      }}
    >
      <ButtonContents isHovering={isHovering}>
        Hover over me!
      </ButtonContents>
    </Button>
  );
}

▍Aumenta el tono


Y aquí hay un ejemplo de un efecto interesante. Consiste en el hecho de que el sonido reproducido por el siguiente clic en el botón Me gusta es más alto que el sonido reproducido por el clic anterior:

function Demo() {
  const soundUrl = '/sounds/glug-a.mp3';

  const [playbackRate, setPlaybackRate] = React.useState(0.75);

  const [play] = useSound(soundUrl, {
    playbackRate,
    volume: 0.5,
  });

  const handleClick = () => {
    setPlaybackRate(playbackRate + 0.1);
    play();
  };

  return (
    <Button onClick={handleClick}>
      <span role="img" aria-label="Heart">
      </span>
    </Button>
  );
}

▍ Botón para iniciar y pausar la reproducción


Aquí está el código de implementación para que el botón inicie y pause el sonido, lo que lo ayudará a desarrollar el nuevo Spotify:

function Demo() {
  const soundUrl = '/sounds/guitar-loop.mp3';

  const [play, { stop, isPlaying }] = useSound(soundUrl);

  return (
    <PlayButton
      active={isPlaying}
      size={60}
      iconColor="var(--color-background)"
      idleBackgroundColor="var(--color-text)"
      activeBackgroundColor="var(--color-primary)"
      play={play}
      stop={stop}
    />
  );
}

▍Sonido "listas de sprites"


Si planea usar muchos sonidos en su componente React, entonces puede tener sentido usar "listas de sprites" de sonido. La lista de sprites de sonido es un archivo que contiene muchos sonidos diferentes. Al agruparlos en un solo archivo, aumentamos la conveniencia de trabajar con ellos y evitamos hacer muchas solicitudes HTTP paralelas para descargar archivos individuales (espero que algún día podamos usar la multiplexación HTTP / 2).

Aquí usamos el sonido "lista de sprites" para crear una caja de ritmos. Puede jugar carretes virtuales con el mouse o con las teclas 1-4 en el teclado.

function Demo() {
  const soundUrl = '/sounds/909-drums.mp3';

  const [play] = useSound(soundUrl, {
    sprite: {
      kick: [0, 350],
      hihat: [374, 160],
      snare: [666, 290],
      cowbell: [968, 200],
    }
  });

  //  ,   'keydown',
  //    .
  useKeyboardBindings({
    1: () => play({ id: 'kick' }),
    2: () => play({ id: 'hihat' }),
    3: () => play({ id: 'snare' }),
    4: () => play({ id: 'cowbell' }),
  })

  return (
    <>
      <Button
        aria-label="kick"
        onMouseDown={() => play({ id: 'kick' })}
      >
        1
      </Button>
      <Button
        aria-label="hihat"
        onMouseDown={() => play({ id: 'hihat' })}
      >
        2
      </Button>
      <Button
        aria-label="snare"
        onMouseDown={() => play({ id: 'snare' })}
      >
        3
      </Button>
      <Button
        aria-label="cowbell"
        onMouseDown={() => play({ id: 'cowbell' })}
      >
        4
      </Button>
    </>
  );
}

Los detalles sobre el uso de "listas de sprites" de sonido en el paquete use-soundse pueden encontrar aquí .

Resumen


En el área del uso de sonidos al desarrollar sitios web, me preocupa mucho el hecho de que esta es un área que se ha estudiado muy poco. He estado experimentando con sonidos durante bastante tiempo, pero todavía siento que solo estoy al comienzo del viaje.

Entonces, ahora tiene herramientas a su disposición que puede usar para comenzar sus propios experimentos con el sonido. Te sugiero que hagas esto y descubras a dónde te llevará.

¡Queridos lectores! ¿Cómo te sientes al usar sonidos en páginas web?


All Articles