Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enhancement: GIG file support #786

Closed
floft opened this issue May 30, 2014 · 5 comments
Closed

Enhancement: GIG file support #786

floft opened this issue May 30, 2014 · 5 comments

Comments

@floft
Copy link
Contributor

floft commented May 30, 2014

For a while I've wished to use the Maestro Concert Grand on linuxsampler.org in LMMS. While you can use Linux Sampler with LMMS through Jack, I tend to use LMMS with ALSA and separately most other audio software with Jack (e.g. do what I want in LMMS, export it, then use other software with Jack) since in my experience LMMS doesn't play nicely with Jack and other applications (e.g. no Jack transport support). I finally decided to play around with this idea, so I copied the SF2 player plugin and used libgig to load GIG files, you can find this in my fork of LMMS.

It is very slow and limited compared to Linux Sampler (e.g. playing 20 notes at once with a large GIG file will cause glitching). I didn't code anywhere near all of the features of the file format. It seems like a waste since Linux Sampler is so much superior. And, I know on the mailing list there was at least one person who isn't fond of this idea. I'm wondering about whether this should be done, and if so, how.

I tried using libgig with the rest in an LMMS plugin, but it seems like there's a lot of duplicate code with Linux Sampler. I don't believe that Linux Sampler can be directly linked to by plugin, but I could be wrong.

Maybe instead Jack Transport support (#523) is a better idea and just leave GIG files to Linux Sampler, or just output to Linux Sampler via LMMS's MIDI output. Any thoughts?

@diizy
Copy link
Contributor

diizy commented May 30, 2014

On 05/30/2014 06:36 AM, Garrett Wilson wrote:

For a while I've wished to use the Maestro Concert Grand on
linuxsampler.org http://linuxsampler.org/instruments.html in LMMS.
While you can use Linux Sampler with LMMS through Jack, I tend to use
LMMS with ALSA and separately most other audio software with Jack
(e.g. do what I want in LMMS, export it, then use other software with
Jack) since in my experience LMMS doesn't play nicely with Jack and
other applications (e.g. no Jack transport support). I finally decided
to play around with this idea, so I copied the SF2 player plugin and
used libgig to load GIG files, you can find this in my fork
https://github.com/floft/lmms of LMMS.

It is very slow and limited compared to Linux Sampler (e.g. playing 20
notes at once with a large GIG file will cause glitching). I didn't
code anywhere near all of the features of the file format. It seems
like a waste since Linux Sampler is so much superior. And, I know on
the mailing list there was at least one person
http://sourceforge.net/p/lmms/mailman/message/23483593/ who isn't
fond of this idea. I'm wondering about whether this should be done,
and if so, how.

Well, I don't think we should put too much weight to what one person
said 5 years ago.

Perhaps your code could be optimized to work better and faster. Then if
it's also stable and works well, I personally see no reason not to
include it in some future release of LMMS. 1.1 is on feature freeze but
could be possible for 1.2 or any version after.

I tried using libgig with the rest in an LMMS plugin, but it seems
like there's a lot of duplicate code with Linux Sampler. I don't
believe that Linux Sampler can be directly linked to by plugin, but I
could be wrong.

I've never tried Linux Sampler, I tend to work with simple wav/flac
sample files, so I have no idea whether this is possible. In
ZynAddSubFx, we use an interface provided by Zyn that allows Zyn to
basically work like a plugin, even though it runs as a separate process.
If Linux Sampler has something similar, then it could work in a similar
way with LMMS.

Maybe instead Jack Transport support (#523
#523) is a better idea and just
leave GIG files to Linux Sampler, or just output to Linux Sampler via
LMMS's MIDI output. Any thoughts?

Well, this is my personal view on things, so don't take this as gospel,
but:

LMMS isn't really built to work like most of the other Linux audio
software. Most other Linux audio software are designed from the start to
be very modular - built for a workflow where you wire up several
different programs together via Jack etc. LMMS is more of a "all-in-one,
batteries included" kind of deal. And I think that's fine - it fulfills
a niche that most others are not trying to fulfill, it'd be pointless
for LMMS to try out-Ardouring Ardour, or to be the new Qtractor in place
of the Qtractor.

One of the big problems with connecting separate programs to LMMS via
Jack is that they would not be compatible with LMMS's Export-function. I
understand that Jack has a "freewheeling mode" that could be used to
support non-linear host-controlled timing for export purposes, but
support for that would have to be coded for LMMS, and I've no idea how
big of a task that would be.

That said - I don't believe that there would be any opposition for
commits that improve the Jack support in LMMS, as long as they don't
break any of the existing core functionality.

@diizy
Copy link
Contributor

diizy commented May 30, 2014

Also, forgot to mention this:

There is currently work being done to implement LV2 support for LMMS.
It's still in very early phase, but I understand Linux Sampler has a LV2
version, so when the LV2 support gets done, you could probably run it in
LMMS as a LV2 plugin?

@floft
Copy link
Contributor Author

floft commented May 30, 2014

On Thu, 29 May 2014 21:01:30 -0700
Vesa V [email protected] wrote:

I tried using libgig with the rest in an LMMS plugin, but it seems
like there's a lot of duplicate code with Linux Sampler. I don't
believe that Linux Sampler can be directly linked to by plugin, but
I could be wrong.

I've never tried Linux Sampler, I tend to work with simple wav/flac
sample files, so I have no idea whether this is possible. In
ZynAddSubFx, we use an interface provided by Zyn that allows Zyn to
basically work like a plugin, even though it runs as a separate
process. If Linux Sampler has something similar, then it could work
in a similar way with LMMS.

I'll take a look at how ZynAddSubFx works. There's also a liblscp for
Linux Sampler that may or may not help. I'll have to go read their
documentation more thoroughly.

There is currently work being done to implement LV2 support for LMMS.
It's still in very early phase, but I understand Linux Sampler has a
LV2 version, so when the LV2 support gets done, you could probably run
it in LMMS as a LV2 plugin?

Maybe it would be better to just wait for that.

@softrabbit
Copy link
Member

I don't see why JACK transport would be needed to use Linuxsampler? The transport is for keeping sequencers (and arpeggiators etc.) in sync with each other, which is something pretty different from controlling instruments.

@floft
Copy link
Contributor Author

floft commented May 30, 2014

On Fri, 30 May 2014 00:35:29 -0700
"Raine M. Ekman" [email protected] wrote:

I don't see why JACK transport would be needed to use Linuxsampler?
The transport is for keeping sequencers (and arpeggiators etc.) in
sync with each other, which is something pretty different from
controlling instruments.

It's not needed. But from what I've seen, it's more convenient to use
Linux Sampler with another program and just keep them in sync. As far
as I know, if you want to output to Linux Sampler via midi in LMMS, you
have to use an instrument such as the AudioFileProcessor that you can
leave blank (or you could mute it). Then, if you want to export your
track, you'd have to route all audio output to something to record with
Jack and record in real time (or potentially make LMMS use "freewheeling
mode" as Vesa mentioned). If instead you synced two programs such as
Ardour and LMMS, then you could export from both and overlay the
outputs. So, either Jack Transport or a better export method would make
this more convenient. If there's an easier way, I am unaware of it,
that's why I mentioned Jack Transport.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants