Skip to content

Experience-Monks/ios-safe-audio-context

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ios-safe-audio-context

experimental

Creates a AudioContext that works as expected in desktop and mobile, particularly across iOS devices.

Motivation

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).

Example

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
})

Usage

NPM

context = createAudioContext([desiredSampleRate])

Returns a new AudioContext, only applying the hack if we detect a broken state (iOS). desiredSampleRate defaults to 44100.

License

MIT, see LICENSE.md for details.

About

create a WebAudio context that works in iOS and everywhere else

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published