頼りないニモニック

はっきりいって個人の日記レベル

YMF825Boardで演奏する (1)

f:id:nanase_t:20171205181437j:plain:w600

YMF825Board を9月下旬に秋月で購入、その後ステレオ化のために2枚目を購入しました。 当初より「鳴らす」のではなく「演奏」させることを第一目標として回路作り/プログラム制作をしました。ようやく安定して演奏ができる状態になったので、回路について詳しく紹介します。

USB→SPI探し

YMF825Board は SPI を介してレジスタの読み書きを行うため、PC から演奏する場合は概ね PC → USB → SPI といった接続構成になります。今回は Windows から演奏させることを想定していたため、USB → SPI変換デバイスを探すことが最初の目標となりました。 自身の場合は以下の2つのデバイスを試しました。

  • Adafruit FT232H Breakout
  • Arduino Nano
Adafruit FT232H Breakout

f:id:nanase_t:20171205183455j:plain:w600

秋月で売られている、FT232H を使った変換モジュールです。シリアル通信のほか、MPSSE を使った SPI が使えます。

ピンからは 3.3[V] が出力されます。回路制作時にまったく意識していませんでしたが、YMF825Board は 5[V] 仕様でも接続に問題はありませんでした。

しばらくこのモジュールで開発・デバッグを続けていました。しかし使用していた libmpsse.dll には latencyTimer というパラメータがあり、FT232H の場合最小でも 1[ms] とかなり大きい値となります。

latencyTimer により YMF825 の Write, Read, BurstWrite コマンドごとに1回遅延することになるので、たとえば 100回レジスタを書き込むには最速で 100[ms] かかります。演奏させることを前提にしていたため、この長大なレイテンシに対応することができず、このモジュールでの開発は断念してしまいました。

ただし YMF825Board を使って音を鳴らすだけならば十分使えます。モジュールの価格は AE-FT232HL などと比較してやや高めですが、画像を見れば分かる通り回路構成も最小で済みます。

また、上記のレイテンシ問題も MPSSE の更に基盤となる、D2XX を使うと解決することが最近わかりましたので、演奏することもできる可能性が出てきました。

Adafruit FT232H を使ったプログラムソース、回路図、その他写真は以下で公開しています。

Arduino Nano とステレオ化

f:id:nanase_t:20171015164856j:plain:w600

レイテンシ問題の解消のため、Arduino Nano を使って解決を図りました。実は Arduino を使うのはこれが初めてです。

ブレッドボード上に必要な回路をすべて載せたかったため、今回は Arduino Nano を使いました。また、レイテンシ問題が解消することでスループットも改善できると見込んで、YMF825Board を2枚使用してステレオ化を図りました。

f:id:nanase_t:20171205191748p:plain:w600

Arduino の場合、デジタルピンは 5[V] 出力のため YMF825Board も 5[V] 仕様で接続可能です。回路図にある SCK, MISO, MOSI, /RST は YMF825Board 共用、/SS は専用です。

SPI のクロックを 4[MHz]、シリアル転送速度を 115,200[bps] に設定し、独自プロトコルを作成してスケッチを書いてみました。今回はシリアル通信で命令を受け取り、レジスタへの読み書きを行うので特別に割り込みを使うことはしていません。

シリアル転送速度はやや低速ですが、通常の演奏には問題ありません。もちろんあまりにも早くコマンド転送するとボトルネックとなり、遅延が発生します。

ステレオ化に伴って、シリアル通信のプロトコルに書き込み先を選択できる命令 Select を入れています。2枚とも書き込む際には 0x40 0x03、Lchのみ書き込む際には 0x40 0x01 と指定します。Arduino 標準のライブラリでは /SS を自由に切り替えられないため、既定の D10 ピンを使用せず、D3, D2 ピンを直接 Low にして制御しています。

Arduino Nano を使ったプログラムソース、回路図、その他写真も以下で公開しています。

実際に演奏してみた

www.youtube.com

「ぼくのフレンド」を打ち込み、MIDI データから YMF825Board を演奏させています。

この曲を選んだ理由は好みである以外に、技術的には、

  • 激しくトーンパラメータが切り替わる、ドラムパートのテストができる
  • 随所にグリッサンドやギターソロに伴う PitchBend が存在する
  • BPM163 と速く、MIDI→YMF825Board命令変換が素早くできるか

といった理由がありました。

今回はハード面から YMF825Board を演奏させるために行ったことを紹介しました。次回はソフト面について紹介します。