2016年2月14日日曜日

vgs-spuで始めるサウンドプログラミング

サウンドプログラミングは割と敷居が高いと思われがちですが、その原因は音を鳴らすまでがやたらと難しいためだと思います。これは今も昔も変わらないことです。昔はパソコンに搭載されている石の仕様を理解する必要があったので、実際かなり大変でした。

しかし、今のパソコンやスマートフォンであれば、少なくとも石(H/W)の違いを意識する必要はありません。Windows、Mac OS X、Linux、UNIX、Android、iOSなどで、音を鳴らす基本的な仕組みは全部同じですが、それぞれのOSが提供する「音を鳴らす方法」が以下のように多様にあります。
  • Windows: WaveMapper や DirectSound
  • Mac OS X, iOS: AudioUnit や OpenAL
  • Linux: ALSA; Advanced Linux Sound Architecture
  • Android: OpenSL/ES (他)
  • UNIX: OSS; Open Sound System
全部覚えるのは面倒臭いです。全部どころか、一つマスターするのも結構大変かもしれません。(やれる事はだいたい全部同じなので、一つマスターするだけで全部マスターするのは容易いですが)

VGSではこの辺りの実装を Sound Abstraction Layer (SAL) という形で抽象化しましたが、今回、その SAL を更に汎用的な形で独立させてみました。

VGS - Sound Processing Unit (SPU)
https://github.com/suzukiplan/vgs-spu

まだこの記事を書いている段階では WIP にしていますが、とりあえず Windows と Mac OS X では動きました。VGS-SPUは、全OS共通の「音を鳴らす方法」を提供します。これを使えば、敷居が高いと思われがちな サウンドプログラミング の敷居が幾分か低くなります。

どの程度低いかは、VGS-SPUの example を見ていただければ分かると思います。

この example では、buffering というコールバック関数で波形(440Hz = ラ の矩形波)を書き、main関数で VGS-SPU を起動、スリープ、停止という手続きを実行しています。

「音を鳴らす」というのは要するに波形データの変化(PCM)を書くことです。その辺のことは情報処理の教科書的なもので見たことがあると思いますが、「そのデータを何処に書くの?」ということは恐らく情報処理の教科書的なものには書いてないと思います。「何処に書くのか」は、前述の各OSが提供しているサウンドAPI毎に異なるし、また、あまり纏まった資料も無い(個々のAPI毎にかなり無駄に分厚い専門書とかなら少ないがある)ので、実際に音(PCM)を書くところまで辿り着くのが結構大変です。

しかし、VGS-SPUなら「vgsspu_startを呼ぶ」「コールバックで音を書く」「vgsspu_endで終わる」という極めてシンプルな3ステップだけでサウンドプログラミングの入り口に辿り着くことができます。

そして、VGS-SPUを通して音の鳴らし方のイメージが掴めてきたら、VGS BGM Decoderを見てみると良いです。

VGS BGM Decoder
https://github.com/suzukiplan/vgs-bgm-decoder

VGS-SPUは音を書くための方法で、VGS BGM Decoderは書く音を生成するコーデックと呼ばれるものです。コーデックという言葉はマルチメディア系に詳しい方なら聞いたことがあるかもしれませんが、サウンドの世界では符号化されたデータ(VGSなら .BGM形式)をリニアPCMへ変換するもの(デコーダ)や、何がしかのデータを符号化するもの(エンコーダ)があります。

VGS BGM Decoderにとってのエンコーダは MML(テキスト)を .BGM形式に変換するMMLコンパイラのことですね。VGSのMMLコンパイラについても独立したリポジトリに切り出してみました。

VGS MML Compiler (encoder)
https://github.com/suzukiplan/vgs-mml-compiler

2016年2月12日金曜日

VGSの分割

1週間ほど前、突如として海外(中国)のエンジニアさんから、

「VGSのオーディオプラグインを作りたいんだけど、ソースが汚くてツライ」(意訳)

というメールが飛んできて、まぁ普段なら英語メールはスルーすることが多いのですが、割と丁寧に書いてあったので読んでみました。日本を含めて私にこういう技術ネタ的なメールを送ってくる人というのは稀な存在ですし。(ちなみにGitHubのプロフィールによると、日本でいうところのNTT的な感じの会社のエンジニアさんらしい。あぁ、なるほど)

あくまでもVGSは趣味で作っているものですが、オープンソースで公開している以上、あまり恥ずかしい状態で晒しておくのもアレだろうと思い、「よっしゃリファクタしたろか」というノリでVGSのソースコードからBGMデコーダ部分の実装を切り離す作業をやっていたりしました。

それがこのリポジトリ
https://github.com/suzukiplan/vgs-bgm-decoder

ちゃんと綺麗に書いています。
テストも書いています。
本業でプログラムを作る時とだいたい同じノリで構成管理もしています。

ついでに、VGSのMMLもダイレクトに再生したいとのことなので、インメモリでMMLをコンパイルできるモノも作ってみました。
https://github.com/suzukiplan/vgs-mml-compiler

コレを使えば、VGSの .MMLファイル、.BGMファイル、vgsファイル を読み込んで波形データ(PCM)を生成することができます。vgs-bgm-decoderのexampleとして、.BGMファイル や .vgsファイル をwaveファイル形式に変換するCLIなんかを作っておきました。

そして、そのエンジニアさんが作ったオーディオプラグインというのがコチラ
https://github.com/AmamiyaRinyuki/vgs-bgm-plugins
※今の所、AudaciousというLinux用のオーディオプレイヤ用のプラグインがあるようです。

今回作った vgs-bgm-decoder を使えば、こういうプラグインの開発は割と簡単にできると思います。iTunes(QuickTime?)のプラグインとか作れれば胸が熱くなるなと思ったのですが作り方がよく分からなかった。

これぐらいの規模感でVGSの部品をどんどん分割していこうと考えています。(分割したものはVGS mk-II SRに統合するつもりですが、もっと柔軟に使える新しいVGSを作ってみようかみたいなことを思ったりもしています)

2016年1月11日月曜日

VGS BGM Player収支報告

VGS BGM Playerではマネタイズをしていますが、その目的はランニングコストの回収です。
という訳で、だいたい運用1か月ぐらいでの収支報告でもしておきます。

【収入の部】

①広告収入
84円

インプレッション(表示回数)は1641回なので、リクエストRPMは54円ですね。デバッグ時のインプレッションを含んでいる(w)ので、だいたいこんなもんでしょうか。ちなみに、SUZUKI PLANの広告アプリ全体平均のリクエストRPMはだいたい140円でう。

②アプリ内課金収入
2本(だいたい1ドル40セント)

売れた・・・だと・・・
これは売れない(売れても年間1〜2本)という想定でした。
早くも年間目標可達!
本当にありがとうございます。

【支出の部】

③サーバー費用
250円

④ドメイン費用は含めない
(これはSUZUKI PLAN全体のアプリIDと共用なのでVGS BGM Player専用ではない)

⑤Appleアカウント
(これもSUZUKI PLANのiOSアプリ全体と共用なので単体決算はしない)

⑥プロモ費用
プライスレス
(というより何もやっていない)

1ドルは今だいたい120円ぐらいだろうか?
1.40ドルなら168円ぐらいですかね?
という訳で今月の収支は 2円の黒字 です。

ナイスです。
まぁ、サーバー費用はVGS BGM Player(というよりsuzukiplan.com)を作ろうと思い立ってから半年以上の不稼働期間があったので、厳密には思いっきり赤なのですが、その辺は娯楽ということで問題ありません。可処分所得(お小遣い)の範囲でクリアです。

suzukiplan.comで東方VGSの曲を配っていて、それ自体はタダだけど、二次創作ガイドライン的にそれがOKなのかよく分からないので、あまり大きな黒字を出すのは良くないと思っています。

理想的には±0円のライン。
見事に狙い通りです。
ハンター冥利に尽きます。

黒字になりそうだったらサーバーを増強するなり、広告出稿して調整するなど、手は幾らでもあります(広告出稿は数万程度の小額ならほぼ効果が出ないことは過去数回のテスト出稿で検証済み)。

アプリ内課金は1人当たりどんなにぶっ込んでも1300円ぐらいにしか行かないようにしてあるので青天井対策もバッチリです。

理想的には元気に働ける内は収支0で、エンジン切れになったらギリギリ食べていける程度の収入が入る感じ。私は若干生き急いでいる感があるので、ゴールは割と近いかもしれない。自愛しようと心がけているつもりだが、根っからのマゾヒスト性格が裏目に出ている感が否めない。

私が選ぶ最も面白いスマホゲーム2013〜2015

私はかれこれ2012年ぐらいからスマホゲームを開発していますが、そんな私視点で2013〜2015年それぞれの年で最も面白かったスマホゲームを選んでみようと思います。なお、自作ゲームも含めることにします。

2013年

パズドラがリリースされたのが2012年でしたっけ?
最初期の頃(まだ100万DLに届いてなかったぐらいの頃)に少しだけやりました。
2日ぐらいで飽きてすぐに止めてしまいましたが。
2013年はずっとパズドラが売り上げ一位でしたね。
そんなに面白かったん?
単純作業を繰り返すことそのものは面白いと思うけど。

そんな2013年、(私が)最も面白かったゲームは...

Odesys FreeCell です。
https://itunes.apple.com/us/app/odesys-freecell/id302744068?mt=8
https://play.google.com/store/apps/details?id=com.odesys.freecell
(上記リンクは有料版ですが、無料版もあります)

フリーセルというのはソリティアの一種ですね。ソリティアというと一般的にはクロンダイクをイメージされる方が多いかもしれませんが、一人遊びのゲーム全般という意味らしいです(wikipedia参照)。

クロンダイクやスパイダーと違い、フリーセルは最初っからカードが全部見えています。
ルールは、右上の「A」となっている場所に♠︎♣︎♥♦︎を1から順番にK(13)まで置けばクリア。
驚くほど簡単ですね。

場には、
・赤いカード(♥♦︎)の上に数字が1若い黒いカード(♠︎♣︎)または
・黒いカード(♠︎♣︎)の上に数字が1若い赤いカード(♥♦︎
を重ねることができます。
上図の状態であれば、例えば以下のような移動ができます。
・左から2列目の♠︎9を、左から3列目の♥10の上に重ねる
・右から2列目の♦︎Qを、一番左の列の♣︎Kの上に重ねる
・一番右の♥8を、左から2番目の♠︎9の上に重ねる

左上の4つの領域には、任意のカードを1枚(計4枚)置くことができます。
これはどんな数字でも置けます。
ただし、重ねて置くことはできません。

あと、空いた列には好きなカードを置けます。

ルールとしてはこんな感じ。

いかに短い時間&少ない移動回数でクリアできるかを競う感じはありません(その辺は運要素が強い)。いかにギブアップせずにクリアを目指すかを楽しめば良いのではないでしょうか。(理論上クリア不可能なパターンはある筈ですが、今の所1000回以上プレイしていて一度も遭遇していないので、クリア不可能パターンは排除されている感じだろうか?)

2014年

ほとんどスマホでゲームやってないです^^;
そんな中、最も遊んだのは...

Odesys FreeCell です。
https://itunes.apple.com/us/app/odesys-freecell/id302744068?mt=8
https://play.google.com/store/apps/details?id=com.odesys.freecell
(上記リンクは有料版ですが、無料版もあります)

この年は不作の年だった...訳ではないと思います。

コレ以外にもソシャゲ(ウチ姫とかみんゴルみたいなやつ)やKero Blasterとか遊びました。
転職活動をしたりしていた関係で特別忙しかったからかなー。

ソシャゲって時間つぶしには良いのですが、時限イベント(ウチ姫ならハニハニ)で時間指定で拘束されるのが少々キツイ。あと、プレイを途中で区切るとサーバ接続エラーとかになってしまったりとか。

あと、飛行機の中ではプレイ不可能ですね(ソシャゲ)。飛行機が飛んでいる時は、機内モードにすることが法律で義務付けられているので、ネットワークを使うゲームは遊ぶことができません。

かといって、ネットワークを使わないゲーム(Kero Blasterとかドラクエとか)は、1回クリアすると飽きてしまうので、ゲームそのものは面白いですが暇つぶし用途というよりはゲームをガッツリ遊びたい用途向けなので、わざわざスマホの小さい画面では遊びたくないかなと。

その点、Odesys FreeCellならガッツリ中断しても全く問題なく再開できるし、ネットワークも一切使わないので機内モードでプレイできます。そして、繰り返しプレイしても飽きない。あと、東方VGSもネットワークを一切使わないので、東方VGSを聴きながらOdesys FreeCellというタッグが最強。

2015年

新しいスマホゲームは全くやりませんでした。
という訳で2015年チャンプは当然ながら...

Odesys FreeCell です。
https://itunes.apple.com/us/app/odesys-freecell/id302744068?mt=8
https://play.google.com/store/apps/details?id=com.odesys.freecell
(上記リンクは有料版ですが、無料版もあります)

要するにコレが、パズドラとかモンスト(海外ならキャンクラとか)などのシンプルなゲームが延々売り上げトップに居座る感じになる原理かなと思います。要するに、スマホで遊べるゲームって振り幅が狭くならざるを得ないと。ワンチャン次の芽があるとすれば、敢えてそこを突く感じの何かですかねー。

2016年1月10日日曜日

布団++

年明けにちょっとした思いつきで布団をフルリニューアルすることにした。

私の部屋は狭いワンルームだが、家具付きの物件なので机、椅子、ベット、洗濯機などの生活に必要な家具は全て揃っている。しかし、どういう訳か(狭いワンルームなのに)備え付きのベットはセミダブルという謎仕様。とりあえず1年ちょっとの間は、前のアパートで利用していたシングル布団をセミダブルのベットに乗せて使っていた。

ちなみに、そのシングル布団は敷布団のみで、掛け布団の代わりに冬場は毛布を使っている。寝心地はお世辞にも良いとは言えないが、とりあえず寝ることはできる。しかし、折角のセミダブルなのに勿体ないなということで、正月休暇中にニトリでセミダブル用の布団一式を購入することにした。

最初はフルセットのものを購入しようとしたが、個別に揃えた方が良いとのことで、とりあえずモノが良さそうなものを個別に揃えることにした。

◆敷布団
https://www.nitori-net.jp/store/ja/ec/7542412

カバーが洗える体圧分散 敷布団 セミダブル(タイアツブンサン3 SD)

商品コード: 7542412
11,019円(税別)11,900円(税込)

◆掛け布団
https://www.nitori-net.jp/store/ja/ec/7571137

2枚合わせ羽毛掛ふとん セミダブル(NT-152 SD)

商品コード: 7571137
16,574円(税別)17,899円(税込)

◆枕
https://www.nitori-net.jp/store/ja/ec/7550194


ホテルスタイルまくら(Nホテル)

商品コード: 7550194
2,769円(税別)2,990円(税込)

上記に加えて、部屋の色合いに合わせて適当に敷布団カバー掛け布団カバー枕カバーをチョイス。

(同じやつを探すのが面倒だったので商品リンク省略)

ついでに、今までジャージを寝巻きにしていたが、どうやらそれ は健康上あまり良くないということで、下記の囚人服みたいな感じの寝間着用スウェットも購入。

◆寝間着
https://www.nitori-net.jp/store/ja/ec/7588572


スウェット メンズ L(ボーダー15 NV L)

商品コード: 7588572
1,843円(税別)1,990円(税込)

そして昨日、藤枝(静岡)のニトリから発送した上記一式が届き、セッティング完了後に軽く布団に入ってみたところ、このまま永眠してしまうのではないか?と思うほど寝心地が良くて焦る。そして、実際に昨夜寝てみたところ、普段はどんなに遅く寝ても8時前には起きる私が、12時過ぎまで惰眠を貪る異常事態が発生した。

これはヤバイ。

禁断の果実的を初めて食した時のあの感覚を思い出した。

2016年1月3日日曜日

COLECO Chameleonに期待していること


約20年ぶりに COLECO Vision の新型機(COLECO Chameleon)が出るようです。

記事によると、2016年2月13日~16日にNYで開催されるイベント(Toy Fair New York 2016)でデモンストレーションされ、その後なる早で販売されるようです。過去のゲームをプレイできる(※詳細不明。エミュでの乗っかっているのかな?)ことに加えて、8bit, 16bit, 32bitスタイルの新しいゲームもラインナップされるとか。

過去のゲームだけならよくある互換機止まりですが、「新しいゲームもラインナップ」という点が気になる。

インディー勢でも取り込むのだろうか?

正直、インディーのみであれば期待ハズレだと思っていて(StreamやAppStoreで十分だと思っている)、現代のゲーム制作会社が本気で作った16bit, 8bit スタイルのゲームが出るなら見てみたい。


あと、Retro VGS, Inc という会社のネーミングセンスが良いですね。

2016年1月1日金曜日

ウケるサービスの作り方

何かしらのサービスを作って、一発当ててガッポリ儲けたいという夢は、程度の大小はあるかもしれませんが、かなり大多数の人が一度は思い描いたことがあるかもしれません。しかし、それを実現させるのは中々困難なことです。何が困難なのか?主に、「作る事」と「ウケる事」の2点が困難です。「作る事」は大変かもしれませんが、努力次第で何とでもなります。問題は「ウケる事」です。どうすればウケるサービスが作れるか?という点について色々と考察してみました。

(1)多くの人が望むものは既にある

まず、大前提として考えなければならない事は、パッと思いつくような「売れそうなサービス」というのは既に誰かしらがやっているということです。凡人の我々がパッと思いつくようなものであれば、99%既に誰かしらが形にしている筈です。先駆者を叩き潰して市場を奪う方向性であれば、そのまま突き進むのもアリですが、ガッポリ儲かるようなものであれば既に大きな資本力を持っている敵が居る筈で、そこを切り崩そうと思えば消耗戦か勝ち分の少ないニッチ領域を攻めるしかありません。個人事業やベンチャー企業のレベルであれば、完全に負け戦さになります。

(2)ウケ(他人のニーズ)を狙ってはならない

パッと思いつくような「売れそうなサービス」というのは、「多くのニーズは何処にあるのか」をベースに考えれば割とポンポンと思いつきます。だから私は、そういう類のモノは、少なくとも個人事業やベンチャーのレベルでは作るべきではないと考えています。やっても無駄死にするだけなので。だから、「ウケる事」を達成するためには、ウケ(他人のニーズ)を狙ってはならないと思っています。

例えば、「軍手の匂いを嗅ぐサービス」とか。ユーザーから受け取った軍手の匂いを嗅いで、その軍手の匂いを評価するサービス(利用料金1回1,000円)とかどうでしょうか。これなら絶対にウケないですよね。方向性としてはそんな感じです。

(3)自分の好きな事をやる

ウケを狙わないでウケるサービスを作るとは言っても、先述の「軍手の匂いを嗅ぐサービス」などのような誰にもウケないサービスなんか作っても誰も使わないでしょう。ウケを狙わずにウケるサービスを作る最大の骨は、世界中の誰からも求められていなくても自分だけはユーザーとして確実に使い続けたいものを作るということです。

要するに「自分が使いたいものを作れ」と。

自分が使いたいものであれば、「作る事」の障壁も割と高いモチベーションで乗り越えられます。もしも、モチベーションが湧かないのであれば、それは本当に自分が欲しいものか考え直した方が良いです。また、もしも一般ウケしなくても、自分が使い続けるので無駄になりません。

(4)運営視点とユーザー視点

ただし、運営(作り手)視点とユーザー(使い手)視点は分けて考えた方が良いという側面も無きにしも非ずです。しかし、この点が重要になってくるのは、ウケた後の話です。なので、その点はウケる前から考えるべきことではありません。まずは自分(ヘビーユーザー)の欲求を確実に満たすことだけに集中すべきです。(今回の記事での言及は避けますが、運営視点とユーザー視点の切り離しが必要になる具体的な契機は、一般層へ浸透した後というのが私見)

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

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