setBfree more cheesy => improved combo organ sound!

Hi organ lovers!

I just pushed some improvements to the setBfree engine that increases its possibilities as a combo organ emulator:

  • Fixed harmonic phase values for the triangle waveform. Now it sounds as it should!
  • Added sawtooth waveform to the list, what increase the palette of combo organ sounds.

Available on vangelis. Just update and enjoy!

The best!

11 Likes

Can you elaborate a bit on the waveforms. In setbfree on a regular system (package-manager provided), I cannot choose between different waveforms at all. Is this a recent addition to setbfree or is it that zynthian provides the waveform for setbfree to handle?

IIUC the B3 only produced sine waveforms, which were altered by the preamp.

Of course experimenting is nice, but what choice of waveform in Zynthian comes closest to the original sound?

1 Like

Hi @niels!

Waveform selection is part of the “new engine” wizard that you step through when adding a setBfree chain. Sine is the default as it matches the B3 tone wheels but setBfree offers alternatives for those who want more harmonics in their sound.

the alternate wavesforms are a zynthian tweak over the setBfree engine. You won’t find this on the repo package.

2 Likes

Thanks for the explanation. Currently it seems impossible to switch waveforms without removing the processor and adding it again. Are there big obstacles to make this possible?

1 Like

Is everyone here just using a single manual of setbfree?

I created two issues with multiple manuals on Vangelis January 10th, but they have not yet received any activity, which strikes me as odd, especially since (nice) stuff like this is being developed.

By the way, to answer my own question: yes, there are (probably insurmountable) obstacles to switching waveform on the fly: a config file is written containing the required waveform, after which setbfree is started.

2 Likes

Yes. We could restarte the engine quite fast, but changing waveform without stop playing is not posible.
But perhaps it’s time to remove the one-instance limitation… i think now it’s possible.

Regards

Be aware that setBfree runs all of its processing continually, i.e. it does not ramp CPU usage based on playing. Multiple instances could add substantial resources burden.

setBfree is really light, and It is the user who decide how many instances. I’m not thinking of running several instances in one processor.

But the best option would be implementing waveform change inside setBfree code. It shouldn’t be too complex.

I find this issue really annoying.

2 Likes

i will fix ASAP

1 Like

Grazie boss!

1 Like

It’s fixed on Vagelis.
I don’t know if the issues are also present in Oram, but i’m not going to solve because Vangelis release is not far and current Vangelis status is quite stable :wink:

2 Likes

On oram there were no such issues. Thanks for fixing, will try it soon!

2 Likes

Fixed!!!

Almost working. We re-adding setbfree with multiple manuals, the controls and option pages for the second manual are unavailable. Luckily, an error is thrown:

Jun 06 14:33:10 zynbleton startx[4761]: ERROR:zynthian_gui.cuia_thread_task: CUIA 'zynswitch' failed with params: (3, 'S')
Jun 06 14:33:10 zynbleton startx[4761]: Traceback (most recent call last):
Jun 06 14:33:10 zynbleton startx[4761]:   File "/zynthian/zynthian-ui/zyngui/zynthian_gui.py", line 2735, in cuia_thread_task
Jun 06 14:33:10 zynbleton startx[4761]:     self.zynswitch_short(i)
Jun 06 14:33:10 zynbleton startx[4761]:   File "/zynthian/zynthian-ui/zyngui/zynthian_gui.py", line 2336, in zynswitch_short
Jun 06 14:33:10 zynbleton startx[4761]:     if self.screens[self.current_screen].switch(i, 'S'):
Jun 06 14:33:10 zynbleton startx[4761]:        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Jun 06 14:33:10 zynbleton startx[4761]:   File "/zynthian/zynthian-ui/zyngui/zynthian_gui_mixer.py", line 2312, in switch
Jun 06 14:33:10 zynbleton startx[4761]:     return self.switch_select(t)
Jun 06 14:33:10 zynbleton startx[4761]:            ^^^^^^^^^^^^^^^^^^^^^
Jun 06 14:33:10 zynbleton startx[4761]:   File "/zynthian/zynthian-ui/zyngui/zynthian_gui_mixer.py", line 2255, in switch_select
Jun 06 14:33:10 zynbleton startx[4761]:     self.zyngui.chain_control()
Jun 06 14:33:10 zynbleton startx[4761]:   File "/zynthian/zynthian-ui/zyngui/zynthian_gui.py", line 1102, in chain_control
Jun 06 14:33:10 zynbleton startx[4761]:     self.screens["chain_control"].reset()
Jun 06 14:33:10 zynbleton startx[4761]:   File "/zynthian/zynthian-ui/zyngui/zynthian_gui_chain_control.py", line 105, in reset
Jun 06 14:33:10 zynbleton startx[4761]:     self.set_chain()
Jun 06 14:33:10 zynbleton startx[4761]:   File "/zynthian/zynthian-ui/zyngui/zynthian_gui_chain_control.py", line 139, in set_chain
Jun 06 14:33:10 zynbleton startx[4761]:     self.chain_canvas.set_chain(self.chain_id)
Jun 06 14:33:10 zynbleton startx[4761]:   File "/zynthian/zynthian-ui/zyngui/zynthian_side_chain.py", line 109, in set_chain
Jun 06 14:33:10 zynbleton startx[4761]:     self.build_graph()
Jun 06 14:33:10 zynbleton startx[4761]:   File "/zynthian/zynthian-ui/zyngui/zynthian_side_chain.py", line 296, in build_graph
Jun 06 14:33:10 zynbleton startx[4761]:     self._draw_graph(proc)
Jun 06 14:33:10 zynbleton startx[4761]:   File "/zynthian/zynthian-ui/zyngui/zynthian_side_chain.py", line 377, in _draw_graph
Jun 06 14:33:10 zynbleton startx[4761]:     if type(proc) != str and type(proc_next) != str and proc.type == proc_next.type and node["slot"] == node_next["slot"]:
Jun 06 14:33:10 zynbleton startx[4761]:                                                                      ^^^^^^^^^^^^^^
Jun 06 14:33:10 zynbleton startx[4761]: AttributeError: 'NoneType' object has no attribute 'type'

Also, when removing the chain from the options page of the lower manual, the screen freezes at the NO / YES dialog, also failing inside zynthian_side_chain.py on the same code:

Jun 06 14:36:24 zynbleton startx[5190]: Exception in Tkinter callback
Jun 06 14:36:24 zynbleton startx[5190]: Traceback (most recent call last):
Jun 06 14:36:24 zynbleton startx[5190]:   File "/usr/lib/python3.11/tkinter/__init__.py", line 1948, in __call__
Jun 06 14:36:24 zynbleton startx[5190]:     return self.func(*args)
Jun 06 14:36:24 zynbleton startx[5190]:            ^^^^^^^^^^^^^^^^
Jun 06 14:36:24 zynbleton startx[5190]:   File "/zynthian/zynthian-ui/zyngui/zynthian_side_chain.py", line 129, in on_size
Jun 06 14:36:24 zynbleton startx[5190]:     self.update_layout()
Jun 06 14:36:24 zynbleton startx[5190]:   File "/zynthian/zynthian-ui/zyngui/zynthian_side_chain.py", line 125, in update_layout
Jun 06 14:36:24 zynbleton startx[5190]:     self._draw_graph()
Jun 06 14:36:24 zynbleton startx[5190]:   File "/zynthian/zynthian-ui/zyngui/zynthian_side_chain.py", line 377, in _draw_graph
Jun 06 14:36:24 zynbleton startx[5190]:     if type(proc) != str and type(proc_next) != str and proc.type == proc_next.type and node["slot"] == node_next["slot"]:
Jun 06 14:36:24 zynbleton startx[5190]:                                                                      ^^^^^^^^^^^^^^
Jun 06 14:36:24 zynbleton startx[5190]: AttributeError: 'NoneType' object has no attribute 'type'
Jun 06 14:36:30 zynbleton startx[5190]: ERROR:zynthian_gui.cuia_thread_task: CUIA 'zynswitch' failed with params: (3, 'S')
Jun 06 14:36:30 zynbleton startx[5190]: Traceback (most recent call last):
Jun 06 14:36:30 zynbleton startx[5190]:   File "/zynthian/zynthian-ui/zyngui/zynthian_gui.py", line 2735, in cuia_thread_task
Jun 06 14:36:30 zynbleton startx[5190]:     self.zynswitch_short(i)
Jun 06 14:36:30 zynbleton startx[5190]:   File "/zynthian/zynthian-ui/zyngui/zynthian_gui.py", line 2353, in zynswitch_short
Jun 06 14:36:30 zynbleton startx[5190]:     self.screens[self.current_screen].switch_select('S')
Jun 06 14:36:30 zynbleton startx[5190]:   File "/zynthian/zynthian-ui/zyngui/zynthian_gui_confirm.py", line 108, in switch_select
Jun 06 14:36:30 zynbleton startx[5190]:     self.zyngui.close_screen()
Jun 06 14:36:30 zynbleton startx[5190]:   File "/zynthian/zynthian-ui/zyngui/zynthian_gui.py", line 760, in close_screen
Jun 06 14:36:30 zynbleton startx[5190]:     self.show_screen(last_screen)
Jun 06 14:36:30 zynbleton startx[5190]:   File "/zynthian/zynthian-ui/zyngui/zynthian_gui.py", line 698, in show_screen
Jun 06 14:36:30 zynbleton startx[5190]:     if not dummy_show and not self.screens[screen].build_view():
Jun 06 14:36:30 zynbleton startx[5190]:                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Jun 06 14:36:30 zynbleton startx[5190]:   File "/zynthian/zynthian-ui/zyngui/zynthian_gui_chain_control.py", line 118, in build_view
Jun 06 14:36:30 zynbleton startx[5190]:     self.refresh_chain()
Jun 06 14:36:30 zynbleton startx[5190]:   File "/zynthian/zynthian-ui/zyngui/zynthian_gui_chain_control.py", line 102, in refresh_chain
Jun 06 14:36:30 zynbleton startx[5190]:     self.chain_canvas.build_graph()
Jun 06 14:36:30 zynbleton startx[5190]:   File "/zynthian/zynthian-ui/zyngui/zynthian_side_chain.py", line 296, in build_graph
Jun 06 14:36:30 zynbleton startx[5190]:     self._draw_graph(proc)
Jun 06 14:36:30 zynbleton startx[5190]:   File "/zynthian/zynthian-ui/zyngui/zynthian_side_chain.py", line 377, in _draw_graph
Jun 06 14:36:30 zynbleton startx[5190]:     if type(proc) != str and type(proc_next) != str and proc.type == proc_next.type and node["slot"] == node_next["slot"]:
Jun 06 14:36:30 zynbleton startx[5190]:                                                                      ^^^^^^^^^^^^^^
Jun 06 14:36:30 zynbleton startx[5190]: AttributeError: 'NoneType' object has no attribute 'type'
1 Like

Sorry, I was too happy for fixing but I tested with upper mode only.
I confirm that no controls and option for second manual.

Sorry, i can’t reproduce. Please, steps to reproduce.

Regards,

OK guys! I could reproduce. Let me fix it …

2 Likes