1047 : Max Tips(010) : 赤松正行 


------------------------------------------------------------------------
DSPマガジン 2006.10.19 No.1047
------------------------------------------------------------------------

「2061:Maxオデッセイ」の発売日が迫ってきました。もう予約されました? 書籍サポート・サイトも正式オープンしていて、一足先にサンプル・パッチなどをダウンロードできます。サンプル・パッチを素早く開くためにブラウザを用意しましたが、ここで大変だったのが日本語の表示。そこで、今回のDSPマガジンでは、日本語表示に関わるテクニックを2つ紹介します。ちょっと地味で退屈かもしれませんが、日本語を扱いたい場合には労力を使わざるを得ない部分です。ほんとはテクニックなんて労せずに、Maxがきちんと日本語をサポートして欲しいところなんですけどね。

・jit.cellblockで日本語表示
・日本語フォント・マッピング

------------------------------------------------------------------------
Max Tips(010)
赤松正行

■jit.cellblockで日本語表示

2061:Maxオデッセイのサポート・サイトからサンプル・ブラウザやオブジェクト・ブラウザをダウンロードされた方にはビックリしてほしいところなのですが、これらのパッチでは完璧(たぶん)に日本語が表示されていますよね。これまでDSPマガジンでも日本語表示の問題を扱ってきましたし、実際現時点でもほとんど解決されていないのですが、ちょいとトリッキーな抜け道を見つけたというわけです。

これは、jit.cellblockという2次元の表を表示するオブジェクトを用い、setメッセージで日本語を表示する方法です。setのアーギュメントには、セルの位置を示す2つの数値と文字列を指定します。この時、日本語の文字列をシフトJISコードの値で表し、itoaオブジェクトで文字列に変換すれば、正しく表示されるようです。もちろん、jit.cellblockオブジェクトは日本語フォントを指定しておく必要があります。

それでは、実際に試してみましょう。サンプル・ブラウザなどは結構複雑なので、要点だけを抜き出したパッチを用意しました。このパッチの左側にある「149 92 142 166」というメッセージは、必ず文字化けすることで悪名高い「表示」という2文字の、シフトJISコードでの表現です。シフトJISコードでの漢字(全角文字)は1文字が2バイトなので、漢字2文字を1バイトごとに数値化すれば、4つの数値というわけですね。

このメッセージはitoaオブジェクトによって文字列になり、prependオブジェクトでsetメッセージのアーギュメントになります。メッセージ・ボックスをクリックすれば、左上のセルに「表示」が表示されるハズです。また、jit.cellblockオブジェクトのSave Contents with Patcherというオブションを有効にすれば、その内容がパッチ・ファイルに保存され、再度パッチを開いた時も正しく表示されます。

ところで、何万とある日本語文字のシフトJISコードなんて覚えられないし、コード表から文字を探し出すのも馬鹿げています。そこで、文字からシフトJISコード値への変換もパッチで処理しちゃいます。それが、パッチの中央部分です。詐欺みたいな話ですが、シフトJISコードでテキストを保存しておけば、それをfileinオブジェクトで1バイトずつ読み出すだけで良いことになります。

テキスト・ファイル自体はMaxで作成可能です。FileメニューのNew...からTextを選んでテキスト・ウィンドウを開き、FontメニューでOsakaなどの日本語フォントを指定してから、日本語を文字入力。複数の行を入力した場合は、行ごとに複数のセルに表示されることになります。行末は必ず改行してくださいね。そして、FileメニューのSaveでファイル保存ですが、ファイル名に日本語は使えません(泣)。

ちなみに、シフトJISコードのプレーン・テキスト(標準テキスト)形式で保存できるのであれば、他のテキスト・エディタを用いても構いませんよ。改行コードはLF(ASCII値で10)でもCR(ASCII値で13)でも、CR+LFでも大丈夫です。

最後に、サンプル・パッチに戻って、上部中央のbuttonオブジェクトをクリックし、ファイル選択ダイアログで作成したテキスト・ファイルを選びます。これで日本語が表示されるはずですが、どうでしょうか? Windowsでは、jit.cellblockオブジェクトやcommentオブジェクトに、適切な日本語フォントを指定する必要があります。それなりに手を抜いた箇所もあるパッチですが、研究してみてください。

ただし、このような処理方法がMaxのマニュアルに書かれているわけではないので、これは裏技と言うべきですね。将来の保障はありませんが、現状では日本語表示のベストな方法かもしれません。サンプル・ブラウザにあるようにボタンやチェックボックスとしても使えるので、応用範囲は広いと思いますよ。

サンプル・パッチのダウンロード:
http://dspmag.iamas.ac.jp/files/TIPS010files.zip

「2061:Maxオデッセイ」書籍サポート・サイト:
http://max.iamas.ac.jp/

------------------------------------------------------------------------

■日本語フォント・マッピング

以前から日本語(2バイト文字)対応しているcommentオブジェクトや、裏技を用いたjit.cellblockオブジェクトで日本語を表示できますが、Macintoshで作成したパッチをWIndowsで開くと、日本語が文字化けてしまいます。その逆も同じです。これは、異なるOSにおいて同一の日本語フォントがないからです。日本語の内容としては問題はないので、文字化けているオブジェクトに適切なフォントを指定すると、正しく表示されます。しかし、数が多ければ、いちいち指定するのは面倒ですよね。

この問題は英語フォントにおいても同様なのですが、英語フォントに関してはフォント・マッピングというメカニズムによって解決が図られています。このフォント・マッピングは、Cycling '74フォルダのinitフォルダの中にあるmax-fontmappings.txtというテキスト・ファイルに定義されていますので、このファイルを開いてみてください。先頭4行は、次のようになっています。

max system windows genericfontmap "Sans Serif" Arial;
max system windows genericsavefontmap Arial "Sans Serif";
max system macintosh genericfontmap "Sans Serif" Geneva;
max system macintosh genericsavefontmap Geneva "Sans Serif";

これは、次のような指定として処理されます。

Windowsでは、Sans SerifであるフォントはArialを用いる。
Windowsでは、ArialであるフォントはSans Serifとして保存する。
Macintoshでは、Sans SerifであるフォントはGenevaを用いる。
Macintoshでは、GenevaであるフォントはSans Serifとして保存する。

このフォント・マッピングによって、WindowsでのArialフォントはMacintoshではGenevaフォントに割り当てられ、MacintoshでのGenevaフォントはWindowsではArialフォントに置き換わることになります。この時に仲介を果たしているのが、San Serifという仮の名前であるわけです。将来、Linux版のMaxが開発されたとして、LinuxでHelveticaフォントを用いるとすれば、次のような指定を追加すれば良いことになります。

max system linux genericfontmap "Sans Serif" Helvetica;
max system linux genericsavefontmap Helvetica "Sans Serif";

なかなかスマートな方法なのですが、フォント・マッピングに指定されていないフォントは、そのまま実際のフォント名がパッチ・ファイルに保存されることになります。ここで問題になるのは、同一のフォントがインストールされていない場合で、この場合はデフォルトのフォントに置き換えられてしまいます。日本語のフォントも指定されていませんから、デフォルトであるArialやGenevaに置き換えられて、文字化けてしまうわけです。

そこで、max-fontmappings.txtに日本語のフォント・マッピングを追加すれば良いことに思い当たりました。例えば、日本語ゴシック体の仮のフォント名としてJapanese Gothicを用い、WindowsではMS Pゴシックを、MacintoshではOsakaを用いるとすれば、次のような指定になります。

max system windows genericfontmap "Japanese Gothic" "MS Pゴシック";
max system windows genericsavefontmap "MS Pゴシック" "Japanese Gothic";
max system macintosh genericfontmap "Japanese Gothic" Osaka;
max system macintosh genericsavefontmap Osaka "Japanese Gothic";

ただし、サンプル・ブラウザでは、次の1行だけを追加するように説明しています。

max system windows genericfontmap Osaka "MS Pゴシック";

言い換えると、WindowsではOsakaの代わりにMS Pゴシックを用いよ、という指定です。これは、書籍のサンプル・パッチでは必ずOsakaを用いており、Maintoshでは必ずOsakaフォントがインストールされているからです。また、短いとは言え、4行追加するより、1行追加するほうが簡単だからという横着な理由もあります。従って、WindowsとMacintoshとで、相互にパッチを遣り取りするのであれば、両方のOSにおいて、きちんと4行の指定をするべきですね。

ところで、jit.cellblockオブジェクトはフォント・マッピングに従わないようで、上記の指定を追加しても、Windowsでは文字化けてしまいます。従って、Windowsではjit.cellblockを選択して日本語フォントを指定しなければなりません。うむ〜すっきりとは行きませんね。このバグ(?)は、本家MaxMSPメーリング・リストに報告しておきましたが、さてさて対応してくれるのでしょうか??

------------------------------------------------------------------------

メルマガの発行確認や購読中止は、DSPマガジンWEBサイトをご覧ください。

http://dspmag.iamas.ac.jp/

------------------------------------------------------------------------
Copyright(C)2003-2006 DSP Magazine. All Rights Reserved. 転送・転載禁止
------------------------------------------------------------------------ 

       


©