前回、CYDとPCM1808を使ったレコーダーを作ろうと宣言したのだけど、いくら頑張っても音質の壁にぶち当たり、結局レコーダー作るのやめました。(音質は電話機レベル)
次に録音もできるMP3デコーダーボードなるものを買ってみたが、こいつも音質的に満足できるもじゃないし、そもそもAUXが録音できない。
で、CYDでなにか作ろうと思い、CYDの機能を全て盛り込めそうなMP3プレーヤーを作ってみた。
先ずCYDのGPIOを改造してタッチパネルOUT,DIN,CLKをTFTパネルと共有させます。
自由に使えるGPIOが増えるし、TFT_espiライブラリもそのまま使えていい感じです。
こちら様を参考に
アナログ風VUメーター付きのMP3プレーヤーをGeminiとやりとりしながら作ってもらった。
IRリモコンで操作できて、なかなか便利に使えるので、気の利いたケースに収めたいと思っているがまだそのままになってます。
CYDMP3プレーヤーも出来上がって、次はやっぱり仕事中に聴くためのラジオ番組を録音するものをなんとかしたい。
既にラジオモジュールを使用した録音システムは完成しているが、音質の良いTEF6686チューナーを中心としたシステムを作ってみることにした。
最初はTEF6686チューナーをコントロールするESP32にタイマー機能を組み込んでみた。
録音番組の編集はWebサーバーでやる予定だったが、サーバーにアクセスしようするとESP32がダウンしてしまう。
TEF6686の制御で精いっぱいみたいなので、今度は別なMCUを使ってシリアル通信をし、周波数の変更(メモリーch)などができるようにして、ハンディーレコーダーZOOM H4nをコントロールするオーディオタイマーみたいなモノにすることにした。
20パターンの番組を予約できるようにしました。
とりあえず上手くできたが、ZOOM純正リモコンを改造してリレーで叩く操作はなんかスムーズじゃない!
なんかいい情報がないかネットを探しまくりようやくここをみつけてた。
void h4nStartRec() {
// --- 1. まずは再生中かもしれないので強制停止させる ---
// 0x84 (STOP) を送って、確実にIdle状態へ
zoomSerial.write((uint8_t)0x84); zoomSerial.write((uint8_t)0x00);
delay(200);
zoomSerial.write((uint8_t)0x80); zoomSerial.write((uint8_t)0x00); // Release
delay(200); // H4nが停止状態に落ち着くのを待つ
// --- 2. ログイン試行 (A1) ---
for (int i = 0; i < 3; i++) {
zoomSerial.write((uint8_t)0xA1);
delay(100);
}
// 途中で時計を更新してフリーズ感を軽減
time_t now = time(nullptr);
updateDisplay(localtime(&now));
// --- 3. 録音待機 (1回目のREC: 0x81) ---
zoomSerial.write((uint8_t)0x81); zoomSerial.write((uint8_t)0x00);
delay(200);
zoomSerial.write((uint8_t)0x80); zoomSerial.write((uint8_t)0x00);
// 録音準備待ち (1秒) の間も時計を更新
for(int j=0; j<10; j++) {
delay(100);
if(j == 5) {
now = time(nullptr);
updateDisplay(localtime(&now));
}
}
// --- 4. 録音開始 (2回目のREC: 0x81) ---
zoomSerial.write((uint8_t)0x81); zoomSerial.write((uint8_t)0x00);
delay(200);
zoomSerial.write((uint8_t)0x80); zoomSerial.write((uint8_t)0x00);
}
void h4nStopRec() {
Serial.println("-> Sending TRUE STOP command (0x84)...");
// --- 1回目のSTOP (0x84 0x00) ---
// 資料のビットマップ 10bit目 = STOP に基づく数値
zoomSerial.write((uint8_t)0x84);
zoomSerial.write((uint8_t)0x00);
delay(200);
zoomSerial.write((uint8_t)0x80); // Release
zoomSerial.write((uint8_t)0x00);
delay(800); // 保存待ち
// --- 確実に止めるための2回目 ---
zoomSerial.write((uint8_t)0x84);
zoomSerial.write((uint8_t)0x00);
delay(200);
zoomSerial.write((uint8_t)0x80);
zoomSerial.write((uint8_t)0x00);
Serial.println("-> STOP sequence complete.");
}
ここら辺をいじくると色んな応用ができると思います。
例えば操作しずらい純正リモコンはやめて、フットスイッチで録音開始⇔停止な~んてことは簡単にできそうです。
勿論、TASCAMレコーダーにもあるスマホのBluetoothを使ったコントロールアプリのような事も・・
今回のキモはH4nとの通信の速度でしたが、上手く克服できて満足です。
以上
いらなくなったリレー基盤とリモコンです。





