Creates a AudioContext
that works as expected in desktop and mobile, particularly across iOS devices.
There is a bug in iOS where the AudioContext sampleRate
is sometimes not what you would expect, and as a result, all WebAudio plays with heavy distortion. This occurs when you play an audio/video element with a different sample rate, or when you first boot up Safari (tested on iOS9.2, iPhone5S, no headphones).
To get around this, we try to detect a broken state, and if so, play a dummy buffer before returning a new AudioContext which should have the desired sample rate (default 44100).
On iOS, this function must be called from user gesture event, such as touchend
.
const createAudioContext = require('ios-safe-audio-context')
clickToPlay.addEventListener('touchend', () => {
const audioContext = createAudioContext()
// now you can use this context for playback
})
Returns a new AudioContext, only applying the hack if we detect a broken state (iOS). desiredSampleRate
defaults to 44100.
MIT, see LICENSE.md for details.