-
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