検索コード

AIが曲を書き、このESP32があなたにその演奏を教えます

AIが曲を書き、このESP32があなたにその演奏を教えます

AIに曲を作らせ、演奏を聴き、そしてボードがあなたに演奏を教えてくれます

ムードを選び、WRITEをタップすると、AIが短いメロディーを作曲します。ボードがそれを演奏し、各キーを順に光らせます。次にLEARNをタップすると、先生に変わります。一度に1つのキーを光らせ、あなたがそのキーを押すのを待ち、音符ごとに、曲全体を自分で演奏するまで続けます。

922-これはAI Musicの記事です(現在の記事)

923-ピアノプロジェクトはこちらです。

いつでもフル21キーのピアノとして使えます。ただ演奏するだけです。

MaTouch AI ESP32-S3ボードで動作するAI Music Composer and Teacher
AI Music Composer and Teacher running on the MaTouch AI ESP32-S3 board

画面

MaTouch AI ESP32-S3のAI Musicメイン画面。6つのボタンが表示されています
The AI Music main screen on the MaTouch AI ESP32-S3, showing the six buttons

上部に6つのボタン、その下に21キーのキーボードがあります。7つのキーが3列に並び、C3からB5までです。ピアノプロジェクトとは異なり、ここには白黒のレイアウトはありません。AIが7つの自然音のみに制限されており、グリッドがそれらの音の見た目だからです。

ボタン 機能
STYLE ムードを切り替えます:HAPPY、SAD、SPOOKY、FOLK、LULLABY。これがAIに送信されます。
WRITE そのムードでメロディーをAIに依頼します。考えている間はWAITと表示され、返ってきたものを演奏します。
PLAY 現在読み込まれているメロディーを再生します。もう一度タップすると停止します。
LEARN 学習モード - 1つのキーを光らせ、あなたを待ちます。
WAVE 音色:SOFT、ORGAN、BRIGHT。
VOL タップして音量を1から5まで段階的に変更します。ラベルにレベルが表示されます。

ボードの起動時の音量は、スケッチの上部にある#define VOLUMEで設定されるため、好みのレベルでコンパイルでき、ライブでも変更できます。

AIが実際に生成するもの

ここは正確に述べる価値がある部分です。誇張しやすいからです。AIは音声を生成しません。実際の波形を生成するには大きなモデルとグラフィックカードが必要です。マイクロコントローラーがそれを行うことはなく、そう主張する人は、他の場所でレンダリングされたファイルを再生しているだけです。

生成されるのは、通常のテキストとしての音符のリストです:

[{"n":"C4","ms":300},{"n":"E4","ms":300},{"n":"G4","ms":600}]

ボードはそれをArduinoJsonで解析し、ピアノプロジェクトと同じシンセサイザーで演奏します。短いテキストリクエスト1回のコストは1セント未満で、メロディーが届けば、インターネットを切断しても何度でも再生できます。

makerfabs_ESP32S3_cam_music_screen-10-

プロンプトがAIを制限する理由

リクエストでは、モデルがこのキーボードに物理的に存在する21の音符のみを使用できると指定しています。C3からB5までの自然音で、シャープやフラットはありません。これはシンセサイザーの制限ではありません。シンセサイザーは任意の周波数を再生できます。これには2つの良い理由があります:

  • 書かれたすべての音符は、LEARNモードが実際に教えることができるものです。対応するキーがあるからです
  • 1つのキーに留まることで、モデルがインスピレーションに欠ける日でも、結果が常に音楽的に聞こえます

言語モデルからの回答を解析する

モデルは親切であろうとします。ここでは、回答をマークダウンのフェンスで囲み、書いた内容について親しみやすい文を追加することを意味します。スケッチは裸のJSONを強く要求し、それでも最初の[と最後の]の間のすべてを防御的に取得します。キーボードに配置できない音符はスキップされ、少なくとも4つの使用可能な音符が残った場合のみ結果が受け入れられます。不完全な出力に寛容であることが、AIテキストを解析するプロジェクトの作業の大部分です。

空の返信とその回避方法

モデルやプロンプトを変更すると、一つだけ引っかかる点があります。DeepSeekは回答する前に推論を行い、その思考も回答と同じmax_tokens予算に計上されます。難しい質問をすると、予算全体を思考に費やし、空の返信を返すことがあります——何も含まれない成功したリクエストです。

このプロジェクトでは、簡単なムードは機能するのに、難しいムードは失敗するという形で現れました。SPOOKYとLULLABYは短調を要求しますが、シャープやフラットがすべて禁止されている場合、これは本当に難しく、モデルは熟考した末に——予算を使い果たしました。ハ長調のHAPPYは即座に回答しました。

修正方法は2つあり、このスケッチでは両方を使用しています。リクエストは"thinking": {"type": "disabled"}を送信し、推論を完全にオフにして、予算全体を回答に充て、返信がはるかに速くなります。また、プロンプトでは現在、シャープを使わずに短調を出す方法をモデルに指示しています——AまたはEを中心にメロディを配置します。これらは同じ音を使用します。

学習モード

LEARNをタップすると、1つのキーが緑色に変わります。それを押すと、ボードは次の音に進みます。間違ったキーを押しても音は鳴ります——結局ピアノですから——しかし先には進みません。ステータスバーに進行状況が表示され、最後に到達するとその旨が通知されます。

タイミングのプレッシャーもスコアもありません。必要なだけ待ってくれるので、単なる目新しさではなく、フレーズを学ぶために本当に使えるものになっています。

MaTouch AI ESP32-S3のLEARNモード - 1つのキーが点灯し、押されるのを待っている
MaTouch AI ESP32-S3のLEARNモード - 1つのキーが点灯し、押されるのを待っている

WiFiなしでも動作します

スケッチに曲が組み込まれているため、PLAYLEARNはネットワークなしで完全に動作します。インターネットが必要なのはWRITEだけです——そして必要なのはDeepSeekキーだけです。このプロジェクトにはAzureやOpenAIのアカウントは不要です。

テストするときは、最初にPLAYをタップしてください:これにより、ネットワークが関与する前にオーディオ経路とキーボードが確認されるため、後でWRITEが失敗した場合でも、どこを確認すればよいか既にわかっています。

ルーターをオフにしてメロディを再生 - 今はボード上に保存されている
ルーターをオフにしてメロディを再生 - 今はボード上に保存されている

さらに発展させるためのアイデア

  • スタイルリストを編集して「海のシャンティのスタイルで」メロディを依頼する。
  • 最初のフレーズに応答する2番目のフレーズを書かせる。
  • メロディをSDカードに保存して、ボードが時間とともに歌集を構築できるようにする。
  • 音声アシスタントプロジェクトのマイクを追加して、プリセットをタップする代わりにリクエストを話すことができるようにする。

MaTouch AI ESP32-S3 2.8インチボードについて

このページのすべてのプロジェクトは、MakerfabsのMaTouch AI ESP32-S3 2.8インチTFT ST7789Vで動作します。これはオールインワンボードです:カラータッチスクリーン、3メガピクセルカメラ、2つのマイク、本格的なスピーカーアンプを備え、すべてESP32-S3と8MBのPSRAMで駆動されます。この組み合わせにより、他のものを何も接続せずに、単一のボードでこれらのAIプロジェクトが可能になります。

8MBのPSRAMは、ここにある他のどの数値よりも重要です。これにより、ボードはカメラフレーム、数秒の録音オーディオ、またはbase64エンコードされた写真を同時にメモリに保持できます——どれもESP32の通常のRAMには収まりません。

メーカー文書:Makerfabs wikiページ

このボードの他のすべてのプロジェクト——カメラ、オフライン顔認識、AI音声アシスタント、AIビジョン、描画プロジェクト——にはそれぞれ独自のチュートリアルがあります。すべてへのリンクはこの記事の下にあります。

主な仕様

  • プロセッサ:ESP32-S3、デュアルコア240MHz、WiFi 2.4GHz + Bluetooth 5.0
  • メモリ:16MBフラッシュ、8MB PSRAM(ここのほぼすべてのプロジェクトで必要)
  • ディスプレイ:2.8インチIPS、320×240、ST7789Vドライバ、SPI
  • タッチ:GT911静電容量式、5本指同時追跡
  • カメラ:OV3660、3メガピクセル、最大2048×1536
  • マイク:INMP441 I2Sデジタルマイク2つ(本格的なステレオペア)
  • スピーカー:MAX98357AクラスDアンプ、4Ωで3.2W
  • ストレージ:microSDカードスロット(SPIモード)
  • 電源:USB-C、JSTバッテリーコネクタ、TP4056充電器、電源スイッチ
  • その他搭載:WS2812B RGB LED、PCF8563Tバッテリー駆動リアルタイムクロック、および公式仕様には記載されていないMAX17048バッテリー燃料ゲージ

バッテリーから電源を供給していますか? 2つのUSB-Cソケット、TP4056充電器、電源スイッチについては、ボードテスト記事で回路図とともに詳しく説明されています。どのソケットが充電用か、スイッチをオンにするかオフにするかも含めて解説しています。

Arduino IDEの設定

これらの設定は重要です。このボードで報告される問題のほとんどは、これらのいずれかが間違っていることが原因であり、コアバージョンを変更するとリセットされるため、変更後は再度確認してください。

設定
ボード ESP32S3 Dev Module
ESP32コアバージョン 2.0.17
PSRAM OPI PSRAM
フラッシュサイズ 16MB(128Mb)
パーティションスキーム 16M Flash(3MB APP/9.9MB FATFS)
USB CDC On Boot Disabled
アップロード速度 921600
アップロード前に全フラッシュを消去 Disabled
ポート CH340K USB-Cポート

アップロードが失敗する場合:手動でボードをダウンロードモードにする

ほとんどの場合、Uploadを押すだけで動作します。しかし、時には動作しないことがあります。IDEがConnecting......で止まり、その後Failed to connect to ESP32-S3: No serial data receivedというエラーで諦めてしまいます。

これは、IO0がこのボードで同時に3つの役割を担っているために発生します。BOOTボタン、CH340Kからの自動リセットライン、そしてRGB LEDのデータラインです。ボード上で既に実行中のスケッチがそのLEDを駆動している場合、自動リセットと競合する可能性があり、チップはブートローダではなく古いスケッチで再起動します。

修正には5秒かかります。自分でダウンロードモードにしてください:

  1. BOOTボタンを押し続けます
  2. BOOTを押したまま、RESETを押して、RESETを離します。
  3. 次にBOOTを離します。画面が空白になります。これはブートローダが待機している状態です。
  4. Uploadをクリックします。
  5. 完了したら、RESETを1回押して新しいスケッチを実行します。

それでも接続できない場合は、Upload Speedを115200に下げて再試行してください。また、ボードの電源スイッチがオンになっているか確認してください。CH340Kはボード自体の電源がオフでも列挙され、COMポートを提供するため、人々を混乱させることがあります。

必要なライブラリ

このプロジェクトには、以下の表のすべてのライブラリが必要です。それ以上でもそれ以下でもありません。ほとんどはArduino IDEのTools → Manage Librariesから直接インストールできますが、GFX Library for ArduinoはZIPファイルからインストールする必要があります。バージョン番号は重要なので、記載されているものを正確に使用してください。

ライブラリ バージョン 作者 インストール元
GFX Library for Arduino 1.5.6 moononournation ZIPファイル - 下記参照
bb_captouch 1.3.1 Larry Bank ライブラリマネージャ
ArduinoJson 7.x Benoit Blanchon ライブラリマネージャ
Adafruit NeoPixel 最新版なら可 Adafruit ライブラリマネージャ

ZIPファイルからGFXライブラリをインストールする

  1. ZIPをダウンロードします。これはこのプロジェクトのダウンロードに含まれているか、Arduino_GFXリポジトリから入手できます。緑色のCodeボタンをクリックし、次にDownload ZIPをクリックします。
  2. 再度見つけられる場所に保存します。解凍しないでください。
  3. Arduino IDEで、スケッチライブラリをインクルード.ZIP形式のライブラリを追加...をクリックします。
  4. ダウンロードしたZIPファイルを参照して、開くをクリックします。
  5. IDEがインストールし、ウィンドウの下部で確認します。すでに1.6バージョンがインストールされている場合は、先にDocuments/Arduino/librariesからそのフォルダを削除してください。そうしないと、2つが競合します。

secrets.hの設定

Wi-Fiの詳細とAPIキーはsecrets.hに入れます。これはプレースホルダー値とともにダウンロードに含まれています。Arduino IDEでそのタブを開き、自分のものに置き換えてください。

APIキーの取得

このプロジェクトはクラウドAIサービスと通信するため、独自のキーが必要です。これまでにやったことがない場合でも心配しないでください。これは、サービスにアカウントを識別させるパスワードと同じ考え方です。一度だけ、数分かかります。

DeepSeek - 思考部分

DeepSeekは、実際に質問に答える言語モデルです。安価で、数ドルのクレジットで何千もの応答が可能です。

  1. platform.deepseek.comにアクセスしてアカウントを作成します。
  2. メニューでAPI keysを開き、Create new API keyをクリックします。
  3. すぐにコピーしてください。 一度だけ表示され、二度と表示されません。紛失した場合は、そのキーを削除して新しいものを作成してください。
  4. Top upで少額のクレジットを追加します。無料枠はありませんが、この使用量では最小のチャージで非常に長持ちします。

キーをsecrets.hDEEPSEEK_KEYとして入れます。sk-で始まります。

実行にかかる費用

非常に少額ですが、無料ではありません。プロジェクトを実行したままにする前に、おおよその支出を把握しておくべきです。

サービス おおよその費用
DeepSeek 回答1件あたり1セント未満 - 数ドルで何千もの応答

価格は変動するため、これらは見積もりではなくガイドとして扱ってください。これらのサービスにはすべて使用量ページがあり、支出を確認できます。また、すべてに支出制限を設定する機能があり、初日に行う価値があります。

トラブルシューティング

症状 原因と修正
画面が黒いまま GFXライブラリのバージョンが間違っている(1.5.6を使用)か、ボード設定が間違っています。
PSRAM alloc failed ツール → PSRAMOPI PSRAMに設定されていません。
アップロードされない / COMポートがない USB-Cポートが間違っているか、CH340ドライバーがインストールされていません。

画像

makerfabs_ESP32S3_cam_music_screen-1-
makerfabs_ESP32S3_cam_music_screen-1-
makerfabs_ESP32S3_cam_music_screen-4-
makerfabs_ESP32S3_cam_music_screen-4-
makerfabs_ESP32S3_cam_music_screen-10-
makerfabs_ESP32S3_cam_music_screen-10-
コードは添付されていません。

リソースと参考文献

ファイル📁

Arduino コード (.ino)

データシート(pdf)