Skip to content
  • crogers@google.com's avatar
    Add support for WaveShaperNode.oversample · 18ec8a99
    crogers@google.com authored
    https://bugs.webkit.org/show_bug.cgi?id=117435
    
    Reviewed by Kenneth Russell.
    
    Source/WebCore:
    
    Adapted from Blink:
    https://codereview.chromium.org/15619003/
    
    Please see specification for details:
    https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#WaveShaperNode
    
    .oversample specifies what type of oversampling (if any) should be used when applying the shaping curve.
    The default value is "none", meaning the curve will be applied directly to the input samples.
    A value of "2x" or "4x" can improve the quality of the processing by avoiding some aliasing,
    with the "4x" value yielding the highest quality.
    
    Tests: webaudio/waveshaper-oversample-2x.html
           webaudio/waveshaper-oversample-4x.html
    
    * CMakeLists.txt:
    * GNUmakefile.list.am:
    * Modules/webaudio/WaveShaperDSPKernel.cpp:
    (WebCore::WaveShaperDSPKernel::WaveShaperDSPKernel):
    (WebCore::WaveShaperDSPKernel::lazyInitializeOversampling):
    (WebCore::WaveShaperDSPKernel::process):
    (WebCore::WaveShaperDSPKernel::processCurve):
    (WebCore::WaveShaperDSPKernel::processCurve2x):
    (WebCore::WaveShaperDSPKernel::processCurve4x):
    (WebCore::WaveShaperDSPKernel::reset):
    (WebCore::WaveShaperDSPKernel::latencyTime):
    * Modules/webaudio/WaveShaperDSPKernel.h:
    * Modules/webaudio/WaveShaperNode.cpp:
    (WebCore::WaveShaperNode::WaveShaperNode):
    (WebCore::WaveShaperNode::setOversample):
    (WebCore::WaveShaperNode::oversample):
    * Modules/webaudio/WaveShaperNode.h:
    (WebCore::WaveShaperNode::latency):
    * Modules/webaudio/WaveShaperNode.idl:
    * Modules/webaudio/WaveShaperProcessor.cpp:
    (WebCore::WaveShaperProcessor::WaveShaperProcessor):
    (WebCore::WaveShaperProcessor::setOversample):
    * Modules/webaudio/WaveShaperProcessor.h:
    (WebCore::WaveShaperProcessor::oversample):
    * WebCore.xcodeproj/project.pbxproj:
    * platform/audio/DownSampler.cpp: Added.
    (WebCore::DownSampler::DownSampler):
    (WebCore::DownSampler::initializeKernel):
    (WebCore::DownSampler::process):
    (WebCore::DownSampler::reset):
    (WebCore::DownSampler::latencyFrames):
    * platform/audio/DownSampler.h: Added.
    * platform/audio/UpSampler.cpp: Added.
    (WebCore::UpSampler::UpSampler):
    (WebCore::UpSampler::initializeKernel):
    (WebCore::UpSampler::process):
    (WebCore::UpSampler::reset):
    (WebCore::UpSampler::latencyFrames):
    * platform/audio/UpSampler.h: Added.
    
    LayoutTests:
    
    * webaudio/resources/waveshaper-testing.js: Added.
    (T0):
    (T1):
    (T2):
    (T3):
    (T4):
    (generateWaveShapingCurve):
    (checkShapedCurve):
    (createImpulseBuffer):
    (runWaveShaperOversamplingTest):
    * webaudio/waveshaper-oversample-2x-expected.txt: Added.
    * webaudio/waveshaper-oversample-2x.html: Added.
    * webaudio/waveshaper-oversample-4x-expected.txt: Added.
    * webaudio/waveshaper-oversample-4x.html: Added.
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@152702 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    18ec8a99