先ほど、VGS BGM Player 2.00(iOSアプリ)のアップル審査を出しました。
今回の変更点は、ポータルサイト「suzukiplan.com」のサポートです。
ポータルサイトへは、VGS BGM Playerの設定画面から飛びます。
すると、こんな感じのWebViewが表示されます。
今の所、Web 1.0感満載のレトロなウェブサイトですね ^^;
上記のリンク部分をタッチすると、楽曲のListViewが表示されます。
リスト項目は suzukiplan.com でホスティングしている WebAPI で取得しています。
リストは上に引っ張れば更新するスタイル。
(iOS標準機能では実現できないので外部ライブラリを使いました)
ちなみに、WebAPIはPHP + MySQLで書きました。
これぐらいの規模感のモノなら、PHPで書くのが一番楽だし保守もし易いので。
何より、suzukiplan.comを動かしているサーバー(ロリポップというGMO系列のホスティングサービス)がPHPでしか書けないという縛りもあります。
AWSなんて高過ぎて使えません。
ちなみに、ロリポップでは月額250円のライトプランで運用。
VGS BGM Player 1.00の利用状況から見て、これでも十分に捌けると予測。
実は、新曲の追加をpush通知でお知らせする機能も作ろうと思ったのですが、流石にそれをやるとサーバー負荷的な意味で耐えきれないだろうから、push通知機能は(今回は)断念。
今回のバージョンがリリースされれば、次のようなことができるようになります。
・suzukiplan.comのトップ画面をアプリバージョンアップなしで改修できる
時限ネタなんかも取り込めますね。
クリスマス特別企画とか。
最近は毎年クリスマスは中止だったような気もしますが。
・当然、リストへの曲追加もアプリバージョンアップなしでできる
・リストを増やすこともアプリバージョンアップなしでできる
要するに、アップル審査の緊縛から解放されてスピーディーな対応ができるようになります。VGS BGM Playerの狙いは元からその一点で、初期バージョンではGitHub+Dropboxからデータを持ってこれるようにすることでそれを実現しましたが、今回のバージョンアップでは「アプリ単体」でそれを実現できる形になります。
今まで、東方Project原曲の二次創作限定でやってきました(そして、今後も少なくとも東方VGSではそれしかやらない予定です)が、権利上問題なければ二次創作の二次創作とかもできたりします。(確か、ナイトオブナイツとかは出来たと思う)
あと、将来的にはJASRAC管理曲のアレンジ配信とかもやりたいですねぇ...この場合、著作権料の支払いが必要なので曲ごとに有料とかになってしまいますが。ストリーミングなら幾らか安く済むので、アプリのマネタイズでペイ可能な範囲だったら先ずはストリーミングでやって、気に入った曲は購入といった感じだろうか。(今の所、このアプリの収益力では月毎の固定費も支払えない状況なので、ストリーミング配信をやるとしたらサブスクリプションの導入が必須かなと思いますが)
2015年12月31日木曜日
2015年12月11日金曜日
Android版の東方VGSでアルバムタイトルが表示されないという件の調査経過
twitterの方で愚痴ろうとしたのですが、少し長いのでブログの方に書いておきます。
先日、久しぶりにAndroid版の東方VGSをアップデートしてみたら、立て続けに2件ほど「アルバムタイトルが表示されなくなった」という報告がレビューで挙ってきました。
どうやら報告は両方ともAndroid 5らしいです。
私はAndroid 5の端末を持っていない(&私の手持ちのAndroid 4.4の端末では再現しない)ので、知り合いが偶然持っていたNexus 5 + Android 5の端末で動かしてみたところ現象を確認。
通常だと、下図のように表示されるはずのところ、
以下のような感じで表示されていました。
そもそも、このタイトル表示は通常のAndroidのTextViewではなく、割と特殊な方法で表示しています。
まず、GitHubの方でも公開している titlelist.txt というテキストファイル(CSVファイル)をSJISに変換したものから以下の形式の構造体を生成していて、それをromdata.binの中に突っ込んでいます。
※1タイトルにつき1インスタンス
そして、それを以下のようにputkanjiという関数で表示
putkanjiはこんな感じ
・曲のタイトルは問題なく表示されているのでputkanjiはバグっていない。
・タイトルは表示されていないが「(c)2008」という ASCII コードのみの部分は表示されている
・また、IDは正常に引けている
・つまり、TitleDataのレコード自体はある
という点から文字コードのMBCS部分がデータ破損しているか \0 になっているんじゃないかと思うかもしれませんが、それなら私のAndroid 4.4でも問題なく表示される筈がないのでそれは無いです。
Android 5って実はOSのネイティブ周りの実装が結構強かに変更されているので、OS側のバグを踏んでしまったと考えるのが一番自然ですかねぇ。(この手の問題の原因としてよくあるのがグローバル領域を壊す系だろうか)
さて、どうしたものか。
Android版はバックグラウンド音飛びの件もあるし、公開停止してiPhone版一本で行くのも良いんじゃないだろうかというのが本音なのですが。(要約するとAndroidはもう嫌だ...ということ)
【追記】
エミュレータで現象を再現でき、原因も特定できたので、対策しました。
https://github.com/suzukiplan/Touhou-VGS-MML-data/pull/81
先日、久しぶりにAndroid版の東方VGSをアップデートしてみたら、立て続けに2件ほど「アルバムタイトルが表示されなくなった」という報告がレビューで挙ってきました。
どうやら報告は両方ともAndroid 5らしいです。
私はAndroid 5の端末を持っていない(&私の手持ちのAndroid 4.4の端末では再現しない)ので、知り合いが偶然持っていたNexus 5 + Android 5の端末で動かしてみたところ現象を確認。
通常だと、下図のように表示されるはずのところ、
以下のような感じで表示されていました。
そもそも、このタイトル表示は通常のAndroidのTextViewではなく、割と特殊な方法で表示しています。
まず、GitHubの方でも公開している titlelist.txt というテキストファイル(CSVファイル)をSJISに変換したものから以下の形式の構造体を生成していて、それをromdata.binの中に突っ込んでいます。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* title data */ | |
struct TitleData { | |
int id; | |
int songNum; | |
char copyright[32]; | |
char title[80]; | |
char reserved2[8]; | |
}; |
※1タイトルにつき1インスタンス
そして、それを以下のようにputkanjiという関数で表示
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Draw song title */ | |
putkanji(4 + bx, 134 + (int)base, 255, _title[ct].title); | |
putkanji(236 + bx - ((int)strlen(_title[ct].copyright)) * 4, 152 + (int)base, 255, _title[ct].copyright); | |
if (_title[ct].id == 0x60) { | |
putkanji((240 - (((int)strlen(_msg)) * 4)) / 2 + bx, 40 + (int)base, 255, "%s", _msg); | |
} |
putkanjiはこんな感じ
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
static unsigned short getcode(unsigned char sjis[2]) | |
{ | |
unsigned char jis[2]; | |
unsigned short ret; | |
jis[0] = sjis[0]; | |
jis[1] = sjis[1]; | |
if (jis[0] <= 0x9f) { | |
jis[0] -= 0x71; | |
} else { | |
jis[0] -= 0xb1; | |
} | |
jis[0] *= 2; | |
jis[0]++; | |
if (jis[1] >= 0x7F) { | |
jis[1] -= 0x01; | |
} | |
if (jis[1] >= 0x9e) { | |
jis[1] -= 0x7d; | |
jis[0]++; | |
} else { | |
jis[1] -= 0x1f; | |
} | |
ret = (jis[0] - 0x21) * 94; | |
ret += jis[1] - 0x21; | |
return ret; | |
} | |
static void putkanji(int x, int y, int col, const char* msg, ...) | |
{ | |
char buf[256]; | |
int i, j, k; | |
unsigned char c[2]; | |
int jis; | |
unsigned char bin; | |
va_list args; | |
va_start(args, msg); | |
vsprintf(buf, msg, args); | |
va_end(args); | |
for (i = 0; '\0' != (c[0] = (unsigned char)buf[i]); i++) { | |
if (c[0] & 0x80) { | |
c[1] = (unsigned char)buf[i + 1]; | |
jis = (int)getcode(c); | |
jis *= 12; | |
for (j = 0; j < 12; j++) { | |
bin = _kanji[jis + j]; | |
for (k = 0; k < 8; k++, bin <<= 1) { | |
if (bin & 0x80) { | |
vge_pixelSP(x + k, y + j, col); | |
} | |
} | |
} | |
x += 8; | |
i++; | |
} else { | |
c[0] -= 0x20; | |
vge_putSPM(255, c[0] % 16 * 4, c[0] / 16 * 12, 4, 12, x, y, col); | |
x += 4; | |
} | |
} | |
} |
・曲のタイトルは問題なく表示されているのでputkanjiはバグっていない。
・タイトルは表示されていないが「(c)2008」という ASCII コードのみの部分は表示されている
・また、IDは正常に引けている
・つまり、TitleDataのレコード自体はある
という点から文字コードのMBCS部分がデータ破損しているか \0 になっているんじゃないかと思うかもしれませんが、それなら私のAndroid 4.4でも問題なく表示される筈がないのでそれは無いです。
Android 5って実はOSのネイティブ周りの実装が結構強かに変更されているので、OS側のバグを踏んでしまったと考えるのが一番自然ですかねぇ。(この手の問題の原因としてよくあるのがグローバル領域を壊す系だろうか)
さて、どうしたものか。
Android版はバックグラウンド音飛びの件もあるし、公開停止してiPhone版一本で行くのも良いんじゃないだろうかというのが本音なのですが。(要約するとAndroidはもう嫌だ...ということ)
【追記】
エミュレータで現象を再現でき、原因も特定できたので、対策しました。
https://github.com/suzukiplan/Touhou-VGS-MML-data/pull/81
登録:
投稿 (Atom)
合理的ではないものを作りたい
ここ最近、実機版の東方VGSの開発が忙しくて、東方VGSの曲追加が滞っています。 東方VGS(実機版)のデザインを作りながら検討中。基本レトロUIベースですがシークバーはモダンに倣おうかな…とか pic.twitter.com/YOYprlDsYD — SUZUKI PLAN (...
-
家電量販店のPCゲームパッドコーナーに行くと、軒並みWindows用のゲームパッドしか売っていません。稀に「Mac OS X対応」を謳っているゲームパッドも置いてありますが、実際に動かしてみると妙に誤動作をして更にガッカリしたりとか(経験済み)。 色々と試してみたのですが、最...
-
ゲームボーイのCPUについて、誤った技術情報が検索トップの方に表示されるので、私が把握する限りでZ80との仕様差を書いておきます。 ゲームボーイのCPUとは? ☓ 8080 ☓ Z80 ○ 8080カスタム or Z80カスタム(正確にはSHARPのLR35902) ...
-
MSX開発の関係者を匂わせるタイトルかもしれませんが、私は全然関係ない(外野)です。 私はマイコン世代(死語)の人間ですが、実はリアルタイムでMSXは触ったことすら無いです。私が最初に触ったパソコンはPC-9801(16bit機)で、8bit機のMSXは触る機会すらありませんでし...