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?
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
use_real_time
n,v = sync "/midi:*/note_on"
in_thread do
#make arpeggio on the note
y=[n,n+3,n+12,n-24]
#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
end
end
end
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
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
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
But yes, midi effects, another string to the bow. Just thinking about how to use it. If you have some ideas, please share.
EDIT: Apologies as this is my third time re-writing this because I donāt like what Iāve written
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!
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.
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!
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?
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ā¦
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
I think Iāll leave live coding and performance to you actual musicians 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.
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.
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.
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. 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.
Thanks, appreciated. Hereās this morningās effort, hiding the spaghetti behind a neat interface. Iām very pleased with myself, obviously 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
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.
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 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!