2026年10月2日金曜日

Game Boy の VGM から JavaScript への変換後に、 生成AIの補正が有効だった事について

Game Boy の VGM から JavaScript への変換後に、 生成AIの補正が有効だった事について


Tetorica FM2612 Playground には GameBoy や Genesis の VGM ファイル から JavaScript へ変換する機能を持っています。

この機能を使って、変換したjavascrpt の コードを元に、 Playground 上で、再生することは可能なのですが、これを、
音楽的な文脈にそったものにしようとすると、アルゴだけでは難しい状態です。

そこで、 生成AIの出番なのですが..

以前、VGM から 楽譜を生成するので試した事があったのですが、Real Book 的なリードシートへの変換など、文脈を理解した変換がCodexで良い感じに出来ていたのを思い出しまして..

実際に JavaScript を渡して変換させてみました

[変換結果]
https://kyorohiro.github.io/tetorica-fm-archive/gameboy/Final-Fantasy-Legend-II/ex01-The-Legend-Begins.html

みてもらえば、わかりますが、mml モードは、とても読みやすく、これで良いような気がしています

--> 最後に生成AIをかけて、人向けに文脈理解を入れたコードに変換するのが正解っぽい

[Tetorica FM2612 Playground]
生成されたコードはこちらで試せます

itch io 版
https://kyorohiro.itch.io/tetorica-fm2612-playground

pages 版 
https://kyorohiro.github.io/hello_ymfm_wasm/playground/index.html

2026年9月1日火曜日

Tetorica FM2612 Playground を 作成しました

Tetorica FM2612 Playground を作成しました。



pages
https://kyorohiro.github.io/hello_ymfm_wasm/playground/index.html

https://kyorohiro.github.io/hello_ymfm_wasm/index.html

itch.io
https://kyorohiro.itch.io/tetorica-fm2612-playground


JavaScript から YM2612 を鳴らして、

FM音源の仕組みを試したり、ゲーム用の音や短い音楽を作ったりできる

ブラウザ上の Playground です。


元々は、

「YM2612 を理解したい」

「ブラウザやゲームから簡単に使えるようにしたい」

という目的で作り始めました。


YM2612 のエミュレーションには ymfm を使用し、

WebAssembly (wasm) 経由でブラウザから動かしています。


最初は単純に、

- YM2612 のレジスタを書き込む

- 音色を設定する

- 音を鳴らす


程度の実験環境でしたが、

作り続けるうちに、


- JavaScript Live Coding

- FM Preset

- PSG

- Sample Playback

- Stream Playback

- Audio Effects

- Parallel FX

- Noise Generator

- liveLoop

- scale / chord

- random / cycle

- control


など、少しずつ機能が増えてきました。


例えば、

setBpm(120);

fm.setPreset(CH2, FM_PRESETS["two-op-bell"]);

liveLoop("lead", async () => {
const notes = scale("E4", "minorPentatonic", 2);
//await nextBeat();
await play(choose(notes), {
channel: CH2,
duration: 0.08,
});
await beat(cycle([0.04, 0.04, 0.08]));
});

[以下より試せます]
https://kyorohiro.github.io/hello_ymfm_wasm/playground/index.html?ex=fx-loop-major

のようなコードを書いて、その場で音を鳴らすことができます。


また、YM2612 だけでは作りにくかった

波、風、雨などの環境音についても、

Noise Generator を追加して試せるようにしました。

[以下より試せます]
https://kyorohiro.github.io/hello_ymfm_wasm/playground/index.html?ex=noise-ocean


ノイズ、フィルター、音量、パンなどを組み合わせて音を作れます。


開発を始めた当初は、

YM2612 そのものを再現して理解することを強く意識していました。

しかし実際に色々な音を作ってみると、

「YM2612 を正確に扱うこと」

と

「ゲームや作品の中で使いやすい音を作ること」

は必ずしも同じではないと感じるようになりました。


現在は YM2612 を中心にしつつ、

FM
PSG
Noise
Sample
FX

などを組み合わせて、

ブラウザ上で音を作って試せる環境として育てています。


Sonic Pi や Gibber、Wavepot など、

コードから音を作る環境を参考にしながら、

普通の JavaScript の書き方をできるだけ残しているのも特徴です。


まだ実験中の部分も多いですが、

FM音源の学習や、ゲーム用サウンドの実験、

短い音楽や環境音の作成などに使えるようにしていきたいと思っています。





[Playground]
https://kyorohiro.github.io/hello_ymfm_wasm/playground/index.html

[Itch.io]
https://kyorohiro.itch.io/tetorica-fm2612-playground

[Code]
https://github.com/kyorohiro/hello_ymfm_wasm/


また、Playground で試すだけでなく、自作ゲームやブラウザアプリへ FM 音源を組み込めるように、ymfm を WebAssembly 化した WASM と、組み込み用のサンプル・テンプレートも配布しています。

AudioWorklet や WASM 周りを一から構築しなくても、テンプレートをベースにして比較的簡単に YM2612 の FM 音源をゲームやWebアプリへ組み込むことができます。

WASM・サンプル・テンプレートは GitHub Releases / itch io  から入手できます。




2026年6月13日土曜日

Tetorica Retro Player を作成しました

Tetorica Retro Player を作成しました。

https://kyorohiro.itch.io/tetorica-retro-player


元々は、昔集めた動画や、ZIPで固めた漫画を、ブラウン管テレビやレトロゲーム機のような雰囲気で再生してみたい。

そんな願望から作り始めたアプリです。

動画や画像を読み込み、

  • CRT(ブラウン管)
  • PC-98風
  • Game Boy風
  • Neon
  • Lo-Fi Audio
  • Radio Mode

などのエフェクトを適用して再生できます。

開発当初はシンプルなレトロフィルターを想定していましたが、作り続けるうちに、

  • Comic Viewer
  • Recording
  • Window Capture
  • Chrome Extension
  • Audio Effects
  • Phosphor Dot

など、多くの機能が追加されました。

特に Phosphor Dot の実装では、CRTシェーダ界隈で有名なモアレ問題にまで到達し、自分でも驚きました。

実際に使い込んでみると、

「正確なブラウン管再現」と
「気持ち良く楽しめること」

は必ずしも同じではなく、レトロな雰囲気を楽しむための道具として考えるようになりました。

AIの支援を受けながら開発したことで、以前なら半年以上かかっていたであろう試行錯誤を短期間で繰り返すことができました。

結果として、

「昔集めたコンテンツを、自分の好きなレトロな見え方で楽しみたい」

という当初の目的は十分に達成できたと思います。

ひとまず Tetorica Retro Player は一区切りとして、次の作品作りへ進もうと思います。

[Code]
https://github.com/kyorohiro/tetorica-retro-player

[Github.io] - PWA Demo

[Itch Page] Desktop and Android and Web  

[Chrome Plugin] Chrome Plugin
https://chromewebstore.google.com/detail/tetorica-retro-player/clnpmlgahomdkphcpcajbemodneoecna


About Demo

The following demo uses material from:

Comic Book + Candy #12 (1963)
Available from ComicBookPlus:
https://comicbookplus.com/?dlid=28525

Big Buck Bunny
https://peach.blender.org/

2020年5月3日日曜日

mbedtls dart の 開発を始めた web wasm ffi io flutter

C言語 で開発した機能を、Dart をターゲットとして、Web でも サーバーでも、そして Flutter  でも使えるようにしたい。

そこで、mbedtls の 暗号化の部分を Dart 向けのPackageを作りながら、
実現方法を試行錯誤する事にした。


dart:io 向けには dart:ffi を。 webdeb 向けには wasm を通して
C言語で書かれた機能を、Dartに移植する予定だ。

[REF]

開発中のコード
https://github.com/kyorohiro/mbedtls_dart

mbedtls
https://github.com/ARMmbed/mbedtls





2017年12月4日月曜日

About Dart x SDL on Mac

Dart の Native Extensions を利用して、 SDL を用いたマルチプラットフォームのゲーム開発環境を作れるか検証してみた。


結論からいくと、 「Mac 上で動作する SDL x Dart の アプリは動作させることが難しいよ」 と言うことです。 Windowsはできる。

ただ、時間をかければできるかなぁとも思いました。
※ Dartはゴリゴリ開発されているものなので、近い未来には、変わっているかもしれません。


# Dart とは

Serverサイド や SmartPhone で動作する VM をもち、 Browser上で動作する JavaScriptを出力できる 凄い奴です。
https://www.dartlang.org/


# Native Extensions とは

コマンドライン向けのVMから、 Shared Library と連携して、Nativeの機能をDartから叩くのに使用します。

https://www.dartlang.org/articles/dart-vm/native-extensions

# SDL とは

クロスプラットフォームの Low level のライブラリーです。 audio, keyboard, mouse, joystick, graphics hardware を扱うことができます。

ゲームを作成するのに必要な機能がサポートされており、スマフォの環境も含めて、ほとんどの環境で動作します。


# 試したこと


## Dart と SDLを組み合わせて、 Dartで書いたゲームをありとあらゆる PFで動作させることができないか?


Dart と SDLを組み合わせて、 Dartで書いたゲームをありとあらゆる PFで動作させることができないか? と考えました。

Dartには、 async-await がサポートされていたりして、 ロジックが書きやすいです。ゲームスクリプトとか、 Dartがあればあればいらないじゃん。 Dartがゲーム用のスクリプトといって問題ないくらい。気軽にロジックがかけるではないか..


## Dart


#### MAC で

https://github.com/kyorohiro/dart.sdltest

```
git clone https://github.com/kyorohiro/dart.sdltest
cd dart.sdltest
cd doc_sdl2
ninja -f build.osx.ninja
cd ..
sh build.sh
dart main.dart
```


#### Windows で


https://github.com/kyorohiro/dart.sdltest.vc

```
git clone https://github.com/kyorohiro/dart.sdltest.vc
cd dart.sdltest.vc
start Project3.sln
...
Debugモードでビルド.....
...
cd ..
git clone https://github.com/kyorohiro/dart.sdltest
cd dart.sdltest
copy {ビルドしたDLLとLib と SDL関連のDLL} ./
dart main.dart
```

# どうなったか?

Windowsでは、期待通りに動作します。
つまり、Dart で SDLアプリを作れます。



しかし、MACでは以下のようなエラーがでます。

とすると、 WARNING: nextEventMatchingMask should only be called from the Main Thread! This will throw an exception in the future.
と警告がでてそれ以上何もできません。

Mac では UI 関連のイベントは、 MainThreadで処理しなくてはならないからです。



# もしも macで Dart x SDLを実現したいなら

DartVM に手を入れて MainThread を、制御できるようにする。
DartVM と プロセスを分けて、MainThreadを描画ように利用する。
などなど。

Flutter のコードを見ると、 DartVM を組み込んで アレコレしているので、
参考にしたり、 そのまま利用したりすると良いかもしれません




Game Boy の VGM から JavaScript への変換後に、 生成AIの補正が有効だった事について

Game Boy の VGM から JavaScript への変換後に、 生成AIの補正が有効だった事について Tetorica FM2612 Playground には GameBoy や Genesis の VGM ファイル から JavaScript へ変換する機能を持って...