Sunday, August 21, 2011

Luppp: Progress, demo song & video

Hey,

The past while has seen quite some work being done, on various parts that needed attention: the UI, some internal effects & support for instruments, and better LV2 support. Also there's a "scene" thing come into play...

UI wise there's a mechanism in place that will "Osc Blob" send the nessisary information from the Engine, and it plots the wave shape on screen.

For instruments & effects we can now load PureData patches, and communicate with them using the JACK MIDI port. There isn't a lot of "routing" available, its all hard coded CC values at the moment, but that's on a todo list somewhere...

The Lv2 side of things has seen some changes, like a system whereby the Engine dynamically updates the UI of which plugin is loaded where, as well as where it can find the binary files to instantiate the corresponding plugin UI.

Finally the "Scene" thing, basically its a way to organize a song or structure audio clips into groupings that can be played back simultaneously.


So here we have a blank session with 5 "tracks" or "loopers", each track complete with plugin slots, solo mute buttons, a pitch slider (left), and a volume slider (right) and 2D ambisonic panner.

In the scene selector we see each buffer is currently green (play mode, not queued to change). Clicking on the Looper (purple thingy up top) will start recording to that buffer from the JACK audio input. A right-click -> load will let you load a sample into that buffer.


During the loading process (in a non-realtime thread :) the buffer is automatically time-stretched to match the current playback speed to seamlessly loop. All buffers that are recorded using JACK are automatically quantized to the current playback speed, so it all stays in sync.

Up in the top you'll see the new "Global Scene" entrybox, typing a number there will trigger all the buffers to start playing the scene ID that you type in. Some work needs to be done there to make that more user freindly, but for now it provides access to scene changes in a semi-useable way.

Luppp Session 1: Dubstep-y drum N bass-ish track
Note the heavy synth is a PureData patch, the drums were loaded from samples, and the Synth is recorded from the XV-3080 using the JACK audio input. Global scenes are used to switch between the different parts of the song.

Here a screencast of the "Global Scene" feature, and some of the Lv2 features. Excuse the rubbish quality, I'm only getting used to exporting from OpenShot at the moment :)

That's all for now, till next time
-Harry

Wednesday, August 17, 2011

Ambisonics & Linux, resources & quick toots

Hey,

I've recently been asked how I do Ambisonics on Linux using open-source tools, so here's a very quick rundown of how it all works:
  1. Get a linux install, preferably "AVLinux" or "TangoStudio". I have experience with both of those and know they work well, and I'm not telling you to abandon your distro of choice here, just for people who are wondering what distro to choose for a new install
  2. Run "sudo apt get install jackd ardour2 amb-plugins" in a terminal to grab the big programs your going to need (if you don't have them already)
  3.  Go to http://kokkinizita.linuxaudio.org/linuxaudio/downloads/index.html
  4.  Download clthreads, clxclient, and ambdec. Perhaps also get the ambdec manual..
  5. Build the 3 just downloaded bits of software, in the following order: cltreads, clxclient, then ambdec. Ambdec needs the other libraries on your system to compile! It should be easy after that & there should be a readme / install file, but just in case:
    1. extract the contents
    2. cd to the new folder (with extracted contents in it)
    3. open a terminal and type "make" & hit enter
    4. now do "sudo make install"
  6. Software is ready, so now read this: http://ardour.org/node/2804
  7. Give it a go
Any questions about the setup feel free to get in touch :)
-Harry

Thursday, June 23, 2011

Luppp: Midi Mapping

Hi,

Today was a productive day, Luppp can now take a MIDI CC, and map it to almost parameter you'd care to mention. Currently if an unknown MIDI CC comes in, it auto-maps that to the last used parameter, but I want to create a nice interface that allows one to change the mappings manually, and of course create presets & such.

No screenshot, its functionality that you'll find in the engine! Perhaps a little demo clip at one point.. who knows. Later!

Tuesday, June 7, 2011

Luppp: 20,000 loc Lv2 support & a CSound display

Hey hey,

20,000 lines of code, some LV2 support, and the beginnings of a CSound haul-over.
For now a quick post, with the mandatory screenshots, later some more info on how its intended to support some of the (fancy) LV2 features like the instance access, and some others :)






Embedding LV2 gui's into the Luppp ui. Pop out windows will be supported too at some point :)
And a CSound text editor based on Gtk Source View, a csound.lang file must be created to syntax highlight all the opcodes & that


Till next! -Harry

Wednesday, May 25, 2011

Lv2: New host lib, lilv, a newbies guid to LV2

Hey All,

Ever tried to get your head around the Lv2 spec? Me too, and if one isn't used to the "lingo" of URI's, RDF's, and various other path etc it can all be a bit daunting. Yet some of the coolest and best plugins (check: this Parametric EQ, or this IR reverb) are on the Lv2 standard, so you really do want to support them...

If you wanna get your hands dirty, skip down to the bulletpoints, that's what you'll need to do to get started!

With this new library from David Robillard writing hosts to use these plugins should become easier & faster. The library I'm talking about here is of course Lilv. It depends on two of Robillards other libraries, namely Serd & Sord.

Serd handles the reading & writing of RDF data, as well as Turtle & NTriples. Don't worry, I don't know what they are either. Perhaps in the future I'll try understand them...
Sord is a library for storing RDF data in memory... apparently we'll need that!?

Getting Started:
Create a folder somewhere where's your gonna do all this stuff.

Grab all of the following:
http://download.drobilla.net/lilv-0.4.0.tar.bz2
http://download.drobilla.net/sord-0.4.0.tar.bz2
http://download.drobilla.net/serd-0.4.0.tar.bz2

Ensure these are installed:
lv2core

Untar the lot of those .tar.bz2's from drobilla, and cd into the serd-0.4.0 dir.
./waf configure
./waf
sudo ./waf install

cd into the sord-0.4.0 dir,
./waf configure
./waf
sudo ./waf install

then cd into lilv-0.4.0
./waf configure

This shouldn't give any problems, as we've just installed the 2 dependencies you probably didn't have. If JACK or any other common issues arise, just fix them.

If you get the following errors:
Checking for header lv2/lv2plug.in/ns/lv2core/lv2.h : no
Checking for header lv2/lv2plug.in/ns/ext/event/event.h : no
Checking for header lv2/lv2plug.in/ns/ext/event/event-helpers.h : no
Checking for header lv2/lv2plug.in/ns/ext/uri-map/uri-map.h : no

Then this is what you do:
1. Direct your browser to http://lv2plug.in/spec/
2. Grab lv2core,lv2-event, and lv2-uri-map.
3. Untar lv2core, ./waf configure, ./waf, ./waf install it (the first one should be fixed now)
4. Run "lv2config", this creates some symlinks around to headers
5. Bop open a terminal, cd /usr/include/lv2/lv2plug.in/ns/
6. sudo mkdir ext
7. Copy the event folder into ext, and copy the uri-map folder in too.
8. *CHECK THE DIRECTORY STRUCTURE!!!* the output of ./waf configure tells you *exactly* where its looking for the files, *PUT THEM THERE*. Can't stress this enough. Use your brain & figure out what's not where its meant to be

./waf configure should print out yes yes yes yes yes yes to all dependencies now, so
./waf build,

Only if *building* fails, ie: ./waf fails like so:
[28/36] c: utils/lv2jack.c -> build/utils/lv2jack.c.7.o
In file included from ../utils/lv2jack.c:29:0:
/usr/include/lv2/lv2plug.in/ns/ext/event/event-helpers.h:28:52: fatal error: lv2/http/lv2plug.in/ns/ext/event/event.h: No such file or directory
compilation terminated.

Get to your favorite text editor, and sudo up the cow powers, because we've got a header to edit.
1. sudo /usr/include/lv2/lv2plug.in/ns/ext/event/event-helpers.h
2. Go to line 28. its contents should be: #include "lv2/http/lv2plug.in/ns/ext/event/event.h"
3. Change those contents to "#include "lv2/lv2plug.in/ns/ext/event/event.h"
4. ./waf build again.

Edit: The author of the event extension is planning a release to fix this issue.

and then sudo ./waf install the whole thing.

Boom! You've got lilv running.
Check the lilv-0.4.0/utils directory for some examples of using the library.
If you've built lilv, then in /build/utils there are the binaries of the examples. Run them while looking at the source, understand what to do.

In the /bindings/python dir there are 2 files, lv2_list.py & lv2_apply.py
They might provide some insight into the steps nessiary to get Lv2 plugins instantiated and in a good mood to work... :D

Finally a huge thanks to all the members of LAD who have developed this awesome standard, awesome plugins, and last but not least, awesome hosts! :D
Cheers, -Harry

Tuesday, May 24, 2011

Luppp: Stage 4

Sup!

Today Luppp got a SoundStretch class, its based on the LGPL library SoundTouch, and provides independant time or pitch scaling. That's pretty awesome :) Bind yer MIDI controller, and you can control the pitch of your loop... for drums its great to get some extra Oomp outta the kick.

The BPMDetect interface from SoundTouch isn't being employed yet, but it won't be long. Also the loading of sample files will be transfered from Looper & Sampler to FileLoader. In there will be the BPM detector, and automatic scaling of BPM of loops to the current BPM, then pushing it into the ResourceHolder buffer.

Also news: wierd ported LADSPA plugins won't crash the system anymore, and the stereo plugins still work on the mono channels, just using the Left ins & outs. A LADSPA GUI has been worked on, just a small dial that displays the value of a controller, but it needs a good rework before its useable.




A LoadSaveBase class is in order, that will be the parent of any class instance that wants to save / load data between sessions. (That's just about every instance... :) All in the pipe!
Till next, -Harry

Edit: Almost forgot, it also sends MIDI CLOCK now, so you can sync your LFO's on external synths to JACK transport :D

Wednesday, May 11, 2011

Luppp: Stage 3

Hey All,

Got some great news... there was a nasty stupid bug in the GUI redraw of the waveforms, (which I mistakenly though was due to threading) but it turns out the code was entering a loop with an increment that evaluated to zero... But its fixed now! :)

So with the GUI up and running one can see how far along the loops are, and what "amount" of the loop is going to be played.. ie "zooming" in on the part of the loop that's active.

Also the engine has been getting some attention during the Linux Audio Conference, held in Maynooth this year! This means that initial CSound support exists, so effects & instruments can be coded up in CSound to be played live as if its an internal synth / effects box. Lots of new possibilites now, and due to the csound .csd files being text based, they will be real easy to share & merge, allowing all users to contribue & share presets for effects with eachother.. :)

Mandatory screenshot:

Till next! -Harry