2015年8月15日土曜日

ソフトシンセの作り方(1) - 音程の性質

VGSのソフトシンセ(波形メモリ音源)の開発で得られた知見を元に、PCやスマートフォンで動くソフトシンセの作り方を解説していきます。一冊の本が書ける程度の分量なので、幾つかのパートに区切って解説していきます。このシリーズを一通り読めば、サウンドプログラミングについて全くの素人でも、PCやスマホなどのプラットフォームで動くオリジナルのソフトシンセが作れる程度になります(たぶん)

なお、このシリーズで扱うプログラミングの例題のビルドには、パソコンが必要です。OSは私が使っているMac OS X向けに解説を記述しますが、Linux(※ALSAに対応しているもの)やWindowsでも問題ありません。

当面は、基礎編ということで、音についての基本的なことについて書きます。
今回は音程の性質について。

【基礎編1】音程の性質

音には「高さ」という概念があります。 音の高さ(音程)は 音波が1秒間に何周期(何Hz)繰り返されるか で決まります。 1秒間に音波を繰り返す周期のことを 音程周波数 と呼びます。

音程周波数の性質

音程周波数と音程の関係は、次のようになっています。
  • 1秒間に440回繰り返す(440Hz) :
  • 1秒間に880回繰り返す(880Hz) : 1オクターブ上のラ
つまり、音程周波数には 2倍にすると1オクターブ上(1/2倍にすると1オクターブ下)の音程になる という性質があります。
ここで、周波数を表す Hz(ヘルツ = 繰り返す回数を表す単位)が出てきましたが、コンピュータに詳しい方の場合、サンプリング周波数のHz  音程周波数のHz を混同しがちなので、注意しましょう。サンプリング周波数 音程周波数 の間には密接な関係があるので、若干ややこしいです。 

サンプリング周波数

サンプリング周波数とは、1秒間に何回の量子化を行うか を表すものです。

量子化

音の正体は波(音波)ですが、現実世界の波(アナログ波) の全ての音を コンピュータの世界(デジタル波) で表現することは不可能です。そのため、コンピュータの世界の波(デジタル波)は、単位時間(1秒)を幾らかの値で区切り、その区切られた単位時間毎の波の位置をデータとして持ちます。
これを量子化と呼びます。
そして、この量子化の粒度が細かいほど、現実の音(アナログ波)に近くなります。 例えば、VGSの音声のサンプリング周波数は22050Hzですが、CD44100Hzなので、VGSの音声よりもCDの音声の方が、より現実の音に近いと言えます。
しかし、粒度が細かいほど、コンピュータが処理するデータ量が増え、データ消費量が増えると端末の電池消費量の増加や、発熱がし易くなるなどのデメリットが生じます。

量子化粒度と「音の良さ」の関係

現実世界に近い音の方が良い音かというと、これも必ずしも Yes ではありません。
実際、VGSの音声処理を改造して、サンプリング周波数を44100Hzにする改造(ハイレゾ化)をする実験を試みたことがあるのですが、それにより音が良くなったとは感じられない結果になりました。
また、東方BGM on VGSのレビューでも「音質が良い」という評価を頂くことがしばしばあります。仮に量子化の粒度と「音の良さ」の間に相関関係があったとすると、そのような評価が得られることは無い筈です。
圧縮技術の進化により、普段聴いているであろうmp3の音楽や動画の音声(aac)のサンプリング周波数は、44100Hzかそれ以上が一般的です。そのため、殆どの人は44100Hz(以上)のサンプリング周波数を基準にして「音の良さ」を判断している筈なので。
つまり、量子化の粒度というのは、グラフィックスの画素数 と同様かもしれません。例えば、画素数が荒いドット絵のゲームを、Retinaの画質に合わせた綺麗なハイレゾグラフィックにしてみると、「雰囲気が失われた」と不評を買うことがあります。
量子化の粒度についても、それと同じことが言えるのではないでしょうか。
また、ほとんどのデジタル音声が44100Hzのため、22050Hzの東方BGM on VGSの荒い音声が逆に新鮮に感じたのかもしれません。もちろん、ドット絵よりもハイレゾグラフィックが好きな人が居るのと同様、VGSよりもハイレゾな現実に近い音を好きな人も居る筈です。

サンプリング周波数と音程周波数の関係

サンプリング周波数 音程周波数 は、異なる概念です。しかし、プログラムで目的の音程周波数を求めようとすると、どうしても必要になるから少し厄介なのです。 サンプリング周波数と音程周波数の関係を手っ取り早く理解するには、実際にプログラムを書いてみるのが一番楽かと思います。

2015年7月19日日曜日

(規約上はセーフっぽい気がしないでもない)

久々にフリーな時間ができたのですが、東方VGSの更新はせず、こんなん作ってみました。

ソーサリアン(日本ファルコム)のルシフェルの水門より、ブラッディーリバーのVGSアレンジです。

日本ファルコムでは、ファルコム音楽フリー宣言という形で、サードパーティー(個人or法人は問わない)による楽曲の(原盤ではなく著作権の)使用を許諾しています。上記動画配信は、これを利用する形で配信しています。(要するに合法です)

前々から思っていたのですが、このファルコム音楽フリー宣言の利用規約を確認する限り、日本ファルコムの楽曲をお借りして東方VGSみたいな感じのアプリを配信するのは、セーフなんじゃないかなと。

具体的な利用規約は↓

上記より第4条を抜粋

第4条 (禁止事項) 
利用者は、以下の行為を行わないものとします。
以下の行為を行った場合、当社は利用の停止、制限措置を講じることがあります。
1.楽曲を複製、貸与、その他の方法により配布、販売する行為。
2.演奏もしくは歌唱した映像又は音源をCD、DVD等の媒体に記憶させて販売すること、及びインターネット等においてデータをダウンロード販売又は有料で配信する行為。
3.有償又は無償を問わず、ゲームコンテンツに利用する行為。
4.当社著作物に含まれるデータ(MIDIデータ、音声データ等)を修復可能な状態で再配布及び送信可能化する行為。
5.法令及び公序良俗に反する行為。
6.当社又は第三者の名誉、人格もしくは信用等を毀損する行為又は不利益を与える行為。
7.本規約に反する行為。

上記では少し分かり難いので、具体的にOKな例とNGな例が載っていたので抜粋

■フリーでお使い頂ける例:
・会社・団体・サークル等の紹介ビデオ、学校での卒業アルバム用ビデオ、または個人の映像作品に楽曲を利用
 ・ホームビデオ、個人の映像作品に楽曲を利用
 ・ニュース、ドキュメンタリー、ワイドショー、バラエティ、情報や通販など番組のBGMに利用
 ・CMのBGMとして楽曲を利用
 ・ラジオのBGMとして楽曲を利用
 ・有料無料の有線テレビ、ミニFM局のBGMやジングルに利用
※楽曲そのものを有料で配信するもの(有線放送、着うた、通信カラオケなど)は除く
 ・WEBサイト、ブログ等のBGMとして利用
※但し、第三者が楽曲を自由にダウンロード取得できる様な状態は不可
 ・ライブ、コンサートで楽曲を演奏(プロ・アマ問わず)
 ・公共施設(学校、公園、市役所、公民館等)で楽曲を放送
 ・商業施設(遊園地、プール、映画館、ゲームセンター等)で楽曲を放送
 ・レストラン、コンビニエンスストア、百貨店などの店舗内BGMとして利用
 ・演劇、舞台、各種イベントのBGMとして利用(プロ・アマ問わず)
 ・コンクール、発表会などの課題曲、自由曲として楽曲を利用
 ・団体活動、選挙活動等の際にBGMとして利用
 ・無償で配布または公開する制作物(CD、DVD、ソフトウェア、インターネットコンテンツ等)に楽曲の一部を利用

■フリーでお使い頂けない例 (別途許諾契約が必要となります。プロ・アマ・個人・法人・同人問わず):
・ゲームへの利用(有償・無償にかかわらず一切不可)
・楽曲そのものを有料で配信する有線放送
・楽曲そのものを有料で配信する着うた、着メロなど
・楽曲そのものを有料で配信するカラオケ
・楽曲を演奏もしくは歌唱した映像や音源コンテンツの販売および有料配信
・楽曲そのもの(音楽CD、配信データ等)を複製し、第三者へ譲渡
・公序良俗に反するものへの利用

まず、明白にダメなのは「ゲームへの利用」。
東方VGSはゲームではなく、音楽配信アプリなので「ゲームではない」から、この点についてはセーフだと思います。

恐らく、カテゴリ的には「無償で配布または公開する制作物」にあたるのだろうか?

ただ、NGな例として「楽曲そのもの(音楽CD、配信データ等)を複製し、第三者へ譲渡」というのがあって、音楽配信アプリとして配布するのは、それに該当するような気がしないでもないです。

まぁ、まだアプリとして配れるほどの楽曲数が揃っていないので、今のところアプリとして配布する予定はありません。(そして、アプリとして出す場合は、日本ファルコムのライセンス窓口にちゃんと確認を取ります)

この種のゆるふわな条文というのは、具体的にOKと認められている例以外はNGと解釈するのが常識なので。(ゆるふわな条文とは定義が曖昧な条文ということです。例えば「ゲームコンテンツ」という用語も語義を最初に明確にしていないから、如何様にも解釈する余地があります...)

2015年7月12日日曜日

AndroidアプリでVGSのBGMを再生する(Javaだけで)

Androidアプリでお手軽にVGSのBGMファイルを再生するライブラリを作ってみました。

https://github.com/suzukiplan/vgs-sound-android

私としては、本家VGSを使ってC/C++だけで書いて欲しいという気持ちが強いので、若干気乗りしなかったのですが。

とりあえず、現時点では asset または ローカルストレージ に格納された BGMファイル(vgs2mmlでコンパイルしたもの)のロードと再生に対応しています。

使い方としては、build.gradle のdependenciesを編集してvgs-sound-androidのライブラリモジュールを取り込み、

↓アプリケーションクラスでこんな感じの初期化をして
https://github.com/suzukiplan/vgs-sound-android/blob/master/app/src/main/java/com/suzukiplan/vgs/test/VgsApplication.java

↓アクティビティクラスでこんな感じの実装をします
https://github.com/suzukiplan/vgs-sound-android/blob/master/app/src/main/java/com/suzukiplan/vgs/test/MainActivity.java

投げやりですみません。Javaが嫌いなので、丁寧に説明するモチベーションが湧きません。そんなJava嫌いな私が、Java勢向けにライブラリを作っただけでも大譲歩だと思います。ちなみに、Objective-cはもっと嫌いです。(C/C++だけで何も困らなかった筈)

2015年6月24日水曜日

Good bye Windows!

私のゲーム開発環境をWindowsからMacへ完全移行中。

移行理由
・iPhoneアプリを作る時だけMac起動するのめんどい
・Windows用アプリはもう作ろうと思っていない
・AndroidアプリもWindowsで作ろうとすると主にドライバがクソ(もっと具体的に言うとWindows 8以降のドライバの署名関連の下手な締め付け仕様部分がクソ)なので、Androidアプリ開発にもLinux or Macが事実上必須(実際、AndroidアプリはWindowsでVMのLinuxを立ててソコで作業している)
・いちいちVM Linuxを起動するのが面倒
・VMのもっさり感
・もっさり感はTeraTermでCLI onlyで作業していればまだ良いが、WindowsとVM/Linux間でのディスク同期が面倒(CIFSでマウントすると時々ハングするし、Sambaは設定が面倒だし...)
・外出先へ2台PCを持ってくのはめんどい
・Mac Book Airのキーボード打ち易い
・Mac Book Airのパッド式マウス使い易い(リアルマウスが不要になる)
・フォントが綺麗
・スタバでドヤリング(は、しない)

まぁ、要約するとWindowsに対して溜まりに溜まっていた不満が爆発しました。

Linuxに移行しても良かった(実際、CentOSのデスクトップはすごく良かった)のですが、iPhoneアプリ開発的な事情もあるので、それならMacに移行した方が幸せだろうと。

移行する上でのネックとなるのが、以下2点。
①VGSのSDK+sandboxがWindows専用だった
イケてるグラフィックや音関係のツールがMacには無い

上記①については、VGSをMacへポーティングして解決。

VGSのSDKはCLI onlyなので、LinuxやMacへの移植は簡単です。問題はsandbox。VGSのsandboxとは、スマホ実機じゃなくてもVGSアプリを動かすことができるテスト環境のことです。これをMacへ移行するのは結構大変ですが、その点は描画系にSDLを用いることで割と簡単にできました。

まぁ、①については独力で何とでもでき、そんなに難しい問題じゃないだろうと高を括っていたのですが、実際蓋を開けてみるとその通りだったので、若干肩透かしを喰らった気分です。

しかし、問題は②。
無料 or 有料を問わず色々探してみたのですが、使い物になるモノは、ひとつも見つかりませんでした。なんというか、全般的にショボいものが多い。作るのが難しいのかな?AppStoreなどアプリを売れる環境が整っているので、もっと色々あると思っていたのですが。(売れる環境があってもMacがそんなに普及していないから仕方がない)

iPhone・iPad用のツールであれば無駄に充実しているけど、流石にスマホ・タブレット で実用レベルを追求できる水準のモノを求めるのは酷でしょう。実際、有るのはオモチャばかりです。スマホやタブレットで満たせるニーズは飽くまでもエンドユース限定で、そういう風に割り切っているからこそここまで普及したのだろうと思います。(結果論ですが)

そんな訳で、②の問題解消手段として考えたのは、「全部 自分で作る」。
いや、冗談ではなく。
なので、手始めにドット絵を書くアプリを自前製作しようと、こんなリポジトリを作成。
https://github.com/suzukiplan/OpenDotE256

しかし、Macへの移行は今すぐにでもしたい。
という訳で、今回は取り敢えずwineで逃げることにしました。
使ったのは、EasyWine
http://matome.naver.jp/odai/2140238022377155001

EasyWineで動かしたアプリは、以下2つ。
ALFAR(ドット絵を書くツール)
ピストンコラージュ(作曲や耳コピ時に使用する)

上記以外にも 効果音エディタ_D というツール(その名の通り、効果音を生成するツール)も使いたかったところですが、現時点のEasyWineでは動かなかったので残念。だいたい動いてくれたのですが、ファイル保存とかのコモンダイアログでファイル名を打とうとするとハングアップします。

でも、効果音なら私のバンク(オリジナル効果音集)がかなり豊富にあり、新規に効果音を作る機会も少なくなってきたところなので、新しい効果音が必要になった時だけWindowsで作る感じでも良いかなと。

あと、MIDIがある東方の曲(残るは東方幻想的音楽の収録曲ぐらいですが)をVGS化する時にMIDIシーケンサが必要なのですが、それについてはAlchemusicaというアプリで大丈夫そうな感じ。
http://osdn.jp/projects/alchemusica/

2015年6月21日日曜日

vgs2playで東方VGSのmmlデータを再生しよう

VGSに関するTIPSネタです。

つい先ほど、Mac版 と Linux版 の VGS に、ターミナル(端末エミュレータ)上でBGMファイルを再生する vgs2play という CLI を追加してみました。

そこで、それを使って東方VGSのリポジトリ上に登録されているMMLファイルを再生するまでの手順(最低限のもの)を解説します。

文書で説明するのが面倒なので、シェルスクリプトで。

上記の内容をターミナルで実行すれば、(うまくいけば)蓬莱伝説が鳴り始める筈です。
単純にコピペしたシェルを作って chmod +x してから実行するだけでもうまくいく筈。

どのmmlファイルがどの曲に対応しているかは、東方VGSのリポジトリの README.md を確認してください。(下の方に対応リストが載っています)

ちなみに、Macの場合、ターミナル(端末エミュレータ)は、 Finder を起動して左タブから「アプリケーション」を選び、右タブから「ユーティリティ」をクリックすれば出てきます。よくWindowsから移行した人(でUNIX経験がある人)から聞かれます。(Macを使う人でターミナルを使わない人が居るか疑わしいので、リンゴマークから起動できれば良いのに、なぜ隠しているのか謎)

2015年6月13日土曜日

東方VGSが10万DLを達成までの数値を軽く分析

Android版の東方VGSが10万DLを突破。
なお、iOS版の方は3カ月ほど前に突破済みです。
リリースはAndroidの方がiOSよりも3カ月ぐらい早めでしたが。

Developer Consoleで確認できる情報にちょっと手を加えて、これまでの軌跡を振り返ってみます。


ちょっと横に長すぎるので、1万DL達成、5万DL達成、10万DL達成の順で。

①1万DL達成(所要期間217日 & 46DL/日)


②5万DL達成(所要期間252日 & 159DL/日)


③10万DL達成(所要期間300日 & 167DL/日)


上記①~③の数値(所要期間とDL/日)と前期間からの増減率を表にしてみます。

フェーズ所要期間前フェーズ増DL/日前フェーズ増
①1万DL達成217-46-
②5万DL達成252+16.13%159+245.65%
③10万DL達成300+19.05%167+5.03%

Twitterで、以下のように含みのある発言をした(人気アプリになったみたいに錯覚しそうと発言をした)のは、上記数値を見て「そろそろ頭打ちかな」と思ったからです。

確かに、まだ伸びているっちゃぁ伸びているのですが、DL/日の伸び率が「これから伸びる」というラインを下回っているので、この辺りが伸びる限界点で、あとは沈むだけかなと。iOS版の方のキーワード「東方」での検索順位も、長らく1位を独占してきましたが、本日時点で3位まで落ちてきていますし。

仮に、2016年中に50万DLを突破すれば、まだ伸びしろは残っていると思います。しかし、それを達成するには、今年の6月10日以降、2016年12月31日までの間に、平均702DL/日のDL数を稼がなければならないので、まぁ、無理でしょう。

ちなみに、東方VGSは2年間の内、半年間ほどまったく作業をしなかった期間があります。そして、その空白の期間中に数値が落ちたということであれば良かったのですが、残念ながら、実際その空白の期間は③ではなく、②の期間なんですよね。つまり、ヒーコラ苦労して曲追加しても伸び率はそんなに変わらず、ある程度サボっていた方が伸びるという面白い結果になりました。

だから、Hunter x Hunter は人気があるのか...!!!

真面目な話し、このアプリの強みにして最大の弱点はソーシャル拡散性が無いことだろうと思います。要するに、他人に薦めたくなるシロモノではないということ。だからこそ、空白の期間に伸びたという理屈が成り立つのかも。

ズラズラ書きましたが、分析結果を纏めると、

 富 樫 先 生 化 で ワ ン チ ャ ン あ る か も

ってことですかね。
なんだそれw
でも、調べてみるとコンテンツ業界では結構事例が沢山あったりするので、それが正解という可能性も無きにしも非ずです。

2015年6月7日日曜日

VGL: SUZUKI PLAN - Video Game Land

今、SUZUKI PLAN - Video Game Land(以下、VGL)を構築中。
「プラットフォーム」といえど、コテンツプロバイダは私だけですが。

開発中の画面
VGLは、スマートフォン用の新しいゲームプラットフォームです。
メインの処理系はHTML5にしました。
そのため、上図のようにPCブラウザでも「デバッグをすることなら」できます。

「デバッグをすることなら」と含みを持たせたのは、これは単なるHTML5ゲームエンジンではないためです。HTML5とネイティブアプリ間のインタフェースを持たせることで、通常のHTML5では実現不可能な、波形メモリ音源による音声再生機能を使えるようにしたりしてます。

HTML5ゲームは、そこそこ実用に耐え得るレベルに進化しましたが、依然として弱いのが音関係の部分です。かといって、VGSの波形メモリ音源のような尖った仕組みが標準実装されることは多分ありません。だから、HTML5ゲームは残念なレベル止まりなんだろうと思います。

VGLは、先日ドメインを取得した suzukiplan.com で稼働させる予定です。
そして、suzukiplan.com にアクセス可能なVGL専用WebViewを搭載したアプリを配布予定です。

VGLが稼働できれば、東方VGSの新しい曲を追加した時とかに、iOS版なら通常1カ月は待たなければならないアップデートを待たずして、スマホで視聴することなども(技術的には)可能です。ただ、AWSとかみたいなゴージャスなサーバではなく、月額500円ぐらいのオモチャみたいなサーバで稼働させるので、当面はそういったアクセスの集中しそうなことは避けるつもりです。(ついでに、サーバ費用が掛かる以上、ある程度のマネタイズは不可避なのですが、東方二次創作をソコでやってしまうとガイドライン上広告とかが載せられないからキツイ)

まぁ、やるにしても私のオリジナル曲の視聴ぐらいでしょう。
それなら殆ど集まらないw

合理的ではないものを作りたい

ここ最近、実機版の東方VGSの開発が忙しくて、東方VGSの曲追加が滞っています。 東方VGS(実機版)のデザインを作りながら検討中。基本レトロUIベースですがシークバーはモダンに倣おうかな…とか pic.twitter.com/YOYprlDsYD — SUZUKI PLAN (...