このサイトはInternet Explorerに対応していないためページが正しく表示がされない場合があります。

他のブラウザ(Microsoft Edge等)で閲覧してください

トップ > 制作物 >

もっとHDDで演奏

製作期間 : 2015年3月ごろ ~ 2015年9月ごろ

記事作成 : 不明

最終更新 : 不明

きっかけ

前作ではPICを6チップ使って6つのHDDを演奏させていましたが、さらに多くの曲を、大迫力で演奏させたいと思い、HDD-MIDI演奏機を作りなおすことにしました。

目標

ハードウエア

回路

回路図はほとんど前回と変わりません。

違いはマイコンの出力とHDD(スピーカー)駆動FETのゲートが離れていて好きに繋ぎ変えられる所と、マイコンにDIPスイッチとリセットスイッチが追加された所です。
(画像クリックで拡大)
回路図 例によって例のごとくPCBEで基板設計
基板設計 今回は1枚でまとめるので大きいです。120x130mmです。
基板加工機でさくさくっと切り出し
基板裏 基板加工機は神
文字の反転を忘れたのは目を瞑ってください
基板組み立て 組み立て。基板の外見はほぼ完成です。

基板にLEDをのせる場所が無かったのでマイコンの足に抵抗とLEDを空中配線ではんだづけしました。 空中配線5級

HDD

6台のHDDより多くのHDDを動かすといっても、いらないHDDなんてそうそう出てこないのですが、@makube04 氏から要らないHDDを格安で譲ってもらえる事になったので送ってもらいました。ありがとうございます!

譲ってもらったHDDだけでも十分なのですが、秋葉原に寄った時にジャンク屋で2.5インチのよさげなHDDがあったので高音用に2つ買ってきました。 2.5inHDD

ケース

せっかく作るならケース無しの裸じゃ格好が付かないだろうと言われたのでホームセンターで板材を買ってきて、けがいて、切って、ドリル打ち込んで、蝶番付けて、完成!(ケースの完成写真撮り忘れた)

ソフトウエア

今回一番力を入れたのはソフトです。
前回から追加されたソフトウエアの条件は以下の通りです。

複数のHDDの音程制御

MIDI受信を割り込みで実現しているので音に関してはあまり割り込みは使いたくないです。なのでなるべくハードウエアのタイマーモジュールだけを使うようにします。

ぱっと思いつく方法は制御するHDD分の変数を用意して発音時にタイマーと同期させてカウントアップしていき、半周期分カウントしたらリセットしてON,OFFを反転する、を繰り返す方法ですが、タイマーと同期は毎回変数にタイマーの値を代入しなければいけないので時間がかかります。

そこで考えたのがこの方法です 複数のHDD制御の解説図 この図では簡単のためHDD2つで説明しています。

まず、常時タイマーをカウントアップさせておきます(グラフ黒色一点鎖線)。時間(ts1)に1つ目のHDD(図中赤線で示す)に半周期[T1]の発音信号が来た時、その時のタイマーの値を記録しておきます、

  1. 次にタイマーの値とts+T1*nを比較してタイマーが値以上になったら出力を反転させてnをインクリメントします。
  2. 2つ目以上のHDD(図中青線で示す)も同じように処理します。
  3. 1と2を繰り返せばタイマーの変数1つで複数のHDDを制御することができます。

しかしこのままではタイマーがカウントし続けてオーバーフローするので制御対象のHDDがすべて停止した時にカウント値リセットします。

しかしこの方法でも処理に時間が掛かってHDD3台の制御が限界で、音質も悪いのでHDD1台だけを制御するモードを追加しました。

MIDIパートの設定変更方法

マイコンには6bitのDIPスイッチとリセット用のスイッチを接続してあります。
DIPスイッチの設置割り振りは以下になっています DIPスイッチの設定 例えば[101011]ならHDD複数モードで3番目のHDDをMIDIの11パート(MIDIは1~16パードなので1を足す)に割り当てとなります。

PICが起動されるとまず、DIPスイッチの値を読み込んでEEPROMに情報を書き込みます。別のHDDのMIDIパートを変更したい場合はDIPスイッチを切り替えてからリセットスイッチを押してまたEEPROMに情報を書き込ませます

音程

前回のお粗末な音程定義では自分の耳で聞いても音程のずれがありました(めんどくさいから無視してた)。

しかし今回はしっかり対策をしてきました。
MIDIのノート番号と周波数の関係は平均律では以下の式になるそうです。
f=440*2^((n-69)/12)
fが周波数、440が基準周波数、nがノート番号です。 この式を元にノート番号に対応した半周期の時間を返す関数を作ります。といっても、いちいち累乗の計算をPICにさせるのは時間がかかるので
excelでヘッダーファイルの生成 excelで0~127までのノート番号と半周期の時間を計算させてプログラムのヘッダーファイルにそのままコピペできるようにしています。

さらに、調律値として、全部の半周期の値を上下できるようにして、音程に関係ない共通の処理時間による音程のズレを極力無くしています。

調律値は実際に音を鳴らしながらPCのマイクで録音してチューニングソフトを使いながら設定しました。 調律

完成

完成 完成 3枚を蝶番で止めてるのでぴったり閉まりません(致命的設計ミス)
致命的 なので三角形にたたんで一斗缶に押し込んで紐で留めて持ち運びます

解説はしてないけど動画あげました

反省

目標の確認

見た目も良くなって音痴もある程度直ったので個人的には満足です!

おわりに

HDDで演奏も2014年からはじめて1年以上経ちました。完成してからも遊べるものは楽しいですね。

2016年3月のNT京都でFDDを演奏しているdomino氏とコラボしました。またどこかのイベントには持って行って発表するかもしれません。

トップ > 制作物 > もっとHDDで演奏