تصور کنید تمام صدای یک آمپلیفایر حرفهای گیتار در تراشهای به اندازه یک ناخن جای بگیرد. CoyoPedal که در ۲۶ سپتامبر ۲۰۲۶ منتشر شد، ثابت کرد که میکروکنترلر ESP32-S3 قادر است مدلهای کامل Neural Amp Modeler (NAM) A2 را بدون نیاز به تراشههای پردازش سیگنال دیجیتال (DSP) و بهصورت بلادرنگ اجرا کند.
برای سالها، شبیهسازی عصبی آمپلیفایرها به قدرت پردازشی بالایی نیاز داشت که معمولاً در اختیار رایانهها یا سختافزارهای گرانقیمت بود. اکثر پروژههای آماتوری یا از مدلهای سادهشده استفاده میکردند یا با تأخیر (Latency) زیاد مواجه بودند. CoyoPedal با بهینهسازی معماری WaveNet بهطور خاص برای هستههای Xtensa در ESP32-S3، این معادله را تغییر داد.
همانطور که در تحلیلهای پیشین ما دربارهی رایانش لبه (Edge Computing) اشاره کردیم، انتقال مدلهای سنگین به سختافزارهای کوچک، کلید دموکراتیزه کردن ابزارهای تخصصی است. در اینجا نیز شاهد هستیم که یک ابزار حرفهای موسیقی از دستان شرکتهای بزرگ به دست توسعهدهندگان متنباز رسیده است.
معماری سختافزاری
طبق مستندات این پروژه، سختافزار مرجع بر پایه Waveshare ESP32-S3-Touch-AMOLED-2.06 طراحی شده است، هرچند که سیستم از ماژولهای خام S3 نیز پشتیبانی میکند. این برد مرجع شامل یک صفحه نمایش لمسی AMOLED با رزولوشن ۴۱۰ در ۵۰۲ پیکسل، یک مدار مدیریت توان (PMIC) مدل AXP2101 و یک درگاه microSD برای بارگذاری مدلهای سفارشی است.
برای مدیریت حجم محاسبات سنگین، سیستم از ESP32-S3 با ۸ مگابایت حافظه PSRAM استفاده میکند. این حافظه حیاتی است چون مدل A2 در حین اجرا در آن جای میگیرد. دستگاه بهعنوان میزبان USB عمل کرده و یک رابط صوتی استاندارد (Class-compliant) را با نرخ ۴۸ کیلوهرتز مدیریت میکند. این سیستم با رابطهای XTONE Pro و IK Multimedia iRig HD X تست شده است، در حالی که پشتیبانی از iRig HD 2 از طریق یک پروفایل اختصاصی UAC1 صورت میگیرد.

پشتیبانی سختافزاری و نسخهها
به گزارش توسعهدهندگان، سفتافزار (Firmware) این دستگاه بسیار منعطف است و پیکربندیهای سختافزاری مختلفی را پشتیبانی میکند:
- برد AMOLED: دارای ۳۲ مگابایت فلش، ۸ مگابایت PSRAM و پنل لمسی کامل است. کنترل دستگاه از طریق صفحه نمایش لمسی و دکمه BOOT انجام میشود (یک ضربه برای Bypass و نگه داشتن به مدت ۱.۵ ثانیه برای ورود به حالت تعمیرات یا Maintenance).
- ESP32-S3-DevKitC-1 و ماژولهای خام: این نسخهها از ماژولهای N16R8 یا S3R8 با ۱۶ مگابایت فلش و ۸ مگابایت PSRAM استفاده میکنند. این بردها فاقد پنل نمایشگر، PMIC و درگاه SD هستند. در این مدلها، دکمه BOOT بهعنوان پدال اصلی برای فعال یا غیرفعال کردن (Engage/Bypass) پدال عمل میکند.
از آنجا که ماژولهای خام فاقد PMIC و مسیر تغذیه باتری هستند، نمیتوانند برق درگاه میزبان USB را تأمین کنند؛ بنابراین رابط صوتی باید توسط یک منبع تغذیه خارجی برقرسانی شود. سفتافزار هر برد را از طریق شماره سریال USB شناسایی میکند تا CLI بتواند آنها را بدون توجه به درگاه مورد استفاده، ثبت کند.
پردازش سیگنال (DSP) و عملکرد
در قلب این پدال، یک شبکه عصبی WaveNet با ۲۳ لایه و هشت کانال قرار دارد. طبق مستندات گیتهاب، این موتور با استفاده از کرنلهای دستنویس Xtensa و در حالت ممیز شناور بلوکی (Block Floating Point) اجرا میشود.
پردازش بین هر دو هسته تراشه در بلوکهای ۶۴-فریمی تقسیم شده است. در یک برد توسعه، سیستم بین ۹۱٪ تا ۹۴٪ از بودجه زمانی ۱,۳۳۳ میکروثانیهای هر بلوک را مصرف میکند. این دقت در زمانبندی تضمین میکند که هیچ ددلاینی از دست نرود و صدا بدون هیچگونه قطع یا لرزشی (Glitch-free) در حین نوازندگی بلادرنگ پخش شود. رابط صوتی از طریق توصیفات USB شناسایی میشود، به این معنی که هر رابطی که ورودی و خروجی UAC2 با نرخ ۴۸ کیلوهرتز را ارائه دهد، باید سازگار باشد.
پشته نرمافزاری (Software Stack)
برای کاهش بار پردازشی و حذف سربار موتورهای جاوااسکریپت روی دستگاه، رابط کاربری لمسی با TSX نوشته شده و توسط فریمورک Gea مستقیماً به C++ نیتیو کامپایل میشود. این یعنی دستگاه یک فایل باینری اجرا میکند، نه یک اسکریپت تفسیری.
کاربران میتوانند زنجیره افکتهای خود را بهصورت جامع مدیریت کنند:
- پیش-آمپلیفایر (Pre-Amp): شامل Gate، کمپرسور، کوروس و درایو.
- پس-آمپلیفایر (Post-Amp): شامل تأخیر دیجیتال (Digital Delay) و ریورب استریو مدل Spring.
- ابزارها (Utilities): یک تیونر روی صفحه که هنگام استفاده خروجی صدا را قطع (Mute) میکند و یک مدیریتکننده پریستها با کیبورد مجازی برای نامگذاری.
رابط کاربری و کنترل
در صفحه اصلی، زنجیره سیگنال به ترتیب نمایش داده میشود. کاربر با ضربه زدن روی هر بلوک آن را فعال/غیرفعال میکند و با نگه داشتن آن، مقادیر را از طریق یک اسلایدر تغییر داده و با فلشهای ‹ › بین کنترلها جابجا میشود. نگه داشتن بلوک Amp، مرورگر مدلها را باز میکند که مدلهای پیشفرض کارخانه، فایلهای وارد شده و پوشههای کارت SD را سازماندهی میکند.
پریستها روی پدال ذخیره میشوند و میتوان بر اساس صدای فعلی، پریست جدیدی ساخت. پدال هنگام بوت شدن با آخرین پریست ذخیره شده فعال میشود، یا اگر انتخابی ذخیره نشده باشد، بهطور پیشفرض روی صدای Clean مدل "Silver Lining" قرار میگیرد. در تمام بردها، دکمه BOOT بهعنوان پدال عمل میکند: فشار کوتاه برای فعال/غیرفعال کردن و نگه داشتن ۱.۵ ثانیهای برای جابجایی بین حالت صوتی و حالت تعمیرات. صفحه نمایش هنگام رسیدن به آستانه زمانی نگه داشتن دکمه، یک نشانه بصری نمایش میدهد.
بارگذاری مدل و ذخیرهسازی
یکی از کاربردیترین ویژگیها، بارگذاری مستقیم فایلهای .nam است. مدلهای مورد پشتیبانی باید ۴۸ کیلوهرتز، هشت کاناله NAM A2 (مدلهای A2-Full) و شامل اعضای سازگار با SlimmableContainer باشند. سایر معماریها یا نرخهای نمونهبرداری با خطا رد میشوند.
کاربران کافی است فایلهای اصلی را در پوشه /nam در ریشه یک کارت microSD با فرمت FAT کپی کنند (پشتیبانی تا ۶ سطح زیرپوشه). پدال این فایلها را روی دستگاه تجزیه و اعتبارسنجی میکند و نیازی به تبدیلکننده دسکتاپ نیست. فایلها باید کمتر از ۲ مگابایت باشند و نام آنها حداکثر ۱۲۷ بایت باشد.
برای افزایش سرعت بارگذاری در دفعات بعدی، پدال یک فایل .s3cache تأیید شده در کنار فایل اصلی میسازد. این کار مانع از تأخیر چند ده ثانیهای میشود که برای آمادهسازی مدل در اولین انتخاب لازم است. فایل اصلی .nam هرگز تغییر نمیکند. همچنین کاربران میتوانند کتابخانه کامل VoLum را با دستور npm run fetch:volum -- /Volumes/SDCARD وارد کنند.
وباسمبلی (WebAssembly) و تعمیرات
پروژه شامل یک بیلد WebAssembly است که دقیقاً DSP و UI سختافزار را بازسازی میکند. این به نوازندگان اجازه میدهد پیش از فلش کردن مدلها روی برد فیزیکی، آنها را در مرورگر و از طریق یک رابط صوتی تست کنند. نسخه مرورگر، فراخوانیهای SD را از طریق یک پوشه محلی پاسخ میدهد و پریستها را در فایل coyopedal-presets.json ذخیره میکند. مرورگرهای کروم و اج از نوشتن در پوشه پشتیبانی میکنند، در حالی که سافاری و فایرفاکس از حافظه داخلی مرورگر استفاده میکنند.
برای تعمیرات، سیستم از بهروزرسانی OTA (Over-the-Air) احراز هویتشده از طریق Wi-Fi استفاده میکند. ورود به حالت تعمیرات با نگه داشتن دکمه BOOT به مدت ۱.۵ ثانیه یا از طریق منوی Setup روی صفحه انجام میشود. در این حالت، گراف صوتی تخلیه شده و رادیوهای Wi-Fi و BLE روشن میشوند؛ در حالی که هنگام نوازندگی، رادیوها برای جلوگیری از تداخل کاملاً خاموش هستند.
جزئیات ساخت و استقرار
ساخت سفتافزار به Node.js 22.13+، پایتون ۳ (همراه با Pillow و fontTools برای رستر کردن UI) و کامپایلر C++20 نیاز دارد. CLI مربوط به Gea، نصب ESP-IDF 6.0.2 را مدیریت میکند.
برای نسخه وب، از SDK Emscripten استفاده شده است. گراف صوتی در یک AudioWorklet روی حافظه مشترک اجرا میشود که نیازمند اسناد cross-origin-isolated (از طریق SharedArrayBuffer) است. سایت روی یک باکت Cloudflare R2 با استفاده از یک اسکریپت API سفارشی S3 مستقر شده تا محدودیتهای REST endpoint دور زده شود. این کار لازم است زیرا دستورات R2 در Wrangler به توکن Admin کل حساب نیاز دارند، اما اسکریپت استقرار از یک توکن API با دسترسی محدود (فقط خواندن و نوشتن Object) استفاده میکند.
جزئیات پیادهسازی فنی
چیدمان حافظه و فلش:
- برد AMOLED: فلش به دو اسلات ۸ مگابایتی OTA، یک پارتیشن مدلهای کارخانه، یک پارتیشن پریستهای کارخانه و یک پارتیشن برای مدلهای وارد شده تقسیم شده است. پریستهای ذخیره شده در NVS (حافظه غیرفرار) قرار میگیرند که با فلش کردن پاک نمیشوند.
- بردهای بدون نمایشگر (Headless): بردی که نمایشگر ندارد، با حذف بافرهای فریم، درخت اپلیکیشن و زمانبند فریم، حدود ۱ مگابایت فضای تصویر و ۱.۲۵ مگابایت PSRAM ذخیره میکند. این اتفاق زمانی میافتد که تعریف هدف (Target) فاقد
chips.displayوcanvasباشد. - الزام PSRAM: داشتن ۸ مگابایت PSRAM برای تمام بردها جهت جای دادن مدل A2 اجباری است.
ابزارهای تعمیرات و مدیریت از راه دور:
- احراز هویت: اعتبارنامههای Wi-Fi و توکنها در
src/native/services/remote_config.hکامپایل میشوند. اگر این فایل موجود نباشد، سرویسهای رادیویی حذف شده و اندازه ایمیج حدود ۴۰۰ کیلوبایت کاهش مییابد. - مدیریت از راه دور: برای بردهای بدون نمایشگر، کنترلها از طریق
tools/esp32/amoled_remote.pyدر دسترس هستند. این ابزار امکان شناسایی، خواندن لاگها و بهروزرسانی OTA را فراهم میکند. - گردش کار OTA: پس از بهروزرسانی OTA، پدال یک بار در حالت صوتی بوت میشود و سپس بهطور خودکار برای تأیید لاگها به حالت تعمیرات باز میگردد.
محتوای پیشفرض:
- مدلهای موجود: سفتافزار با دو مدل دارای لایسنس MIT از VoLum عرضه میشود: Diezel Herbert (کانال ۱، کابینت V30) و Ampete One (کانال ۴، کابینت V30).
گردش کار توسعه و تست
برای تضمین پایداری، پروژه از یک خط لوله تست سختگیرانه استفاده میکند. دستور npm test توصیفات USB، افکتها، پریستها و مدل آمادهشده NAM را اعتبارسنجی میکند، در حالی که npm run check کارهای Linting، تایپاسکریپت و فرمتبندی را انجام میدهد. GitHub Actions این تستها را روی هر Push و Pull Request اجرا میکند.
توسعهدهندگان میتوانند با npm run dev سریعاً تغییرات را در پیشنمایش DOM از UI مربوط به TSX ببینند. برای نمایش دقیقتر، بیلد WASM از geatsc برای تبدیل TSX به C++ استفاده میکند و آن را با همان موتور Layout و Paint متصل میکند که روی پنل فیزیکی استفاده شده است. این تضمین میکند آنچه در مرورگر دیده میشود، دقیقاً همان چیزی است که روی صفحه AMOLED ظاهر میشود.
تعریف اهداف (Targets) و بردهای سفارشی
راهاندازی یک برد جدید مستلزم تعریف قابلیتهای سختافزاری آن در @geastack/targets است. دو سوال اصلی پیکربندی بیلد را تعیین میکنند:
۱. آیا صفحه نمایش وجود دارد؟ اگر هر دو مورد chips.display و canvas غایب باشند، بیلد مقدار GEA_EMBEDDED_NO_DISPLAY=1 را تنظیم میکند. این کار بافرهای فریم و تسکهای زمان اجرا را حذف کرده و حافظه قابل توجهی ذخیره میکند.
۲. آیا PMIC وجود دارد؟ اگر تراشه توانی تعریف نشده باشد، مقدار GEA_BOARD_HAS_POWER=0 تنظیم شده و فایل src/native/drivers/power.cpp به صورت no-op کامپایل میشود تا از خطاهای لینکینگ به دلیل نبود AXP2101 جلوگیری شود.
اگر اندازه فلش یک برد با مرجع ۳۲ مگابایتی AMOLED متفاوت باشد، باید یک چیدمان پارتیشن سفارشی در package.json تحت بخش gea.targets.esp32.partitionsByTarget اضافه شود. CLI مربوط به Gea بردها را از طریق شماره سریال USB شناسایی میکند تا پیکربندی درست بدون توجه به پورت USB فلش شود.
تحلیل: تغییر خط مبنای هوش مصنوعی لبه (Edge AI)
CoyoPedal نشاندهنده یک تغییر قابل توجه در نگاه ما به «هوش مصنوعی لبه» برای صوت است. توسعهدهنده با عبور از C++ عمومی و استفاده از کرنلهای اسمبلی دستنویس برای معماری Xtensa، توانسته است مدلسازی عصبی در سطح حرفهای را از یک میکروکنترلر ارزانقیمت استخراج کند.
این موضوع نشان میدهد که گلوگاه هوش مصنوعی روی دستگاه، همیشه سرعت خام کلاک تراشه نیست، بلکه کارایی پیادهسازی کرنل است. برای یک نوازنده، این به معنای کاهش هزینه دسترسی به مدلسازیهای دیجیتال پیشرفته از صدها دلار به قیمت چند برد آماتوری است.
اگر این الگوی کرنلهای بهینهشده دستنویس به سایر افکتهای صوتی گسترش یابد، احتمالاً شاهد موجی از سختافزارهای متنباز و فوقفشرده خواهیم بود که با واحدهای DSP اختصاصی و تجاری رقابت میکنند.
برای شروع، میتوانید نسخه مرورگر را در coyopedal.playtaurus.com بررسی کنید یا مخزن گیتهاب را کلون کنید تا پدال سختافزاری خود را بسازید.




گفتگو