2015年3月18日水曜日

VGS音源のオープンソース化について補足

先日、SUZUKI PLAN - Video Game Systemの第三世代(mk-II SR)をリリースしましたが、そこで採用しているオープンソースライセンス2箇条BSD(2 clause BSD)について軽く補足しておきます。

(ライセンス原文)
https://github.com/suzukiplan/vgs2/blob/master/LICENSE.txt

要点としては、

  • ソースコードやそれをコンパイルしたモジュール(バイナリ)を組み込んだ製品のコピーライト表記には、VGS mk-II SRのコピーライト表記を含めること
  • 損害が発生しても(私は)何も保障しない
の2点です。

(VGS mk-II SRのコピーライト表記)
SUZUKI PLAN - Video Game System mk-II SR
Copyright (c) 2015, Yoji Suzuki
All rights reserved.

ソースコードは自由に改変できるので、例えばUnityやCocos2d等で作られたゲームにVGSの波形メモリ音源だけ組み込むということも(コピーライト表記さえ守れば)可能です。

何故、オープンソース化したのか。

東方VGSではマネタイズをしていませんが、この波形メモリ音源の仕組みを独占的に使えば色々とビジネスが出来るんじゃないかと思う一方、この技術がもっと広く使われて欲しいという欲求があり、後者の方が私の中で強かったからオープンソース化することにしました。

VGSの波形メモリ音源は、メモリ容量が小さくて通信速度も遅いスマートフォン用ゲームで、必要十分なゲーム音楽を再生機能を提供する目的で設計したものです。しかし、スマートフォンを取り巻くインフラ環境が想定以上に恵まれていたためか、同じような技術で音楽再生機能を作っているゲームはかなり稀な存在というのが現状です。SUZUKI PLAN製のゲームを除けば、洞窟物語の作者さんが作られたKero Blasterとかぐらいしか思いつきません。それもその筈です。良いモノを作ろうとすれば技術的なハードルが高すぎるし、(VGS音源のように)シンプル過ぎるモノだとクオリティ的に問題があると考えるのが普通なので。

VGSの波形メモリ音源は、「ゲーム用音源」として許される最低ラインのクオリティを目指しました。
しかし、クオリティ面での心配は無いと思います。
その点は東方VGSのヒットが払しょくしてくれたのではないかと思うので。

ただ、今後スマホアプリでVGS音源を使ったサードパーティ製品がどんどん出てくる未来は無いと思っています。そもそも、スマホアプリはもう下火じゃないかと思っているので。次に来る(と私が勝手に思っている)ゲーム業界のパラダイムシフトに乗っかれればベストです。例えば、(具体的にどんなものかは謎ですが)任天堂のNXとか。先日の任天堂の記者発表を聞いた限り、NXはハーフクラウドなゲームプラットフォームになるのではないかと想像しました。ハーフクラウドとなると音楽アセットの取り扱いが問題になりますが、その点はVGSの波形メモリ音源の技術を使えば解決できます。もちろん、現実的に考えればそんな事は100%ないと思います(任天堂ならそもそもVGSが無くても自力で同じようなモノを作れるとも思います)が、そういう未来もあるのではないかと皮算用するのが楽しいです。

要するに、VGSの技術を下手に独占してお小遣いを稼ぐより、こういう夢のある夢を見たいから、とりあえずオープンソース化しておきました。もちろん、任天堂でなくても、VGSの音源システムを使った東方以外の成功事例とかも見てみたいです。

2015年3月14日土曜日

SUZUKI PLAN - Video Game System mk-II SR

SUZUKI PLAN - Video Game System mk-II SRをプレリリースしました。
https://github.com/suzukiplan/vgs2

VGSもいよいよ第3世代になりました。
今回の大きな特徴は、
  • 本格的なオープンソース化(2箇条BSDライセンス適用)
  • スプライト機能の拡張
  • 波形メモリ音源機能の実装
の3点です。

(オープンソース化)
今までのVGSよりもより自由度が高い形で利用できるようにするため、独自ライセンスからオープンライセンスの1つBSDライセンスを適用しました。BSDの採用理由としては、今までの独自ライセンスと一番似ていたためです。

(スプライト機能の拡張)
正確にはSRではなくGameDaddyが終わる直前に入れた機能なのでGameDaddyの拡張ですが、まぁ、細かいことはどうでも良いでしょう。
回転、拡縮の機能を追加しました。
また、使える色数も増えました。
モノクロ8段調(GameDaddy)+8bitカラー(初代VGS)の両方が使用可能。
αブレンドは未だ実装していませんが、その内追加するかもしれません。

(波形メモリ音源機能の実装)
これが一番大きいと思います。
オープンソース化した上で実装しているので、もちろんオープンソースで。

まだプレリリースということにしています。

何かしらゲームを1本作ってそれをリリースしたら、同時に正式リリースにしたいと考えています。
(もちろん、正式リリース前でもライセンス条項を守って頂ければ第三者での利用も可能です)

2015年2月22日日曜日

Battle Marine (FREE)

本当はBattle Marineは有料版onlyでいきたかったのですが、このままでは完全にフェードアウトしてしまいそうだと思ったので、まずはAndroid限定で無料版を出すことにしました。

無料版を出すにあたり厄介だったのが、広告をどうするかという点。
初代VGSは、VGS mk-IIと違いバナー広告の表示向けのデザインではないので、どうしたものかと考えた結果、AdMobのインタースティシャル広告(全画面広告)を採用してみることにしました。
表示タイミングとしては、戻るボタンを押した時。
これならデザインを崩さずに広告を導入できます。

広告は戻るボタンを押した時(1回だけ表示)
あとは、

  • タイトル画面に有料版へのリンクがある
  • ゲームオーバー後にRETRYボタンを押せないようにしている
といった点が有料版と異なります。
若干緩めの制約にしておきました。
Battle Marineは、繰り返しプレイするスタイルのゲームなので、このRETRYボタンの有無が(ハマれば)じわじわ効いてくる筈。「じわじわ」程度ではマネタイズとしては緩いような気もしますが、その点は深くは気にしない。せめてバナー広告も併用するぐらいのことはした方が良い筈。

インタースティシャル広告の実力がどの程度なのかが気になる。
表示タイミングさえ気を付ければ、eCPMが高くなりそうな気はする。
表示タイミングを気を付けると結果的にインプレッションが減るので、媒体サイドの視点では結果的にはバナーと同程度ではないかと思わなくもないけど、広告主サイドの視点ではバナーよりもプロモーション効果が高いのではないかと思う。
ただ、テストプレイで何度か表示してみた限り、まだ在庫はそんなに多くは無さそうな雰囲気。
出稿額が高めなのか、クリエイティブの準備が面倒臭いのか。(私は今まで何度かテストで広告出稿してますが、その時は後者の理由でバナーonlyにしているので、前者は未確認)
Battle Marine (FREE)を広告出稿する機会があれば、インタースティシャル広告で出稿してみるのも面白いかもしれない。

GooglePlayで Battle Marine (FREE) を入手
Get it on Google Play

2015年2月7日土曜日

禁欲番付

SUZUKI PLAN の久々の新作「禁欲番付」。
今回は、ゲームカテゴリではなく実用カテゴリ(ライフスタイル)のアプリです。
先日、VGSの日本語化対応をしましたが、折角なので、それを活かしたイカした作品を作ろうとした結果がこれです。(イカしてるけどいかないアプリ)

操作は簡単。
一日一回、「勝」か「負」をタップするだけです。

その日の取組結果は、当日中であれば何回でも訂正できます。
タップしなかった日は休場扱いになります。
負けたり休場したりすると階級が落ちるので注意。
※負けるよりも休場した方が階級降格のペナルティが大きいです

日々の記録は画面下の領域をスクロールすれば確認できます。
確認できるのは、最大8192日分(だいたい22年分ぐらい)です。

今のところ、記録は端末内にのみ保持されます。
こんなネタアプリでクラウド連携とかは必要無いだろうと。
もしも必要になったらアップデートして追加するかもしれません。

さて、どうしてこんな(くだらない)アプリを作ってしまったのか・・・

う~ん・・・

私自身よく分かりません。

血迷ったのかな。

今年の始めぐらいに、AppStoreの検索キーワード上位に何故か「オナ禁」があがってきて、調べてみたらモロにその名称のアプリが2本ぐらい登録されていて、あぁ、AppStoreでもソレはセーフなんだな・・・と。AppleでセーフならGoogleでも当然セーフだろうと(本当か!? ^^;)。一応、GooglePlayとAdSenseのコンテンツポリシーを見る限り、ダメでは無さそうな気がします。

念のため、オナ禁という直接的な表記は避けます。
その点は、察してくれるだろうと思うので。
当然、こんなアプリではお金が取れないので、無料で提供。
念のため、広告は付けておきます。
今のところAndroid版のみですが、iPhone版も作るかも。
(作ることそのものは簡単)

GooglePlayで禁欲番付をダウンロード
https://play.google.com/store/apps/details?id=com.suzukiplan.Onakin

2015年1月25日日曜日

VGSHQ検討メモ

VGSの拡張音源(HQ版)みたいなものを考えている。

◆現VGSの音源仕様

  • 周波数 : 22050Hz
  • ビットレート : 16bit
  • チャネル数 : 1(モノラル)
  • 音色数 : 4 (三角波、矩形波、ノコギリ波、ノイズ)
元々、VGSはゲーム用の音源システムとして設計していて、表現性能よりも処理性能を優先しているので、そもそも音質はそんなに良くない。

◆周波数

CD音質44100Hzへ拡張すれば単純に音が綺麗になる。
処理量が×2になるが、多分iPhone 3GSぐらいのスペックで余裕で処理できる。
iPhone 3Gだと少々キツイ。

◆ビットレート

これは変更不要。

◆チャネル数

これも変更不要。
MMLデータには手を入れずに拡張できる感じを目指したいので。
ステレオ化するとパン調整が必要になり若干面倒くさい。

◆音色

音色数も変えない。
ただし、合成波形にしてみると音に厚みが出て良い感じかもしれない。
  • 三角波 : ベロシティー1/3程度の矩形波を合成
  • 矩形波 : ベロシティー1/2程度の三角波を合成
  • ノコギリ波 : ベロシティー1/2程度の三角波を合成
三角波は重ねて鳴らした時の相性が良い。

2015年1月23日金曜日

地味にiOSデベロッパーアカウント維持費の値上げが痛い件

もうすぐでiOS Developer Accountの期限切れの季節になります。
「もうすぐ」といっても、まだだいたい1Qありますが。
どうも、日本のアカウント維持費が8,400円から11,800円に値上げされる模様。
+4,000円というのは地味に痛い...

昨年1年間(2014年1月1日~2014年12月31日)のSUZUKI PLANのiOSアプリの収益(Apple税を控除後の額)は、92ドル94セント。日本円換算でだいたい1万円ぐらいなので、赤字です。

ちなみに、Androidの方の収益(Google税を控除後の額)は、40,372円。
なお、これは有料販売のみの収益額で、これに広告収益(1,000円ぐらい)がプラスされます。
つまり、トータル黒字です。

もっとも、トータル赤字でも今年は継続するつもりです。
私が飽きるまでの間は続けます。
私が飽きても儲かっていたら続きますが。
なので、今年継続することは確定として、来年どうなるかは未知数です。
そう考えると、+4,000円の値上げは地味に痛いかもと思いました。

世間一般では「AndroidよりもiPhoneの方が倍儲かる」と理解されているようですが、これは木を見ずして森を見た場合の話で、事実、SUZUKI PLANではAndroidの方がiPhoneの4倍儲かっている訳で。

SUZUKI PLANの場合、昨年の売上の約80%が海外(主に米国とEU)で、日本で人気があるのは東方VGSぐらい(これは一切マネタイズしていないから収益0)という、日本のアプリ開発者の中ではかなり特殊なタイプだからこういう結果になったんじゃないかと推測(適当)。
SUZUKI PLANが海外の方が伸びてる原因は、チップ文化の有無の違いかな。(根拠は無い)

2014年11月8日土曜日

Goldberg Variations on VGS

唐突かつ当たり前に始めたGoldberg Variations on VGSについて、唐突かつ当たり前に始めすぎた感があるので、説明しておきます。
Android: https://play.google.com/store/apps/details?id=com.suzukiplan.BWV988
iPhone: https://itunes.apple.com/jp/app/goldberg-variations-on-vgs/id936643076?l=en&mt=8

Goldberg Variations (ゴールドベルク変奏曲)は、J.S.Bach作曲(BWV988 ト長調/ト短調)の音楽で、2段式のチェンバロ用の練習曲として書かれたものです。バッハがチェンバロ演奏の手解きをしたヨハン・ゴットリープ・ゴルトベルク少年(当時14歳)が、不眠症に悩むカイザーリンク伯爵のためにこの曲を演奏したという逸話からこのタイトルが付いたようですが、ぶっちゃけかなり弾くのが難しいので、真偽のほどは定かではありません。そもそも、私なら逆にギンギンになって眠れない気がします。

原本の楽譜に記載されている表題は、「Clavier Ubung bestehend in einer ARIA mit verschiedenen Veraenderungen vors Clavicimbal mit 2 Manualen」。2段式のチェンバロ用のアリアとその変奏みたいな感じの意味です。Goldbergとは何だったのか・・・

グレン・グールドの録音が特に有名で、1956年にリリースされたデビュー盤と、晩年(1981年)にリリースされたものの2種類があります。

で、そのゴールドベルク変奏曲をVGSでプレイというのが今回のアプリの趣旨です。

VGSのMMLには、一般的なMMLには無い「%」というオペランドがありますが、これは、音符の長さの何%目でKEY-OFFイベントを投げるかを指示するものです。実はこれはかなり重要な機能です。VGSの音源(エミュレータ)本体の機能ではなく、MMLコンパイラの機能ですが。この機能の重要性を理解するには、チェンバロとピアノの違いを理解する必要があります。

チェンバロとピアノの楽器としての最大の違いは「強弱の表現」の有無です。チェンバロはキーを押すと絃を弾いて音を鳴らすのに対して、ピアノはキーを押すとハンマーが絃を叩いて音を鳴らします。チェンバロは機械的な仕組み上、ギターのような強弱表現ができませんが、ピアノはキーを押した時の運動がそのままハンマーに伝わるため繊細かつダイナミックな強弱表現が容易に可能です。

ピアノの音の強弱による表現の幅は絶大なものです。それ故に、そこに頼り切ってしまうことでモチーフの本来あるべき姿が濁ってしまうデメリットがあると私は考えています。これをデメリットと捉えるか否かは、演奏者の性質(何処に重点を置いているか)によりけりですが。私の場合、強弱表現が無いことによりモチーフの本来あるべき姿が露わになることに異常な性的興奮のようなものを覚える性癖があります。グールドの演奏のスゴイところは、モチーフを明確に示すチェンバロ的な演奏をしつつ、ピアノ的な要素も利用して表現しているところではないかと思います。これだけでご飯3杯はイケる感じです。

VGSのMMLは%オペランドにより、チェンバロ的な演奏をすることも「比較的容易に」可能です。MIDIでもイベント処理機構としては同じ仕組みだから出来なくはないですが、GUIのシーケンサ(※)だと入力がかなり面倒だからMMLの(というよりMMLしかない)VGSは、チェンバロ的な演奏をする為に生まれた楽器だといっても過言ではありません。そんなことをいうとチェンバロ厨に怒られてしまうかもしれませんが。一応強弱表現もできるのでグールド的な演奏もできます(が、今回は強弱表現は一切入れません)。

※MIDIは汎用性が高すぎるのでイベント数が多すぎて、MMLで制御するのに向かないからMIDIシーケンサはだいたいGUIです。私が知る限り唯一の例外はPC-98版のレコンポーザぐらい。Windows(95)版レコポは、そのレコポの最大の強みがキレイサッパリ失われていましたが…そして、レコポ開発元のカモンミュージックももう潰れてしまいましたが…(Singer SongwriterのPro版とかにはそれっぽい機能があるらしいけど、ノータッチです)

注意深く聴いてみると、同じ8分音符でもモチーフの切れ目(やスタッカート表現)で細かく%が変わっていることに気付くかもしれません。実際、かなり細かい音符区切りで%の値を変化させることで、モチーフの本来の姿を表現しています。

実際のMMLは下記のような感じです。(下記はVariation 4です)
$Init r1024 l16 \s220 \e4420 @2 %75 v14

#-----------------------------------------------------------------------------
Ch0 t95 m8 (Init)
Ch1        (Init)
Ch2        (Init)
Ch3        (Init)
Ch4        (Init)
Ch5        (Init)

#-----------------------------------------------------------------------------
Ch0 o4
Ch0 r8%30b8%50g8 %30>d8<%40a8>%50d8 %80g2f+8^8
Ch0 r2.r8<%30a8>%60c8.%30e8%60g8%30c+8 %70a4%30d8%80g4.%40f+8%60e4
Ch0 %30d8%60c4%50d8%60c+4%80d8^8<

Ch0 r8%30b8%50g8 %30>d8<%40a8>%50d8 %80g2f+8^8
Ch0 r2.r8<%30a8>%60c8.%30e8%60g8%30c+8 %70a4%30d8%80g4.%40f+8%60e4
Ch0 %30d8%60c4%50d8%60c+4%80d8^8

Ch0 r8%30f+8d8%50g8 %80b4.%40agf+ed+e%80f+4.
Ch0 %30e8%50g8%30c+8%40d+8%80e4 %60d+c+r8c8%40e8<%50a8 %30b8>%40d8<%50g8>%70c4.%30d8c8
Ch0 %40c%80d4^16%40c dcd8<%40g8%60f+4%90g8r8

#-----------------------------------------------------------------------------
Ch1 o4
Ch1 r2%30d8%40f+8<%30b8>%40g8%60>c8<%40bg%80a8^8
Ch1 r2%30c8%40e8<%50a8>%80d4.g8^8
Ch1 r2.r8>%30c+8%40e8%60%40g8%60>c8<%40bg%80a8^8
Ch1 r2%30c8%40e8<%50a8>%80d4.g8^8
Ch1 r2.r8>%30c+8%40e8%60%30d8%50c8%70c8d8%80c8.%80d4r8
~ 中略 ~

Ch2 r8%80d8%30f+8%80e8 r4c+8%30e8
Ch2 %80%80d4r8
Ch2 r8%80d8%30f+8%80e8 r4c+8%30e8
Ch2 %80d8%30g8e8%80c4.%40c+8<%80b4.g8%30b8
Ch2 e8%40agf+g>%80d4.c8%30c8<%80f+8%30g8a8%80g4r8

#-----------------------------------------------------------------------------
Ch3 o3
Ch3 %80g4.f+4.e4.r8%30d8f+8
Ch3 <%80b4.>c4.d4.r8%30d8
Ch3 g4.f+4.e8%30g8c+8 %80a8>%30c+8
Ch3 <%80f+4.%30g8<%80g4.%30f+8a8%80d8.%40>def+

Ch3 %80g4.f+4.e4.r8%30d8f+8
Ch3 <%80b4.>c4.d4.r8%30d8
Ch3 g4.f+4.e8%30g8c+8 %80a8>%30c+8
Ch3 <%80f+4.%30g8<%80g4.%30f+8a8%80d8.%40>ab>c+

Ch3 %80d4%30c8<%80b4%30g8>c8<%80f+8 %30a8b8%80d+8%30e8%80g8 %30e8a8%80f+8 %30e8a8r8e4%30d8
Ch3 %80c2c8<%80f+8 %30d8f+8
Ch3 %80g8%30b8g8>%80c2%30d8<%80g4r8

ゴールドベルク変奏曲のモチーフをアナリーゼした結果を実際に示しつつ表現してみようというのが、今回のアプリの目的です。そういう趣旨なので、敢えてループは演奏していません。一部例外はありますが。なお、カノンだけはループするのが通例(グールドもカノンの前半はループしている※)ですが、通例を守る必要はないと思うので無視しています。

※追記:そういえば、グールドがカノン(前半)をループしているのは1981年盤で、1956年盤では無視していましたね。今回のSUZUKI PLAN盤はその中間かな。(ループしたいバリエーションではループ)

まぁ、このアプリは東方VGSの時のようにヒットすることは無いと思います。

ヒットすることは無いと思うから、マネタイズについても色々やる予定です。
ちなみに、iOS版もリリースします。(現在、審査待ち)
iOS版もリリースされました。

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

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