Help us understand the problem. What is going on with this article?

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

More than 5 years have 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はインタラクティブミュージックを作って配布するのに超便利。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした