概要
BeatLinkTriggerでPioneer CDJのスニファリングはとても便利で、現場で利用できるなら出来る限り利用したいツールです。そんなBeatLinkTriggerですが、唯一の(唯一ではないですが)最大級の欠点があり、BeatLinkTriggerは2バイト文字がバグります。今回はBeatLinkTriggerの日本語表示バグを修正していきます。
BeatLinkTriggerはClojureとJavaというプログラミング言語で作られていますが、僕自身どちらも精通していないので間違ってたらすいません。検証時のBeatLinkTriggerのバージョンは0.6.2です。あと、動作確認等は全てmacbookでやっているので、Windowsでのやり方はしりません。
あと、一応の説明ですが、今回は「2バイト文字の表示」に関する記事ですが、これと別に2バイト文字をきちんと読み込まないというバグもあります。そっちに関しては検証中なので今回は触れません。
Deep-Symmetry/beat-link-trigger GitHub : https://github.com/Deep-Symmetry/beat-link-trigger
BeatLinkTriggerの文字表示とフォント
コードを確認
まず、BeatLinkTriggerで日本語表示が出来ない理由から。BeatLinkTriggerのGuthubのページにあるソースコードを読んでいきます。
まず、BeatLinkTriggerの構成ファイルには「beat-link-trigger/resources/fonts/」というフォルダディレクトリの中に「bitter」「DSEG」「Orbitron」「Teko」の4種類のRegularとBOLDとItalicフォントファイル(.ttf)があります(図1)。
これらのフォントファイルは「beat-link-trigger/src/beat_link_trigger/util.clj」の中の(defn load-fonts...)
内にある@fonts-loaded
によってソフトに読み込まれています(図2)。
これらの読み込まれたフォントらは同ファイル内の(defn get-display-font...)
によってフォントを呼び出す関数化がされています。このget-display-font
関数はそれぞれのフォントを「:bitter
」「:orbition
」「:segment
」「:teko
」によって使い分けています(図3)。
GUIへのフォントデータの受け渡し (文字の表示)
これらのフォントは各GUI構成のためのコード内で呼び出されています。
例えば、「beat-link-trigger/src/beat_link_trigger/players.clj」内では、782 artist-label (seesaw/label :text "" :font (util/get-display-font :bitter Font/BOLD 12) :foreground :green)
なので、Bitter-Boldが12pxで呼び出されていることとわかります。
解決法
ということは、解決策としては「フォントファイルを日本語対応のものに入れ替えてソースコードをコンパイルする」かあるいは「フォントファイルを追加してソースコードを必要に応じて書き換えたのちにコンパイルする」かです。
元のフォントファイルを別のファイルに上書きした場合、良からぬところで文字表示がおかしくなる可能性があります。フォントファイルを追加する場合必要な部分だけカスタムすることができますが、公式がバージョンを上げるたびにカスタマイズし直す必要が出てきて面倒です。
今回は「フォントファイルを日本語対応のものに入れ替えてソースコードをコンパイルする」方向で試していきます。
BeatLinkTriggerのプロジェクトを自力でコンパイルし直す
概要
さて、方法がわかったところで他人が作ったプロジェクトのソースコードを自力でコンパイルしていく必要があります。プログラマーなら簡単でしょうが、僕らのようなただの音楽オタクな非プログラマーには敷居が高いです。
できる限り簡単にできるようにしていきます。
ダウンロードとインストール
概要
Homebrewのインストール
Macのパッケージ管理ツールであるHomebrewを導入します。
ターミナル.appを開いて、
$ brew --version
と入力します。バージョン情報が返ってきた場合はインストールされています。もし、バージョン情報が返ってこない場合は、Homebrewの公式(https://brew.sh/index_ja)に従って以下のコードを入力してインストールします。Homebrewのインストールの際にXCodeもインストールする必要があるので、App StoreからXCodeをインストールするかターミナルからコマンドを入力してXCodeを導入します。
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
Homebrewがインストールされたら、バージョンを最新にしておきます。
$ brew update
$ brew upgrade
JAVAのインストール
プログラミング言語JAVAの開発環境を構築します。実際にはClojureのコンパイルに利用するだけ。
ターミナルで、
$ java --version
と入力してバージョン情報が帰ってきた場合はインストールされています。
バージョン情報が返ってこない場合インストールする必要があります。Homebrewを使ってインストールすることもできますがHomebrewを使ってインストールした場合環境設定が必要なので、公式のダウンロードページからパッケージインストーラーをダウンロードインストールすると手っ取り早いです。
追記 : 後述しますがここでのインストールはJAVA 8でした、後述のJAVAのバージョンアップを先に行ってもいいかもしれない。
JAVAのバージョンに関してはちょっと複雑で、こちらの記事 (https://qiita.com/tearoom6/items/036d5e9c186248669457) とかを参考にするとわかりやすいかと思います。公式からダウンロードできるJAVAのバージョンはv8なので、とりあえず新しいバージョンに変更させます。今回はOracle Java SE 14をインストールしました。
Leiningenのインストール
LeiningenはClojureの開発環境・ビルドツールです。Leiningenの構成ディレクトリの形とBeatLinkTriggerのGItHubに上がっているファイル構成が一緒なので、BeatLinkTriggerもLeiningenが使われていることがわかります。
ターミナルで、
$ lein --version
と入力してバージョン情報が帰ってきた場合はインストールされています。
バージョン情報が返ってこない場合インストールする必要があります。
$ brew install leiningen
と入力してLeiningenをインストールします。
GitHub Desktop AppのインストールとGitHubの導入
LeiningenでのClojureコンパイル時にAntora Document(後述)を作る際にソースコードがGit内にないといけないと怒られたので、Gitを使用しないといけないらしい。ソースコード内に「.git」の隠しフォルダを読み込んでいると思うので、git cloneからRepositoryを作成する必要があります。
gitは便利ですが、普段使わない人にはちょっと敷居が高いので、gitを使いやすくするためにGitHubの登録とGitHub Desktop Appを使います。
GitHubのユーザではないならまずGitHubのユーザー登録をします。
GitHubのユーザー登録に関しては このあたりの記事 を参照するといいかと思います。
GitHub Desktop Appは通常ターミナルを使ってやりとりするGitやGitHubをGUI化させたものです。GitHub Desktop AppはGitHub Desktopの公式からダウンロードできますのでダウンロードとインストールをしておきます。
Antoraの導入
AntoraはGit管理されたドキュメント作成ツールです。BeatLinkTriggerではオフラインマニュアルドキュメントの自動作成に使われている?っぽいので、これを導入しないとやっぱりClojureのコンパイル時にエラーを吐きます。
Antoraのインストールは公式ページのドキュメントに書いてあるインストール方法に従ってインストールしてください。インストールにはNode.jsのLTSバージョンが必要です。多分macには標準でインストールされていると思います。
Node LTSがインストールされているかは、
$ nom --version
と入力してバージョン情報が返ってくるか確かめます。
もしインストールされていない場合は、
$ brew install node@12
でインストールします。
Antoraのインストールのために以下のコマンドを入力します。
$ npm i -g @antora/cli@2.3 @antora/site-generator-default@2.3
僕の環境下では管理者権限が必要でインストール時にエラーを吐いてしまったので、
$ sudo npm i -g @antora/cli@2.3 @antora/site-generator-default@2.3
と管理者権限(sudo)でインストールしました。
インストールされたら、
$ antora --version
と入力してバージョン情報が返ってくるはずです。
BeatLinkTriggerのコンパイル
BeatLinkTriggerのRepository作成
GitHub Desktop Appを使ってBeatLinkTriggerのソースファイルをクローンしていきます。
GitHub Desktop App初回起動時にはGitHubアカウントのログインまたは登録が必要です。済ませたらメイン画面から「Add」にある「Clone Repository」をクリックします(項目 1)。Clone a Repository WindowにあるURLから「https://github.com/Deep-Symmetry/beat-link-trigger」と入力します(項目 2,3)。Local Pathに保存先を指定してCloneを押すと、git cloneが行われます(項目 4,5)。
フォントファイル(.ttf)の差し替え
Local Path先に保存されたRepositoryの中の「beat-link-trigger/resources/fonts/Bitter/」のttfファイルを日本語対応のフォントファイルに差し替えます。
Bitter FontはBeatLinkTrigger内での文字表示の中でArtistやTrackTitleに使われているフォントなので多分このフォントファイルを差し替えれば日本語表示できるはずです。もしそれでも問題が出た場合は他のフォントファイルも差し替えるといいと思います。
今回はmacで標準で入っている「Helvetica」を使用してみます。
「Macintosh HD/System/Library/Fonts/Helvetica.ttc」をコピーして取り出します。Helvetica.ttcはttfファイルではなくttcファイルなので、ttc ttfファイル変換ツールなどを利用して変換します。「ttc ttf 変換」みたいな感じでGoogle 検索してやればいろんなツールが出てくると思うので割愛します。
transfonter : https://transfonter.org/ttc-unpack
Helevetica.ttf フォントのうちregularとBoldとItalicをBitterフォントのそれに置き換えます(ファイル名はそれぞれBitter-regular.ttf、Bitter-Bold.ttf、Bitter-Italic.ttfという名前をつける必要があります)。ファイル名と中身が一致していないのが嫌な場合は、Clojureコード側で読み込み先を変更させてやれば良いです。
Clojureのコンパイル
日本語フォントを導入したソースファイルをコンパイルしていきます。
ターミナルを起動して、
$ cd (beat-link-triggerのRepositoryのパス)
で、beat-link-triggerのフォルダに移動します。cd
と入力した後、beat-link-triggerのフォルダをターミナルにドラッグすることでパスが入力されるので、エンターキーを押します。
移動したら、PC名:beat-link-trigger ユーザー名$
のように先頭に「beat-link-trigger」のフォルダに移動したことが確認できます。
次に、
$ lein uberjar
と入力してClojureをコンパイルします。
コンパイル中に「WARNING: An illegal reflective access operation has occurred ...WARNING: All illegal access operations will be denied in a future release
」と出てきますが、Java公式?が問題を把握しているので想定内の警告らしく、将来的に改善されるらしいので問題ありません。
コンパイルが正常に行われると、beat-link-triggerフォルダ内に「target」というフォルダが追加され、その中にbeat-link-trigger.jarがあります。
beat-link-trigger.jarのapp化
javaファイルであるjarは、ターミナルを開いて、
$ java -jar (beat-link-trigger.jarのパス)
を入力してやることで起動させることができます。
もちろん、BeatLinkTrigger公式のリリースページにある.jarファイルも同様の方法で起動させることができます。
起動のたびにターミナルを開くのは面倒くさいのでmac app化させます。
が、app化させるツールを使うのは面倒くさいので、公式のBeat Link Trigger.appを改変していきます。
リリースページから.dmgファイルをダウンロード、インストールしてアプリケーションを追加します。直接いじるのが嫌な場合はappファイルをコピーして別名のappを作成しておきます。Finder内にあるBeat Link Trigger.appの右クリックメニューから「パッケージの内容を表示」をクリックしてapp内のコンテンツを表示します。「Contents/Java/」内にbeat-link-trigger.jarがあるので先ほどコンパイルしたjarファイルに置き換えます。これでBeat Link Trigger.appをクリックするだけで、beat-link-trigger.jarが呼び出されるようになりました。
2バイト文字の取得失敗に関する試行錯誤
2バイト文字が読み込めないUSBと読み込めるUSB
色々試しているのですが、以前解決してない問題です。
日本語を含むトラックを読み込んだ際に2バイト文字が読み込めないUSBはbeat-link-triggerからUSBを確認すると、0xf04のエラーコードを吐きます。一部のUSBではこのエラーコードを吐かないのですが、吐くものと吐かないものの違いが把握できていません。
一応、エラーを吐かないUSBは今の所「マスターブートレコード(MBR)のFat32でパーティション分割をしていないもの」というのが条件っぽいですが、それだけではないというところです。WindowsかMacのどちらでフォーマットしたかや、Rekordboxの書き出しにどのバージョンを使ったか、またはUSBのサイズや使用中の容量の割合なども関係してきそうなので、いまのところお手上げです。
と思いきや、0.6.3で修正が入るっぽい!!リリース待ちです!
まとめ
今回はbeat-link-triggerで日本語表示でした。はやく公式から修正してくれると良いですね。