This sample shows how to implement a clip-indicating volume meter in Web Audio, using a ScriptProcessor. It's necessary to use a ScriptProcessor in order to not miss any clipping samples - otherwise you could implement this using a RealtimeAnalyser to only grab samples when necessary.
Check out the source on Github.
The usage is quite easy:
var meter = createAudioMeter(audioContext,clipLevel,averaging,clipLag); audioContext: the AudioContext you're using. clipLevel: the level (0 to 1) that you would consider "clipping". Defaults to 0.98. averaging: how "smoothed" you would like the meter to be over time. Should be between 0 and less than 1. Defaults to 0.95. clipLag: how long you would like the "clipping" indicator to show after clipping has occured, in milliseconds. Defaults to 750ms. meter.checkClipping(); returns true if the node has clipped in the last clipLag milliseconds. meter.shutdown(); used to destroy the node (it's important to disconnect and remove the event handler for any ScriptProcessor).