-
Notifications
You must be signed in to change notification settings - Fork 443
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
No pop sounds #523
base: master
Are you sure you want to change the base?
No pop sounds #523
Conversation
No dac documentation update for esp32
implemented AudioGeneratorMP3 and AudioGeneratorWAV waiting until AudioOutput output buffered samples
implemented AudioOutputI2S finishing buffered samples
allow padding number of buffers to AudioOutputNoDAC constructor
Hi Roman, I see that your pull requests are open for almost 2 years. I need to fix the pop's as well for a small project. Thanks in advance. Kind regards, Martin |
My solution so far has been to raise the GAIN after starting and lower it when the sound stops. |
So you're basically cutting the gain after each file, then raising it again before the next one? |
Audio wave is centered at the middle level voltage. To output silence, DAC has to output middle voltage (0x8000 sample for 16-bit DAC). PDM or PWM have to output pulses with 50% fill. When sound is not played, pin outputs zero voltage. Thus playback start and stop can cause pop (click) sounds due to instant voltage change from zero to middle (3.3V/2 average). It might not be a problem with external DAC which continue generating middle voltage when I2S is stopped. There is a problem with internal DAC, PDM on ESP32 and software Delta-sigma. Even if we let I2S to run continuously (which is waste of resources), there would be clicks on each sampling rate adjustments.
To remove pop sounds, AudioGeneratorI2S and AudioGeneratorI2SNoDac can ramp voltage level from zero voltage to actial sound amplitude on playback start and opposite on stop.
Attached archive contains two sounds with and without clicks.
There is no ramp by default.
Ramp should be enabled with call: AudioOutputI2SNoDAC->SetRamp(100);
no_pop_sound.zip
(there is a digital noise from Sigma-delta 32).
Implementation:
Implementation contains and depends on my other pull request,s especially:
#520
On sound start, ramp will start with sound start. More precisely, ramp starts each time sampling rate is set,because sampling rate is changed few samples after mp3 playback start(!). Ideally we should ramp down when sound ends. As we do not know when AutdioGenerator will stop feeding AudioOutput, we have no other option to add a silence period after playback and ramp it down.
Feature is implemented for AudioGeneratorMP3 and AudioGeneratorWAV,sorry.
Other generators have to be modified to support playback of bufered samples:
#520