Wrapping Bass: Implementation

February 3rd, 2012
music, octaveless
After thinking yesterday about octaveless notes I decided to write something to generate the tones I had in mind. Here they are as two-second mp3s:
Bb B C Db
A D
Ab Eb
G Gb F E
The code is on github. It uses portaudio so it should work cross platform if you want to compile it. The important parts of the code are:
#define sine(i,F) ((float) sin( (((double)(i)*(double)(F))/SAMPLE_RATE) * M_PI * 2. ))

float freq(float note)
{
  return 440*(pow(2, (note-69.0)/12));
}

float intensity(float note, int octave)
{
  float bass_n = fmod(note, 12);

  switch(octave) {
  case 0:
    return 0.00 + 0.01*bass_n;
  case 1:
    return 0.12 + 0.01*bass_n;
  case 2:
    return 0.24 + 0.01*bass_n;
  case 3:
    return 0.32 - 0.01*bass_n;
  case 4:
    return 0.22 - 0.01*bass_n;
  case 5:
    return 0.10 - 0.01*bass_n;
  }
  return 0; // never reached
}

float synth(float phase, float note) {
  return pow(2,(sine(phase, note)));
}

# A440 = 69, as in midi
# phase is constantly increasing, once per sample
#
float sample_val(float note, unsigned int phase)
{
  note = fmod(note, 12);

  return log2(synth(phase, freq(note + 12*0)) * intensity(note, 0) +
              synth(phase, freq(note + 12*1)) * intensity(note, 1) +
              synth(phase, freq(note + 12*2)) * intensity(note, 2) +
              synth(phase, freq(note + 12*3)) * intensity(note, 3) +
              synth(phase, freq(note + 12*4)) * intensity(note, 4) +
              synth(phase, freq(note + 12*5)) * intensity(note, 5));
}

# call sample_val as:
# for (int i = 0 ; i < 1000000 ; i++)
#   send_to_speaker(sample_val(69, i));
Referenced in: Footboard Bass

Comment via: google plus, facebook, r/WeAreTheMusicMakers, substack

Recent posts on blogs I like:

Differential diagnosis of loveshyness

In my life coaching practice, I see a lot of male clients who have trouble getting dates (including fairly severe trouble, such as never having been kissed in spite of being in their thirties).

via Thing of Things February 6, 2026

2025-26 New Year review

This is an annual post reviewing the last year and setting intentions for next year. I look over different life areas (work, health, parenting, effectiveness, etc) and analyze my life tracking data. Highlights include a minimal group house, the usefulness…

via Victoria Krakovna January 19, 2026

Family Christmas

Unlike many families my family celebrates Christmas with really really a lot of our family. This past year there were about 29 people at my Grandfather's house in the week around Christmas. I know what you're thinking: how does that work? It's…

via Lily Wise's Blog Posts January 3, 2026

more     (via openring)