Jay McGavren's Journal

2009-11-22

RubyConf wrapup...

RubyConf was awesome, and I’d like to think we made our contribution. The Jemini talk generated a lot of interested questions, and I’m pretty happy with the approach of using a screencast instead of slides (though we’ll see how it turns out in the Confreaks video). Last night Logan and I set up in the lobby with Life-Tank and our collection of XBox controllers, which attracted quite a few players and comments of “I gotta try this library when I get home”.

Enjoyed the Bay Area Computer Music Technology meetup at Pier 38, too. Got to promote Ruby On Acid, too. I showed off the usual graphical stuff, then the 8-bit PCM/WAV (“drunk Atari 2600”) sound and MIDI demos that I hacked together for the meetup. The audio demos need some experimentation before they’re ready for prime time, but I’d say the same of most things shown that evening. The other presenters clearly had more music composition education and/or experience, but I got a surprisingly warm reception anyway.

Had a lot of fun in SF. Great conference, great city, great people. If the right company is hiring I will definitely consider moving here.

Read more...
2009-11-22

How not to dine in San Francisco...

The plan was sushi, Golden Gate, jazz bar, hotel. When Logan and Stacey and their 18-month-old joined us, it became sushi, hotel (kid needs his sleep), golden gate, jazz bar, hotel.

What finally happened, though, was french cuisine, impound lot, hotel.

Read more...
2009-11-16

Sound waves on acid...

Looks like I’ll be talking on using Ruby on Acid for audio at a meetup in San Francisco during RubyConf. So, time to make sure it can actually do audio. :)

This would probably horrify anyone with audio programming experience, but: I just write a bunch of bytes ranging 0-255 to a file, then import into audacity as raw 8-bit PCM data.

require 'rubygems'
require 'rubyonacid/factories/meta'
require 'rubyonacid/factories/constant'
require 'rubyonacid/factories/flash'
require 'rubyonacid/factories/loop'
require 'rubyonacid/factories/modulo'
require 'rubyonacid/factories/random'
require 'rubyonacid/factories/repeat'
require 'rubyonacid/factories/sine'
require 'rubyonacid/factories/skip'

def generate_factories

  random_factory = RubyOnAcid::RandomFactory.new

  factory_pool = []

  #Loop factories loop from 0.0 to 1.0 (or 1.0 to 0.0 if the increment value is negative).
  factory_pool << RubyOnAcid::LoopFactory.new(random_factory.within(:increment, -0.01, 0.01))
  #Constant factories always return the same value,
  factory_pool << RubyOnAcid::ConstantFactory.new(rand)
  factory_pool << RubyOnAcid::ConstantFactory.new(rand)
  factory_pool << RubyOnAcid::FlashFactory.new(rand(100))
  #Sine factories produce a "wave" pattern.
  factory_pool << RubyOnAcid::SineFactory.new(random_factory.within(:increment, -0.01, 0.01))
  factory_pool << RubyOnAcid::RepeatFactory.new(
    RubyOnAcid::LoopFactory.new(random_factory.within(:increment, -0.1, 0.1)),
    random_factory.within(:interval, 2, 100)
  )
  factory_pool << RubyOnAcid::RepeatFactory.new(
    RubyOnAcid::SineFactory.new(random_factory.within(:increment, -0.1, 0.1)),
    random_factory.within(:interval, 2, 100)
  )
  factory_pool << RubyOnAcid::ModuloFactory.new(RubyOnAcid::LoopFactory.new(0.00001))
  factory_pool
end

#A skip factory, in charge of randomly resetting the meta factory.
@resetter = RubyOnAcid::SkipFactory.new(0.99995)

factory = RubyOnAcid::MetaFactory.new
factory.factory_pool = generate_factories
File.open("raw_audio.dat", "w") do |file|
  loop do
    channel_count = factory.within(:chanel_count, 0, 3).to_i
    channel_count.times do |i|
      file.putc factory.within(i, 0, 255).to_i
    end
    if @resetter.boolean(:reset)
      factory.factory_pool = generate_factories
      factory.reset_assignments
    end
  end
end

The result is a tour of every sound ever emitted by an Atari 2600:

Ruby On Acid 8-bit raw sound…

I also have a MIDI experiment going. Neither is spectacular, but the nice part is that the programs needn’t change; I just need better generators.

Read more...
2009-11-14

My Scratch talk at Ignite Phoenix 5...

Huzzah, they posted my Ignite Phoenix presentation on Scratch!

http://www.youtube.com/watch?v=FSHTLuQqAtE

Couple slips, but I’ll be the main one to notice those. If RubyConf goes this well, I’ll be really happy.

Read more...
2009-11-11

ZOMG giant cat!

Gave a talk on Scratch at Ignite Phoenix 5… Well received, and it seemed to spark a lot of interest. (Heard from Brian Carson that his kid downloaded it as soon as he saw the talk on the video stream.)

Jay on Scratch at Ignite Phoenix 5Jay on Scratch at Ignite Phoenix 5Jay on Scratch at Ignite Phoenix 5Jay on Scratch at Ignite Phoenix 5

Photos by Sheila Dee: <div>http://www.flickr.com/photos/sheila_dee/ / CC BY-NC-ND 2.0</div>

Read more...