Midi effects anyone?

A while ago I was playing about with routing midi through Spi to other devices. Interesting, but in the end I dropped that for the connection dialog in qjackctl.

But ive been reading about midi effects, transforming/augmenting midi notes in the same way a guitar effects pedal works on an audio signal.

Seems Spi would be well placed for this. Is anyone doing this?

1 Like

I was looking at blokas’ Midihub - MIDI Interface & Stand-Alone MIDI Processor which looks like a great device for general usb/midi work but also has a GUI for programming chains of interesting effects like arpeggios and chords. I mean, the technique in SPi is straightforward enough - here’s a quick example that takes one keyboard note, plays that then plays an arpeggio based on the note (midi4x4 is a just a custom function to send midi on my setup).

SPi can do any logic of course, so I’m reaching out for ideas.

live_loop :a do
  n,v = sync "/midi:*/note_on"
  in_thread do
    #make arpeggio on the note
    #play root
    midi4x4 y.tick,100,0.25,1,1
    #play a delayed arpreggio
    sleep 0.25
    4.times do
      midi4x4 y.tick,100,0.25,1,1
      sleep 0.25

Ableton has a few basic MIDI effects, which you may have come across in your research:
(I installed the CC Param Control Bank for controlling CC channels after reading a help post here on in_thread.)

After routing through the arpeggiator module, you could also route the MIDI signals through a scale module to get them in key. Actually, the thought of MIDI modules gives me ideas for my current algorithm! So thanks for sharing :slight_smile:

On another note, I tried expression control when I was initially seeking a CC solution, but found that it was better applied to phrases than to individual notes. That brings me to the idea of maintaining states in your MIDI effects, which a DAW can’t do. Perhaps you could have evolving MIDI effects! It’s all very exciting stuff :smiley:

1 Like

Thanks, yes they mention Ableton. But for some reason I’ve taken against Ableton - I dunno just got something about these all-conquering programs where everythings available from a drop-down.

EDIT I just wrote a litle rant about Ableton. But I’ve deleted it :smile:

But yes, midi effects, another string to the bow. Just thinking about how to use it. If you have some ideas, please share.

1 Like

EDIT: Apologies as this is my third time re-writing this because I don’t like what I’ve written :sweat:

I’d like to hear your rant! Ableton is fine as an endpoint for me, although I wish I could work with the interface faster. Swapping 16s of devices one by one upon every slight modification to a chain is far too cumbersome and redundant.

Focusing on the topic at hand: mapping MIDI to MIDI. (What I wrote in my deleted replies was irrelevant, since it dealt with mapping abstract musical “objects” to MIDI.) My idea has to do with musical states.

First, all MIDI effects have context, with settings such as key and time information, e.g. the scale and durations of an arpeggio. (This has a constraining effect on expression, limiting playable pitches and durations.) Why I bring up context is however, that it introduces variables into the MIDI module. It’s just that generally, these variables apply to each MIDI event in isolation from the rest.

I’ll let “state” refer to the use of variables to carry information across events. With state, we can start thinking about MIDI not merely as scattered events, but as coherent and interesting “episodes”. I think this brings creative opportunities. Evolving states mean that notes need not play the same way twice (and not by a purely stochastic process). In terms of pitch and duration information, riffs could be saved to memory and resequenced, though I guess by that point, it’s no longer a MIDI effect. Which means I might be exploring something out of bounds with this idea.

Anyways, I’m thinking about crafting some custom arpeggiators and tremolos (i.e. one-note arpeggiators) complete with CC changes! :thought_balloon:

1 Like

You’re on a different plane @d0lfyn! I’ll be interested to hear what you come with.

Me, I tried to make a midi-looper in Spi. Which half works. The problem is a fundemental one around SPi’s timing model - which it took me a while to realise how good it was. Anyway it boils down to mixing real time and SPi’s scheduled time, which throws up difficulties. At the moment I can’t the wood for the trees so I’ll leave it and come back to it later when I might have an epiphany.

Since though, I do want a midi-looper I’m trying that in PureData, which is bearing fruit.

1 Like

Oof, I should’ve realised that the default 0.5 second delay (if I recall correctly) would throw a wrench in live improvisation. That, and it’s difficult to demarcate the end of a phrase, unless perhaps you use a legato playing style, which may be unwieldy if not undoable (e.g. when there are rests in a phrase). It didn’t cross my mind because my program thinks at least one bar ahead of time.

Interesting, PureData! The Wikipedia article mentions users can write graphical representations of music with it. I was looking for something to show when I eventually start doing YouTube videos!

1 Like

The delay is configurable, set different on different machines so that they comfortably schedule everything on time. Which of course is utterly brilliant - the payback is that SPi is best when it’s in charge: the primary clock source. I could definitely get something working on a separate SPi node, running under ‘use_real_time’, but I wanted it in a separate buffer on the one node and running in step with the main loops.

Yes PureData - I kept seeing it mentioned in my condensed tour of the history of electronic music making. I’ve got into it the last few week a. because I love learning a new thing b. I want to major on the Raspberry Pi for idosyncractic cultural reasons (see previous rants).

It’s a bit wierd TBH - sort of a lego kit for making sounds, but it is used in all kinds of things. I have my eye on one of those Organelle boxes, which use it.

Not sure it’s what you want to represent your music - but what do I know? :smile:

Here’s the looper I’m cooking up at the minute - I have grand plans for it. The GUI can be tidied up quite a bit, but here it’s in it’s raw state. If this doesn’t put you off… I mean it’s got an object called ‘moses’ that parts a sea of numbers in two. It’s like a crossword puzzle, all very logical when you know…but…

1 Like

Haha, poetic! I have a penchant for etymology and inventing words based on Greek and Latin (sometimes German too because English) (and all with the aid of Wiktionary ofc) when I can’t find what I’m looking for. (Currently toying with what I call “translata” to describe the common ground shared during translations between thoughts, symbols, signals, and sounds alike.) (Starting the process of documentation!)

I only saw a single graph on the Wikipedia article about PureData, and I think I like that format for representing the independence of voices and their interaction. A blob or geometric pattern might be more suitable for homophonic textures. (Although… hmm, concentric layers!)

I have a Raspberry Pi 2 I bought years ago, which I haven’t made much use of aside from when I was learning Linux. I’d like to make more with less! And I’m sure I’ll get to hear more of your rants further along :slight_smile:

I think I’ll leave live coding and performance to you actual musicians :wink: From since I was a teen, I’ve focused on composition. My performance capabilities are almost nil. Though I still find toying with a MIDI keyboard so much better than clicking around with a mouse.

1 Like

Here’s a test of the pure data midi looper in action, for your listening displeasure. The backing track is all in SPi, after a bit I play a phrase into the looper and let it run on and on while twiddling the dials. Sorry in advance it’s not a pleasant listen - it’s a technical piece not music.

I particular want this looper not to quantise, but to allow flexible timing to reflect real performance. Which it does. I want to capture intentional timing flex and mistakes. Holger Czukay didn’t worry about playing ‘wrong notes’ on his trombone (or whatever it is). I’ve also put an advance/retard control on in a similar vein.

I’m thinking there could be rich pickings with midi effects, shame about not getting it working in SPi though at this point.

1 Like

That’s the ethic I think. My sons were listing to dub reggae today, and I like that style partly just because I do, and partly because it was born out of making the best with lofi kit.

1 Like

I love the backing track. And you explore a lot of interesting settings with the audio effects applied to the looper — pitch shifts, granular effects, phasers, that I can hear. As a technical piece, fewer constraints is better. I look forward to hearing this all in action in the future!

Real performances are so different. :heart: The analogue world offers freedom. I can only contemplate that which cannot be calculated (though I will try).

The last step of translation is from MIDI to audio. I haven’t even begun to explore what can be done with audio effects.

And ah well, you’ll have new ideas!

1 Like

Thanks, appreciated. Here’s this morning’s effort, hiding the spaghetti behind a neat interface. I’m very pleased with myself, obviously :smile: It now doubles as a handy midi router. And I can run multiple instances for multiple loops to multiple sources. I’ve added control from the keyboard too, e.g. press a low D2 to clear the pattern.


You may be losing out on something but at least you’ll not have to wrangle with latency, which seems to the constant headache-inducing thing in trying to get a live setup that works.

Re your new words thing, I don’t speak German but I do envy their compound nouns for all kinds of useful concepts that seems to hit the spot. I expect they’ve got a word for that concept too :slight_smile:

Are you aware of the book ‘The meaning of Liff’? If not, take a peak. They took place names and ascribed them new and interesting meanings.

1 Like


Just seeing what a link from insta looks like, if it works at all.

Answer, nothing special just a link

Excellent work! An interface is just a good idea. For sharing, revisiting in the future, reducing mistakes, &c. I wonder if I could create a graphical settings manager for my project.

Yep, keeping in time would be difficult enough without a delay (though consistent) throwing things off.

Probably haha! I went through the course on Duolingo once a couple years ago. I was inspired to try reading Alexander von Humboldt’s Kosmos in the original, which is far beyond conversational German :sweat_smile: I also wanted to read the writings of Leibniz and others (back when French was the lingua franca) on Wikisource with the French I learned in high school (I forget what that level of education is called in the UK, but it’s the years leading up to what we call post-secondary education, e.g. college, university, &c.), but that too was far beyond conversational. I can’t hold a conversation in either language, but I can piece together sentence by sentence the literature.

When I have time I might revisit all the languages of the classics, including those from the Sinosphere (I have a head start because I can read a bit of Chinese).

A word I’m thinking about (not related to my project) at the moment is “onefold” in English, which has a more practical tone to it in my ear, versus “simple”. There are times however when I would like to distinguish poetically between “onefold” and a word that doesn’t exist in English, “samefold”, which would literally translate to “simple” and yet would feel different.

I am not! Thanks for mentioning this, it looks entertaining! :smiley: