::  Posts  ::  RSS  ::  ◂◂RSS  ::  Contact

Wrapping Bass: Implementation

February 3rd, 2012
octaveless, music  [html]
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));

Comment via: google plus, facebook, r/WeAreTheMusicMakers

Recent posts on blogs I like:

Pieces of time

My friend used to have two ‘days’ each day, with a nap between—in the afternoon, he would get up and plan his day with optimism, whatever happened a few hours before washed away. Another friend recently suggested to me thinking … Continue reading →

via Meteuphoric November 11, 2019

Mauerfall

The Berlin Wall fell 30 years ago. I feel weird about where I’m writing this post from. I was expecting to be writing this from Berlin, after visiting the commemorations. But I’m visiting Boston (and New York) right now and the connotation of talking abou…

via Pedestrian Observations November 10, 2019

Wild animal welfare in Hans Christian Andersen

Continuing the theme of wild animal suffering in children’s lit… Hans Christian Andersen’s stories involve a lot of suffering of both human and animal varieties. “The Ugly Duckling” takes a brief detour from describing the duckling’s repeated social humil…

via The whole sky November 7, 2019

more     (via openring)

More Posts:


  ::  Posts  ::  RSS  ::  ◂◂RSS  ::  Contact