MidiLoops is a midi implementation of Tape Loops. It was made specifically to avoid working with audio files in Pure Data and instead use an external sampler to load audio without interruptions. MidiLoops is much more flexible than the audio approach, since each module can trigger several notes.
Currently this is one of my main tools for soundscape performance.
Tape Loops is an aleatoric looper. Its main function is "random play" which randomly triggers the audio file within a set period of time.
Better to try out than to read about it!
Download patch here:
So I am making a patch which should be able to play many files with certain random functions.
Before I used readanysf~ library to do that, but it has weird artefacts during playback at times, so I decided to try another approach and use tabplay.
Tabplay works out fine as far as playback goes, I was able to put together the patch pretty quickly. However, another problem arose - when you load files into sample players during playback, 50% of the time a click, when all audio stops momentarily, would occur. This, of course, is not what you need during a performance.
I have been pointed to this topic:
I did attempt to use block~ with read and soundfiler commands, but the effect was actually worse - without a block 50% of the time I get no clicks, with block~ I get it 100% of the times, although I must admit, often the click is less noticeable.
I cannot load files in advance, because the whole point of this patch is to do spontaneous music, load samples and loops as it goes. Because I see that using readanysf~ produces no clicks whatsoever, I am sure the problem is somehow solvable, but I am not sure what to do at this point. Any advice would be welcome.
I submit the patch for your inspection.
okay, I am using readanysf~ extension to open sound files. I created a looper abstraction.
Then I have created several loopers in a patch. Each looper has an inlet which allows to start playback and stop playback.
Let's say I have two samples: hihats and base drum. Both were recorded at 130 bpm and saved to wav files. In order to sync them on other software I would use something to trigger those files at the same time and they would be in perfect sync forever.
In this patch I've done the same thing - notice the play all button. So I load these two files into two loopers and then trigger them with play all. First 4-5 rounds loops are in sync, but then they begin to go out of sync.
The interesting thing is that if you load same file into different loopers and trigger them - they will NEVER go out of sync.
So I was wondering if I am missing something, maybe some inner workings of Pd which make audio files go out of sync.
Patch attached. Open TapeLoops16.pd
Presenting my first complete patch, but a pretty useful one (at least for me!).
Quark is an aleatoric midi sequencer which at a given tempo plays notes, randomly taken from a selected musical scale. Additional randomization options are available, such as volume, note duration and even dynamic scale changes. All open instances of the sequencer can be synced to each other and can additionally trigger Hydrogen to play in sync.
Quark was created to be used in a modular audio environment of a GNU/Linux system. On other systems sync between sequencer instances and Hydrogen might have little meaning. Quark was tested on GNU/Linux only.
From Pd perspective, the patch uses basic objects, but visually is a little messy. It is one of my first patches and by the time I found out about subpatches and abstractions, it was easier to leave it as it is. At the same time it is not a big patch at all, fitting on a laptop screen, and important sections are commented.
For full description of how it works, venture here:
I was making a simple patch to randomly change the frequency of an osc object. But I do not want the frequency to climb too much up or fall to much down, so I defined limits 20 and 600. So I want for the algorithm, when it falls lower than 20, go back to 20 and when it climbs higher than 600 - reset to 600.
When I click on the msgbox which holds the limit - it works. But alone it does not. I even tried putting a bang between moses and msgbox and the bang does flash, but the message is either not being sent of for some reason the float object does not get it or there is something else which I am missing.
I have attached the patch itself. Can someone please take a look. I feel it is important for me to understand what is going on here, since these are the basics.