honeylab's blog

honeylab's blog

各種ハードウェアの改造、主にファミコンミニなどをやってます(ました)

DDRminiで自前ビルドのMAMEが動いた!

ここまでのまとめ

 

honeylab.hatenablog.jp

 

さて、すでに分かっているように、こいつの中にはZUIKIの手下の開発会社がカスタムしたDDR専用のMAMEがインストールされています。
完全にそれ以外を除去したわけではありませんので、それ以外の関連のゲームは少しの手直しで動作させることができる可能性があります。

しかし、それ以外のゲームを動かすためのコードは入っていない可能性がありますし、通常のMAMEで使用できる各種機能やパッドのカスタマイズなどは使用できません。

この機械、8コアのARM64が入っているというこの手の機器としてはかなり高性能な演算機能を持っていますので、エミュレーション性能もかなり高いはずです。

それを利用するために、どうにかしてMAMEを入れてみたいところでしたが。

MAME全然わからんw

さらにクロスビルドということもあって全然わからん。

あちこち探したところ、似た環境のARM64であるRaspberryPiように一発でMAMEをクロスビルドしてくれるツールキットを見つけたのでこれを使ってみました。

github.com

途中、変な制約につかまってまともにコンパイルできるまで2日ほどかかってしまいましたが、最終的に見事動作する環境を作ることができました!

 

音声・音量周りの調整ができないなど不便な点はまだまだ残っていますが、HDMIも簡単に使用できるため結構なんでもできる気がします。

これだけ動くDDR筐体の形をしたMAMEマシンなら、まぁクッソ高いわ!というところから、ちょっと高いかも、ぐらいまで楽しめるんじゃないでしょうか。

とりあえずは、DDRBEMANIシリーズがどのぐらい動くのかは気になるところです。

ただし、内蔵のMAMEシュリンク版)は、ver0.24ぐらいからのフォークっぽく、一応は謹製扱いのパッチワークがされていると考えると、もしかしたら内蔵のやつの方が再現度が高かったりするんでしょうか。わかんないですけど。

まぁ、本当に必要ならバックポートしたらいいんだと思うんですけどね。逆アセンブルするしかないけど。

 

で、動きました、とはいうけど、残念ながらみんながみんなぱっとインストールできる状態にはなっていません。少なくとも私はSDカードのはんだ付けからrootfsを書き換えて、USBへのバックドアを作っています。

それに対して、いつものようなFELモードでの書き換えの道も開かれたようです。

 

これを使えば、はんだ付けなし、本体を分解して基板を開いてボタンを押しながらUSBを接続してインストール、という手順でインストールすることができるようになるでしょう。それまで、もうちょっとだけこの戦いは続くんじゃ。

DDRMini解析まとめ

honeylab.hatenablog.jp

honeylab.hatenablog.jp

honeylab.hatenablog.jp

上の3つの記事と私のTwitterで随時解析情報をお知らせしてきましたが、一定の成果を

得られたためここに記しておきます。

 

ハードウェア、ファームウェアについて

・CPUはAllWinnerの8コア 2.0GHz A572という割と豪華な奴

・ストレージ8G,うち2GをゲームROM含むrootsとして使用

Linux Kernel 5.15

Linux version 5.15.123-yocto-standard (oe-user@oe-host) (aarch64-poky-linux-gcc (GCC) 11.2.0, GNU ld (GNU Binutils) 2.38.20220313) #1 SMP PREEMPT Mon Jan 29 02:33:21 UTC 2024

一応サポート情報のOSSからダウンロードしたソースコードコンパイル可能ではある

・が、書き換えて動く保証はない(BROMでの検証がきつい)し、ENVを書き換えてLinuxコマンドラインを改変しようとしたら文鎮化した。

・eGON ヘッダバージョンが4.0

・u-bootはtina 2018-07ベース

・rootfsについては特に検証されていないので書き換えは可能

・SDカードスロットのパターンがあるので、これにSyterKitというツールキットで作ったブートローダやベアメタル実行ファイルを書きこんで動かすことが可能(mmc0)

・これで実行ファイルを作り、ROOTFSをフルダンプしたうえで、initスクリプトUSBメモリのマウントとシェルスクリプトを読み込むようなバックドアを書き込み、システムを自由に書き換えることに成功した。

 

 

・↑SDカードスロットと配線のはんだ付けが必要

 

・↑はんだ付けを必要としてないFELモードからの独自バイナリも起動できるらしいが、私はまだ試していない

 

・普通に使えるシリアルコンソールは出ていないが、DTSを定義するなりレジスタを設定するなりすれば使える2系統は出てるっぽい。

あと、SDカードをあきらめればPF2,4も使えるのかも。

・ハードウェアシリアルを復活させるのは一寸めんどいけど、Linux起動後であればUSB Serial Gadgetをコンパイルして読み込ませ、gettyを起動するようにすれば起動後にはシェルに入ることができるようになる。passwdの書き換えが必要

 

ソフトウェアについて

・メニュー画面の実行ファイルとエミュレータ部分の2つに分かれている

ゲームエンジンMAMEベースのエミュレータ。ベースっていうか、DDR以外の部分を削ったものに独自パッチとROMの暗号・復号化ルーチンを付け足したり、デモの制御などを行うための改変が行われている

 

・DDR2ndMIXの未収録曲は、ゲーム用CDDAのCHDのトラックを無音化することで鳴らないようにされている。白看板はMAME改側で対応。

 

・そのほか付属のROMはおそらくMAMEのROMセットと全く同じものらしい

 (ただし、暗号化されている)

 

・暗号、複合ルーチンは解析済みのため、必要であればCHDの中身を書き換えるか、拾ってきて(ダメ)差し替えるだけで選曲・ステージで鳴らすことができる。白看板を消すにはプログラムへのパッチが必要

 

・本来MAMEでエミュレーションするときには基板のセルフチェックを通るため時間がかかるが、収録時に通過後に保存したステートセーブを読み込んで起動している

・3rdMIXも同様にデータが削られているような気がする。加えて、起動時に本体内に音源データをプリロードしているのでステートセーブを読まないようにしたうえで、CHDを差し替えると読み込まれた時点のデータがロード、再生される(ような気がする)。追加でプログラムにもパッチが必要かもしれない。当てたものが↓

 

・USBでファームアップがあったが、この手法で曲が追加される可能性はゼロではない。ゼロではないが。

 

というわけで、少なくとも私のDDRMiniは、再生できない曲が無音で足譜だけ流れるような残念な状態ではない状態にすることができました。

しかし、まぁ権利の問題でこうなっているので、これをあれこれするようなことをこれ以上私からどうこうすることはできないのです。

しかし、筐体の出来やLEDの演出は大変よく作られていて、ゲーセンに通いまくっていた青春時代を思い出させてくれるとても良い飾りだと思います。

あとは、そうね、普通にaarch64なのでそれ用のMAMEなりStepManiaコンパイルして突っ込む、ことは可能かと思いますので、追々やっていきたいと思います。まずはここまで。

 

DDRMini 作業ログ

Avaota-SBCというDDRMiniにかなり近い構成のボード用にビルドしたバイナリが断片的に動くので、これを使ってファームウェアを吸い出しつつ、逆アセンブルを続けているところではあります。

 

・UART0(PB9,PB10)が明確にデバッグ用に出ているがLinuxの先ではDTSで無効化されているのでほとんど何も出てこない。が、最初のBOOTの間はdの先行入力でちょっとだけメッセージが出る。

Image

 

・BOOT0 (emmc上0x2000)がboard_initした後、MMCからTOC1パッケージを読み込んでいる。このへんはこの二つのページの機材がよく似ている。

Allwinner H700 Firmware extraction - KNULLI Wiki

Teclast P85T - linux-sunxi.org

・上にあるように、u-bootのエリアがあるけど実はu-bootじゃないのかな、と思って読み込んで逆アセンブルしているけど、本当にu-bootっぽい。

「U-Boot 2018.07-00009-g40a0e96-dirty (Jul 24 2024 - 13:19:23 +0800) Allwinner Technology」

このツリーは、ベースの2018に山ほどのパッチをしてようやく動かしているものらしい。

・このTOC1がemmcのbootパッケージから!ANDROIDを読んで起動している

 

・その次のパーティションがrootfs、ここにゲームもROMも入っている

Image

・ゲームのROMは独自の暗号化がされている。

Image

・rootfsを書き換えるだけである程度動かせるとは思うけど、現状何も出力できないしシェルにログインできないので大変やりにくい

・どうにかシェルを使うためシリアルコンソールの有効化を試みている

・UART0はLinuxのDTSで無効化されているので起こすのは難しい

・配線を辿るとUART2もつながっている。

 

・ENVのパラメータをいじればttyS2でコンソールが起きるはず

・ENVをいじって書き戻そう!

・書き戻した

・壊れた。

 

壊れた。

 

書き戻す場所を間違えたのか、値がおかしいのか。

もっかいeMMCのフルダンプを取ってどこを壊したのか調べてみる。

 

遠い。

DDR miniのハッキングがいよいよ本格的に始まった

honeylab.hatenablog.jp

分解して下調べをしていたDDR mini

既にファームウェアアップデート用のUSBを探しそうな画面が発見されていますが、
これは適当にUSBを挿せばいいものではなく、必要な条件のもとパッケージングしたものに対して発動するものだと思われます。

 

 

その条件を調べることや、他にバックドアがないかどうかを調べるため、内部のソフトウェアを調べていきます。

で、どうやって?

まず、このAllwinnerのCPUは、FELモードというUSB経由であれやこれやするためのモードが備わっていますが、ここで行うことができるのはプログラムの転送ぐらいです。
まずFELモード上でu-bootなどのブートローダを転送して実行し、そのあとファームウェアを転送して書き込んだりすることができます。
過去にさんざん弄ったファミコンミニの系列はこの方法でカーネル書き換えが進められてきました。

www.ns-koubou.com


しかし、今回採用されたA527というCPU、かなり新しいもので従来使われていたようなu-bootが対応できていないようで、まともにコンパイルできるツリーが見つかりませんでした。そのため、何か他の方法を使わなければなりません。

いろいろ探していたとこ、A527やその互換のT527というCPUを搭載したAvaotaSBCというオープンソース設計の組み込みボードがあるのを見つけました。

github.com

また、それに対応したベアメタルの開発環境、そしてブートローダLinuxの入ったOSイメージがあります。これが使えそうだと踏んで調査を行いました。

github.com

github.com

Allwinner系のCPUの多くは、起動シーケンスとしてeMMC(8bit onboard SDC2)のほかに、SDカード(4bit SDC0)やSPI Flash、NAND等いろいろなストレージから起動できます。

A527は都合がいいことに、基板上のeMMCより先に、今回基板上からオミットされたSDカードスロットから起動することがデータシートに記載されていました。

 

そのため、まずSDカードスロットを復活させました。
しかし、SDカードソケットを付けてもそのままでは使えません。
きちんと使えないように、各信号線が基板上で分断されていますので、そこをすべてジャンパし、またCLK以外の線は10Kオームでプルアップする必要があります。

 

この配線を行い、SDスロットの信号を見ながら電源を入れるとCLK信号が観測され、SDカードを探しに来ていることが確認できました。

 

次はSDカードの中身の準備です。

先ほど見つけたベアメタルの環境をコンパイルし、テストコードをいくつか書いてみます。

一応動いているようですが、動いた結果が観測できません。
なぜなら、標準入出力であるシリアルポートが発見できていないからです。

今までのミニコンソールは、それっぽいところを当たりながら電源を入れればすぐにブートローダLinuxのメッセージが表示されていました。が、今回は徹底的にその動作が潰されていて、全く信号が確認できません。

とはいえ、シリアルの配線は絶対に残っているはずです。

 

データシートとピンアサイン、そして基板上の配線を穴が開くほど見つめながらプログラムを調整したところ、見事にシリアルポートをの出力を確保できました。

 

プログラムが動いたらこっちのもの。eMMCの中身を読み込み、SDカードに保存して解析すればいいのです。

というわけで、先ほどの環境からSDカードを使っているサンプルを改造し、実装してみましたが。。。。。動かん。っていうか、動きが変。

 

どうやら、SDカードとeMMC、どちらかしか使わないと仮定してあり、各パラメータを保存するメモリを一つ分しか確保しないコードになっていました。

github.com

これを修正し、カード二枚が同時に使えるようにしたところ、無事、eMMCとSDカードどちらからも読み込めるようになったんですが・・・・書き込めない!!!!

さんざん悩みつつ調べた結果、書き込み部分が実装されていませんでしたw

というのは一寸違ってて、実はSDカードの伝送、高速化のために普通はDMAによるメモリ転送を使い、まとめて転送するようになっています。

今回のベアメタル環境、DDRMiniの環境と完全に同じではないため、基板上のDDRメモリの初期化が行えず、大きなメモリ空間やDMAが使えない状態でした。
そのため、DMAではなくFIFOに1バイトずつ書き込む”CPU転送”モードを使う必要があったのです。サンプルソースのドライバでは、DMAの部分は読み書きどちらも実装されていましたが、CPU転送、レスポンスの読み込みにしか使わないので書き込む部分は省略されてたんですね。気づくのにしばらくかかりました。


Linuxのドライバのソースなどを参照し、この部分を実装すると、見事eMMCの内容をSDカードに書きこむことができるようになりました。

 

書き込めたらこっちのもの。中身を調べていきます。つづく。

クラファン支援してたDDRminiが届いたので例の儀式

※ちょっと編集しました

SDカードからのアップデートについて考えすぎてて、USBメモリ経由でのアップデートが不可能ではないことを忘れていました。。。

 

 

届いた でかい

 

 

外見、まじで満足感がある

スピーカのところの丸ネオン、LEDとアクリルとかでごまかすんじゃなくて、
ちゃんと粒々入りの高輝度LEDがビカビカしてて大変素晴らしい

 

 

という外見のレビューはほかの人に任せて、当然こちらは中身をレビューします。

 

がっつりヒートシンクの付いたCPU、外してみるとAllwinnerのA527というのがついています。

なんと8コアx2Gヘルツの結構最近出た強力なCPUです。

これまでZUIKIが出してきたミニコンソールはZ7231というAllwinner A33と同等のCPUを詰んでいましたが、これは16ビット時代のCPUをエミュレートするのが精々で、事前人試したところプレステレベルのエミュレーションでもまともに動かなかったので、何かしら上位のCPUを搭載してエミュレーションにするか、マジで再実装してそのクラスに落とし込むかどっちかだと思っていたんですが、思ってたより強力なの乗せてきたな、という感じです。

Image

基板のピンを当たってみましたがどうやら今のところ電源投入時のシリアルメッセージが表示されず、使用しているブートローダーがわかりません。

公開されているOSSの中に、u-bootが入っていないので、うっかり忘れていなければu-boot以外のものが使われている気がします。

 

ゲーム環境ですが、メニューからゲームシリーズを選んで起動した瞬間に、MAMEなどでおなじみのCDイメージの名前がちらっと表示されるので、間違いなくエミュレーションであると考えられます。

 

版権が取れなかったものは曲選択時にそのメッセージのテクスチャと、曲が始まると無音で譜面が流れるようになっています。

実はこの辺の作業、おそらくROMかエミュレータにちょっとフラグを立てて動かすレベルのパッチを当てて対応していると考えられます。
全部動くようにしといて、取れなかった奴はならない、とできるからね。

 

いや、これマジで英断だと思う。曲流せないならリストから外すもん。

でも、他の人の反応をを見てもわかるように、クラファンで支援するレベルの人は脳内再生が余裕なのでこれが大正解だったように思えます

 

で、一部の人がブーブー言ってるSDカードシステムが実装されなかったがどうして発生したのかに関して、基板を調査して想定される理由を検討してみましょう。

 

まず、基板にSDカードスロットのパターンが残っています。ので、普通にここに該当するパターンのソケットを取り付ければSDカードを挿すことができます。

 

が、それでは当然動かないです。
基板を拡大してみると、そのほかの小部品が実装されていません。

SDカードの配線が切断されている部分はもともと開発段階では0Ωジャンパが実装され、SDカードを認識できるように工夫してありました。

こうしておけば、基板のパターンを再変更して製造しなくても、実装段階での部品リストからこのジャンパを外せばいいだけになるため、コストがかかりません。

つまり配線がジャンパで切り離せるようになっているのは

「最初から製品版では削除する予定だった」からです。

 

搭載されているAllwinnerのシステムはアップグレードにUSBを使った「FELモード」というものがあります。しかし、ベータテストなどの段階でこれを使って毎回ファームを書き換えるのはPCも必要なので大変面倒です。そのため、必要なソフト本体をSDカードに入れて、差し替えて簡単に比較デバッグができるようにしてあったんでしょう。

どうも、発表会なんかでアップグレードを。。。みたいな話が出たのは、

担当者がうっかり口走っただけだと思います。

結果、真に受けちゃった人が出たのは失策でしょうが、最終発表仕様に書いてなかったものが当然載ってくるわけはないとは思うので騒ぎすぎな気がします。

 

で、先述したようにSDカードは配線が切断されているためまともに使用することができません。代わりに「FELモード」を使ったアップデートは原理的には可能ですが、USBを繋いだだけではだめで、FELモード用のピンをLOWにしなければいけません。

で、もちろんそれは開発中には必要になるため、特定のボタンなどに割り当てられた隠し機能になっていることが多いです。今回は分解した基板上、USBコネクタの近くにあるタクトスイッチを押しながらUSB-CコネクタをPCに接続すると、FELモードに入ることが確認できました。

 

しかし、このCPU、新しすぎてこれに対応したFEL書き込み用のプログラムが転がっていません。まぁ、もちろんZUIKIは持ってるわけですが、

このモードに入るために分解が必要なので、ユーザー側でのアップデートが案内されることはおそらくないと思います

※ですが、よく考えたらUSBメモリにファイルを入れて更新、の可能性がありました。

ーーーーーー 追記 -----

イーグレットツーミニはファームウェアアップデータをちゃんと内蔵していて、SDカードからですがアップデートができるようになっていました。

DDRMiniでも、ファームウェアアップデータを呼び出す方法が発見されたので、
このアップデータがUSBメモリに対応していたら同様にアップデートできるかもしれません

ーーーーーー 追記ここまで -----

で、それだけではちょっとつまんないよね。

ということで、例によって改造していくわけです。
まず、FEL書き込みをどうにかするために、本体側のプログラムを探らないといけません。普通はどっかにシリアルデバッグが出ているはずなんですが、全然見つかりません。困った。

もう一つの手段として、本体側のプログラムを吸い出すためのプログラムをSDカードから動かせないか、ということです。

このCPUであるA527のマニュアルを参照してみると、起動デバイスの検索順として、まずMMC0、続いてeMMC(MMC2)、見つからなければ基板上のそのほかのFlashを探す、ということになっています。ただし、この動作をeFuseというワンタイム設定レジストリで無効にすることもできます。FELから読んでみたところ、そうはなっていないように見えます。

ここで、MMC0はさっきから騒いでいる基板上のSDカードコネクタです。ここから起動できないでしょうか。

切られた配線を基板を拡大して追っていくと、大体の配線を繋ぐことができました。

本当に起動時にSDカードを探しに来ているか、ということは、オシロスコープでSDカードのピンを見てみるとわかります。

 

elm-chan.org

こちらに書かれているように、SDを探しに来ていればCLKピンに反応があるはずです。

参考:秋月白箱の調査

 

何回か試してみますが、何も起きません。おかしい。

よく見てみると、CLKであるはずの配線、切断されている場所が見当たりません。

もしかして、と一度組み立てた基板のCPUヒートシンク、シールドを外してみると・・・なんとこの中にあと二本、切断されている場所がありました!!!

Image

これを繋いでみると。。。。

Image

やった!!SDクロックが来ています。

 

おそらく起動シーケンスとして使えるのは確実。
このSDカードに必要なブートローダーとOSを書いて、EMMCを吸い出せば中の構造がわかり、それに対応して改造したものを書き戻せば今回の制限が外せるかもしれません。また、おそらくエミュレーションベースで、ある程度汎用性があるはず。
このCPUを詰んでいれば、現状のポータブルなSystem573のエミュレータとしてはかなり強力な環境だと思います。つまり、ほかのACゲームも突っ込めるかも。という希望があります。

 

で、ブートローダーとOSは・・・・・?

 

とりあえず、このCPUを使った開発ボードや、u-bootのポーティングをやってる人と、そのほかのベアメタルBootloaderは一応あるっぽいので、まずはSDカードからこれを起動できるようにコンパイルする環境づくりだ!!!

AllwinnerT527はA527の自動車用(順序が逆かも)で、A523とは内部がだいぶ似ているはずです。ぴったりのが無くてもその辺から漁るしかない。

 

github.com

 

 

技術書典16の託児サービスを使ったら売り上げが倍増した件について

今回ブログの方で告知するの忘れてましたが、技術書典16(オフライン会場)に参加してきました。

過去記事を読んでいる方は知っていると思いますが、うちには呼び込み君とその所有者である息子と、その妹がいます。

honeylab.hatenablog.jp

で、前回は特にその呼び込み君の本を作ったことと、うちの家庭の事情で子供たちを家に置いて私がオフライン会場に出てくることは難しいため、前回の技術書典15ではオンライン参加、その前の14ではオフライン会場のブース裏に子供を2人抱え込んで参加しました。

 

その前、多分6かな?では外部の一時預かりを利用しました。

https://aieiyohogakuen.com/ (いまはないようですが、当時池袋園がありました)

で、7の時になんと技術書典の運営としてサークル参加者向け託児サービスが始まり、これだ!と申し込んだのですが、息子がまさかの発熱で託児することができず、どうにかうちで見ててもらって私単騎で参加しました。

(コロナ禍以前のため、家族の発熱に対してはまだ制限がなかった時代の話です)

その後、コロナ禍を受けて託児サービスが難しくなり、提供が休止されていました。

 

そのため、技術書典14では子供をブース裏に抱え込んで参加することにしました

技術書典、普通の即売会からは考えられないほどブースが広く(1サークルで180cm机1卓)、ブース裏もまぁまぁ、こどもがうっかり転がっても大丈夫なぐらいな広さはあるんです。なぜか。

あとは子供たちがブース裏で極力退屈せず、最悪ずっとYoutubeでも見せておけばいいやと思ってやってみましたがこれがなかなか大失敗でした。
そんなに悪さをすることはありませんでしたが、まず到着時点で子供見ながらの移動・搬入のおかげでまずサークル入場遅刻。そのため開始前チェックに間に合わず販売開始が遅れ、それに伴いろくにPOPも飾ることもできずテーブルの上は本が並んでいるだけ。

どうにか値段表はつけましたが、表紙だけでは大した訴求もできず、前を通る人の目には映ってんだか映ってないんだかのままみんな素通りしていきます。そして暇だとぐずり出す子供達。ああもうw

昼飯も食わせないといけないし、遊びにもいきたいし、で結局15時前には撤収せざるを得ませんでした。

売り上げも過去の過去に子供を外部の一時預かりに委託して参加したときに比べて凄惨な結果になり、参加したという記録が残っただけな感じになりました。

 

という過去があった上で、コロナ禍を耐え切った技術書典、16で堂々の託児サービスの復活!(だったよね??経緯間違ってたらごめん)やっとキタ!ということで託児を申し込み、新刊を抱えて乗り込むことにしました。

 

託児サービスについて

nijiiropokke.info

同人イベントのための託児」と記載されているように、同人イベントの日程に合わせて一時保育を提供してくれている「にじいろポッケ」さんが運営しています。

そのため「〇〇合わせ」と表記されてるのおもろい。

comic.webnewtype.com

 

で、普通のイベントとかだと額面を書いていいのか悪いのかあれなんですが、ちゃんと案内されてるので書いておきますが、当然有料です。

https://nijiiropokke.info/?p=6075

このイベント合わせの日は8時間で8000円、とのことです。まぁ安いです。

しかもこの日は水族館遠足らしいです。すごい。

 

で、恐ろしいことに、「技術書店あわせ」の場合、(事前申し込みが必要です)
技術書典サークル参加者に対して無料で提供されます。恐ろしいです。
必要な持ち物として着替え、おやつ、お弁当、さえ持っていけば無料です。

託児場所も、サンシャインのビルの中なので、売り場からビルの中を5分も歩けば到着します。

活動の様子も随時Upしてくれるので安心です

そんなわけで全く子供の心配もせず設営に専念でき、

無事開催時間満了で参加することができました。
売り上げとしても無事十分な冊数を頒布でき、ちゃんと「参加した」感を得ることができました。

終了後お迎えで、子供達からも特に不平不満もなく、十分に遊んでいただいたことがよくわかりました。

 

詳細なレポートもいただけて大変感謝です。

(↓名前出てますが隠してないので問題ないです)

下の子、保育園ではお昼寝しますが自宅で休日に寝ることはほとんどないんですが、ポックリと昼寝したらしいです。びっくり。

そんなわけで、うちの体制としてはちょうどいいところに一時保育が可能であるか、この施策が行われている技術書典ぐらいしか参加できず、特に技術書典に関しては託児利用者が優遇され過ぎているのではないかという気がしないでもないですが、ちゃんと体制として運営されている、ということでありがたく利用させていただけました。ありがとうございました。

 

で、新刊ですが、そんなに売れるもんでもなく、万人に刺さるわけではないので物理本は取り置きを残すのみになっています。

techbookfest.org

その他の本に関しては、引き続き開催されているオンラインマーケットにて電子版をDLしていただくことも出来ますんので、うっかり刺さった方は是非読んでいただけたら嬉しいです。

 

techbookfest.org

DAM XG1000の演奏中にTMIDI鍵盤表示風の画面を表示する

いよいよ煮詰まってきました。

元々私がこのカラオケマシンをいじっているのは、カラオケ中に
画面内にただの「見えるガイドメロディ」ではなく、
なんらかの方法で歌唱すべき階名を表示することなのです。

↓正式名称「見えるガイドメロディ」

採点開発者突撃インタビュー!Vol.2 精密採点II編【後編】|カラオケDAM公式

できれば五線譜、もしくは階名付きのピアノロールを出したい。

そのためには、現在再生している、本来は採点に使用されているデータを横取りし、
さらに画面表示を横取りしなければなりません。

研究に研究を重ね、ようやく全てのデータの取得が完了し、
画面表示の基礎部分ができたので、これから画面表示機能を精緻化させていく予定です。

そのファーストステップとして、DTMをやっていた人なら誰も知っている
「TMIDI Player」に内蔵されている、鍵盤表示画面を実装してみました。

TMIDI Playerには鍵盤表示画面内に、
各チャンネルの和音を解析してコード表示する機能もあるんですよね。
これと同じようにコードを表示してやれば、伴奏補助機能がつくんですよ。
これをどうしても実装したくてな。

↓TMIDIPlayerの鍵盤表示画面。A06のところに「Cm」って出てる

 

実際に実装した鍵盤画面(WIP)

 

 

ここまでできたんだからあと少しだわ。
なんか音符長が想定より長いトラックがあったりして表示が変だけど、
とりあえずメロディがちゃんと動いてるのは見えると思う

 

っていうけど大変なのよこれ。

その辺の大変な技や、リバースエンジニアリングの手法などは、

5月に開催予定の技術書典16(2024/05/26)の新刊としてまとめて発表したいと思いますので興味のある方はぜひお買い求めください(自分の首を絞めた)