Because someone had to code it.
“The baguetter” is a renoise 2.7 allowing you to easily enable/bypass each devices of a track dsp chain by simply clicking on buttons.
“The baguetter” is easy to use.
“The baguetter” smells good.
“The baguetter” will bring you fresh beers when you need them, unlike your girlfriend.
And yes, my friends, “The baguetter” is funky fresh from the oven.
NOW IN VERSION 1!
MANDATORY OFFICIAL RENOISE TOOL PAGE!
MANDATORY RENOISE FORUM THREAD!
HOW TO BAGUETTE?
- Select a track or the “selected tracks” option, insert devices.
- Set a timer, the tool is actually counting till “timer value” and then it enables the next device, disa$ling the previous one.
- Live button: This is for swapping on playback…
- The write button: This is for writing the commands on the pattern
- Enabling “Pattern selection” will constrain the dump to a selection.
- If you want the script to avoid “touching” some plugs, add “MCHAMMER”, “mchammer”, “SAFE” or “safe” to the name of the plug (yes, just rename to MCHAMMER, because he can’t touch this… device).
- Ranananananananananana BATMAN dom.
TODO IN THE BAGUETTERY!
- receive and take in consideration your advices (in constant progress)
From Jonas: pattern selection dump.think about a random mode accessible through a simple checkbox.if think(randomMode) then implement(randomMode) end.debug(randomMode)a better GUI with a “more info” button.- more possible options… who knows (your ideas, really)
THANKS:
- Conner and Danoise for the app_idle trick, it wouldn’t be here without them.
- Esa for being the best bug adventurer ever.
- Vincentvc for testing.
- Jonas for asking for a feature :)
Now, go and make me a nice screenshot and logo, whatever, and send it to me!
Disclaimer:
“The Baguetter” is a product of Giraffes&Associates.
Use with extreme caution, preferably close to a leather moomin.
Jazzmen, FBI and the CIA have not been involved in the making of this tool.
BEHIND THE SCENE
So far, it’s my real first renoise tool. No shit. If you look closer to the code, you’ll notice at some points it’s really dirty, I’m pretty sure I can run some optimization sessions on it later.
There are a lot of traps in the renoise API, here is a list for you because I don’t want people to fall in the same traps:
Ok so we start at 0 or 1?
LUA counts from 1. Renoise counts from 0. Which mean when getting a list of devices from a track, Track/Vol/Pan (yes, it’s a device too, first trap!) will be device 1… but on the pattern, it’s device 0. So I got several errors trying to access track/vol/pan and bypass it while you can’t do that. And no need to say it’s been fun dumping on the pattern as well.
0.8 EDIT: I actually decide to change the way of doing this all. Now, everytime you load a device or you change a device name, it will regenerate deviceList_t excluding track/vol/pan and MCHAMMER-ed devices, this way is going to be safer for when I’ll try implementing more options and a possible random mode.
LIVE… or not?
The live mode aka “Go whine on the board until some people (thx2dem) show you that you can actually do that”. I thought I couldnt bind any functions on the playback… untrue indeed, but you might admit that even by reading all the API (which is a bit obscure at some point), one could miss the property “app_idle” and its “_observable”.
Yes, this property refreshes 10 times in a second and yes, you can bind a function to it so be careful when using it as if you deal with some numbers they might appear more than once in your debug console… think about checking first if the oldValue is equal to the newValue. Also don’t do costy things here, but I think you got it by yourself.
The GUIllaume (eh eh, not)
The GUI… oh the pain. Really, even for a little thing like that, don’t try reading the API, just open an already existing tool or the given examples in the starter pack and everything will be fine… on the paper. The GUI API is really something you have to get dirty and put your hands into it. In few words:
- on top of your tool, initialize dialog and dialogContent variables to nil.
- in your init() function, call the gui.
- dialogContent gets… the content… and dialog gets the property :show_custom_dialog(title,dialogContent)
All I wanted is to create a new song!
Enough? No. My script was messing up (like, crashed) when creating a new document (Thank you Esa).
I had to relaunch the window but you know what? Didn’t know I had to first :close() the dialog and then set it back to nil. So inside my init function, right after the gui call, I’ve used this:
Tool.app_new_document_observable:add_notifier(init)
(i’ll let you write yourself the function that check if the notifier exist… “has_notifier” is the property)
WTF.
Why doesn’t it work on renoise launch? Let me save up your time, if you want to use “shortcuts” for renoise().anything, you do it like that:
on top of your code, as the ultimate upvalue: local Song = nil
inside your init: Song = renoise().song
This way, you try to access “song” when the song is created. Else, at launch, you have renoise loading your script, searching for “song” while no document has been created. Thank you Esa, again.
I think that’s all about the traps I’ve encountered, apart the own ones I created while trying to implement the MCHAMMER feature eheh (but that was pre-0.7 indeed)
I hope you’ll enjoy the plug :)

One comment on "The Baguetter, a renoise 2.7 tool."
Pings to this post
[...] Link to the renoise board thread Link to the baguetter official page on my blog [...]