インタラクティブミュージック作曲家にFluidSynthをざっくり紹介します

More than 1 year has passed since last update.

FluidSynthとは

  • リアルタイムソフトウェアシンセサイザーです。
  • クロスプラットフォーム(Windows / Mac / Linux)で動作します
  • SoundFont2の音源を使用することができます
  • CUIのツールとしても、C言語のライブラリとしても使うことができます

つまり、このライブラリを使ってインタラクティブミュージックを作れば、音源の互換性や種類の少なさに悩まされず、簡単に配布可能なアプリを作成できるのです。

公式サイト

インストール

パッケージ管理ツールを使っているなら、それを使うのが早いです。
そうでなければ、ソースコードをダウンロードしてビルドする必要があります。
ビルドには、CMakeを使います。CMakeについては、GUIがちゃんとあってそんなに難しくないので、説明は省略します。

試してみる

インストールが完了したら、コマンドラインでFluidSynthの対話型実行モードに入ります。
Macなら fluidsynth -a coreaudio
Windowsなら fluidsynth -a dsound
などとします。
-a はサウンドの出力先を指定するオプションです。これを指定してやらないと、うまく再生できないことがままあります。

音を鳴らす前に、サウンドフォントを読み込む必要があります。サウンドフォントはネット上にたくさん転がっているので、適当なものを探してダウンロードしてください。
今回はFluidR3_GM.sf2(GM音源ですね)を使ってみようと思います。

load FluidR3_GM.sf2
prog 0 0
noteon 0 64 100
noteoff 0 64

progでプログラムチェンジ(音色をトラックに割り当て)して、noteonで音を再生、noteoffで停止します。基本的にはMIDIのコマンドと対応しています。
help allと入力するとコマンド一覧が確認できます。
他にも、色々な機能がありますが、基本的にはこんなものです。

Cのライブラリとして使う

雰囲気の分かったところで、自分のプログラムにFluidSynthを組み込む方法を紹介します。

無事にインストールが成功していれば、自分のコンピュータの中のどこかに
・静的リンクライブラリ(libfluidsynth.a または libfluidsynth.lib)
・動的リンクライブラリ(libfluidsynth.so または libfluidsynth.dylib または libfluidsynth.dll)
の2つのファイルが生成されているはずです。

この2つのファイルをリンクするように設定します。
さらに、fluidsynth.hのあるフォルダを、ヘッダの検索パスに追加します。
これで準備は万端です。

先ほどコマンドラインで実行したのとまったく同じことを実現するには、以下のようなコードになります。

#include <unistd.h>
#include <fluidsynth.h>

void main(void) {
    // initialize
    fluid_settings_t* settings = new_fluid_settings();
    fluid_settings_setstr(settings, "audio.driver", "coreaudio");
    fluid_synth_t* synth = new_fluid_synth(settings);
    fluid_audio_driver_t* audio_driver = new_fluid_audio_driver(settings, synth);

    // load soundfont
    fluid_synth_sfload(synth, "FluidR3_GM.sf2", 1);

    // make note on
    fluid_synth_program_change(synth, 0, 0);
    fluid_synth_noteon(synth, 0, 64, 100);

    // wait
    usleep(1000000);
    fluid_synth_noteoff(synth, 0, 64);

    // finalize
    delete_fuild_audio_driver(audio_driver);
    delete_fluid_synth(synth);
    delete_fluid_settings(settings);
}

なお、このライブラリはLGPLなので、ライセンスに注意して使用してください。

SoundFontを作る

今までは既存のサウンドフォントを利用してきましたが、独自の音源を作ることもできます。
SoundFontはサンプラー音源なので、基本となる波形を用意していくつかのパラメータを設定する形になります。

サウンドフォントを製作するためのフリーソフトは、Vienna SoundFont Editorが有名です。

まとめ

FluidSynthはインタラクティブミュージックを作って配布するのに超便利。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.