Updating Soundscapes

This is my quick and dirty summary of what you need to do to take an old (Boodler 1.x) soundscape -- as Python code -- and update it to work with Boodler 2.0. This is not a substitute for reading the new Designing Soundscapes tutorial.

Create a directory. Put in a Metadata file which includes the name of your package (boodler.package: ...) and a boodler.main: main line.

Copy in your Python file, and rename it main.py (to match the boodler.main: line in Metadata.)

Delete all the name="..." lines in your Agent classes. Put that information in the Resources file, as dc.title: ...

  • Titles in Boodler start with a capital letter, but do not capitalize each word after that.

Add these lines:

from boopak.package import *
from boodle import agent, builtin

Make sure your Agent classes are defined as

class MyAgentName(agent.Agent):
  • If you really want to use the class MyAgentName(agent.Agent): format, add an import line of the form from boodle.agent import Agent.

Call bimport() for each package you want to import.

  • All sound sample files live in packages now, so you'll have to import them this way.

  • Sounds that used to be in the Boodler sound library are now mostly in org.boodler.old... packages. For example, you might do this:

    water = bimport('org.boodler.old.water')

Instead of referring to a sound as a string, refer directly to the object in the imported package. For example:

# replace this:
self.sched_note('environ/rain-heavy.aiff')
# with this:
self.sched_note(water.rain_heavy)
  • No quotes, no .aiff suffix, and dashes have generally turned into underscores. Examine the package contents to see the exact names of the sound files.

Built-in agents like FadeOutAgent, FadeInOutAgent, StopAgent are now in the builtin module. You will have to say, for example:

self.sched_agent(builtin.StopAgent())

Change all __init__() functions in your agent classes to init(). Remove this line wherever it appears:

# no longer needed:
Agent.__init__(self)

Make sure the arguments to init() are the right types. Don't use an integer for a default value if you want the user to be able specify a float. For list arguments, you should declare an _args field to specify the list type.

Remove the float(...), int(...), etc casts from your init() method. Those conversations now occur automatically.

Test your code with boodler.py --external your-directory.

When it works, create a package file with boodle-mgr.py --import create your-directory.

Don't forget to install the package in your own collection: boodle-mgr.py install your-package.boop

Updating Soundscapes - last changed 2009-01-15 20:38 by Andrew Plotkin (zarf)