| <!DOCTYPE html> |
| <html> |
| <head> |
| <title> |
| dynamicscompressor-simple.html |
| </title> |
| <script src="../../imported/w3c/web-platform-tests/resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| <script src="../resources/audit-util.js"></script> |
| <script src="../resources/audit.js"></script> |
| </head> |
| <body> |
| <script id="layout-test-code"> |
| let audit = Audit.createTaskRunner(); |
| let context; |
| let compressor; |
| let sampleRate = 44100; |
| let lengthInSeconds = 1; |
| let renderedData; |
| // This threshold experimentally determined. It depends on the the gain |
| // value of the gain node below and the dynamics compressor. When the |
| // DynamicsCompressor had the pre-emphasis filters, the peak value is |
| // about 0.21. Without it, the peak is about 0.84. |
| let peakThreshold = 0.83; |
| |
| function checkResult(renderedBuffer, should) { |
| renderedData = renderedBuffer.getChannelData(0); |
| // Search for a peak in the last part of the data. |
| let startSample = sampleRate * (lengthInSeconds - .1); |
| let endSample = renderedData.length; |
| let k; |
| let peak = -1; |
| |
| for (k = startSample; k < endSample; ++k) { |
| let sample = Math.abs(renderedData[k]); |
| if (peak < sample) |
| peak = sample; |
| } |
| |
| should(peak >= peakThreshold, 'Pre-emphasis effect not applied') |
| .beTrue(); |
| |
| should(compressor.reduction !== 0, 'Reduction value changed').beTrue(); |
| } |
| |
| audit.define( |
| { |
| label: 'test', |
| description: 'Test pre-emphasis in DynamicsCompressor is removed' |
| }, |
| function(task, should) { |
| |
| context = new OfflineAudioContext( |
| 1, sampleRate * lengthInSeconds, sampleRate); |
| // Connect an oscillator to a gain node to the compressor. The |
| // oscillator frequency is set to a high value for the (original) |
| // emphasis to kick in. The gain is a little extra boost to get the |
| // compressor enabled. |
| // |
| let osc = context.createOscillator(); |
| osc.frequency.value = 15000; |
| let gain = context.createGain(); |
| gain.gain.value = 1.5; |
| compressor = context.createDynamicsCompressor(); |
| osc.connect(gain); |
| gain.connect(compressor); |
| compressor.connect(context.destination); |
| osc.start(); |
| |
| context.startRendering() |
| .then(buffer => checkResult(buffer, should)) |
| .then(() => task.done()); |
| ; |
| }); |
| |
| audit.run(); |
| </script> |
| </body> |
| </html> |