• 1 Post
  • 2 Comments
Joined 1 year ago
cake
Cake day: July 10th, 2023

help-circle
  • I was actually not aware of the RFC or those other crates. Ambassador and portrait seem kindof similar in their overall approach to how they accomplish things, though portrait appears to be solving a very different problem. My crate allows for forwarding based on conversions and not just delegation to members, which appears to be new (and this turns out to be important for my use-case.). It doesn’t have anything for dealing with code that isn’t in traits, but I wasn’t intending to solve that problem.

    I absolutely see why it would be nice to put delegation in at the language level. Most libraries aren’t going to want to annotate their trait definitions just for this (std included), and having the compiler take care of things solves not only that, but also the annotation data format version issues that come with using proc-macros to do it.

    It’s a bit weird, though, because my conversion forwarding is actually strictly more powerful than delegation in some ways (but a little less flexible - mixing them grants the best of both techniques). Conversion forwarding allows for traits like FromIterator to be forwarded automatically for wrappers on containers, for example. You can’t do that with delegates. It feels to me like you’d want both if you added either one of them in. The issue with trying to put something like conversion forwarding in is that the compiler either needs to know about the conversion traits (From, Into, AsRef, and AsRefMut)(As I write this, I realize I may have made a mistake in my crate… can guess what it is?) or it would need to be told how to do the conversions, complete with all additional generic parameters and trait bounds that would be required in the trait implementation. That’s either violating some important abstraction boundaries in the language tools, or just extremely verbose.



  • I actually recently just did research on this for my own purposes.

    • Ardour isn’t really for MIDI. It technically supports it, and people do use it with some success, but the implementation is buggy and somewhat limited compared to other DAWs. If you’re primarily doing recording and working with audio clips, though, Ardour works great.
    • LMMS only does MIDI, and basically doesn’t handle recording audio at all. The interface is known to be a bit archaic. I don’t know exactly how it compares feature-wise to other DAWs. It might be great if MIDI/synthesizers is all you want to do.
    • zrhythm looks really good, but unless you wanna pay for an installer, building it from source is a wee bit of a pain due to dependency version issues. There is an AUR package, but it failed to build for me.

    Those are the FLOSS options that I know about. There may be others, I didn’t really look at them. They would be even less popular than the ones that I’ve listed above.

    In the end, I chose REAPER. It’s not free, but the trial period is effectively indefinite (the software does not cripple itself after the 60 day period officially passes). The personal license is quite reasonably-priced ($60 USD), and the commercial one ($225 USD) is still not too bad if you want to use it professionally. It’s a one-time purchase. You don’t need new licenses for updates. It’s Linux-native, and it does all the things.

    As far as plugins go, the FLOSS software has got you covered. Zynaddsubfx is kindof famous, and Cardinal is a really good modular synth (inspired by VCV rack, which is also free and available). Vital is also quite reputable. There’s a whole pile of things available: https://wiki.archlinux.org/title/List_of_applications/Multimedia#Audio_synthesis_environments

    As far as installation goes, all of this is available from either extra or the AUR.