2017年5月6日土曜日

Android 7.0の音ズレ問題

スクフェス、デレステ、ガルパなどの音ゲー関連がAndroid7.0で軒並み音ズレが酷いという情報をチラホラ聞きます(参照)。

どの程度酷いのかは未確認。
というより、Androidで音ゲーやるのがそもそも間違っている気がします。
後述しますが、Androidの場合OSの仕様レベルでそもそも音ゲーに耐えられないシロモノなので。(私も音楽系のアプリをAndroidで出していてそこそこ高評価を頂いてますが、低評価が付く原因の9割以上はOS仕様上どうにもできない部分の話しだったりします)

とりあえず、対策方法としては(root化が必要ですが)BuildPropのaudio_hal.period_sizeを調整すると治る場合があるとか(参照)言われています。この値は何ぞや?と思ってAndroidのソースコードを見てみたところ、恐らくこの辺ですね。要するにストリームアウトするバッファサイズに関係するパラメタらしい。

つまり、どういうことか。

例えば、ストリームアウトするバッファ・サイズが100msだった場合、オーディオ出力をする指令を出してから実際に音声が鳴る = HALから低レベルオーディオAPI(最近のAndroidなら多分ALSA)に波形データが渡るまでの間に平均50ms(0〜100ms)のラグが発生するという具合です。

そして、恐らくAndroid 7.0でこのデフォルト値が大きくなったため、遅延が酷くなって音ゲーが全滅してしまった感じでしょう。(それ以外にも色々と複合的な要因がありそうな気がしていますが)
何故、大きくしたのかですが、これは多分何らかのトレードオフかと思います。バッファ・サイズを大きくすると、遅延が大きくなるというデメリットがある反面、CPUの専有期間を短くできることで、例えば「音がプツプツする」といった事象発生を緩和することができます。(つまり、Android 7.0で別のところで処理能力を回したいから、音のリアルタイム性を犠牲にしてCPUリソースを確保したものと推測しています)

Androidのオーディオシステムの仕組みを解説した分かり易い図があったので貼っておきます。
Android 5.0 Lollipop Audio Path Latency
Learn more about Android's 10 Millisecond Problem

ALSA(一部のAndroidはALSAじゃないけど)は、Advanced Linux Sound ArchitectureというLinuxのオーディオHALです。
以前はOSS(Open Sound System)が主流でしたが、割と最近ALSAに変わりました。

ALSAは従来(OSS)と比べて高機能になりましたが、その分、遅延もそこそこあります(上図だと5.3msだとか)。Androidのオーディオ関係がクソな原因のひとつが、ALSAという割と高機能なHALの上に更にAudioFlingerというAndroid独自のHALを載っけていることです。

カツラの上にカツラを被る大御所俳優みたいな感じですね。
この設計は流石に拙すぎるので、Googleほどの技術力があればここら辺は将来的にしっかり治してくるだろう・・・と思っていた時期もありました。

以前のLinuxで主流だったOSSの場合だとそれなりに(AudioFlingerの)存在意義はありました。OSSというのはかなりシンプルなオーディオHALで、特定のスペシャルデバイスファイルに対してパルス符号を入出力するとD/A,A/D変換するというものです。シンプル故にその上に別途HALを作ってオーディオパスを多重化するような実装が必要だから、AudioFlignerにはそれなりに存在意義があったと理解できるかと思います。

しかし、ALSAは高度化されておりそれを直に使っても問題無いので、現在のAudioFlingerは無駄に遅延時間を長くするだけの邪魔な存在でしかなくて、しかし、その上位層がAudioFlingerベッタリになっているから直せない(正確には直せないこともないが直すのが大変=コストが掛かるが、Googleの人は恐らくそれほどオーディオ関係のことを重要視していないから予算が取れない)という感じだろうと推測しています。

ちなみに、ココら辺の設計がダメダメになったのがAndroid 4.xあたりで、3メジャーバージョンも上がった7.xでもそのダメダメなクソ仕様を引きずり続けている感じです。たぶん、もう治らないんじゃないかと思います。私は5.0の時に抜本的な対策がされなかったことから、「もうAndroidは(少なくともオーディオ系統は)ダメだ」と確信しました(だからプライベートのスマホはiPhoneに乗り換えた)が、今回のAndroid7.0で音ゲーが全滅したケースで、やはり私の確信は正しかったんだなと確認できました。このままだと、将来的にはもっと酷くなるんだろうけど、流石にその前には何とかしてくるかもしれません。(何ともならないかもしれません)

View.OnTouchListenerでのマルチタッチ処理

やりたいことはシンプルなのに実装が色々と面倒臭かったので、備忘録を兼ねてメモ。

(やりたいこと)
・1つのViewでマルチタッチを処理したい
・タッチされている座標だけ把握できればおk

(やりかた)

(解説)
・Android SDK単品では無理そうなので、SparseArrayのテーブル(touching)を準備
・touchingテーブルは、タッチIDを主キーにタッチされている座標を記憶する
(主キーがint型なのでHashMapではなくSparseArrayを使った方が処理効率が良い)
・タッチ開始(ACTION_DOWNなど)を検出した時にテーブルにPointをadd
・移動(ACTION_MOVE)を検出した時にPointを更新
・タッチ終了(ACTION_UPなど)を検出した時にテーブルからPointをdelete

(若干疑問点)
タッチ開始(DOWN)とタッチ終了(UP)は1タッチID毎にイベント(※ここで言うイベントとはonTouchのコールバックのこと)が発生するが移動(MOVE)は2本指同時に動かした時、両方同時にイベントが発生した。
これが恒常的なもの(保証されているもの)なのかが若干疑問。
一瞬、「DOWNとUPの場合、非MASKのactionIdの9〜16bitにタッチIDが付加され、1回のイベントで取得できるactionIdは1つだから保証されているのでは?」と思ったけど、それならMOVEが1回のイベントで複数処理されるのがおかしい。
MotionEventのactionIdなんですが、明らかに設計ミスっぽい気がする(ただし、当然ですがここはプリミティブ過ぎて今更直せないという感じだろうか)。

(追記)
CANCELの場合もMOVEと同様、複数指分が纏めて走るらしいので、CANCELの時はtouchingをclearするように修正。

2017年5月1日月曜日

お金の掛からない宝くじでも買っておく的な

グリマスの音ゲーの事前登録が始まってました。
https://millionlive.idolmaster.jp/theaterdays/

ただ、動画で流れているゲーム画面を見て若干食傷感が...ゲームが音ゲーとして面白ければやりますが、デレステ or バンドリの焼き増しレベルだったらスルーする予定です。
でも、もしも面白かった場合、事前登録するだけでSSRが貰えるかもしれないという乞食根性で事前登録しておきました。
100万も集まるかは微妙な気がしないでもないですが。
ちなみにバンドリの事前登録はだいたい50万前後。知名度が低くて50万も集まったのなら、アイマスの看板があれば100万なんて余裕なのかな?
ペース的にはつい先程(この記事を投稿する小一時間前)丸1日で10万突破したとのこと。

以下、PVを見た感想を書いておきます。

①モーションが独立している

コレ要るんですかね?
デレステの場合は初発だったからウケましたが、後発で独立モーションを取り入れたところで、そこまでウケるものではないでしょう。なので、単純に開発コストだけがハネ上がっているように見えてしまう。
それでARPPUが上がる(=お金を落とす層がそれを有難がって落とすお金の量を増やしてくれる)のであれば、それなりにやる意味はあるかと思いますが、ドレスショップが閑古鳥状態のところを見ると、恐らくそれも無いでしょう。
なので、メリットがあるとすれば、「デレステを陳腐化させてパイを奪えるかもしれない」ってところですかね。なので、事実上ソレの一点狙いだろうと理解しました。
つまり、運営がCA系列以外ということであれば、それなりに意味がありそうです。(また運営がCA系列ということであれば、正直コレは意味不明です)

②協力ライブ

なるものがあるらしいことを仄めかすセリフがあった。
...けど、3度目となるともう新鮮さは無いですね。
ただ、仮に運営がCA系列以外だとすると、流石に何かしらの知財ガードがされているはず(知財権をバンナムが握っていた場合、バンドリの協力ライブ導入を排除できる筈なので、それがされていないということは少なくともバンナムではなくCA側が権利を握っている筈・・・気になって少し調べてみましたが、例えばデレステやバンドリのスタンプとかは多分コレで、やはりCA側が特許を出願しているらしい)。
なので、私の予測通り運営がCA系列以外だとすると、デレステやバンドリの協力ライブとは(少なくとも権利化されている範囲は)別物にせざるを得ないから、もしもそうだとすると面白いものになる可能性があるかも。
というのも、デレステもバンドリも協力ライブはまだまだ面白くする余地がかなりありそうというか、不満みたいなものが結構あるシロモノなので。

③ソロプレイ(片手でもプレイできる)

これは...要らないかな。
私は基本iPad Proでプレイするから縦持ちするのは、端末の大きさの関係で面倒なので。
ただし、デレステ同様iPhoneとアカウント共有できれば、iPhoneではコチラを中心にプレイとかはあるかもしれない。
しかし、画面をポチポチするだけなら難易度的に楽すぎてツマラナイものになるかなと。
加速度センサーとか使った何かとかなら新鮮味があって良いかもしれませんが。ただ、それで快適にプレイできるように作るのは恐ろしく難しい筈だし、現状の画面を見る限り単なるヌルいポチポチゲーっぽい。

このゲームの現時点の期待値としては「正直よく分からない」という感じです。
面白く出来そうな余地は結構ありそうですが、既にやり尽くされたジャンルだからそれを今更進化させるのは多分相当難しくて、「単純にシンデレラじゃない方のアイマスを音ゲー化しました」みたいな方向のものに落ち着く(=私がスルーするタイプになる)可能性が今のところ高そうかなと。まぁ、モノが出てみないと分からないので、とりあえず期待せずに事前登録だけしておく分には良いのではないでしょうか。事前登録するだけならお金も掛からないから、お金の掛からない宝くじでも買っておく的な感じで。

2017年4月9日日曜日

クズ運なのですが、

昨夜、ガルパの単発ガチャ(250)でピックアップを引き当てる。
ピックアップを引ける確率は0.5%。
デレステのピックアップとだいたい同じ確率ですが、デレステでも結構たくさん単発ガチャ回したけど、単発でSSR引けたのは1回こっきり(フェス時のみ)で、フェス以外でピックアップを引けた回数はゼロ。
そんなクズ運の私が単発で引くことが出来たというこは、バンドリのガチャは今緩い感じなのかな。(私が突如豪運を覚醒した可能性もゼロではないけど)
IPが弱いから、まずは緩めにして当てさせることでファンを増やし、2周目以降で課金兵を育てる作戦なのかなと勘ぐってしまった。
アニメの方はネット上の批判を見る限り、ズッコケたんですかね?
私は見ていないから何とも言えません。
実のところ全く見ていない訳ではなく、AbemaTVで11話の一部だけチラッと見てみたのですが、恐らくトータルで(ネット上で言われているほど)悪くないコンテンツだったのではないかと推測しています。
大ヒットするか?と言われると無理だと思いましたが。(※ただし、私はけもフレの1話で大ヒットすることを予想できず一度切ってしまったので、当たるコンテンツを見分ける能力は皆無ですが)
AbemaTVだとタイムシフトが(無料会員だと)出来ないので、決まった時間に見ないといけない=時間の都合が合わないと見れないという点が私には少々厳しい。AbemaTVは、スキマ時間に見る用途では良い感じだと思っていて、CA=広告会社だからビジネスモデル的に狙い通りだと思うのですが、その半面、そのスタイルは目的意識を持った視聴には向かないので、例えば、ドラえもんやフルハウスなど(1話完結もの)や懐かしのアニメ(既にストーリーを把握しているもの)といったコンテンツとは相性が良いけど、ストーリーモノには向かないと思っています。(だから、何故ドラマチャンネルなんかがあるのか割と謎)
あとは、時期が悪かったのかも(前期はけものフレンズがあまりにも強すぎて、他に何やっていたかすら思い出せないレベル)。

2017年4月8日土曜日

iOSアプリの提供中断について

SUZUKI PLAN製のiOSアプリですが、しばらくの間、提供を中断します。
※復帰する可能性があるので「提供終了」ではなく「提供中断」としています。

提供中断の理由は、AppStoreでアプリを提供するには年額12,000円のライセンス料をAppleに収める必要があるのですが、売上から得られる収益(※)がライセンス料未満になったので、今回のライセンス更新を見送ったためです。
※少し補足すると、売上 = Android + iOS両方の売上の合計です。iOS単体だと結構前からライセンス料を下回っていたのですが、最近はAndroidも落ちてきて、ついに合算でライセンス料を下回った形です。
なお、インストール済みのアプリについては引き続き利用できます。
ただし、AppStoreからの再インストールはできないので、ご注意ください。

2017年4月1日土曜日

ラブライブ一人負け?

2chを見てたら、「バンドリ(ガルパ)が出てきてラブライブが一人負け」みたいなことが書かれていたけど、そんなことはないだろうと思って少し調べてみました。

まず、バンドリのランキング(iPhoneのセルラン)の推移がこちら。
バンドリのセルラン(iPhone/日本)
同期間のラブライブの推移がこちら。
ラブライブのセルラン(iPhone/日本)
赤線: バンドリのリリース日
そして、同期間のデレステの推移がこちら。
デレステのセルラン(iPhone/日本)
赤線: バンドリのリリース日
デレステの方はちょうど3末に集金力の高いイベント(シンデレラフェス)があったから1位を取れているけど、ラブライブの方も何となく3末にかけて上がっている。3末というと年度末会計ということで何かしら集金力の高いイベントがあったのではないかと予測(ラブライブの方はプレイしていないからよく分からないですが)。

このままだとよく分からないので、ラブライブとデレステの集計範囲を1年にしてみます。

まず、ラブライブの過去1年の推移。
ラブライブの過去365日のセルラン推移
そして、デレステ。
デレステの過去365日のセルラン推移
分かり易くするために最低ランク位置を基点にした補助線(青)を描いています。

ラブライブもデレステもバンドリリリース(赤)以降に過去1年間で最大の下げ幅を更新しているので、ラブライブ一人負けというより、仲良くシェアを奪われている感じだと思います。

ただ、個人的にはデレステの落ち方の方が微妙に気になります。
バンドリのリリース前に過去365日間最高の落ち込みを記録しているあたり。
上記の日付は2月22日ですね。
関係無いですが、2月22日というと私がSSSを走っていた時と重なりますね。

バンドリが無くても下降トレンドに入っていたような気がします。

完全に個人的な趣向のことですが、先日のシンデレラフェスで「ミスしてもコンボが繋がる」という新しい能力(正確には組み合わせ技みたいな形ですが)が追加されましたが、ソレで少なくとも私のデレステへの課金モチベーション+プレイモチベーションが一気に吹き飛び、その後の限定ガチャで欲しい能力のアイドルが追加されても課金しない感じでした。(無料石で数回回して「あー、出なかったわー残念」で終了)

それでも、相変わらずフェスではセルラン1位を取れているから安泰なのかな。あのフェス限定能力の所為で、少なくとも私は「もうデレステには1円も落とさないぞ」と決意したのですが、これは少数派の意見だから無視しても良い感じなのかなと。少数派は淘汰されても仕方ありませんね。(無限の財布を持つ少数派なら話しは別かもしれませんが、その少数派というのはゲームが目的の外にあるから大丈夫ってことかなと)

だからといって、バンドリに金を落とすかというと全然その気もなく、ある意味お財布にとって優しい状況。なので、ラブライブ一人負けというよりは全部共倒れしている印象です。

このジャンル自体の飽和...ですかねぇ。

2017年3月31日金曜日

しゅわりん☆どり〜みん(悪夢)

ガルパの第一回イベントが無事終了。
若干、期待ハズレな内容でした。

イベントの内容:
①曲をプレイする都度イベントptが入る(ただし消費ブースト0だと入らない)
②特定キャラクタ、特定属性の編成でイベントpt増加
③ブースト消費量を上げることで効率化できる
④協力ライブのイベントptが高め

なので、上位入賞を狙うのであれば、
②ガチャでスコアの高い編成を揃え、
③消費maxで
④協力ライブを回し続ける
という感じ。

②と③はまぁ良いです。
問題は④。

協力ライブでは、プレイする曲をリクエストしてルーレット方式で抽選をするのですが、当然イベントを走っている人はなるべく高い得点が取れる期待値の高い曲を選ぶ(「しゅわりん☆どり〜みん」ばかりが選ばれる)ので、協力ライブの選曲が偏ってしまう。

曲のリクエスト機能は不要だったとまでは言いませんが。

では、どうすれば良くなる(私ならどうする)か勝手に考えてみました。

(1)選曲ランダムの部屋を作る
レギュラー、ベテラン以外にエキスパートみたいな感じの部屋を作り、そこでは選曲が常時ランダムで難易度がExpert固定(レビュラー+ベテランの景品が入手できる)とかがあれば良かったんじゃないかなと。

(2)報酬(イベントpt、アイテム)の獲得条件
・スコア獲得順位が高いほど報酬が多くなる
・フルコンボとれたら獲得倍率1.5倍とか
・ライフ残量が少ないほど獲得報酬の率が低くなる(0なら無報酬)

(3)切断ペナルティ
メンバー確定後に通信を切断した人はペナルティで5〜10分間入室禁止とかそういう処置(これならサーバ改修無しで実現できるので割と簡単に実装できると思う)が無いと、メンバーガチャ感覚でリセマラする人が居てウザい。

(補足)
・(2)だけだと恐らく破綻する(ますます選曲が偏る)ので、(1)と(2)は合わせて一本だと思っている
・(3)が無いと今度は選曲ガチャをする人が現れる

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

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