Use-Sound-Paket: Soundeffekte in React-Anwendungen

Vielleicht ist die Tatsache, dass ich mich professionell mit Sound beschäftigt habe, aber ich möchte, dass das Web lauter wird.

Ich weiß, dass viele mich in diesem Wunsch nicht unterstützen werden. Und das nicht ohne Grund! In der Vergangenheit wurden Sounds im Internet äußerst erfolglos und hässlich verwendet:

  • In den frühen Tagen des Web spielten einige Seiten Hintergrund-MIDI-Musik.
  • Pop-up-Betrüger verwenden Sounds, um ihre schlechten Ziele zu erreichen. Mit Hilfe von Geräuschen versuchen sie, die Aufmerksamkeit der Benutzer auf sich zu ziehen und Betrug glaubwürdiger zu machen.
  • Der Ton ist in automatisch startenden Videos vorhanden (nun, das ist absolut ein Albtraum).

Ich bin mir sicher, dass es so ist, als würde ein Kind mit Wasser bespritzt, wenn man den Ton komplett aufgibt. Sounds können Benutzeraktionen hervorheben und das Feedback verbessern. Der Sound kann ein wenig langweilige Aktionen aufhellen. Wenn die Sounds auf den Webseiten mit Geschmack verwendet werden, können sie die Benutzererfahrung des Projekts verbessern und es „greifbarer“ und realer machen. Diese Idee ist nicht neu: In Spielen und in mobilen Anwendungen werden ständig Sounds verwendet. In der Tat ist das Web eine seltsame Ausnahme vom allgemeinen Trend. Die meisten digitalen Produkte, die mir in den Sinn kommen, verwenden Sounds. Ich spreche nicht von der taktilen Reaktion, die in mobilen Anwendungen verwendet wird, um sie der Realität näher zu bringen.





Während der Arbeit an meinem Blog wollte ich mit Sound experimentieren. Viele der Oberflächenelemente meines Blogs, mit denen Benutzer interagieren, erzeugen leise kurze Sounds. Im oberen rechten Teil der Homepage des Blogs befinden sich beispielsweise einige Schaltflächen zum Umschalten des Themas und zum Ein- und Ausschalten des Sounds.

Da Sounds im Web selten verwendet werden, kann ihre Verwendung einen großen Einfluss auf die Wahrnehmung der Website durch Benutzer haben. Dies ist eine Art Geheimwaffe des Entwicklers, deren Verwendung zu überraschend großen positiven Auswirkungen auf bestimmte Projekte führen kann.

Um die Verwendung von Sounds zu vereinfachen, habe ich den von mir verwendeten Hook für die Arbeit mit Sounds in Form eines unabhängigen npm-Pakets entworfen use-sound und veröffentlicht. Hier werde ich über die Funktionen dieses Hooks sprechen und Tipps zur Verwendung von Sound im Web geben.

Wenn Sie den Code sehen und diesen Hook verwenden möchten, finden Sie hier das GitHub-Repository.

Überblick


Das Paket use-soundist ein React-Hook, mit dem Entwickler Soundeffekte verwenden können. Hier ist ein Beispiel:

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

Wenn Sie diesen Hook verwenden, wird der Projekterstellung um ca. 1 KB erweitert. Zwar lädt er im asynchronen Modus eine Howler- Abhängigkeit eines Drittanbieters , deren Größe 10 KB beträgt.

Der Haken gibt dem Entwickler viele nette Funktionen. Unter diesen möchte ich Folgendes erwähnen:

  • Stoppen Sie die Wiedergabe vorzeitig, halten Sie die Wiedergabe an und setzen Sie sie fort.
  • Laden Sie so etwas wie ein Sound-Sprite-Sheet herunter und teilen Sie es in separate Sounds auf.
  • Einstellen der Wiedergabegeschwindigkeit mit der Möglichkeit, die Wiedergabe von Sounds zu beschleunigen und zu verlangsamen.
  • Viele Event-Listener.
  • Dank Howler sind viele erweiterte Funktionen verfügbar.

In der Hook-Dokumentation finden Sie eine detaillierte Anleitung zur Verwendung und API-Referenz.

Use-Sound-Grundlagen


▍Installation


Zuerst müssen Sie das Paket mit Garn oder npm installieren:

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

▍ Importieren


Das Paket use-soundexportiert den einzigen Standardwert - dies ist ein Hook useSound. Sie können es folgendermaßen importieren:

import useSound from 'use-sound';

Außerdem müssen Sie die Audiodateien importieren, die Sie verwenden möchten.

Wenn Sie bei der Arbeit an React-Projekten etwas wie create-react-appGatsby verwenden, sollten Sie MP3-Dateien genauso importieren können wie andere Ressourcen - wie Bilder:

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

Wenn Sie eine selbstgeschriebene Webpack-Konfiguration verwenden, müssen Sie den File-Loader-Loader verwenden , um MP3-Dateien zu verarbeiten .

Darüber hinaus können Sie mit Audiodateien arbeiten, die sich in Ordnern publicoder befinden static. In den in diesem Artikel gezeigten Demos werden beispielsweise statische Dateien verwendet, die sich in einem öffentlichen Ordner befinden.

Sounds suchen und vorbereiten


Das Installieren von Abhängigkeiten und das Schreiben von Code ist nur die halbe Miete. Um Seiten zu bewerten, müssen wir die entsprechenden Sounds auswählen.

Meine Lieblingsressource für die Suche nach Sounds ist freesound.org . Fast alle in meinem Blog verwendeten Sounds habe ich dort gefunden. Es gibt viele Sounds, die unter Creative Commons Zero lizenziert sind . Um Dateien herunterzuladen, müssen Sie sich in der Ressource registrieren. Sie können Sounds kostenlos verwenden.

Seien Sie darauf vorbereitet, dass Sie den Inhalt von freesound.org ernsthaft durchsuchen müssen, um den richtigen Sound auszuwählen. Der Punkt hier ist zum Beispiel, dass viele Klänge von schlechter Qualität sind. Der Prozess des Findens des richtigen Klangs kann mit dem Prozess des Suchens nach einer Nadel im Heuhaufen verglichen werden. Und die Vorbereitung des Klangs für den tatsächlichen Gebrauch ähnelt einer Facette von ungeschnittenem Diamant.

▍Vorbereitung von Tönen


Viele Sounds von freesound.org müssen verbessert werden:

  • Klänge wie Saiten können durch Leerzeichen eingerahmt werden. Stillefragmente werden normalerweise ausgeschnitten, wodurch der entsprechende Soundeffekt unmittelbar nach dem Auftreten des stimmhaften Ereignisses wiedergegeben wird.
  • Wenn Sie Sounds vorbereiten, müssen Sie möglicherweise deren Lautstärke so einstellen, dass alle in einem Projekt verwendeten Sounds dieselbe Lautstärke haben.
  • Freesound.org hat Sounds in verschiedenen Audioformaten gespeichert. Möglicherweise müssen Sie die gewünschten Sounds in MP3 konvertieren.

Sie können Audacity verwenden, um alle diese Änderungen abzuschließen. Dies ist ein kostenloser plattformübergreifender Open Source-Audio-Editor. Hier werde ich nicht über die Verwendung dieses Editors sprechen, aber es gibt viele großartige Tutorials.

Warum spreche ich über das Konvertieren von Sounds in MP3? Tatsache ist, dass zuvor kein Audioformat von allen Browsern unterstützt wurde. Daher war es üblich, MP3-, AIFF- und WAV-Dateien in Projekte aufzunehmen und in Umgebungen zu verwenden, die sie unterstützen.

Unter modernen Bedingungen wird das MP3-Format zum Glück von allen gängigen Browsern unterstützt, einschließlich IE 9. Der im MP3-Format gespeicherte Sound ist auch sehr gut komprimiert. Auf diese Weise können Sie zu Dateien wechseln, die viel kleiner sind als alternative Formate, die den Ton ohne Qualitätsverlust codieren.

Sound und Verfügbarkeit


Obwohl ich die Verwendung von Sounds im Web befürworte, gebe ich zu, dass dies nicht allen Benutzern gefallen wird. Und hier geht es um Überlegungen, die über das subjektive Verlangen nach Stille hinausgehen.

Menschen mit Sehproblemen verwenden Bildschirmleseprogramme, um Webseiten zu verwenden. Darüber hinaus sprechen wir nicht nur über diejenigen, die die Seiten nicht sehen. Screenreader werden beispielsweise von Menschen mit Legasthenie verwendet, die Schwierigkeiten haben, Text wahrzunehmen, und von Menschen mit anderen ähnlichen Problemen. Screenreader sind Programme, die Dokumente analysieren und Texte lesen. Wenn eine Site viele Soundeffekte enthält, können sie den normalen Betrieb von Programmen beeinträchtigen, die Text vom Bildschirm lesen. Dies wiederum verhindert, dass Personen, die sich auf solche Programme verlassen, mit der Website arbeiten.

Aus diesem Grund ist es wichtig, dass auf den Seiten der Website eine Schaltfläche zum Ein- und Ausschalten des Tons enthalten ist. Darüber hinaus sollte eine solche Schaltfläche für die Tastaturnavigation verfügbar sein (mit der Tabulatortaste). Im Idealfall sollten keine Töne abgespielt werden, bis der Benutzer eine solche Schaltfläche mit der Tabulatortaste erreicht. Darüber hinaus muss sich das Webprojekt den Status dieser Schaltfläche merken, damit der Benutzer nicht ständig darauf zurückgreifen muss, um den Ton stummzuschalten.

Auf der anderen Seite wissen hörgeschädigte Benutzer nicht einmal, dass bestimmte Interaktionen mit Seiten von Ton begleitet werden. Gleiches gilt für Personen, die im Internet mit ausgeschaltetem Ton arbeiten. Aus diesem Grund ist es wichtig, sich bei bestimmten wichtigen Aktionen nicht nur auf den Klang zu verlassen. Wenn der Sound als Bestätigung einer Benutzeraktion verwendet wird, stellen Sie sicher, dass auf der Seite auch eine visuelle Bestätigung dieser Aktion angezeigt wird. Websites sollten voll funktionsfähig und schallfrei bleiben.

Rezepte


Schauen wir uns einige Beispiele an (im entsprechenden Abschnitt des Originals dieses Artikels können Sie interaktiv mit ihnen experimentieren und die Geräusche hören, die von verschiedenen Steuerelementen erzeugt werden).

▍ Kontrollkästchen


Ich mag diese Flagge wirklich. Wenn Sie eine Maus verwenden, klicken Sie zuerst sehr schnell darauf, und dann gibt es eine leichte Pause zwischen dem Moment, in dem Sie klicken und die Maustaste loslassen.

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

▍ Frühzeitige Unterbrechung der Tonwiedergabe


Manchmal soll der Sound nur abgespielt werden, wenn der Benutzer mit einem bestimmten Steuerelement interagiert. Beachten Sie im folgenden Beispiel, dass der Ton nur wiedergegeben wird, wenn sich der Zeiger über dem Steuerelement befindet.

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

▍Erhöhende Tonhöhe


Und hier ist ein Beispiel für einen interessanten Effekt. Es besteht darin, dass der Ton, der durch den nächsten Klick auf die Schaltfläche "Gefällt mir" wiedergegeben wird, höher ist als der Ton, der durch den vorherigen Klick wiedergegeben wird:

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

▍ Taste zum Starten und Unterbrechen der Wiedergabe


Hier ist der Implementierungscode für die Schaltfläche zum Starten und Anhalten des Sounds, der Ihnen bei der Entwicklung des neuen Spotify hilft:

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

▍Sound "Sprite-Listen"


Wenn Sie vorhaben, viele Sounds in Ihrer React-Komponente zu verwenden, ist es möglicherweise sinnvoll, Sound-Sprite-Listen zu verwenden. Die Sound-Sprite-Liste ist eine Datei, die viele verschiedene Sounds enthält. Indem wir sie in eine einzelne Datei packen, erhöhen wir die Benutzerfreundlichkeit und vermeiden, dass viele parallele HTTP-Anforderungen zum Herunterladen einzelner Dateien ausgeführt werden (ich hoffe, dass wir eines Tages HTTP / 2-Multiplexing verwenden können).

Hier verwenden wir die Sound "Sprite List", um eine Drum Machine zu erstellen. Sie können virtuelle Walzen entweder mit der Maus oder mit den Tasten 1 bis 4 auf der Tastatur spielen.

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

Details zur Verwendung von Sound "Sprite-Listen" im Paket use-soundfinden Sie hier .

Zusammenfassung


Im Bereich der Verwendung von Sounds bei der Entwicklung von Websites bin ich am meisten besorgt darüber, dass dies ein Bereich ist, der nur sehr wenig untersucht wurde. Ich experimentiere schon seit einiger Zeit mit Geräuschen, aber ich habe immer noch das Gefühl, dass ich erst am Anfang der Reise stehe.

Jetzt stehen Ihnen Werkzeuge zur Verfügung, mit denen Sie Ihre eigenen Experimente mit Klang starten können. Ich schlage vor, Sie tun dies und finden heraus, wohin es Sie führen wird.

Liebe Leser! Wie stehen Sie zur Verwendung von Sounds auf Webseiten?


All Articles