I played around with piCoreplayer 6.1.0 and found out that when I enable resampling, despite my DAC not support native DSD nor DoP, I can hear the playerback.
below is my resampling setting.
MAX_RATE="384000"
UPSAMPLE="vX::4:28:99:100:50"
but when it starts playing, the sound is very stutter, if I pause the playback, wait a few seconds, and resume, the sound become smooth for about 1 minutes, then again stutter comes in.
looks like it runs out buffer.
I'm wondering if this can be fixed by some tricks?
when it play smoothly, the sound quality is very good, I will say it sounds better then c-3po plugin for LMS.
it could be a good solution for those who don't have DSD support DAC.
Results 1 to 5 of 5
-
2020-07-14, 06:21 #1
- Join Date
- Jul 2020
- Posts
- 4
pcp resampling works for DSD playback?
-
2020-07-24, 14:53 #2
- Join Date
- Jul 2020
- Posts
- 2
I think your issue is the sample rate is set too high. I had a similar problem running higher than 96K and settled on the following args:
/usr/local/bin/squeezelite -n "ABC" -o sysdefault:CARD=ALSA -a 80:4:32:1: -b 20000:500000 -c pcm,flac,dsd,mp3,ogg -r 96000 -R vE::4:28:95:105:45 -s 127.0.0.1 -v -W
This works perfectly fine on my 3B with DSD resampled and sent both to my DAC via USB and my Integra AV via HDMI.
-
2020-07-24, 17:12 #3
- Join Date
- Jul 2020
- Posts
- 4
Great tips, your setting works like a charm! Thank your for sharing this, you made my day!
I monitor the CPU utilization with top command, and see it's about 22% with your setting, sometimes goes up to 24%.
looks like piCorePlayer can only use one core so 25% means full loaded.
if I turn up the sample rate to 192K, it will still work but CPU is always 25% and operation response become slower.
I did tried lower sample rate with my original resample setting and it wasn't affect much back then, I suppose the resample setting -R vE::4:28:95:105:45 also play it's part.
hope I can get more understanding about these magic numbers.
-
2020-07-25, 23:12 #4
- Join Date
- Jul 2020
- Posts
- 4
found some detailed explanation
I found some great explanation about those resampling parameters, I'd quote them here maybe it will help others.
The current implementation in Squeezelite does upsampling to the
highest interger rate your DAC cupports. Thus if your DAC's maximum
rate is 192, it will upsample to 44.1 to 176.4. If your DAC does not
support 176.4, you can use the -r option (or max sample rate in the gui)
to set the max rate to 96, then squeezlite will upsample to 88.2. Even
upsampling to 88.2 will usually make a significant improvement. There
has been talk about giving the upsampling more flexibility so you could
choose 192 in this case.
The SoX resampling gives you several different parameters to adjust,
choosing the right one can be a daunting task so they came up with
what are usually called "recipes", predefined combinations of
parameters. These are good places to start your exploration. When you
give Squeezelite a set of paramters you first give a recipe, then you
can add modifiers that over ride the parameters in the recipe.
The upsampling "argumnt" consists of several fields separated by colons
(:). If there is nothing specified for a particular field the default
for the chosen recipe is used. There are up to 7 fields. If you are not
specifying any of the later fields you do not need to include all the
colons. Some examples:
abc first field only, all others default
abc:xyz first and second field, others default
abc:::def first and fourth fields, others default
:xyz:::def default first field, fourth field and others default
The first field is the basic recipe. It is special, it is made up of
three subfields, each specified by a letter.
The first letter is the "quality", it can be one of these characters:
v h m l q Note the fourth character is the lower case "ell".
These stand for "very high", "high", "medium", "low" and "q"
A word on these, the differences are not necessarily related to how they
sound, they refer to how far the aliases are attenuated (remember the
engineering community regards the alias attenuation as the primary
figure of merit for a filter). These primarily relate to how long the
filters are. All these filters work by performing calculations on a
series of samples in the file, the longer filters use more samples, the
shorter filters use fewer samples. The greater the alias attenuation
the longer the filter has to be. This CAN affect what you hear. Do not
just blindly use the "very high" setting, it may not be the best
sounding.
The second leter is the "phase". You have a choice of: L M I (that
is upper case "eye"). L is linear phase, M is minimum phase, I is
intermediate phase. There are LOTS of descriptions of what these are
out there on the web so I won't go into detail.
The third letter is: s It is either included or not. This specifies
a very steep filter curve. If the s is not included a slightly shallower
filter is used.
The deault is hL (no s). If a letter is left off the default is used.
Thus 'v' is the same as 'vL'. 's' is the same as 'hLs'. 'Ms' is the same
as 'hMs'.
All that just for the first field!
The second field contains flags. Nobody really knows what these do so
its safest to leave this field blank.
The third field is attenuation. It is possible that the upsampling can
clip on signals that are at or very close to maximum, this attenuates
the input so this clipping doesn't happen. The argument is a number,
which is the attenuation in db. Thus '6' is 6db of attenuation. The
defualt is '1', which is probably good most of the time.
The fourth field is "precision", it is the number of bits used in
calculations. We know that 20 and 28 are sometimes used depending on
other parameters, this over rides that and uses the value for
everything. I'm not sure if values other than 20 and 28 actually do
anything.
The next two fields let you tweak the filter curve, how steep it is and
where it starts. You specify a start frequency and a stop frequency.
This is done by a ratio of the Nyquist frequency, NOT an actual
frequency. Both parameters are in the range 0-100. Thus for a 44.1
input a start of 90 means starting to roll off at 19.845KHz. An end
(where the curve bottoms out) of 100 would be at 22.05KHz.
The fifth field is the end of the passband (or the point where the curve
starts falling)
The sixth field is the stop band start (or the point where the curve
bottoms out)
The seventh field is the phase. This lets you specify exactly what you
want the phase to be. 0 is minumum phase, 25 is intermediate phase and
50 is linear phase (these are equivalemt to the M, I and L defined
above). 100 is maximum phase, but that is not really used. The phase
relates to how much pre and post ringing there is. 0 has just post
ringing, 50 is equal amounts post and pre, 25 is in-between, 100 is all
pre-ringing.
When exploring options its probably a good idea to just limit yourself
to the first field at first. See if you can hear a difference between
very high, high, medium etc. Find the one you like the best then try
that with L M or I. The other I would recommend trying is the precision.
Try a variety of music with each setting.
-
2020-07-28, 12:11 #5
- Join Date
- Jul 2020
- Posts
- 2
I'm glad to hear it worked out for you! If you want to read up a bit more, I took my settings from the following recommendations:
Archimago's Musings: More fun with digital filters! Archimago's "Goldilocks" Intermediate Phase suggestion
Also see:
Archimago's Musings: Raspberry Pi 3 B+ "Touch" Optimizations; CRAAP Settings, and the "Extremus" Filter Setting.