Howler.js - cross platform audio for the modern web
Dieser Post stellt die Audio-Library howler.js vor, eine JavaScript-Bibliothek zur Abstraktion des Abspielens von Audiomaterial auf Basis der Web Audio API, mit Fallback auf HTML5 Audio. Howler.js
unterstützt u.a. Caching, mehrere Dateiformate sowie ein cleveres Konzept um Requests zu minimieren: Audiosprites!
Howler ist eine leichtgewichtige Open-Source JavaScript-Bibliothek ohne externe Abhängigkeiten, veröffentlicht unter der MIT Lizenz. Aufmerksam geworden bin ich auf diese Library als ich auf der Suche nach einem Weg war, das Laden von Audioresourcen zu verringern. Howler unterstützt sog. Audio-Sprites
. Das sind - ähnlich wie Image-Sprites - einfache Audiodateien, welche aus mehreren Audiodateien zusammengesetzt wurden. Somit kann man die Anzahl der Requests für mehrere Sounds auf Einen reduzieren, was vor allem auf mobilen Geräten und in Zeiten von HTTP1.x immer noch starke Vorteile mit sich bringt. Folgendes Beispiel verdeutlicht dies anhand einer einfachen Datei:
Aufgenommen mit einer Alhambra (Mod. S7C, Kapo im 2. Bund), Audacity und dem integrierten Mikrophon eines MacBooks. Sorry für die schlechte Qualität!
Erstellen der Audiosprites
Das Erstellen der Audiosprites stelle ich hier unter Ubuntu 12.04 LTS vor. Mehr Infos zur Installation auf anderen Betriebssystemen gibt es hier. Als Erstes muss Node.js, FFmpeg sowie audiosprite installiert werden:
Nun kann eine Audiosprite-Datei aus mehreren Audiodateien erstellt werden. Howler empfielt ogg/webm mit fallback auf mp3 (Internet Explorer):
Voraussetzung ist hier, dass sich im aktuellen Verzeichnis mehrere Wav-Dateien befinden. Es wurden aus den beiden Dateien e.wav
und f.wav
die Dateien my_sprite.ogg
, my_sprite.mp3
sowie eine JSON-Datei namens my_sprite.json
generiert. Die Datei my_sprite.json
enthält dank der CLI-Option --format howler
gleich die zur Initialisierung von Howler notwendigen Sprite-Informationen:
Das sprite
-Objekt in der JSON Datei gibt an, ab wann gewisse Teile der Audiosprite-Datei beginnen und wie lange diese dauern.
Make it play!
Code zum Initialisieren erfolgt dann folgendermaßen:
Du kannst diesen Code auch in die DevTools-Console kopieren!
Die beiden Werte in den Arrays geben die Startpositionen sowie die Längen der Sounds in Millisekunden an und wurden aus der oben genannten JSON-Datei entnommen. Der erste Akkord beginnt bei Position 0 und dauert 4049ms, der zweite Akkord beginnt bei 5000 und dauert 3621ms.
Zusammenfassung
Howler.js
ist eine schöne Lösung um Audiomaterial browserübergreifend und effizient abspielen zu können. Und es funktioniert sogar in Phonegap bzw. Cordova! Zusätzlich unterstützt die Lib auch noch Effekte wie fadein/fadeout, das Abspielen mehrerer Sounds simultan oder Web Audio 3D Sound Positionierung um zB die Wahrnehmung eines Sounds im 3D Effekt zu ermöglichen. Für mich sind diese Effekte bis jetzt nicht relevant, könnten aber zB bei Spielen sehr von Vorteil sein. Ich hatte bisher keine Probleme mit Howler, auch nicht auf diversen Android- und iOS-Geräten. Es lohnt sich also!
Questions, Comments, Notes? Send me a PM on Twitter or an email (PGP public key).