…while we’re on the subject of chords, is there a reason you picked “+9” on weave for an add9 chord? I know there’s some colloquialisms with symbol notation and theory stuff in general, but the “+” symbol to me indicates an augmented chord. Its not like it’s ambiguous on your module, there’s already an augmented chord option; When you select it, it says “Add 9”; And an Augmented dominant 9th is a strange (however interesting) chord. Just wondering if that’s a symbol people use. I know “+” and “add” have the same…mathematical meaning I guess? Just never seen it in chord symbols specifically.
Good question. I hadn’t really thought of that. The + was just shorthand for an already cramped panel… hope it’s not too confusing!
Hammer
A compact version of Syncro with new ‘chain’ capabilities. Link up multiple copies, and control the ON/OFF, Reset and Clock from the master.
Works great most of the time, but if you change the tempo it does take a clock cycle for the new tempo to pass to the new copies (as it only sends the clock onwards). It gets back in sync really fast with the master at least. The only way around it is to somehow encode the bpm into the CV it sends… and that could be possible. I still haven’t implemented Phasors fully yet either.
Also… I’m still fussing with the panel as you can see.
Updates and beta coming soon…
Yeah phasors are very advantageous in this regard. And also offer cool ways to play with swing and other such staggered rhythms. Would love to see a phasor input/output mode personally. Very cool either way.
Heh, that should’ve probably been obvious to me given the thousands of hours of guitar I’ve played lol!
Ok now that I get that…
I’m curious if you feel it’s important to only include voicings that are physically playable on guitar? The 6-octaves one is I’m guessing intended as an exception since that’s obviously impossible.
(I just realized typing this out that I have no idea how much guitar you yourself have played, apologies if I’m explaining things you already know! Anyway.)
There’s a few others which are a bit less obvious, say, the A#major (Bb… more on that below) voicing which has A# on both of the lowest strings. I can play that if a friend helps me fret the A# on the E string, but alone there’s just no chance. So if your intention is to only use voicings playable by a single guitarist, there’s some work to do. And indeed then you will not always have the root of the chord be the lowest in the voicing.
If that isn’t strictly important to you however, perhaps adjusting a few low notes to match the root of the chord could be a nice idea.
One conceptually nice compromise might be to imagine the guitar being a 7-string in drop-A tuning, and the “player” choosing 6 out of those 7 depending on the voicing. Then that A major chord shape which now is A2-A2-E3-C#3… could be A1-A2-E3… etc instead. And that C∆9 voicing above could get a low C etc etc. What do you think of that?
As someone pointed out, the +9 chord is misnamed. Plus nine usually means #9 which = “the Jimi Hendrix chord”. I don’t think that’s what you wanted since the chord readout is “Add9” and indeed with E as the root I get E-B-e-g#-b-f#. If I choose A instead though, I get AEg#c#eb which is like… A∆b9. Probably not what you intended right?
I would also like to urge you to please get all the note names with accidentals in the chord names “right”. Frequency-wise in equal-temperament A# == Bb of course. But for anyone with a reading background, something like A#-D-F is a lot harder to parse than the Bb-D-F.
If you’re unsure how to choose the right names for each note in a chord, or how to do that in code, feel free to ask! I don’t wanna risk explaining any more things to you that you may already know perfectly well. ![]()
No this is great! I play a lot of basic choppy guitar chords, but I’m not really a music theory expert. So this is all super helpful information.
The intent was to have guitar-sounding chords that were mostly grounded in what you might play. But given that the vast majority of guitar chords don’t use all 6 strings, I swap the muted strings with different notes depending on the context. Usually the first muted string is replaced with a low root note, and the 2nd muted string is replaced with a 5th or 3rd or octave - depending on which chord group.
I will rename the +9 to Add9 on the panel, it’s better for clarity. I didn’t know there was another convention for +…
I’m not sure I can get the accidentals right on my own… but I’ll give it a try and see how I do!
That all makes sense.
Alright, so if it’s not important that they’re physically playable chords, may I make a few suggestions? Most of the chord voicings are very well chosen, but there are some which I think could be a little better. I can look through them a bit more carefully and give some feedback if you want.
Yeah good about the add9. Take a look at the logic for that chord also, there’s a bug in there in case you missed it. Over some roots it gets a maj7 and a b9!
Couple quick hints for the accidentals:
- Take a circle fifths and straighten it out into a line, flats are on the left sharps on the right.
- You get the least unusual note names (E# and such) if you choose the flat names for every black key except F#.
See how far you get with that and feel free to ping me if you need help.
I have a C++ example if you want but I imagine you probably wanna try solving it yourself.
Are the accidentals “right” on Visualizer? It doesn’t use circle of fifths, but I think it’s “correct”.
I haven’t used Visualizer (I might now, seems like it could be useful), but based on your manual entry, it seems to me that you have a pretty sensible system of rules, I might be curious to check under the hood exactly what it is doing.
That said, how notes are engraved on a staff is highly context sensitive, to the point that I would say it is mostly fruitless to go much beyond the system you laid out here. When I’m home I’ll give it a go and see if I can poke out any unexpected behavior if that is what you’re worried about!
Strange. I have no idea what i was thinking with the Add9 chord set. But those are not Add9 chords most of them… I made a quick patch to that, so next beta will have a revision to those. I made a ton of corrections to Add9 to the point that I’m sure I must have picked a different chord form and then forgot to update it on the panel or something.
Actually now that I wasted at least an hour trying to do accidentals justice, I have a new found respect for how well Squinky Visualizer works. I’m gonna just stick with the sharps everywhere for now… but if your code is nice and compact @andreya.ek.frisk I’ll try to learn from it.
Yes, please, if you have comments/suggestions about my voicing choices please let me know. I populated it with the main chords I used, and then for a lot of them I had to resort to guitar chord websites to try and extract the ones that sound good. And of course there are like many many variants for each chord (some which are tastier!).
I found a weird one that had mixed sharps and flats earlier. Lemme see if I can find what it was again. It does mostly seem fine.
Oh wow. So much better with the Add9 fixed. I’m not sure how my chord matrix got corrupted, but these chords were originally in Strings. I think the Add9 sounds so lush, I’m surprised I didn’t notice it in testing.
But I guess you can forgive me for getting blurry vision trying to enter all these in by hand.
Haha yeah, that looks tricky indeed. Nicely fixed!
About the note names. My thing is a more involved than you need, for microtuning reasons. I’ll link it at the bottom if you want, but probably you can get away with simpler. This is somewhat pseudocode-ish, I’m not sure that vector will compile initialized like that exactly, but you should get the idea:Note Names · GitHub
Basically, the chain of (octave-reduced) fifths is the rosetta stone of note and interval names. Major and augmented intervals are upwards on it, minor and diminished intervals left. When you have your root note and know what interval you want, you find how many steps that interval is on the chain of fifths, and find the note name at that location.
Most of your chords are pretty unambiguous about which interval categories they contain. The exception being the dim chord, which can be interpreted in different ways. The true “diminished 7th” interpretation would require you to make the interval and noteName list above much longer. So you can get the C-Eb-Gb-Bbb names in there. That’s the “correct” spelling in some opinions, though dim chords in particular get spelled other ways so often that folks are used to it. C-Eb-F#-A (m3rd, aug4th, M6th) is a spelling that you would be forgiven for by me anyway. ![]()
I’ll check out the chords again sometime with a guitar in hand and something wired up to listen in Rack too. Should be fun! Thanks again for the effort on this nice module.
Mixed sharps and flats! That is weird and not good.
Usually yes… there are very valid exceptions. D harmonic minor has one of each for example. And as noted above the Dim7 chord often gets spelled “incorrectly” etc.
But anyway, this is not one of those cases. The minor 7th in an A#9 chord is called G#, in Bb9 it’s called Ab.
At least one other Weave chord-root combo at default shift setting showed something like this as well, just can’t find it now.
Oh, and by the way @codyge. I see now that the dim chord you’ve included isn’t the full tetrad but the triad version. That makes the spelling a lot easier, I would always spell that chord as root-m3rd-dim5th. I’ll update the Gist to extend the chain of fifths downwards out to the diminished fifth.
Hammer and Picus - update
Now Hammer can be the master clock for Picus and other Hammer copies.
Hammer is very tight, the timing is more precise than Syncro (which now needs an update…). Chaining up multiple Hammers and Picus modules is also super tight. The chain cable passes not only the clock, but also reset, on and off signals, so the modules always stay in step.
Hammer has a poly output. The poly contains all 8 channels of gate outputs, and an additional 8 channels with the inverted gates. In Phasor mode, the outputs are 10V phasors instead.
This was a lot harder to get working right than I had initially expected! I also worked to get the CPU use as low as possible.
At this stage I could really use testers on Intel Mac, Windows and Linux. I think it could be ready for the library.
Other updates:
Wonk - I revised the sine computations to run every 4 cycles, but with much better interpolation than before. The CPU use is much lower and the quality of the output is comparatively better even.
Weave - Sorry no enharmonic spellings… It’s all sharps, but at least the notes aren’t totally wrong. I tried to implement the chord spellings, but it was a mess.
Node - Still monophonic cables, but now poly inputs will average down before VCAing.
Also, please feel free to share how you use these modules if you make any good patches. And as always, feedback is highly appreciated, especially bug reports.
Cheers!
EDIT: Oh yes, and one more thing I forgot to mention.
Arrange - Added Copy/Paste / Paste to All options in the Context Menu.
Creating a REPEAT PATTERN in JUNK DNA there appears to be no way to create an intentional break in the pattern (i.e. “no base” code).
So. While I was testing the new plugin. I felt the need for more VCAs…
Therefore:
Hub
Two macrocontroller knobs. Each knob has offset and gain on the input, plus CV control over the voltage range. These are meant to be for LFOs or CV and can function as two parallel bipolar VCAs. Interacting with the knob overrides the automation, giving you instant manual control over the CV signal–clicking away from the knob will restore the automation.
Node
Node is now polyphonic.
No there isn’t, there’s only A,T,C,G. But do you really want breaks in your DNA? I admit it’s a pretty esoteric module…
Consider it like a 4 channel Turing Machine with 8 additional logic outputs (4 OR and 4 NOT gates). You can use any of the channels for whatever you want, and if you just don’t use like the T output, then T will be a break in the pattern.
EDIT: arg! It was easy enough. Here you go: You can use ‘X’ to represent a strand break. It’ll display as a gap on the DNA sequence. Actually looks kinda cool, good idea @scook






