今回は高橋隆雄さんをゲストにお招きして、Arduinoのシンセスケッチ「Auduino」(オードゥイーノ)の応用例をご紹介します。
実は、高橋さんは「やさしいPICマイコンプログラミング入門」や「やさしいPICマイコン 電子工作パソコンとつないで遊ぼう」(ともに秀和システム)といった著書を持つPICマイコンの専門家なのですが、近頃Arduinoを使っていくつも作例を発表しています。それはどうしてでしょう? まずはその点からお話を伺ってみましょう。
ここからはすべて高橋さんによる文章です。
1. なぜ今、Arduinoなのか?Arduino流行ってますね。流行っているから使ってみた……というわけではありません。高橋にはPICの著書もあるように、マイコンといえばPICを使うことが多かったのですが、PICは簡単になったとはいえ電子工作未経験者にとっては未だハードルが高いという声も聞きます。ブレッドボードで作ればそれほど難しいことをする必要はないのですが、それでも「何だかわからない」ということが多いようです。
では一方でArduinoはどうでしょうか? Arduinoの場合、基本的にはUSBに挿すだけという手軽さがあり、何となくやれそうな気がするというのがポイントです。しかも開発環境がC/C++という高級言語を標準にしているところも評価できます。
私自身が同じ目的のものをPICかArduinoかどちらかで作れと言われれば、規模の小さいものなら同じ程度の時間で作ることができると思いますが、他人にその作り方を説明するのにどちらが簡単かと言えば、やはりArduinoということになります。ですので、高橋が作って誰でも再現しやすいという観点からArduinoをチョイスしました。
2. Auduinoの面白さ前回のプロトタイパーズで解説のあったAuduinoは実に面白いアプローチです。Arduinoはマイコンですから、その処理は当然のようにデジタルです。ですがAuduinoの音を聞いてみればわかるように、その音はかつてのアナログシンセサイザのような音がします。私はその音を聞いた瞬間に「これはいける!」と思いました。
実際にアナログシンセサイザを今、作ることは不可能ではありませんが、たいへんな労力と金銭を必要とします。ところがAuduinoはデジタルであるがゆえにプログラム次第でさまざまな工夫をすることができ、なおかつアナログっぽい音がするのです。まさに現代的にアレンジされたアナログシンセサイザと言えるのではないでしょうか。
この応用方法ですが、ぱっと思いついただけでも演奏方法を工夫することや、シーケンサを内蔵させるなどです。さらにはMIDI音源化すれば他の電子楽器と組み合わせて使用することもできますね。
ちなみに「Make: Tokyo Meeting 03」*では、このAuduinoに距離センサーを組み合わせてテルミン的に音を鳴らすものを展示しました。
*オライリーの主催で年2回開かれる、Make読者のためのイベント。100組近い有志が自分たちの作品を持ち寄って発表する。
3. すべてをシールド化しよう!高橋が今回こだわっているのは、実装をすべてシールド化するというものです。シールドというのは以前のブレッドボーダーズでも紹介されている、Arduinoの上に載せて使う基板のことで、これによりArduinoの機能が拡張できるというものです。
このシールドには自作用に使える「バニラ」シールドと呼ばれるものもあり、ここに部品を半田付けして好きな回路を組み立てることができます。このような自作用シールドには他にもプロトシールドと呼ばれるものもありますし、シールド上にブレッドボードを搭載することで簡単な回路の実験に使えるものもあります。
スイッチサイエンスのバニラ・シールド。このように穴だけなので何でも作ることができます |
ではシールド化すると、どんな良いことがあるのでしょうか?
まずは何といってもカッコイイことです。Arduinoに挿し込めばシンセサイザになったり他のものになったりするのは、カッコイイじゃないですか。そして手の平サイズで機能が集約されていると、人に見せた時のインパクトが違います。
もう1つのこだわりは機能ブロック化ということで、例えばAuduinoシンセサイザを単なるシンセサイザやシーケンサなど各種の機能を別々なArduinoで実装します。そうすれば手の平サイズのボードの組み合わせで、バンド的なものが作れればいいな、と考えています。現在のところまだ連動機能は付けていませんが、将来的には複数のArduinoを同期させて演奏するしくみも作ってみようかと思っています。
しかしながらシールド上への作りこみは、初心者向きとは言えない部分も多々あります。例えば半田付け箇所の多さがその1つです。ほとんどの部分を半田付けで作りますから、これは当然といえば当然です。それでもあえてシールドとして作っているのは、高橋が試作したものを面白いと感じるメーカーなどが現れて来ることを期待している面もあります。もし、そのようなメーカーが登場してくれれば、キットの形でプリント基板を製作してくれたりするかもしれません。ですから本稿で紹介しているものはすべて、回路図もスケッチも公開しています。これはオープンソース・ハードウェアという流れから当然のことであると考えています。
4. スライダー式シンセサイザを製作する今回作ってみたスライダ式シンセサイザ。Arduinoの寸法にまとめてあります。リボンの上ほど高い音が出るように設定してあります |
このようにして演奏します。左側にリボンがあるのは単に筆者の好みです。好きな位置に付けるといいでしょう |
まず作ってみたものがスライダー式シンセサイザです。これは演奏しにくいというAuduinoの特性を補う目的で作ってみました。
Auduinoは前回のプロトタイパーズで紹介されたように、ボリューム(可変抵抗器)を回転させることで音程を変更して演奏する実装がもっとも基本的なものです。ところが、これではツマミを回して音を上げ下げするために演奏上の制約が大きくなってしまいます。そこで、この部分を他のものに交換するというモデファイは各種行なわれています。例えば学研のアナログ・シンセサイザ「SX-150」のスタイラス・コントローラをAuduinoに接続するといった工夫です。
今回作ってみたものはスライダー式と呼ばれるもので、リボンコントローラとも呼ばれます。似たような動作をするものにはスライド式ボリュームがありますが、その場合にはツマミを回す動作がスライド式に変わっただけで、連続的に変化することには変わりがないため、あまり面白くありません。リボンコントローラの場合には、リボンに触らない状態では音は出ず、触ったところの音が出るため音程の変更を例えば、高・低・高・低というように断続的に行なうことができます。
このリボン部分に使う部品が大問題でした。市販品で最適なものがなかなか見つからなかったのですが、SpectraSymbolの「SoftPot」と呼ばれるものを見つけました。これはArduinoのキットなどでお馴染みのSparkfunから購入することができます。残念なのは、お値段が少々高いことで写真のサイズのものでも25ドルほどします。1つの部品としては高価な部類に入ります。なお、このSoftPotはロータリー式(円形)のものがブレッドボーダーズの第16回でも紹介されていました。
なお、SoftPotを使う際には、下に貼り付ける素材に注意してください。なるべく固い(剛性のある)ものを使用します。高橋はアクリル板を下に貼っています。これはSoftPotそのものだけではふにゃふにゃなため、貼り付ける素材が柔らかいと反応が悪くなるためで、演奏時の操作性はこの、下に貼った素材にかなり影響されます。
5. 回路を工夫するSoftPotを使う場合、Auduinoの回路に少し変更が必要です。SoftPotはその特性上、触っていない状態ではボリュームの中点が回路から切り離されるため、Auduinoのもともとの回路をそのまま使うと手を離している間、ノイズのようにでたらめな音が鳴り続けてしまいます。そこで回路図のように抵抗R1を追加することで、手を離している間はArduinoのアナログ5(オリジナルから変更されています。詳しくは後述)をGNDに落とすようにします。このような抵抗を「プルダウン抵抗」と呼んでいます。
回路的に変更したのは、この部分だけですが、高橋のAuduinoではもう1つ工夫をしてあります。それはスケール変更で、詳しくは次に解説しますが、このスケールを切り換えるためのボリュームVR5が追加されています。これにより、Arduinoのアナログ入力はすべて使われることになります。
加えてシールド上にすべてを組み立てたため、ボリュームを6個全部実装すると狭くなってしまうので、2個のボリュームは半固定抵抗と呼ばれるものに変更してあります。これは演奏時には使わないだろうということでネジ回しを使って回せるタイプのものです。Auduinoには音色の変更用には4つのボリュームがあるのですが、そのうち、どれを普通のボリュームにして、どれを半固定にするのかはプログラムで書き換えることができます。スケッチの以下の部分を書き換えてください。
// Map Analogue channels
#define SYNC_CONTROL (5)
#define GRAIN_FREQ_CONTROL (0)
#define GRAIN_DECAY_CONTROL (2)
#define GRAIN2_FREQ_CONTROL (1)
#define GRAIN2_DECAY_CONTROL (3)
#define SCALE_SELECTOR (4)
右側のカッコ内の数字がアナログ入力の番号です。今回の作例ではSYNC_CONTROL、つまり音程を変更する可変抵抗器はアナログの5番に接続しています。SoftPotはここに接続することになります。
表側。3個を普通のボリューム(可変抵抗器)に2個を半固定抵抗にしてあります。下の銀色の部分がSoftPotです |
裏側。右下がSoftPotの接続部分(くるっと曲げてあります)。プルダウン抵抗がみえます。バニラ・シールドには何も配線がされていないので、このように電線を半田付けして配線します |
●6. プログラムを工夫する
高橋版Auduinoのスケッチは次のURLからダウンロードできます。
http://www.musashinodenpa.com/arduino/lib/ribb_auduino.pde
今回、プログラムにも少し工夫を加えています。もともとのAuduinoではスケール*としてクロマチック(全音階)とペンタトニックの2種類がサンプルスケッチに含まれていますが、その切り替えはスケッチを書き換えることで行なうようになっています。これでは演奏時に目的に応じて切り換えることができないため、他の楽器に合わせてもらうのが難しくなります。
そこで必要と思われるスケールをいくつか用意しておき、ボリュームを回すことで切り換えられるように作ってみました。ただし、今回の実装ではスケールのベース・ノート(基となる音)はすべて“C”(ド)です。ほんとうはこれも切り換え式にできると良いのですが、回路的にさらに工夫が必要となり、難易度が少々上がるので今回は実装していません。
またスケールを簡単に記述できるようにMIDIノートナンバー(MIDIで使われる音番号)から間接的に音階データに置換できるようプログラムを書き換えてあります。
スケールで演奏できるというのがAuduinoの良い所の1つです。単純なアナログ・シンセサイザでは音はまさにアナログ的に変化するために、キーボードなどのインターフェイスを付けないと音階を正しく演奏することができません。Auduinoの場合には中身はマイコンですからアナログの入力値を処理することで、音階化することが簡単にできます。このためSoftPotのような「あいまい」な入力位置を音階化して正しい音で鳴らすことができます。そして、あらかじめ決められたスケールを外さないで鳴らすことができるため、ライブのようなアドリブ演奏に向いた実装とすることができます。
*スケールについて、ここでは詳しく説明しませんが、簡単には「○○風になる音階」のことだと思ってください。
●7. ここまでの改造箇所まとめここで、今回作ったスライダー式シンセサイザの改造箇所をまとめておきましょう。
・音程の変更にSoftPotを使用した
・SoftPotを使用するために抵抗を1個追加した
・接続するアナログ入力のピンを変更した
・スケールを切り換えるためにボリュームを1個追加した
・アナログ入力の変更のためのプログラム書き換え
・スケール切り換えのためのプログラム変更と追加
以上が変更点です。こうやって並べてみると何だか大変そうにも見えますが、実際には回路が少し追加されただけです。プログラムをダウンロードして、ぜひ皆さんも試してみてください。今回はシールド上にまとめてありますが、ブレッドボードで作ることも可能ですので比較的、お手軽に楽しめるのではないでしょうか。
ところで、ちょっとしたこだわりの1つはオーディオ出力部分です。高橋は6.3mmの「標準ジャック」と呼ばれるものを使用しています。これはミキサーなど楽器系ではこのサイズが標準的に使われるので、他の楽器との接続を考慮したためです。パソコンなどを含めた最近の機器で使用されているのは3.5mmのミニプラグ/ジャックと呼ばれるものです。
6.3mm標準ジャック。楽器系機材ではこのサイズが使われます。 |
●8. シーケンサを作る
Auduinoの演奏性を改善するために、さらに工夫してみようと作ってみたのがシーケンサです。高橋版Auduinoシーケンサのスケッチは次のURLからダウンロードできます。http://www.musashinodenpa.com/arduino/lib/seq_auduino.pde
シーケンサという言葉にはあまり馴染みのない方も多いかもしれませんが、ユーザがプログラムした音程を繰り返すもので、ステップ・シーケンサとも呼ばれます。リズムマシンがこのような方式を取ることが多く、似たようなインターフェイスを見ることができます。しかしながら、昨今のステップ・シーケンサはデジタルですのでボタン(スイッチ)が並んでいるのが普通です。
Auduinoシーケンサ。繰り返しのフレーズを自動演奏します。いわゆる8ステップ・シーケンサです |
シーケンサの上面。水平一列に並んでいる半固定抵抗で音程を設定します |
今回作ってみたのは「デジタルながらアナログ」なシーケンサで、写真のようにたくさんの半固定抵抗が並んでいるものです。このうち水平一列に並んでいる8個の半固定抵抗が音程を決めるもので、このような場合には「8ステップ」のシーケンサといいます。
かつて、アナログ・シンセサイザが全盛だった時代には、ツマミの沢山あるアナログ・シーケンサが使われていましたが、今ではデジタル化されて見ることはなくなりました。そんな過去への想いも込めてこのシーケンサを作ってみました。皮肉なことに昨今では電子音楽がまた流行してきており、繰り返しを多用するループ・ミュージックも流行っています。つまりAuduinoのシーケンサ化は時代の必然(!?)ではないでしょうか。
Auduinoは演奏しにくいと前にも述べましたがシーケンサ機能を搭載することで、使い勝手は格段によくなりますし、伴奏用にも使うことができます。実際の演奏シーンは次の動画を見ていただくと、よくわかると思います。
【動画】1つの音を少し変えるだけで印象が様変わりします。テンポ(BPM)も変更することができます |
●9. シーケンサの回路の仕組み
このシーケンサの回路の仕組みは、ちょっとトリッキーです。通常、このような仕組みを実現するにはArduinoにICを使った回路を加えることが多いのですが、今回は単純な部品の積み上げで製作しています。理由の1つは、沢山の半固定抵抗をシールド上に実装することでICなどを実装するスペースが足りなくなることです。もう1つの理由は「そのへんにあった」部品で作ったからで、高橋の自宅の在庫部品だけで作れるシーケンサに仕上げたからです。
個々の部品は難しいものではなく、抵抗、半固定抵抗、LED、ダイオードという要素しかありません。しかも、このような単純部品の積み上げは、とても安価だというのもポイントの1つです。
これらの部品の中でダイオードは本連載初登場だと思います。LED(発光ダイオード)は光るダイオードの一種ですが、単なるダイオードとは光らないものです。と、書くと何のことやらと思われるかもしれませんが、本来ダイオードというのは一方通行に電気を流す素子のことで、電子回路ではさまざまな目的のために使われます。
ここで少し回路図を見てみましょう。
右側のボリュームが4つあるセクションはAuduinoの音色コントロールの部分なので、これまでの説明と同じです。右下の部分はスケール変更と速度変更を行なうための回路で、1つのアナログ入力を共用するための手段です。共用のしくみは左側のシーケンサ部と同じなので、シーケンサ側の回路をもとに解説します。
回路図左上の青い部分に注目してください。ArduinoのデジタルポートD12に接続されています。この部分の繰り返しで8組の回路があります。
ArduinoのデジタルポートD12がHIGH、すなわち+5Vになる場合には他の7つのデジタルポート(D11~D4)はLOW、つまり0Vになるようにプログラムを作成しておきます。D12がHIGHの状態ではLEDには抵抗R1を経由して電流が流れるため、このLEDが点灯します。このとき半固定抵抗の片側にも+5Vが加えられるので、半固定抵抗ではその位置に応じた電圧が出力され、ダイオードD9を経由して電流が流れ、Arduinoのアナログ入力A4に半固定抵抗で設定した電圧が加えられます。この電圧によりAuduinoの音程が決められ、音が鳴ります。
ここでダイオードを使っている理由は「一方通行」を作りだすためです。例えば今、D12がHIGHだとすると、D11はLOWです。この場合にもしダイオードが無いとどうなるかといえば、電流はVR2を伝わってD11のLOWと、VR2のGND側に流れようとします。このためVR1で設定した音の高低はVR2にも影響されてしまい、正しい高低を設定することができなくなります。ところがダイオードD10は回路図上では左から右への一方通行を作りだすため、ある1カ所の半固定抵抗の電圧が出力されている場合に、その他の半固定抵抗は影響を与えなくなります。これによって各ステップごとの音を決めることができるのです。
なおダイオードには1S2076Aなど小信号用といわれるものであれば何を使ってもかまいません。
LED(黄色)と、その左の抵抗、半固定抵抗(青い丸)、ダイオード(右に立っている部品)が一組で、これを8セット並べてシーケンサの音程コントローラとしています |
小型化した欠点ともいえますが、音程の変更などはこのようにネジ回しで行ないます |
●10. シーケンサの演奏方法
こちらのAuduinoはシーケンサなので基本的に触らなくても演奏できます。もちろん8音の繰り返しを延々行なうだけですが。作ってから、うっかりしていた事に気付いたのはスタート/ストップの制御を付けていなかったことです。もっとも、このシーケンサではArduinoのすべてのピンを使い切ってしまっているので、スイッチを付けるには少々工夫が必要となるのですが……。
実際の演奏の場合には延々と同じフレーズを繰り返すと、聴いている人が飽きてしまうため、時々フレーズを変えてやるのが望ましいです。その際には写真のようにネジ回しを使って半固定抵抗を回して行ないます。この操作と効果については演奏動画を見ていただくと良いと思います。少しの部分を変更するだけでも全体的な印象は随分と変わります。
なおこのシーケンサもあらかじめプログラムでスケールを持っているため、半固定抵抗を適当に回してもスケールを外すことがないように作ってあります。
●11. まとめArduinoを使ったシンセサイザAuduinoを改良したものを2例ご紹介しました。シーケンサは部品点数が多いことと、シールド上に作り込もうとすると基板が狭いので少々、工作の難易度が高くなっていますがチャレンジする価値のある仕組みだと筆者は考えています。
Auduinoの場合、音を鳴らす処理(PWM)の部分は割り込み処理をしているため、メインのloop()部分では、よほどのプログラムを作らない限り、音に影響しません。ですから色々なプログラムと組み合わせて使用することもできます。
AuduinoはArduinoを使ってシンプルに作れるシンセサイザでありながら、このように応用範囲が広いものです。皆さんも工夫して面白いものを作ってみてください。
前回作った基本形のAuduinoも加えて合奏中。スケールが合っているので、ツマミを適当に回しているだけでもけっこう楽しめます |
【動画】仲間と手作りシンセを弾いていると、時間がたつのを忘れます。ものすごく長い動画になってしまったので、短く編集しました |