Boodler で環境音を BGM に

ごくごく私的用事で環境音を延々と流す必要にせまられました。そういえば以前ためしてガッテンで環境音を聴いていると集中が続きやすいという話もありましたね。そのような環境音を生成する Web ページやシェアウェア*1,既製の素材もあるようです*2

ともかく,フリーウェアでそのようなニーズに答えられるものはないものか,と探していたら ピンクノイズを発生させる | OSDN Magazine に答がありました。Boodler というソフトウェアです。

Boodler とは

Boodler is a tool for creating soundscapes -- continuous, infinitely varying streams of sound.

Boodler Home

Boodler がしてくれることを簡単にまとめると,さまざまな sound snippets をシームレスかつダイナミックにつなぎあわせて sound stream を生成すること,です(デフォルトで停止させない限り延々と再生しますし,ファイルに落とし込むこともできます)。

Boodler は C で書かれたサブモジュールと Python モジュールで構成されています。このため Linux(や *BSD) はもちろん,MacOS XWindows でも動きます。ただし素敵な GUI はついておらず,コマンドラインから操る必要があります。

Boodler は下記の3つのコンポーネントにわかれます。

  • Python と C で書かれたコアモジュール(Boodler-*.tar.gzsrc/ 以下)
  • 環境音ストリームを生成する agent(Boodler-*.tar.gzeffects/ 以下)
  • 素材となる sound snippets(boodler-snd-*.tar.gz

Boodler をインストール(Windows 編)

Python で書かれているので http://www.python.org/ より Windowsインストーラ(現時点で Version 2.5.2)をダウンロードしてインストールしておきます。インストーラ*.py をプログラムとして認識するようにしてくれるみたいなので,特に PATH を設定する必要はありません。

次に Boodler 本体を取得します。http://eblong.com/zarf/boodler/ の「Get Boodler」から「download newer package for Windows」というリンクを見つけてダウンロードします。これを(どこでもいいですが)例えば C:\App\boodler などのディレクトリに展開しておきます。

この配布物は Python 2.5 用ではないようなので,「download cboodle module for Windows Python 2.5」というリンクから Python 2.5 用モジュールを取得して置き換えます。README.txt に手順が書いてありますが,C:\App\boodler\boodle\cboodle.dll を削除して代わりに cboodle.pyd を置きます。

最後に Boodler sound library を取得します。「download Boodler sound library」というリンクからダウンロードします。展開すると boodler-snd というディレクトリがあるので,これをアプリケーションのフォルダ内に移動します(先ほどの例だと C:\App\boodler\boodler-snd)。

ここまでで,C:\App\boodler フォルダの中身は以下のようになっているかと思います。

  • boodle/
  • boodler-snd/
  • doc/
  • effects/
  • boodler.py
  • boomsg.py
  • setpath.bat
  • 他雑多なファイル

Boodler を実行するには,コマンドプロンプトを開いて C:\App\boodler ディレクトリに移動し,環境変数setpath.bat で設定します。しかるのちに boodler.py コマンドを実行します。

C:\Documents and Settings\dayflower> cd C:\App\boodler

C:\App\boodler> setpath.bat

C:\App\boodler> boodler.py cricket.CricketMeadow
running "Texas Meadow Katydid and friends"

虫の音が聴こえてきたら成功です。「Ctrl+C」で止めます。


昨日家でここまで試して満足したので,以下は Linux でテストしました。

Boodler をインストール(Linux 編)

Ubuntu 8.04 で試しました。

Python が必要なのは当たり前ですが,ビルドするためにはヘッダやライブラリが必要となります。python2.5-dev をインストールしておきます。

ほか,あるとうれしいライブラリ。

  • libesd0-dev
  • liblame-dev
  • libogg-dev
  • libvorbis-dev

libogg-devlibvorbis-devlibshout3-dev をインストールすると依存で自動的に入りますからそれを入れると楽です。

んで,setuptools に対応してるので python setup.py build, sudo python setup.py install でビルド&インストールできます。ですが,これは上で述べたコアモジュールしかインストールしてくれないので,どうせなら,ということでユーザ環境にインストールしてみます。

$ mkdir tmp && cd tmp

$ tar zxf ~/Boodler-1.6.1.tar.gz

$ cd Boodler-1.6.1

$ python setup.py build

$ python setup.py install --prefix ~/bin/Boodler

ホームディレクトリの bin/Boodler 以下にインストールしてみました。他に必要となる effect agents や sound library を同所にコピーします。

$ cp -R effects ~/bin/Boodler/

$ cd ~/bin/Boodler

$ tar zxf ~/boodler-snd-021902.tar.gz

$ ls -F

$ bin/ boodler-snd/ effects/ lib/

どうせ BOODLER_SOUND_PATHBOODLER_EFFECTS_PATH などの環境変数の設定が必要となるので起動用シェルスクリプトを作ります。

$ vi ~/bin/boodler.sh

$ vi ~/bin/boomsg.sh

$ chmod a+x ~/bin/boodler.sh ~/bin/boomsg.sh

それぞれの内容は,

#!/bin/sh
# --- boodler.sh

APPPATH=~/bin/Boodler

export BOODLER_SOUND_PATH=$APPPATH/boodler-snd
export BOODLER_EFFECTS_PATH=$APPPATH/effects

PYTHONPATH=$APPPATH/lib/python2.5/site-packages \
    python $APPPATH/bin/boodler.py $*
#!/bin/sh
# --- boomsg.sh

APPPATH=~/bin/Boodler

PYTHONPATH=$APPPATH/lib/python2.5/site-packages \
    python $APPPATH/bin/boomsg.py $*

こんな感じにしました。

ためしに実行してみます。

$ ~/bin/boodler.sh pwrain.Rainforest
running "rain in the rainforest"

沢のある森にいる気分になってきました?

Boodler を使ってみる

コマンドラインで指定している引数は agent を指定するためのものです。先ほどの例だと pwrain.Rainforest という引数でしたが,これは pwrain というパッケージの Rainforest というクラスで実装されているのです。

どのような agent があるのか確認してみます。

$ cd ~/bin/Boodler/effects

$ grep -e '^class ' *.py

blop.py:class BlopEchoes(Agent):
blop.py:class BlopSpace(Agent):
blop.py:class TapEchoes(Agent):
blop.py:class TapSpace(Agent):
blop.py:class OccasionalGong(Agent):
blop.py:class TonkEchoes(Agent):
blop.py:class TonkSpace(Agent):
blop.py:class EchoWorld(Agent):
cavepool.py:class Drip(Agent):
cavepool.py:class Still(Agent):
cavepool.py:class Water(Agent):
...... snip snip snip ......

たくさんあります。

それぞれがどのような音に対応するのかは Boodler: Catalog of Soundscapes に記述されています(Utilities, Tools, and Managers はとりあえず無視してください)。

環境音にかぎらず,こんな風変わりな agent もあります。

$ ~/bin/boodler.sh timespeak.Now
running "speak the current time"

英語で時刻を喋り,終了します。

複数のストリームを再生する

effect agent には音を生成するだけではなく,他の agent を制御するものもあります。

一番よく使うのは [http://eblong.com/zarf/boodler/doc/catalog.html#manager:title=manager] パッケージの agents です。

たとえば,manager.Simultaneous agent は複数の agent を同時に立ち上げます。つまり複数の soundscape streams を合成して再生してくれるわけです。

$ ~/bin/boodler.sh manager.Simultaneous frogs.FrogPond pwrain.RainSounds
running "start several agents simultaneously"

雨のなか,蛙が鳴いているさまが再現されます。

manager.Simultaneous は複数 stream を並列して同時に再生しましたが,順番に再生していく agent もあります。manager.Sequential がそうです。

$ ~/bin/boodler.sh manager.Sequential 5 10 frogs.FrogPond pwrain.RainSounds
running "cycle among several agents"

最初の二つの引数で,遷移する時間間隔(秒)を指定します。この例では5秒〜10秒です。きちんとクロスフェードしてつないでくれます。

Boodler server を立ち上げる

Boodler は他のプロセスからのメッセージを受信して動作を変更するサーバモードも備わっています。

サーバモードで立ち上げるにはコマンドラインにて -l オプションを指定します。また,メッセージ受信用の agent は [http://eblong.com/zarf/boodler/doc/catalog.html#listen:title=listen] パッケージにいろいろ備わっています。

機能が細かく分化しているので先ほどの manager.Simultaneous を併用してサーバを立ち上げます。

$ ~/bin/boodler.sh -l manager.Simultaneous listen.Agents listen.TimeSpeak listen.Shutdown
running "start several agents simultaneously"

待ちに入りましたので,別プロセスからメッセージを送ってみます。

$ ~/bin/boomsg.sh time

現在時刻を喋りました(listen.TimeSpeak が受信)。

$ ~/bin/boomsg.sh agent crows.SomeCrows

カラスが鳴いています(listen.Agents が受信)。

$ ~/bin/boomsg.sh agent fire.Bonfire

焚き火の音にクロスフェードしました。

$ ~/bin/boomsg.sh shutdown

サーバプロセスが終了しました(listen.Shutdown が受信)。


Boodler には shoutcast 用出力も用意されているので,この listen agent と組み合わせれば,BGM 環境として使うためには別に素敵な GUI はいらない気もしてきます。

$ sudo apt-get install icecast2

$ sudo icecast2 -b -c /etc/icecast2/icecast.xml

で Icecast2 サーバを立ち上げてあげて((デフォルトの /etc/icecast2/icecast.xml の設定がまずいので <changeowner>usergroupicecast2icecast に書き換えて有効にする必要があります)),

$ ~/bin/boodler.sh -o shout owstorm.RainForever

で Icecast2 サーバに Boodler からつなぎ,ブラウザで http://localhost:8000/ を見ると mount point が表示されているので,こいつをクリックすると動画プレーヤで再生できます。この例では localhost で完結させましたが,なにか開いたサーバにこれらをつっこんでおけば環境音 BGM サーバのできあがり,というわけです。

ライセンスにご注意

Boodler 本体は LGPL なのですが,sound library がパブリックドメインとは限らないことに注意が必要です。

The sound files in the Boodler sound library are not all in the public domain. Most of them are licensed "for private and non-commercial use only". Some were found by random searching around the web, and appear without any copyright statement at all.

Boodler: Licensing

個人・非商用で使うには問題ないものが多いそうですが。