V2.97a.20120916 - Inline, deferred and lazy-load init improvements, HTML5 format / detection improvements, "re-use" load/play URL fix. API Updates Init improvement: Don't fail if Flash URL is null in normal include + init case. Instead, show note in debug input and wait for soundManager.setup() with url param, then treat as delayed init case. Improved experience if including <script>, then trying to do setup() after DOM Ready (common jQuery case). soundManager.setup({url:...}) + lazy-loading (dynamically-loaded JS) case: If setup() given url parameter after DOMContentLoaded has fired, assume we should start right away. (Helps reduce need for beginDelayedInit() + "just works" for most users) Don't init inline after document.readyState === 'complete' (improve lazy-loading case, wait for setup() with url: instead) Bug fixes Fix 'audio/mpeg' canPlay() checks, was incorrectly returning false due to audio/mpeg; codecs="mp3" working and preventing audio/mpeg from being checked. More paranoid Audio() handling for "bad" Opera (< 10) where new Audio() would throw not_enough_arguments (always required URL). Safer HTML5 duration checks - null now assigned instead of undefined. Improve durationEstimate under HTML5 during whileloading(). Flash 9/RTMP: Actually provide caption data to oncaptiondata(). Fix SMSound.play({url:...}) "re-use" case where new URL wasn't being assigned + loaded right away, and SMSound.url property was not being updated. Correct load() and play() with new URL parameter, so that subsequent play() call uses new URL (and not URL assigned with original createSound() call). Use seconds for SMSound.buffered (time ranges) whether HTML5 or Flash, since SM2 API uses seconds for setPosition() etc. Correct play() -> pause() -> setPosition(0) -> play() -> pause() case where the latter wasn't firing due to invalid state. Miscellaneous New Cassette Tape UI Prototype/demo (experimental). Tweaked documentation layout for legibility. Webfont (deja vu sans mono) from dejavu-fonts.org for code examples. Improved lazy-load / deferred example based on new setup() logic Added SMSound.buffered documentation Added m4b extension as an mp4 format Safer initial HTML5 support checks