検索コード

ESP32タッチスクリーンをピアノに変える – サウンドファイル不要

ESP32タッチスクリーンをピアノに変える – サウンドファイル不要

浮起的琴键、真正的和弦,以及芯片上生成的声音

触摸屏上可弹奏的钢琴。琴键看起来凸起,触摸时会按下,触摸面板可追踪五根手指,因此您可以弹奏和弦,每个音符都由处理器合成——不涉及声音文件,也不使用SD卡。

922-这是AI音乐文章项目在这里。

923-钢琴(即当前文章)

它完全离线。烧录后即可弹奏。

在MaTouch AI ESP32-S3板上运行的触摸屏钢琴

两种布局,以及为何两者并存

此草图包含两个完全不同的键盘,左上角的LAYOUT按钮可在它们之间切换。该按钮上的标签会告诉您当前处于哪种模式,因此它也兼作指示器——点击它即可切换。

KEYS——真正的钢琴

MKRFAB3_4-D1.MOV.00_00_34_49.Still001

七个白键横跨整个宽度,五个黑键位于其上,与真正的键盘完全一致。这是该板启动时的默认模式。由于只能容纳一个八度,LAYOUT旁边的-+按钮可让您上下移动;它们之间的青色读数显示当前位置,从C3到C6。

GRID——四个八度,没有错音

MaTouch AI ESP32-S3上的GRID布局——四行七音符
MaTouch AI ESP32-S3上的GRID布局——四行七音符

四行七列,共28个键同时可用。每是一个八度,最低的在底部;每是一个音符——C、D、E、F、G、A、B。没有升号,没有降号,因此整个板面是C大调,没有错音。您可以把它交给从未弹过任何乐器的人,让他们随意敲击,听起来仍然像音乐。

为何真正的键盘只能容纳一个八度

这是决定整个项目形态的算术。屏幕宽320像素,但实际宽度仅约2.2英寸,因此一个指尖大约覆盖45像素。

  • 一个八度——七个白键,每个约45像素。舒适。
  • 两个八度——十四个白键,每个约22像素。半个指尖宽。无法弹奏。

因此,真正的钢琴布局在这里只能显示一个八度,这就是八度按钮存在的原因——也是当您想要音域和可靠性而非真实感时,网格布局作为替代方案的原因。

在代码中更改布局

草图顶部附近的三个设置控制所有这些:

设置 功能
BOOT_LAYOUT 开机时显示哪个键盘。LAYOUT_KEYS为钢琴,LAYOUT_GRID为网格。
ROWS GRID显示的八度数。默认4。
COLS GRID中每行的音符数。默认7,即七个自然音。
BASE_OCTAVE GRID底行起始的八度。默认3。

凸起效果是如何实现的

每个键的顶部和左侧有浅色边缘,底部和右侧有深色边缘,视觉上会让人感觉是凸出的。按下键时,这些边缘互换并加深键面,看起来像是被按进去了。每条边缘只需两行代码,效果却很逼真。

声音是如何生成的

这块板上没有任何录音。没有采样,存储卡上也没有任何内容。每个音符都是一个相位累加器,逐步遍历一个512项的正弦表——快速遍历产生高音,慢速遍历产生低音——因此每个样本无需计算三角函数。混合三个谐波以增加温暖感。

每个音符还带有短暂的起音和释音包络,大约6毫秒起音、70毫秒释音。没有它,每次音符开始或停止时您都会听到咔嗒声,因为您是在全振幅下切换波形。这个包络就是乐器与蜂鸣器之间的区别。

最大五个音符混合在一起,与面板报告的五个触摸点对应。i2s_write()在音频缓冲区满时会阻塞,这恰好以实时方式控制整个程序的节奏——无需定时器或中断。

按钮

  • LAYOUT在KEYS和GRID之间切换。标签显示当前所在模式。
  • -+移动八度。仅限KEYS布局。
  • VOL在键盘上方打开音量面板——拖动滑块设置音量。再次点击VOL关闭。
  • DEMO自动播放一首曲子,并随播放点亮每个按键。
  • WAVE在SOFT、ORGAN和BRIGHT之间循环音色。默认从ORGAN开始,这最适合这个小扬声器,但三种都可以试试。

音量控制

这块板上的放大器声音真的很大——4 Ω扬声器下输出3.2 W——所以能调低音量很重要。点击VOL会在键盘上方滑出一个带大拖拽滑块的面板;当前音量也永久显示在顶部栏中。

面板打开时,它会故意吞掉顶部栏下方的所有触摸,因此你不会意外通过它触发音符。该设置是在混合音频缩放为16位时通过一次乘法应用的,运行时零成本,并且对演示曲目同样生效。如果默认的十级不够精细或需要更粗,可在草图中调整VOL_STEPS

无WiFi,无账户,无需设置

值得明确说明,因为这个系列中的其他每个项目都需要某个账户:这个不需要。没有需要填写的secrets.h,没有API密钥,没有网络。烧录即可播放。在为这块板构建的所有项目中,这是最适合交给初学者的一个。

试试和弦

同时按下三四个键。触摸控制器跟踪五根手指,所以它们会一起发声——那一刻它就不再像蜂鸣器,而开始像一种乐器。

关于MaTouch AI ESP32-S3 2.8"板

此页面上的每个项目都运行在Makerfabs的MaTouch AI ESP32-S3 2.8" TFT ST7789V上。这是一块一体化板:彩色触摸屏、3百万像素摄像头、两个麦克风和一个真正的扬声器放大器,全部由带8 MB PSRAM的ESP32-S3驱动。正是这种组合使得这些AI项目能在单块板上实现,无需连接其他任何东西。

8 MB的PSRAM比这里任何其他数字都重要。它让板子能同时在内存中保存一帧摄像头图像、几秒录音或base64编码的照片——这些都无法容纳在ESP32的正常RAM中。

制造商文档:Makerfabs wiki页面

这块板的其他每个项目——摄像头、离线人脸识别、AI语音助手、AI视觉和绘图项目——都有自己的教程。所有链接都在本文下方。

主要规格

  • 处理器:ESP32-S3,双核240 MHz,WiFi 2.4 GHz + 蓝牙5.0
  • 内存:16 MB闪存,8 MB PSRAM(这里几乎所有项目都需要)
  • 显示屏:2.8" IPS,320×240,ST7789V驱动,SPI
  • 触摸:GT911电容式,同时跟踪5根手指
  • 摄像头:OV3660,3百万像素,最高2048×1536
  • 麦克风:两个INMP441 I2S数字麦克风(真正的立体声对)
  • 扬声器:MAX98357A D类放大器,4 Ω下3.2 W
  • 存储:microSD卡槽(SPI模式)
  • 电源:USB-C、JST电池连接器、TP4056充电器、电源开关
  • 板上其他组件:WS2812B RGB LED、PCF8563T电池供电实时时钟,以及一个在官方规格中列出的MAX17048电池电量计

用电池供电?两个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 無効
アップロード速度 921600
アップロード前にフラッシュを全消去 無効
ポート 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 ライブラリマネージャ
Adafruit NeoPixel 最新版であれば可 Adafruit ライブラリマネージャ

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

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

トラブルシューティング

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

画像

makerfabs_ESP32S3_cam_music_screen-10-
makerfabs_ESP32S3_cam_music_screen-10-
makerfabs_ESP32S3_cam_music_screen-12-
makerfabs_ESP32S3_cam_music_screen-12-
MKRFAB3_4-D1.MOV.00_00_34_49.Still001
MKRFAB3_4-D1.MOV.00_00_34_49.Still001
コードは添付されていません。

リソースと参考文献

まだリソースはありません。

ファイル📁

ファイルは利用できません。