Back when I dual booted Linux on my HP Pavilion laptop, I experienced a problem with glitchy audio which I documented the solution to here.
During the process I encountered a second audio glitch, which I didn’t address at the time. This post is an attempt to remedy that.
Certain audio formats (AIFF, WAV, possibly others) when played through certain applications (VLC, Dolphin’s preview panel, possibly others) stutter or sound buzzy/distorted during playback.
The size of the audio buffer on the sound card doesn’t match the IO rate set in the PulseAudio sound server configuration, leading to latency. (Note: most major Linux distributions play audio using PulseAudio.)
pacmd list-sinks | grep 'buffering'. You should see output like this:
device.buffering.buffer_size = "x" device.buffering.fragment_size = "x"
y are integers which I will refer to as
fragment_size from now on, for simplicity.
Perform the following calculations using the values from above:
buffer_latency = (buffer_size / 1411200) / 1000 fragment_latency = (fragment_size / 1411200) 1000
We now need to calculate the total bits per second for audio IO:
(samplerate * bitdepth) * channels
Typically the sample rate is 44100, bit depth is 16 and there are 2 channels (left and right, for stereo). So we get:
totalBPS = (44100*16) * 2 = 1411200
If you are using a different sample rate, bit depth and/or number of channels make sure you calculate accordingly.
Now open the relevant PulseAudio configuration file (which requires root privileges):
sudo vim /etc/pulse/daemon.conf
Feel free to replace
vim with your preferred command line text editor.
Find the following lines in
daemon.conf and uncomment them:
default-fragment-size-msec = x default-fragments = y
y will be integers. Replace
x with the
fragment_latency you calculated earlier and replace
buffer_latency / fragment_latency.
Also uncomment these lines in
default-sample-format = s16le default-sample-rate = 44100 default-sample-channels = 2
If you used a different sample rate and/or number of channels earlier, change the parameters accordingly.
Finally, save and close
daemon.conf and restart PulseAudio:
pulseaudio -k pulseaudio --start
Phew! So, what did all that achieve?
Well, for me, there is no longer any buzzing or distortion when playing back AIFFs and WAVs.
But now, M4As (but not MP3s) played from the Dolphin preview panel or from VLC are disorted - the same issue I was having with other audio formats before! And the sporadic glitch in all other audio has returned.
Oh Linux, I love you and I hate you.
All the credit for this solution goes to this very helpful forum post.