curious4dev

中国旅行、Arduinoなどを使った電子工作、その他色々。

*

ArduinoでPSG音源(YAMAHA YMZ294)を鳴らしてみた。

 

お疲れ様です。高橋です。

先日秋葉原にて「Arduino」という物を買ってきました。

Arduinoって?

Arduinoは「アルデュイーノ」と読むようです。

ar0

 

PC上でC++ライクな言語で書いたプログラムを無料コンパイラでコンパイルし、USB接続したArduinoのマイコンに書き込めます。世にある様々なInputセンサ、Outputセンサ等を自由に簡単に使うことが出来ます。詳しくはググって下さい

私はAndroidアプリの開発を進めていくにあたり、各種情報をググりながら進めているのですが、そんな中ピクッと来たキーワードの中に「IoT」というものがあります。今後は世の中、IoTらしいです。

IoTとはなんぞや

Internet Of Thingsとのことです。センサやネットに接続出来る機械や部品が安くなり、消費電力が低くなり、あらゆるデバイスがネットと繋がれるそうです。昔から言われている事のような気もしますが、それは置いておきます。

AndroidケータイはUSBやらBluetoothやらWi-Fiで様々なデバイスを繋げることが出来ますが、上述したArduinoで作ったハードウェアも繋げることが出来るそうなのです。Arduino側で様々なセンサてんこ盛りな物を作り、それをAndroidと協調させる事が出来れば楽しそうなので、まずはArduinoでどんな事が出来るのか実験してみたくなりました。

YMZ294とは?

Arduino関連のページをググりまくって興味が出てきたのが「ARDUINO+YMZ294でPSGデチューンしてうにょんうにょん」というサイトに書かれてある事です。MSXやファミコンで育ってきた世代にとっては、これでギュインギュインにPSG音を鳴らしてみたくなるのは、必然といって良いでしょう。

というわけで先日秋葉原の秋月電子に行き、500円出して買ってきました。ICだけでは音が鳴らないので、スピーカーも必要です。100円で8Ω8Wのスピーカーも買いました。

IMG_4954

中にはソケットとYMZ294と水晶が入っています。そしてこれらを、上述したサイトの回路図通りに組みます。

IMG_4955

参考サイトにはスピーカーの事が書いてありませんでしたが、YMZ294側のS0とArduino側のGNDを繋げば良いだけっぽいので、繋げます。本当はこの間にLM386というオーディオアンプを挟むと音が大きくなるようですが、既に十分大きすぎるくらい大きく、寝かけていた妻から嫌味を言われたので、LM386は買いません。

秋月電子のwebサイトを見ていたらLM386よりも出力が大きいアンプが50円で売っていたのですが、高橋家にアンプは不要です。金額の問題ではありません。ar03

上記の配線だとさすがにアレなので、回路図作図ツールを使って作図します。

ar01

本当はスピーカーとYMZ294の間にLM386を入れると、スピーカーから出てくる音が大きくなるようです。原理は不明ですが、何か不思議な力が働いているのだと思われます。

YMZ294と一緒についてきた水晶を表すアイコンがなかったのでICアイコンで代用しています。本当は8pinではなく4pinです。

スケッチ

回路を繋げたら、次はスケッチ(プログラム)です。Arduino業界ではプログラムコードの事をスケッチというそうです。

プログラムを書く前に参考サイトからYMZ294用ライブラリをダウンロードし、includeし、あとは曲をプログラムしていきます。YMZ294は3和音1ノイズが出せるようなのですが、最初からそんなに飛ばせないので、出来る事からコツコツと(サイトのコピペ&修正)始めるのが鉄則です。

#include <YMZ294.h>

// 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.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);

 pipo();
}

void loop() {

}

void pipo(){
 int len = 150;
 for(int j = 0; j < 2; j++) {
 for (int i = 4; i < 8; i++) {
 talk(CH_A, CalcFreqByMML(i, 'C'), len);
 talk(CH_A, CalcFreqByMML(i, 'D'), len);
 talk(CH_A, CalcFreqByMML(i, 'E'), len);
 talk(CH_A, CalcFreqByMML(i, 'G'), len);
 }
 for (int i = 7; i > 3; i--) {
 talk(CH_A, CalcFreqByMML(i+1, 'C'), len);
 talk(CH_A, CalcFreqByMML(i, 'G'), len);
 talk(CH_A, CalcFreqByMML(i, 'E'), len);
 talk(CH_A, CalcFreqByMML(i, 'D'), len);
 }
 for (int i = 4; i < 8; i++) {
 talk(CH_A, CalcFreqByMML(i-1, 'A'), len);
 talk(CH_A, CalcFreqByMML(i-1, 'B'), len);
 talk(CH_A, CalcFreqByMML(i, 'C'), len);
 talk(CH_A, CalcFreqByMML(i, 'E'), len);
 }
 for (int i = 7; i > 3; i--) {
 talk(CH_A, CalcFreqByMML(i, 'A'), len);
 talk(CH_A, CalcFreqByMML(i, 'E'), len);
 talk(CH_A, CalcFreqByMML(i, 'C'), len);
 talk(CH_A, CalcFreqByMML(i-1, 'B'), len);
 }
 }
}

void talk(Channel ch, word freq, int len) {
 ymz.SetFrequency(ch, freq);
 delay(len);
 ymz.SetFreqBit(ch, 0);
}

楽曲は、{ドレミソ}*n, {ドソミレ}*n, {ラシドミ}*n, {ラミドシ}*nを2回繰り返す単純な物です。

仕上げ

スケッチを書いたら、USBケーブルでパソコンとArduinoを接続し、コンパイル&書き込みボタンを押すだけです。

3和音1ノイズの高性能が全然発揮出来ていません。次回はもっとピコピコさせてみたいと思います。

 

 

以上、よろしくお願い致します。

 - 耳コピArduino

  関連記事

グラディウス2の3面 古代惑星のテーマをArduino+YMZ294で鳴らしてみた。

お疲れ様です。高橋です。 グラディウス2の3面、古代惑星のテーマをArduino …

FF3のオープニングをArduino+YMZシールドで鳴らしてみた

お疲れ様です。高橋です。 ファイナルファンタジー3のオープニング曲を耳コピし、こ …

久々に耳コピ。FF4バトル2

お疲れ様です。高橋です。 超ひさしぶりに耳コピしました。 FF4のバトルテーマ2 …

スーパーの焼き芋製造機近くで鳴っている音楽をArduinoとYMZ294で鳴らしてみた。

お疲れ様です。高橋です。 先日ArduinoでPSG音源 YMZ294を使って単 …

Arduino+YMZでドラクエ2の「Lovesong探して」を鳴らしてみた。

お疲れ様です。高橋です。 先日作った「DQ2 – Lovesong探して」for …

異邦人をArduino+YMZ294で演奏させてみた

お疲れ様です。高橋です。 Arduino+YMZ294で、久保田早紀の異邦人(1 …

グラディウスの音楽をArduinoとYMZ294で3和音で鳴らしてみた。

お疲れ様です。高橋です。 先日、「スーパーの焼き芋製造機近くで鳴っている音楽をA …

「DQ2 – Lovesong探して」for Arduino+YMZ294

お疲れ様です。高橋です。 最近、音系を全然やってなかったので、久しぶりに耳コピし …

【完全版】グラディウスメドレー by Arduino+YMZ294

お疲れ様です。高橋です。 前に作ったグラディウスメドレーを増強したものを作りまし …

Pro Mini互換機でFF2戦闘音楽を使ったYMZ動作試験

お疲れ様です。高橋です。 電子オルゴールの最終形をイメージしてブレッドボード上で …