فهرست مطالب:

MIDI Drum Kit در Python و Arduino: 5 مرحله (همراه با تصاویر)
MIDI Drum Kit در Python و Arduino: 5 مرحله (همراه با تصاویر)

تصویری: MIDI Drum Kit در Python و Arduino: 5 مرحله (همراه با تصاویر)

تصویری: MIDI Drum Kit در Python و Arduino: 5 مرحله (همراه با تصاویر)
تصویری: 35 видео со страшными призраками: мегасборник 2023 года [V1] 2024, جولای
Anonim
Image
Image
MIDI Drum Kit در پایتون و آردوینو
MIDI Drum Kit در پایتون و آردوینو
MIDI Drum Kit در پایتون و آردوینو
MIDI Drum Kit در پایتون و آردوینو

من از کودکی همیشه می خواستم کیت درام بخرم. در آن زمان ، تمام تجهیزات موسیقی از همه برنامه های دیجیتالی برخوردار نبودند ، همانطور که امروزه بسیاری از آنها وجود دارد ، بنابراین قیمت ها و انتظارات بسیار بالا بود. اخیراً تصمیم گرفتم ارزان ترین کیت درام را از eBay بخرم ، با تنها اولویت: توانایی خراب کردن آن و اتصال سخت افزار و نرم افزار خود به دستگاه.

خرید به هیچ وجه ناامید کننده نبود: کیت درام رول آپ قابل حمل با 9 پد صوتی مختلف ، دو پدال سوئیچ پا برای ضربه زدن به درام و کلاه و پریز برق میکرو USB. آنچه واقعاً انگیزه بخش بود ، صداهای خروجی است (استفاده واقعی از این کیت اتصال بلندگوی خارجی و لذت بردن از آن است). بنابراین ، تصمیم گرفتم آن را از طریق USB ، کیت درام MIDI مبتنی بر Arduino و رابط کاربری مبتنی بر پایتون ، برای استفاده مفید و تغییرات آسان مانند ، حجم ، یادداشت و انتخاب کانال ، به برنامه قابل برنامه ریزی خود تبدیل کنم.

ویژگی های دستگاه:

  • قیمت پایین
  • ایجاد کیت درام از هر ورودی دیجیتالی - حتی مجموعه ای از دکمه های فشار
  • پشتیبانی از ارتباطات و منبع تغذیه فقط از طریق رابط USB - ادغام مبدل USB به UART و دستگاه آردوینو
  • قطعات کوچک برای عملکرد مناسب
  • رابط کاربری مبتنی بر پایتون آسان برای استفاده
  • پشتیبانی MIDI کامل با سرعت قابل تنظیم ، توجه داشته باشید و پین های آردوینو
  • ذخیره و بارگذاری تنظیمات سفارشی طبل ذخیره شده در حافظه دستگاه

بریم سراغ پروژه…

مرحله 1: نظریه عملیات

نظریه عملیات
نظریه عملیات
نظریه عملیات
نظریه عملیات
نظریه عملیات
نظریه عملیات

نمودار بلوکی

اول از همه ، بیایید روی ساختار پروژه تمرکز کنیم و آن را به بلوک های جداگانه تقسیم کنیم:

کیت درام رول آپ

واحد اصلی پروژه. این شامل 9 پد جداگانه درام است ، که در آن هر پد آرایه ای از دکمه ها است که حالت منطقی خود را هنگام ضربه زدن تغییر می دهد. به دلیل ساختار آن ، امکان ساخت این کیت درام خاص از طریق هر دکمه فشاری وجود دارد. هر پد درام به مقاومت کششی روی برد اصلی الکترونیکی متصل است ، بنابراین در حالی که به درام ضربه می زنند ، یک سوئیچ خاص به زمین مدار وصل شده و LOW منطقی در خط پد درام وجود دارد. هنگامی که فشاری اعمال نمی شود ، کلید پد درام باز است و به دلیل مقاومت کششی به خط برق ، HIGH منطقی در خط پد درام وجود دارد. از آنجا که هدف پروژه ایجاد یک دستگاه MIDI دیجیتالی کامل است ، می توان از تمام قطعات آنالوگ روی PCB اصلی غافل شد. توجه به این نکته حائز اهمیت است که کیت درام دارای دو پدال برای ضربه زدن درام و کلاه ایمنی است که همچنین به مقاومت های کششی متصل شده و منطق عملکرد مشابهی با تمام لنت های درام دارند (در مورد آن کمی بعد بحث خواهیم کرد)

آردوینو پرو میکرو

مغز کیت طبل. هدف آن تشخیص این است که آیا سیگنالی از درام خارج می شود یا خیر و خروجی MIDI مناسب با تمام پارامترهای لازم را ارائه می دهد: توجه ، سرعت و مدت زمان سیگنال. به دلیل ماهیت دیجیتالی پدهای درام ، می توان آنها را به سادگی به ورودی های دیجیتال آردوینو (در کل 10 پین) متصل کرد. به منظور ذخیره همه تنظیمات مورد نظر و اطلاعات MIDI ، ما قصد داریم از حافظه آن-EEPROM ، استفاده کنیم ، بنابراین هر بار که دستگاه را روشن می کنیم ، اطلاعات MIDI از EEPROM بارگیری می شود و این امر باعث برنامه ریزی مجدد و تنظیم مجدد می شود. همچنین ، Arduino Pro-Micro در یک بسته بسیار کوچک موجود است و می توان آن را به راحتی در کیس داخلی درام کیت اختصاص داد.

مبدل USB به سریال FTDI

به منظور برنامه ریزی و تعریف ویژگی های دستگاه خود با کمک برنامه رایانه شخصی ، باید رابط USB را به سریال تبدیل کنید ، زیرا Arduino Pro-Micro USB ندارد. از آنجا که ارتباط بین دستگاهها بر اساس UART است ، دستگاه FTDI در این پروژه استفاده می شود ، زیرا استفاده از آن صرف نظر از خواص اضافی آن بسیار ساده است.

برنامه PC - پایتون

وقتی صحبت از توسعه رابط های کاربری و پروژه های سریع می شود ، پایتون یک راه حل عالی است. هدف از برنامه UI این است که بسیار راحت تر بتوانیم ویژگی های MIDI را برای کیت درام خود تعریف کنیم ، اطلاعات را ذخیره کنیم ، دستگاه برنامه را ایجاد کنیم و بدون نیاز به کامپایل مجدد کد بین سیستم ها ارتباط برقرار کنیم. از آنجا که ما از رابط سریال برای ارتباط با کیت درام استفاده می کنیم ، تعداد زیادی ماژول رایگان در سراسر اینترنت وجود دارد که از هر نوع ارتباط سریال پشتیبانی می کند. علاوه بر این ، همانطور که بعداً مورد بحث قرار خواهد گرفت ، رابط UART شامل سه پایه است: RXD ، TXD و DTR. DTR برای بازنشانی روی ماژول آردوینو استفاده می شود ، بنابراین هنگامی که ما علاقه مند به اجرای برنامه MIDI هستیم یا UI را به دستگاه برنامه متصل می کنیم ، نیازی به اتصال مجدد کابل USB یا هر چیزی نیست.

مرحله 2: قطعات و ابزارها

قطعات

  • کیت درام رول آپ
  • 2 عدد پدال پایدار (معمولاً در بسته DK موجود است).
  • FTDI - مبدل USB به سریال
  • آردوینو پرو میکرو
  • کابل میکرو USB

ابزارها

  • آهن لحیم کاری/ایستگاه
  • لحیم لحیم کاری
  • سیم تک هسته ای با قطر نازک
  • موچین
  • کاتر
  • پلان
  • چاقو
  • پیچ گوشتی
  • چاپگر سه بعدی (اختیاری - برای سیستم عامل پدال سفارشی)

نرم افزار

  • آردوینو IDE
  • پایتون 3 یا بالاتر
  • JetBrains Pycharm
  • رابط MIDI بدون مو
  • حلقه MIDI

مرحله 3: لحیم کاری و مونتاژ

لحیم کاری و مونتاژ
لحیم کاری و مونتاژ
لحیم کاری و مونتاژ
لحیم کاری و مونتاژ
لحیم کاری و مونتاژ
لحیم کاری و مونتاژ

از آنجا که سه ماژول باید ترکیب شوند ، فرآیند لحیم کاری و مونتاژ کوتاه و ساده است:

  • Arduino Pro-Micro را با دستگاه FTDI وصل کنید ، مطمئن شوید که اتصالات با ورودی/خروجی تعریف شده در هر دستگاه مطابقت دارد:

    • VBUS-VBUS
    • GND-GND
    • DTR-DTR
    • RXD-TXD
    • TXD-RXD
  • همه پیچ ها را از محفظه پلاستیکی درام بردارید ، مطمئن شوید که می توانید روی کابل پد به برد و مقاومت های کششی آن تمرکز کنید.
  • سیمهای نازک را برای ماژول Arduino-FTDI که قبلاً ساخته ایم لحیم کنید:

    • ورودی های دیجیتال: D [2:11]
    • VBUS
    • D+
    • د-
    • GND
  • ماژول را داخل محفظه باتری قرار دهید تا سیمها در همان سمت مقاومتهای کششی لنتها شناور شوند
  • همانطور که در شکل آخر نشان داده شده است ، تمام ورودی های دیجیتال را به پایانه های درام پد لحیم کنید.
  • اتوبوس میکرو USB (VBUS ، D+، D- ، GND) را به دستگاه FTDI لحیم کنید ، مطمئن شوید که خطایی در ردیابی این سیم ها وجود ندارد.
  • ماژول Arduino-FTDI را با چسب حرارتی به قاب باتری وصل کنید
  • دستگاه را با اتصال پیچ مناسب نصب کنید

ما این کار را انجام دادیم ، دستگاه مونتاژ شده است. بیایید به کد ادامه دهیم…

مرحله 4: برنامه نویسی A: Arduino

برنامه نویسی A: آردوینو
برنامه نویسی A: آردوینو

اجازه دهید طرح خود را گام به گام شرح دهیم:

اول از همه ، لازم است دو کتابخانه لازم برای عملکرد مناسب وجود داشته باشد. EEPROM قبلاً در Arduino IDE از پیش نصب شده است ، اما ماژول debouncer برای ضربه درام باید جداگانه نصب شود

#شامل #شامل شود

این سوئیچ ها عمدتا در توالی اشکال زدایی استفاده می شوند. اگر می خواهید اتصال پایانه های آردوینو به پد درام را امتحان کنید و تمام ورودی های دیجیتال را تعیین کنید ، این سوئیچ ها باید تعریف شوند

/ * سوئیچ های توسعه دهنده: حالت مورد نظر برای اشکال زدایی یا راه اندازی اولیه را بیان نکنید * ///#تعریف LOAD_DEFAULT_VALUES // بارگذاری مقادیر ثابت به جای EEPROM //#تعریف PRINT_PADS_PIN_NUMBERS // شماره پین چاپ شده که به پدی متصل است که از طریق پورت سریال ضربه خورده است

فیلدهای ثابت نشان دهنده تمام مقادیر پیش فرض ، از جمله شمارش درام پد است. برای راه اندازی دستگاه برای اولین بار ، باید اتصال دقیق پدال های Hi-Hat و Kick را بدانید

/ * شمارش نوع طبل */

enum DRUM_POSITION {KICK = 0 ، SNARE ، HIHAT ، RIDE ، CYMBAL1 ، CYMBAL2 ، TOM_HIGH ، TOM_MID ، TOM_LO ، HIHAT_PEDAL} ؛

/* مقادیر پیش فرض */

const uint8_t DRUM_NOTES [10] = {36، 40، 42، 51، 49، 55، 47، 45، 43، 48}؛ const uint8_t DRUM_VELOCITIES [10] = {110، 100، 100، 110، 110، 110، 110، 110، 110، 110}؛ const uint8_t DRUM_PINS [10] = {8 ، 6 ، 4 ، 3 ، 11 ، 9 ، 5 ، 10 ، 2 ، 7} ؛

/ * مدت زمان ضربه زدن درام */

const uint8_t KICK_DB_DURATION = 30 ؛

EEPROM برای ذخیره/بارگیری تمام داده های ناشی از برنامه رایانه استفاده می شود. محدوده آدرسهایی که در بالا توضیح داده شد ، محل دقیق اطلاعات MIDI را برای هر درام پد نشان می دهد

/* نقشه برداری آدرس EEPROM

یادداشت ها: | 0x00 ، 0x01 ، 0x02 ، 0x03 ، 0x04 ، 0x05 ، 0x06 ، 0x07 ، 0x08 ، 0x09 |

پین ها: | 0x0A ، 0x0B ، 0x0C ، 0x0D ، 0x0E ، 0x0F ، 0x10 ، 0x11 ، 0x12 ، 0x13 | سرعت | 0x14 ، 0x15 ، 0x16 ، 0x17 ، 0x18 ، 0x19 ، 0x20 ، 0x21 ، 0x22 ، 0x23 | */ const uint8_t NOTES_ADDR = 0x00 ؛ const uint8_t VELOCITIES_ADDR = 0x14؛ const uint8_t PINS_ADDR = 0x0A ؛

متغیرهای جهانی برای تعیین وضعیت هر پد و انجام ارتباط MIDI بر این اساس استفاده می شود

/ * متغیرهای جهانی */

uint8_t drumNotes [10] ، drumVelocities [10] ، drumPins [10] ؛ // متغیرهای MIDI

uint8_t uartBuffer [64]؛ // بافر UART برای جمع آوری و ذخیره ضربه گیر MIDI Data Debouncer (DRUM_PINS [KICK]، KICK_DB_DURATION) ؛ // شی Debouncer for kick drum volatile bool previousState [9] = {0، 0، 0، 0، 0، 0، 0، 0، 0}؛ // منطق قبلی درام پد حالت های فرار bool currentState [9] = {0، 0، 0، 0، 0، 0، 0، 0، 0}؛ // درام پد حالت های منطقی فعلی

توابع EEPROM

/* ذخیره تنظیمات در EEPROM*/

void storeEEPROM () {

memcpy (drumNotes ، uartBuffer ، 10) ؛ memcpy (drumPins ، uartBuffer + 10 ، 10) ؛ memcpy (drumVelocities، uartBuffer + 20، 10)؛ برای (uint8_t i = 0 ؛ i <10؛ i ++) EEPROM.write (NOTES_ADDR+i ، drumNotes ) ؛ برای (uint8_t i = 0؛ i <10؛ i ++) EEPROM.write (PINS_ADDR+i، drumPins )؛ برای (uint8_t i = 0؛ i <10؛ i ++) EEPROM.write (VELOCITIES_ADDR+i، drumVelocities )؛ }

/* بارگذاری تنظیمات از EEPROM*/

void loadEEPROM () {for (uint8_t i = 0؛ i <10؛ i ++) drumNotes = EEPROM.read (NOTES_ADDR+i)؛ برای (uint8_t i = 0 ؛ i <10؛ i ++) drumPins = EEPROM.read (PINS_ADDR+i) ؛ برای (uint8_t i = 0 ؛ i <10؛ i ++) drumVelocities = EEPROM.read (VELOCITIES_ADDR+i) ؛ }

راه اندازی متغیرها و حالت برنامه نویسی ، در مورد پدال ها و بوت آردوینو به طور همزمان فعال می شوند

void enterProgrammingMode () {

bool confirmBreak = false؛ uint8_t lineCnt = 0؛ uint8_t charCnt = 0؛ char readChar = 0؛ while (! confirmBreak) {if (Serial.available ()) {uartBuffer [charCnt] = Serial.read ()؛ if (charCnt> = 29) confirmBreak = true؛ else charCnt ++؛ }} Serial.println ("OK")؛ storeEEPROM ()؛ }

void initValues () {

#ifdef LOAD_DEFAULT_VALUES ممكپی (drumNotes ، DRUM_NOTES ، 10) ؛ memcpy (drumVelocities ، DRUM_VELOCITIES ، 10) ؛ memcpy (drumPins ، DRUM_PINS ، 10) ؛ #بار دیگرEEPROM ()؛ #endif}

کنترل کننده های ارتباط MIDI با تأخیر در زمان نگه داشتن یادداشت 1 میلی ثانیه

/ * پخش عملکرد یادداشت MIDI */

void midiOut (enum DRUM_POSITION drumIn) {

اگر (drumIn == HIHAT) {// اگر HI-HAT ضربه خورده است ، باید بررسی کنید که آیا پدال فشار داده شده است (! digitalRead (drumPins [HIHAT_PEDAL])) {noteOn (0x90 ، drumNotes [HIHAT_PEDAL] ، drumVelocities [HIHAT_PEDAL]) ؛ تأخیر (1) ؛ noteOn (0x90 ، drumNotes [HIHAT_PEDAL] ، 0) ؛ } else {noteOn (0x90 ، drumNotes [HIHAT] ، drumVelocities [HIHAT]) ؛ تأخیر (1) ؛ noteOn (0x90 ، drumNotes [HIHAT] ، 0) ؛ }} else {// درام معمولی MIDI انتقال یادداشت در (0x90 ، drumNotes [drumIn] ، drumVelocities [drumIn]) ؛ تأخیر (1) ؛ noteOn (0x90 ، drumNotes [drumIn] ، 0) ؛ }}

void noteOn (int cmd، int pitch، int velocity) {Serial.write (cmd)؛ Serial.write (زمین)؛ Serial.write (سرعت) ؛ }

توابع setup () و loop () با حلقه عملکرد دستگاه نامحدود:

void setup () {

Serial.begin (115200) ؛

برای (uint8_t i = 0؛ i <10؛ i ++) {pinMode (i+2، INPUT)؛ } #ifdef PRINT_PADS_PIN_NUMBERS در حالی که (درست) {// حلقه اشکال زدایی بی نهایت برای (uint8_t i = 0؛ i <10؛ i ++) {if (! digitalRead (i+2)) {Serial.print ("پین شماره: D") ؛ Serial.print (i + '0') ؛ // تبدیل شماره به کاراکتر ASCII}}} #else initValues ()؛ / * حالت برنامه نویسی: اگر دو پدال هنگام بوت شدن فشار داده شود - حالت فعال است */ اگر (! digitalRead (drumPins [KICK]) &&! digitalRead (drumPins [HIHAT_PEDAL])) enterProgrammingMode ()؛ #endif}

حلقه خالی () {برای (uint8_t i = 1 ؛ i <9؛ i = i + 1) {currentState = digitalRead (drumPins ) ؛ if (! currentState && previousState ) midiOut (i) ؛ // مقایسه وضعیت ها و تشخیص لبه در حال سقوط previousState = currentState ؛ } kick.update ()؛ // Kick drum از الگوریتم debounce سفارشی if (kick.edge ()) if (kick.falling ()) midiOut (KICK) استفاده می کند. }

مرحله 5: برنامه نویسی B: پایتون و رابط کاربری

برنامه نویسی B: پایتون و رابط کاربری
برنامه نویسی B: پایتون و رابط کاربری
برنامه نویسی B: پایتون و رابط کاربری
برنامه نویسی B: پایتون و رابط کاربری
برنامه نویسی B: پایتون و رابط کاربری
برنامه نویسی B: پایتون و رابط کاربری

درک رابط کاربری پایتون در نگاه اول کمی پیچیده است ، بنابراین ما سعی می کنیم اصول اولیه آن ، نحوه استفاده ، عملکرد هر دکمه و نحوه برنامه ریزی صحیح دستگاه Arduino را توضیح دهیم.

رابط کاربری - برنامه

UI یک نمایش گرافیکی برای برنامه نویس کیت درام ما است که استفاده از آن را بسیار آسان کرده و برنامه ریزی دستگاه Arduino را در هر زمان راحت می کند. رابط کاربری متشکل از چندین ماژول گرافیکی است که به عملکرد پیشنهادی آنها گره خورده است. بیایید آنها را یکی یکی مرور کنیم:

  1. Drum Set Image: Python UI از مختصات تصویر X-Y برای تعیین نوع درام انتخاب شده استفاده می کند. اگر ناحیه درام معتبر انتخاب شده باشد ، پیام IO ثانویه ظاهر می شود ، با زمینه های توجه ، سرعت و پایانه آردوینو برای درام اختصاصی. پس از تأیید این پارامترها توسط کاربر و تأیید ، این مقادیر می توانند مستقیماً به دستگاه آردوینو منتقل شوند.
  2. تصویر کنترلر خارجی: برای اینکه بتوانید از کیت درام MIDI با محیط ایجاد VST/Music استفاده کنید ، نیاز به اجرای مترجم Serial-to-MIDI وجود دارد. من از Hairless استفاده کردم که به صورت رایگان در دسترس است و می تواند مستقیماً از طریق رابط کاربری ما ، فقط با فشار دادن تصویر آن ، اجرا شود.
  3. لیست پورت COM: برای برقراری ارتباط با آردوینو ، باید پورت COM متصل آن را مشخص کنید. با فشردن دکمه تازه کردن ، لیست در حال تجدید است.
  4. پیکربندی بارگذاری/ذخیره: مقادیر MIDI پیش فرض در کد تعریف شده است که توسط کاربر از طریق تعامل با رابط کاربر قابل تغییر است. پیکربندی در فایل config.txt در قالب خاصی تعریف شده است که می تواند توسط کاربر ذخیره یا بارگیری شود.
  5. دکمه دستگاه برنامه: برای ذخیره همه مقادیر MIDI اصلاح شده در Arduino EEPROM ، باید دو پدال پا (Kick drum و Hi-hat pedal) را فشار دهید و منتظر بمانید تا انتقال اطلاعات کامل شود. در صورت وجود هرگونه مشکل ارتباطی ، پنجره مناسب نمایش داده می شود. در صورت موفقیت انتقال ، UI پیام موفقیت آمیز خود را نشان می دهد.
  6. دکمه خروج: فقط با اجازه کاربر از برنامه خارج شوید.

نکات برجسته کد پایتون

موارد زیادی در کد در حال رخ دادن است ، بنابراین ما توابع نوشتاری را بیشتر از کل کد گسترش می دهیم.

اول از همه ، برای استفاده از رابط کاربری ، باید چندین ماژول را بارگیری کنید تا کد کار کند:

import osimport threading import tkinter as tk from tkinter importbox message from tkinter import * from PIL import ImageTk، Image Import numpy as np import serial import glob

برخی از ماژول ها در بسته پیش فرض پایتون گنجانده شده است. چندین ماژول باید از طریق ابزار PIP نصب شود:

pip install Pillow

pip install numpy pip نصب ScreenInfo

اکیداً توصیه می شود برنامه را از طریق PyCharm اجرا کنید. در نسخه های آینده ، من قصد دارم یک فایل اجرایی برای پروژه صادر کنم.

توضیح مختصر کد

اگر خطوط آن را از منظر توابع و کلاس ها بررسی کنیم ، درک کد بسیار ساده تر خواهد بود:

1. عملکرد اصلی - در اینجا کد شروع می شود

if _name_ == '_main_': drumkit_gui ()

2. ثبات کیت ثابت ، مختصات و اطلاعات MIDI پیش فرض

طبل های کلاس: DRUM_TYPES = ["لگد" ، "هیهات" ، "دام" ، "تصادف 1" ، "تصادف 2" ، "تام بالا" ، "تام مید" ، "تام لاو" ، "سواری" ، "هیهات پدال "،" کنترل کننده "]

COORDINATES_X = [323 ، 117 ، 205 ، 173 ، 565 ، 271 ، 386 ، 488 ، 487 ، 135 ، 79]

COORDINATES_Y = [268، 115، 192، 40، 29، 107، 104، 190، 71، 408، 208] DIMS_WIDTH = [60، 145، 130، 120، 120، 70، 70، 130، 120، 70، 145] DIMS_LENGTH = [60 ، 60 ، 80 ، 35 ، 35 ، 40 ، 40 ، 70 ، 35 ، 100 ، 50]

DRUM_ENUM = ["ضربه" ، "دام" ، "هیهات" ، "سوار" ، "تصادف 1" ، "تصادف 2" ، "تام بالا" ، "تام مید" ، "تام لو" ، "پدال هیهات"]

DRUM_NOTES = [36، 40، 42، 51، 49، 55، 47، 45، 43، 48] DRUM_VELOCITIES = [110، 100، 100، 110، 110، 110، 110، 110، 110، 110] DRUM_PINS = [8 ، 6 ، 4 ، 3 ، 11 ، 9 ، 5 ، 10 ، 2 ، 7]

3. توابع رابط کاربری - مدیریت رابط کاربری و اشیاء گرافیکی

def set_active (ui)

def Second_ui (drum_type)

کلاس SelectionUi (tk. Frame)

کلاس برنامه (tk. Frame)

def drumkit_gui ()

def event_ui_clicked (event)

def getorigin (خود ، رویداد)

4. ارتباط سریال

def get_serial_ports ()

def commun_with_arduino (پورت)

5. کار با فایلها: ذخیره/بارگذاری تنظیمات از فایل txt

def save_config ()

def load_config ()

6. اجرای برنامه خارجی hairless.exe از روی کد با استفاده از قابلیت های Python Threading

کلاس ExternalExecutableThread (threading. Thread)

def run_hairless_executable ()

برای اجرای کد ، لیستی از فایل ها وجود دارد که باید به پوشه پروژه متصل شوند:

  • config.txt: فایل تنظیمات
  • hairless.exe: مبدل MIDI بدون مو
  • drumkit.png: تصویری که تمام پدهای درام قابل کلیک در رابط کاربری ما را مشخص می کند (باید از مجموعه تصاویر این مرحله بارگیری شود)
  • drumgui.py: کد پروژه

این همه آن چیزی است که ما باید روی آن تأکید کنیم تا کار کند. افزودن فایل ها به پروژه بسیار مهم است: drum set image ، hairless.exe اجرایی و تنظیمات فایل config.txt.

و.. اینجا ما انجام دادیم!:)

امیدوارم این مطالب آموزشی مفید واقع شود.

ممنون که خواندید!:)

توصیه شده: