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)で ファミコン音楽を奏でる
Search
Katsuhiko Kageyama
August 28, 2025
Technology
2
700
mruby(PicoRuby)で ファミコン音楽を奏でる
Katsuhiko Kageyama
August 28, 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)で ファミコン音楽を奏でる2
kishima
1
140
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
Amazon Qはアマコネで頑張っています〜 Amazon Q in Connectについて〜
yama3133
1
150
Phase03_ドキュメント管理
overflowinc
0
2.9k
「捨てる」を設計する
kubell_hr
0
420
Change Calendarで今はOK?を仕組みにする
tommy0124
1
120
Bref でサービスを運用している話
sgash708
0
200
脳が溶けた話 / Melted Brain
keisuke69
1
1.1k
「AIエージェントで変わる開発プロセス―レビューボトルネックからの脱却」
lycorptech_jp
PRO
0
160
私がよく使うMCPサーバー3選と社内で安全に活用する方法
kintotechdev
0
130
【社内勉強会】新年度からコーディングエージェントを使いこなす - 構造と制約で引き出すClaude Codeの実践知
nwiizo
27
13k
Phase01_AI座学_基礎
overflowinc
0
4.4k
開発チームとQAエンジニアの新しい協業モデル -年末調整開発チームで実践する【QAリード施策】-
qa
0
370
俺の/私の最強アーキテクチャ決定戦開催 ― チームで新しいアーキテクチャに適合していくために / 20260322 Naoki Takahashi
shift_evolve
PRO
1
460
Featured
See All Featured
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.1k
Design in an AI World
tapps
0
180
How to make the Groovebox
asonas
2
2k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
320
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1k
Paper Plane
katiecoart
PRO
0
48k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
160
GitHub's CSS Performance
jonrohan
1032
470k
Bash Introduction
62gerente
615
210k
The Cost Of JavaScript in 2023
addyosmani
55
9.8k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
64
54k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Transcript
mruby(PicoRuby)で ファミコン音楽を奏でる 2025/08/28 Ruby Association Activity Report 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レジスタ操作ログファイルを生成 レジスタログをmrubyで再生してAPUエミュで波形生成 60Hzでレジスタ操作と音声バッファへの書き出しを行う
主なRubyコード https://github.com/kishima/esp32_nes_apu_mruby
レジスターログの内容
デモ R2P2 PicoRubyを起動 play.rb を使って、 フラッシュ上のレジスタログファイルを再生し、 I2S出力します
課題、やりたいこと • 正確な60Hzループ ◦ 音声出力バッファの枯渇が起きていそう ◦ 原因はGCか? ◦ ESP32のタイマで駆動できるように •
使いやすいインタフェース ◦ 重い処理はC言語で ◦ BGMとSEとして使えるように ◦ Family mruby v2 の音源として • MIDI音源にするのも面白そう • PCM音源処理の実装 ◦ FF3の戦闘のドラム音で使ってるらしい ◦ どおりでなんかうまく鳴らないはずだ・・・