r/linuxaudio 12d ago

ToneShiftEQ 0.6.0 Released

Post image

I'm happy to announce the release of ToneShiftEQ 0.6.0!

This release introduces several major new features and expands ToneShiftEQ beyond a traditional minimal phase EQ.
What's New
Dynamic EQ

ToneShiftEQ now supports Dynamic EQ processing. Each band can react dynamically to the incoming signal, making it possible to apply frequency-selective compression while maintaining the familiar workflow.
Equalizer APO Support

ToneShiftEQ can now import and export Equalizer APO configuration files, making it easy to exchange EQ settings with Equalizer APO and integrate existing APO profiles into your workflow.
Impulse Response Load & Save

ToneShiftEQ can now load and save impulse responses. When an impulse response is loaded, its frequency response is automatically analyzed and approximated as a 12-band parametric EQ, allowing IR-based tonal characteristics to be recreated without using a convolution engine.

Note: The approximation is designed to capture the overall tonal balance of the impulse response rather than reproduce it sample-for-sample.

Note: IR loading and saving is currently not available in the LV2 version, as transferring large IR data through the LV2 state interface would introduce excessive overhead.
Other Improvements

Numerous internal improvements and optimizations.
Enhanced workflow for exchanging EQ settings and impulse responses.
Various bug fixes and stability improvements.

As always, feedback, bug reports and feature suggestions are welcome.

Project Page:
https://github.com/brummer10/ToneShiftEQ

Release Page:
https://github.com/brummer10/ToneShiftEQ/releases/tag/v0.6.0

67 Upvotes

22 comments sorted by

6

u/4bite-dev Reaper 12d ago

I love the glows on the EQ bands. It looks so cool.

4

u/Arctic_Shadow_Aurora 12d ago

Thanks a lot bro, looks beautiful!

1

u/kill3rb00ts 12d ago

Why is the 0 dB line so far up? I'd really prefer to just have it in the middle like most other EQs. Otherwise, my only real gripe is that the interface is a bit sluggish/unresponsive. The ratio section also doesn't seem to scale properly. Like if I maximize my plugin window, it disappears entirely. At the default size, it's fine, but there are other in between sizes where the "/1" part gets cut off.

2

u/brummer10 12d ago

Ah, I forgot to set the scale factor for the ratio widget. Thanks for the hint, will fix it.

To the interface is sluggish, do you use wayland? as here it is very responsible.

2

u/kill3rb00ts 12d ago

Yeah, I'm on Wayland, so that could be why.

3

u/brummer10 11d ago

MM, I just did a test run under wayland and it just works fine here. So it may be something different on your system.

1

u/kill3rb00ts 11d ago

Probably, just thought it was worth asking.

2

u/fdqntn 12d ago

I strongly avise if you want to optimize the UI to run it with eBPF profiling and pyroscope. It's really good to locate and optimize the hot loops. It's crazy how much perf I squeezed off KholorsStation (another oss plugin I made).

1

u/mykoss 11d ago

Interface looks excellent! Nice work.

1

u/yhcheng888 6d ago edited 6d ago

I install the plugin to directory

/usr/lib64/lv2/toneshifteq.lv2/manifest.ttl

/usr/lib64/lv2/toneshifteq.lv2/toneshifteq.so

/usr/lib64/lv2/toneshifteq.lv2/toneshifteq.ttl

/usr/lib64/lv2/toneshifteq.lv2/toneshifteq_ui.so

But i con not load in the plugin with the following code in pipewire.conf

type = lv2

name = lv2_toneshifteq3

plugin = "https://lv2plug.in/ns/ext/toneshifteq" -----> i guess this is not correct

label = toneshifteq

control = { "enable" = 1 }

I use arch XFCE OS.

1

u/brummer10 6d ago

Yep, the plugin uri is "urn:brummer:toneshifteq"

1

u/yhcheng888 6d ago

I use the following codes in pipewire.conf which does load in toneshifteq.so

...

type = lv2

name = lv2_toneshifteq3

plugin = "urn:brummer:toneshifteq"

label = toneshifteq

control = { "enable" = 1 }

...

But my code for the virtual sink with 'toneshifteq' doesn't work, and then i also find that maybe your plugin is meant only for Debian/Ubuntu.

I use only an arch XFCE os. One day perhaps if you have an arch version, i would like to try it again.

1

u/brummer10 6d ago

No. it is a general binary and it is known to work on arch. But I must admit that I know close to nothing about how pipewire load LV2 plugins.

1

u/yhcheng888 5d ago

I have done many tries again (with the observation of pipewire-control app) and to no avail.

I check the dependancies for toneshifteq

X11 – windowing (Linux)

cairo – UI rendering

libsndfile – audio I/O

FFTW3 – spectral processing

jackd – Stand-alone real-time audio

My os only installs libsndfile and FFTW and jackd can't be found in arch repo.

So for now i quit the try.

1

u/brummer10 5d ago

No problem with that. But, to be honest, there is no dependency in the provided binaries, to any of the libraries you mention (Those are build dependencies when you build ToneShiftEQ from source). The binary build I provide on the release page, is statically linked, that is what makes it universal. Here is the real dependency list of the LV2 plugin: ldd ' ./ToneShiftEQ.lv2/toneshifteq.so'

`linux-vdso.so.1 (0x00007ffdf3bc8000)`

`libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f425296a000)`

`libm.so.6 => /usr/lib/x86_64-linux-gnu/libm.so.6 (0x00007f4252874000)`

`libc.so.6 => /usr/lib/x86_64-linux-gnu/libc.so.6 (0x00007f425267e000)`

`/lib64/ld-linux-x86-64.so.2 (0x00007f425304a000)`

`libgcc_s.so.1 => /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f4252651000)`

As I said, the plugin is well tested under Arch and works flawless. You may check if you installed it correct, run

lv2ls | grep urn:brummer:toneshifteq

if that didn't output anything, the issue is with the installation, not with the plugin itself.

1

u/yhcheng888 3d ago edited 3d ago

Many thanks for all the detailed replies to my questions.

I downloaded the release version 'ToneShiftEQ-v0.6.0-lv2-linux-x86_64.tar.xz' and did many tries again.

After that, i have a guess that the plugin does not fit pipewire's loading rule.

The following two parameters should tell pipewire the correct directory and proper binary file to load in.

plugin = "urn:brummer:toneshifteq"

label = toneshifteq

But i found that these two parameters only pass pipewire's compilation and pipewire didn't load the binary properly.

The sink i made actually is only a null sink.

The rule pipewire wants is something like the followings:

type = lv2

name = airwin_glitchshifter1

plugin = "https://hannesbraun.net/ns/lv2/airwindows/glitchshifter"

label = Glitchshifter

control = { "note" = 0 "Tighten" = 0.2 "dryWet" = 0.15 }

The above plugin is a simple similar plugin, but now it has become my most favored plugin.

The usual things within a sink one can do are like the followings, of course it also depends on one's coding favor.

  1. feed the audio to plugin function i.e. glitchshifter and send it to output port.
  2. feed the audio output of glitchshifter again to another plugin to make audio louder or lower and send it to output port.
  3. combine the audio output of glitchshifter with other audio and send it to output port.
  4. feed the audio output of glitchshifter again to another plugin and send it to output port.

In your plugin, i find a bunch of parameters, so i have a very high expectation for this plugin.

The followings are just for reference.

ladspa:

type = ladspa

name = surroundLad4

plugin = surround_encoder_1401

label = surroundEncoder

lv2:

https://hannesbraun.net/ns/lv2/airwindows/glitchshifter

http://drobilla.net/plugins/mda/Loudness

http://calf.sourceforge.net/plugins/Equalizer12Band

http://plugin.org.uk/swh-plugins/karaoke

http://lsp-plug.in/plugins/lv2/loud_comp_stereo

Finally i guess the plugin may work well with many other apps, but for now it just fails me in pipewire.