ym2151でfm音源演奏

34
YM2151FM音源演奏 七瀬 (@nanasetomona) 2015/07/14

Upload: tomona-nanase

Post on 07-Aug-2015

285 views

Category:

Devices & Hardware


0 download

TRANSCRIPT

Page 1: YM2151でFM音源演奏

YM2151でFM音源演奏

七瀬 (@nanasetomona)

2015/07/14

Page 2: YM2151でFM音源演奏

@nanasetomona

https://github.com/nanase

Page 3: YM2151でFM音源演奏

きっかけ

• 「FM音源伝説」…FM音源LSIのガチャガチャ

▫ 秋葉原 東京ラジオデパート 1F

• 80年代にPCやゲーム機に内蔵の FM音源 および DAC

• 1月に YM2203C 入手

Page 4: YM2151でFM音源演奏

YM2151

• 6月にYM2151を入手

▫ 専用DACのYM3012も同時入手

▫ YAMAHA 1983年製造、ステレオデジタル

▫ OPM(FM Operator type M)、8ch、4オペレータ

▫ 擬似ノイズ発生器、LFO搭載

▫ クロック入力 3.58 [MHz]

▫ 動作電圧 5.0 [V]

Page 5: YM2151でFM音源演奏

YM2151

• 搭載実績

▫ アーケードゲーム (80年代中頃~90年代前半)

▫ MSXの周辺機器

▫ X68000

Page 6: YM2151でFM音源演奏

FM音源とは?

• FM変調を応用した波形発生法

• 単純な正弦波の発生を考える

𝑦(𝑡) = 𝐴 sin 2𝜋𝑓𝑡

-1

0

1

𝑡

𝑦 𝑡

Page 7: YM2151でFM音源演奏

FM音源とは?

• 𝐴 は振幅 (ここでは 1)

• 2𝜋𝑓 は角速度(≒周波数)、2𝜋𝑓𝑡 は位相

▫ 位相に注目して考える

𝑦(𝑡) = 𝐴 sin 2𝜋𝑓𝑡

-1

0

1

𝑡

𝑦 𝑡

Page 8: YM2151でFM音源演奏

FM音源とは?

• 位相の歪み = 時計の針が速く、遅くなる

• 位相の変化を乱すような別の正弦波を加える

𝑦(𝑡) = 𝐴 sin(2𝜋𝑓1𝑡 + 𝛽 sin 2𝜋𝑓2𝑡)

-1

0

1

𝑡

𝑦 𝑡

(𝛽 = 1)

Page 9: YM2151でFM音源演奏

FM音源とは?

• 𝑓1, 𝑓2 はそれぞれ キャリア、モジュレータ周波数

• 𝛽 は変調指数 = 歪みの強さ

▫ 𝛽 を大きくすると複雑な波形が発生

𝑦(𝑡) = 𝐴 sin(2𝜋𝑓1𝑡 + 𝛽 sin 2𝜋𝑓2𝑡)

-1

0

1

𝑡

𝑦 𝑡

(𝛽 = 2.5)

Page 10: YM2151でFM音源演奏

FM音源とは?

• 複数(0個以上)のモジュレータ入力を持つ

正弦波発生器を オペレータ と呼ぶ

▫ 通常は音量を調整するための乗算器も内蔵

• 通常はオペレータを複数段重ねて使用する

オペレータ オペレータ

オペレータ

オペレータ

フィードバック

モジュレーション

モジュレーション

モジュレーション

出力

Page 11: YM2151でFM音源演奏

FM音源とは?

• オペレータの繋ぎ方を アルゴリズム と呼ぶ

▫ 直列に近い形ほど複雑な音となる

▫ 並列に近い形ほど軽い音となる

オペレータ オペレータ

オペレータ

オペレータ

フィードバック

モジュレーション

モジュレーション

モジュレーション

出力

Page 12: YM2151でFM音源演奏

FM音源の利点

• 複雑な波形を生成可能

▫ 矩形波や三角波よりも多彩な音作りが可能

▫ パイプオルガン、エレピ、金属音 の再現が強い

• 少ないデータ量で生成可能

▫ PCM音源は波形そのものを記録するためデータ多

▫ FM音源はキャリア、モジュレータに関わるデータのみ

▫ 初期の携帯電話に搭載(着信音など)

Page 13: YM2151でFM音源演奏

FM音源の欠点

• データから生成される波形の予想がつきにくい

▫ 僅かな誤差で全く異なる波形となる場合もあり

▫ 理想波形を作るにはFM音源の知識が必要

• ピアノ、パーカッションは苦手

Page 14: YM2151でFM音源演奏

FM2151に必要なもの

• 5.0 [V] 電源

• 4.0 [MHz] クロック

• DAC (YM3012)

• オペアンプ

• 制御マイコン

• シーケンサ

• 演奏データ

Page 15: YM2151でFM音源演奏

電源

• USB 給電により供給

▫ PC から給電するとノイズや電流不足の原因となる

▫ (YM2151単体でも 110 [mA] 程度の消費)

▫ 今回はモバイルブースターを使用

Page 16: YM2151でFM音源演奏

オペアンプ

• LMC6484AIN を使用

▫ ナショナルセミコンダクタ製

▫ CMOSタイプ、単電源 5.0 [V] のみで動作

▫ DACの他、ボルテージフォロワとして使用

Page 17: YM2151でFM音源演奏

余談: オペアンプは重要

LMC6484AIN (単価: 250円)

LM324N (単価: 38円)

符号反転時に パルスが発生

Page 18: YM2151でFM音源演奏

余談: オペアンプは重要

LMC6484AIN (単価: 250円)

LM324N (単価: 38円)

符号反転時に パルスが発生

Page 19: YM2151でFM音源演奏

制御マイコン

• NUCLEO-F401RE

▫ USB給電、プログラムライタ付き

▫ mbedで開発 (webIDE、C++)

▫ Arduino互換ピン装備

▫ フラッシュメモリ 512KB

▫ SRAM 96KB

▫ 最大 84 [MHz] 動作

▫ 1,500円ほどで購入

Page 20: YM2151でFM音源演奏

クロック

• F401REから 4.0 [MHz] を発振

▫ プログラム上では 1.0 [MHz] が最大

▫ プログラムライタ上のクリスタル 8.0 [MHz] を使用 (2分周)

▫ CPUの16 [MHz]も使用可

RC発振のため精度は悪い

Page 21: YM2151でFM音源演奏

データ送信

• PCから書き込みデータをシリアル通信

▫ 通信速度は 115,200 bps (14.4 kB/s)

▫ これより高速だと頻繁に同期が壊れる

• コマンド、アドレス、データの計3バイト1メッセージ

▫ コマンドはリセットや書き込みのフラグ用

▫ アドレスは $00 – $FF

▫ データも同様

Page 22: YM2151でFM音源演奏

YM2151のレジスタ構成

• アドレス空間は256バイト

• オペレータや 周波数設定など

• データバスを介して 書き込みを行う (今回は書き込みのみ)

Page 23: YM2151でFM音源演奏

YM2151のクロック入力

• 今回は 4.0 [MHz]、標準は 3.58 [MHz]

• 3.579545 [MHz] は NTSC で頻繁に使われる

▫ 外部と同一クロックを用いた回路の 簡略化が図られていた

▫ NTSC と PAL とではデータ送信のタイミングが異なる

▫ PALでは 4.43362 [MHz]

• 発音周波数に影響し、11.7% ほど高音になる

▫ およそ 2 音くらい (ド → レ)

Page 24: YM2151でFM音源演奏

YM2151のウェイト時間

• レジスタの書き込みに時間がかかる

▫ マスタークロック ΦM = 4 [MHz] 時

▫ アドレス: 17サイクル = 4.25 [μs]

▫ データ: 83サイクル = 20.75 [μs]

▫ 初期化時: 77サイクル = 19.25 [μs]

• 本来はYM2151からビジーフラグを読み取り

書き込み完了を検知する (今回は省略)

Page 25: YM2151でFM音源演奏

YM2151鳴動までの手順

1. イニシャルクリア (IC = L)

2. オペレータ設定 (TL, ML)

3. エンベロープ設定 (AR, D1R, D2R, D1L, RR)

4. パン設定 (L ch = 1, R ch = 1)

5. 周波数設定 (KC)

6. ノートオン命令 (KeyON/OFF, ChNum)

音色 指定時

発音毎

Page 26: YM2151でFM音源演奏

シーケンサ

• C# でMIDI→YM2151データに変換

• MidiUtils がシーケンスを行う

https://github.com/nanase/MidiUtils

• MIDIデータは8音8chのものを用意しておく

Page 27: YM2151でFM音源演奏

YM2151シールド

Page 28: YM2151でFM音源演奏

回路図

Page 29: YM2151でFM音源演奏

実際に鳴らしてみた

https://www.youtube.com/watch?v=Yv1CD4-HYUY

Page 30: YM2151でFM音源演奏

課題 (1)

• 128音色+ドラム音色がないと発音できない

• ドラムパートが 1ch 分しかない

▫ 同時に2つ以上の打楽器を鳴らせない

• リアルタイムにMIDI変換しているため、 またはシリアル通信のため遅延が発生

▫ 一度に多量のデータを送らない工夫が必要

▫ SRAMにあらかじめデータをキャッシュすれば良い?

Page 31: YM2151でFM音源演奏

課題 (2)

• ノイズ発生器の動作の解析

▫ FM音源とノイズは同時に発音可能

▫ 一部エンベロープはノイズに対しても有効?

• USBで給電すると 4.2 – 4.0 [V] まで電圧が降下

▫ 原因不明

Page 32: YM2151でFM音源演奏

参考資料 (1) • YM2203・YMZ294・SP0256を使ったハードウエアMIDI音源の製作

http://park19.wakwak.com/~gadget_factory/factory/miditalk/

• YM2203のピン機能 -滴了庵日録

http://d.hatena.ne.jp/licheng/20131110/p1

• MIDI音源の自作 YM-2203 OP-N 2個使用

http://mars.bellstek.net/s/midi/04/00.htm

• YM2608 OPNA アプリケーションマニュアル

http://hackipedia.org/Platform/Sega/Genesis/hardware,%20FM%20synthesis,%20

YM2608/pdf/YM2608J.PDF

Page 33: YM2151でFM音源演奏

参考資料 (2) • NucleoのClock - 電子工作専科のぐうたラボ

http://denshikousakusenka.blog.fc2.com/blog-entry-33.html

• FM音源レジスタマップX68k

http://www16.atwiki.jp/mxdrv/pages/24.html

• YM2151 Datasheet

http://www.msxarchive.nl/pub/msx/docs/datasheets/ym2151synthesis.pdf

http://map.grauw.nl/resources/sound/yamaha_ym2151_datasheet.pdf

Page 34: YM2151でFM音源演奏

参考資料 (3) • FM音源伝説 | FM音源を愛するすべての人へ

http://ym2203.com/

• FM音源の基礎知識

http://www.hikari-ongaku.com/study/fm.html