[webkit-changes] [WebKit/WebKit] 8c46a5: Add a mechanism to inject random noise when exerci...

Wenson Hsieh noreply at github.com
Mon Feb 20 12:43:59 PST 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 8c46a53a1bce8226185353af0c7d6fc600492dda
      https://github.com/WebKit/WebKit/commit/8c46a53a1bce8226185353af0c7d6fc600492dda
  Author: Wenson Hsieh <wenson_hsieh at apple.com>
  Date:   2023-02-20 (Mon, 20 Feb 2023)

  Changed paths:
    M Source/WebCore/Modules/webaudio/AnalyserNode.cpp
    M Source/WebCore/Modules/webaudio/AudioBuffer.cpp
    M Source/WebCore/Modules/webaudio/AudioBuffer.h
    M Source/WebCore/Modules/webaudio/AudioWorkletNode.cpp
    M Source/WebCore/Modules/webaudio/RealtimeAnalyser.cpp
    M Source/WebCore/Modules/webaudio/RealtimeAnalyser.h
    M Source/WebCore/platform/audio/AudioUtilities.cpp
    M Source/WebCore/platform/audio/AudioUtilities.h

  Log Message:
  -----------
  Add a mechanism to inject random noise when exercising certain web audio APIs
https://bugs.webkit.org/show_bug.cgi?id=252566

Reviewed by Chris Dumez.

Consult the audio context's `NoiseInjectionPolicy` by adding small amounts of random noise, where
appropriate. See below for more details.

* Source/WebCore/Modules/webaudio/AnalyserNode.cpp:
(WebCore::AnalyserNode::AnalyserNode):

Plumb the `NoiseInjectionPolicy` over to the `RealtimeAnalyser`; see below for more details.

* Source/WebCore/Modules/webaudio/AudioBuffer.cpp:
(WebCore::AudioBuffer::getChannelData):
(WebCore::AudioBuffer::copyFromChannel):
(WebCore::AudioBuffer::copyToChannel):
(WebCore::AudioBuffer::zero):

Clear the `m_needsAdditionalNoise` flag from the `AudioBuffer` when it is either replaced with a
separate data buffer, or zeroed out.

(WebCore::AudioBuffer::applyNoiseIfNeeded):

Add a helper method to inject noise into the `AudioBuffer` if the policy flag is set. This is only
performed lazily, upon either copying from the `AudioBuffer` using `copyFromChannel` or reading
values in the form of a float array via `getChannelData`.

* Source/WebCore/Modules/webaudio/AudioBuffer.h:
* Source/WebCore/Modules/webaudio/AudioWorkletNode.cpp:
(WebCore::AudioWorkletNode::process):

Add a small amount of noise before handing data to an audio worklet for processing.

* Source/WebCore/Modules/webaudio/RealtimeAnalyser.cpp:
(WebCore::RealtimeAnalyser::RealtimeAnalyser):
(WebCore::RealtimeAnalyser::doFFTAnalysisIfNecessary):

Add a larger amount of random noise when transforming a signal from time to frequency domain, using
an analyser.

* Source/WebCore/Modules/webaudio/RealtimeAnalyser.h:
* Source/WebCore/platform/audio/AudioUtilities.cpp:
(WebCore::AudioUtilities::applyNoise):

Add a new utility method to randomly scale values in the input array by random values in the range
`[1 - m, 1 + m]` where `m` is the magnitude of the random noise. For instance, `m = 0.1` denotes
that each original value will be set to a value that is somewhere between 10% less or 10% greater
than what it was originally.

* Source/WebCore/platform/audio/AudioUtilities.h:

Canonical link: https://commits.webkit.org/260559@main




More information about the webkit-changes mailing list