Detect Supported Audio Formats with JavaScript
As streaming becomes our main entertainment source and vendors fight to create the best video format, it's going to be more and more important that we detect device and browser video support before posting videos on our websites. We think less about audio but the same principle applies: detect whether or not a given audio format is supported before using it. So how do we detect if a given audio type is supported?
We can detect audio format support with HTMLAudioElement.prototype.canPlayType
, the same strategy that's used with video:
// Create an audio element so we can use the canPlayType method const audio = document.createElement('audio'); // Does the device support mp3? audio.canPlayType('audio/mpeg'); // "probably"
There are three possible results from canPlayType
:
"probably"
: The media type appears to be playable"maybe"
: Cannot tell if the media type is playable without playing it""
: The media type is not playable
We can create a function much like my supportsVideoType
function to make audio detection easy:
function supportsAudioType(type) { let audio; // Allow user to create shortcuts, i.e. just "mp3" let formats = { mp3: 'audio/mpeg', mp4: 'audio/mp4', aif: 'audio/x-aiff' }; if(!audio) { audio = document.createElement('audio') } return audio.canPlayType(formats[type] || type); } // Usage if(supportsVideoType('mp3') === "probably") { // Set the video to mp3 } else { // Set the video to wav or other format }
Taking the time to detect edge audio and video formats is well worth it, allowing you to deliver clearer media with better compression to improve load time. Keep these JavaScript functions in mind for your large or small media site!
Nice article!
For what it’s worth, I have a demo of
at simpl.info/cpt.