LMMSをWindows上でコンパイル

注意:書きかけなので内容は不定期に更新されます。2011-02-20頃からの状況を基に書かれています。

動機

Windows上でのLMMSのパスの文字化けを何とかしたい。

基本情報

LMMS(Linux MultiMedia Studio)IMAGE LINE社FL Studioに似た感じのDAWで、オープンソースで開発されています。
名前どおりLinux上で開発されていますが、Windowsでも動作します。
さらにWindowsでもソースからコンパイルできるはずなのですが、依存関係の解決が難しい模様です。ここではWindows XP Pro SP3上にMinGW環境をインストールして、その上でLMMSをコンパイルする手順を記事にする予定です(2011-03-02時点ではまだ成功していません)。

手順

Qtのインストール

(別記事作成の予定)
LMMSはNokia社のQtというC/C++用GUIワークフレームを使って開発されています。ですので、LMMSのコンパイルにはQtの開発用環境が必要です。これだけでもプログラムを作って遊べます。

MinGW環境のインストール

詳細記事

状況:
2011-03-02 インストールは出来ていて、その上でLMMSが依存している各種パッケージをコンパイル出来ているが、まだ他にMinGWのシステムにかかわるパッケージなどがあるかもしれない状態。

Gitのインストール

LMMSのソースコードはGitというバージョン管理システムで管理されています。開発中の差分を取り込むのに必要になりますが、いわゆるtarボールから手をつけてバージョン管理するつもりがなければ不要です。でもGitを使えばどこを修正したのか一目瞭然になるのでソースに手をつけるつもりならお勧めです。
ここではGitをインストール後、LMMSのソースコードを取ってきます。

LMMSのソースコードの取得

最近、Ver.0.4.10が出ました。SourceForgeのLMMSのページからソースコードも、Windows用の実行可能バイナリもダウンロードできます。

LMMSが依存するパッケージのインストール

(個別に記事を作成予定)

パッケージのリスト

  • flac-1.2.1
  • gettext-runtime_0.18.1.1-2_win32
  • iglib-2.26.1
  • glib-2.26.1-1_win32
  • gmp-4.2.2
  • libogg-1.2.2
  • libsndfile-1.0.23
  • libvorbis-1.3.2
  • pkg-config-0.25
  • pkg-config-dev_0.25-1_win32
  • portaudio_v19_20071207_stable
  • SDL-1.2.14RunTime
  • SDL-1.2.14Soruce
  • SDL-devel-1.2.14
  • stk-4.4.2

後でわかりましたが、このうちのいくつかは mingw-get コマンド(Linuxのapt-get的コマンド)でインストールできるかもしれません。

CMakeのインストール

QtでMinGW環境用のアプリケーションを開発するために、素のWindows環境上で動くCMakeを導入しました。MinGW環境用のCMakeを使ってもいいのかもしれませんが今のところ不明。

LMMSのコンパイル

  • LMMSのソースコードの中にあるCMakeList.txtをQt creatorの「ファイル-ファイル/プロジェクトを開く..」で開く
  • CMakeのパラメータ指定のダイアログが出てくる
  • ドロップボックスから「MinGW環境」を選択してCMakeする
  • プロジェクトが開ける。

この後ソースファイルに手を加えるなりしてQt creatorからビルドすると、実行ファイルが生成されるはず。

状況:
2011-03-02現在、依存関係がまだ十分解決されていないことと、LMMSに付属の構築ファイル(configure)に不備があるためにビルド(コンパイル)が最後まで完了していません。

WAVELAB850内容 ディレクトリ Continuous

1次元の周期的な連続ウェーブレット変換に関するディレクトリ。リッジ(信号の隆起の連なり)やスケルトン(骨格)を見つけ出すCWT(連続ウェーブレット変換)。
演算上の特徴は通常の直交ウェーブレット変換とまったく異なっており、これらはガウス型ウインドウの畳み込みに基づいていて、周波数領域の実装を使用している。
..(省略)..
注意; もし信号長がn=4096であり、オクターブ当たり12音を使う(通常の西洋音楽の音階等)場合、処理に必要なメモリは32MBを超えます。

WAVELAB850内容 ディレクトリ Browsers

このディレクトリは、WaveLabに付属の各種信号や変換方法を閲覧できるGUIブラウザが入っている。
Octave3.2.4ではMATLABのuimenuやuicontrolがサポートされていないので、説明どおりには使用できない。

One-D
一次元信号の解析に関するサブディレクト
WaveTour
Stephane Mallat 著 "A Wavelet Tour of Signal Processing" の図表を閲覧するサブディレクト

WAVELAB850内容 ディレクトリ Books

このディレクトリは、WaveLabを使った著書の再現である。

WaveTour
Stephane Mallat 著 "A Wavelet Tur of Signal Processing" Stephane Mallat, Academic Press, 1998 の図表を再現するmファイルを収録したディレクトリ。さらに章ごとのサブディレクトリに分かれている。

WAVELAB850内容 ディレクトリ Biorthogonal

1次元または2次元の、周期的な双直交ウェーブレット変換解析のルーチン集。

Bi-Orthogonal Wavelet Transform (双直交ウェーブレット変換)

Bi-Orthogonal Wavelet (双直交ウェーブレット、と訳してみた) とは、英語版 Wikipedia によると、逆変換可能でしかも直交していなくてもかまわない (invertible but not necessarily orthogonal) ようなウェーブレット、とある。
直交していなくてもかまわないなら「双直交」って訳語は不適切だなあ。

Contents.m の要約

このディレクトリ内には、1次元と2次元の信号について繰り返し適用のできる双直交ウェーブレット解析のルーチンがあります。

ディレクトリ構成とその名称の由来であるアルゴリズムの要点は、すでにあるOrthogonalディレクトリの機能と対称で拡張されたフィルタ操作にあります。フィルタは実際には対称である必要はありませんが、どちらも長さ 2k+1 であり、中間サンプルの後ろのほうのフィルタ係数が0になるという特徴が同じです。

主要なツールは、FWT_PBS と IWT_PBS です。(変換と逆変換)

ウェーブレット変換
FWT_PBS
ウェーブレット変換、周期的、双直交、対称
FWT_PB
FWT_PBSの別名
IWT_PBS
ウェーブレット逆変換、周期的、双直交、対称
IWT_PB
IWT_PBSの別名
FWT_SBS
ウェーブレット変換、拡張対称、双直交
IWT_SBS
ウェーブレット逆変換、拡張対称、双直交
FWT2_PBS
二次元ウェーブレット変換、周期的、双直交、対称
FWT2_PB
FWT2_PBSの別名
IWT2_PBS
二次元ウェーブレット逆変換、周期的、双直交、対称
IWT2_PB
IWT2_PBSの別名
FWT2_SBS
二次元ウェーブレット変換、拡張対称、双直交
IWT2_SBS
二次元ウェーブレット逆変換、拡張対称、双直交
ウェーブレット変換の表示
PlotPBSNultiRes
画面をn分割した多重解像度表示(Mallatスタイル)。
フィルタとウェーブレット生成器
MakeBSFilter
FWT_PBSとFWT_SBSのための、対称フィルタの生成器
makeWavelet
周期的な直交ウェーブレットの生成器
2スケールオペレーター
UpDyadHi_PBS
アップサンプリング・ハイパス・オペレーター(IWT_PBS内で使用)
UpDyadLo_PBS
アップサンプリング・ローパス・オペレーター(IWT_PBS内で使用)
DownDyadHi_PBS
ダウンサンプリング・ハイパス・オペレーター(FWT_PBS内で使用)
DownDyadLo_PBS
ダウンサンプリング・ローパス・オペレーター(FWT_PBS内で使用)
UpDyad_SBS
アップサンプリング・オペレーター(IWT_PBS内で使用)
DownDyad_SBS
ダウンサンプリング・オペレーター(FWT_PBS内で使用)
ユーティリティ
symm_aconv
対称な関数fの逆関数から求めたxの周期的畳み込み。2スケール変換のためのシンメトリックコンボリューションツール。
symm_iconv
対称な関数fのxの周期的畳み込み
MirrorSymmFilt
共役な対称フィルター
extended
各種の対称な拡張を見つける。
dyadpartition
非ダイアディックな信号のウェーブレット変換において、ダイアディックな分割を決定する

3.2.4をインストール、カスタマイズ(playaudio.m, .octaverc)

3.0.3との相違点

  • playrecが付属してない。
  • 付属notepad++5.6.7は、%も#もコメントとして認識されるしOctave用のキーワードが追加されている。
    • 別途ダウンロードしたnotepad++では、langs.xmlとlangs.model.xmlを変更すればキーワードを追加できる。
    • %以外に#もコメントとして認識させるようにするために、付属のはどこをいじってあるのだろうか。

音を出す

まずWindowsでも音が出せるように、Windows標準のサウンドレコーダー(sndrec32.exe)を使うように以下設定。
playaudio.m 50行目付近

    unwind_protect
      file = tmpnam ();
      num = fopen (file, "wb");
      c = fwrite (num, X, "uchar");
      fclose (num);
# for Windows
#     system (sprintf ("cat \"%s\" > /dev/dsp", file));
      system (sprintf ("sndrec32 /play /close \"%s\"", file));
# end for Windows
    unwind_protect_cleanup

70行目付近

    if (strcmp (ext, "lin") || strcmp (ext, "raw"))
      system (sprintf ("cat \"%s\" > /dev/dsp", name));
    elseif (strcmp (ext, "mu") || strcmp (ext, "au")
        || strcmp (ext, "snd") || strcmp (ext, "ul"))
      system (sprintf ("cat \"%s\" > /dev/audio", name));
# for Windows
    elseif (strcmp (ext, "wav"))
      system (sprintf ("sndrec32 /play /close \"%s\"", name));
# end for Windows
    else
      error ("playaudio does not support given extension");

なお、引数が1個の場合に

ext = "lin";

って文が必要なはずなのに抜けている模様。このmファイルを ~/userTools 下においてaddpathしておけば、元のファイルをいじらずに済むしバージョンアップしても大丈夫。

.octavercの内容

edit    ("editor", "C:\\Programs\\_TEXT\\npp.5.6.8\\unicode\\notepad++.exe %s");
setenv  ("home",	 "C:\\Documents and Settings\\user01\\My Documents\\Octave");
cd ~;
addpath ("~\userTools");

EDITでエディタが変更できるのは今回はじめて知った。edit.mを見ると他にもAuthorやemailなどが設定できる模様で、これらは新規書類を作ったときにコメントへ埋め込まれる。