Hi here...
I finally made it 🙂
I have created an good enough README.md file on my GitHub :
GitHub - Lykkedk/SuperPlayer: Hacking software & scripts to play music
Properly lot's of gramma's and misspelling, sry... i'am non native English 😱
It should be good, but if i get corrections or maybe some advise i can correct it pretty easy now 😀
I did not touch the instructions.pdf for now; which are included when an git clone is executed
Jesper.
Jesper, I think its working. My DAC is changing sample rate. I had to edit the clip gains in the *.yml cuz I use -12db. Not sure it is using my filters though. Do I need to edit all the *.yml files to point to my actual filter files? I use .dbl format.
Morning!
Did you follow my guide README.md on github wineds?
Let me explain the flow:
[LMS] ----> squeezelite(squeeze) ----> loopback (camilla_in) ----> (camilladsp does her things here) ----> loopback (sound_out / the dac, etc...)
So when squeezelite detects a change in samplerate it executes e.g exec_96000.py
Then the exec_96000.yml calls the null_96000.yml.
So to answer your'e quistion, if you have music with 96000Hz you also have to have an .yml with this samplerate and fir's/biquads with the right samplerate too!
If you just leave the null_96000.yml as is, the thing will work when samplerate is changing to 96000Hz, running through a filter without anything applied to the pipeline, except for clipgain 0.0dB
And yes the .yml's must point to the right filters:
This is a .yml from my "real" Player:
(I run two filters a Prefilter and the final correction filter as can be seen in the .yml)
Make's sense ???
Jesper.
Did you follow my guide README.md on github wineds?
Great 🙂Jesper, I think its working. My DAC is changing sample rate.
Yes... Clipgain does depends on the filter used, so if -12dB gives you results without clipping it's goodI had to edit the clip gains in the *.yml cuz I use -12db
Not sure it is using my filters though. Do I need to edit all the *.yml files to point to my actual filter files? I use .dbl format.
Let me explain the flow:
[LMS] ----> squeezelite(squeeze) ----> loopback (camilla_in) ----> (camilladsp does her things here) ----> loopback (sound_out / the dac, etc...)
So when squeezelite detects a change in samplerate it executes e.g exec_96000.py
Code:
from subprocess import *
import time
from websocket import create_connection
ws = create_connection("ws://127.0.0.1:3011")
ws.send("setconfigname:/home/tc/DSP_Engine/filters/null_96000.yml")
ws.send("reload")
So to answer your'e quistion, if you have music with 96000Hz you also have to have an .yml with this samplerate and fir's/biquads with the right samplerate too!
If you just leave the null_96000.yml as is, the thing will work when samplerate is changing to 96000Hz, running through a filter without anything applied to the pipeline, except for clipgain 0.0dB
Code:
---
devices:
samplerate: 96000
buffersize: 8192
target_level: 4096
adjust_period: 5
capture:
type: Alsa
channels: 2
device: "camilla_in"
format: S32LE
playback:
type: Alsa
channels: 2
device: "sound_out"
format: S32LE
filters:
clipgain_L:
type: Gain
parameters:
gain: -0.0
inverted: false
clipgain_R:
type: Gain
parameters:
gain: -0.0
inverted: false
pipeline:
- type: Filter
channel: 0
names:
- clipgain_L
- type: Filter
channel: 1
names:
- clipgain_R
And yes the .yml's must point to the right filters:
This is a .yml from my "real" Player:
(I run two filters a Prefilter and the final correction filter as can be seen in the .yml)
Code:
---
devices:
samplerate: 44100
buffersize: 4096 #8192
target_level: 2048 #4096
adjust_period: 5
capture:
type: Alsa
channels: 2
device: "camilla_in"
format: S32LE
playback:
type: Alsa
channels: 2
device: "sound_out"
format: S32LE
filters:
L_prefir:
type: Conv
parameters:
type: File
filename: [COLOR="Red"]/home/tc/DSP_Engine/filters/44100/L_red_RP_Pre_44100.bin[/COLOR]
format: FLOAT32LE
R_prefir:
type: Conv
parameters:
type: File
filename: [COLOR="red"]/home/tc/DSP_Engine/filters/44100/R_red_RP_Pre_44100.bin[/COLOR]
format: FLOAT32LE
L_fir:
type: Conv
parameters:
type: File
filename: [COLOR="red"]/home/tc/DSP_Engine/filters/44100/L_normal_44100.bin[/COLOR]
format: FLOAT32LE
R_fir:
type: Conv
parameters:
type: File
filename: [COLOR="red"]/home/tc/DSP_Engine/filters/44100/R_normal_44100.bin[/COLOR]
format: FLOAT32LE
clipgain_L:
type: Gain
parameters:
gain: -6.0
inverted: false
clipgain_R:
type: Gain
parameters:
gain: -6.0
inverted: false
pipeline:
- type: Filter
channel: 0
names:
- L_prefir
- type: Filter
channel: 1
names:
- R_prefir
- type: Filter
channel: 0
names:
- L_fir
- type: Filter
channel: 1
names:
- R_fir
- type: Filter
channel: 0
names:
- clipgain_L
- type: Filter
channel: 1
names:
- clipgain_R
Make's sense ???
Jesper.
Hi Jesper. I got the auto sample rates working with my filters. But only if I kill squeezelite-custom and restart it using your parameters after reboot. viz :
sudo /mnt/mmcblk0p2/tce/squeezelite-custom -n piCorePlayer -o squeeze -a 160:4::1 -b 10000:20000 -r 44100-192000:2500 -U -U -z
After that the PS command shows in putty :
/mnt/mmcblk0p2/tce/squeezelite-custom -n piCorePlayer -o squeeze -a 160 4 1 -b 10000 20000 -r 44100 192000 2500 -U -U -z
Without killing squeezelite-custom after reboot I get this from PS :
/mnt/mmcblk0p2/tce/squeezelite-custom -n piCorePlayer -o squeeze -a 160 4 1 -b 10000 20000 -r 44100 192000 2500 -U -U
Is the problem the -z option? or the extra space before -b? I can't see how to set -z in the pcp web interface. What does it do?
sudo /mnt/mmcblk0p2/tce/squeezelite-custom -n piCorePlayer -o squeeze -a 160:4::1 -b 10000:20000 -r 44100-192000:2500 -U -U -z
After that the PS command shows in putty :
/mnt/mmcblk0p2/tce/squeezelite-custom -n piCorePlayer -o squeeze -a 160 4 1 -b 10000 20000 -r 44100 192000 2500 -U -U -z
Without killing squeezelite-custom after reboot I get this from PS :
/mnt/mmcblk0p2/tce/squeezelite-custom -n piCorePlayer -o squeeze -a 160 4 1 -b 10000 20000 -r 44100 192000 2500 -U -U
Is the problem the -z option? or the extra space before -b? I can't see how to set -z in the pcp web interface. What does it do?
Hi...
The two lines actually does the same thing.
The -z you paste when starting it manually is only to have it running as a daemon.
When squeezeite-custom is started at boot, it is started through some script doing the same thing as the -z daemon.
What you shhould do is to change the parameters in the squeezelite webinterface, save the settings and watch for that pCP telling you that squeezelite is running.
I'am sure that problem is the pCP squeezelite settings!
When i start my testrig player the ps outout is like this ;
Jesper.
After that the PS command shows in putty :
/mnt/mmcblk0p2/tce/squeezelite-custom -n piCorePlayer -o squeeze -a 160 4 1 -b 10000 20000 -r 44100 192000 2500 -U -U -z
Without killing squeezelite-custom after reboot I get this from PS :
/mnt/mmcblk0p2/tce/squeezelite-custom -n piCorePlayer -o squeeze -a 160 4 1 -b 10000 20000 -r 44100 192000 2500 -U -U
The two lines actually does the same thing.
The -z you paste when starting it manually is only to have it running as a daemon.
When squeezeite-custom is started at boot, it is started through some script doing the same thing as the -z daemon.
What you shhould do is to change the parameters in the squeezelite webinterface, save the settings and watch for that pCP telling you that squeezelite is running.
I'am sure that problem is the pCP squeezelite settings!
When i start my testrig player the ps outout is like this ;
tc@piCorePlayer:~$ ps aux | grep squeezelite*
1432 root 0:01 /mnt/mmcblk0p2/tce/squeezelite-custom -n piCorePlayer -o squeeze -a 80 4 1 -b 10000 20000 -r 44100 192000 2500 -s 192.168.1.29 -U -U
Jesper.
Attachments
Minor update: I have now tested v0.3.1 enough to make it a proper release. There are new binaries to download but they contain no changes from the 0.3.1-alpha. No need to update if you are already running that one.
Another piece of news is that I now have a proper Mac to test things on. Right now I'm using it to listen to music with Spotify -> virtual sound card (BlackHole) -> CamillaDSP (dummy filter, resampling and rate adjust active) -> built in headphone output. It's working just fine 🙂
Oh and one more thing. I have started building a gui for configuring CamillaDSP. It's based on React.js, so it runs in the browser and will communicate with CamillaDSP via the websocket server. Remote control will be possible! At the moment it's mostly a mock-up and I probably need at least a few more weeks before it's usable. I'm quite new to React (and javascript) so it's not going very fast but it's a very useful learning experience.
Another piece of news is that I now have a proper Mac to test things on. Right now I'm using it to listen to music with Spotify -> virtual sound card (BlackHole) -> CamillaDSP (dummy filter, resampling and rate adjust active) -> built in headphone output. It's working just fine 🙂
Oh and one more thing. I have started building a gui for configuring CamillaDSP. It's based on React.js, so it runs in the browser and will communicate with CamillaDSP via the websocket server. Remote control will be possible! At the moment it's mostly a mock-up and I probably need at least a few more weeks before it's usable. I'm quite new to React (and javascript) so it's not going very fast but it's a very useful learning experience.
Oh and one more thing. I have started building a gui for configuring CamillaDSP. It's based on React.js, so it runs in the browser and will communicate with CamillaDSP via the websocket server. Remote control will be possible! At the moment it's mostly a mock-up and I probably need at least a few more weeks before it's usable. I'm quite new to React (and javascript) so it's not going very fast but it's a very useful learning experience.
Looking forward to this 🙂
I guess you give the possibilities to configure the .yml files online, with all it's parameters (chunksize, samplerate, resampling, gain etc... etc..)
Well i donno if you have the option in mind to make it possible to apply some EQ directly to the pipeline. Let me explain: I have some filter which i could find very interessting to have some EQ applied at maybe the "bass <200Hz" area, this way i can better determine if i bother to make some new filters/firs for this!... hope you understand?
Aka'a a standalone apply able equalizer 😀
Jesper.
Oh and one more thing. I have started building a gui for configuring CamillaDSP. It's based on React.js, so it runs in the browser and will communicate with CamillaDSP via the websocket server. Remote control will be possible! At the moment it's mostly a mock-up and I probably need at least a few more weeks before it's usable. I'm quite new to React (and javascript) so it's not going very fast but it's a very useful learning experience.
Very cool. I would suggest switching to typescript. It’s much cleaner and let’s you make less mistakes. I could give you some pointers here and there.
...
- that I now have a proper Mac ...
- I have started building a gui for configuring CamillaDSP. ...
Wicked * 2 !!
//
Yes that is exactly the plan!Looking forward to this 🙂
I guess you give the possibilities to configure the .yml files online, with all it's parameters (chunksize, samplerate, resampling, gain etc... etc..)
This is how it looks right now. Devices and filters are almost done, I'm working on mixers, and haven't started on the pipeline yet. Yes I know it's ugly, but I won't spend time on the looks until it's working 🙂

It will be easy to add for example a shelf to boost/attenuate everything <200Hz. Or a Peaking filter to only modify around a specific frequency. Is this what you mean?Well i donno if you have the option in mind to make it possible to apply some EQ directly to the pipeline. Let me explain: I have some filter which i could find very interessting to have some EQ applied at maybe the "bass <200Hz" area, this way i can better determine if i bother to make some new filters/firs for this!... hope you understand?
Aka'a a standalone apply able equalizer 😀
Jesper.
Hmm yes that's probably a good idea. At work we use both javascript and typescript, but new projects tend to be mostly typescript.Very cool. I would suggest switching to typescript. It’s much cleaner and let’s you make less mistakes. I could give you some pointers here and there.
It's a Macbook Pro from mid 2012. It's slow and heavy but gets the job done 🙂Wicked * 2 !!
//
Would be really great if the ui would plot the actual combined frequency/phase response of a channel. You could use something like react-charts for that. This might help converting the FIR (and IIR) coefficients to frequency and phase response graphs. And if you can actually do that, than it's a small step to also incorporate the frequency response of the unfiltered system, so you can immediately see what your doing. Final major milestone would be a proper FIR filter designer via a web interface 😀
Yes I think some plotting would be quite useful. First I'll just make it work, then the plan is to start by including the functionality of the show_config python script. That will keep me busy for a while. Then we'll see about more stuff 🙂Would be really great if the ui would plot the actual combined frequency/phase response of a channel. You could use something like react-charts for that. This might help converting the FIR (and IIR) coefficients to frequency and phase response graphs. And if you can actually do that, than it's a small step to also incorporate the frequency response of the unfiltered system, so you can immediately see what your doing. Final major milestone would be a proper FIR filter designer via a web interface 😀
Thanks for the tips on fili and react-charts, they seem to have a lot of the stuff I will need.
Trying to apply a fir filter on a file. all I get as output file is noise.
Can anyone point me where is the error?
Command:
Can anyone point me where is the error?
Code:
devices:
samplerate: 88200
chunksize: 65536
enable_resampling: true
resampler_type: AccurateAsync
queuelimit: 128
capture_samplerate: 44100
capture:
type: File
channels: 2
filename: /opt/02.wav
format: S16LE
playback:
type: File
channels: 2
filename: /dev/stdout
format: S24LE
filters:
fir:
type: Conv
parameters:
type: File
filename: /opt/impulse.txt
format: TEXT
pipeline:
- type: Filter
channel: 0
names:
- fir
- type: Filter
channel: 1
names:
- fir
Command:
Code:
camilladsp /opt/test88.yml | sox -V4 -G -t raw -b 24 -e signed-integer -c 2 -r 88200 -L - -t wav out.wav
Have you observed Camilla SSH terminal output using Putty when you execute that command? If so maybe post it here.
Last edited:
Yes that is exactly the plan!
This is how it looks right now. Devices and filters are almost done, I'm working on mixers, and haven't started on the pipeline yet. Yes I know it's ugly, but I won't spend time on the looks until it's working 🙂
View attachment 862714
It will be easy to add for example a shelf to boost/attenuate everything <200Hz. Or a Peaking filter to only modify around a specific frequency. Is this what you mean?
Yes, more or less.
Well i'am not programmer, but having the possibility to apply the EQ directly to the "pipeline" will make life easier for me 🙂
Anyway how do i make an boost from around 200Hz to 20Hz most easy as it is now?
Jesper.
A flat boast (Shelf) or a gradually rising boast (Peak)?
Shelf:
filters:
shelf:
type: Biquad
parameters:
type: Highshelf
freq: 200
slope: 6
gain: 3
or...
Peak:
filters:
peak:
type: Biquad
parameters:
type: Peaking
freq: 20000
q: 0.5
gain: 3
This is me trying to do educated-guessing as I have not yet run the Camilla system.. but I checked the git-hub examples.
//
Shelf:
filters:
shelf:
type: Biquad
parameters:
type: Highshelf
freq: 200
slope: 6
gain: 3
or...
Peak:
filters:
peak:
type: Biquad
parameters:
type: Peaking
freq: 20000
q: 0.5
gain: 3
This is me trying to do educated-guessing as I have not yet run the Camilla system.. but I checked the git-hub examples.
//
- Home
- Source & Line
- PC Based
- CamillaDSP - Cross-platform IIR and FIR engine for crossovers, room correction etc