2012年8月12日日曜日

ニコニコ生放送の延長確認ツールを公開

Zero が一般会員に開放されたことや、また某生主さんのコミケデビューなどを記念して、ニコニコ生放送で生主が延長しているかを確認できるツールをひっそりと公開してみます。まぁ、そこまでは需要ないでしょうけど…。

詳しくはこちらのページからどうぞ。

2011年2月11日金曜日

【DTM】 VST 3.5 リリース!ということで現状での VST 開発まとめ

備忘録をかねて、たまには DTM の話題でも。といっても開発者視点の話題ですが f^^;

Steinberg の 2 月 10 日の記事によると、VST 3.5 がそろそろ出るみたいですね。SDK のダウンロードも可能。ということで、VST 開発に関する日本語情報が少ないので、(VST 3.5 新機能を含む)まとめ記事を作成してみました。

まず VST (Virtual Studio Technology) とは、一言で言うと DAW ホスト(DTM ソフト)にプラグインの形でソフトウェア音源やソフトウェアエフェクトを追加することができるようにするための規格で、音楽業界でデファクトスタンダードになった Cubase というソフトを作った会社 Steinberg の規格です。ちなみに、ASIO ドライバなんて聞いたことがある人もいるかとは思いますが、これも同じ会社の規格です。Steinberg というと聞きなれないかもしれませんが、実は Steinberg は YAMAHA が最近買収したので経営権は日本にあります。ちなみに、MIDI も日本発の技術で、昔から「音楽業界の標準技術は日本にあり」なんて言われているのは業界では有名な話です。

前置きはさておき、今回は一クリエイターではなく、一開発者の視点から VST 開発全体について情報整理してみます。

まず、VST を開発するには、開発キット SDK を入手する必要があります。無償で公開されており、誰でも入手可能です(要ユーザー登録)。なので、無償の Visual Studio Express Edition 等を組み合わせれば能力次第で誰でも本格的な VST の開発ができます(OOP プログラミング、デジタル音楽の知識、音響物理学、英語と色々必要ですが)。開発言語は C++ で、クロスプラットフォームです(GUI 開発には独自ライブラリの VSTGUI が付属します)。ただ、開発ドキュメント(特に日本語)が少なく、誰かが作ったソースをダウンロードして解析するぐらいしかまともな勉強方法がありません。また、開発者の母数が少ないからか、SDK のドキュメントやサンプルソースも最低限のため、ある程度のトラブルは自力で解決できる経験が要求されます。さらに、音響効果をつけるためにはどのような波形処理を行うべきかといった音響物理の知識がいりますし、VST はリアルタイム処理のため処理に使える時間制限が厳しく、直接メモリ操作を行うような低レベルでのコード記述が要求されるなど、開発難易度は非常に高い部類だと思います。

VST のバージョンに関して。3.5 がリリースされる以前は、VST2 系と VST3 系の2つの規格がありました。VST3 では VST2 に比べ構造が柔軟になりましたが、その分複雑になってしまい、複雑になったわりに有用な機能が少ないことから、結局 VST2 系が現在では広く使われています。VST3 には存在していて、VST2 に無い機能としては、サイドチェーンあたりが有名どころでしょうか。後は、柔軟な構造を活かして音響処理PCと操作PCを分離したりできたりするらしいですが、これは結局 DAW ホスト(DTM ソフト)側に依存するので、特殊な用途向けと言えると思います。

ここに VST 3.5 が投入されることになります。VST 3.5 はこれまでの VST3 系とは独立のようですから、それぞれの系の最新バージョン VST 2.4、VST 3.1 と、今回の VST 3.5 の3規格が存在することになります。冒頭の Steiberg の記事(英語)によると VST 3.5 がリリースされることで、VST 3.0 に乗り換えなかった多くの人が 3.5 に移行することになるだろうと書かれているようですね。VST 3.5 の目玉機能は Note Expression という機能で、記事を読む限り、個々の MIDI ノート(イベント)に「MIDI の枠を超えた膨大なアーティキュレーション情報がついてくる」ことで、開発者にとって無限の柔軟性が生まれる、ということらしいです。記事の例を引用するとすれば、同じ楽器でも例えばピッチカート奏法やレガート奏法、トレモロ奏法を行うことができる楽器において、これまでは奏法ごとにトラック(チャンネル)を分割し、それぞれのトラックで MIDI ノートを入力していましたが、これらを自動的に切り替える機能が Cubase/Nuendo 側で実装され、それに対応したプラグインを開発することができる、ということが挙げられています。後は小さな新機能として XML ベースのパラメータのインポート・エクスポートに対応するとか、ホスト側のコンテキストメニューを作成できたりするみたいです。

うーん、VST 3.5 はどちらかというとエンタープライズ向けの拡張かな…。仕事でやるならともかく、一個人の趣味プログラマーにとってはそこまでメリットなさそう。アーキテクチャも、VST 3.1 の時点で複雑なのに、もっと複雑になってそう。。サンプルも少なそうだし、公式サンプルをちょっと試すだけ試してみて、しばらくは VST 2.4 での開発を続けることにしようかな。

ところでもうすぐ Cubase 6 が出ますね。欲しいけど、Windows 7 専用か。XP がデフォになってるし、どうしようかなぁ…

2010年10月10日日曜日

(Linux等の)シェルスクリプトを Mac の Finder からダブルクリックで実行するには

少し躓いたので、メモメモ。まとめると次の3点が要点となる。

  1. スクリプトの拡張子を .command にする
  2. ターミナルから、chmod で実行権限を与える
  3. スクリプトの Shebang のすぐ下に cd `dirname $0` を入れる (シングルではなくバッククオートであることに注意)

詳細について。まず、シェルスクリプトの書き方から。これは Linux と同様 Shebang ではじめ、通常通りコードを書いていく。

#!/bin/sh

[ここからコード]

このスクリプトファイルをダブルクリックした時にターミナルを起動するように設定する必要がある。Mac 上で拡張子の関連付けを行えばよいことになるが、10.6 (Snow Leopard) では、デフォルトで ".command" という拡張子がターミナルに関連付けられいることを確認した。"install.command" のような感じで拡張子をつけて保存するとよい。(もちろん別の拡張子を利用したい場合はその拡張子をターミナルに関連付けておく)

また、Linux と同様にスクリプトには実行権限を付加しておく必要がある。これは Mac 標準の Finder からは設定できないようなので、ターミナルから実行権限を付加する。例えばコードが install.command だった場合、

chmod +x install.command

もちろん、ファイルがホームディレクトリに無い場合は、該当のディレクトリに移動するか、フルパス指定で実行。

ただし、Mac ではダブルクリックで起動した場合、ホームディレクトリをカレントディレクトリとしてコードが実行されてしまう。例えば、ユーザー名が hoge、コードが /Users/hoge/abc/install.command においてある場合、Mac は自動的にホームディレクトリでコードを実行してしまう(下の太字の部分が Mac が実際に実行しているコマンド)。

Last login Sun Oct 10 22:54:02 on Console
pcname:~ hoge$ /Users/hoge/abc/install.command ; exit;
[コマンド実行結果]
logout

[プロセスが完了しました]

コード内で相対パスを利用している場合、コードの置いてあるディレクトリにカレントディレクトリを移動させないと不具合が出る場合がある。これを行うためには、例えば "cd `dirname $0`" というコードをシェルスクリプトの冒頭に入れておけばいい(シングルではなくバッククオートであることに注意)。これは、コードのパスからディレクトリを dirname で取得し、その結果を cd に渡すことでカレントディレクトリを適切なところに移動するコードである。

結局、スクリプトは次のように書けばよいことになる。

#!/bin/sh
cd `dirname $0`

[ここからコード]

2010年10月1日金曜日

Ubuntu 10.04 で x86 向け Android 2.2 (froyo-x86) のビルド(コンパイル)と iso イメージの構築

今回は android-x86.org を参考にして、Android を ubuntu 10.04 でコンパイルし、インストールディスクを作成してみます。ただし、記事のままだとマウスが動かないなどの状態だったので、実用的に使えるレベルで動作させるには、このブログ記事の内容に加えてカーネルをカスタマイズしていく必要がありそうです。

コンパイルを行う環境として、ハードディスクドライブは20GB、メモリとしては最低でも1GBぐらい必要です。特に VMware や VirtualBox 等仮想環境でコンパイルする場合は割り当てるリソース量を多めにしてください。

まず、Java について躓いたのでメモ。Ubuntu 10.04 では、OpenJDK を標準化したいらしく、sun による実装がパッケージマネージャに含まれていないらしい。まず、Java のリポジトリを追加する。次の % までが1行ですので、お気をつけ下さい(出力は書いていません)。

% sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
% sudo apt-get update

ちなみに、Java 1.5 JDK でのコンパイル環境を想定しているらしいが、最近最新版の 1.6 でもコンパイルできるようにパッチがあてられたらしいので問題なし。

コンパイル等に必要なパッケージをインストール。

% sudo apt-get -y install git-core gnupg sun-java6-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev valgrind g++

ソースコードの管理は git で行われているが、Android 用にこれをラッピングする repo というスクリプトがあるのでそれを ~bin にインストールし、実行権限とパスを設定。

% mkdir ~bin
% curl http://android.git.kernel.org/repo >~/bin/repo
% chmod a+x ~/bin/repo
% export PATH=$PATH:~/bin

JAVA_HOME を設定する必要があるようなので、設定。

% export JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.**.**

(Java のバージョンは変わるので、各自調整してください。Ubuntu のデフォルトのシェルである bash の場合、java-6-sun-1.6. まで入力したら[TAB]キーでその後ろを補完してくれます)

ホームディレクトリの直下に android-x86 というディレクトリを作成し、そこにリポジトリからソースコードをダウンロード。

% mkdir ~android-x86
% cd ~android-x86
% repo init -u git://git.android-x86.org/manifest.git -b froyo-x86
% repo sync

repo init の行で、名前とメールアドレスを聞かれるので、入力する。その次の repo sync を実行した時点で、ソースコードのダウンロードが始まる。結構時間かかります。ちなみに、執筆時では実際にダウンロードした全容量は 4.6 GB でした。

ダウンロードが完了したら、コンパイルして iso イメージを作成。USB イメージも作成できるようですが、今回はより簡単な Live CD を作成してみます。Live CD を作成するには、make のターゲットを iso_img とします。OSを構築するので、このコンパイル作業には数時間かかります。

% make iso_img TARGET_PRODUCT=generic_x86

以上の作業で、~/android/out/target/product/generic_x86/generic_x86.iso が作成されているはずです。これが Live CD 本体ですので、このファイルを CD に焼き、CD からブートしてみてください。BIOS で CD から起動できる設定にするのをお忘れなく。なお、Live ディスクからハードディスクへのインストールも可能のようです。

なお、USB イメージの作成だけでなく、iso データを圧縮するかオプションで設定したり、マルチプロセッサによる並列化等ができるようですが、これについては公式ページを参照してください(英語)。

コンパイルやインストールはできましたが、やはり一部カスタマイズしないとマウスなどが使えなかったりしました。もう少し調べる必要がありそうです。

参考ページ:

  1. 公式ページ(英語)
  2. ITpro 旧バージョン cupcake のインストール手順

2010年9月13日月曜日

ニコニコ生放送と Ustream のコメントを統合する Nwhois プラグイン - UniUnifier

…を作ってみました。

今まではブログ記事に乗せていましたが、流れてしまうので独立ページに移動しました。こちらからどうぞ。

2010年7月29日木曜日

Ubuntu 10.04 で C++ が利用可能な環境を整える (g++ のインストール)

Ubuntu 10.04 にはデフォルトで C++ コンパイラがインストールされていませんので、インストール方法の紹介です。

C++ コンパイラをインストールするには、[アプリケーション]-[アクセサリ]-[端末]を起動して、次のようなコマンドでインストールできます。

% sudo apt-get install g++

パスワードを聞かれたら入力し、その後本当にインストールしてよいか聞かれるので、「はい」を意味する y ボタンを押してインストールを実行します。インストールが終わったら、もう既に利用可能になっています。ソースコードのファイル名が "program.cpp" だった場合、次のようなコマンドでコンパイルします。

% g++ program.cpp

このように実行して、何も出力されなかったら正常にコンパイルされています。a.out という実行ファイルが生成されているはずです。もし、No such file or directory のようなエラーが出る場合、作業ディレクトリにソースファイルが存在するか確認してください。

生成された実行ファイル(a.out)は、コロンとスラッシュを頭につけて、次のように実行します。

% ./a.out

ちなみに、はじめからインストールされている C コンパイラは gcc という名前なので、g++ の代わりに gcc を使うと C コンパイラを使うことになります。

2010年5月17日月曜日

Ubuntu 10.04 への OpenGL + GLUT のインストール

Ubuntu 10.04 で OpenGL を利用するためのインストール手順です。OpenGL + GLUT での開発ができる環境を構築します。

まず、ビデオカードのドライバを入れるところから始めます。無くても一応動きますが、ビデオカードによる並列処理が利用できないのでかなり動作が遅くなります。ドライバは GNOME メニューの [システム]-[システム管理]-[ハードウェア・ドライバ] あたりからでも入れられるかもしれないですが、無理な場合はビデオカードのベンダーのホームページに行ってダウンロードし、手順に従ってインストールします。その後おそらく再起動を求められると思うので、再起動します。

次に、OpenGL と GLUT を利用するために必要なパッケージ群をインストールします。Ubuntu ではインストールは基本的に apt が自動的にやってくれます。実は Ubuntu 10.04 では、freeglut3-dev だけをインストール指定すれば、全ての必要な依存パッケージを芋づる式に自動的にインストールしてくれます。OpenGL の最新機能を利用したい場合は、libglew1.5-dev (とそれについてくる依存パッケージ)をインストールすると良いみたいです。ターミナルを開いて、

% sudo apt-get update
% sudo apt-get install freeglut3-dev libglew1.5-dev

あたりでできるはずです。依存パッケージもインストールしてよいかと尋ねられるので、許可します(1回目の sudo コマンドでパスワードを求められるので入力して下さい)。

ここまでできたら、こちらの4章に従ってサンプルプログラムを動かしてみましょう。有名な床井先生の入門ページです。あ、もうインストールは全て終わっているので、2章の「GLUT のインストール」は必要ないですよ。プログラム起動時、ビデオカードのドライバが正常に利用できない場合(あるいは入っていない場合)、3Dアクセラレータが使えないよ、という警告をしてくれるようです。

ちなみに床井先生のページの3章のコンパイルコマンドについて、プログラムのソースコードが program.c の時、

% cc program.c -lglut -lGLU -lGL

で動くことを確認しています。

もし動かない場合は、大文字小文字等の打ち間違い注意や、-lglut -lGLU -lGL の順番も揃えた方がいいかもしれません。上で紹介した方法は最小限の構成なので、それでも動かない場合はさらにパッケージ libxmu-dev libxi-dev を追加した後、ライブラリを可能な限り全てリンクすると動くかもしれません。これらは昔必要だったけど、今は必要ない(と思われる)パッケージです。上の作業に加えて、次のようにしてみてください。

% sudo apt-get install libxmu-dev libxi-dev
% cc program.c -lglut -lGLU -lGL -lXmu -lXi -lXext -lX11 -lm -lpthread

もしこれで動作したら、一つずつオプションを減らしていって最小限の構成を調べてみてもいいかもしれません。

# Ubuntu にはC++コンパイラが標準でインストールされていないので、C++を使いたい場合は g++ も入れて下さい。

% sudo apt-get install g++