Wednesday, April 9, 2025

Fun Fact : 251hz Is Very Close To Middle C

c4 = 261.63hz
b3 = 246.94hz

its b3 27.94% sharp
251 hz is b3 + 28 cents


Determining if 251 Hz is a Sharp B3

The Problem

Determine whether 251 Hz represents a sharp B3 note by calculating its position between the standard frequencies of B3 (246.94 Hz) and C4 (261.63 Hz).

Step-by-Step Calculation

1. Identify the Reference Frequencies

  • B3 = 246.94 Hz
  • C4 = 261.63 Hz

2. Calculate the Distance Between Notes

The full semitone distance between B3 and C4:

Semitone Range = 261.63 Hz - 246.94 Hz = 14.69 Hz

3. Calculate the Distance From B3 to Our Target

Target Distance = 251 Hz - 246.94 Hz = 4.06 Hz

4. Calculate the Percentage Position

Position Percentage = (Target Distance ÷ Semitone Range) × 100%
Position Percentage = (4.06 Hz ÷ 14.69 Hz) × 100% = 27.64%

5. Convert to Cents

In musical terms, one semitone equals 100 cents. To convert our percentage to cents:

Cents from B3 = Position Percentage × 100 cents
Cents from B3 = 27.64% × 100 cents = 27.64 cents

Conclusion

251 Hz is a B3 note that is approximately 27.64 cents sharp. Since this is less than 50 cents (which would be halfway to C4), we can properly describe it as a "slightly sharp B3" rather than a flat C4.

Formula Summary

To find where a frequency falls between two reference notes:

  1. Calculate the semitone range: HigherFrequency - LowerFrequency
  2. Calculate the target distance: TargetFrequency - LowerFrequency
  3. Calculate the position percentage: (TargetDistance ÷ SemitoneRange) × 100%
  4. Convert to cents: PositionPercentage × 100 cents

Tuning an Instrument to Room Resonance

Goal:
Make your instrument lock in with the natural resonance frequencies of the room, so it sounds fuller, louder, and more "alive."


1. Understand Room Resonance

Every room has natural frequencies it favors — like how a wine glass vibrates at a particular pitch.
These resonant frequencies depend on:

  • Room dimensions (length, width, height)
  • Surfaces (walls, floor, ceiling material)

At certain frequencies, the sound waves bounce perfectly and amplify themselves.
Those pitches are where your instrument will sound best or loudest without extra effort.


2. Find the Room Resonant Frequencies

You have a few ways:

Quick and Ears-Only Method

  • Stand in the middle of the room.
  • Hum a steady low pitch.
  • Slowly glide your voice up (like a slow siren).
  • You'll notice some notes "bloom" — they get louder or feel like the room "catches" them.

When you hit one, hold it. Walk around.
If it stays loud in multiple spots, that's a room resonance.

Write these down (even roughly):
Example: "Somewhere around a low A" or "near middle C."

Technical Method (Optional)

Use a tone generator app (many free ones exist) and sweep from 20 Hz to 500 Hz slowly.

When the tone gets super loud without raising the volume, that's a resonance peak.


3. Tune Your Instrument

Once you know the resonant frequencies:

  • Match a string or note on your instrument to a nearby room resonance.
  • You don’t have to match exactly — being close can still boost the sound.
  • Tiny detunings (a few cents sharp or flat) can help maximize resonance.

Example:
If your room has a big resonance around 110 Hz (A2),
you might slightly adjust your guitar’s tuning so the open A string aligns even better.


4. Play and Adjust

  • Strum or bow or pluck your instrument near the center of the room.
  • Listen for notes that seem to "hang" or get louder with less effort.
  • Slightly tweak tuning until certain notes or chords ring out.

5. Other Tips

  • Height matters: Some notes resonate better higher up (standing) or lower down (sitting).
  • Corners boost bass: Low frequencies are stronger in corners. Try playing there.
  • Move around: Find "sweet spots" where both you and the room are happy.
  • Use harmonics: On strings, lightly touch at 12th fret, 7th, 5th — natural harmonics often catch resonances strongly.

Why Do This?

  • Bigger, richer sound.
  • Easier to project without forcing.
  • Can make a cheap instrument sound surprisingly powerful.

Bonus: Use It Musically

  • Tuning your drone notes (if you’re using one) to a room resonance makes the whole room feel like it’s vibrating with your music.
  • Great for solo performance, ambient setups, and recording.

logarithmic notes of the spectrogram

using this knowledge you can pick out frequencies on an eq or tune up just by eyeballing what lines up with your scope

The pattern:

  • 3 g
  • 3 b
  • 2 eb

a mnemonic to help you remember

Glorious Green Grapes Beat Big Bells Ebony Ebeneezer

Frequency (Hz) Nearest Note Cents Off (Sharp/Flat)
50 G1 +2 cents
100 G2 +2 cents
200 G3 +2 cents
500 B4 -13 cents
1000 B5 -13 cents
2000 B6 -13 cents
5000 D#8 / Eb8 -32 cents
10000 D#9 / Eb9 -32 cents

guitar harmonics ( e and a strings)

E String, Fret 0 (E)

Harmonic Frequency (Hz) Note
1 82.41 E2
2 164.82 E3
3 247.23 B3
4 329.64 E4
5 412.05 G#4

E String, Fret 1 (F)

Harmonic Frequency (Hz) Note
1 87.31 F2
2 174.62 F3
3 261.93 C4
4 349.24 F4
5 436.55 A4

E String, Fret 2 (F#/Gb)

Harmonic Frequency (Hz) Note
1 92.50 F#2
2 185.00 F#3
3 277.50 C#4
4 370.00 F#4
5 462.50 A#4

E String, Fret 3 (G)

Harmonic Frequency (Hz) Note
1 98.00 G2
2 196.00 G3
3 294.00 D4
4 392.00 G4
5 490.00 B4

E String, Fret 4 (G#/Ab)

Harmonic Frequency (Hz) Note
1 103.83 G#2
2 207.66 G#3
3 311.49 D#4
4 415.32 G#4
5 519.15 C5

E String, Fret 5 (A)

Harmonic Frequency (Hz) Note
1 110.00 A2
2 220.00 A3
3 330.00 E4
4 440.00 A4
5 550.00 C#5

E String, Fret 6 (A#/Bb)

Harmonic Frequency (Hz) Note
1 116.54 A#2
2 233.08 A#3
3 349.62 F4
4 466.16 A#4
5 582.70 D5

E String, Fret 7 (B)

Harmonic Frequency (Hz) Note
1 123.47 B2
2 246.94 B3
3 370.41 F#4
4 493.88 B4
5 617.35 D#5

E String, Fret 8 (C)

Harmonic Frequency (Hz) Note
1 130.81 C3
2 261.62 C4
3 392.43 G4
4 523.24 C5
5 654.05 E5

E String, Fret 9 (C#/Db)

Harmonic Frequency (Hz) Note
1 138.59 C#3
2 277.18 C#4
3 415.77 G#4
4 554.36 C#5
5 692.95 F5

E String, Fret 10 (D)

Harmonic Frequency (Hz) Note
1 146.83 D3
2 293.66 D4
3 440.49 A4
4 587.32 D5
5 734.15 F#5

E String, Fret 11 (D#/Eb)

Harmonic Frequency (Hz) Note
1 155.56 D#3
2 311.12 D#4
3 466.68 A#4
4 622.24 D#5
5 777.80 G5

E String, Fret 12 (E)

Harmonic Frequency (Hz) Note
1 164.81 E3
2 329.62 E4
3 494.43 B4
4 659.24 E5
5 824.05 G#5

A String, Fret 0 (A)

Harmonic Frequency (Hz) Note
1 110.00 A2
2 220.00 A3
3 330.00 E4
4 440.00 A4
5 550.00 C#5

A String, Fret 1 (A#/Bb)

Harmonic Frequency (Hz) Note
1 116.54 A#2
2 233.08 A#3
3 349.62 F4
4 466.16 A#4
5 582.70 D5

A String, Fret 2 (B)

Harmonic Frequency (Hz) Note
1 123.47 B2
2 246.94 B3
3 370.41 F#4
4 493.88 B4
5 617.35 D#5

A String, Fret 3 (C)

Harmonic Frequency (Hz) Note
1 130.81 C3
2 261.62 C4
3 392.43 G4
4 523.24 C5
5 654.05 E5

A String, Fret 4 (C#/Db)

Harmonic Frequency (Hz) Note
1 138.59 C#3
2 277.18 C#4
3 415.77 G#4
4 554.36 C#5
5 692.95 F5

A String, Fret 5 (D)

Harmonic Frequency (Hz) Note
1 146.83 D3
2 293.66 D4
3 440.49 A4
4 587.32 D5
5 734.15 F#5

A String, Fret 6 (D#/Eb)

Harmonic Frequency (Hz) Note
1 155.56 D#3
2 311.12 D#4
3 466.68 A#4
4 622.24 D#5
5 777.80 G5

A String, Fret 7 (E)

Harmonic Frequency (Hz) Note
1 164.81 E3
2 329.62 E4
3 494.43 B4
4 659.24 E5
5 824.05 G#5

A String, Fret 8 (F)

Harmonic Frequency (Hz) Note
1 174.61 F3
2 349.22 F4
3 523.83 C5
4 698.44 F5
5 873.05 A5

A String, Fret 9 (F#/Gb)

Harmonic Frequency (Hz) Note
1 185.00 F#3
2 370.00 F#4
3 555.00 C#5
4 740.00 F#5
5 925.00 A#5

A String, Fret 10 (G)

Harmonic Frequency (Hz) Note
1 196.00 G3
2 392.00 G4
3 588.00 D5
4 784.00 G5
5 980.00 B5

A String, Fret 11 (G#/Ab)

Harmonic Frequency (Hz) Note
1 207.65 G#3
2 415.30 G#4
3 622.95 D#5
4 830.60 G#5
5 1038.25 C6

A String, Fret 12 (A)

Harmonic Frequency (Hz) Note
1 220.00 A3
2 440.00 A4
3 660.00 E5
4 880.00 A5
5 1100.00 C#6

Tuesday, April 8, 2025

bass guitar harmonics (e and a strings to the 5th)

E String, Fret 0 (E)

Harmonic Frequency (Hz) MIDI Note
1 41.20 28
2 82.40 40
3 123.60 47
4 164.80 52
5 206.00 56

E String, Fret 1 (F)

Harmonic Frequency (Hz) MIDI Note
1 43.65 29
2 87.30 41
3 130.95 48
4 174.60 53
5 218.25 57

E String, Fret 2 (F#/Gb)

Harmonic Frequency (Hz) MIDI Note
1 46.25 30
2 92.50 42
3 138.75 49
4 185.00 54
5 231.25 58

E String, Fret 3 (G)

Harmonic Frequency (Hz) MIDI Note
1 49.00 31
2 98.00 43
3 147.00 50
4 196.00 55
5 245.00 59

E String, Fret 4 (G#/Ab)

Harmonic Frequency (Hz) MIDI Note
1 51.91 32
2 103.82 44
3 155.73 51
4 207.64 56
5 259.55 60

E String, Fret 5 (A)

Harmonic Frequency (Hz) MIDI Note
1 55.00 33
2 110.00 45
3 165.00 52
4 220.00 57
5 275.00 61

E String, Fret 6 (A#/Bb)

Harmonic Frequency (Hz) MIDI Note
1 58.27 34
2 116.54 46
3 174.81 53
4 233.08 58
5 291.35 62

E String, Fret 7 (B)

Harmonic Frequency (Hz) MIDI Note
1 61.74 35
2 123.48 47
3 185.22 54
4 246.96 59
5 308.70 63

E String, Fret 8 (C)

Harmonic Frequency (Hz) MIDI Note
1 65.41 36
2 130.82 48
3 196.23 55
4 261.64 60
5 327.05 64

E String, Fret 9 (C#/Db)

Harmonic Frequency (Hz) MIDI Note
1 69.30 37
2 138.60 49
3 207.90 56
4 277.20 61
5 346.50 65

E String, Fret 10 (D)

Harmonic Frequency (Hz) MIDI Note
1 73.42 38
2 146.84 50
3 220.26 57
4 293.68 62
5 367.10 66

E String, Fret 11 (D#/Eb)

Harmonic Frequency (Hz) MIDI Note
1 77.78 39
2 155.56 51
3 233.34 58
4 311.12 63
5 388.90 67

E String, Fret 12 (E)

Harmonic Frequency (Hz) MIDI Note
1 82.41 40
2 164.82 52
3 247.23 59
4 329.64 64
5 412.05 68

A String, Fret 0 (A)

Harmonic Frequency (Hz) MIDI Note
1 55.00 33
2 110.00 45
3 165.00 52
4 220.00 57
5 275.00 61

A String, Fret 1 (A#/Bb)

Harmonic Frequency (Hz) MIDI Note
1 58.27 34
2 116.54 46
3 174.81 53
4 233.08 58
5 291.35 62

A String, Fret 2 (B)

Harmonic Frequency (Hz) MIDI Note
1 61.74 35
2 123.48 47
3 185.22 54
4 246.96 59
5 308.70 63

A String, Fret 3 (C)

Harmonic Frequency (Hz) MIDI Note
1 65.41 36
2 130.82 48
3 196.23 55
4 261.64 60
5 327.05 64

A String, Fret 4 (C#/Db)

Harmonic Frequency (Hz) MIDI Note
1 69.30 37
2 138.60 49
3 207.90 56
4 277.20 61
5 346.50 65

A String, Fret 5 (D)

Harmonic Frequency (Hz) MIDI Note
1 73.42 38
2 146.84 50
3 220.26 57
4 293.68 62
5 367.10 66

A String, Fret 6 (D#/Eb)

Harmonic Frequency (Hz) MIDI Note
1 77.78 39
2 155.56 51
3 233.34 58
4 311.12 63
5 388.90 67

A String, Fret 7 (E)

Harmonic Frequency (Hz) MIDI Note
1 82.41 40
2 164.82 52
3 247.23 59
4 329.64 64
5 412.05 68

A String, Fret 8 (F)

Harmonic Frequency (Hz) MIDI Note
1 87.31 41
2 174.62 53
3 261.93 60
4 349.24 65
5 436.55 69

A String, Fret 9 (F#/Gb)

Harmonic Frequency (Hz) MIDI Note
1 92.50 42
2 185.00 54
3 277.50 61
4 370.00 66
5 462.50 70

A String, Fret 10 (G)

Harmonic Frequency (Hz) MIDI Note
1 98.00 43
2 196.00 55
3 294.00 62
4 392.00 67
5 490.00 71

A String, Fret 11 (G#/Ab)

Harmonic Frequency (Hz) MIDI Note
1 103.83 44
2 207.66 56
3 311.49 63
4 415.32 68
5 519.15 72

A String, Fret 12 (A)

Harmonic Frequency (Hz) MIDI Note
1 110.00 45
2 220.00 57
3 330.00 64
4 440.00 69
5 550.00 73

ukulele notes and frequencies

G String (Note - Frequency) C String (Note - Frequency) E String (Note - Frequency) A String (Note - Frequency)
G4 - 392.00 Hz C4 - 261.63 Hz E4 - 329.63 Hz A4 - 440.00 Hz
G♯4/A♭4 - 415.30 Hz C♯4/D♭4 - 277.18 Hz F4 - 349.23 Hz A♯4/B♭4 - 466.16 Hz
A4 - 440.00 Hz D4 - 293.66 Hz F♯4/G♭4 - 369.99 Hz B4 - 493.88 Hz
A♯4/B♭4 - 466.16 Hz D♯4/E♭4 - 311.13 Hz G4 - 392.00 Hz C5 - 523.25 Hz
B4 - 493.88 Hz E4 - 329.63 Hz G♯4/A♭4 - 415.30 Hz C♯5/D♭5 - 554.37 Hz
C5 - 523.25 Hz F4 - 349.23 Hz A4 - 440.00 Hz D5 - 587.33 Hz
C♯5/D♭5 - 554.37 Hz F♯4/G♭4 - 369.99 Hz A♯4/B♭4 - 466.16 Hz D♯5/E♭5 - 622.25 Hz
D5 - 587.33 Hz G4 - 392.00 Hz B4 - 493.88 Hz E5 - 659.26 Hz
D♯5/E♭5 - 622.25 Hz G♯4/A♭4 - 415.30 Hz C5 - 523.25 Hz F5 - 698.46 Hz
E5 - 659.26 Hz A4 - 440.00 Hz C♯5/D♭5 - 554.37 Hz F♯5/G♭5 - 739.99 Hz
F5 - 698.46 Hz A♯4/B♭4 - 466.16 Hz D5 - 587.33 Hz G5 - 783.99 Hz
F♯5/G♭5 - 739.99 Hz B4 - 493.88 Hz D♯5/E♭5 - 622.25 Hz G♯5/A♭5 - 830.61 Hz
G5 - 783.99 Hz C5 - 523.25 Hz E5 - 659.26 Hz A5 - 880.00 Hz

guitar (e and a string) frequencies

Low E String (Note - Frequency) A String (Note - Frequency)
E2 - 82.41 Hz A2 - 110.00 Hz
F2 - 87.31 Hz A♯2/B♭2 - 116.54 Hz
F♯2/G♭2 - 92.50 Hz B2 - 123.47 Hz
G2 - 98.00 Hz C3 - 130.81 Hz
G♯2/A♭2 - 103.83 Hz C♯3/D♭3 - 138.59 Hz
A2 - 110.00 Hz D3 - 146.83 Hz
A♯2/B♭2 - 116.54 Hz D♯3/E♭3 - 155.56 Hz
B2 - 123.47 Hz E3 - 164.81 Hz
C3 - 130.81 Hz F3 - 174.61 Hz
C♯3/D♭3 - 138.59 Hz F♯3/G♭3 - 185.00 Hz
D3 - 146.83 Hz G3 - 196.00 Hz
D♯3/E♭3 - 155.56 Hz G♯3/A♭3 - 207.65 Hz
E3 - 164.81 Hz A3 - 220.00 Hz

bass guitar notes and frequencies

Low E String (Note - Frequency) Low A String (Note - Frequency)
E1 - 41.20 Hz A1 - 55.00 Hz
F1 - 43.65 Hz A♯1/B♭1 - 58.27 Hz
F♯1/G♭1 - 46.25 Hz B1 - 61.74 Hz
G1 - 49.00 Hz C2 - 65.41 Hz
G♯1/A♭1 - 51.91 Hz C♯2/D♭2 - 69.30 Hz
A1 - 55.00 Hz D2 - 73.42 Hz
A♯1/B♭1 - 58.27 Hz D♯2/E♭2 - 77.78 Hz
B1 - 61.74 Hz E2 - 82.41 Hz
C2 - 65.41 Hz F2 - 87.31 Hz
C♯2/D♭2 - 69.30 Hz F♯2/G♭2 - 92.50 Hz
D2 - 73.42 Hz G2 - 98.00 Hz
D♯2/E♭2 - 77.78 Hz G♯2/A♭2 - 103.83 Hz
E2 - 82.41 Hz A2 - 110.00 Hz

Monday, April 7, 2025

its okay to use 5 soundgoodizers

5 soundgoodizers on the c setting is actually perfect
not turned up (unless you want to do whatever you want)
its basically the same as using 3 OTTs in ableton
it really brings out the top end shine on some sytrus patches
I've got one thats just a sine with a volume envelope bringing in the harmonics and you can tell the sound is there but its really quiet
this perfectly levels it up and makes it nice and even. makes the chorus sound greasy
I honestly never messed around with soundgoodizer because I thought itw as a noob tool for people who didn't want to get into the sauce.
but it delivers
5 is also something that i wouldn't dare to do
you'd think it would be too much but its not
one caveat to add about this though is just like with maximus the lookahead on the compressor introduces latency which in version 10 FL on linux mint I don't think they did any plugin delay compensation (PDC) so you manually need to shift it.
normally in edison when you resample using 'on play mode' the loop markers line up with your time selection, in this case you'll need to go in and shift them to the start of the transient manually to get clean loops.

what was in my sytrus patch?
starting 3 octaves down at c8 (fl counts backwards from c5 for some reason)
2 into 1 going out to filter 1.
3 into 2
for the ratios:
op 1 = 2
op 2 = 4
op 3 = 64 a triangle wave
the envelopes:
op1 vol is the shortest tempo synced triangle (curving inward)
op3 vol is 4 bar zig zag triangles
op3 provides alot of the variation to the high harmonics when sustained. Its really important that it all goes through the bandpass filter to mellow out the tops.
problem is it gets a little too mellow thats where the 5 soundgoodizers come in..

How To Save Paper While Learning Songs

In Libre Office I write a placeholder Song - Artist line at the top (because formatting after is annoying otherwise)
then I add a 2 col table and set the border to invisible
finally, I save it as a template so i can use
shift ctrl n to make a new invisible 2 col table document that I paste the lyrics into
If I really want to squeeze in 2 songs maybe Il do 3 col but 2 is my go to to save paper.
print double sided if your printer has that functionality or print it and then flip it over and print on the other side.
Its really important for me to not have a song span more than 1 sheet of paper because otherwise they get lost
my goto site before was ultimate guitar but I refuse to sign in and they no longer seem to let you print without being a member
I used to go into the print setting on ug because they had an option to shrink the font and remove the chord diagrams and default to 2 col
I don't know of any other sites that have the 2 col option so thats why its good to know if you want to save paper and do it yourself.
most other sites that include chords have weird formatting that gets messed up if shrunken down or it just doesnt shrink well at all.
In that case I just go for the lyrics and figure it out by ear or write them in afterwards from some other site
A pet peeve of mine is when they capo it and it doesn't match the recording or they over complicate it with a bunch of sus2 chords.
Lead sheets are supreme I wish there was more available
musescore has a bunch of sheets that are overcomplicated needlessly
(I need to just get better at sight reading and it wouldn't be much of a problem
A lot of times the music is more complicated than it needs to be.

Thursday, April 3, 2025

edison multi purpose envelope

cross fading with the mpe
this is a deep cut secret fl trick. probably could be used for comping takes too

fm8 waveforms for sytrus

xenowave posted this in the FL forum its gold

those formant waves are sick you I think you can make them by rm'ing a saw wave in unipolar mode? anyway its wicked because normally you can't fm something that has rm applied in sytrus so it opens up some cool sound design possibilities

Wednesday, April 2, 2025

the 1 reason to use slicer over slicex

fruity slicer has chop on beat, or half beat while slicex just has autochop on 3 transient threshold levels. usually gives you too many or not enough usefull chops.

the whole point of using breaks is to keep those grooves which us why I don’t use transient chops which dump way too much junk midi to wade through in my piano roll.

Usually what I end up doing (if i go that route) is pick out a few choice 1 shots from the garbled mess that autochop spews and instead of quantizing it (which 90% shifts it to the wrong spot and ruins my shuffles) I draw it in.

before doing this its good to label the chops that are significant so you can find them easily in the piano roll.

breaks like the soul pride the timing is all over the place so how I work with it is i place the break at 0 in the timeline and drag the tempo till I see the snare align with the second grid line. Listening with the click on it should be fairly locked in for the rest of the bar up to the next snare and il use that next snare as my next anchor point to judge if i need to speed it up or slow it down for it to lock in. Usually thats enough to get a good loop but soul pride is really all over the place. id go in and just get a few choice shuffles and dip out once I resample them.

In edison you can go into sample settings to establish the tempo metadata in your sample before you save it and in render settings you use "save as acidized loop" to include the tempo in the .wav. Its also good practise to include it in the name of your file when you render it out.

The jungle warfare sample cds are sick but also kind of suck (like many sample cds). the problem is the sequenced loops try too hard to be original. they moved all the hits around to be uniquely choppy in a way that sounds bad for music. they sound good as loops stand alone but not as a supporting element in music. usually too busy and no backbeat. They are off kilter to sound jungley but they don’t hold up to be looped through an entire track because they are too busy. Its a whole lot of work to do un do it which is why its better to just use the original breaks imo. (it is inspiring to hear them though).

one of the best ways to chop that is surprisingly difficult to do in fl version 10 is to split a sample into even slices and throw it across your pads mpc style.
fruity slicer can do it if your tempo data is correct (you need to massage the sample into the grid and resample with edison on play mode sometimes to get the loops right first).

Slicex came in as the predecessor and I thought was better in every way until i revisited for that one purpose. the later versions of fl have edison/slicex scripts in the forum that finally let you chop to an even number of slices but my weird linux wine setup only lets me run version 10 (i got the last 32 but version v20 running once and 24 but it stopped launching for some reason and I gave up because 10 ran better for most things like 32 plugins wouldn't run in v24)

I like to keep my sessions short and focused. Im just going to fix my breaks and turn off the computer and go outside. my goal was to fix the soul pride break

  • figure out the tempo for the main backbeat
  • the shuffles
  • try different time stretch algo
  • half / double tempo sequence

resample all those in edison and export 1 wav with the tempo info

sytrus fx output demystified

Like many of the knobs in sytrus, the reverb volume slider is bipolar so the middle point is actually zero. I saw in the manual that you can route the fx to their own channel in the mixer but it wasn't working for me thats why. Each time I thought I switched it off I actually just inverted the phase.

Sunday, March 30, 2025

you don't need a fancy sampler

in fl studio i would use fruity soundfont player for multi sampled insturnents and drum kits. Sometimes i create layers, set and split children to play them from 1 midi lane (newer fl finally got around to letting you include samplers in patcher so you can use vfx splitter or set up key zone splits).

  • in settings set omnipreview to 1

this lets you play everything in tbe channel rack at once!

Saturday, March 29, 2025

mid side

mid is the sum divided by 2
side is the difference divided by 2

mid = (left + right) / 2
side = (left - right) / 2

today I learned you can create envelopes by dragging audio files from the browser or from edison.
intermodulation distortion
clicking on automation clips (not in the old fl) you can import audio and use the peaks to create automation clips
my old way was using the fruity peak controller
you can also drag audio into fruity love filter and the envelope controller.
I've been into using ctrl t (typing keys), ctrl e (step edit mode) to enter in triads.
then using what I learned about the harmonic series to create spread voicings
was watching a flux pavillion against the clock where he was using just a saw wave in massive but it was the way he arranged it that made it sound huge.
being infront of a piano its easy to reach for those spread voicings but clicking it is quite a hassle untill I learned this way.
ctrl up down, to octave shift
shift up down, for semitones
right click edit events
alt o creates an lfo do this for each time selection
you can set the rate synced to the tempo and have it interpolate between 2 ranges
like 16th note slowing down to eighth and ramping down the intensity
then you can export the events data to an automation clip

Friday, March 28, 2025

g melodic minor might make more sense than c major (harmonic series)

Does G melodic minor relate more to the harmonic series of C than most scales?

The harmonic series of C refers to the overtones generated when you play a fundamental C. These overtones are naturally occurring and help define what we perceive as consonance. The harmonic series of C includes notes like:

C  (1st harmonic, fundamental)
C  (2nd harmonic, octave)
G  (3rd harmonic, perfect fifth)
C  (4th harmonic)
E  (5th harmonic, major third)
G  (6th harmonic)
Bb (7th harmonic, but it’s flatter than equal temperament)
C  (8th harmonic)
D  (9th harmonic)
E  (10th harmonic)
F# (11th harmonic, sharper than in equal temperament)
G  (12th harmonic)
A  (13th harmonic)
Bb (14th harmonic, again a bit flat)
B  (15th harmonic)
C  (16th harmonic)

Now, the G melodic minor scale is:

G - A - Bb - C - D - E - F#

Compare this to the harmonic series of C:

It shares G, C, E, A, Bb, F#, and even D appears early in the series.

The G melodic minor scale includes several of the prominent early overtones from the harmonic series of C, particularly:

G   (3rd, 6th, 12th harmonics)
E   (5th, 10th)
Bb  (7th and 14th, though slightly off)
C   (1st, 2nd, 4th, 8th, 16th)
D   (9th)
F#  (11th harmonic-ish — although not exact in equal temperament)

Conclusion

Yes, G melodic minor does align more closely with the harmonic series of C than many other scales — especially because it includes many partials (or close approximations of them), including the somewhat oddballs like F# (11th) and Bb (7th/14th), which are rare in most diatonic scales.

So in a way, G melodic minor “echoes” the color of the C harmonic series more than, say, a C major scale does. It's an excellent observation if you're exploring spectral relationships or tuning theory.

Monday, March 24, 2025

Tutorial: Tempo Math in Reaper

Let's say you have a song that is originally 124 BPM (beats per minute), and you drag it into Reaper, which has the default project tempo set to 120 BPM. You then change the project rate to 200 BPM. Now, the question is: What is the new tempo of the song in this new project rate?

Step 1: Calculate the percentage change between the original project tempo (120 BPM) and the new project tempo (200 BPM).

When you change the project tempo, you're effectively stretching or compressing the song to match the new tempo. To understand how much this changes the song’s tempo, you first need to find the percentage change between the project tempos.

The formula for calculating the percentage change is:

Percentage change = ((New Tempo - Original Tempo) / Original Tempo) * 100

Using the values provided:

Percentage change = ((200 - 120) / 120) * 100
= (80 / 120) * 100
= 66.67%

So, the project tempo has increased by 66.67% when the rate changes from 120 BPM to 200 BPM.

Step 2: Apply the percentage change to the original song tempo.

Now that we know the project rate increased by 66.67%, we can use this same percentage to adjust the original song tempo. The formula to apply the percentage increase to the original tempo is:

New Song Tempo = Original Song Tempo * (1 + (Percentage Change / 100))

Substituting the values:

New Song Tempo = 124 * (1 + (66.67 / 100))
= 124 * 1.6667
= 206.67 BPM

So, after adjusting the project rate to 200 BPM, the new tempo of the song is approximately 206.67 BPM.

Conclusion

By understanding how the project rate affects the tempo, you can calculate how much the song’s speed will change when you adjust the project tempo in Reaper. In this case, with a project rate change from 120 BPM to 200 BPM, the original song tempo of 124 BPM increases to approximately 206.67 BPM.

Friday, March 14, 2025

getting a-shell mini setup again

pkg install nnn (file browser)
mkdir -p ~/Documents/.vim/pack/bweew/start
lg2 clone nerdtree, vimwiki gruvbox, vim-orgmode

  • use the pickFolder command to set bookmarks outside of the sandbox
  • z command jumps to those bookmarks
let g:vimwiki_list = [{'path' : '~/Documents/vimwiki/'}]

add that to your .vimrc so vimwiki can work properly

fix linux mint keybindings clashing with everything

window manager tweaks, key used to grab windows ALT set it to none
in settings under keyboard:
alt super s = orca (most annoying thing ever its the first thing im going to remove I don't need to. it doesn't clash with anything I can think of but i remember it being really annoying and wasted a bunch of my time trying to figure out how to turn it off last time
xfce-app finder = alt f3
xfce-app fiinder collapsed = alt f2
xfce-popup-applicationsmenu = alt f1
xfce4-popup-whiskermenu = super L
xfdesktop--menu = ctrl esc
under window manager:
window operations menu = alt space
cycle windows alt tab / shift alt tab
close window = alt f4
toggle above = alt f12
toggle fulscreen = alt f11
workspaces = ctrl alt up/down/left/right
switch workspaces ctrl + f# ctrl f3 = space 3 etc..

Thursday, March 13, 2025

bunch of old vsts as dlls

was looking for a plugin called mda detune that was simple and sounded great found it on archive.org no installers needed from archive

Wednesday, March 12, 2025

saturating highs before lows

cool mixing trick from sage audio.

  • use a shelf eq to tilt down the low end before running it through distortion then reverse it after.
  • this preserves the bass from getting blown out

It's similar to how compressors that have a high-pass filter built into the detection circuit before the threshold to prevent pumping.

tal use (ultra simple eq) is one option its a free tilt eq

Friday, March 7, 2025

clean amps

softamp fm25 - axp
softamp gt

these delays by arc dev noise industries are nice

dropbox link

the guy who made that plugin makes folk dub shoegaze as terminal sound system

a beautiful machine
antisound.net
terminal soundsystems website

My top picks lately
cyclotron, et-301, dubb box, quilcom bfp, madshifta by tobybear, synthscience freezechamber, the oli larkin ones like gatecomb, the demo of endless series

tbt sample reducer- I like this one

Thursday, March 6, 2025

wohlstand opl3 bank editor

opl3 bank editor
vinyl goddess
I want the bass patch from lvl 1 crush. cant do anything with vgm files.(plogue portasound could but hasn't been ported to linux yet) disco dsp opl loads sbi files. i think i could use opl3 bank editor to convert .snd files to work and even use it in adlib tracker.

flangers, binaural, ringmod, saturation, compressors

lisp de-esser - sleepy time dsp
et-200 bbd delay
wah bundle
decimator - toby bear
formant filter - oli larkin
se64
auto talent
stepcomb
gatecomb
falseFI
faranear
rp-pan - panner doppler
spatializer - hrtf binaural by blue lab audio
stereo width - blue lab audio
stc-3 raz audio(looks like blue lab one above)
multiband stereo faker - klanglabs
anaglyph 3d binaural spatializer
sjoe dualband stereo enhancer - terrywest
binaural sim - gregjazz
ms - terry west
rs rotothree leslie rotary
brandulator modulated comb filters
dd flanger
syncersoft flanger(bass landscapes)
IO ring mod - b serrano
madring ring mod - novaflash
nasty DLA - vos
timewarp vibrato
adam monroe tremolo
flanger box - synthscience
bfp barberpole flanger - quilcom
gt ringmod - glitchtek
cab enhancer - acme bargig
ts-1 - samsara cycle audio vinylizer
devicer
echomachine - plektron
vocalizer formant filter - aquest
vowel filter - tobybear
trileveler 2 sonic anomaly
sn01-G vca bus compressor - senderspike
sl63x - smacklabs
reacomp
modern deathcore distressor clone - antress
devils compressor
dynamic freq lim - sir sicksik (mb transient shaping/ dyn eq)

Sunday, March 2, 2025

FL Maximus compression envelopes

this really helps you understand how this plugin works.

Wednesday, February 26, 2025

sending midi cc 64 on press and cc 65 when held for 1 second - piano sustain pedal midi scripting

For use in Reapers super 8 looper. Experimented with using on release instead of on press (like in loopy pro) but the travel distance of this piano sustain pedal is too large to be accurate so I had to remove my double and triple tap functions, still awesome being able to double your midi inputs for 0$ was hoping to get all the functions mapped though.. looking at the m vave chocolate foot switch though looks pretty cool for 50$


import time
import rtmidi
from rtmidi.midiconstants import CONTROL_CHANGE

# Configuration - Customized for single pedal operation
SUSTAIN_CC = 64          # Default sustain pedal CC - Used for both functions
RECORD_TOGGLE_CC = 64    # Record/Play/Overdub (same as sustain)
CLEAR_LOOP_CC = 65       # Clear loop CC to be triggered by holding sustain

MIDI_CHANNEL = 0         # MIDI channel (0-15)
HOLD_THRESHOLD = 1.0     # Time in seconds required to hold sustain to clear loop

class LooperPedalController:
    def __init__(self):
        # Set up MIDI input/output
        self.midi_in = rtmidi.MidiIn()
        self.midi_out = rtmidi.MidiOut()
        
        # State variables
        self.is_recording = False
        self.is_playing = False
        self.pedal_down = False
        self.press_start_time = 0
        self.action_triggered = False
        
        self.setup_midi()
        
    def setup_midi(self):
        # List available ports
        in_ports = self.midi_in.get_ports()
        out_ports = self.midi_out.get_ports()
        
        print("Available MIDI input ports:")
        for i, port in enumerate(in_ports):
            print(f"  {i}: {port}")
            
        print("Available MIDI output ports:")
        for i, port in enumerate(out_ports):
            print(f"  {i}: {port}")
        
        # Let user select ports
        in_port = int(input("Select MIDI input port number: "))
        out_port = int(input("Select MIDI output port number: "))
        
        # Open ports
        self.midi_in.open_port(in_port)
        self.midi_out.open_port(out_port)
        
        # Set callback
        self.midi_in.set_callback(self.midi_callback)
        
    def midi_callback(self, event, data=None):
        message, delta_time = event
        
        # Process Control Change messages for the sustain pedal
        if len(message) == 3 and message[0] == CONTROL_CHANGE | MIDI_CHANNEL and message[1] == SUSTAIN_CC:
            value = message[2]
            current_time = time.time()
            
            if value >= 64:  # Pedal down
                self.handle_pedal_down(current_time)
            else:  # Pedal up
                self.handle_pedal_up(current_time)
    
    def handle_pedal_down(self, current_time):
        # Record when the pedal was pressed
        self.press_start_time = current_time
        self.pedal_down = True
        self.action_triggered = False
        
    def handle_pedal_up(self, current_time):
        duration = current_time - self.press_start_time
        self.pedal_down = False
        
        # If action was already triggered (by hold), do nothing more
        if self.action_triggered:
            return
            
        # If pedal was pressed briefly (not held), trigger record/play/overdub
        if duration < HOLD_THRESHOLD:
            self.handle_record_toggle()
    
    def handle_record_toggle(self):
        # Toggle between record, play, and overdub
        print("Quick press - Record/Play/Overdub toggle")
        self.send_cc(RECORD_TOGGLE_CC, 127)
        time.sleep(0.05)
        self.send_cc(RECORD_TOGGLE_CC, 0)
        
        # Update internal state (for display purposes)
        if not self.is_recording and not self.is_playing:
            self.is_recording = True
            print("State: Recording")
        elif self.is_recording:
            self.is_recording = False
            self.is_playing = True
            print("State: Playing")
        else:
            self.is_recording = True
            print("State: Overdubbing")
    
    def handle_clear_loop(self):
        print("Hold detected - Clearing loop (sending CC 65)")
        self.send_cc(CLEAR_LOOP_CC, 127)
        time.sleep(0.05)
        self.send_cc(CLEAR_LOOP_CC, 0)
        
        # Update internal state
        self.is_recording = False
        self.is_playing = False
        print("State: Cleared")
        self.action_triggered = True
        
    def send_cc(self, cc_number, value):
        message = [CONTROL_CHANGE | MIDI_CHANNEL, cc_number, value]
        self.midi_out.send_message(message)
    
    def run(self):
        print("\n=== Single Pedal Looper Controller ===")
        print(f"- Quick press CC {SUSTAIN_CC}: Record/Play/Overdub")
        print(f"- Hold CC {SUSTAIN_CC} for {HOLD_THRESHOLD}+ sec: Clear loop (sends CC {CLEAR_LOOP_CC})")
        print("=====================================\n")
        print("Current state: Stopped")
        
        try:
            # Keep the script running
            while True:
                time.sleep(0.05)  # Check frequently for responsive hold detection
                
                # Check for hold while pedal is down
                if self.pedal_down and not self.action_triggered:
                    current_time = time.time()
                    if current_time - self.press_start_time >= HOLD_THRESHOLD:
                        self.handle_clear_loop()
                        
        except KeyboardInterrupt:
            print("Exiting...")

if __name__ == "__main__":
    controller = LooperPedalController()
    controller.run()

Tuesday, February 25, 2025

fix i3 window focus

this has been bugging me forever. When I would try to play synths using the computers built in keyboard in renoise the window focus would steal keyboard input. add this to your i3 config to disable.


focus_follows_mouse yes|no

Saturday, February 22, 2025

4op to dx7 conversion project

I was looking for 2 op fm patches similar to the adlib soundblaster or my pss170 and trying to see if anybody converted the sysex to dx7 format and came across this project. 4op2dx7
super stoked they have the fb01!!! no longer need to use deflemasks fb01 patches. I wanted to like it. Any tracker that doesn't have a hot key to jump to next note/ cyclic shift and play from line is too tedious. I used to have to do a work around where I would route midi from fl and use pulse audios loopback to re sample it in audacity.

Friday, February 21, 2025

python to send midi ccs using usb snes gampad

super 8 preset and logitech f310 to cc mapping

instead of starting on cc 64 I started mapping from cc65 so I could use my piano sustain pedal to trigger loops and use the dpad to select the loops.
x doubles, a halves the length.
the middle guide (logitech) button dumps the loops to the timeline (add to project)
L button kills all the loops

Originally I did it with this 2$ ali express gamepad, later I wanted to get it working with this logitech ps1 style controller that has more buttons (more possibilities).

dropbox link to snes-midicc.py

Using It within Super 8

my super 8 cc mapping

import pygame
import rtmidi
import time
import sys

def initialize_midi():
    midi_out = rtmidi.MidiOut()
    available_ports = midi_out.get_ports()
    
    if not available_ports:
        print("No MIDI output ports found. Creating virtual port 'Gamepad MIDI'...")
        midi_out.open_virtual_port("Gamepad MIDI")
    else:
        print("Available MIDI ports:", available_ports)
        midi_out.open_port(0)
        print(f"Connected to: {available_ports[0]}")
    
    return midi_out

def initialize_joystick():
    pygame.init()
    pygame.joystick.init()
    
    if pygame.joystick.get_count() == 0:
        print("No gamepad detected!")
        sys.exit(1)
    
    joystick = pygame.joystick.Joystick(0)
    joystick.init()
    print(f"Detected gamepad: {joystick.get_name()}")
    return joystick

def main():
    midi_out = initialize_midi()
    joystick = initialize_joystick()
    
    button_states = {
        'left': False,
        'right': False,
        'up': False,
        'down': False
    }
    
    prev_buttons = [False] * joystick.get_numbuttons()
    
    print("Gamepad to MIDI mapper running. Press Ctrl+C to exit.")
    
    try:
        while True:
            for event in pygame.event.get():
                if event.type == pygame.JOYAXISMOTION:
                    if event.axis == 0:  # Left/Right
                        if event.value < -0.5 and not button_states['left']:
                            midi_out.send_message([0xB0, 64, 127])
                            button_states['left'] = True
                        elif event.value > -0.5 and button_states['left']:
                            midi_out.send_message([0xB0, 64, 0])
                            button_states['left'] = False
                            
                        if event.value > 0.5 and not button_states['right']:
                            midi_out.send_message([0xB0, 66, 127])
                            button_states['right'] = True
                        elif event.value < 0.5 and button_states['right']:
                            midi_out.send_message([0xB0, 66, 0])
                            button_states['right'] = False
                            
                    elif event.axis == 1:  # Up/Down
                        if event.value < -0.5 and not button_states['up']:
                            midi_out.send_message([0xB0, 65, 127])
                            button_states['up'] = True
                        elif event.value > -0.5 and button_states['up']:
                            midi_out.send_message([0xB0, 65, 0])
                            button_states['up'] = False
                            
                        if event.value > 0.5 and not button_states['down']:
                            midi_out.send_message([0xB0, 67, 127])
                            button_states['down'] = True
                        elif event.value < 0.5 and button_states['down']:
                            midi_out.send_message([0xB0, 67, 0])
                            button_states['down'] = False
                
                elif event.type == pygame.JOYBUTTONDOWN:
                    button_num = event.button
                    cc_number = 68 + button_num
                    midi_out.send_message([0xB0, cc_number, 127])
                    prev_buttons[button_num] = True
                    
                elif event.type == pygame.JOYBUTTONUP:
                    button_num = event.button
                    cc_number = 68 + button_num
                    midi_out.send_message([0xB0, cc_number, 0])
                    prev_buttons[button_num] = False
                    
            time.sleep(0.001)
            
    except KeyboardInterrupt:
        print("\nExiting...")
    finally:
        midi_out.close_port()
        pygame.quit()

if __name__ == "__main__":
    main()

original attempt

starts from cc64 and up
blue X = cc69
red A = cc70
yellow b = cc71
green y = cc72
select = cc77
start = cc78
Lt = cc73
Rt = cc74
up/down = 0/ 126
left/right = 0/126
I want to fix this so each direction sends on its own cc as momentary but this is fine for now


import pygame
import mido

MIDI_CC_START = 64

# Initialize MIDI output
midi_out = mido.open_output(mido.get_output_names()[0])

def send_midi_cc(cc, value):
    msg = mido.Message('control_change', control=cc, value=value)
    midi_out.send(msg)

def main():
    pygame.init()
    pygame.joystick.init()
    
    if pygame.joystick.get_count() == 0:
        print("No gamepad detected.")
        return

    joystick = pygame.joystick.Joystick(0)
    joystick.init()
    
    print(f"Gamepad detected: {joystick.get_name()}")
    print("Press Ctrl+C to exit.")
    
    prev_axes = [0] * joystick.get_numaxes()
    prev_buttons = [0] * joystick.get_numbuttons()
    prev_hats = [(0, 0)] * joystick.get_numhats()
    
    try:
        while True:
            pygame.event.pump()
            
            # Read axis values
            axes = [joystick.get_axis(i) for i in range(joystick.get_numaxes())]
            for i, value in enumerate(axes):
                if abs(value) > 0.1 and abs(value - prev_axes[i]) > 0.01:
                    send_midi_cc(MIDI_CC_START + i, int((value + 1) / 2 * 127))  # Normalize to 0-127
                prev_axes[i] = value
            
            # Read button states
            buttons = [joystick.get_button(i) for i in range(joystick.get_numbuttons())]
            for i, pressed in enumerate(buttons):
                cc_number = MIDI_CC_START + 5 + i  # Buttons start after D-pad CCs
                if pressed and not prev_buttons[i]:
                    send_midi_cc(cc_number, 127)
                elif not pressed and prev_buttons[i]:
                    send_midi_cc(cc_number, 0)
                prev_buttons[i] = pressed
            
            # Read hat (D-pad) states (momentary, dedicated CCs)
            hats = [joystick.get_hat(i) for i in range(joystick.get_numhats())]
            for i, hat in enumerate(hats):
                left_cc = 64
                up_cc = 65
                right_cc = 66
                down_cc = 67
                
                if hat[0] == -1 and prev_hats[i][0] != -1:
                    send_midi_cc(left_cc, 127)
                elif hat[0] != -1 and prev_hats[i][0] == -1:
                    send_midi_cc(left_cc, 0)
                
                if hat[1] == 1 and prev_hats[i][1] != 1:
                    send_midi_cc(up_cc, 127)
                elif hat[1] != 1 and prev_hats[i][1] == 1:
                    send_midi_cc(up_cc, 0)
                
                if hat[0] == 1 and prev_hats[i][0] != 1:
                    send_midi_cc(right_cc, 127)
                elif hat[0] != 1 and prev_hats[i][0] == 1:
                    send_midi_cc(right_cc, 0)
                
                if hat[1] == -1 and prev_hats[i][1] != -1:
                    send_midi_cc(down_cc, 127)
                elif hat[1] != -1 and prev_hats[i][1] == -1:
                    send_midi_cc(down_cc, 0)
                
                prev_hats[i] = hat
            
            pygame.time.wait(100)  # Reduce CPU usage
    except KeyboardInterrupt:
        print("\nExiting...")
    finally:
        joystick.quit()
        pygame.quit()
        midi_out.close()

if __name__ == "__main__":
    main()