R5.1.13 完結品
結局、大穴開けました(^^)/ ぎりぎり入る大きさのスピーカーが音量豊かだったので、スタックさせることにした。
こんな感じにMIDIが鳴ります。
モーツァルトのピアノソナタが気に入ったので、モーツァルト専用のスケッチにした。作曲者別のスケッチにしようかと思う。
MIDIファイルを読み込むのにこんなスケッチでも良かった。読み込む速さは同じだったけど(^^;)
while (f.available()) {
int length = f.available();
http://f.read(buffer, length);
}
f.close();
R5.1.5 ようやくSDのMIDIファイルを読めた
ようやくSD内のMIDIファイルを読むことができた。できてしまえば何のことはなかった(^^;) いろんな難しいことを考えてしまっていた。バイナリーなMIDIファイルのデータをひとつずつ取り出して、MIDIの文法に従いVS1003ボードに送るということは正道なんだろうけど無理。一つの市販ソフトを作るようなことじゃないかな。止めた。結果、MIDI文法を勉強することから逃れられた(^^)
数日前に、デコードしたファイルを再生したときのように、16進データを送ってやればVS1003がやってくれるんじゃないか? どこかのサイトでそんな発言を見た! ということで、
M時間がかかった(^^;) SDカード内のMIDIファイルをすべてFORMAT0に変換しておかないと、鳴らない(^^;)
int ct = 0 ;
while (f.available()) {
buf[ct] = f.read() ;
ct = ct + 1 ;
}
f.close(); ここで、ファイルをクローズする。
R5.1.4 スピーカを更新してみた
共鳴箱を使うといいかも(^^;) こんな感じ。裏側はこうなってます(^^) もうちょっと大きなスピーカを入手しないとな。
R5.1.3 MIDIを演奏できた!
スピーカの大きさに拘らなければ、それなりの音で聞ける(^^)/ Φ40mmほどのスピーカ使えば、左下のボトムケースでスタックできそう。今のところSDカードからの読み込みが不可だ。こんな感じ
M5Stackで音楽しようとすると、柄が大きくなりますね(^^;) VS1003ボードをスタックした右側のM5Stackでの16進デコーダしたMIDI(正しい言い方かな?)の演奏は、MIDIファイルサイズ自体が小さいので余裕で6曲入りました(^^)/ 限界に挑戦してみようか。
#include "campanella.h"でスケッチに入れるわけだが、全く入れない時には、スケッチが393805バイト(18%)グローバル変数が23872バイト(7%)使用。15曲入れた時にはスケッチが471797バイト(22%)グローバル変数が101472バイト(30%)使用。曲数を増やしても、この値は変わらないようだ。
しかし、いくらでも曲を挿入できるという都合の良いことはなかった(^^;) region `dram0_0_seg' overflowed by 2112 bytesなんてのが出てきてしまった。どうやらMIDIファイルの合計が私の環境の場合100640バイトが限界のようだ。
R5.1.1 MIDIを演奏できた!
baldramさんのESP_VS1053_Libraryの Mp3PlayerDemo.inoを使い、16進にデコードしたMIDIを同フォルダに入れ、midiだけどplayer.switchToMp3Modeをそのまま使う! このファイル、音が多いので追いついていない(^^;) VS1003のxrstにM5StackのENに接続して、漸くMIDI奏鳴(^^)/ こんな感じ
FORMAT0のMIDIファイル(念のためにスコアメーカーで書き換えた)を用意して、たなかまさゆきさんのlang-shipというサイトでTools>ファイルデータ変換を使わせていただいて、16進にデコードしたファイルに変換する。これを unsigned char adagio[3149] PROGMEM = { }; にいれたものをadagio.hとしてスケッチと同じフォルダに入れる。
しかし、これでは新しいMIDIファイルに交換するたび、いちいちスケッチを再コンパイルしなければならない。不便なので、SDカード内のMIDIファイルを再生したい。これが難しいのだが、挑戦は続く。
R4.12.25 wedradioは動作
もう一枚のVS1003ボードを使い、XRSTをM5StackのENにつないでwedradioを動作させた。音が出ることを確認できたので(音が出なかったので、壊れてる?なんて思った)これからいろんなライブラリを使って、mp3やmidiファイルの音出しを試してみようかと(^^;)
diyelectromusicのKevinさんが GitHubに公開している膨大なサンプルからArduinoMIDIVS10xxSynthを選択。ピンを書き換えてコンパイルしたところ難なく書き込み。VS1003が鳴りました! ありがとうございます。しかし、スケッチを解読できない(^^;)
ただ、これだと本当にMIDIの知識でひとつずつ音出しをしないと無理のようだ。(^^;)
R4.12.23 ENって何だ??
悩ましいのだけれど、VS1003ボードを扱うライブラリには、ボードのXRSTをM5StackのENにつなぐものとG2をはじめとして他のGPIOにつなぐものがあるようだ。ENだとM5Stack内部にアクセスしなければならない(^^;) 面倒だし、いろいろ実験してみるために切り替えスイッチを加えてみた。(^^)
R4.12.22 VS1003ボード
MIDIの勉強をしようと思っていたところ、MIDI野郎はM5Stackに内蔵スタックしてしまったので、余っていたVS1003モジュールを使おうかと。ところが、殆ど扱いを忘れてしまったので、やはりM5Stackに内蔵していたもう一枚のVS1003モジュールの結線を再現してみた。覚書が必要だった(^^;)
その覚書も含めて取り組んでみることにした。まずは、配線の記録を残す。
最初はWebRadioを再現してみる。ArduinoIDEやPCの環境が変わっているので、エラーが出ていたがライブラリを整備・更新したところうまくいった。M5StackとWebRadioの組み合わせはmacsbugさんの記事が最高なので、今回も参照させていただきました。こんな感じに完動しました。ありがとうございます。