「FF5/ビッグブリッヂの死闘」をArduino+YMZ294で鳴らしてみた。
お疲れ様です。高橋です。
先日「YMZ294で鳴らすためのビッグブリッヂの死闘を作ってみた。」で作った3和音版のビッグブリッヂの死闘をArduinoで鳴らすことが出来ました。
動画で確認した後に、閃きました。動画はiPhoneで撮影してますが、手動デクレッシェンド出来るじゃないか!しかも手動パンも出来る。三次元録音の夜明けに今気づいてしまいましたが、今から追加録画するのは奥さんの機嫌の都合上不可能なので、後日。
アンプを作るための部品を買う
先日の課題であった「音が小さい」問題を解決すべく、アンプに必要な部品を秋葉原の秋月電子で買ってきました。
今日の秋月電子は2015年の初売出しという事もあり、とても混んでいた感じです。加えて「お楽しみ袋」という3,000円する袋の中にギッシリと部品が入っている物が売っており、あっという間に売り切れていた模様です。私は3,000円分の元をとれる自信が全く無いので、見学だけしてスルーしました。
肝心のアンプ回路に必要な部品は
- 電解コンデンサ 220μF 1個40円
- フィルムコンデンサ 0.04μF 10個 100円 (必要なのは1本)
- 抵抗 10Ω 100本 100円 (必要なのは1本。残りの99本は無駄な抵抗)
- オペアンプ LM386互換 NHM386BD 1個50円
- 可変抵抗器 10kΩ 1個40円
- 可変抵抗器 つまみ 1個20円
- みの虫クリップ 10本350円
- ステレオジャック 1個60円
で、合計760円の出費となります。
アンプを組み込む
アンプを組み込む前の回路図がこれです。
そして、アンプとボリューム調整用の可変抵抗器を組み込んだのがこちらです。
LM386への入力側
LM386はこの絵だと右上から反時計回りに1~8となります。
YMZ294の5番から可変抵抗器の+側に線を伸ばし、-側をGNDに流します。そして、真ん中をLM386の3番の入力に挿します。
電源は6番に挿します。
LM386からの出力側
電解コンデンサの絵が220μFのやつで、アノード側をLM386の5番に挿し、カソード側をスピーカー側に挿します。上の絵だとセラミックコンデンサになってますが、本当はあれはフィルムコンデンサ0.047μFです。これは極性が無いっぽいので、適当にLM386の5番に挿し、反対側に10Ωの抵抗を挟んでGNDに流します。
2番と4番は、そのままGNDに流します。
組込み後のお姿
ジャンパー線同士が派手な空中戦をしています。抵抗やコンデンサの横をかいくぐり、ピンを挿すのはピンセットじゃないと難しいレベルになってきました。
今回初めてみの虫クリップを買ったのですが、これはとても便利でした。スピーカー無くてもイヤフォンをそのまま挟むだけで音の確認が出来ます。
ステレオジャックを買ったのですが、いらなかったじゃん。。
SMFをYMZ用のコードに変換
ビッグブリッヂの死闘は非常に長い曲なので、普通にシーケンシャルにSMFを作っても、YMZ用のコードに変換後にArduinoの容量制限でコンパイルエラーとなります。
(先日、上限は32,768バイトと書きましたが、正しくは32,256バイトでした。)
そのため、曲を打ち込んでいる最中、区切りの良い所でマークを打っておきます。
赤く囲っているヤツです。
SMFを、「SMFからYMZ用C言語に変換する素敵ツール」に流し込むと、上でマークしていたオクターブ7のBが、下のようにチャンネルBの107として出力されます。
出力されたコードを、マーク毎にメソッド分解します。
そして、コンパイルサイズを圧縮するべく、重複している中身を持つメソッドを使わず、代替可能なメソッドを呼ぶようにします。
void setup() { DDRD = 0b11111111; pinMode(WRCS_PIN, OUTPUT); pinMode(A0_PIN, OUTPUT); pinMode(RESET_PIN, OUTPUT); ymz.Reset(); ymz.SetMixer(0b111, 0b000); ymz.SetVolume(CH_A, 0b00001111); ymz.SetFreqBit(CH_A, 0); ymz.SetVolume(CH_B, 0b00001111); ymz.SetFreqBit(CH_B, 0); ymz.SetVolume(CH_C, 0b00001111); ymz.SetFreqBit(CH_C, 0); playBridge_single(); } void loop() { playBridge_loop(); } void playBridge_single() { play_0101_0604(); play_0701_0904(); play_1001_1204(); play_1802_2002(); play_0701_0904(); play_1802_2002(); play_2003_2101(); play_2102_2301(); play_2302_2501(); play_2502_2801(); play_2802_2901(); play_2502_2801(); play_3202_3301(); play_3302_5301(); play_5302_5501(); play_5502_5701(); play_5702_5901(); play_5702_5901(); play_5302_5501(); } void playBridge_loop() { play_5302_5501(); play_2502_2801(); play_2802_2901(); play_2502_2801(); play_3202_3301(); play_3302_5301(); play_5302_5501(); play_5502_5701(); play_5702_5901(); }
実機で確認
実機に流して確認したのが、ページ上部の動画です。オペアンプはきちんと仕事をこなし、音量が大きくなりました。
また、LM386の1番と8番を連結させ、途中に10μFを入れてやるとさらに音量が10倍になるのですが、音割れが酷くなり、可変抵抗器での調整に時間が掛かったで、やめました。
低音がノイズだらけです。極端に短い音符を流すとノイズになるのか?原因がわかりません。
ですが、何はともあれ3和音でArduinoの上限一杯まで曲を鳴らすことが出来たので、大満足です。
ボチボチAndroidアプリの開発に戻ります。
以上、よろしくお願い致します。
関連記事
-
-
シャロム 名前入力画面
お疲れ様です。高橋です。 前回に引き続き、シャロムを耳コピ。 今回は16小節の2 …
-
-
Castlevania SotN “Dance of Pales”を耳コピ
お疲れ様です。高橋です。 久々に耳コピ。Castlevania Symphony …
-
-
久しぶりに耳コピ。FF4バトルテーマ。
お疲れ様です。高橋です。 とても久しぶりに耳コピしました。ファイナルファンタジー …
-
-
Pro Mini互換機でFF2戦闘音楽を使ったYMZ動作試験
お疲れ様です。高橋です。 電子オルゴールの最終形をイメージしてブレッドボード上で …
-
-
異邦人をArduino+YMZ294で演奏させてみた
お疲れ様です。高橋です。 Arduino+YMZ294で、久保田早紀の異邦人(1 …
-
-
久々に耳コピ。FF4バトル2
お疲れ様です。高橋です。 超ひさしぶりに耳コピしました。 FF4のバトルテーマ2 …
-
-
【完全版】グラディウスメドレー by Arduino+YMZ294
お疲れ様です。高橋です。 前に作ったグラディウスメドレーを増強したものを作りまし …
-
-
シャロム 海の音楽
お疲れ様です。高橋です。 長きに渡ったシャロムの耳コピは、この曲でそろそろ終わり …
-
-
ファイナルファンタジー2 戦闘テーマ1
お疲れ様です。高橋です。 最近耳コピしてなかったので、耳コピしました。 3和音し …
-
-
スーパーの焼き芋製造機近くで鳴っている音楽をArduinoとYMZ294で鳴らしてみた。
お疲れ様です。高橋です。 先日ArduinoでPSG音源 YMZ294を使って単 …