5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

FludSynth.jlを使ってJuliaで音を鳴らす

Last updated at Posted at 2018-12-09

Juliaアドベントカレンダー10日目です。

Juliaを使ってmidiの演奏をしてみたいと思います。
音を鳴らしても良い環境でお楽しみください。

環境

Ubuntu18.04での動作を想定してます。
他の環境だとfluidsynth.jlを直さないと動きません…。

準備

今回はfluidsynthというオープンソースのソフトウェアシンセサイザーをJuliaから操作します。

midiの用意

一定以上の年齢の人はお世話になったはず。
隠し持ったmidiを引っ張り出してくるもよし、MuseScoreなどで探すも良しです。

SoundFontの用意

midiファイルは楽譜のようなもので、どのタイミングで、どの楽器の、どの音階を鳴らすかという情報は持っていますが、楽器の音色の情報は持っていません。
ですので、midiだけでは音が出せません。
音色の情報を持つのがSoundFontというファイルです。
ダウンロード可能なサウンドファイルのリストからダウンロードするか、aptからも以下で入手可能です。

sudo apt install fluid-soundfont-gm

ちなみにFludSynth.jlのtestフォルダにもヴァイオリンの音色のみですが、SoundFontが含まれているので、探すのが面倒な人はそちらを使用しても良いです。

ライブラリのインストール

Pkg REPL-modeでPkg.addしてください。

add https://github.com/yukota/FluidSynth.jl.git

お気づきでしょうか…。私の自作ライブラリです。このあいだ作りました。
依存ライブラリも自動で入るようにしていますが、失敗するようならlibfluidsynth-devをaptで入れてください。

実装

midi(test.mid)、SoundFile(violin_sample.sf2)を読み込んでスピーカーから音を鳴らします。


using FluidSynth

settings = Settings()

# Mac, Windows, LinuxでJackを使用している人は以下をコメントアウトしてください
setstr(settings, "audio.driver", "pulseaudio")

synth = Synth(settings)
sfload(synth, "violin_sample.sf2")

player = Player(synth)
audio_driver = AudioDriver(settings, synth)


add(player, "test.mid")
play(player)

FluidSynth.join(player)

解説

サウンドサーバー

setstr(settings, "audio.driver", "pulseaudio")

この行のpluseaudioってなんだろうと思った人がいるかもしれません。
Linuxで音を出す場合、ALSAという層がオーディオインターフェースなどに対する、デバイスドライバになります。
このALSAの一つ上の層、どのデバイスから音を出すか、音量の調節などを受け持っているのがサウンドサーバーになります。
サウンドサーバーには大きく2つのソフトがあり、今回指定したPluseAudioとJACKがあります。
UbuntuのデフォルトだとPluseAudioが採用されています。
fludsynthのデフォルトはJACKになっているため、今回はこのパラメータを設定しました。
逆にUbuntu StduioだとJACKが採用されているため、デフォルトのままで大丈夫です。

midiの作り方

楽譜作成ソフトなどで作れます。
MuseScoreが無料でおすすめです。
aptでも入ります。

SoundFontの作り方

録音環境については割愛します。
強いて言うなら、新しくオーディオインターフェースを買うぞ!と思っている人は以下のサイトでALSAが対応しているやつを確認してから買いましょう。
https://www.alsa-project.org/main/index.php/Matrix:Main
https://wiki.linuxaudio.org/wiki/hardware_support
ちなみに私のRoladのQUAD CAPTUREはUSBを指した時のボリュームから変更ができないという微妙な動きをしてました…。
面倒だったのでWindowsで録音しました…。
録音したwavを入力に、POLYPHONEでサウンドフォントが作れます。

まとめ

好きな音楽を鳴らすことはできたでしょうか?
それでは良いクリスマスを。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?