Single-Cycle Chords

Lately I found myself with some free time (like almost everybody). I left almost everything in China two months ago, and I’ve been since stranded in Thailand with my OT and my laptop. So today I decided to give another try at the idea of making single-cycle waveforms for chords.

In equal temperament it is not possible to do this, because the ratios between the notes are irrational. In order to make short waveforms with more than one note that loop correctly (without clicks) you must use frequencies that are small ratios of each other, e.g. just intonation chords.

This is a first experiment. The attached program creates SCWs for 20-some JI chords rooted at C3, together with all their inversions, for sine, saw and square waves. I also attach the generated waveforms at 44.1khz and 48khz. Hope someone finds it useful.

It might be interesting to generate some sample chains too, perhaps interpolating between different waveforms, or changing octaves, let me know if you have other ideas.

SCC-44100.zip (868.5 KB) SCC-48000.zip (921.2 KB)

26 Likes

Very interesting topic, I’ve subscribed to this thread!

I’m away from my studio now and no chance to test these files… Would it be possible for you to add an audio clip so we can conveniently preview what you’ve made here?

Presumably there is no reason this ‘single cycle waveform’ concept needs to be taken entirely literally… It could equally be a seven cycle waveform and still achieve the same end result (a tiny sized file to loop in a sampler, for use as an oscillator), right?

If so, then I guess we can use maths to calculate the shortest number of cycles required, so that all frequencies finish at a zero-crossing.

I assume that if the file was cut at a point where one or more frequencies are not at a zero-crossing, then it would prematurely force it to a zero-crossing and this would create some new harmonic, which could be bad or good, largely down to chance(?)

1 Like

Yes, I’m also very interested in making timbres loopable! Chords and noisy stuff can be very tricky, but this seems like a pretty elegant method.

Typically I find n-cycle waveforms to be a bit more flexible, like Simonator said haha. I once played around with forcing the cycles of two waveforms of any frequency into a lowest common multiple (?) by applying a smooth pitch bend across the whole duration. The amount of pitch bend is determined by the duration of the output sample and the fundamental. So they are gradually pushed to the same phase when they approach the endpoint.

I hope you get what I mean, kinda hard to whip out all these science terms in english, when you’re used to do that in another language.

1 Like

You’re right. For example consider a chord with two sinewaves forming a 5th. In just intonation the ratio between the two frequencies is 2:3, this means that when the lowest frequency wave completes two cycles the highest frequency wave completes 3. In other words, 2 cycles of the lowest frequency wave contain 3 cycles of the highest frequency wave. And then it repeats periodically. In general, when the ratios between notes are rational (like happens with chords in just intonation), it makes sense to talk about single-cycle waveforms for the chords because the chords are actually periodic. In the SCWs I built I’m using the minimum period in order to make them as small as possible.

On the other hand, in equal temperament the waveforms of chords are not periodic, they never repeat, so it doesn’t really make sense to talk about single-cycle waveforms for chords in equal temperament.

1 Like

Ahh, gotcha!

Yeah, I understand, I haven’t thought about it before, seems like a cool trick!

Will def try these out in the Rytm. Thanks!

This is very interesting. Definitely going to try them out. Although as a guitarist, I’m very much used to hearing chords out of tune :wink:

3 Likes

Thank you very much for these! Can’t wait to try them out. My interest in just intonation was sparked recently after reading the essay ‘The Eternal Drone’ by Marcus Boon in the book Undercurrents, edited by Rob Young. I would recommend it to anyone curious about this topic. Lots of other great stuff in there too.

3 Likes

wow thank you for these! i’ve been scouring the web for this stuff lately, but not since before you posted this topic.

can i ask how you went about producing these? is it the py script that actually generates the waveforms based on your instructions?

Yes, the py file generates the SCWs. You can edit the py file to change the chords that are generated, the waveforms used, and the sample rate. As it is, it generates the chords for sine, bandlimited saw and bandlimited square waves.

3 Likes

This is awesome, thank you so much for sharing your results and the elegant code! Sounds amazing on the Rytm engine :heat:

1 Like

Just tried it out, very interesting and very cool! It never really occured to me why all of the single-cycle waveforms didn’t really have chords, your explanation made a lot of sense.

Cool! Thank you :slight_smile:

Reminds me of Monomachine’s SuperPoly by @Veets:


2 Likes

@lucianon just a thank you for sharing this awesome tool

Tried messing with the .py file but I am bit at a loss with the chord parameters

for example in

'5th', [2,3]

2 and 3 refer to a ratio relative to F0=261.62, right?

I’m only familiar with semitones, is there a way to convert semitones to ratios?

I’ve found this online tool for conversion but i’m a bit baffled

thanx

Yes, but they are not both relative to F0, the first note is F0 and the others are relative to it… in this case the second note is 3/2 of the first one and if the first note is C you’d get very close to a G as the second note).

You cannot use true equal temperament semitones because they are not ratios of integers (a semitone is the 12th root of 2, an irrational number that starts 1.0594631…). The best rational approximations are 17/16, 18/17 and the next one jumps to 196/185… the bigger the numerator and denominator the larger waveforms you will get (since the cycle becomes larger), so small ratios are preferable. You can read more here https://en.wikipedia.org/wiki/List_of_intervals_in_5-limit_just_intonation and here https://en.wikipedia.org/wiki/Just_intonation, you can get some ratios from there that you can use to generate other chords, there are many, lots of room for experiments…

2 Likes

so you need to tune your guitar!:joy:

thank you very much

Hi ! Hope you’re okay since last year

So i dusted out my rytm recently and spent some time trying to figure out (again) those wikis you linked to

I have some questions :

  1. I could use this table for 12 step tuning right?
    I think I understand that to output a C + F# i’ll have to input 1024:729 ( ['chord', [1024, 729]] ) which will generate a relatively long waveform but i’m okay with that, still seems pretty short to me.

  2. If for instance i declare a chord as follows ['chord', [4, 5, 2, 3]] it should output a combination of C + F + G ?
    Knowing that the ratio in the table linked above says that C = 1:1 , F = 4:3, G = 3:2

  3. Does the script exclusively generate 2 to 3 note chords? The fifth element of the array is for inversions only? for example 10 in ['chord', [4, 5, 2, 3, 10]]

  4. Anyone else here using this brilliant tool ? A few more chord examples would be much appreciated.

Thanks