Use a two channel script processor even for mono recordings #115
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is a difficult thing to explain, but basically if you have an interface containing multiple input channels and you record in stereo on only one of the channels, the script processor node will mix down the channels to mono, and the resulting signal level will be cut in half.
In order to reproduce you have to
navigator.getUserMedia
withechoCancellation: false
constraintI thought this was a browser bug and put together a demo here
https://craig.is/demoing/web-audio-script-processor-bug
It turns out this is the expected behavior though. When your input is stereo with sound only coming into one channel and you pass to a mono
ScriptProcessorNode
, it sums the left and right channels to a single mono channel and the resulting recording ends up half the level you recorded it at.This change should be backwards compatible, because all of the other checks are still checking the
numChannels
so the only difference is how theScriptProcessorNode
deals with the input audio