::  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:

Costs are Rising, US Highway Edition

There’s a preliminary paper circulating at Brookings, looking at American infrastructure construction costs. Authors Leah Brooks and Zachary Liscow have tabulated the real costs of the American Interstate program over time, from the 1950s to the 1990s, an…

via Pedestrian Observations July 16, 2019

Nice things

Last night a friend of a friend invited us swimming at a private pond in a Boston exurb. Part of me felt suspicious of the place. Something about the feeling of “this is something rich people do” and the knowledge that the adults chatting in deck chairs w…

via The whole sky July 15, 2019

Deconstruct files

This is a psuedo-transcript for a talk given at Deconstruct 2019. In order to make this accessible for people on slow connections as well as people using screen readers, the slides have been replaced by in-line text (the talk has ~120 slides; at an averag…

via Dan Luu July 12, 2019

more     (via openring)

More Posts:


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