SoundManager 2: Download
Revision History
Archived versions of SM2 releases
Revision History (Archives)
A changelog of sorts.
-
V2.97a.20111220 - HTML5
src
/onload()
/onstop()
fixes, new HTML5 polling,onPosition()
updates, "audio sprites" (from
/to
) and multiple URL support. (Also: New homepage design!) (Download archived version)Fixes for HTML5 audio including redundant
src
assignment,onload
andonstop
. Newhtml5PollingInterval
property,onPosition()
andclearOnPosition()
methods, "audio sprites" support viafrom
andto
parameters. Updatedonposition()
sound method, added newonposition
sound parameter, and multiple URLs / URL formats now allowed for a sound. Also: Version checking between JS and SWF, brand-new optimized homepage design and demo UI tweaks + optimizations.-
Bug fixes
-
HTML5: Fixed
Audio()
src
attribute re-assignment bug seen increateSound()
->play()
use case. -
HTML5:
mySound.load({onload:function(){}})
callback fixed so it works. -
HTML5 + Flash:
onload()
now called immediately whenload({onload:function(){}})
is used on a sound with the same URL which has already loaded. -
onstop()
now mimicsonfinish()
in terms of sequence. HTML5 setsposition
to 0, but retains pre-stop()
position property value (like Flash does.) -
Amazon Kindle Fire UA looks like Safari on OS X 10.6.3, but does not have broken HTML5 audio (i.e., intermittent playback failure) like the "isBadSafari" case.
-
MovieStar/NetStream (non-RTMP) edge case: Correct
onfinish()
afterplay()
and a seek so that it always fires. Removemetadata()
after first call (as it was) for non-RTMP. Reduce buffer-near-end logic to 3 seconds from 5. -
Flash 9 MovieStar/RTMP: Only fire
onconnect()
for RTMP (was firing for flash 9/NetStream, too, breaking MovieStarcreateSound({autoLoad:true,onload:function(){this.play()}})
case.) -
RTMP: Exclude RTMP from 30-second
resume()
reposition hack (streaming does not have this issue.) May have been breaking buffer due to seek on resume. -
Fix edge case where
soundManager.waitForWindowLoad = true
(non-async startup case), but_initComplete()
may fire afterwindow.onload()
and thusonready()
never fired.
-
-
API updates
-
Added
soundManager.html5PollingInterval
property, for increasedwhileplaying()
callback frequency (higher UI framerates) similar toflashPollingInterval
. (By default, null/off.) Also excludes mobile (eg., iOS) by default. -
soundManager.onPosition()
: Queues a callback that will be fired each time a sound reaches a given position during playback. Applies for the life of the sound object. -
soundManager.clearOnPosition()
: RemovesonPosition()
callback(s) from a sound, by position and/or callback. (If no position or callback are specified, then all callbacks are cleared for the given sound.)Optionally, an
onstop: function(){}
handler can be passed to capture the moment when "to" is reached. When using Flash, sound is preloaded 100% in order to guarantee playback can start at the "from" position. -
Added support for "audio sprites." New sound options,
from
andto
allow segments, samples or slices of sound to be played. eg.,mySound.play({ from: 5000, to: 10000});
-
New sound option,
onposition
, defines times and related callbacks for positions of interest within a sound. Applies on a per-play basis. eg.onposition: {500: function(p) { console.log('position ' + p + ' was reached.') } }
-
Experimental: Multiple formats/encodings support in the sound
url
parameter; now accepts an array as an alternate to a single string. eg.soundManager.createSound({id:'foo', url:['bar.ogg','bar.mp3']});
- SM2 will use the first playable URL it finds and the URL property will then reflect the one URL after that point. Note that this means the original array data will be lost.Also accepts
type
attributes, eg.url:[{type:'audio/mp3',url:'/path/to/play.php?song=123'},...]
- useful for URLs without obvious filetype extensions. -
Flash 9 + MovieStar (NetStream) / RTMP:
onmetadata
(sound parameter) callback, allows capturing of metadata events from flash (eg., streaming song / title updates) similar toonid3()
. Can now fire multiple times, eg., when RTMP streaming and new song / artist info is provided. -
Added JS version + Flash SWF build/version check to SM2 during start-up. (Finally! :D) ... Will now throw
new Error()
if soundmanager.js version reports V2.97a.20111030 and SWF version is V2.97a.20110918, for example. (Happens when upgrading/replacing old versions of SM2, you may forget to update one of the SWFs etc.)
-
-
Miscellaneous
-
Homepage: Brand-new, shinier design, improved three-column layout; looks better even in IE 6. Small UI tweaks on inline demos. Combined demo JS + CSS files for performance; cut HTTP requests by over 50% (now down to 14 HTTP requests in most cases) via concatenation and data: URIs for some background images and sprites.
-
360 player demos: Updated UI with more circles and a few gradients, border-radius etc. Small 50x50 UI is now clickable over entire area, rather than small circular button.
-
Demos: Some data: URIs added to inline player and 360 player for performance (reduced HTTP requests.) Christmas lights demo now uses YUI 3 seed + animation.
-
soundManager.useConsoleOnly = true
by default, was previously false. New "true" default means no HTML debug output ifconsole.log()
is available. -
soundmanager2.js: Micro-optimizations, further -nodebug-jsmin optimizations and minor comment formatting. Eliminated last Google Closure Compiler warning (caused by an empty "if" block.)
-
Debug output no longer shows "loops: 1" (redundant), only interesting values eg. 2+ are reported.
-
Documentation: Small theme tweaks, textured background and re-organization of properties (left menu) for easier navigation. Fixed "onsuspend" event labeling, clarify SMSound events as properties and not methods. Re-sorted property lists, tidied up code formatting. Added missing
soundManager.onPosition()
documentation (side note: previously named onposition(), old lower-case method name maintained for backward compatibility.) -
Page player / Muxtape demos: Removed
useMovieStar
sound option - no longer exists, redundant.
-
-
-
V2.97a.20111030 - HTML5
unload()
improvements, Android 2.3 fix and newonsuspend()
event (Download archived version)Fixes for HTML5
unload()
on Webkit (connection was not closing), playback on Android 2.3, and IE 9 "not implemented" / unsupported HTML5 case. Addition ofonsuspend()
HTML5 event, possibly applicable to iOS where stalled events suggest that user action is needed to play or resume audio playback.-
Bug fixes
-
HTML5
unload()
: Correctly applyabout:blank
(_emptyURL default) to everyone except Firefox, which allegedly likes''
. Webkit was not actually closing the connection of loading streams, in this case. -
HTML5 audio playback fix for Android 2.3 (Honeycomb), which doesn't seem to like
new Audio('foo.mp3')
followed byload()
->play()
; first request/attempt stalls and eventually firesended
event. Rather odd. (Related discussion.) -
Added
try...catch
for dumb IE 9Audio()
"not implemented" error in Windows server case without "desktop experience" installed, means no HTML5 audio/video support. Hat tip: Modernizr issue 224
-
-
API updates
-
Added
soundManager.noSWFCache
(boolean) for easy cache busting - good for dev/testing. SWFs tend to be aggressively cached by browsers, especially in offline cases. -
HTML5
suspend
events are now listened for and fired via SMSound optiononsuspend()
. This event may be the best way to detect when mobile Safari (eg. iOS) is blocking autoplay-style behaviour, and user interaction is required to start or resume playback.
-
-
Miscellaneous
-
Fix "playable MP3 links" demo for iOS, playing 2nd+ sound now works. Due to single sound object reuse, "old" sound must be paused before new one is created. Previously, playing sound 1 -> sound 2 -> sound 1 would fail.
-
Tweaked 360player behaviour to support being initialized multiple times (for dynamic content, "decorating" new MP3 links etc.)
-
Modified soundManager core property documentation to be multi-line, allowing longer comments
-
-
-
V2.97a.20110918 - Code clean-up, improved comments and formatting, generated documentation, polling and
onbefore-
removal, HTML5stop()
/unload()
fixes (Download archived version)Added block comments above major SM2 methods (and Docco-generated documentation), more line breaks for consistent vertical spacing and readability, removal of
onbefore
-related SMSound options,allowPolling
+useFastPolling
features. Improved build task optimizing of -nodebug JS build, removing comments, extra line breaks and debug code blocks which were previously only commented out.-
Bug fixes
- HTML5 unload: Gecko can use url = '' to cancel request etc., others seem to need
about:blank
or similar empty URL (matching Flash 8.) - HTML5
stop()
: Don't callunload()
here (file under "durrr." This fixes a few state-related bugs.) - Fire the
onposition
callback after setting item.fired, instead of before. This allows looping in the form ofmySound.onposition(200, function(){ mySound.setposition(100); });
- Fix movieStar (MPEG-4) handling for URLs without MIME hints (eg. a URL ending in .php) if
type: 'audio/mp4'
is passed, for example. (Possible regression introduced with V2.97a.20110801, one report was received.) - Fire
onposition()
after increasing the internal "onPositionFired" counter.
- HTML5 unload: Gecko can use url = '' to cancel request etc., others seem to need
-
API updates
-
Clean-up time! The following soundManager properties have been removed as they're ineffective and/or have modern replacements:
soundManager.nullURL = 'about:blank';
(internalized; search for 'about:blank' in the source if you want to customize it.)soundManager.allowPolling = true;
(ignored, always true now.whileloading()
/whileplaying()
calls rely on it.)soundManager.useFastPolling = false;
(redundant, now determined by flashPollingInterval now being specified as a number eg., 20, instead of the default of null.)The following SMSound (sound options) have been removed, in favour of modern replacements (and also didn't work with HTML5 sounds.)
soundManager.defaultOptions.onbeforefinish = null; soundManager.defaultOptions.onbeforefinishtime = 5000; soundManager.defaultOptions.onbeforefinishcomplete = null; soundManager.defaultOptions.onjustbeforefinish = null; soundManager.defaultOptions.onjustbeforefinishtime: 200;
As a replacement, use the
SMSound.onposition()
method to assign an event callback handler to fire at the relevant time.mySound.onposition(10000, function() { console.log('the sound ' + this.id + ' is now at position ' + this.position); });
If you need to fire an event relative to the true end of the sound, reference its duration once the sound has fully-loaded - ie., at or after the
onload()
event - as the duration will not be completely accurate until that time.durationEstimate
may be referenced beforeonload()
, but it should not be relied on when "precise" timings of say, < 1 second are desired.mySound.load({ onload: function() { this.onposition(this.duration - 5000, function() { console.log('the sound ' + this.id + ' is now at position ' + this.position); } } });
Again, note that due to the interval / polling-based methods of both HTML5 and flash audio, sound status updates and thus precision can vary between 20 msec to perhaps 0.5 seconds and the sound's position property will reflect this delta when the onposition() callback fires.
-
Added
soundManager.onposition()
(forgot to mirror the SMSound method) -
Privatize
soundManager.netStreamMimeTypes
, etc.soundManager.mimePattern
, the resulting one applied tocanPlayMIME()
etc., is still exposed. -
Simplify getMovie() to use _id(smID) || _doc[smID] || _win[smID] rather than IE / Safari special checks. Sometimes (old?) IE and Safari would return null on getElementById(), but window[id] or document[id] would work. Presumably related to Flash + ExternalInterface wackiness.
-
-
Miscellaneous
- Reviewed soundmanager2.js code for readability and comments. Added linebreaks, spacing and block-style comments around main functions.
- Added generated documentation via "Rocco" (ruby port of Docco.)
- Added build.xml notes re: Closure compiler, MTASC and where to find working builds
- Modified soundmanager-nodebug.js build so comments and debug blocks are removed entirely from the code. Double-spaced linebreaks are also removed.
- Removed executable permissions from almost all files
- parseInt() on soundManager.flashVersion, invalidate strings like "9"
- Use 10 / 50 msec polling interval for high performance mode vs. regular mode
- Page cache/unload/restore (back button case): Only apply window unload event if using flash, since plugin is more likely to break (ie., state won't be recalled correctly.)
-
-
V2.97a.20110801 - "100% HTML5 mode" desktop browser (+no flash) fix,
useHTML5Audio
enabled by default, flash 9 end-of-sound correction, ClickToFlash improvements (Download archived version)Last release introduced a regression with HTML5-only mode on desktops when flash was not installed/present, now fixed; HTM5 audio support is enabled by default, although flash is still preferred for MP3/MP4 by default.
probably|maybe
is now the default when testing HTML5 format support. Flash 9 now does not reset sound position to 0 atonfinish()
, matching flash 8 and HTML5 behaviour. Better ClickToPlugin / ClickToFlash compatibility (CSS tweaks for display of blocked SWF.) Minor internal flash polling loop improvements. soundManageronload
,onerror
andoninitmovie
events have been deprecated in favour ofonready()
andontimeout()
, but remain functional.-
Bug fixes
- A regression was introduced in V2.97.20110706 where SM2 would fail to start in HTML5-only mode on supported desktop browsers when flash was disabled or not installed, eg., Safari on new Macs or IE 9 without flash. (iOS was not affected.) This has been fixed with the 2.97.20110801 release.
-
API Updates
-
soundManager.useHTML5Audio
is nowtrue
by default; however,soundManager.preferFlash
is alsotrue
and HTML5 browsers will still attempt to use flash for playing MP3/MP4 by default, if those formats are marked as "required".If you wish to have 100% HTML5 mode in more cases, set
soundManager.preferFlash = false
. Presently, the MP3 links and MP3 button SM2 demos are more HTML5-friendly and will serve as a test for exposing bugs that may be in the wild. -
soundManager.html5Test
has been relaxed to use(probably|maybe)
for Audio'scanPlayType()
test (previously, was only "probably") - so formats will be more likely to work on HTML5-only devices that conservatively report "maybe" for MIME types likeaudio/mpeg; codecs="mp3"
at this point. -
Certain mobile and tablet-like devices are special-cased as preferring HTML5, and will ignore checking for flash altogether; this presently includes the iPad, iPhone and iPod, Palm Pre and Motorola Xoom.
-
The HTML5 audio "loadeddata" event triggers an SMSound
onload()
event, which now fireswhileplaying()
and tries to pass identicalbytesLoaded, bytesTotal
parameters so that UIs will correctly show the sound as fully-"loaded" - even if in truth, not all bytes have actually been fetched (depending on the browser and server, etc.) because of the ability to do arbitrary seeking. -
Updated Flash 9
onfinish()
/ end-of-sound behaviour: Sound objects'position
property no longer resets to 0 when a sound ends (and whenonfinish()
fires.) This now matches both HTML5 and flash 8's existing behaviour; therefore, a sound'sposition
will equal itsduration
atonfinish()
in all cases now. In the eventplay()
is called from the end of a sound at or afteronfinish()
, the sound's position will be set to 0 before playback begins if using flash 9.Edge case covered: if at internal SOUND_COMPLETE the SMSound.position is < its duration, flash will match position to duration and fire
whileplaying()
one last time so "100%" is always reached beforeonfinish()
is called.multiShot
+multiShotEvent
case has been verified as working (eg.onfinish()
fires 5x ifplay()
called 5x.) -
soundManager.onload, soundManager.onerror and soundManager.oninitmovie have been deprecated in favour of soundManager.onready() and soundManager.ontimeout(). The deprecated methods are still present and work with this release, but you should migrate to their modern replacements.
-
-
Miscellaneous
-
Flash 8 + 9 internal
whileplaying()
+whileloading()
polling improvements: Internal check previously looped through all sounds from onLoad(), registerOnComplete(), _load() and _setPosition(). Now only the relevant sound is checked. -
Improved HTML5 support debug ouput/messaging, now right up top. Better messaging and error handling when Flash isn't present, yet required case (Flash plugin either not installed or disabled, but needed in some cases) - eg., Firefox and
audioFormats.mp3.required = true;
... Also, only one _detectFlash() call now made. -
Playable MP3 links and MP3 button demos use
soundManager.preferFlash = false
, so they should be able to run in 100% HTML5 mode. Some HTML5 bugs are anticipated, and these may help to reveal issues via a smaller audience. -
Initialization code reorganized, minor edits and clean-up, removal of some unused objects and ternary optimizations per jslint
-
Cleaned up IE <
object>
code, added highPriority flash param (affects flash 10.1+, if at all.) -
Improved flashblock handling / compatibility (CSS layout tweaks) with newer ClickToPlugin/ClickToFlash Safari (5.0.6 / 5.1+) extensions.
-
SM2 homepage demos try HTML5 + Flash if available, with "safe" reboot + fallback to HTML5-only mode (if supported - eg., Safari with flashBlock/ClickToFlash.)
-
Basic MP3 player demo: Fix event JS error when manually calling things like
basicMP3Player.handleClick({target:document.getElementById('foo')});
-
Flash SWFs, debug versions: Mention right-click -> security panel options when troubleshooting security errors
-
-
-
V2.97a.20110706 - improved HTML5/flash "mixed mode" via
preferFlash
, Safari + Snow Leopard HTML5 audio bug update, better ClickToFlash compatibility, minor demo tweaks (Download archived version)Special note: This was V2.97a.20110705, but the latest Flex SDK (4.5.1.21328) was downloaded and used for this build, and it compiled a Flash 9 SWF that wouldn't fully-start on some Windows machines running Firefox and IE 7, possibly others - thus, SM2 would fail to start up. The Flash 9 SWFs are now compiled with an older, working SDK version 4.1.0.16076, used in previous working releases. See discussion for more details.
Improved "mixed mode" HTML5/flash handling via new (experimental)
preferFlash
option, enabled by default. (If present, MP3/MP4 get flash for stability; HTML5 is used for other formats.) OS X 10.6.8 (finally?) fixes HTML5 audio in Safari. SoundManager 2 SWF adjusted to fall under ClickToFlash's "invisible" rules, may lower chance of blocking.-
Bug fixes
- ClickToFlash (Safari/Mac flashblock-style extension) compatibility improvement: Use
width/height: auto
on SWF instead of 100%. The latter is not recognized as being within ClickToFlash's <= 8x8px "invisible flash" rules, almost guaranteed to be blocked. (When considered "invisible", SWF is allowed to load normally if user has the invisibles option enabled.) - Flash blocking/handling improvements: Default
#sm2-container
size now always 8x8px to fall under "invisible" flash rules, better chance of load being allowed. If blocked and using flashblock.css,#sm2-container
reverts to 48x48px atontimeout()
for visibility (so user can see, and unblock the flash bit.) - OS X 10.6.8 "pre-Lion release" update finally appears to have fixed the broken Safari HTML5 audio issue. Thus, audio was broken from OS X 10.6.3 to 10.6.7 and SM2 will use Flash for these known cases. Related: Testcase and Webkit bug #32159.
- HTML5 audio: Playback now does not start after a
setPosition()
call (if the sound was not already playing), or if it was paused - matching the existing Flash API behaviour. - Fix
ontimeout()
queue incorrectly processing afteronload()
and successful startup. - Debug output: extraneous "%s" fixes for
onready()
/ontimeout()
- ClickToFlash (Safari/Mac flashblock-style extension) compatibility improvement: Use
-
API Updates
-
Added experimental
soundManager.preferFlash
(default:true
) for a more consistent MP3/MP4 playback option in certain HTML5 cases. If usingsoundManager.useHTML5Audio
+preferFlash
and flash is available, flash will be used for MP3/MP4.HTML5 is still new and relatively unstable, and bugs are yet to be found and fixed across a growing number of browsers/platforms etc. (consider that it was broken on Safari between OS X 10.6.3 and 10.6.7.) If flash is not installed or
preferFlash = false
, 100% HTML5 mode can still apply. In any event, HTML5 will still be used (if enabled) for all other formats. - Moved internal html5Only to (experimental)
soundManager.html5Only
, for detecting "HTML5-only mode" - eg., iOS, Safari withoutpreferFlash
or other environments where SM2 is operating without the flash portion of SM2.
-
-
Miscellaneous
- Improved "can play" detection (
canPlayURL()
+canPlayMIME()
) for HTML5 + flash cases. Increased "getting impatient, waiting for flash" message to 1 second. - 360°, inline, MP3 button players: Event add/remove: use addEventListener based on typeof attachEvent === null (old IE behaviour)
- MP3 player button demo: Fix IE 6/7 display issue on button (d'oh!)
- Muxtape-style demo: Added
pagePlayer.playPrevious()
, to matchpagePlayer.playNext()
(call when a sound is currently playing.) - Fixed 360° player basic visualization demo (missing class in HTML), clarified canvas support (no eq/spectrum) re: IE <9.
- 360° UI: Old "empty element doesn't catch mouse events" bug apparently still applies to IE 9. Fix with invisible background image.
- Minor homepage stylistic updates, source code order change for API docs (CTRL-F search now hits left column first)
- Small debug output clean-up in SM2, object/embed, init etc.
- Improved "can play" detection (
-
-
V2.97a.20110424 - Minor HTML5 tweaks, option inheritance fixes, improved build.xml file (Download archived version)
HTML5 bulletproofing,
Audio(null)
argument fix for iOS + Opera,load()
vs.createSound()
andsetVolume()
/setPan()
options/inheritance correction-
Bug fixes
- HTML5:
new Audio(null)
fix for differences between iOS (which would try to loadnull
) and Opera 9.64, which would throw a WRONG_ARGUMENTS_ERR ifnull
was not passed. - HTML5: Restrict internal volume value range to 0..1, avoid DOM exceptions.
- HTML5:
load{url:x})
improvements for desktop, better old vs. new URL comparison. - HTML5, iOS 4.2/4.3+, SM2 Muxtape/inline/link demos:
onfinish()
->unload()
->playNext()
was breaking on newer iOS versions, "play through" affected. Removingunload()
for iOS fixed issue. - Flash
object
/embed
pluginspage
/codebase
attribute now uses http:// when being used from file:// (offline), and http/https-agnostic //macromedia.com syntax to avoid SSL mixed-content warnings. - Fix
setVolume()
/setPan()
to properly updateSMSound.options
(when not "instance-only"), so settings are retained for futureplay()
calls. Bug was that original volume/pan were incorrectly restored after the first instance completed.
- HTML5:
-
Miscellaneous
-
New and improved (nearly platform-independent) build.xml file, thanks to github user "dolmen". A
.build.properties
file is now needed, defining "mxmlc", "mtasc", and "closure-compiler.jar" paths. e.g.:<!-- .build.properties file in SM2 root --> mxmlc=/Applications/flexsdk/bin/mxmlc mtasc=/Applications/mtasc/mtasc closure-compiler.jar=${user.home}/compiler.jar
Running
ant
from the SM2 root will build the no-debug and minified versions of the script, as well as the SWF files.
-
-
-
V2.97a.20110306 - HTML5 audio updates, Flash/HTML5 mode detection, IE flash init tweaks, reuse and instance options fixes (Download archived version)
Bug fixes and improvements for HTML5 audio (object reuse on iOS), improved URL comparison.
onfinish()
->this.play()
instance option fix. IE flash wmode initialization tweak. Flash/NetStream (MP4) unpause()/resume() hack now applies to everyone. If no flash found (eg., new Mac desktops), HTML5 audio will now be tried. MakehasPriority
actually work (d'oh!)-
Bug fixes
- HTML5:
_resetProperties()
when setting Audio().src, fix sound1.play() -> sound2.play() -> sound1.play() case on iOS 4.1 not correctly re-assigning original sound URL (related to global audio object.) - HTML5 audio: If no flash, try forcing
useHTML5Audio = true
(eg. desktop safari on new Macs which don't come with Flash.) Related: flash detection code tweak. - Improved _iO vs. old _iO URL comparison, rather than .src which gets translated from local paths to file:// etc.
- Correctly trash instanceOptions (and _iO) before calling onfinish(), but maintain local copy of onfinish() so it still works. Fix play({onfinish:this.play}) bug where _iO was being incorrectly remembered.
- Flash 9/movieStar:
setPosition()
unpause hack for everyone, not just Webkit (via 8tracks dudes, reported now in Firefox? Should not cause regressions.) - Special wmode tweak for reports of SM2 start-up failures, may be admin/non-admin account related, IE 8-only on Windows 7 (possibly Vista, too?) as of late January, 2011.
- Apply
hasPriority
to object/embed, not its style. D'oh. :P - HTML5: use new Audio(null) vs new Audio(), Opera 9.64 expects URL argument; throws WRONG_ARGUMENTS_ERR otherwise. Doesn't implement canPlayType() either, but both are fixed in future releases.
- HTML5:
-
Miscellaneous
- Don't actually apply new value in
setPosition()
if a sound has not yet loaded (and if so, hasn't errored out.) - isNaN() check for HTML5 loading (saw one under Safari, in testing).
- Added CLSID and codebase attributes for IE
<object>
(same as used in SWFObject), just to be safe. - Removed some HTML5 debug bits, unused _HTML5_states/codes block.
- Flashblock CSS: Correctly hide the SWF via left/top:-9999em when it hits
.swf_loaded {}
, ie., never blocked in the first place. Minor flashblock regression fixes after .swf_loaded / .swf_unblocked changes with last release. - Ant build script parameter change, now uses .build.properties file (related pull request)
- Don't actually apply new value in
-
-
V2.97a.20110123 - HTML5 audio improvements for desktop + mobile (iOS), 360° UI demo tweaks (Download archived version)
Tweaks to HTML5 features, "mixed-mode" HTML5 + flash cases, desktop and iOS tweaks. Improved sound re-use and "play-through" on iOS (believed previously working, may have regressed with iOS 4.2.1.) Code clean-up and shuffling of homepage, 360° demo (jslinted and improved functionality),
load({options})
fix, better handling of broken Safari/Snow Leopard audio case.-
Bug fixes
- Fix for
soundManager.load({options})
/SMSound.load({options})
-specific case (regularload()
sans-parameters was fine), whereload({onload:...})
would fail if a URL parameter was not specified.load({url:...,onload:...})
was OK. If unspecified, load now takes URL from SMSound.url. - Fixed unload/replay case on iOS: play sound #1, interrupt it by starting sound #2, then play sound #1 again - previously, #1 would fail on replay due to interrupted state since iOS only allows one sound at a time. Should now restart OK. (This applies to the new
soundManager.useGlobalHTML5Audio
stuff.) Playlist auto-advance looks to be OK as well.
- Fix for
-
API Updates
- New (experimental)
soundManager.useGlobalHTML5Audio
property - if true (default for iOS/mobile), reuses a singleAudio()
object for loading sound. Helps make playlist /onfinish()
->play()
work on iOS without user interaction. - New (experimental)
soundManager.requireFlash
property (default: false.) If true, prevents HTML5-only mode on devices with both HTML5 and Flash. May be useful when HTML5 is enabled (and can play MP3), but Flash is desired to play RTMP content etc. As of this version, will only use Flash for RTMP. - HTML5: Fix for
type:'audio/mp3'
returning false oncanPlay()
. Timer update-while-paused tweak. - HTML5: More event listeners, ignore events on destroyed sounds, improved event clean-up, "seek before load" fix
- New (experimental)
-
Miscellaneous
- Improved broken Safari/Snow Leopard HTML5 audio situation: HTML5 mode is no longer disabled - and if available, Flash is used to play MP3/MP4 content to work around known playback issues with native HTML5 audio.
- (Finally) report "true" position of MovieStar (MPEG4/AAC) content while scrubbing a playing/paused sound. Previously did not fire updates while scrubbing. Imperfect on resume due to buffer, but should be negligible and an improvement vs. old behaviour.
- 360° player refresh, works with multiple types (eg. small 48x48 square vs. large 256x256 square w/spectrum + EQ visualizations) on the same page now. Can play and seek simultaneously, as well. More configurable. Removed old empty.gif + imageRoot junk. Core JS now appeases the jslint gods.
- Code clean-up, removed undocumented/experimental
playOnSeek
and related methods from a prior fork. - Fresh homepage demo design/layout, should be nicer for new users.
-
-
V2.97a.20110101 - Simplified
onready()
behaviour (see potentialonready()
regression note), newontimeout()
handler, Webkit + MovieStar 30-second-pause fix (Download archived version)onready()
is now called only for SM2 init success (makes default case easier, no need for "supported" check) - newontimeout()
is called only for failure case, ie., flash blocked/missing. Special Webkit/MovieStar won't-resume-after-30-seconds-paused fix.soundManager.supported()
renamed tosoundManager.ok()
(old method aliased for the time being.)-
Bug fixes
- Special bad case, Webkit/Flash+MovieStar (AAC/MPEG4/RTMP-only, not MP3): sounds don't resume after being paused for 30+ seconds(?), but
setPosition()
with current position gets things going again after aresume()
attempt. Reported via 8tracks dudes.
- Special bad case, Webkit/Flash+MovieStar (AAC/MPEG4/RTMP-only, not MP3): sounds don't resume after being paused for 30+ seconds(?), but
-
API Updates
-
In previous releases, the soundManager.onready() queue would be processed for both OK and failure cases. The
onready()
queue is now processed only if successful initialisation occurs, making old "supported" checks within theonready()
handlers redundant.Potential regression note: Old error case handling within
onready()
will never execute as a result of this change. Update your code to use the new explicit soundManager.ontimeout() handler instead.Old
onready()
methodsoundManager.onready(function(){ if (soundManager.supported()) { // OK, play sound etc. } else { // SM2 could not start; message user? } });
New
onready()
/ontimeout()
methodsoundManager.onready(function(){ // OK, play sound etc. }); soundManager.ontimeout(function(){ // SM2 could not start; message user? });
- New soundManager.ontimeout(myFunction) method, for asynchronous queueing of init failure handlers. Fired only when SoundManager 2 is unable to initialise (usually due to blocked/missing flash, or flash security error.) Queue behaviour is the same style as
onready()
.
-
-
Miscellaneous
- Code cleanup: Took the unsupported "jsAMP" demo (2007 prototype) out back and shot it.
- 360° UI demo: New "allowMultiple" config option, let 2+ sounds play at once etc. (Default: false, one at a time.)
- 360° UI, canvas visualization demo: Minor layout, UI, code tweaks
- API/docs/demos reference and use updated onready()/ontimeout() methods.
-
-
V2.97a.20101221 - HTML5 loading/progress and RTMP tweaks,
onready()
double-firing fix,hasPriority
for mobile flash, Muxtape-style player now AJAX-friendly (Download archived version)Improved HTML5
whileloading()
/whileplaying()
,unload
and event handling.hasPriority
for off-screen SWF loading on mobile, replaces old mobileFlash positioning tricks. Effectively re-wrote page player (Muxtape-style) demo to use event delegation + read live DOM, so should not break in AJAX cases. RTMPonplay()
/play()
/buffering
fixes,setPosition()
regression fix.-
Bug fixes
- Double
onready()
-firing bug (HTML5 and non-flashblock case) fixed. - HTML5: Don't request null/about:blank URL with
unload()
, may hang/JS error in Chrome and IE 9 preview 7. - RTMP: Ensure
onplay()
is called for auto-loading streams when resumed. Don't callplay()
until connected.play()
sets flash pauseOnBufferFull = false (fix for reported "RTMP not playing audio" issue.) - overHTTP was likely returning incorrect values previously - now fixed.
unload()
tweak: Ensureposition
is reset to 0 ifunload()
fails- Flash audio: Log metaDataHandler info if debug enabled, possible
duration
metaData fix - No HTML5 audio for any Safari on OS X Snow Leopard 10.6.[3|4|5] due to underlying bugs causing intermittent audio playback failure; ongoing Apple issue, on their radar. Amusingly, Safari on Windows appears to be fine.
- Double
-
API Updates
- Revised HTML5
Audio()
events, improvedwhileloading()
/whileplaying()
/onload()
for Webkit and Firefox 4. Progress/onload are still a bit quirky as HTML5 audio is more about "non-linear" loading including range and partial requests, where supported. See related discussion. - New
soundManager.ok()
method, nicer alias forsoundManager.supported()
. - Took
soundmanager.loadFromXML()
(SM1 legacy method) out back and shot it. Last tweak was in 2008, nobody uses it.
- Revised HTML5
-
Miscellaneous
- Flash
<object>
/<embed>
: hasPriority attribute, enables off-screen SWF loading with Flash 10.1+. Removed mobileFlash positioning/repositioning tricks in lieu of this. - Effectively re-wrote page-player (Muxtape-style) demo, now traverses live DOM for next item(s). Should be more AJAX-friendly. Event delegation now handles any links added at any time. Externalised experimental features, too.
- HTML5: If URL lacks
type
attribute and extension such as.mp3
(worst-case scenario, you shouldn't be doing this anyway) just try dumbly loading it - imitating Flash behaviour. - Improved
dataerror
(wave/spectrum) exception handling, should result in lowered CPU use if playback continues with access exceptions (eg. YouTube video going in another tab.) - Start-up debug output/messaging clean-up (no movieStar in flash 8, minimal output in HTML5-only mode, etc.)
- Add window unload handler if Flash being used, so back button will cause a page refresh (vs. the browser showing "previous state") to reinstate Flash in good browsers. Previously, the "previous state" was be shown but Flash audio would be broken.
- ipod (ipod touch) gets HTML5 now, too.
- Microsoft have added
Audio()
to Internet Explorer 9 as of "Platform Preview 7" - previous pre-releases of IE 9 only implemented<audio>
, which SM2 does not use.
- Flash
-
-
V2.97a.20101010 - Code cleanup, HTML5 audio tweaks, RTMP features, removal of experimental video, optional usePolicyFile crossdomain.xml feature (Download archived version)
Shuffling of SoundManager 2 core, approximately 5% shaved off full debug-enabled file size after bug fixes, additional comments, new features and so on. Internal event handling code cleaned up. .SWF builds optimized, Flash 9 non-debug version now under 10 KB. Debug version now flash debugger-enabled. RTMP improvements for Red5 + Flash Media Server streaming cases - buffering, event and state handling. Experimental video feature is toast, createVideo() no longer implemented. iPhone + iPad touch events on page player + 360° player UI demos; tap and drag to seek, etc.
-
Bug fixes
- No HTML5 audio for *any* Safari on OS X Snow Leopard 10.6.[3|4] due to underlying bugs causing intermittent audio playback failure; ongoing Apple issue, on their radar. (See related GitHub commit)
- Don't
unload()
atonfinish()
for HTML5 audio (was originally done to be conservative, but results in additional HTTP requests despite caching expectations?) onload()
for HTML5 now using proper boolean values- Fix NetStream-specific
autoLoad
/autoPlay
/volume
createSound()
call, specific null flash sound object error scenario. (Related changes on GitHub.) - Fix for "
onbufferchange(1)
followed immediately byonbufferchange(0)
" case when audio was actually still buffering. - Removed
setPosition()
withinunload()
, cleaner exit when destroying a sound
-
API Updates
- Removed experimental video feature (originally added late 2008, never developed further.)
createVideo()
,allowFullScreen
and related video methods are now gone. Other dedicated HTML5/flash video player projects have since solved this problem. - New SMSound option: usePolicyFile - (boolean, default:
false
) - enables Flash to request /crossdomain.xml file for content on third-party domains, if access to ID3/metadata such as wave/peak/spectrum is needed. Will automagically enable ifonid3()
or peak/wave/spectrum features are being used. console.warn()
-style messaging (instead of throwing exceptions) ifcreateSound()
etc. are called before SM2 init has fired. Now calls similar warning and exits if called after a failed, unsuccessful startup (ie., timeout or not-supported case.)
- Removed experimental video feature (originally added late 2008, never developed further.)
-
Miscellaneous
- SoundManager 2 core code cleanup, ~5% shaved off soundmanager2.js code size after new features, bug fixes and comments etc. Internal event handling (DOM-related events for init, IE 6 vs. everybody else) improved.
- Flash builds optimized; Flash 9 SWF build now under 10 KB. Debug-enabled Flash 9 SWF now hooks into Flash debug player/IDE debugging tools (compiled with
-debug=true
) - Attempt to detect RTL documents, position Flash accordingly if so to avoid long horizontal scrollbar issue (related discussion)
- iPhone + iPad
touchmove()
and related events added to page player + 360° player UI demos; tap and drag to seek should now work.
-
-
V2.96a.20100822 - HTML5 audio support no longer alpha, Safari 5.0.1/SL HTML5 audio issues continue, iPad/iPhone "play through", Flash tweak for Android (Download archived version)
useHTML5Audio
feature now considered beta-worthy, though disabled by default to be safe (with the exception of iPhone + iPad.) iPhone/iPad will now play a sequence of sounds, user interaction only required to start first one. Flash on-screen positioning tweak for Android devices that run Flash. Safari 5.0.1 on Snow Leopard exhibits same buggy HTML5 audio issue, disabled by default; Apple have been notified. IE 9 "Platform Preview 4" has<audio>
but noAudio()
support (yet?) See bug #586311 (may require connect.microsoft.com / Windows Live ID, login first etc.)-
Bug fixes
- HTML5
Audio()
still broken in Safari 5.0.1 on Snow Leopard (10.6.3, 10.6.4), where sounds intermittently fail to load and play. Apple are aware of the regression. Related bug: #32519. Includesm2-ignorebadua
in URL on SM2 pages to ignore this check and verify broken behaviour, etc. - Tweaks for experimental RTMP feature re: handling of paused state, tracking of position and
onfinish()
firing early. - Bumped SWF z-index to 5000 for Safari 5, SoundCloud-reported bug-and-fix for Safari 5-specific bad redraw issues, and occasional crash case referencing WebCore::RenderLayer::paintLayer
- HTML5
-
API Updates
- iPhone/iOS 4 and iPad can now play a sequence of sounds (once the user starts sound initially), provided
onfinish()
is used to create/play the next sound. Example: Muxtape-style UI on homepage will play through list without further interaction once a user plays something in the list.
- iPhone/iOS 4 and iPad can now play a sequence of sounds (once the user starts sound initially), provided
-
Miscellaneous
- Special case for getting SM2 working more reliably on HTC Android + Flash 10.1, where flash does not load until on-screen (ie., in view.) If off-screen, Flash is repositioned at left/top 0px in order to load (including scroll/resize if needed), then events released and movie is repositioned off-screen. If movie is in the DOM already eg. as in
useFlashBlock
cases,flashLoadTimeout
is set to 0 to allow infinite wait (eg., SM2 will not timeout with an error, and will simply load when the flash is scrolled into view.) - Documentation: Clarified
createSound()
behaviour if an existing sound ID is given (returns sound object "as-is", ignores any options passed.) - Page-player demo updated to use
canPlayLink()
instead ofcanPlayURL
, more flexible link/type handling. - Homepage and documentation UI/layout and language tweaks, a few new "as seen on the internets" icons etc.
- Special case for getting SM2 working more reliably on HTC Android + Flash 10.1, where flash does not load until on-screen (ie., in view.) If off-screen, Flash is repositioned at left/top 0px in order to load (including scroll/resize if needed), then events released and movie is repositioned off-screen. If movie is in the DOM already eg. as in
-
-
V2.96a.20100624 - Safari 5/Snow Leopard 10.6.3/10.6.4 HTML5 Audio() issue, X-domain SWF build fixes (Download archived version)
Disabling HTML5 Audio for Safari 5 on Snow Leopard 10.6.3 + 10.6.4 (current release) only, as it is broken similar to Safari 4.x (also on Snow Leopard only.) Related bug: #32519. Also, version info in SWFs and fixed X-domain SWF build.
-
Bug fixes
- HTML5 Audio() still broken in Safari 5 on Snow Leopard (10.6.3, 10.6.4) - disabling for now, falling back to Flash as with Safari 4.x on Snow Leopard. Include
sm2-ignorebadua
in URL to ignore this check and verify broken behaviour, etc. - Fixed X-domain SWF builds to actually work cross-domain.
- HTML5 Audio() still broken in Safari 5 on Snow Leopard (10.6.3, 10.6.4) - disabling for now, falling back to Flash as with Safari 4.x on Snow Leopard. Include
-
Miscellaneous
- Added version info string to SWFs in Flash right-click / context menu, helpful when troubleshooting SWFs.
-
-
V2.96a.20100606 - RTMP (Flash Media Server) Support, HTML5 Updates (Download archived version)
HTML5 update, new RTMP feature: Experimental Flash Media Server support,
onposition()
event listener, SMSoundtype
option and code cleanup.-
API Updates
- New experimental RTMP support while maintaining existing NetStream-based behaviour for non-RTMP MPEG4 audio, etc. Uses new
serverURL
parameter for FMS (I used Red5 for dev/testing,) eg.soundManager.createSound({id:'rtmpTest',serverURL:'rtmp://localhost/oflaDemo',url:'oh-alberta.mp3'}).play();
- New SMSound option for createSound(), load(), play(): 'type', for specifying MIME type alongside URL to help with detecting playability. eg.
soundManager.createSound({id:'foo', url:'/player.php?stream=1', type:'audio/mp3'}).play();
and so on. Hat tip: sylvinus.org - New SMSound event: onposition(), for attaching listeners to specific times within a sound.
- New experimental RTMP support while maintaining existing NetStream-based behaviour for non-RTMP MPEG4 audio, etc. Uses new
-
Bug fixes
- Flash sound unload/destroy ActionScript "could not close stream" exception/warning (finally?) fixed.
- Sound looping updated for Flash 8, working (albeit with a quirk - requires preloading.)
-
Miscellaneous
- Removed Base64 HTML5 Audio() tests, redundant as numerous MIME (audio/mpeg, audio/mp3 etc.) checks seem to cover it.
- Updated MPC (drum machine) demo from 2006-era design, modernizing the CSS a bit.
nullURL = 'about:blank'
tweak for unloading (flash 8.) May have finally fixed that dumb stream closing error on unload/destroy.- set
soundManager.didFlashBlock
*before* firingonready()
/onerror()
listeners
-
-
V2.96a.20100520 - HTML5 Edition (Download archived version)
Experimental HTML5 support, lots of code shuffling and performance tweaks.
-
API Updates
- New soundManager.useHTML5Audio (disabled by default except for iPad, Palm Pre) - adds experimental HTML5 Audio support, with Flash fallback for MP3/MP4 formats as needed.
- Sound looping now works in Flash! eg.
mySound.play({loops:3});
- for an example + discussion of how to get near-seamless looping, see Seamless Looping MP3s in Flash (demo video) on Flickr.
-
Bug fixes
beginDelayedInit()
is always used in lazy loading case (eg. via dynamic script tag/XHR etc.,) as some cases where SM2 won't auto-start eg. document.readyState empty for Firefox 3.5.5 (seen on Win32) with an HTML5 DOCTYPE.- SWF is now 8x8 pixels by default, vs. 6x6 pixels (odd fix for HTML5 Doctype on Firefox 3.6/win32)
- Fixed dumb IE undefined ID bug
-
Miscellaneous
- soundmanager2.swf and soundmanager2_flash9.swf are now "non-debug" versions; with debugMode enabled, soundmanager2_debug.swf and soundmanager2_flash9_debug.swf are loaded instead.
- New build script for JS + SWFs, see file size table. JS compression now done via Google Closure compiler; new soundmanager-jsmin.js build, debug-enabled but compressed, in addition to build-script-optimized, no-debug, compressed JS (~9 KB with gzip vs. ~90 KB for raw, commented, debug-enabled version.)
- Null check fix for unavailable eq/waveform data
- Experimental video (flash 9-only) change: Use stage width/height instead of 0/0 when lacking metadata
- Page player whileloading() calls now being throttled
- Better page player click handling for IE 7
-
-
V2.95b.20100323 (Download archived version)
useFlashBlock
, better handling of time-out/errors (CSS-based SWF repositioning options for unblocking on time-out), "play MP3 button" demo,canPlayLink()
,canPlayMIME()
,eqData
+waveformData
for AAC/H.264 (movieStar) content, missing documentation and miscellaneous bug fixes.-
API Updates
- New
soundManager.useFlashBlock
(disabled by default) - enables CSS classes assigned to SWF container indicate start-up state (ok/error/blocked), allowing positioning/display of SWF for unblock cases and successful recovery from unblocking. Built into homepage + (most) demos. Updated flashblock demo as well. - playableClass attribute eg.
<a href="foo.php" class="inline-playable">
, allowing URLs without .mp3 to be picked up - New
soundManager.canPlayLink()
+canPlayMIME()
, ability to check <a href="foo.php" type="audio/mp3"> for example
- New
-
Bug fixes
soundManager.play()
type check fix, instanceof Object vs. typeof x === 'Object' (typo)computeSpectrum()
can access waveform and eq (spectrum) data for movieStar (AAC/MP4, netstream-based) objects, too.
-
Miscellaneous
- Moved old demo code using
$()
to_id()
,_$
insoundManager2
to_id()
to avoid potential jQuery (and other $-based library) collisions - Make
new SoundManager('/path/to/swfs/');
actually work. - Flash time-out (flash blockers) vs. security failure detection/other error cases is smarter on the SM2 homepage now
- New "MP3 player button" demo
- Removed old IE onclick handler fix in several demos for non-MP3 links
eqeqeq = true
for jslint, why not.
- Moved old demo code using
-
-
V2.95b.20100101 (Download archived version)
New features: Flash movie debugging in SWF via
debugFlash
(default:false),SMSound.eqData = { left:[], right:[] }
, code tidying and debug output clean-up-
API Updates
- New
soundManager.debugFlash
property, enables debug messages from within flash (output to flash movie). Useful for troubleshooting start-up, security issues etc. Flash debug output example SMSound.eqData
now has left and right channels - e.g.eqData = { left: [], right: [] }
- was previously a single array:eqData = [];
Backwards-compatibility is maintained for now aseqData[i]
still works with the new structure.
Bug fixes
stream = true
is no longer automatically set whenSMSound.play()
is called andreadyState == 0
, as it was breaking thestream:false
case where playback should not start until the sound has fully-loaded.soundManager.reboot()
forces recreation of object/embed rather than old method of node remove/re-append (in case other options changed, eg. debugFlash was false, but assigned to true after an error during start-up.)
Miscellaneous
- Review of all SM2 debug output, more concise and informative messaging - especially around start-up troubleshooting/error debugging, security sandbox errors, SWF 404 case etc.
- Code formatting clean-up (via jsbeautifier.org) soundmanager2.js tested and passes JSLint, Edition 2009-11-22 + options: /*jslint undef: true, bitwise: true, newcap: true, immed: true */
- Better organization/use of strings for debug output
- New canvas-based favicon VU meter demo for home page, 360 player and muxtape-style player demos where supported (Firefox and Opera, currently.) Firefox 3.6 is disappearing support for XBM images, which were previously used.
- New
-
-
V2.95a.20090717 (Download archived version)
New features: onready(), fast polling, flash blocking demos etc.
-
API Updates
- New
soundManager.onready(myFunction[,scope])
method, for asynchronous queueing ofonload()
-style handlers. Fires when SM2 has finished initialising. Accepts an optional scope parameter to apply to handler; if none given, window object is used. A "status" object is passed to your handler (can be ignored) which includes asuccess
boolean indicating whether SM2 loaded OK or not. Handlers added via onready() after successful initialisation will fire immediately. - New
soundManager.oninitmovie()
event callback, single assignment similar toonload()
. Fires when the flash movie has first been written to (or read from) the DOM. Used internally for a flashblock-handler-related example, custom timeout condition. - New
soundManager.useFastPolling
property (false by default), enables 1 msec Flash 9+ timer for highest-possiblewhileplaying()
and related JS callback frequency (default is 20 msec.) Use withsoundManager.useHighPerformance = true
for best performance, frame rates while updating the UI via whileplaying() etc. - New sound option (soundManager.defaultOptions):
multiShotEvents
(default:false) - enable support for multiShot-style events (currentlyonfinish()
only). Eg. WhenmySound.play()
is called three times,onfinish()
will subsequently fire three times.
- New
-
Bug fixes
createSound
now writes a warning to debug output if the sound ID is a number, or is a string starting with a numeric character. Because SMSound objects are stored insoundManager.sounds[]
, while not syntactically invalid, numeric IDs will be treated as array indices and are likely to break things.
-
Miscellaneous
- New flashblock / "click to flash" demo, example of handling blocked conditions and graceful recovery when flash is initially blocked until user chooses to allow it.
- Cross-domain-scripting enabled SWF (using
allowDomain("*")
) included in swf/ directory (in its own .zip file.) Use when you must have domain A loading SM2 .SWF from domain B, or for testing etc and can't compile your own custom x-domain SWF from source. - Documentation, layout and menu tweaks
-
-
V2.95a.20090501 (Download archived version)
Lots of updates.
-
API Updates
- Added
soundManager.allowFullVideo
for full-screen video playback, triggered by double-clicking. Also, relatedsoundManager.onfullscreenchange
event handler. - Updated
waveformData
to include stereo channels. Now an object literal instead of a single array. New format:SMSound.waveformData = { left: [], right: [] }
- New
SMSound.ondataerror()
(flash 9+) handler for cases where waveform/eq data is inaccessible due to other flash movies in the current browser which have loaded sound. (Flash must have security permissions to "read" all data currently being output, long story short. Having a YouTube tab open can cause this, for example.) - New
isBuffering
property for MovieStar (MP4 audio/video) content, relatedonbufferchange()
event handler (sound object) - New
bufferTime
property for MovieStream content. Defines seconds of data to buffer before playback begins (null = flash default of 0.1 seconds; if AAC playback is gappy, try up to 3 seconds.)
- Added
-
Bug fixes
- Off-screen flash with
wmode
set to non-default value (transparent/opaque) will break SM2 for non-IE on Windows, time-out error style. SM2 will now revert wmode to default for this case (losing transparency/layering of movie) - or setsoundManager.flashLoadTimeout
to 0 and SM2 will retain wmode, but must now wait potentially infinitely for flash to load (until user scrolls it into view.)soundManager.specialWmodeCase
reflects if this fix has been applied after init time. - Calling
soundObject.load()
after directly assigning a value tosoundObject.url
should now work as expected.
- Off-screen flash with
-
Miscellaneous
- Shiny new "360° UI" canvas + visualization demos (Warning: Beta-ish code.)
- Experimental SM2 exception/error handling + stack trace reporting added, an attempt to make custom errors thrown from SM2 more meaningful (ideally showing the user's call to SM2 where things went wrong in the stack.)
- Calling
soundObject.load()
after directly assigning a value tosoundObject.url
should now work as expected. soundManager.useHighPerformance
update: Now false/disabled by default. Strange bug with JS/flash communication breaking with wmode=opaque on flash, specific (?) to Firefox on windows. SM2 does not normally set wmode. WhenuseHighPerformance = true
, wmode=transparent will be used on the flash movie by default.- Tweaks related to position, whileplaying(), playState, buffering and state resetting when sound has finished playing (fixes for a few edge cases if replaying or reusing the same sound or video.)
- Better code/feature separation and clean-up on inline player, Muxtape-style demos
-
-
V2.94a.20090206 (Download archived version)
-
API Updates
- New
isBuffering
property, relatedonbufferchange()
event handler (sound object) - New
soundManager.reboot()
method (experimental): Shut down and re-initialise SoundManager, remove and recreate flash movie (possibly handy for cases where you want to restart after flashblock-type whitelisting, etc.) - New
soundManager.flashLoadTimeout
property, milliseconds SM2 will wait for flash movie callback before failing and calling soundManager.onerror() during start-up/init. If set to 0, SM2 will wait indefinitely for flash (good for reboot/flashblock-type scenarios.)
- New
-
Bug fixes
- Reverted Firebug 1.3 console.log().apply() hack, was breaking console.log() under IE 8 RC1 (as used with debug mode.) Firebug 1.3 seems to have a bug, occasional "console undefined" error.
- Fixed a dumb flash 9/AS3 bug with setVolume() passing an extra parameter to flash.
soundManager.useHighPerformance
update: Now false/disabled by default. Strange bug with JS/flash communication breaking with wmode=opaque on flash, specific (?) to Firefox on windows. SM2 does not normally set wmode. WhenuseHighPerformance = true
, wmode=transparent will be used on the flash movie by default.
-
Miscellaneous
- Tweaked project page / documentation UI, nicer code/debug formatting
- Misc. API documentation fixes, improvements
-
-
V2.93a.20090117 (Download archived version)
-
General Updates
- New SoundManager 2 start-up debugger / troubleshooting tool, built into project home (see troubleshooting, and a standalone version - see "troubleshoot/" directory of download package)
- New soundManager.getMemoryUse() method (flash 9+.) Returns RAM use for flash plugin (appears to be browser-wide, possibly system-wide by design.) Video demo includes an example RAM use monitor.
- highPerformance disabled by default for Firefox on Windows due to reports of bugs preventing SM2 start-up in some cases. To override the disabling safety check, set
soundManager.useHighPerformance = 'always';
- Updated API demo testcases (API Demo page)
-
Bug fixes
- Fixed Flash 8 bug with
autoLoad
/autoPlay
andplayState
not being correctly set. - Fixed a bug with
onfinish()
not firing whenautoPlay
is used. - Fixed a bug with pan and volume defaults not being correctly inherited and handled
- console[method]() now uses apply(), preventing possible Firebug 1.3-related scope issue where this != console
- IE now appends (vs. destructive .innerHTML write) SWF movie to target element, appends DIV with className "sm2-object-box"
- Fixed Flash 8 bug with
-
-
V2.92a.20081224 (Download archived version)
-
General Updates
- Note: Flash (SWF) assets moved to swf/ subdirectory, starting with this version.
- Updated design on API demo page, new looping example
-
Bug fixes
- Improved regular-expression-based URL detection for
canPlayURL()
, flash 8/9 and MovieStar (video) formats - Improved
soundManager.url
-relatednormalizeURL()
handling. If GET parameters are in the URL including the SWF, it will be left alone. - Fixed out-of-bounds issue with
setPosition()
. - Fixed a
setPosition(0)
and beforeonfinish()
-related issue, so it is possible to nicely loop sounds from withinonfinish()
- see looping a sound (API demo) - Fixed an error condition where destroying a loading sound would not terminate the HTTP request, relating to error cases involving
netStream.close()
.
- Improved regular-expression-based URL detection for
-
-
V2.91a.20081205 (Download archived version)
-
General Updates
- Completely-redesigned project page, multiple pages/sections, more-legible grid-based documentation layout
- Code verified with jslint. 0 errors reported with default settings, Edition 2008-11-26
-
Bug fixes
- True XHTML DOM compatibility. Rewrote
createMovie()
to use standard DOMcreateElement()
methods, vs. previous writing to .innerHTML method which caused exceptions with XHTML documents. - Special-cased
useHighPerformance
for Firefox 2 only, disabling it as it seems to be problematic. Further research pending. - Removed try .. catch error handling within
soundManager.onload()
, catching exceptions when calling user-defined onload handler. Errors should now fall through as normally expected. - Fixed several
setPosition()
-related bugs (NaN/undefined error, seeking to invalid position, position inconsistencies with pause/resume)
- True XHTML DOM compatibility. Rewrote
-
-
V2.90a.20081028 (Old documentation theme) - Download archived version
-
API: Bug fixes
- Fixed numerous Flash AS3 exceptions for Flash 10 plugin users of SM2 with Flash 9 .SWF
- Fixed a
setPosition()
bug where position > duration would stop sounds playing in other tabs - Fixed
createSound(); play(); destruct();
sequence to correctly stop sound under Flash 9 - Changed Flash 9
onload()
to properly pass boolean "false" on load failure, same as Flash 8 - Fixed
autoLoad
=true bug with Flash 9 movieStar (MPEG4) content, now pauses after creating
-
API: New shiny!
soundManager.useHighPerformance
: Minimize JS/Flash lag, ~3xwhileplaying()
frequency! (Most noticeable on Mac OS X, and Safari on Windows? Investigating IE cases.)soundManager.pauseAll()
/soundManager.resumeAll()
: Global pause/resumesoundManager.muteAll()
/soundManager.unmuteAll()
: Global mute/unmute
-
MovieStar MPEG4 video support! (experimental)
soundManager.createVideo()
/soundManager.destroyVideo()
for MovieStar MPEG4 formats!- Uses same SMSound instance object and API methods/options as regular sounds, with a few extra parameters
soundManager.useVideo
will show video when applicable (false/disabled by default)SMSound.onmetadata
: Meta data handler for MPEG4 video files - provides dimensions (w/h)
-
Miscellaneous
- Removed experimental flashBlock support. Considering eliminating SM2 timeout-based onerror() behaviour in favour of asynchronous loading (eg. user may initially block, notice flash movie and take action to unblock many seconds after loading - thus, flash movie eventually loads and can eventually trigger successful SM2 init.)
- Modified
pause()
andresume()
to only affect playing sounds (eg.playState != 0
).
-
-
V2.80a.20081005
-
API: Bug fixes
- Changed Flash 8
onload()
boolean "loaded" to be based on sound duration being >0, better test of load success. - Modified Flash 9
onload()
to include boolean result for success/fail, parity with Flash 8
- Changed Flash 8
-
API: New shiny!
-
Added experimental Flash 9.0r115+ (flash codename "MovieStar", Flash 9 Update 3) MPEG4 / HE-AAC support (audio only.) A subset of MPEG4 should be supported including FLV, MP4, M4A, MOV, MP4V, 3GP and 3G2 files. Feature is disabled by default.
- New soundManager
useMovieStar
property, controls feature availability (currently disabled by default.) - New SMSound option,
isMovieStar
, configures feature behaviour on a per-sound basis. Default (null) is to auto-detect .mp4, .mov etc. in URL and enable if found, but can also be forced on or off (true / false). - Video-based formats use the Flash 9
NetStream
andNetConnection
objects, whose API differs slightly from the Sound object. Seeking is limited to video key frames and is not as smooth as an MP3. - Audio playback has been seen to pause during certain events (window scrolling, etc.) while playing MovieStar formats. It doesn't appear to be from CPU overload. More investigation is needed.
- Basic load, progress, onload, whileplaying API support is provided (page player demo includes MP4 and FLV formats). Not all methods (eg. setVolume) have been tested.
- .AVI is not included by default, but may work if the format is actually MPEG4-based.
- Format limitation note: EQ, peak and spectrumData are not available with MovieStar content. This may be a Flash 9/AS3 limitation.
- New soundManager
-
-
-
Miscellaneous
- Added CSS checks to page player: "exclude" and "playable" to override default URL matching behaviour.
-
-
-
V2.78a.20080920
-
API: Bug fixes
- Added
SoundLoaderContext
parameter toload()
, Flash should now check policy-related (crossdomain.xml) files when loading resources from remote domains. Should fix previous security exception warnings when trying to access ID3 and/or waveform/EQ data. See related SoundLoaderContext documentation (ActionScript 3) - Fixed a bug with
load()
, was improperly expecting an options object - now works properly.
- Added
-
API: New shiny!
- Added
soundManager.altURL
property (anduseAltURL
conditional) for convenient offline and other URL switching cases (dev vs. production environments, etc.)
- Added
-
Miscellaneous
- Renamed internal soundManager and SMSound
self
closure references to_s
and_t
, respectively, to avoid potential conflicts with others' code - Moved self-destruct to use
window.onunload
instead ofonbeforeunload
, given the latter event can be caught and canceled if desired by the user - Inline player demo: Added
autoPlay
option - "Basic" demo directory (demo/basic/) moved to demo/api/, added
load()
-related testcase
- Renamed internal soundManager and SMSound
-
-
V2.78a.20080920
-
API: Bug fixes
- Added
SoundLoaderContext
parameter toload()
, Flash should now check policy-related (crossdomain.xml) files when loading resources from remote domains. Should fix previous security exception warnings when trying to access ID3 and/or waveform/EQ data. See related SoundLoaderContext documentation (ActionScript 3) - Fixed a bug with
load()
, was improperly expecting an options object - now works properly.
- Added
-
API: New shiny!
- Added
soundManager.altURL
property (anduseAltURL
conditional) for convenient offline and other URL switching cases (dev vs. production environments, etc.)
- Added
-
Miscellaneous
- Renamed internal soundManager and SMSound
self
closure references to_s
and_t
, respectively, to avoid potential conflicts with others' code - Moved self-destruct to use
window.onunload
instead ofonbeforeunload
, given the latter event can be caught and canceled if desired by the user - Inline player demo: Added
autoPlay
option - "Basic" demo directory (demo/basic/) moved to demo/api/, added
load()
-related testcase
- Renamed internal soundManager and SMSound
-
-
V2.77a.20080901
-
API: Bug fixes
- Fixed some
mute()
/unmute()
-related bugs, global muting should now work properly. Added some related demo page examples. - Removed comment on flash9Options merging code, was previously new and didn't actually work as it was commented out. Oops. :D
- Added experimental Flashblock exception handling (mozilla/firefox extension), "notification bar"-style UI which can message and assist users in unblocking SM2 .swf. Configured via
soundManager.flashBlockHelper
object, currently disabled by default. - Modified
soundManager.destroySound()
andsound.destruct()
, fixed a bug with these methods and flash's unloading of sounds which was breaking things. Hopefully fixes destroying sounds within whileplaying() and related event handlers, too. - Modified flash 9 "peak data" code to only set the data if the feature is actually enabled.
- Modified
soundManager._debug()
to list all sound object details, instead of just ID/URL.
- Fixed some
-
-
V2.76a.20080808
-
API: Bug fixes
- Fixed some memory "leaks" / garbage collection issues. RAM allocated to load sounds previously wasn't freed until page unload; now memory should be garbage collected some time after
sound.unload()
and/orsoundManager.destroySound()
/sound.destruct()
methods are called. In certain cases, Flash sound objects may be destroyed and re-created (transparent to the JS-side) to release memory. Note that garbage collection is not instantaneous, and is affected by CPU/system load and other variables. - Fixed an issue with
play()
not working on sounds created withautoPlay
. - Fixed SM2 to work under proper XHTML (served as
application/xhtml+xml
MIME type). Rewrote object/embed code again, now version-agnostic for IE (no CLSID parameters.) - Corrected reported
loadFromXML()
bug, multiple loadFromXML() calls should work.
- Fixed some memory "leaks" / garbage collection issues. RAM allocated to load sounds previously wasn't freed until page unload; now memory should be garbage collected some time after
-
API: New shiny!
- New
useWaveformData
anduseEQData
sound options, providing access to raw waveform and sound frequency/EQ spectrum data via sound.waveformData and sound.eqData. - Renamed
useSpectrumData
touseWaveformData
- if using waveform stuff currently, make sure you update your code! - Added
soundManager.features
object, which reflects the "support" state forpeakData
,waveformData
andeqData
. Handy for current and future version/support branching.
- New
-
API: Miscellaneous
- New
flash9Options
configuration object for logical separation. When Flash 9+ is used, these options are merged into thedefaultOptions
object. - Added
allowDomain()
stubs and documentation to .as source for allowing .swf on external domains to work (recompile of .swf required)
- New
-
"Page As Playlist" demo: Updates
- Added "favicon" VU meter display option (Flash 9+ only, experimental, currently Firefox/Opera only)
- More-efficient RAM use via
unload()
anddestruct()
sound methods, discarding inactive sounds and freeing RAM as appropriate. - Added
useEQData
, showing sound spectrum (frequency range) instead of raw waveform - Added
fillGraph
config option, allowing solid waveform graphs instead of only peak points - Fixed
playNext
bug where same track couldn't be played twice in a row. - Fixed duplicate URL bug; items with identical MP3 URLs will now work. (Previously, URL was the ID for items and thus had to be unique. Lookup is now done by object.)
- Modified MP3 URL search to include URL parameters, characters after ".mp3"
-
Other updates
- Demo code clean-up, externalised CSS, prettier demo layout and code color highlighting
-
-
V2.75a.20080707
- Flash 9 support! (soundmanager2_flash9.swf) -
multiShot
now actually works (layering/"chorus" effects on sounds), newspectrumData
andpeakData
API features. All existing API features should have parity. - Added
soundManager.flashVersion
property. Flash 8 is the supplied default. - Modified
soundManager.url
to require only a path, eg./path/to/soundmanager-swfs/
to allow loading of varying .SWF versions. - Basic (API) demo: Updated multiShot/Flash 9 behaviour documentation
- Page player demo: Added optional spectrum and VU (spectrumData/peakData) features
- MPC + animation demos: Modified to use Flash 9 (demo improved multiShot feature)
- Flash 9 behaviour differences:
multiShot
properly allowsplay()
to be called multiple times on a sound object, creating desired "chorus" effect. Will callonfinish()
multiple times, butwhileplaying()
etc. are called only for the first "play instance" to avoid complications.- New
soundSpectrum
andpeakData
sound features (spectrum graph / "VU" meter-style data) available - Sounds can be actually unloaded ("null" MP3 no longer needed to cancel loading of an MP3), but URL cannot be changed without destroying and recreating the related Flash sound object. The Flash 9 version does this to maintain API consistency.
- New + improved documentation/project page, updated 2-column layout with content filters, "Get Satisfaction" integration and self-update checks (and a light-switch-related easter egg.)
- Flash 9 support! (soundmanager2_flash9.swf) -
-
V2.5b.20080525
- Added
waitForWindowLoad
for delayed init - Added
onpause()
andonresume()
event handlers - Added
mute()
andunmute()
- Updated demos, revised documentation
- Added
-
V2.5b.20080505
- To improve startup time,
soundManager.go()
(createMovie()
alias) now fires atonDOMContentLoaded()
by default if supported. (Otherwise, falls back towindow.onload()
.) - Improved initialisation routine -
soundManager.onerror()
is called when the Flash init "times out." Specifically,onerror()
is called when Flash fails to make an ExternalInterface (Flash-> JS) call to SM2 within 1 second ofwindow.onload()
firing. - Added logic to handle special Safari delayed init case (Flash not loading when in a new, unfocused tab until focused) as a exception to the above.
- Added better exception handling + debug messaging for initialisation failure cases (Flash security restrictions due to loading from local file system, no flash support, no ExternalInterface support etc.)
- Updated .swf appendChild() target to use best-to-worst options:
(document.body || document.documentElement || document.getElementsByTagName('div')[0])
- Safari console[log|warn|error]-style messages are now properly formatted.
- Added tons of semicolons to closing braces, eg.
};
- "No-debug", minified version of SM2 included: soundmanager2-nodebug-jsmin.js (17.4 KB, down from full size of 35 KB.) With Gzip compression, file size is ~6 KB. (Commented, debug-enabled version compresses to 10 KB with Gzip.)
- To improve startup time,
-
V2.5b.20080501
Warning: A little experimental too, read details below.
Changelog:
- Rewrote SoundManager initialisation: "Way faster." Communication now initiated from Flash, verification callback then performed by JS; far faster, hopefully more-reliable (TBD.) Init time drastically reduced from seconds to milliseconds in most cases, dependent primarily on Flash movie load rather than
window.onload()
. - Above change also fixes Safari "loading SM2 in background tab" issue, where Safari does not init Flash until background tab comes into focus (when a link is opened in a new, non-focused tab.)
- Current drawback: Difficult to determine, save for falling back to
window.onload()
plus focus methods due to above issue, whether SM2 is actually available or not (ie.,soundManager.onerror()
will not likely be called as in past.) However, thesupported()
method will correctly reflect if SM2 has successfully initialised, for example. - Added sandbox/security model code; SM2 can now tell if it is restricted to either local or internet access only, for example. Helpful in potential debugging errors, plus viewing demos off the local filesystem should no longer throw init errors requiring whitelisting (seemingly due to the new initialisation method.) Win!
- Opera 9.27 has been noted to have some bugs relating to ExternalInterface, seems to be unable to make calls from ActionScript-level methods using
setTimeout()
orsetInterval()
. As a reulst, SoundManager 2 events likeonfinish()
,whileplaying()
andonfinish()
can be sporadically called or missed altogether. No known workaround at this time, but Opera 9.5 (beta 2) does not have this issue. Popular MP3 "mix tape" site muxtape.com uses similar techniques for JS-Flash communication and appears to suffer from the same problem. - Warning: Random crash issue noticed when using IE 6 + 7 and this demo page, calling
createSound()
whensoundManager.defaultOptions.autoLoad = true;
from withinsoundManager.onload()
, for creating + preloading the tab/theme switch sounds. Removing autoLoad=true (leaving the default of false) fixed the crash. Exact reason not determined, perhaps recursive calls or pre-onload issue (?), seems to be isolated to the home page. MPC demo uses autoLoad also, but did not crash. Mentioning just in case. - Updated Muxtape-style demo: More themes, load/security debugging info etc.
- Rewrote SoundManager initialisation: "Way faster." Communication now initiated from Flash, verification callback then performed by JS; far faster, hopefully more-reliable (TBD.) Init time drastically reduced from seconds to milliseconds in most cases, dependent primarily on Flash movie load rather than
-
V2.2.20080420
Changelog:
- More demos! "Page as a playlist" (muxtape.com-style) example, "Make MP3 links playable inline" demo
- Corrected
onStop()
handler inheritance/overriding behaviour (was incorrectly checking defaultOptions) - Added debug output of options object for
createSound()
calls. Full options (result of merging global default + sound-instance-specific options) displayed, helpful in troubleshooting. Event handler function code is intelligently (hopefully) displayed, truncated at 64 characters of first block or end of line, whichever comes first. - Removed most HTML markup from non-HTML (eg. console)
_writeDebug()
calls soundManager.destruct()
writes to console, to be consistent
-
V2.1.20080331
Changelog:
- Modified
createSound()
to return a sound object if successful (more logical) - Updated
setPosition()
method and addedposition
option parameter, documentation + demo (bugfix) - Corrected
createSound()
andplay()
sound option inheritance/overriding behaviour (eg.position
) to work as expected (most to least important: Method call options -> sound object instance options -> SM2 global options) - Updated
deleteSound()
so Array.splice() is used instead of delete, the latter doesn't cause Array.length to update (bugfix) - Modified debug=alert to only work when debug mode is enabled (potential annoyance aversion)
- Modified
togglePause()
to useposition
option parameter rather than undocumentedoffset
(oops :D) - Added
supported()
convenience method (indicates pass/fail after SM2 has initialised.) - Added disabling debug calls from Flash (performance)
- Added URL hash updating/bookmarking and page title updating to jsAMP demo app
- Updated project page layout
- Modified
-
V2.0b.20070415
Changelog:
- Added
destroySound()
method - Made debug output slightly less-verbose (commented out)
- Safety tweak for position-related Flash bug when loading new sounds
- Highly-expanded documentation (
SMSound
events + properties, examples, caveats, FAQs etc.) - Added time-sensitive light/dark theme for documentation
- Added
-
V2.0b.20070201
Second beta?
Changelog:
- Fixed stopAll() bug (previously broken)
- Added
nullURL
parameter - Updated documentation
V2.0b.20070123
V2.0b.20070118
V2.0b.20070115
-
V2.0b.20070107
First beta
-
V2.0a.20060904
Prerelease alpha
HTML5 Audio: Support updates, technical notes, quirks, bugs and annoyances
Note: This section is archived content and has been rolled into Revision History.
As of the V2.97.20111220 release of SM2:
-
Multiple URLs (and/or multiple MIME types) can be specified when creating a sound, thus allowing for better native HTML5 support between OGG, MP3 and others. See SMSound.url for details.
-
Support for "audio sprites" has been added in the form of
from
andto
sound options. See the audio sprite demo for a live example. -
Added
soundManager.html5PollingInterval
, for increasedwhileplaying()
callback frequency (higher framerates.) Excludes mobile (eg., iOS) by default. -
Fixed
Audio()
objectsrc
property re-assignment bug seen increateSound()
->play()
. -
mySound.load({onload:function(){}})
callback fixed so it works. -
onload()
now called immediately whenload({onload:function(){}})
is used on a sound with the same URL which has already loaded. -
onstop()
now mimicsonfinish()
in terms of sequence. HTML5 sets position to 0, but retains pre-stop()
position property value (like Flash does.) -
Amazon Kindle Fire UA looks like Safari on OS X 10.6.3, but does not have broken HTML5 audio (i.e., intermittent playback failure) like the "isBadSafari" case.
-
Side note: iOS ignores volume, always returns value of "1" (at least, on iOS 4 and present iOS 5 releases.) See related notes.
As of the V2.97.20111030 release of SM2:
-
Fixes for HTML5
unload()
on Webkit (connection was not closing) due to src being set to''
(OK only in Firefox, presently?) vs. an "empty" URL. -
HTML5
suspend
events are now listened for and fired via SMSound optiononsuspend()
. This event may be the best way to detect when mobile Safari (eg. iOS) is blocking autoplay-style behaviour, and user interaction is required to start or resume playback. (iOS does not allow auto-play of audio; user interaction is required for audio playback to start.) -
Added try...catch for dumb IE 9
Audio()
"not implemented" error in Windows server case without "desktop experience" installed, means no HTML5 audio/video support. Hat tip: Modernizr issue 224.
As of the V2.97.20110801 release of SM2:
A regression was introduced in V2.97.20110706 where SM2 would fail to start in HTML5-only mode on supported desktop browsers when flash was disabled or not installed, eg., Safari on new Macs or IE 9 without flash. (iOS was not affected.) This has been fixed with the 2.97.20110801 release.
-
soundManager.useHTML5Audio
is nowtrue
by default; however,soundManager.preferFlash
is alsotrue
and HTML5 browsers will still attempt to use flash for playing MP3/MP4 by default, if those formats are marked as "required".If you wish to have 100% HTML5 mode in more cases, set
soundManager.preferFlash = false
. Presently, the MP3 links and MP3 button SM2 demos are more HTML5-friendly and will serve as a test for exposing bugs that may be in the wild. -
soundManager.html5Test
has been relaxed to use(probably|maybe)
for Audio'scanPlayType()
test (previously, was only "probably") - so formats will be more likely to work on HTML5-only devices that conservatively report "maybe" for MIME types likeaudio/mpeg; codecs="mp3"
at this point. -
Certain mobile and tablet-like devices are special-cased as preferring HTML5, and will ignore checking for flash altogether; this presently includes the iPad, iPhone and iPod, Palm Pre and Motorola Xoom.
-
The HTML5 audio "loadeddata" event triggers an SMSound
onload()
event, which now fireswhileplaying()
and tries to pass identicalbytesLoaded, bytesTotal
parameters so that UIs will correctly show the sound as fully-"loaded" - even if in truth, not all bytes have actually been fetched (depending on the browser and server, etc.) because of the ability to do arbitrary seeking. -
The experimental
soundManager.useGlobalHTML5Audio
andsoundManager.requireFlash
properties were removed. Internally the global HTML5 audio logic still applies to iOS, but it does not seem to be necessary for other devices at this time.
As of the V2.97.20110706 release of SM2:
HTML5 audio appears to have been fixed in Safari with Snow Leopard 10.6.8, the "pre-Lion release", from 06/2011. SM2 will now only blacklist Safari + OS X 10.6.3 through 10.6.7 as having broken HTML5 audio (intermittent load/playback failures), and falling back to Flash where available.
-
New, experimental
soundManager.preferFlash
for handling "mixed-mode" HTML5 + flash cases. In the event HTML5 supports MP3/MP4 andpreferFlash
is true (and flash is installed), flash will be used for MP3/MP4 content while allowing HTML5 to play OGG, WAV and other formats etc.Important note: Because HTML5 audio is still quirky and has bugs,
preferFlash
istrue
by default to help ensure MP3/MP4 play consistently. If set tofalse
or flash is not available, "HTML5-only" mode will kick in and will apply to all formats.
As of the V2.97.20110424 release of SM2:
HTML5 audio in Safari on Snow Leopard 10.6.3 through 10.6.9 (10.6.7 was released 03/2011) are blacklisted and will fall back to Flash. 10.6.8 and 10.6.9 are preemptive guesses. According to beta testers, OS X 10.7 ("Lion") has fixed the intermittent HTML5 audio load/playback issue.
new Audio(null)
is no longer used for iOS, as iOS would attempt to load a URL called "null".iOS 4.2 or 4.3 may have introduced new security restrictions around
onfinish()
->unload()
->play()
that prevents the "play-through" behaviour previously allowed in certain cases. Theunload()
attempts to nullify the audio'ssrc
attribute, breaking the futureplay()
request. The Muxtape/button/link demos were affected by this, and have been fixed with this release. To prevent this issue in your own apps, avoidunload()
and simply useonfinish()
->play()
for iOS.
As of the V2.97.20110306 release of SM2:
Testing suggests that auto-play ("auto-annoy?") does work on iOS 4.1, but are aggressively blocked as of iOS 4.2.
_resetProperties()
when setting Audio().src, fix sound1.play() -> sound2.play() -> sound1.play() case on iOS 4.1 not correctly re-assigning original sound URL (related to global audio object.)If no flash is detected, try forcing
useHTML5Audio = true
(eg. desktop safari on new Macs which don't come with Flash.) Related: flash detection code tweak.isNaN() check for HTML5 loading (saw one under Safari, in testing).
Use new Audio(null) vs (), Opera 9.64 expects URL argument; throws WRONG_ARGUMENTS_ERR otherwise. Doesn't implement canPlayType() either, but both are fixed in future releases.
As of the V2.97.20110123 release of SM2:
New (experimental)
soundManager.useGlobalHTML5Audio
attribute, enabled by default for mobile + iOS. Enables use of a single audio object, re-used for loading and playing all sounds. iOS currently can only play one sound at a time, so this limitation is safe for now. The global object fixes previous regression of play-through/playNext()-style behaviours.Sound recycling with new global audio feature should work better than in prior (development) versions.
Improved broken Safari/Snow Leopard HTML5 audio situation: HTML5 mode is no longer disabled - and if available, Flash is used to play MP3/MP4 content to work around known playback issues with native HTML5 audio.
New (experimental)
soundManager.requireFlash
property (default: false.) If true, prevents HTML5-only mode on devices with both HTML5 and Flash. May be useful when HTML5 is enabled (and can play MP3), but Flash is desired to play RTMP content etc. As of this version, will only use Flash for RTMP.Fix for
type:'audio/mp3'
returning false oncanPlay()
. Timer update-while-paused tweak.More event listeners, ignore events on destroyed sounds, improved event clean-up, "seek before load" fix
As of the January 1, 2011 (V2.97a.20110101) and December, 2010 releases of SM2 (V2.97a.20101221):
The
bytesLoaded
andbytesTotal
properties may become less-relevant under HTML5 due to non-linear HTTP downloading (using ranges and partials), but they are still provided under Firefox at this time.Related to bytes loading/total, a sound's
onload
event may not always be fired (Mozilla currently discourage use of the DOMloaded
event), again because of range requests and the ability to arbitrarily seek within a file.Basic support for the W3
TimeRanges
implementation of sound buffering (ie., loaded data) has been implemented. This gives an idea of "total time loaded", but again, is not necessarily sequential.HTML5 audio is disabled for all versions of Safari (4 and 5) on Snow Leopard (OS X 10.6.3 - 10.6.5) until Apple fixes issues with audio loading and playback due to bugs in "underlying frameworks." See Webkit #32159. HTML5 audio in Safari on Windows (provided QuickTime is installed) does not have the same fatal bug.
As of the October, 2010 release of SM2 (V2.97a.20101010):
HTML5 audio is disabled for all versions of Safari (4 and 5) on Snow Leopard (OS X 10.6.3 and 10.6.4) until Apple fixes issues with audio loading and playback due to bugs in "underlying frameworks." See Webkit #32159.
As of the August, 2010 release of SM2 (V2.96a.20100822):
Safari 5.0.1 (533.17.18) on Snow Leopard (10.6.x) continues to show buggy HTML5 audio load/playback behaviour. Apple are aware of the regression, which began with Safari 4.0 on Snow Leopard (perhaps with the new QuickTime.) See Webkit #32159.
iPad/iPhone iOS4 will now play a sequence of sounds if using
onfinish()
to create/start the next (eg., the Muxtape-style playlist on the SM2 homepage will play through once the user starts it.) In any event, user interaction is always required to start the first sound.
As of the June, 2010 release of SM2 (V2.96a.20100624):
Safari 5.0 (533.16) on OS X Snow Leopard (10.6.x) continues to show buggy HTML5 audio load/playback behaviour, same as with Safari 4.0.5 on Snow Leopard only - may be related to underlying QuickTime implementation (a guess, at this point.) SM2 will disable HTML5 audio support by default for this specific browser + OS combo. See Webkit #32159 for discussion + testcases.
As of the May, 2010 release of SM2 (V2.96a.20100520):
Safari 4.0.5 on OS X Snow Leopard (10.6.x) appears to have an annoying bug where audio inconsistently fails to load / play; SM2 will currently disable or ignore the HTML5 feature on this exact browser + OS version. See Webkit #32159 for discussion + testcases. Note that Safari on OS X 10.5 "Leopard" and on Windows do not appear to have this bug; it seems to be limited to Snow Leopard, seen on OS X 10.6.3.
Some browsers (and iPad 3.2?) do not fire
progress
events, and/or do not implement bytesLoaded/bytesTotal-style attributes.iPad 3.2 appears to be able to only play one sound at a time, and will terminate other sounds.
iPad 3.2 may also loop AAC+ (HE-AAC) and WAV sounds, perhaps not firing onfinish() and resetting the position to 0 each time, but is fine with MP3s. This has been observed, but not fully-tested.
Looping in HTML5 is either "infinite" or "none". A wrapper may be created for SM2 so that a number of loops can be specified, as with Flash. This is not yet implemented.
Panning (left/right channel balance) does not appear to be in HTML5.
Flash-only features such as ID3 tag reading, waveform and spectrum data will simply be ignored, and their related events will not fire on SMSound objects which are using HTML5.