Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
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
Prochain SlideShare
Chargement dans…5
×

YM2151でFM音源演奏

7 118 vues

Publié le

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

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

Publié dans : Périphériques & matériel
  • Identifiez-vous pour voir les commentaires

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

×