グラディウスの音楽を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円くらいするし。面倒だし、半田も必要だし基板も必要だし、本当に悩み中。

以上、よろしくお願い致します。
関連記事
-
-
異邦人/久保田早紀 for Arduino+YMZ294
お疲れ様です。高橋です。 毎日プログラム書くのは疲れるので、今日は耳コピの日です …
-
-
異邦人をArduino+YMZ294で演奏させてみた
お疲れ様です。高橋です。 Arduino+YMZ294で、久保田早紀の異邦人(1 …
-
-
久々に耳コピ。FF4バトル2
お疲れ様です。高橋です。 超ひさしぶりに耳コピしました。 FF4のバトルテーマ2 …
-
-
YMZ294で鳴らすためのビッグブリッヂの死闘を作ってみた。
お疲れ様です。高橋です。 Arduino+YMZ294で鳴らすため、「ビッグブリ …
-
-
グラディウスのメドレーをArduino+YMZ294で演奏してみた。
お疲れ様です。高橋です。 Arduino+YMZ294で、グラディウスの空中戦の …
-
-
シャロム 海の音楽
お疲れ様です。高橋です。 長きに渡ったシャロムの耳コピは、この曲でそろそろ終わり …
-
-
久しぶりに耳コピ。FF4バトルテーマ。
お疲れ様です。高橋です。 とても久しぶりに耳コピしました。ファイナルファンタジー …
-
-
Pro Mini互換機でFF2戦闘音楽を使ったYMZ動作試験
お疲れ様です。高橋です。 電子オルゴールの最終形をイメージしてブレッドボード上で …
-
-
「FF5/ビッグブリッヂの死闘」をArduino+YMZ294で鳴らしてみた。
お疲れ様です。高橋です。 先日「YMZ294で鳴らすためのビッグブリッヂの死闘を …
-
-
スーパーの焼き芋製造機近くで鳴っている音楽をArduinoとYMZ294で鳴らしてみた。
お疲れ様です。高橋です。 先日ArduinoでPSG音源 YMZ294を使って単 …





Comment
[…] 配線とかソフトとかは高橋さんの記事を参考というかコピペしています。 変更点としてはwp.hrmux.comさんのサイトのライブラリを少し変更しました。 Edisonでは出力などを一括で変更する […]