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
140
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
40
M5UnifiedとPicoRubyで楽しむM5シリーズ
kishima
0
410
Rubyでmicro-ROS!
kishima
0
110
mruby(PicoRuby)で ファミコン音楽を奏でる
kishima
2
700
PicoRuby/R2P2で自分だけのコンピュータを作ろう
kishima
1
410
mrubyと micro-ROSが繋ぐロボットの世界
kishima
3
960
わたしのRubyKaigi Effect
kishima
2
210
思い出の技術書 F-BASICの世界
kishima
0
40
リハビリmruby
kishima
1
310
Other Decks in Technology
See All in Technology
GitHub Advanced Security × Defender for Cloudで開発とSecOpsのサイロを超える: コードとクラウドをつなぐ、開発プラットフォームのセキュリティ
yuriemori
1
110
Zephyr(RTOS)でOpenPLCを実装してみた
iotengineer22
0
140
ADK + Gemini Enterprise で 外部 API 連携エージェント作るなら OAuth の仕組みを理解しておこう
kaz1437
0
220
OPENLOGI Company Profile for engineer
hr01
1
61k
CloudFrontのHost Header転送設定でパケットの中身はどう変わるのか?
nagisa53
1
210
SaaSの操作主体は人間からAIへ - 経理AIエージェントが目指す深い自動化
nishihira
0
110
GitHub Actions侵害 — 相次ぐ事例を振り返り、次なる脅威に備える
flatt_security
8
5.2k
OpenClawでPM業務を自動化
knishioka
1
280
Why we keep our community?
kawaguti
PRO
0
310
FASTでAIエージェントを作りまくろう!
yukiogawa
4
140
開発チームとQAエンジニアの新しい協業モデル -年末調整開発チームで実践する【QAリード施策】-
kaomi_wombat
0
260
The essence of decision-making lies in primary data
kaminashi
0
120
Featured
See All Featured
KATA
mclloyd
PRO
35
15k
A Tale of Four Properties
chriscoyier
163
24k
Paper Plane
katiecoart
PRO
0
48k
Agile that works and the tools we love
rasmusluckow
331
21k
The Spectacular Lies of Maps
axbom
PRO
1
650
The Pragmatic Product Professional
lauravandoore
37
7.2k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.1k
How to train your dragon (web standard)
notwaldorf
97
6.6k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.2k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
250
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.5k
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の戦闘のドラム音で使ってるらしい ◦ どおりでなんかうまく鳴らないはずだ・・・