Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(244)

Unified Diff: Source/platform/audio/DynamicsCompressor.cpp

Issue 152333003: Remove emphasis/de-emphasis filters from DynamicsCompressor. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Add expected result. Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/platform/audio/DynamicsCompressor.h ('k') | Source/platform/audio/DynamicsCompressorKernel.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/platform/audio/DynamicsCompressor.cpp
diff --git a/Source/platform/audio/DynamicsCompressor.cpp b/Source/platform/audio/DynamicsCompressor.cpp
index 93d214fac0b200452709cf11cdaff50ba7427c31..2f7e6840d5316c514abdf74b80105bffd8f4e5e0 100644
--- a/Source/platform/audio/DynamicsCompressor.cpp
+++ b/Source/platform/audio/DynamicsCompressor.cpp
@@ -95,38 +95,6 @@ float DynamicsCompressor::parameterValue(unsigned parameterID)
return m_parameters[parameterID];
}
-void DynamicsCompressor::setEmphasisStageParameters(unsigned stageIndex, float gain, float normalizedFrequency /* 0 -> 1 */)
-{
- float gk = 1 - gain / 20;
- float f1 = normalizedFrequency * gk;
- float f2 = normalizedFrequency / gk;
- float r1 = expf(-f1 * piFloat);
- float r2 = expf(-f2 * piFloat);
-
- ASSERT(m_numberOfChannels == m_preFilterPacks.size());
-
- for (unsigned i = 0; i < m_numberOfChannels; ++i) {
- // Set pre-filter zero and pole to create an emphasis filter.
- ZeroPole& preFilter = m_preFilterPacks[i]->filters[stageIndex];
- preFilter.setZero(r1);
- preFilter.setPole(r2);
-
- // Set post-filter with zero and pole reversed to create the de-emphasis filter.
- // If there were no compressor kernel in between, they would cancel each other out (allpass filter).
- ZeroPole& postFilter = m_postFilterPacks[i]->filters[stageIndex];
- postFilter.setZero(r2);
- postFilter.setPole(r1);
- }
-}
-
-void DynamicsCompressor::setEmphasisParameters(float gain, float anchorFreq, float filterStageRatio)
-{
- setEmphasisStageParameters(0, gain, anchorFreq);
- setEmphasisStageParameters(1, gain, anchorFreq / filterStageRatio);
- setEmphasisStageParameters(2, gain, anchorFreq / (filterStageRatio * filterStageRatio));
- setEmphasisStageParameters(3, gain, anchorFreq / (filterStageRatio * filterStageRatio * filterStageRatio));
-}
-
void DynamicsCompressor::process(const AudioBus* sourceBus, AudioBus* destinationBus, unsigned framesToProcess)
{
// Though numberOfChannels is retrived from destinationBus, we still name it numberOfChannels instead of numberOfDestinationChannels.
@@ -173,20 +141,6 @@ void DynamicsCompressor::process(const AudioBus* sourceBus, AudioBus* destinatio
m_lastFilterStageRatio = filterStageRatio;
m_lastAnchor = anchor;
- setEmphasisParameters(filterStageGain, anchor, filterStageRatio);
- }
-
- // Apply pre-emphasis filter.
- // Note that the final three stages are computed in-place in the destination buffer.
- for (unsigned i = 0; i < numberOfChannels; ++i) {
- const float* sourceData = m_sourceChannels[i];
- float* destinationData = m_destinationChannels[i];
- ZeroPole* preFilters = m_preFilterPacks[i]->filters;
-
- preFilters[0].process(sourceData, destinationData, framesToProcess);
- preFilters[1].process(destinationData, destinationData, framesToProcess);
- preFilters[2].process(destinationData, destinationData, framesToProcess);
- preFilters[3].process(destinationData, destinationData, framesToProcess);
}
float dbThreshold = parameterValue(ParamThreshold);
@@ -209,9 +163,8 @@ void DynamicsCompressor::process(const AudioBus* sourceBus, AudioBus* destinatio
float releaseZone3 = parameterValue(ParamReleaseZone3);
float releaseZone4 = parameterValue(ParamReleaseZone4);
- // Apply compression to the pre-filtered signal.
- // The processing is performed in place.
- m_compressor.process(m_destinationChannels.get(),
+ // Apply compression to the source signal.
+ m_compressor.process(m_sourceChannels.get(),
m_destinationChannels.get(),
numberOfChannels,
framesToProcess,
@@ -234,16 +187,6 @@ void DynamicsCompressor::process(const AudioBus* sourceBus, AudioBus* destinatio
// Update the compression amount.
setParameterValue(ParamReduction, m_compressor.meteringGain());
- // Apply de-emphasis filter.
- for (unsigned i = 0; i < numberOfChannels; ++i) {
- float* destinationData = m_destinationChannels[i];
- ZeroPole* postFilters = m_postFilterPacks[i]->filters;
-
- postFilters[0].process(destinationData, destinationData, framesToProcess);
- postFilters[1].process(destinationData, destinationData, framesToProcess);
- postFilters[2].process(destinationData, destinationData, framesToProcess);
- postFilters[3].process(destinationData, destinationData, framesToProcess);
- }
}
void DynamicsCompressor::reset()
@@ -252,28 +195,11 @@ void DynamicsCompressor::reset()
m_lastAnchor = -1;
m_lastFilterStageGain = -1;
- for (unsigned channel = 0; channel < m_numberOfChannels; ++channel) {
- for (unsigned stageIndex = 0; stageIndex < 4; ++stageIndex) {
- m_preFilterPacks[channel]->filters[stageIndex].reset();
- m_postFilterPacks[channel]->filters[stageIndex].reset();
- }
- }
-
m_compressor.reset();
}
void DynamicsCompressor::setNumberOfChannels(unsigned numberOfChannels)
{
- if (m_preFilterPacks.size() == numberOfChannels)
- return;
-
- m_preFilterPacks.clear();
- m_postFilterPacks.clear();
- for (unsigned i = 0; i < numberOfChannels; ++i) {
- m_preFilterPacks.append(adoptPtr(new ZeroPoleFilterPack4()));
- m_postFilterPacks.append(adoptPtr(new ZeroPoleFilterPack4()));
- }
-
m_sourceChannels = adoptArrayPtr(new const float* [numberOfChannels]);
m_destinationChannels = adoptArrayPtr(new float* [numberOfChannels]);
« no previous file with comments | « Source/platform/audio/DynamicsCompressor.h ('k') | Source/platform/audio/DynamicsCompressorKernel.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698