第7章 HDDで演奏する

75回生 UltimateBlacktea

7.1 はじめに

みなさんこんにちは。75回生のUltimateBlackteaです。普段は競プロ、機械学習、アニメ鑑賞などを主にしています。今回は一部の界隈で流行っている、「HDDで音を鳴らす」ということをしました。NPCAではなくアマ研がやってそうな内容ですね笑。稚拙な文章ではありますが、興味を持たれた方は是非ご一読ください!

7.2 注意

HDDは一度分解すると二度と使えなくなりますので、使い終わった、又は使う予定のないHDDをご使用ください。

7.3 用語解説

  • HDD・・・"Hard Disk Drive"の略で、記憶媒体の一種。データの読み込み速度はSSDと比べて遅いが一般的な使用には十分であり、同じデータ記憶容量あたりの値段が安いため、パソコンやブルーレイレコーダーなど様々な装置に使われている。
  • Arduino・・・2000年代にイタリアで開発されたマイコンと汎用入出力ポートを備えたワンボードマイコン。入門者にも非常に易しく、ロボットのデジタル制御などにおいて世界的に使われている。
  • ブレッドボード・・・電子回路の実験や試作に用いられる樹脂製の板。等間隔で小さな穴が並んでおり、穴の中には金属製の端子が埋め込まれている。この端子同士が規則的に接続されていることにより、穴に導線や電子部品の足を差し込むだけで意図した回路を簡単に完成させられる。
  • ジャンパワイヤ・・・ブレッドボード周りでの使用を想定して作られた導線の一種。普通の導線とは違い、先端がブレッドボードにある穴の深さだけ電気を通すように作られており、また穴に差し込むときに曲がらないように少し硬くなっている。当然ブレッドボードでの使いやすさはずば抜けている。
  • C/C++・・・どちらもプログラミング言語のうちの一つ。
  • コンパイル・・・人間が書いたプログラミング言語のコードを、コンピューターが理解できる機械語に変換する作業のこと。
  • エディタ・・・プログラミング言語のコードを書きやすいように手助けしてくれるソフトのこと。特定の言語に特化したもの、ソフト内でプログラミングから実行まで行ってくれ るものなど種類は様々。一度エディタを使うと便利すぎて手放せなくなる。
  • 自動補完・・・必要な文字や空白を自動で記述したり、打ち間違いを直してくれること。多くのエディタが搭載している機能の一つ。
  • シンタックスハイライト・・・単語の種類を基に文字に色付けを行ってくれる。これも多くのエディタで使うことができる機能の一つ。

7.4 HDDの仕組み

HDDの構造

図7.1: HDDの構造

HDDは、上図のような構造をしています。プラッタの表面には磁性体が塗られており、CDやDVDのようにそのプラッタ上を細密に分割し、それぞれについて磁化することでデータを記録します。プラッタ上のデータには読み取り/書き取り共にアームを使ってアクセスし、アクセスする場所を細かく変える為に、プラッタにスピンドルモーター、アームにコイルと磁石が付いています。アームはコイルに電流を流すことによって発生した磁力を利用して動かします。これらを用いてアームがプラッタにアクセスする場所を変え、制御基板がアームに高速に信号を送ることによって、HDDは毎秒100MB以上という転送速度を実現しています。しかし、HDDは物理的にプラッタ/アームを動かす必要性があるため限界があるのに対し、全ての処理を電気的に行うSSDには劣ってしまいます。SSDの仕組みはかなり複雑ですので、説明は省かせていただきます。

7.5 準備したもの

  • ノートパソコン
  • テスター
  • はんだごて
  • グルーガン
  • トルクスドライバー
  • Arduino (PWM出力が出来るもの、今回はArduino nanoの互換品を使用)
  • USB-miniB (Arduinoとの接続に必要)
  • HDD (容量・製造元などは不問。今回はSeagate製を使用)
  • ブレッドボード
  • ジャンパワイヤ

このうちテスター・グルーガン・ブレッドボードはあれば便利、という程度なので、無くても大丈夫です。

7.6 下ごしらえ

1. HDDを分解する

表に貼ってあるシールを剝がします。剥がすと数か所ネジ止めされているのが確認できます。HDDは頭が六芒星の形をした特殊なネジが使われているので、トルクスドライバーという専用のドライバーを使います。

次に蓋をあけ、アームアームの傍にある磁石を片方だけ外します。(ビジュアルの為です。)アームがプラッタの上にある場合、後々演奏するときにうまく動かないのでプラッタができるだけ傷つかないように慎重にずらして退避させましょう。

2. コイルをArduinoと繋ぐ

HDDを裏返し、制御基板を外します。こちらもネジ止めしてあります。制御基板を外すと、小さな端子が十数個ほど見えます。

テスターを使い、コイルに繋がっている端子を探します。コイルはアームに埋め込んであるので、コイルに電流を流したとき、磁力が発生してアームが動くはずです。抵抗測定モード等を使用し微弱な電流を流し、アームが動く端子二つがコイルと繋がっています。電圧はコイルが目に見えるレベルで動き、かつコイルを傷つけない3~5Vほどであればなんでも良いので、乾電池などを使ってもよいでしょう。

そのままではArduinoと接続できないので、ジャンパワイヤをはんだ付けします。端子が内部で折れてしまわないように、グルーガンなどではんだ付けしたところを固めておくと安心です。

最後にジャンパワイヤの反対側を、ArduinoのPWM出力が出来るピンに接続します。コンデンサなどを嚙ませてもいいでしょう。

HDDを分解する

図7.2: HDDを分解する

7.7 Arduino IDEでプログラムを書く

Arduinoの制御にはC/C++をベースとしたArduino言語を用います。文法・構文は全く同じようなものであり、ピン制御用にいくつかの関数などが追加されています。

Arduinoにプログラムを書き込むのにはArduino IDEというマイコンボード用開発環境を使います。これはArduino開発コミュニティが提供しているもので、Arduino言語の環境構築・コンパイル・マイコンボードへの書き込みを全て行ってくれる超便利なアプリケーションです。一般的なエディタの様に自動補完・シンタックスハイライトが出来ないのが玉に瑕です。なお、ウェブエディタもありますが様々な制限があるのであまりおすすめできません。

なお、今回はPWM出力をするのにtone関数とpitches.hというライブラリを使用しました。tone関数は、指定した周波数の矩形波を指定した時間の長さだけArduinoのピンから出力することができます。周波数や矩形波については、後ほど動作原理の章で説明します。pitches.hには、私たちが普段使っているドレミの音階とそれに対応する周波数が記録されており、このライブラリを用いることでコードがより書きやすく、読みやすくなります。

いよいよプログラミングです。やっとNPCAらしい作業ですね。

演奏する曲は、ご存知の方も多いであろう「ようこそジャパリパークへ」です。 

鳴らす音の高さと長さを打ち込んでいきます。和音の再現は今回はしていませんが、HDDを複数台用意する、周波数を調整することで実現可能です。

7.8 演奏する

記述し終わったら、いざArduinoに書き込みましょう。ボタン一つでコンパイルから書き込みをしてくれます。めちゃくちゃ便利ですね。数秒経ってから、HDDのアームから音が流れ始めます!裏側中央にある端子がディスクを回すモーターに繋がっているので、ここに交互に電流を流せばレコードプレーヤー風にもなります。

7.9 動作原理

では、ここからなぜ音を鳴らすことができるのかを解説していきます。まずそもそも、音とは一体どういうものなのか、についてですが、つまるところ、「音」とは「空気中を伝わる波」のことです。この波が私たちの鼓膜を揺らすことで発生した信号が神経を通して脳に伝わり、脳が一連の信号を音として認識しているのです。そしてその波の細かさや揺れの大きさ、波の形が音の高さや大きさ、音色と結びついています。この「波の細かさ」というヤツが周波数の正体です。ここで、人工的に音を発生させている身近な例として、スピーカーを考えてみましょう。スピーカーやイヤホンは、特殊なものを用いて次のような構造をしています。

スピーカーの構造

図7.3: スピーカーの構造

図から分かるように、コイルに電流が流れることによって磁力が発生し、周りの磁石と力を及ぼし合うことによってコイルが動きます。その際コイルに固定されている物(ここではコーン紙)も同時に動き、この2つが空気を揺らすことで波ができるのです。この波を私たちは「スピーカーから発せられた音」として受け取っています。

賢明な読者の皆様であればもうお気づきでしょう。そう、Arduinoからコイルに電流を流し、磁力を発生させてアームを動かすことで空気中の波、つまり音を鳴らしていたのです!

それでは最後に、コイルに流す電気信号について解説します。先ほど、「コイルに電流を流して波を作る」と言いましたが、もちろんただ単純に電流を流せばいいというわけではありません。思い通りの音を発生させるためには、コイルの動きの大きさやタイミングというものを制御する必要があります。そこで役に立つのが、矩形波や正弦波といった「電流の波」なのです。ここでは矩形波を扱います。矩形波は、HighとLowを交互に繰り返すような波で、横軸を時間、縦軸を電圧としたとき次のようなグラフになります。また、グラフの形状から方形波と呼ばれることもあります。

矩形波のグラフ

図7.4: 矩形波のグラフ

そして、この電気信号をコイルに送ったとき、コイルでは向きが逆の磁場が交互に発生するため、コイルは磁石に対して垂直な方向に振動します。すると波形が単純な、周波数が矩形波と等しい音の波ができるのです。Arduinoのtone関数はこの矩形波を簡単にピンから出力することができ、圧電ブザー等をつないでも演奏ができます。

7.10 あとがき

久しぶりに工作のようなことをしたのですが、存外楽しかったです。今はMIDIなどのファイルを読み込みプログラムを自動で構築してくれるツールが作れないか模索中です。また機会があったらFDDでも演奏したいなぁ、とか思ってます。

それから、サンプルとして僕が今回使用したソースコードをGitHubに置いておきます。是非ご利用ください。

https://github.com/UltimateBlacktea/2021-_-

7.11 おまけ

部誌の場を借りて、僕の好きなアニメを2つほど紹介させていただこうと思います。

1. ガールズ&パンツァー

ガールズ&パンツァー

図7.5: ガールズ&パンツァー

「ガールズ&パンツァー」は、2014年にTVで放送されたアニメです。このアニメの中では華道や茶道と並んで「戦車道」というものが存在しています。戦車道は、乗員が負傷しないようになっている本物の戦車に乗り込み、チームになってフラッグ戦や殲滅戦などのルールに従って勝負をする、というスポーツのようなものです。主人公である西住みほがチームメイトと協力しながら戦車道の大会を勝ち進めていく、という内容なのですが、このアニメは脚本もさることながら音響や映像が他のアニメと一線を画しています。特に劇場で観た時の臨場感が凄く、まるで自分が本当に乗っているかのような迫力があります。また、考証・スーパーバイザーを務めていらっしゃる鈴木貴昭先生はミリタリーに造詣が深く、戦車のキャタピラの動きやビスの位置までこだわって作られています。脚本を務めていらっしゃるのは「おじゃ魔女どれみ」や「けいおん!」など、有名作品をいくつも手掛けてこられた吉田玲子先生で、ストーリーも非の打ちどころのないものとなっています。また、このアニメは他と比べてキャラクター数がかなり多いものとなっているのですが、それにも関わらず1人1人のキャラクターの個性や性格といったものがしっかり存在していて、そちらもこの作品の魅力だと言えます。2015年には劇場版が公開され興行収入は25億円を記録し、2017年からは合計6話構成の最終章が順次公開されています。

2. のんのんびより

のんのんびより

図7.6: のんのんびより

「のんのんびより」は、2009年から2021年の2月までKADOKAWAの月刊コミックアライブで連載されていたコメディ漫画です。2013年、2015年、2021年にスタッフを変更せずそれぞれTVアニメ化されています。上のポスターに載っている4人が主となって、田舎で遊んだりのんびりしている様子を描いた作品で、疲れているときや都会が嫌になったときに見るととても癒されます。この作品は、背景やBGM、脚本が素晴らしいです。まず背景なのですが、田舎の山や川の綺麗さが上手く描かれています。また、その背景とともに聞こえる音楽も田舎の静かさ、綺麗さ、寂しい感じや落ち着いた感じが絶妙なバランスで感じられ、少し寂しいけれどもとても綺麗で、心が落ち着くような、そんな不思議な感じがします。脚本ですが、ガルパンと同じく吉田玲子先生が担当されています。ストーリーの構成が完璧なのはもちろん、ギャグシーンの合間合間に前述のようなシーンが入っているおかげで、見ていて笑うことができ楽しいけれども、疲れずとても癒され、心が落ち着くという他にはないような作品に仕上がっています。さらに、田舎ゆえの家族ぐるみの人付き合いなど、少し感動させられてしまうようなヒューマンドラマ要素もあります。2018年には劇場版である「のんのんびより ばけーしょん」が公開されています。夏休みに沖縄旅行に行くというストーリーで、こちらはTVシリーズに加えて現地の人との出会いや別れなど、旅行でしか描けないストーリーもあり、見た後にとても劇場版だとは思えないような満足感があります。どんな人にもお勧めできる、疲れているときにぜひ見たいアニメです。