Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
mruby(PicoRuby)で ファミコン音楽を奏でる2
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Katsuhiko Kageyama
September 04, 2025
Technology
1
120
mruby(PicoRuby)で ファミコン音楽を奏でる2
Katsuhiko Kageyama
September 04, 2025
Tweet
Share
More Decks by Katsuhiko Kageyama
See All by Katsuhiko Kageyama
PCとPicoRuby-ESP32間でシリアルファイル転送
kishima
1
32
M5UnifiedとPicoRubyで楽しむM5シリーズ
kishima
0
350
Rubyでmicro-ROS!
kishima
0
91
mruby(PicoRuby)で ファミコン音楽を奏でる
kishima
2
670
PicoRuby/R2P2で自分だけのコンピュータを作ろう
kishima
1
280
mrubyと micro-ROSが繋ぐロボットの世界
kishima
3
910
わたしのRubyKaigi Effect
kishima
2
190
思い出の技術書 F-BASICの世界
kishima
0
35
リハビリmruby
kishima
1
300
Other Decks in Technology
See All in Technology
ファインディの横断SREがTakumi byGMOと取り組む、セキュリティと開発スピードの両立
rvirus0817
1
1k
~Everything as Codeを諦めない~ 後からCDK
mu7889yoon
3
250
MCPでつなぐElasticsearchとLLM - 深夜の障害対応を楽にしたい / Bridging Elasticsearch and LLMs with MCP
sashimimochi
0
140
Frontier Agents (Kiro autonomous agent / AWS Security Agent / AWS DevOps Agent) の紹介
msysh
3
140
Azure Durable Functions で作った NL2SQL Agent の精度向上に取り組んだ話/jat08
thara0402
0
140
ZOZOにおけるAI活用の現在 ~開発組織全体での取り組みと試行錯誤~
zozotech
PRO
4
4.8k
IaaS/SaaS管理における SREの実践 - SRE Kaigi 2026
bbqallstars
4
1.6k
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
5
1.5k
仕様書駆動AI開発の実践: Issue→Skill→PRテンプレで 再現性を作る
knishioka
2
570
Bill One急成長の舞台裏 開発組織が直面した失敗と教訓
sansantech
PRO
1
200
10Xにおける品質保証活動の全体像と改善 #no_more_wait_for_test
nihonbuson
PRO
1
150
Tebiki Engineering Team Deck
tebiki
0
24k
Featured
See All Featured
Site-Speed That Sticks
csswizardry
13
1.1k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
370
Abbi's Birthday
coloredviolet
1
4.7k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
450
Designing for humans not robots
tammielis
254
26k
Tell your own story through comics
letsgokoyo
1
800
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.4k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
420
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
0
250
Embracing the Ebb and Flow
colly
88
5k
Git: the NoSQL Database
bkeepers
PRO
432
66k
Transcript
mruby(PicoRuby)で ファミコン音楽を奏でる2 2025/09/04 Omotesando.rb kishima
自己紹介 ID:@kishima (株)aptpodというIoTの会社で、ロボット制御など組み込み 系やのお仕事をしています 最近はROS/C++/Rust/Pythonにふれる機会が多いです mruby好きで、色々趣味で開発したりしてます
ファミコンの音楽っていいですよね ESP32でも今後作るプロジェクトでも同じような音を鳴らしたい 今回の準備の途中で、ファミコン 実機とかカセットとか買いました
Rubyでファミコンといえば … Optcarrot Rubyのベンチマークでよく使わているRubyによるファミコンエミュレータ実装 音声にも対応してた ただESP32上で実用的な速度で動かすことはおそらく困難 特に音の部分だけ使いたい
どうやってファミコンの音は鳴るか? APUと呼ばれる音源をCPUから操作して音を出します
ESP32で動くエミュレータを改造 esp_8_bit というものを参考に勉強 (https://github.com/rossumur/esp_8_bit) 中身は昔からあるpure Cのnofrendoというエミュレータを利用していた
NSFファイル ファミコンの音楽部分のみを抜粋した形式 内部はファミコンで動作するプログラムがほぼそのまま格納されている 楽譜というよりプログラムであり、再生のためには部分的なファミコンエミュレータ が必要になる これなら比較的簡単に鳴らせないか?
試行錯誤 NSFのエミュレータをnofrendoで動かそうとしたが簡単にはいかず レジスタやメモリの管理をきちんとしないといけない 時間がなくなってきていたので、方針変更 APUを動かすために最低限必要なものは・・・?
APUレジスタ操作さえ再現できればいい レジスタ操作の内容と実行タイミングをログに記録
最終的な構成 APUレジスタ操作ログファイルを生成 レジスタログをmrubyで再生してAPUエミュで波形生成 60Hzでレジスタ操作と音声バッファへの書き出しを行う
主なRubyコード https://github.com/kishima/esp32_nes_apu_mruby
レジスターログの内容
デモ R2P2 PicoRubyを起動 play.rb を使って、 フラッシュ上のレジスタログファイルを再生し、 I2S出力します
MIDIキーボードを繋ぐ
課題、やりたいこと • 正確な60Hzループ ◦ 音声出力バッファの枯渇が起きていそう ◦ 原因はGCか? ◦ ESP32のタイマで駆動できるように •
使いやすいインタフェース ◦ 重い処理はC言語で ◦ BGMとSEとして使えるように ◦ Family mruby v2 の音源として • PCM音源処理の実装 ◦ FF3の戦闘のドラム音で使ってるらしい ◦ どおりでなんかうまく鳴らないはずだ・・・