HDDにドラゴンクエスト序曲を演奏させてみた

こんにちは、M2のYukimuraです!(無事進級しました。筆者のこれまでの記事はこちらからどうぞ)
今回は、春休みの自由研究枠で、HDDにドラゴンクエスト序曲を演奏させてみました。

できたもの

シンプルな波形の音にはこの曲が一番映えると思い、天空シリーズ(Ⅳ〜Ⅵ)のドラゴンクエスト序曲を演奏させてみました。

ちなみに筆者はドラクエ6が一番好きで、生まれてはじめてクリアしたゲームもはじめて冒険の書が消えたゲームも、SFC版DQⅥでした。
苦労してムドーを倒した後に冒険の書が消えた日には涙したのを覚えています。それ以来、冒険の書は確実に3つ同じデータをセーブし、ゲームを始める前には電源ボタンを構え(冒険の書削除は多くがファイル破損チェックの誤検知による誤削除であり、呪いのSEが鳴り終わるタイミングで冒険の書削除が実行されるので、鳴り終わる前に電源を消せば冒険の書削除が回避され、次回起動では破損チェックをクリアして正常起動する場合がある)、スーファミ本体からカセットを抜くのをやめた(カセットを抜く衝撃でデータが飛ぶ可能性が増える)ものです。情報系に興味を覚えたのも、このあたりからだった気がします。

あんまりSFC版ドラクエ6の思い出を語ると歳がバレる(?)ので、閑話休題、HDDで音を鳴らす話に移ります。

準備するもの

  • 要らなくなったHDD(今回の手法だと必ずHDDの記録媒体としての機能は失われます)
  • Arduinoと開発環境
  • ジャンパ線
  • (あれば)はんだごてとはんだ

手順

ソフトウェア

まず、音をかんたんに鳴らすため、toneライブラリをインストールします。

ライブラリのインストールはArduinoライブラリのインストールを参考に、音の打ち込みについてはToneを参考にしました。

平たく言うと、Tone型の構造体toneを宣言して、出力ピンをtone.begin(ピン番号);で指定することで、音を再生できるようになります。

tone.play(周波数);で再生開始、tone.stop();で再生中の音を止めます。これを各音について気合で打ち込みます。
正直ここが一番つらい作業であり、ソフトウェア部の最難関です。今回はHDD2枚で演奏しているのに対して、制御しているarduinoが一台であるため、HDD①が鳴らしている音をHDD②の どのタイミングで止めるかを、一々確認して打ち込まなければいけません。
筆者は打楽器経験者なのですが、音符はタイミングを表しているものだと思っていたフシがあり、音符が音の長さを表していることを思い出しました…

3分クッキング方式で恐縮ですが、出来上がったものがこちらです。

ドラゴンクエスト序曲 ソースコード(クリックで展開します)

1音鳴らすために関数を実行しているため、途方も無い行数になってしまいました。
関数void wait(int length)は、length分音符の長さ分、今鳴っている(もしくは鳴っていない)音を鳴らし続ける関数です。
例えば

  tone1.play(NOTE_G4);
  tone2.play(NOTE_G5);
  wait(2);
  tone1.stop();
  tone2.stop();

このようなコードでは、HDD①で低いソ、HDD②で高いソを鳴らし、2分音符だけ伸ばした後止める、ということを表します。

ハードウェア

ハードウェアでは、主にHDDを分解し、ジャンパ線を刺す作業を行います。

まずは裏の基盤を外します。

概ね4本程度のネジで止まっています。特殊ネジな場合もあります。

そうしたら外れますので(それはそう)、続いて表に返し、表の蓋を外します。

概ね7~9本程度のネジで止まっています。

表蓋は、シールの裏に隠しネジがある他、磁石で止まっていたり、接着剤でくっついていることもあるので頑張って外します。

外すとディスクが見えます。この時点でもうHDDは記憶媒体として使えなくなります。

次が難関で、コイルにつながっている2本の線を探します。arduinoかなにかで可聴域のパルス波を発している電極をくっつけて、音が鳴るところを探すと探しやすいです。

見つけたら、気合ではんだ付けをします。はんだセットがなければ、手で押さえてても大丈夫です。

たまたま別のところからも接続できた

これで、音が鳴ります。コイルがあるので音が鳴るという理屈で、動作原理に関する詳しい説明は、いくらしてもHDDで演奏する | 灘校パソコン研究部部誌2021に勝てない気がするので、詳細はリンク先の記事におまかせします。

実際に音が鳴っている様子がこちら。アームを動かすためのコイルに電極を刺して電気を流しているので、当然ですがアームがカチカチと動きます。
(冒頭の動画は、カチカチ音を鳴らなくするため、アームが動かないように固定しています。)

画質は懐かしのクオリティでお送りしています…

複数台でも同じことをやればいいだけで、arduinoの別のピンに刺すことで、HDDが増設できます。ただ、打ち込みはその分辛くなります。

おわりに

いかがだったでしょうか

HDDに演奏させるのは私の中で結構前から興味があったことで、高校生の時にYouTubeで見た「2台のHDDで「only my railgun」を演奏してみた」がきっかけで製作に至りました。
デジタルフォレンジックの研究をしている都合上、要らなくなったHDDというのが研究室に転がっており、これをうまく使えないかな〜と考えたところ、前述の動画を思い出し、研究室にあるもので作ってみよう!となり作ってみましたが、意外と完成度が高く、満足度が高いです。

記事中で打ち込みが大変!!という話を何度もしたのですが、話のオチとしては、コイルがある以上スピーカーにもなるわけで…(ry

(文責:サイバーセキュリティ研究室M2 木村悠生)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です