CMake を使ってみた 2019-01-17 (木) 21:33:20+09:00

ソフトウェア

timidity のプロジェクトの一つ、 osdn にある timidity++ 41版 というプロジェクトをローカルでビルドしようといろいろ試していて、やり方が分かった。

プロジェクトのルートフォルダごとに CMakeList.txt というファイルがあるので検索して見つけた CMake というツールを使うことで一発でビルド出来た。

最初 CMakeList.txt の中身を覗いてみたときに思ったのは、冬星の知っている Makefile の記述とはかけ離れてるなあ、ということだった。どちらかと言うと何かのスクリプト言語みたいな感じがした。

ビルドの仕方も、冬星の知っている make とは全然違っていた。 make の場合は、 make –f Makefile などとして Makefile を読み込ませればそのまま gcc なりのコンパイラが呼ばれビルドが始まったが、 CMake の場合はそうではなく、プロジェクトのルートフォルダに CMakeLise.txt があっても、そのフォルダで CMake CMakeList.txt などとしても何も起こらなかったが、「CMakeの使い方(その1)」を見て手順が分かった。

CMake でのビルドは:

  1. プロジェクトのルートフォルダ(プロジェクト用の CMakeList.txt が用意されている)で mkdir build などとして、ビルド用のフォルダを作る。
  2. 作ったフォルダに移動する。
  3. そのフォルダから cmake .. とする。

という不思議な手順で行う。こうすることでビルドが行われるかというと、実はそうではなくビルドは始まらない。 timdiity41 の場合、 Visual C++ 用のソリューションとプロジェクトが自動生成された。

そこで、 Visual C++ 用のソリューションをダブルクリックして Visual Studio を起動しソリューションを開いてやることで、ようやくビルドを開始することが出来た。

ここまで書いてから書くのもなんだが、つまり CMake は Visual Studio に対応しているということだ。(でなければこんなことができるはずがない。)また、 gcc にも対応しているらしい。 gcc の場合、上の手順の3まで行ったら make 用の Makefile が自動生成されるようだ。一言で言うと、 CMake は make の一種「ではなく」 Makefile などを自動生成するためのツール、ということだ。

キーワード: CMake timidity


久しぶりに timidity を使って midi の曲を聴こうとしたら、音色が正しく鳴っていないことに気づいた。

どうも、 timidity が使っている音源ファイルである soundfont の設定が正しくないようだ。

soundfont "foo.sf2"

の様な書き方しかしていなかったが、この形だと、1つの soundfont ファイルでバンク内の全ての preset の音色を持っている場合は大丈夫だが、 soundfont によっては、特定の楽器のみの音色で構成されるものもあるし、そのような soundfont の場合、 preset の番号が 0 だったりするものもあるので、それをそのまま読み込んだだけではうまくない。必要な preset の音色だけ置き換える必要がある。

そのような場合の記述の仕方として「Timidity導入解説」などによると、

p1 %font "foo.sf2" bank p2

のような書き方があるのが分かった。 bank は soundfont 内の音色の bank 番号、 p2 は soundfont 内の音色の preset 番号、 p1 は、 timidity がその soundfont を読み込んだ際に割り当てる preset 番号。

ただ、これを設定するためには、 soundfont ファイルの中にどんな音色が用意されているかと、それらの音色に設定されている bank 番号と preset 番号を知る必要がある。

検索して、 SoundFont Librarian というツールを使えば soundfont の内部の設定を見ることができるのが分かったが、どうもこのツール、配布先が全くのバラバラで、配布されているバージョンもバラバラ、挙句にどこが開発しているのかも不明・・・という、非常に胡散臭い状態のようだ。検索してみた感じだと、随分前に E-MU Systems というサンプラーや音源、 MIDI キーボードなどを作っていたメーカーがあって、そこが作っていたようだが、10年近く前に解散して Creative Labs の一部署となってしまったようだ。なので、今ネット上で開発配布されている SoundFont Librarian は、 E-MU ではない誰かがソースをどうやったか分からないがどこからか入手して配布しているか、または、そっくりのツールを一から書き起こしたか、どちらかだと思うが、いずれにせよ、どこの誰が何をやったか分からないようなツールにはウイルスやトラップなどが仕込まれていても全然不思議ではないのでインストールするわけにはいかない。

なので、ネットで soundfont の仕様を見つけて調べて、自分でツール( sf2show )を作成した。

拡張子が .sf2 の soundfont ファイルを開くと、その内部構造を下のようにリストに表示してくれる。

sf2show

timidity を使っていて、 soundfont の内部を見て設定するためにこれを必要とする人がどれだけいるかは知らないが、一応公開しておく。 .Net を使っているので、 .NET Framework 4.6.1以降が必要。

 sf2show 1.0.0.0

各 Chank の意味などについて詳しく知りたければ、上に挙げた URL の仕様を見て欲しいが、 timidity.cfg を記述する際に必要となる soundfont 内の音色と bank 番号、 preset 番号については、 ‘pdata phdr’ Chank の行を見れば分かる。

[コメントの受付は終了しています ]
この記事のリンク元 | 1 |

キーワード: soundfont sf2 sf2show timidity


追記のテスト 2019-01-09 (水) 16:03:20+09:00

投稿テスト

<!‐‐more‐‐>を使った追記のテスト。

rn_xmlrpc.php 側は何もしなくても、Open Live Writer 側でソース表示モードで <!‐‐more‐‐>を使って本文を区切ると、自動的に、 XML-RPC API に送られてくるときには content と mt_text_more に分割して記事が送信される。

同様に、追記を使った記事を Open Live Writer で取り込んだ場合、 mt_text_more に値がセットされていたら、本文、そして、 <!‐‐more‐‐>で区切り、その後ろに mt_text_more にセットされていた値が追加される。

つまり、 Open Live Writer で追記を使う場合、送信記事のソース表示モードで <!‐‐more‐‐>を使って本文と追記を分ける以外、 rn_xmlrpc.php 等では特にすることはない。

・・・と、いうわけで、この部分が追記の部分。本文と分けて表示されているはず。

少し試してみて気づいたが、<!‐‐more‐‐>を挿入して追記を追加した記事を投稿する場合は、文中に‐‐(半角のハイフン2つの連続)があると、 Open Live Writer が投稿時にエラーを起こす。

原因は、 newPost へのサーバ側からの response データの先頭に、 debug info として、サーバに向けて送られてきたリクエストの内容が送信されてくるのだが、その中に‐‐(半角のハイフン2つの連続)が含まれることになるので、それがエラーの原因となるようだ。この追記でのやり方のように、全角等半角ハイフン以外の文字に置き換える、または、&045;としてエスケープすることでエラーを回避することが出来る。なぜ、<!‐‐more‐‐>を挿入した場合だけそうなるのかは分からないが、とりあえずの対処法は分かった。


窓の外からうっすらと光が差し込み、小鳥の鳴き声が小さく聞こえてくる。

早朝。学生時代の制服に袖を通し、手早く着こんで熱いコーヒーを淹れる。火傷しそうになりながらそれを飲み干すと、ペンの入ったカバンを肩にかけ、次郎はアパートを後にした。

目的地には、既に多くの受験生が到着し、思い思いに準備を初めていた。次郎も筆記具を取り出し、机の上に並べて置く。 やがて、問題を抱えた試験管が扉を開けて中に入ってきて、試験の概要が伝えられた。

チャイムの音とともに試験が始まり、受験生のペンを走らせるかりかりという音が響く。

弁当を食べながら、午前中の問題を思い出す。携帯端末の画面に表示される模範解答と自分の答えを比較してみる。得点は突出してはいないが、まずまずではないか。午後からの試験もこの調子でがんばろう・・・。

大事な問題は完答できていたし手ごたえはあった。後日、結果の通知が届いた。予想通り次郎は「デザイナー」の初試験に合格していた。

「デザイナー」にもランクがあり、上級は航宙兵器の設計開発の指揮を執るデベロッパー(開発担当者)、中級は上級担当者の指示を聞き開発の指示を出すサポーター、そして初級は航宙兵器の整備を担当するメカニックだ。上級、中級、初級のそれぞれにおいて、各級がさらにABCの3クラスに細分されている。

「さあ、これからがんばるぞ。」

次郎が合格したのは、初級C。デザイナーとしての最初のステップだ。反応速度の適性の関係で合格できなかったチェイサー。その代わりにようやく思いを定めたデザイナーとしてのスタートラインに、おのずと気も引き締まる。

「おはようございます。」

小さな門を押し開けて工場に入ると、次郎は小さな声で先輩たちと朝の挨拶をした。 机の上の端末の画面を開き、今日の作業予定に目を通す。人型タイプの両腕の組みつけと、エンジンのオーバーホール。時間のかかる作業が数件だ。今日も深夜までかかりそうだ。

メカニックとして働き出して2年。エンジンや可動部分などの大物の作業も任されるようになってきた。 だが次郎はまだ満足してはいなかった。一日も早く開発者として自分の思い描いた航宙兵器を開発したい。そこには、チェイサーとして直接活躍することは出来ない代わりに、チェイサーが駆る航宙兵器を開発することで自分自身が愛機を駆って戦っているような気持ちを持てるのではないかという次郎なりの想いが働いていた。 両手を真っ黒にさせながら次郎は黙々と作業を続けた。

「おはようさん。今日も頑張ってる?次郎ちゃん。頼んでおいたミサイルポッドの調子はどう?」

「うーん、試してみた感じ、射出装置のシリンダ内のクリアランスが少し広くなってるみたいなんで、内部の部品を分解して交換やっておきます。あとの部分はまあまあいい感じですよ。」

「よろしくね。出来るだけ今日中に完了してミサイルポッドは明日組付け納品したいのよね。」

「了解です。やっときます。」

サポーターとして働きまた2年。試験を受けてから4年が経った。

合格を約束し合い一緒に目指した彼女とは、クロスと抱き合う姿を見かけて以来、会っていない。たまに聞く噂では、撃墜数が同期のトップ3だとか、クロスとの交際は続いているらしいとか、そんな話がたまに耳に入ってきた。顔が見たい、声が聞きたい、そう思うことも時々あるが、守れなかった約束、今の自分のまだ十分とは言えない立ち位置、クロスと彼女の関係を思い出すと、その度に躊躇われた。

一度だけ、彼女から電話がかかってきたことがあった。嬉しかったが、一方で約束のことを聞かれるだろうかと考えながら話を聞いたが、彼女の電話の内容は、受験の同期で同窓会的に飲みに行かない?、というものだった。少し考えて、辞退した。やはりどうしても、約束を果たせなかった自分には、身の置き場が見つからない気がしたからだ。

彼女のことを思い出した日は、仕事をあがってもそのまま帰宅せず、飲み屋に寄って、カウンターで背中を丸めて座り一人飲むことが次郎は多かった。自分にもいつかまぶしく輝く未来が来るのだろうか。来てほしい、いつか、こんな風に背中を丸めることもなく、自信をもって、愛する人を胸に抱くことができる日が。今はまだ、道は遠く、差し込む光はとても小さいけれど・・・。

そんな想いを胸に、今日も部屋に戻ると次郎は着替えもせずに毛布をかぶり、エビのように丸くなって眠った。オンディーナのドームがとても緩やかに回転していく音が微かに幽かに響く中―――。

[履歴]
ver.1.00(初版) 2019-1-8

「クルーズチェイサー BLASSTY」の第2話です。

えー・・・長かったですね。続きを書くまでが。前回のを見てみると、2005年なので、13年以上経ってました。(汗)永野護の「FSS」とか、最近の「ベルセルク」の新刊を待つのなんか、目じゃないですね。次はいつでることやら。(笑)いや、多分、1話と2話の間ほどはかかんないと思います。

次郎君、まだ自分の満足いく仕事が出来てません。黙々働いてます。彼女いません。応援してあげてください。メカも戦闘シーンもまだ登場しません。

キーワード: BLASSTY