public
Description: arcade sounds and chiptunes for ruby and c
Homepage:
Clone URL: git://github.com/mental/bloopsaphone.git
mental (author)
Thu Sep 17 17:07:35 -0700 2009
commit  996e4729d1f1c4ba3936e638774dad96fe80a8b8
tree    7b046f8b2780ae688bd61ca45180756e6f83dfac
parent  1aabe6b38c5c962bf37396feed4ee5813248dd11
name age message
file COPYING Wed Feb 11 23:46:07 -0800 2009 * c/bloopsaphone.c: freeing of memory. [_why]
file Makefile Fri Aug 28 11:01:00 -0700 2009 put bloops_play back the way it was to prevent ... [mental]
file README Thu Feb 12 10:24:00 -0800 2009 * README: building everything from source inst... [_why]
file bloopsaphone.gemspec Thu Feb 12 10:07:55 -0800 2009 * bloopsaphone.gemspec: version 0.4. [_why]
directory c/ Thu Sep 17 17:07:35 -0700 2009 threads.h -> bloopsaphone-internal.h [mental]
directory ext/ Thu Sep 17 17:07:35 -0700 2009 threads.h -> bloopsaphone-internal.h [mental]
directory misc/ Sat Feb 21 14:36:24 -0800 2009 * misc/Makefile-dll: used this to build a port... [_why]
directory sounds/ Thu Feb 12 08:02:13 -0800 2009 * sounds: some sample game noises... jumps, sh... [_why]
README
      |~~              |~~
      |                |
     :$: bloopsaphone :$:
      `''''''''''''''''`

  for writing chiptune-style songs
  in c or ruby. you know: the sounds
  of ataris, gameboys and the like.

               ~

  -$- ABOUT

  this is a small c library for sending
  chiptunes through portaudio, which is
  a rather light cross-platform audio lib.
  <http://www.portaudio.com/>

  right now i'm only including ruby
  bindings. you are welcome to contribute
  code to hook up to other languages,
  though.

  i wrote this for h-ety h.
  <http://hacketyhack.net/>

  i don't have binaries ready for this yet,
  so if you're on windows or os x, you may
  have to wait until HH comes out at ART
  AND CODE. the tribulations you face.

               ~

  -$- THE BLOOPSAPHONE THEME SONG
      (in ruby)

      require 'bloops'

    # the bloops o' phone
      b = Bloops.new
      b.tempo = 320

    # melodious
      s1 = b.sound Bloops::SQUARE
      s1.punch = 0.5
      s1.sustain = 0.4
      s1.decay = 0.2
      s1.arp = 0.4
      s1.aspeed = 0.6
      s1.repeat = 0.6
      s1.phase = 0.2
      s1.psweep = 0.2

    # beats
      s2 = b.sound Bloops::NOISE
      s2.punch = 0.5
      s2.sustain = 0.2
      s2.decay = 0.4
      s2.slide = -0.4
      s2.phase = 0.2
      s2.psweep = 0.2

    # the tracks
      b.tune s1, "f#5 c6 e4 b6 g5 d6 4  f#5 e5 c5 b6 c6 d6 4 "
      b.tune s2, "4   c6 4  b5 4  4  e4 4   c6 4  b5 4  4  e4"

    # and away we go
      b.play
      sleep 1 while !b.stopped?

               ~

  -$- BUILDING FOR RUBY

  If Ruby is in your path and PortAudio 1.9
  or greater is installed:

    make ruby

  To install PortAudio 1.9 under Ubuntu:

    aptitude install portaudio19-dev

  To build from source isn't too bad.
  Download PortAudio 1.9 and build it.
  <http://www.portaudio.com/archives/pa_stable_v19_20071207.tar.gz>

  Like this:

    $ tar xzvf pa_stable_v19_20071207.tar.gz
    $ cd portaudio
    $ ./configure
    $ make
    $ sudo make install

  Then go back to Bloopsaphone and do
  a `make ruby`.

               ~

  -$- THE IDEALS,

  -1- ASYNCHRONOUS.
      You send it a song and it plays in
      the background. You'll get an event
      when it finishes.

  -2- SMALL.
      This is just a toy, I don't want it
      to be very big and comprehensive.
      Just to play little tunes with a
      nostalgic arcade sound rather than
      the CASIO-stylings of most MIDI.

  -3- CUSTOM NOTATION.
      Someone told me about Nokring, iMelody,
      numbered musical notation and I did
      some reading. They're little languages
      for texting yourself a ringtone.

  <http://en.wikipedia.org/wiki/Ring_Tone_Transfer_Language>
  <http://homepage.mac.com/alvinmok/ericsson/emelody.html>

      Bloopsaphone uses a variation on RTTTL.

      Instead of commas, I use whitespace.
      A rest is simply a number. A plus sign
      moves everything up an octave. A minus
      down an octave.

      The Simpsons' Theme, for instance, would be:

        32 + C E F# 8:A G E C - 8:A 8:F# 8:F# 8:F# 2:G

      Which translates into:

       * a 1/32nd note rest.
       * change one octave up.
       * C quarter note.
       * E quarter note.
       * F# quarter note.
       * A eighth note.
       * G quarter.
       * E quarter.
       * C one-quarter note.
       * change one octave down.
       * A eighth.
       * Three F# eighths.
       * G half note.

      The colons are optional. They are there because you
      can place an octave number after each note. Somehow
      "8B6" (an eighth note of B at the sixth octave) looks
      more confusing than "8:B6". I guess I figured that
      the timing "8" is conceptually separate from the
      actual tone "B6", even though they both comprise
      the note itself.

  -4- SERIALIZE SOUNDS.
      To accomodate passing instruments between
      ruby and c, bloopsaphone comes with a tiny
      file format for describing sounds.

      You can find examples of these in the sounds/
      folder in this distro. Possible sound types
      are 'square', 'sawtooth', 'sine' and 'noise'.
      All other settings go from 0.0 to 1.0.

      The 'freq' setting is only used if the sound
      is played without a tune.