Package Use-sound: Effets sonores dans les applications React

Peut-être le fait est que j'étais professionnellement engagé dans le son, mais je veux que le web soit plus fort.

Je sais que beaucoup ne me soutiendront pas dans ce désir. Et non sans raison! Historiquement, les sons sur Internet étaient utilisés de façon extrêmement infructueuse et laide:

  • Au début du Web, certaines pages diffusaient de la musique de fond MIDI.
  • Les escrocs contextuels utilisent des sons pour atteindre leurs mauvais objectifs. Ils, à l'aide de sons, cherchent à attirer l'attention des utilisateurs et à rendre la fraude plus crédible.
  • Le son est présent dans les vidéos à démarrage automatique (enfin, c'est absolument un cauchemar).

Certes, je suis sûr qu'abandonner complètement le son, c'est comme si un enfant était éclaboussé d'eau. Les sons peuvent mettre l'accent sur les actions des utilisateurs; ils peuvent améliorer les commentaires. Le son peut égayer un peu les actions ennuyeuses. Si les sons des pages Web sont utilisés avec goût, ils peuvent améliorer l'expérience utilisateur du projet, le rendant plus «tangible» et réel. Cette idée n'est pas nouvelle: dans les jeux et dans les applications mobiles, les sons sont constamment utilisés. En fait, le Web est une étrange exception à la tendance générale. La plupart des produits numériques qui me viennent à l'esprit utilisent des sons. Je ne parle pas de la réponse tactile utilisée dans les applications mobiles pour les rapprocher de la réalité.





En travaillant sur mon blog, j'ai voulu expérimenter le son. De nombreux éléments d'interface de mon blog avec lesquels les utilisateurs interagissent produisent des sons courts et silencieux. Par exemple, dans la partie supérieure droite de la page d' accueil du blog , deux boutons permettent de changer de thème et d'activer et de désactiver le son.

Étant donné que les sons sur le Web sont rarement utilisés, leur utilisation peut avoir un grand impact sur la perception du site par les utilisateurs. Il s'agit d'une sorte d'arme secrète du développeur, dont l'utilisation peut entraîner un impact positif étonnamment important sur certains projets.

Afin de simplifier l'utilisation des sons, j'ai conçu le crochet utilisé par moi pour travailler avec des sons sous la forme d'un package npm indépendant et l' aiuse-sound publié. Ici, je vais parler des capacités de ce crochet et partager des conseils sur l'utilisation du son sur le Web.

Si vous êtes impatient de voir le code et de commencer à utiliser ce hook - voici son référentiel GitHub.

Aperçu


Le package use-soundest un crochet React qui aide les développeurs à utiliser des effets sonores. Voici un exemple:

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

L'utilisation de ce crochet ajoute environ 1 Ko à la construction du projet. Certes, lui, en mode asynchrone, charge une dépendance Howler tierce , dont la taille est de 10 Ko.

Le crochet offre au développeur de nombreuses fonctionnalités intéressantes. Parmi eux, je veux noter les suivants:

  • Arrêtez la lecture prématurément, interrompez et reprenez la lecture.
  • Télécharger quelque chose comme une «feuille de sprite» sonore et la diviser en sons séparés.
  • Réglage de la vitesse de lecture avec la possibilité d'accélérer et de ralentir la lecture des sons.
  • Beaucoup d'auditeurs d'événements.
  • Nombreuses fonctionnalités avancées disponibles grâce à Howler.

Voici la documentation du hook où vous pouvez trouver un guide détaillé de son utilisation et de sa référence API.

Bases de l'utilisation du son


▍Installation


Vous devez d'abord installer le package en utilisant yarn ou npm:

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

▍ Importer


Le package use-soundexporte la seule valeur par défaut - il s'agit d'un hook useSound. Vous pouvez l'importer comme ceci:

import useSound from 'use-sound';

De plus, vous devrez importer les fichiers audio que vous prévoyez d'utiliser.

Si, lorsque vous travaillez sur des projets React, vous utilisez quelque chose comme create-react-appGatsby, vous devriez pouvoir importer des fichiers MP3 de la même manière que vous importez d'autres ressources - comme des images:

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

Si vous utilisez une configuration Webpack auto-écrite, vous devrez utiliser le chargeur de chargeur de fichiers pour traiter les fichiers .mp3 .

De plus, vous pouvez travailler avec des fichiers audio placés dans des dossiers publicou static. Par exemple, les démos présentées dans cet article utilisent des fichiers statiques situés dans un dossier public.

Rechercher et préparer des sons


Installer des dépendances et écrire du code n'est que la moitié de la bataille. Pour marquer des pages, nous devons sélectionner les sons appropriés.

Ma ressource préférée pour rechercher des sons est freesound.org . Presque tous les sons utilisés sur mon blog, j'y ai trouvé. Il existe de nombreux sons sous licence Creative Commons Zero . Pour télécharger des fichiers, vous devez vous inscrire sur la ressource. Vous pouvez utiliser des sons gratuitement.

Soyez prêt pour le fait que pour sélectionner le bon son, vous devez sérieusement fouiller dans le contenu de freesound.org. Le point ici est, par exemple, que de nombreux sons sont de mauvaise qualité. Le processus de recherche du bon son peut être comparé au processus de recherche d'une aiguille dans une botte de foin. Et la préparation du son trouvé pour une utilisation réelle ressemble à une facette de diamant non coupé.

▍Préparation des sons


De nombreux sons extraits de freesound.org nécessitent quelques améliorations:

  • Les sons, comme les cordes, peuvent être encadrés par un espace vide. Les fragments de silence sont généralement coupés, de sorte que l'effet sonore correspondant est reproduit immédiatement après l'occurrence de l'événement exprimé.
  • Lors de la préparation des sons, vous devrez peut-être régler leur volume, de sorte que tous les sons utilisés dans un projet aient le même volume.
  • Freesound.org a des sons stockés dans différents formats audio. Vous pourriez très bien avoir besoin de convertir les sons que vous aimez en MP3.

Vous pouvez utiliser Audacity pour terminer toutes ces modifications. Il s'agit d'un éditeur audio multiplateforme open source gratuit. Ici, je ne parlerai pas de la façon d'utiliser cet éditeur, mais il existe de nombreux tutoriels intéressants.

Pourquoi est-ce que je parle de convertir des sons en MP3? Le fait est qu'avant, aucun format audio n'était pris en charge par tous les navigateurs. Par conséquent, il était courant d'inclure des fichiers MP3, AIFF et WAV dans des projets et de les utiliser dans des environnements qui les prennent en charge.

Dans les conditions modernes, heureusement pour nous, le format MP3 est pris en charge par tous les principaux navigateurs, y compris IE 9. Le son stocké au format MP3 est également très bien compressé. Et cela vous permet d'accéder à des fichiers beaucoup plus petits que d'utiliser des formats alternatifs qui codent le son sans perte de qualité.

Son et disponibilité


Bien que je préconise l'utilisation de sons sur le Web, j'avoue que tous les utilisateurs ne l'apprécieront pas. Et nous parlons ici de considérations qui dépassent le désir subjectif de silence.

Les personnes qui ont des problèmes de vision utilisent des lecteurs d'écran pour utiliser des pages Web. De plus, nous ne parlons pas seulement de ceux qui ne voient pas les pages. Les lecteurs d'écran, par exemple, sont utilisés par les personnes atteintes de dyslexie qui ont du mal à percevoir le texte et les personnes ayant d'autres problèmes similaires. Les lecteurs d'écran sont des programmes qui analysent des documents et lisent des textes. Si un site contient beaucoup d'effets sonores, ils peuvent interférer avec le fonctionnement normal des programmes qui lisent du texte à l'écran. Et cela, à son tour, empêchera les personnes qui dépendent de ces programmes de travailler avec le site.

Pour cette raison, il est important qu'un bouton pour activer et désactiver le son soit inclus dans les pages du site. De plus, un tel bouton devrait être disponible pour la navigation au clavier (en utilisant la touche Tab). Idéalement, jusqu'à ce que l'utilisateur atteigne un tel bouton à l'aide de la touche Tab, aucun son ne devrait être joué. De plus, il est nécessaire que le projet Web se souvienne de l'état de ce bouton - afin que l'utilisateur n'ait pas à y recourir constamment pour couper le son.

En revanche, les utilisateurs malentendants ne sauront même pas que certaines interactions avec les pages sont accompagnées de sons. La même chose s'applique aux personnes qui travaillent sur Internet avec le son désactivé. Pour cette raison, il est important de ne pas se fier uniquement au son lors de l'exécution de certaines actions importantes. Si le son est utilisé comme confirmation d'une action de l'utilisateur, assurez-vous qu'une confirmation visuelle de cette action est également affichée sur la page. Les sites doivent rester entièrement fonctionnels et sans son.

Recettes


Regardons quelques exemples (dans la section correspondante de l' original de cet article, vous pouvez les expérimenter de manière interactive et écouter les sons émis par différents contrôles).

▍ Case à cocher


J'aime vraiment ce drapeau. Si vous utilisez une souris, cliquez d'abord dessus très rapidement, puis de sorte qu'il y ait une légère pause entre le moment où vous cliquez et relâchez le bouton de la souris.

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();
      }}
    />
  );
}

▍ Interruption précoce de la reproduction sonore


Parfois, vous souhaitez que le son soit lu uniquement lorsque l'utilisateur interagit avec un certain contrôle. Faites attention à la manière dans l'exemple suivant que le son est reproduit uniquement lorsque le pointeur est au-dessus du contrôle.

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>
  );
}

▍Augmentation de la hauteur


Et voici un exemple d'un effet intéressant. Il consiste en ce que le son reproduit par le prochain clic sur le bouton Like est plus élevé que le son reproduit par le clic précédent dessus:

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>
  );
}

▍ Bouton pour démarrer et suspendre la lecture


Voici le code d'implémentation du bouton pour démarrer et mettre en pause le son, qui vous aidera à développer le nouveau 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}
    />
  );
}

▍Son «listes de sprites»


Si vous prévoyez d'utiliser beaucoup de sons dans votre composant React, il peut être judicieux d'utiliser des «listes de sprites» sonores. La liste des sprites sonores est un fichier qui contient de nombreux sons différents. En les regroupant dans un seul fichier, nous augmentons la commodité de travailler avec eux et évitons de faire de nombreuses requêtes HTTP parallèles pour télécharger des fichiers individuels (j'espère qu'un jour nous pourrons utiliser le multiplexage HTTP / 2).

Ici, nous utilisons la "liste de sprites" pour créer une boîte à rythmes. Vous pouvez jouer des rouleaux virtuels avec la souris ou avec les touches 1 à 4 du clavier.

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>
    </>
  );
}

Les détails sur l'utilisation des "listes de sprites" sonores dans le package use-soundpeuvent être trouvés ici .

Sommaire


En ce qui concerne l'utilisation des sons lors du développement de sites Web, je suis très préoccupé par le fait que c'est un domaine qui a été très peu étudié. J'expérimente avec les sons depuis un certain temps, mais je sens toujours que je ne suis qu'au tout début du voyage.

Donc, vous avez maintenant des outils à votre disposition que vous pouvez utiliser pour démarrer vos propres expériences avec le son. Je vous suggère de faire cela et de découvrir où cela vous mènera.

Chers lecteurs! Que pensez-vous de l'utilisation des sons sur les pages Web?


All Articles