using fm-synth chip on luna-88k2, at nbug meeting 2015-10
TRANSCRIPT
NBUG 2015年10⽉例会
FM音源の調べ on LUNA
Nagoya *BSD Users' GroupKenji Aoyama / ⻘⼭ 健治
Twitter: @ao_kenji
夏休み自由研究
2
きっかけはカーネル/VM探検隊@名古屋
3
LUNAと音源
• LUNA(68K無印)にはSSG(YM2149)が載っている–ユーザランドからどうやって使えたのだろう
か?
• 88K2に装着した86音源ボードにもFM音源チップが載ってます
4
FM音源とは?(ざっくり)
• ’80〜’90年代のパソコンで流⾏– その後、いわゆるガラケーでも使われていた
• FM(Frequency Modulation)を応用した音色合成方式
• 少ないパラメータで色々な音が出せる– マシンパワー・メモリが少なくても良い
• 今でも愛好者あり?
5
YM2608(OPNA)とは?
• 86音源ボードに搭載されているFM音源チップ
• FM音源部– 4オペレータ– 同時発音数6音 ステレオ
• SSG– 3音モノラル
• ADPCM• リズム音源
画像出典: Wikipedia
6
OPNAのいじり方
• アドレスレジスタとデータレジスタによる間接アクセス方式
• 例によってC-bus専用mmapすれば、とりあえずいじれる
• 音色を設定して、Key-On/Offしてやると一応音がでた!
出展:「YM2608 OPNA アプリケーションマニュアル」ヤマハ株式会社
7
さて、演奏は?
• せっかくなので何か曲を演奏させよう• コンピュータで演奏と言えば、
MML(Music Macro Language)でしょ• parserを自分で作らないといけない?
• と思って色々⾒ていたら…
8
いいもの発⾒: A tiny MML parser
http://www.cubeatsystems.com/firmware/tinymml/
9
A tiny MML parser: Features
• Really simple.– The API has only three functions.– It consists of only four small modules.
• Highly portable.– Compatible with C89.– No dependencies. (even libc!)– No dynamic memory allocation. (no need
a operating system!)• …
http://www.cubeatsystems.com/firmware/tinymml/
10
A tiny MML parser: API
http://www.cubeatsystems.com/firmware/tinymml/api.html
11
演奏プログラムを作ってみる
https://github.com/ao-kenji/opnaplay/
• ‘A tiny MML parser’ でparseし、OPNAのレジスタを叩いて演奏
12
演奏例
% ./opnaplay 't120 o4 l4 aab2 aab2 ab>c<b ab8a8f2 ecef ee8c8<b2> ab>c<b ab8a8f2 ecef ee8c8<b2> aab2 aab2 efb8a8f e1'
※FM音源の音色パラメータは、VALSOUND FM-Library / (C)Takeshi Abo.http://www.valsound.com/のものを許可を得て使用しています。
http://www.nk-home.net/~aoyama/tmp/sakura-2.mp3琴http://www.nk-home.net/~aoyama/tmp/sakura-1.mp3フルートhttp://www.nk-home.net/~aoyama/tmp/sakura-0.mp3ピアノ
「さくらさくら」
13
To be continued ?
• 単音では寂しいので和音にするには?
• 過去の資産(作品)が演奏できないか?– PC-9801用の音源ドライバ(FMP, PMD)が有
名なようだが、ソースはなさそう– OPNAのレジスタ出⼒ダンプのような「S98
フォーマット」があるようなので研究中