Rust Audio

Announcement: Sonarigo – A sampling instrument (LV2 + JACK)

Sonarigo is a project, that I started recently aiming at building a sampling instrument mainly for SFZ soundfont files as LV2 plugin.

Now that the thing works rudimentary at least with the Salamander Grand Piano soundfont, I decided to go public with it.

See the README.md on the repository page for more information.

I am welcoming issues, PRs and other kind of feedback.

2 Likes

This is so cool!

I’ve tried it, but unfortunately I couldn’t get the LV2 version working. I’ve created pull requests for the issues that I was able to solve. (Another issue that I had to solve, unrelated to sonarigo, was that I had to tell Qtractor where to find sonarigo.) Remaining issues with the LV2 plugin under Qtractor are:

  • No sound. This may also be because of my set-up (I’m only using Qtractor for a couple of weeks now). I’ve tried another lv2 plugin and that worked.
  • I have the impression that the memory was not released when I unloaded the plugin (I only have 4Gb of RAM on my machine, so this was easily noticeable with the huge piano library). I don’t know how LV2 manages the memory, so this may also be an issue with the host.

Anyway nice work! I’m looking forward to seeing how it evolves (will try the jack version in the meanwhile).

Thanks for the PRs. I merged both of them.

As for the other issues:

  • I will try with Qtractor to see if it works on my system. I haven’t tried on Qtractor, I’m more into Ardour
  • I will look into it. LV2 plugins written in C have to free their structs on their own, when cleanup() is called. I would guess that rust-lv2 drops the plugin struct automatically, which would drop the Vec which finally contains all the data.

Nevertheless it would be nice to have the audio data disk streamed but that’s not that easy to implement. We’ll see.

Some tips for trying it out in Qtractor:

  1. set LV2_PATH to $HOME/.lv2 before starting Qtractor
  2. here are the docs for using plugins in Qtractor (I had a hard time finding these with a search engine)

I think this is currently blocked by this pull request (at least, that’s what I would use when it was merged, but maybe LV2 provides a means for passing data lock-free).

B.t.w. installing sonarigo was much easier than installing linuxsampser from source :slight_smile:

I tried it in Qtractor and it worked. The only difficulty for me was that it was my first time that I launched Qtractor.

One general note about Sonarigo, however. I had some discussions on IRC and there it turned out that there is already a modern sfz implementation sfizz which does implement everything that I was aiming at, including disk streaming. That does not mean that I will abandon Sonarigo, but I work on it with a lower priority. There are other LV2 plugins that I wanted to write that are more urgently needed. One big thing is the work on a LV2 GUI framework, as I have already announced here.

1 Like

Ok. I’ve heard that Qtractor is not stable as a plugin host, so this means that I’m probably going to use Carla instead, so no need to worry about that.

Perfectly understandable. Open source developer’s resources are scarce, so focusing is important and I would make the same choice if I was in your place.