Schenkarian generation of music box music
I like the weighted random idea —
I think I'm going to start by implementing the bare-bones core structure of a piece, starting with the root note and mode, and then generating a chord structure based off of this mode. The idea of Schenkarian analysis is to start off by analyzing the larger chord structure of a piece (to find the overarching I-V-I motion) and then move inwards layer by layer in terms of complexity until the whole piece is analyzed down to the individual notes. I'm going to approach generation in the same way — when I get to the point where I am generating the smaller chord progressions I will probably use a weighted random scheme of commonly used motives.
triggering packed items all at once? order of operations?
I have a group of floats i.e. [1 2 3 4 5 (
I have to process these floats to create new values.
So I use unpack to extract each item... I apply some function to 1 some function to 2 etc etc...
Say 1 gets multiplied by 2 . 2 gets divided by 3, 4 gets divided by 10...
I now have a new list of values that I have derived from the original list...(they are all seperate objects) this is where my problem arrises. I want to pack these items to send them to another functions, however they all must arrive at the same time! when I use pack, the first items triggers pack regardless of if the next calculation is complete. What i need to do is this.
Each item in the list [1 2 3 4 5 ( must complete its following calculations and then be repacked and sent to the next part of the chain.) The next part of the chain unpacks the corresponding values. Only once all the values are recieved should the unpack commence.
If this is confusing here is an example.
[1 2 3 4 5 (
unpack f1 f2 f3 f4 f5
f12 = x1
f23 = x2
f34 = x3
f410 = x4
f5*0 = x5
pack x1 x2 x3x4 x5 -> outlet
in a seperate abstraction: inlet -> unpack... now what I need is to unpack only after all the calcuations are finished. Does anyone know how to do this? Should i not use pack?
Noob Trying to Create a MIDI Chorder/Harmonizer
Newbie alert! Been interested in Pd for quite a while, though long after hearing a lot about Max in college (ca. 1990). But my attempts to do anything in it were thwarted by many factors, including the lack of a clear plan. As is often the case, the most appropriate approach to learning a new language is to find a use for it.
Now got what sounds to me like the ideal project: should be simple enough but it teaches me important lessons about Pure data.
Been trying to create a basic chorder/harmonizer taking input from a MIDI keyboard or wind controller and outputting multiple notes to an external synth connected via MIDI as well. Later on, this project might end up with Pd-synthesized sounds, but my first need is for a simple tool which generates different chords based on incoming MIDI notes.
More specifically, the idea is to create something like the “Michael Brecker Effect”, based on something the sax player would do with his Akai EWI and Oberheim Xpander. Brecker would play melodic lines on his (monophonic) EWI and the Xpander would generate random chords under that. There are tools out there which do this but it’s probably best for me to create my own. Been using a tool which does something a bit different (using the incoming MIDI notes as chord roots instead of top notes) and it’s just too much fun. Creating my own chorder/harmonizer would allow me to appropriate the whole thing to my own context.
My sense is that much of this is really trivial, by Pd standards. Even surprised not to readily find multiple examples of just this thing. Maybe my search skills are off. But my understanding of Pure data is so fragmentary that it quickly gets me stuck.
Here’s where things stand at this point. Can easily generate a given chord type (say, a major chord) under any incoming note. Offset the [notein] MIDI note number by a certain amount does create an interval, obviously. And sending multiple numbers to [noteout] actually works. Quite neat. It even deals correctly with note off messages, which was somewhat surprising to me. So far, so good. Can play major chords on any note, which is already a fun effect for a monodic instrument (but something which is already possible for me to easily do).
Where things get really tricky really quickly is in generating different chord types for each incoming note. For instance, in a C major context, would like an incoming C or G to produce major chords, but an incoming D or E should produce minor chords. A non-scale incoming note could work as a passing tone (not producing a chord). Basically, each of the 12 notes in the 12TET octave would trigger a different set of notes.
Therein lies the rub. Triggering different events based on different notes is easy enough with [mod] and [select]. But, for some unobvious-to-me reason, sending those “mixed messages” breaks the whole thing. This is when note off messages stop being interpreted correctly (so: stuck notes). It’s also been impossible to produce passing tones (an offset of 0 for each voice doesn’t appear to have an effect).
It’s fairly clear to me that there’s a basic misunderstanding on my part. About many things. Like which inlet produces which results and how/when messages are interpreted. To my surprise, it sounds like Pd objects have memory, which is reset by closing the patch and opening it again.
Lots to learn!
At any rate, here’s my current attempt at making a chorder/harmonizer patch. Tried many different things leading to different problems. This version gives me stuck notes. Which is what got me stuck.
Any help would be greatly appreciated!
Phonetic Gating Patch
Does anybody know of a function or patch out there for gating speech so that the vowels would be silenced ? By attempting to keep as much of the percussive elements of the speech in as possible. (or vice-versa would be cool too)
I've tried spectral gating and bands etc, but I wondered if there'd be something more contrast like to isolate percussive parts of speech
Any help would be massively welcome, or if anyone has the interest in a new patch I'd happily talk about putting a small thankyou payment their way
Ewolverine 4 U
New version 6.2
- added TARGET DRIVE (you need [timbreID] !)
- changed designations of control assemblies to fit better with their functionality
- improved GUI functions for mouse control
- added display that shows the distance of evolved sounds to the target sample
Now you can use Ewolverine to re-synthesize a sample with any synth you own. Of course not every synth is able to convincingly synthesize any sound, but you can now get as close as possible with it. Just loop back the audio of your DAW into PureData using a virtual audio cable and send MIDI from PureData to your DAW using a virtual MIDI cable and let Ewolverine do the rest!
The re-synthesizing of samples using Ewolverine can take VERY long and I don't guarantee you that it works good, but as it is a free patch, see it as a Bonus!
EWOLVERINE v.6.2 by Henry Dalcke.pd
BEST POSSIBLE BREEDING FUNCTIONALITY NOW ENSURED!
- storage for user SPLICER pattern
- 4 more random sounds per set (A/B) to select from (to save time)
- discontinuous MIDI messaging interrupted by assignment switching CC events to enable breeding especially for FMheaven VST
- possibility to interpolate between new random population sounds to smoothly re-direct the modwheel-morphing path while morphing
Working Peaks for VU
The documentation for the GUI VU meter is pretty vague and I couldn't find any info on how to use the peak indicator. So this is my idea for a working peak.
I would really like to have the peak indicator slowly reset (eg [line] but then you miss the peaks occurring during that time or get interference from the current values
Latest improv works using my pure data guitar rig patch
No time like the present to get started so I am going to go ahead and post the initial-ish sort of work I have done (see YouTube link below) using the guitar pedal patch I am now using.
It started out, that is to say, I initially envisioned it as a MobMuPlat guitar pedal app. But having spent 4 months attempting to make it work to no avail I opted out of that and just settled on using my laptop. The Android I had was too slow or my knowledge base was not large enough to make it happen.
The pedal rig uses mainly DIY2 pedals and some Guitar Extended stuff.
It's primary functional piece is a 4 tap delay with a pitchshifter per line. Makes some amazing sounds: guitar in 4 voices. And my hope is to post that patch as soon as I can.
Hope you enjoy the listen. May it find you in good cheer.
p.s. some of the pieces do not use much of effects and they are all improv pieces which is the only thing I do.
oh, yea: i did some post work on Audacity: noise removal, remove clips, normalize, but that is about it. And my youtube channel is almost all live improv poetry and music.
Problem with using $1,$2 and $3. "Argument out of Range"
@MatteoC47 Hello Matt...... Usually "argument out of range" means that the [pack] object does not have the same number of variables as the [message( that it feeds into..........so.....
[pack s f s f]
should be followed by......
[$1 $2 $3 $4( and if you put a $5........... you will see "argument out of range" in the terminal as the $5 will receive no value.........
But...........[pack] will not "pack" the message until it gets a "bang"....... or in fact "anything" on its left inlet (see the help file for what actually "happens").... and then it will execute..........
I have put a trigger so that the new data from the slider forces [pack f f] to output.........
Please come back here if that doesn't help.
If you are indeed new to Pd...... I always recommend http://puredata.info/docs/manuals/pd/x2.htm up to..... but not including chapter 2.9...... as great bedtime reading!!
pass a string to an abstraction
I try to pass a string parameter to an abstraction, the aim is to use different expr objects depending on the string
I use route to route a [integer string( message
that message is prepared with a [pack 0 $2] so it packs the integer and parameter 2 of my abstraction
so I got
[i 1324] | [pack 0 $2]______[print] | [$1 $2(_______[print] | [route name1 name2]
but it does not work and as I print the message or the pack, it outputs
print: 1234 symbol print: 1234 symbol print: 1234 symbol print: 1234 symbol print: 1234 symbol
how can I solve this ?