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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Katsuhiko Kageyama
September 04, 2025
Technology
180
1
Share
mruby(PicoRuby)で ファミコン音楽を奏でる2
Katsuhiko Kageyama
September 04, 2025
More Decks by Katsuhiko Kageyama
See All by Katsuhiko Kageyama
PicoRuby as a Multi-VM Operating System
kishima
1
380
PCとPicoRuby-ESP32間でシリアルファイル転送
kishima
1
49
M5UnifiedとPicoRubyで楽しむM5シリーズ
kishima
0
490
Rubyでmicro-ROS!
kishima
0
140
mruby(PicoRuby)で ファミコン音楽を奏でる
kishima
2
750
PicoRuby/R2P2で自分だけのコンピュータを作ろう
kishima
1
490
mrubyと micro-ROSが繋ぐロボットの世界
kishima
3
1k
わたしのRubyKaigi Effect
kishima
2
240
思い出の技術書 F-BASICの世界
kishima
0
49
Other Decks in Technology
See All in Technology
Databricks における 生成AIガバナンスの実践
taka_aki
1
280
Chart.js が簡単に使えるようになっていたので OGP 画像生成に使った話
kamekyame
0
140
Javaで学ぶSOLID原則
negima
1
270
Cloud Run のアップデート 触ってみる&紹介
gre212
0
300
Diagnosing performance problems without the guesswork
elenatanasoiu
0
160
Gradle×GitHub_ActionsでCI時間を約50%短縮 ジョブ分割の設計と落とし穴 / Cutting CI Time by ~50% with Gradle and GitHub Actions: Job-Splitting Design and Pitfalls
takatty
0
620
Java正規表現エンジン(NFA)の仕組みと パフォーマンスを維持するための最適化手法
takeuchi_132917
0
180
Ruby::Boxでできること、Refinementsでできること
joker1007
3
380
大学生が本気でDatabricksを活用してDiscordサークルをデータ駆動させてみた
phantomjuju
1
340
「気づいたら仕事が終わっている」バクラクAIエージェント本番運用の裏側 / layerx-bakuraku-aie2026
yuya4
18
9.1k
Terraformモジュールは、なぜ「魔境」化するのか
hayama17
1
180
GoとSIMDとWasmの今。
askua
3
490
Featured
See All Featured
Utilizing Notion as your number one productivity tool
mfonobong
4
310
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
150
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
280
Technical Leadership for Architectural Decision Making
baasie
3
390
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
150
Test your architecture with Archunit
thirion
1
2.3k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
23k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
22k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
170
エンジニアに許された特別な時間の終わり
watany
107
250k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
350
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
190
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の戦闘のドラム音で使ってるらしい ◦ どおりでなんかうまく鳴らないはずだ・・・