Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
YM2151でFM音源演奏
七瀬 (@nanasetomona)
2015/07/14
@nanasetomona
https://github.com/nanase
きっかけ
• 「FM音源伝説」…FM音源LSIのガチャガチャ
▫ 秋葉原 東京ラジオデパート 1F
• 80年代にPCやゲーム機に内蔵の
FM音源 および DAC
• 1月に YM2203C 入手
YM2151
• 6月にYM2151を入手
▫ 専用DACのYM3012も同時入手
▫ YAMAHA 1983年製造、ステレオデジタル
▫ OPM(FM Operator type M)、8ch、4オペレータ
▫ 擬似ノイズ発生器、LFO搭載
...
YM2151
• 搭載実績
▫ アーケードゲーム (80年代中頃~90年代前半)
▫ MSXの周辺機器
▫ X68000
FM音源とは?
• FM変調を応用した波形発生法
• 単純な正弦波の発生を考える
𝑦(𝑡) = 𝐴 sin 2𝜋𝑓𝑡
-1
0
1
𝑡
𝑦 𝑡
FM音源とは?
• 𝐴 は振幅 (ここでは 1)
• 2𝜋𝑓 は角速度(≒周波数)、2𝜋𝑓𝑡 は位相
▫ 位相に注目して考える
𝑦(𝑡) = 𝐴 sin 2𝜋𝑓𝑡
-1
0
1
𝑡
𝑦 𝑡
FM音源とは?
• 位相の歪み = 時計の針が速く、遅くなる
• 位相の変化を乱すような別の正弦波を加える
𝑦(𝑡) = 𝐴 sin(2𝜋𝑓1 𝑡 + 𝛽 sin 2𝜋𝑓2 𝑡)
-1
0
1
𝑡
𝑦 𝑡
(𝛽 = 1)
FM音源とは?
• 𝑓1, 𝑓2 はそれぞれ キャリア、モジュレータ周波数
• 𝛽 は変調指数 = 歪みの強さ
▫ 𝛽 を大きくすると複雑な波形が発生
𝑦(𝑡) = 𝐴 sin(2𝜋𝑓1 𝑡 + 𝛽 sin 2𝜋𝑓2 𝑡)
-1
0
1
𝑡
𝑦...
FM音源とは?
• 複数(0個以上)のモジュレータ入力を持つ
正弦波発生器を オペレータ と呼ぶ
▫ 通常は音量を調整するための乗算器も内蔵
• 通常はオペレータを複数段重ねて使用する
オペレータ オペレータ
オペレータ
オペレータ
フィードバ...
FM音源とは?
• オペレータの繋ぎ方を アルゴリズム と呼ぶ
▫ 直列に近い形ほど複雑な音となる
▫ 並列に近い形ほど軽い音となる
オペレータ オペレータ
オペレータ
オペレータ
フィードバック
モジュレーション
モジュレーション
モジュレー...
FM音源の利点
• 複雑な波形を生成可能
▫ 矩形波や三角波よりも多彩な音作りが可能
▫ パイプオルガン、エレピ、金属音 の再現が強い
• 少ないデータ量で生成可能
▫ PCM音源は波形そのものを記録するためデータ多
▫ FM音源はキャリア、モ...
FM音源の欠点
• データから生成される波形の予想がつきにくい
▫ 僅かな誤差で全く異なる波形となる場合もあり
▫ 理想波形を作るにはFM音源の知識が必要
• ピアノ、パーカッションは苦手
FM2151に必要なもの
• 5.0 [V] 電源
• 4.0 [MHz] クロック
• DAC (YM3012)
• オペアンプ
• 制御マイコン
• シーケンサ
• 演奏データ
電源
• USB 給電により供給
▫ PC から給電するとノイズや電流不足の原因となる
▫ (YM2151単体でも 110 [mA] 程度の消費)
▫ 今回はモバイルブースターを使用
オペアンプ
• LMC6484AIN を使用
▫ ナショナルセミコンダクタ製
▫ CMOSタイプ、単電源 5.0 [V] のみで動作
▫ DACの他、ボルテージフォロワとして使用
余談: オペアンプは重要
LMC6484AIN
(単価: 250円)
LM324N
(単価: 38円)
符号反転時に
パルスが発生
余談: オペアンプは重要
LMC6484AIN
(単価: 250円)
LM324N
(単価: 38円)
符号反転時に
パルスが発生
制御マイコン
• NUCLEO-F401RE
▫ USB給電、プログラムライタ付き
▫ mbedで開発 (webIDE、C++)
▫ Arduino互換ピン装備
▫ フラッシュメモリ 512KB
▫ SRAM 96KB
▫ 最大 84 [MHz...
クロック
• F401REから 4.0 [MHz] を発振
▫ プログラム上では 1.0 [MHz] が最大
▫ プログラムライタ上のクリスタル 8.0 [MHz] を使用
(2分周)
▫ CPUの16 [MHz]も使用可
RC発振のため精度は...
データ送信
• PCから書き込みデータをシリアル通信
▫ 通信速度は 115,200 bps (14.4 kB/s)
▫ これより高速だと頻繁に同期が壊れる
• コマンド、アドレス、データの計3バイト1メッセージ
▫ コマンドはリセットや書き込...
YM2151のレジスタ構成
• アドレス空間は256バイト
• オペレータや
周波数設定など
• データバスを介して
書き込みを行う
(今回は書き込みのみ)
YM2151のクロック入力
• 今回は 4.0 [MHz]、標準は 3.58 [MHz]
• 3.579545 [MHz] は NTSC で頻繁に使われる
▫ 外部と同一クロックを用いた回路の
簡略化が図られていた
▫ NTSC と PAL と...
YM2151のウェイト時間
• レジスタの書き込みに時間がかかる
▫ マスタークロック ΦM = 4 [MHz] 時
▫ アドレス: 17サイクル = 4.25 [μs]
▫ データ: 83サイクル = 20.75 [μs]
▫ 初期化時: 7...
YM2151鳴動までの手順
1. イニシャルクリア (IC = L)
2. オペレータ設定 (TL, ML)
3. エンベロープ設定 (AR, D1R, D2R, D1L, RR)
4. パン設定 (L ch = 1, R ch = 1)
5....
シーケンサ
• C# でMIDI→YM2151データに変換
• MidiUtils がシーケンスを行う
https://github.com/nanase/MidiUtils
• MIDIデータは8音8chのものを用意しておく
YM2151シールド
回路図
実際に鳴らしてみた
https://www.youtube.com/watch?v=Yv1CD4-HYUY
課題 (1)
• 128音色+ドラム音色がないと発音できない
• ドラムパートが 1ch 分しかない
▫ 同時に2つ以上の打楽器を鳴らせない
• リアルタイムにMIDI変換しているため、
またはシリアル通信のため遅延が発生
▫ 一度に多量のデー...
課題 (2)
• ノイズ発生器の動作の解析
▫ FM音源とノイズは同時に発音可能
▫ 一部エンベロープはノイズに対しても有効?
• USBで給電すると 4.2 – 4.0 [V] まで電圧が降下
▫ 原因不明
参考資料 (1)
• YM2203・YMZ294・SP0256を使ったハードウエアMIDI音源の製作
http://park19.wakwak.com/~gadget_factory/factory/miditalk/
• YM2203のピン機...
参考資料 (2)
• NucleoのClock - 電子工作専科のぐうたラボ
http://denshikousakusenka.blog.fc2.com/blog-entry-33.html
• FM音源レジスタマップX68k
http://...
参考資料 (3)
• FM音源伝説 | FM音源を愛するすべての人へ
http://ym2203.com/
• FM音源の基礎知識
http://www.hikari-ongaku.com/study/fm.html
Upcoming SlideShare
Loading in …5
×

YM2151でFM音源演奏

4,437 views

Published on

サークル内での活動報告発表資料

YM2151を使ったFM音源の鳴動と演奏について、
FM音源の原理の簡単な説明や制御マイコン、回路図など。

Published in: Devices & Hardware
  • Be the first to comment

YM2151でFM音源演奏

  1. 1. YM2151でFM音源演奏 七瀬 (@nanasetomona) 2015/07/14
  2. 2. @nanasetomona https://github.com/nanase
  3. 3. きっかけ • 「FM音源伝説」…FM音源LSIのガチャガチャ ▫ 秋葉原 東京ラジオデパート 1F • 80年代にPCやゲーム機に内蔵の FM音源 および DAC • 1月に YM2203C 入手
  4. 4. YM2151 • 6月にYM2151を入手 ▫ 専用DACのYM3012も同時入手 ▫ YAMAHA 1983年製造、ステレオデジタル ▫ OPM(FM Operator type M)、8ch、4オペレータ ▫ 擬似ノイズ発生器、LFO搭載 ▫ クロック入力 3.58 [MHz] ▫ 動作電圧 5.0 [V]
  5. 5. YM2151 • 搭載実績 ▫ アーケードゲーム (80年代中頃~90年代前半) ▫ MSXの周辺機器 ▫ X68000
  6. 6. FM音源とは? • FM変調を応用した波形発生法 • 単純な正弦波の発生を考える 𝑦(𝑡) = 𝐴 sin 2𝜋𝑓𝑡 -1 0 1 𝑡 𝑦 𝑡
  7. 7. FM音源とは? • 𝐴 は振幅 (ここでは 1) • 2𝜋𝑓 は角速度(≒周波数)、2𝜋𝑓𝑡 は位相 ▫ 位相に注目して考える 𝑦(𝑡) = 𝐴 sin 2𝜋𝑓𝑡 -1 0 1 𝑡 𝑦 𝑡
  8. 8. FM音源とは? • 位相の歪み = 時計の針が速く、遅くなる • 位相の変化を乱すような別の正弦波を加える 𝑦(𝑡) = 𝐴 sin(2𝜋𝑓1 𝑡 + 𝛽 sin 2𝜋𝑓2 𝑡) -1 0 1 𝑡 𝑦 𝑡 (𝛽 = 1)
  9. 9. FM音源とは? • 𝑓1, 𝑓2 はそれぞれ キャリア、モジュレータ周波数 • 𝛽 は変調指数 = 歪みの強さ ▫ 𝛽 を大きくすると複雑な波形が発生 𝑦(𝑡) = 𝐴 sin(2𝜋𝑓1 𝑡 + 𝛽 sin 2𝜋𝑓2 𝑡) -1 0 1 𝑡 𝑦 𝑡 (𝛽 = 2.5)
  10. 10. FM音源とは? • 複数(0個以上)のモジュレータ入力を持つ 正弦波発生器を オペレータ と呼ぶ ▫ 通常は音量を調整するための乗算器も内蔵 • 通常はオペレータを複数段重ねて使用する オペレータ オペレータ オペレータ オペレータ フィードバック モジュレーション モジュレーション モジュレーション 出力
  11. 11. FM音源とは? • オペレータの繋ぎ方を アルゴリズム と呼ぶ ▫ 直列に近い形ほど複雑な音となる ▫ 並列に近い形ほど軽い音となる オペレータ オペレータ オペレータ オペレータ フィードバック モジュレーション モジュレーション モジュレーション 出力
  12. 12. FM音源の利点 • 複雑な波形を生成可能 ▫ 矩形波や三角波よりも多彩な音作りが可能 ▫ パイプオルガン、エレピ、金属音 の再現が強い • 少ないデータ量で生成可能 ▫ PCM音源は波形そのものを記録するためデータ多 ▫ FM音源はキャリア、モジュレータに関わるデータのみ ▫ 初期の携帯電話に搭載(着信音など)
  13. 13. FM音源の欠点 • データから生成される波形の予想がつきにくい ▫ 僅かな誤差で全く異なる波形となる場合もあり ▫ 理想波形を作るにはFM音源の知識が必要 • ピアノ、パーカッションは苦手
  14. 14. FM2151に必要なもの • 5.0 [V] 電源 • 4.0 [MHz] クロック • DAC (YM3012) • オペアンプ • 制御マイコン • シーケンサ • 演奏データ
  15. 15. 電源 • USB 給電により供給 ▫ PC から給電するとノイズや電流不足の原因となる ▫ (YM2151単体でも 110 [mA] 程度の消費) ▫ 今回はモバイルブースターを使用
  16. 16. オペアンプ • LMC6484AIN を使用 ▫ ナショナルセミコンダクタ製 ▫ CMOSタイプ、単電源 5.0 [V] のみで動作 ▫ DACの他、ボルテージフォロワとして使用
  17. 17. 余談: オペアンプは重要 LMC6484AIN (単価: 250円) LM324N (単価: 38円) 符号反転時に パルスが発生
  18. 18. 余談: オペアンプは重要 LMC6484AIN (単価: 250円) LM324N (単価: 38円) 符号反転時に パルスが発生
  19. 19. 制御マイコン • NUCLEO-F401RE ▫ USB給電、プログラムライタ付き ▫ mbedで開発 (webIDE、C++) ▫ Arduino互換ピン装備 ▫ フラッシュメモリ 512KB ▫ SRAM 96KB ▫ 最大 84 [MHz] 動作 ▫ 1,500円ほどで購入
  20. 20. クロック • F401REから 4.0 [MHz] を発振 ▫ プログラム上では 1.0 [MHz] が最大 ▫ プログラムライタ上のクリスタル 8.0 [MHz] を使用 (2分周) ▫ CPUの16 [MHz]も使用可 RC発振のため精度は悪い
  21. 21. データ送信 • PCから書き込みデータをシリアル通信 ▫ 通信速度は 115,200 bps (14.4 kB/s) ▫ これより高速だと頻繁に同期が壊れる • コマンド、アドレス、データの計3バイト1メッセージ ▫ コマンドはリセットや書き込みのフラグ用 ▫ アドレスは $00 – $FF ▫ データも同様
  22. 22. YM2151のレジスタ構成 • アドレス空間は256バイト • オペレータや 周波数設定など • データバスを介して 書き込みを行う (今回は書き込みのみ)
  23. 23. YM2151のクロック入力 • 今回は 4.0 [MHz]、標準は 3.58 [MHz] • 3.579545 [MHz] は NTSC で頻繁に使われる ▫ 外部と同一クロックを用いた回路の 簡略化が図られていた ▫ NTSC と PAL とではデータ送信のタイミングが異なる ▫ PALでは 4.43362 [MHz] • 発音周波数に影響し、11.7% ほど高音になる ▫ およそ 2 音くらい (ド → レ)
  24. 24. YM2151のウェイト時間 • レジスタの書き込みに時間がかかる ▫ マスタークロック ΦM = 4 [MHz] 時 ▫ アドレス: 17サイクル = 4.25 [μs] ▫ データ: 83サイクル = 20.75 [μs] ▫ 初期化時: 77サイクル = 19.25 [μs] • 本来はYM2151からビジーフラグを読み取り 書き込み完了を検知する (今回は省略)
  25. 25. 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) 音色 指定時 発音毎
  26. 26. シーケンサ • C# でMIDI→YM2151データに変換 • MidiUtils がシーケンスを行う https://github.com/nanase/MidiUtils • MIDIデータは8音8chのものを用意しておく
  27. 27. YM2151シールド
  28. 28. 回路図
  29. 29. 実際に鳴らしてみた https://www.youtube.com/watch?v=Yv1CD4-HYUY
  30. 30. 課題 (1) • 128音色+ドラム音色がないと発音できない • ドラムパートが 1ch 分しかない ▫ 同時に2つ以上の打楽器を鳴らせない • リアルタイムにMIDI変換しているため、 またはシリアル通信のため遅延が発生 ▫ 一度に多量のデータを送らない工夫が必要 ▫ SRAMにあらかじめデータをキャッシュすれば良い?
  31. 31. 課題 (2) • ノイズ発生器の動作の解析 ▫ FM音源とノイズは同時に発音可能 ▫ 一部エンベロープはノイズに対しても有効? • USBで給電すると 4.2 – 4.0 [V] まで電圧が降下 ▫ 原因不明
  32. 32. 参考資料 (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
  33. 33. 参考資料 (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
  34. 34. 参考資料 (3) • FM音源伝説 | FM音源を愛するすべての人へ http://ym2203.com/ • FM音源の基礎知識 http://www.hikari-ongaku.com/study/fm.html

×