mp3 ist ein tolles Format - und deutlich kleiner als WAV. Mittlerweile können auf dem PC alle aktuellen Browser das Format. Bei den Mobilgeräten bin ich mir nicht so sicher. Daher gehört zum Audio im Web immer (!) eine Prüfung auf verfügbare Unterstützung, welches Format und dann die Bereitstellung des jeweiligen Formates*. An mp3 würde ich nicht vorbei gehen - an ogg u. U. kommst noch nicht vorbei (für beide Format gibbet "Audacity").
Qualität ist so eine Sache - je nach Zielgruppe benötigst Du keine 320 kbit im mp3, weil sowas auf 'nem Handy über die externe Box eh BS klingt. Höher als 96 kbit musst Du nicht - tiefer als 64 solltest Du nicht. Damit hast Du ein wenig Spielraum. Je nach Umfang Deiner Audioarbeit ist nicht unwichtig, welche Sounds gut klingen können, welche müssen und welche vielleicht als 64er reichen. Bedenke: Alles ist Traffic! Demnach: Exzellente Vorarbeit hierbei ist alles. Tipp: Versioniere Deine Sounds ebenfalls (falls Du später doch noch was änderst)!
Solltest Du über Loops (Endlosschleife) nachdenken, so sei Dir versichert: Kein Browser kann es! Alle haben einen Aussetzer dazwischen. Je nach Browser dauert der mal (immer hörbar) bis zu 0,5 s. Eine Lösung, die auf allen Geräten auch funktioniert, gibt es
nicht! (sonst freue ich mich über Hinweise)
Wichtig: Du kannst nicht einfach Audio-Events feuern. Wenn die Source belegt ist (weil schon Audio läuft), kannst Du kein weiteres File abspielen. Darum: Vor jedem play() dafür sorgen, dass nix mehr läuft!
Stop/Pause: Ich habe in meinem JavaScript alles fürs Audio in {} (also als Object). Hier dient schlichtweg ein flag als "läuft" bzw. "läuft nicht". Mein Audio setze ich mit pause() in den Ruhemodus. Ein erneutes play() startet wieder von vorn (!) - ist kein
resume.
* Formatbestimmung: Es gibt ja nun "new Audio("")" und damit kannst Du ganz einfach je Gerät erkennen, was die können:
Code:
var myAudio = new Audio(""), ogg = '', mp3 = '', wav = '';
ogg = myAudio.canPlayType("audio/ogg");
mp3 = myAudio.canPlayType("audio/mpeg");
var canPlayOgg = ((ogg != "no") && (ogg != ""));
var canPlayMp3 = ((mp3 != "no") && (mp3 != ""));
var canPlayWav = ((wav != "no") && (wav != ""));
console.log(canPlayOgg . ' : ' . canPlayMp3 . ' : ' . canPlayWav);
Preload bei Audio: Das funktioniert identisch wie bei bspw. Bildern - und dringend empfohlen, damit Trigger-Sounds auch "da" sind, wenn getriggert (klick, touch etc.) wird:
_obj ist bspw. jetzt mein {} (Gesamtkonstrukt), denn darin befindet sich das Array von audioElement - audioFiles ist auch nur ein Array, in dem die Dateien stehen, die benötigt werden für diese Seite und audioFormat ist das, was ermittelt wurde.
Code:
_obj.audioElement[ len ] = document.createElement('audio');
_obj.audioElement[ len ].setAttribute('src', _obj.audioFiles[i]+"."+_obj.audioFormat);
_obj.audioElement[ len ].load();
len++;
Tipp zur Vorgehensweise:
1. Ermittle, ob der User "Sound" überhaupt hat und ermittle das unterstützte Format!
2. Übergebe die Files, die geladen werden müssen!
3. Lade diese Files!
4. Sorge mit flags dafür, dass der User erst hantieren kann, wenn Audio bereit steht (Preload, "bitte warten"- bzw. Splash-Screen)
Mehr hätte ich nicht für Dich ... doch, eines: Hab Spaß dabei, weil es einfach nur Laune macht!
