Changes and additions:
* A plain old Attack/Decay/Sustain/Release Volume envelope
* Dynamically configurable oversampling for antialiasing (1x/8x/16x)
* Bug fix: Sample rate was sometimes not set correctly
* Experimental Win32 DLL build



Download | Readme (includes build instructions)


* Building: The repository now includes an amalgamated copy of JUCE, which makes building easier. The code should also build on 64-bit systems now.

* Win32 VST: I have also compiled this version as a Win32 VST using mingw32, which was a bit of a hassle, but I think it's working. This is intended to be used in Linux VST hosts which only support Windows VSTs. (Confused? Yeah, me too!) If you test this in any such hosts, like LMMS, or even under Windows, let me know if it works for you. It's experimental, and not really recommended. I tested the DLL with LMMS 0.4.8, and it did load after a while. Sound works too, but the GUI goes blank after a few button clicks. The DLL works fine under dssi-vst, so it seems to be a problem with the way LMMS handles the GUI. Maybe it works in a different version of LMMS. YMMV... LMMS has the great Vestige SDK replacement, I think they should really use this for native support too. There are a few native Linux VSTs available now, and Windows DLLs + Wine will probably never be a stable, efficient way to use synthesizer plugins on Linux. If possible, use the native build!

I'm also planning to do a DSSI and/or LV2 version, but there is no support for that in JUCE yet, so I'd have to write the wrapper code first.

[ view entry ] ( 2525 views )   |  [ 0 trackbacks ]
This track (mp3) shows the current state of Wolpertinger code in SVN HEAD, which will be version 0.4. The waveforms are now generated with 16x oversampling which removes antialiasing, creating a smoother, more natural sound.
The song was created with the Native Linux VST version running in Renoise. Most of the sounds are created with Wolpertinger, except the drums and voice samples.

[ view entry ] ( 1454 views )   |  [ 0 trackbacks ]
(In German)

Die Menge an Software für Linux und andere alternative Betriebssysteme macht es dem Einzelnen schwer, die Spreu vom Weizen zu trennen. In geselliger Runde kann man den eigenen Horizont erweitern, Infos aufschnappen, oder zusammen kreativ werden.

Daher wollen wir alle an Multimedia, freier Software und digitaler Kunst interessierten Menschen zum gemeinsamen Erfahrungs- und Ideenaustausch, Plausch & Co. einladen.

Dabei ist das Thema nicht auf Audio oder Video beschränkt. Wer sich über Ein- und Ausgabe in und aus Computern und Menschen, Software, eigene Multimediaprojekte oder Hardware und Kompatibilität unterhalten will, kann hier Gleichgesinnte finden.

Wir treffen uns ab dem 19. August 2010 jeden Donnerstag um 19 Uhr im sublab (Leipzig, Europa, Erde).

sofakind.de/lml | Sublab Wiki

[ view entry ] ( 2213 views )   |  [ 0 trackbacks ]
In a forum thread on the Renoise board, the question about DSSI support came up, which prompted me to have a look at the DSSI specification. Thought I might as well post my opinion about it here. Sorry for this little rant.
A DSSI plugin UI is a separate standalone program, that communicates with the host (not directly with the plugin) via Open Sound Control messages. (Thus ducking out of the GUI toolkit compatibility question altogether, ensuring that the plugin is always correctly automatable by the host, and in principle permitting plugins to be controlled by other OSC clients as well.)

Sounds complicated enough, splitting the plugin up into separate "plugin dll" and "gui executable" parts, which both have to know plugin internals; and communicating to the host using OSC, over UDP (!) as required by DSSI. (I know it sounds cool that you might be able to have your DSSI plugin running in Renoise on one machine, and control it from a GUI running on another machine. But show me just one person who is actually doing this. Or at least, name one use case for this. And no, "sounds cool" is not a use case. Besides, if you really want to do this, use ssh -X.)

But it gets funnier:
The mechanism by which a host locates and starts the UI for a plugin is host-dependent, and this section is only a recommendation.

Next follows a "recommendation" how the GUI executable corresponding to the plugin might possibly be found (or possibly not). I. e. there is no defined way to even locate, and start the UI.

Oh, and have you checked out the licence:
Note that liblo is distributed under a different licence from DSSI and so might not be a legal option for certain DSSI implementations.

I won't go into the stupidity of using a network protocol to communicate data between a UI and a real-time audio app which is supposed to have ultra-low latency, it's just too idiotic. Not mentioning the bloat and dependencies it adds.

Now the parameter passing from host to GUI and back is done by parsing strings (like the "base path"), which is, of course, the safest, easiest and most efficient possible method to pass some information which you actually don't need (hint: just pass the parameters to the process/function/whatever-place it belongs, using a numeric ID for each parameter; no need for a "base path"). Some of these parameters are:
<base path>/midi

Send an arbitrary MIDI event to the plugin. Takes a four-byte MIDI string. This is expected to be used for note data generated from a test panel on the UI, for example. It should not be used for program or controller changes, sysex data, etc. A host should feel free to drop any values it doesn't wish to pass on. No guarantees are provided about timing accuracy, etc, of the MIDI communication. (optional method)

"Optional method". Right. Expect lots of confused users clicking on a keyboard control in the UI and not hearing any output, because it's "optional".

# <base path>/show

Show the UI, if it's a graphical interface in a window or some other type that it makes sense to show or hide. If the UI is already visible, bring it to the front if possible. No arguments. (optional method for UIs in general, but it would be bad form to implement a graphical UI without it)

Which reminds me about the usability problems with separate GUI apps. Think about fullscreen mode: Click anywhere on the Renoise window; Plugin GUI window will be hidden. Bring Plugin GUI window to the foreground with some key combination; it will be visible, but only until you use Renoise again. Next, click the "Show Editor" button and wonder why the editor is not shown (it will be HIDDEN by clicking the button, because it was actually visible, just obscured by the fullscreen Renoise window). Also, window managers will show their taskbars et cetera when a non-fullscreen window is shown, overlapping the Renoise window. In any case, you can't use both Renoise and the Plugin GUI at the same time. This will completely disrupt the workflow - just like with current Standalone Synth apps - unless maybe if the plugin gui code uses some clever X11 magic to exclude the gui window from taskbars and also make it topmost, which MIGHT work on SOME window managers - and then you'd have a topmost window which isn't hidden when you switch away from Renoise, which is, probably, also annoying. (The way Renoise currently handles native VST editor windows, presumably using some kind of reparenting, won't work with separate GUI apps because neither Renoise nor the GUI app know about each others' window IDs.)

Etc, etc, etc. All this sounds to me like, "Hey, let's make a plugin API for Linux. But let's make it as complicated, bloated, hard to use for developers and users alike, and inefficient as possible. Also, let's introduce lots of nodes where stuff can easily break. After all, we're dealing with Linux users here. These people LOVE fixing broken stuff."

I'd love to have a decent plugin API for Linux, but I think DSSI is not it.
Hopefully LV2 is more sane. I haven't looked into it yet...

[ view entry ] ( 1395 views )   |  [ 0 trackbacks ]
This totally b0rked antialiasing filter... Sounds kinda cool. :-)
broken-antialiasing-filter.ogg

[ view entry ] ( 1222 views )   |  [ 0 trackbacks ]

<Back | 1 | 2 | 3 | Next> Last>>