• These commercial threads are for private transactions. diyAudio.com provides these forums for the convenience of our members, but makes no warranty nor assumes any responsibility. We do not vet any members, use of this facility is at your own risk. Customers can post any issues in those threads as long as it is done in a civil manner. All diyAudio rules about conduct apply and will be enforced.

symphonic-mpd

Hi phofman,

We use dt-blob.bin to set the initial PLL values.

Save the following as dt-blob.dts,
Build the dts file with the dtc command, put dt-blob.bin in /boot.

Code:
// build command:
//   dtc -q -I dts -O dtb -o dt-blob.bin dt-blob.dts
//
// osc  : 54MHz
// PLLA : NONE
// PLLB : arm_freq
// PLLC : core_freq
// PLLD : BCLK
// PLLH : HDMI etc

/dts-v1/;

/ {
   videocore {
      clock_routing {
        vco@PLLA { freq =  <638976000>; };
        vco@PLLD { freq =  <632217600>; };
        chan@APER  { div = <1>; };
        chan@DPER  { div = <1>; };
        clock@GPCLK0 {
                pll = "PLLA";
                chan = "APER";
        };
      }; // clock routing
      clock_setup {
        clock@GPCLK0 { freq = <638976000>; };
      };
   };
};


The diff for clk-bcm2835.c is as follows.
Please refer to it.

https://raw.githubusercontent.com/raspberrypi/linux/rpi-4.19.y/drivers/clk/bcm/clk-bcm2835.c

Code:
656a657,659
>       printk("clk-bcm2835: (%s) rate=%lu\n",
>               clk_hw_get_name(hw), clk_hw_get_rate(&pll->hw));
> 
995d997
< 
1224a1227,1253
> static unsigned long decimal_frac(u32 v) {
>       int i;
>       unsigned long frac=0;
>       unsigned int mask = (int)1 << (sizeof(v) * 8 - 1);
>       unsigned long arr[12];
>       arr[0]=500000000000;
>       arr[1]=250000000000;
>       arr[2]=125000000000;
>       arr[3]=62500000000;
>       arr[4]=31250000000;
>       arr[5]=15625000000;
>       arr[6]=7812500000;
>       arr[7]=3906250000;
>       arr[8]=1953125000;
>       arr[9]=976562500;
>       arr[10]=488281250;
>       arr[11]=244140625;
> 
>       mask >>= 20;
>       for (i=0; i<12; i++) {
>               if (mask & v)
>                       frac += arr[i];
>               mask >>= 1;
>       }
>       return frac;
> }
> 
1258a1288,1289
>               printk("clk-bcm2835:debug req=%lu div=%u.%012lu %s=%lu min=%lu avg=%lu\n",
>                       req->rate, div>>12, decimal_frac(div), clk_hw_get_name(parent), prate, rate, avgrate);
1274a1306,1308
>       printk("clk-bcm2835:%s %s=%ld min=%ld avg=%ld\n",
>               clk_hw_get_name(hw), clk_hw_get_name(best_parent), best_prate, best_rate, best_avgrate);
> 
1611d1644
<       "xosc",
1614a1648
>       "plla_per",
1732a1767,1776
>       [BCM2835_PLLA_PER]      = REGISTER_PLL_DIV(
>               SOC_ALL,
>               .name = "plla_per",
>               .source_pll = "plla",
>               .cm_reg = CM_PLLA,
>               .a2w_reg = A2W_PLLA_PER,
>               .load_mask = CM_PLLA_LOADPER,
>               .hold_mask = CM_PLLA_HOLDPER,
>               .fixed_divider = 1,
>               .flags = CLK_SET_RATE_PARENT),
1753d1796
< 
2135,2136c2178,2179
<               .is_mash_clock = true,
<               .low_jitter = true,
---
>               .is_mash_clock = false,
>               .low_jitter = false,

printk and decimal_frac(u32 v) are for debugging purposes, so you can remove them.

I can't quite remember what decimal_frac(u32 v) is doing.
It's the debugging code I added two years ago.
 
Last edited:
Hi phofman,

A few more things.

I'm going to use config.txt to
gpu_mem=16
to boot with the cut down bootloader (start4cd.elf).

In RPi4, the use of PLLA seems to have changed and it seems to be used for gpu-related applications.

Changing the PLLA configuration in dt-blob.bin may be a risk.
If it doesn't work, try gpu_mem=16.
 
Run the online update from the SETTINGS screen in the Web UI.

2020-06-26 v1.0.5 release notes

  • Fixed an implementation error regarding PLL settings for DAC slaves.

Here are the PLL settings for each version as a reference

v0.9.6 (RPi3)
44.1KHz : 609638400Hz (PLLA)
48KHz : 614400000Hz (PLLD)

v1.0.5 (RPi4)
44.1KHz : 632217600Hz (PLLD)
48KHz : 638976000Hz (PLLA)


Wow, that was a quick update...
 
papalius: Thanks for the hints. I really like your clock redefinition - reusing the camera port (i.e. unused) PLLA for providing two clocks, each integer multiple of 44.1 and 48kHz rate families. And thanks for showing where the best_parent clock is chosen automatically (i.e. the method where you added your debugs).

So your integer-multiple clocks never use fractional dividers and MASH for all standard samplerates, and are switched automatically as required by the given samplerate. Very nice use of RPi's built-in hardware/software resources.

IMO that is exactly a change to be considered for some upstreamed config, at best selected by some device tree identifier ("audiophile") in /boot/config.txt

Perhaps the setup could also provide optional DAC/ADC masterclock through one of the GPxCLK pins, automatically switched between PLLA and PLLD + corresponding dividers for the respective samplerate and specific DAC chip (e.g. 256fs, 128fs, etc.).

Although the PLL'd clock in RPi is nothing special (maximum rms jitter of 48ps stated in the datasheet for PLL'd GPCLK), it is better than what many SPDIF receivers output as PLL-recovered clock. IMO perfectly OK for listening purposes.
 
IMO that is exactly a change to be considered for some upstreamed config, at best selected by some device tree identifier ("audiophile") in /boot/config.txt

Perhaps the setup could also provide optional DAC/ADC masterclock through one of the GPxCLK pins, automatically switched between PLLA and PLLD + corresponding dividers for the respective samplerate and specific DAC chip (e.g. 256fs, 128fs, etc.).

Hi phofman,

I'm glad it seems to have worked well.

Thanks for sharing your opinions on "upstreamed config" and "GPCLK".

I haven't thought about these things in depth, so I haven't come to understand your ideas. I'm sorry.

Could you please share your ideas in more detail?

Best regards
 
@papalius

I have several NAS locations to mount, sadly the interface provide only one.

I understand that smpd "Auto-Tuning of NAS mount settings to optimize throughput (It takes about 30 seconds to measure throughput.)"

Could you consider for GUI to mount multiple NAS location? and it implement optimize one by one

Thank you very much.

Edit: Find solution by pre-mount all to a single mount points and mount this one to SMPD.
 
Last edited:
Hi thanhvo31,

It's certainly not convenient for people using multiple NAS.
I'll try to create a configuration screen, so please wait a while.

In the meantime, please edit /etc/fstab manually.
The mount target is under /var/lib/mpd/music.
For example, /var/lib/mpd/music/NAS2

There are three items that are automatically set in the configuration screen: sec, vers, and rsize.

sec is an option for authentication.
"ntlm" and "ntlmssp" are tried and the value is set for successful authentication.

vers is the version of the CIFS protocol.
"1.0", "2.0", "2.1" and "3.0" to try to connect and set the latest version that is available to connect.

rsize is a block size.
This item is likely to affect performance.
"7300", "16060", "32120", "61320" and "129940" are measured.
The number of context switches and the transfer rate are taken into account to determine the rsize.
In most cases, setting "32120" or "61320" is appropriate.
 
Last edited:
Thank you @papalius for clarification on NAS setting and optimize rsize.

I had play with fstab before, but MPD seems unstable for me to scan the library.

The results is not consistence with my Pi 4 2GB RAM 1.0.5 SMPD

Another question is I store my collection on Google drive and my internet bandwidth is quite ok with 100Mbps.

With some others Debian base, with my friend support, I can use Rclone (Rclone) to mount clouddrive and play directly from the cloud.

But for SMPD, libfuse library seem not implemented.

Could you consider to support it?

Again, thank you.
 
Hi thanhvo31,

If there seems to be a problem with scanning the library, please send us a log.
After reproducing the issue, download the log to your PC from the SUPPORT screen in the web UI and send it to our support email address.

We have built rclone and added it to app showcase.
The installation command is here.

app install rclone

I haven't tested it, so please let me know if you have any problems with it working.
 
symphonic-mpd is Roon ready

I am a user of Roon and HQPlayer. I installed Roon Server and HQPlayer Embedded with GentooPlayer. GentooPlayer is a convenient tool for the beginner of Linux like me to use these applications with Linux. The Linux applications sound better than those with Windows.

I am also a user of symphonic-mpd, and it is why I am writing here. Many of you may not know that the current version (v1.0) is Roon ready. It is easy to add RoonBridge to smpd; “app install roonbridge”.

Of course it is convenient to operate smpd with RoonServer, but what was pleasant surprise for me is the improvement of the sound quality. With Roon the sound stage and perspective of smpd is considerably enhanced.

I enjoy the sound of Roon+HQPLAYER Embedded as it is very good for big symphonies and orchestral works with solid bass and transparent sound. Roon+smpd is, however, its excellent competitor with somewhat brighter sound.
I am very fond of listening to jazz with Roon+smpd as the liveliness of the music is better reproduced there.
 
Hi phofman,

If you feel that way, then other viewers probably feel the same way.
I will refrain from using this thread to disseminate information in the future.

As for support, I will continue to use this thread in conjunction with this one as well.
We think it's best to have people contact us using a tool they are familiar with.

Thank you.
 
Hi henzajima,

Thanks for the interesting information on SMPD+ROON.
I am not a ROON user. However, if the ROON sounds better when combined with the SMPD, it is largely due to the mechanism that SMPD began to adopt from V1.0.

I think, since V1.0, SMPD has been more flexible in its integration with other software. The connection to upmpdcli was discussed in this thread. And there is an active thread about the connection with squeezelite, on the original SMPD forum, run by Papalius.

IMO, support for these other software is a major revolution of SMPD V1.0.

The main purpose of SMPD up to V0.9 was to improve the sound quality by full use of the Raspberry PI's i2s capabilities. But this approach has changed dramatically after V1.0.

Papalius seem to think the next target for SMPD's high quality sound is to optimize network processing. This optimization of network processing will increasingly advance the evolution of SMPD. We are looking forward to seeing it.
 
Your GPL project is closed-source because it is used only by "club" users, yet this thread has turned into public announcements and support tool. Honestly, I do not like such approach.
Nor do I.
Keeping this forum as a place for support, this is exactly the way this author had done in Phileweb Community in Japan.
There he mentioned disclosing the source would decrease his motivation for further development. This reason was totally different from what he wrote here in diyAudio.
 
Nor do I.
There he mentioned disclosing the source would decrease his motivation for further development.

If he is not willing to contribute to opensource he picked the wrong project.
He seems to forget that most of ""his"" work was actually done by others.
People tend to forget that as soon as they put their own label on something.

Moode and Volumio and others have also been piggybacking solutions.
The big difference. They share their sources and contributions.


It's the quality of your project which makes you stay. Moode and Volumio or piCorePlayer are IMO not that afraid of copycats anymore.
They IMO don't have to. They all share a market. They all have different strengths.
And yet they all learn from each other.

The problem with these kind of projects is, that if you don't deliver, evolve or if you're too slow, others take over. That can and will put a lot of load on you.
But that you should know before you start such a project and go public with it.

Enjoy.
 

TNT

Member
Joined 2003
Paid Member
I stated this before - this thread is just advertising and member fishing of something being a software theft and I vote for that it should be closed and actually even removed from the forum. I reported it to the mods but no action was taken. It surprised me.

//
 
I stated this before - this thread is just advertising and member fishing of something being a software theft and I vote for that it should be closed and actually even removed from the forum. I reported it to the mods but no action was taken. It surprised me.

//

Be careful! I wouldn't call it "theft".

The problem is that he went public with the project. At that point he'd been obliged to make the sources public. He didn't. If I'm not mistaken. That's legally questionable.
However. If you write him an official mail and ask for the sources to the package that
you got he would have to comply. Did you try?

Now he pulled back. Made it kind of limit-access-source.

I do not know how his "club" approach works though. If he admits everybody who applies for a "membership" he'd most probably break license terms.

If he makes it a proprietary (closed-source) project he would have to ask each open-source copyright holder for permission to use the software in his project if I'm not mistaken.

Then. What happens if somebody of that "club" shares the package? With all these
questionable licences terms in the air.

For sure he's walking on thin ice. There are people out there explicitly looking for projects and people who exhibit license violations.

Bottom line. You better do you homework papalius.
I've seen people running into license violations issues. You don't want to face such thing.

The easiest way is to load it all up to github. If you deliver a quality product, you'll survive sharing a little secret here and there. ;)
 
Can you give us some ideas for publishing the source on github?

Suppose you are changing the build options for a package with a Linux distribution built in.
Disabling unnecessary features and changing performance options are commonplace.

Nonetheless, I haven't seen any documentation or build scripts on github that show what options you built with.
If you have a github project that would be helpful, can you point me to it?

Can I interpret the build method as superfluous and not necessary to upload it to github?