グラディウスの音楽をArduinoとYMZ294で3和音で鳴らしてみた。
お疲れ様です。高橋です。
先日、「スーパーの焼き芋製造機近くで鳴っている音楽をArduinoとYMZ294で鳴らしてみた。」をPOSTしましたが、その時の大きな課題として、
- 3和音+1ノイズな音源なはずなのに、2和音しか鳴らない。
- 同じ音が連続して鳴ると、音が繋がってしまう。
がありました。
配線の確認
今日は最初の「2和音しか鳴らない」問題を解決すべく、まずは配線の確認から。
ArduinoとYMZ294を繋ぐ9本のジャンパー線は、ブレッドボード側が少しグラついていたくらいで、他はなんともありませんでした。念のため全て抜き差し。
回路は前回と全く同じです。
スケッチの確認
スケッチの中で、音を出す基本部分は、安ギターさんのサイトからDLしたYMZ294のArduino用ライブラリを使い、ライブラリを使う部分も同じく安ギターさんのサイトのサンプルスケッチをコピペし、CH_Cが鳴るような感じで修正していました。安ギターさんのサンプルではCH_AとBしか使っていなかったので、単純にCH_Cの記述を追加すれば良いだろう、と考えたのです。
それが下記です。
#include <YMZ294.h> #define ADDR_FREQ_A CH_A #define ADDR_FREQ_B CH_B #define ADDR_FREQ_C CH_C // Output Pins const byte WRCS_PIN = 8; const byte A0_PIN = 9; const byte RESET_PIN = 10; YMZ294 ymz(WRCS_PIN, A0_PIN, RESET_PIN); void setup() { DDRD = 0b11111111; pinMode(WRCS_PIN, OUTPUT); pinMode(A0_PIN, OUTPUT); pinMode(RESET_PIN, OUTPUT); ymz.Reset(); ymz.SetEnable(CH_A, true); ymz.SetEnable(CH_B, true); ymz.SetEnable(CH_C, true); ymz.SetMixer(0b111, 0b100); 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); playOpening(); } void loop() { playMain(); } void set_ch(Channel ch, int note) { ymz.SetFrequency(ch, noteFreq[note]); } void playOpening(){ set_ch(ADDR_FREQ_A,76); set_ch(ADDR_FREQ_B,64); set_ch(ADDR_FREQ_C,59); delay(107); (以下略) } void playMain(){ set_ch(ADDR_FREQ_A,0); set_ch(ADDR_FREQ_A,80); set_ch(ADDR_FREQ_B,0); set_ch(ADDR_FREQ_B,59); set_ch(ADDR_FREQ_C,0); set_ch(ADDR_FREQ_C,52); delay(124); (以下略) }
よくわかりませんが、あんまり問題無さそうに見えます。
YMZ294のデータシートを確認
秋月電子で何かしらのICを買うと、大抵データシートというものが付いてきます。良くわからなかったので全然読んでませんでしたが、改めて中身を真剣に読んでみました。すると、
というように、ミキサーの設定でレジスタに「0」を書き込むと音を出力します、とあります。
再度スケッチの確認
YMZ294のミキサーの設定をしているのが、下記の記述です。
ymz.SetMixer(0b111, 0b100);
そして、ライブラリ側のメソッドの中身が下記です。
// ------ Mixer Functions ---------------------------------------- */ void YMZ294::SetMixer(byte noise, byte square) { mixer = ((noise & 0b111) << 3) | (square & 0b111); set_register(REG_MIXER, mixer); }
引数としてノイズのビットと音のビットが別れて設定出来るようになっており、ビットシフトさせて一度に書き込んでいます。音部分のビットは ‘000’ じゃないと、CH_Cが鳴らないという事なので、
ymz.SetMixer(0b111, 0b100);
こうなっている所を、
ymz.SetMixer(0b111, 0b000);
こう直しました。
折角なので新楽曲
この修正でおそらく3和音鳴るようになるので、その感動をグラディウスの音楽で体験したいと思い、頭の中に残っている記憶を頼りに耳コピ&SMF作成。
そして、出来た物がこちらです。
3和音、無事に鳴りました。
今後
同じノートの音が繋がる問題の解決は、また後日。
前はオペアンプ LM386の事をディスっていましたが、やっぱりあったほうが音が良いような気もするので、買ってこようかどうか悩み中です。
ステレオジャックも買ってこようかどうか悩み中です。これは50円なので、多分買います。LM386買うなら、これも必須です。主に妻からの嫌味対策です。
この問題が片付いたら、別の事にブレッドボードを使いたいんだけど、YMZもたまに使いたいので、きちんと半田ごて使って基板作るかどうか悩み中。ただ、半田ごては800円くらいするし。面倒だし、半田も必要だし基板も必要だし、本当に悩み中。
以上、よろしくお願い致します。
関連記事
-
-
グラディウス2の3面 古代惑星のテーマをArduino+YMZ294で鳴らしてみた。
お疲れ様です。高橋です。 グラディウス2の3面、古代惑星のテーマをArduino …
-
-
グラディウスのメドレーをArduino+YMZ294で演奏してみた。
お疲れ様です。高橋です。 Arduino+YMZ294で、グラディウスの空中戦の …
-
-
異邦人をArduino+YMZ294で演奏させてみた
お疲れ様です。高橋です。 Arduino+YMZ294で、久保田早紀の異邦人(1 …
-
-
Pro Mini互換機でFF2戦闘音楽を使ったYMZ動作試験
お疲れ様です。高橋です。 電子オルゴールの最終形をイメージしてブレッドボード上で …
-
-
【完全版】グラディウスメドレー by Arduino+YMZ294
お疲れ様です。高橋です。 前に作ったグラディウスメドレーを増強したものを作りまし …
-
-
グラディウス モーニングミュージックをArduino+YMZ294用に耳コピしてみた。
お疲れ様です。高橋です。 アーケード版グラディウスの磁気バブルメモリが暖まるまで …
-
-
音階に合わせてLEDを光らせてみた。
お疲れ様です。高橋です。 主旋律に合わせてLEDを光らせてみる実験を行いました。 …
-
-
スーパーの焼き芋製造機近くで鳴っている音楽をArduinoとYMZ294で鳴らしてみた。
お疲れ様です。高橋です。 先日ArduinoでPSG音源 YMZ294を使って単 …
-
-
シャロム 海の音楽
お疲れ様です。高橋です。 長きに渡ったシャロムの耳コピは、この曲でそろそろ終わり …
-
-
Arduino+YMZでドラクエ2の「Lovesong探して」を鳴らしてみた。
お疲れ様です。高橋です。 先日作った「DQ2 – Lovesong探して」for …
Comment
[…] 配線とかソフトとかは高橋さんの記事を参考というかコピペしています。 変更点としてはwp.hrmux.comさんのサイトのライブラリを少し変更しました。 Edisonでは出力などを一括で変更する […]