2011/11/23

monospacefont

iPhoneのOS標準フォントは1バイトがHelvetica、2バイトがヒラギノ角ゴ
Helveticaはプロポーショナルフォントでヒラギノが等幅フォント。

まぁ見やすいからいいかーとも思ってたんだけど、
英数歌詞に入ると、アスキーアート並の空白調整が必要。


いい加減面倒くさくなってきた



ただ、単純に等幅フォントにすればいいってものでもないのが面倒で、
iPhone標準の1バイトフォントだとCourierか Courier newのみ。

ズレはともかく、Courierにしてみた状態
 (JASRAC非信託曲)

やはりセリフ体はヒラギノと相性が悪い。
かと言って他にない。

しかたないので、カスタムフォントを搭載してみる。

プロプライエタリなフォントを使っても
後々面倒なので、
フリーで欧文フォントを探すも、意外と良いのが無い。

M+フォントを入れてみたけれども、
日本語フォントが中途半端に入っている。

これだと無いフォントは代替されるか、空白になるかなー。

と思ったら、M+とIPAの合成なんてあるのね

意外と悪くない

 (JASRAC非信託曲)


ただここで問題が発生。

上記の歌詞表示モードは同一行は重ね書きなので、
文字の内容はあまり関係ない。


ただモーションモードは空白と位置を、
歌詞の内容を見て座標調整しているので、
テキストから座標変換をする必要がある。


CATextLayerはCGFontRefという参照でフォントを読み込むのだが、
フォントのサイズを測る場合はUIFontというクラスで読む必要がある。
だが、なぜかMigMix M1フォントがUIFontで読めない。


Info.plistに設定し、フォントファミリ名で指定するなど、
考えつくことはすべてやったけれども、
UIFontの初期化でなぜかポインタがNULLで帰ってくる。


諦めたら試合終了なので、
フォントのサイズを測るだけのために、
UIFontへフォントをロードすることはメモリの無駄と自分に言い聞かせて、
自前でフォント幅を図ることにする。

1バイトと2バイトの判別方法は色々あるらしいので、
それに加えて空白だけの判別ロジックで早くなるように分岐処理。


1.5日の難産の末、等幅フォント化終了。


これで、テキストの打ち込みが3倍の速さでできるようになる筈。

等幅フォントを諦めなかった理由として、
ベースラインも統一されるというメリットがある。

これで英語でもロシア語でも綺麗に歌詞表示が可能になるかな。

C#で作ったタグチェックソフトも改訂しないと。

0 件のコメント:

コメントを投稿