فهرست مطالب:

تبدیل صوتی به MIDI در زمان واقعی: 7 مرحله
تبدیل صوتی به MIDI در زمان واقعی: 7 مرحله

تصویری: تبدیل صوتی به MIDI در زمان واقعی: 7 مرحله

تصویری: تبدیل صوتی به MIDI در زمان واقعی: 7 مرحله
تصویری: تبدیل صدای وی اس تی به اینسترومنت در اف ال استودیو 2024, نوامبر
Anonim
تبدیل زمان صوتی به MIDI
تبدیل زمان صوتی به MIDI

مردم نامسته! این پروژه ای است که من در یکی از دوره های خود (پردازش سیگنال دیجیتال در زمان واقعی) در برنامه کارشناسی خود کار کردم. هدف این پروژه ایجاد یک سیستم DSP است که به داده های صوتی "گوش می دهد" و پیامهای MIDI یادداشت های مربوطه را از طریق UART خروجی می دهد. برای این منظور از آردوینو نانو استفاده شد. به طور خلاصه میکروکنترلر روی داده های صوتی ورودی FFT انجام می دهد و برخی از قله ها را تجزیه و تحلیل می کند و پیام MIDI مناسب را ارسال می کند. نگران MOSFET ها نباشید ، زیرا آنها برای پروژه های دیگری هستند (که بعداً در دستورالعمل ها نیز قرار داده می شود) و برای این پروژه مورد نیاز نیستند. بنابراین بیایید از قبل شروع کنیم !!

مرحله 1: اجزای مورد نیاز

اجزای مورد نیاز
اجزای مورد نیاز

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

مقدار جزء

1. میکروفون الکتریت. 1

2. مقاومت 30 کیلو اهم. 1

3. مقاومت 150 کیلو اهم. 1

4. مقاومت 100 اهم. 1

5. 2.2 مقاومت کیلو اهم. 3

6. قابلمه از پیش تعیین شده 10 کیلو اهم. 1

7. قابلمه اصلاح 10 کیلو اهم. 1

8. قابلمه استریو 47 کیلو اهم. 1

9. مقاومت 470 اهم. 2

10. خازنهای 0.01uF. 2

11. خازنهای 2.2uF. 3

12. خازنهای 47uF. 2

13. خازن 1000uF. 1

14. خازن 470uF. 1

15. تنظیم کننده ولتاژ 7805. 1

16. نوار هدر زن و مرد. هر کدام 1 عدد

17. اتصال جک بشکه. 1

18. آداپتور DC 12 V 1 آمپر. 1

19. سوئیچ SPST. (اختیاری) 1

20. تخته چوبی. 1

مرحله 2: مشخصات فنی

مشخصات فنی
مشخصات فنی

فرکانس نمونه برداری: 3840 نمونه در ثانیه

تعداد نمونه در هر FFT: 256

وضوح فرکانس: 15 هرتز

نرخ تازه سازی: حدود 15 هرتز

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

مشکل اصلی فاصله نمایی بین نت ها است (همانطور که در شکل مشاهده می شود. هر ضربه در محور فرکانس یک نت موسیقی است). الگوریتم هایی مانند LFT ممکن است کمک کنند ، اما برای دستگاهی مانند arduino Nano کمی پیشرفته و کمی پیچیده است.

مرحله 3: نمودارهای مدار

نمودارهای مدار
نمودارهای مدار
نمودارهای مدار
نمودارهای مدار
نمودارهای مدار
نمودارهای مدار
نمودارهای مدار
نمودارهای مدار

توجه: از سه ماسفت و پایانه های پیچ موجود در تصاویر اذیت نشوید. آنها برای این پروژه مورد نیاز نیستند. توجه داشته باشید که برد ورودی میکروفون قابل جابجایی است یا همانطور که آنها آن را Modular می نامند. شرح کوچکی از بلوک های مختلف در زیر آورده شده است.

1) دو مقاومت 470 اهم ، سیگنال صوتی استریو را با سیگنال صوتی مونو ترکیب می کنند. اطمینان حاصل کنید که سیگنال ورودی به زمین مجازی (در نمودار مدار vg) می رود و به زمین مدار نمی رسد.

2) بلوک بعدی یک فیلتر پایین گذر سالن کلید درجه 2 است که وظیفه محدود کردن باند سیگنال ورودی را برای جلوگیری از aliasing دارد. از آنجا که ما فقط با منبع تغذیه +12 ولت کار می کنیم ، با ایجاد تقسیم کننده ولتاژ RC ، op-amp را تعصب می کنیم. که op -amp را فریب می دهد و فکر می کند که منبع تغذیه 6 0 -6 ولت (ریل دوگانه) است که در آن vg مرجع اصلی آمپر است.

3) سپس خروجی کم عبور فیلتر می شود تا جریان ولتاژ DC 6 ولت را مسدود کرده و با DC حدود 0.55 ولت همراه شود زیرا ADC پیکربندی می شود تا از 1.1 ولت داخلی به عنوان Vref استفاده کند.

توجه: پیش تقویت کننده میکروفن الکترت بهترین مدار در اینترنت نیست. یک مدار شامل op-amp انتخاب بهتری بود. ما آرزو می کنیم که پاسخ فرکانسی تا آنجا که ممکن است مسطح باشد. دیگ استریو 47 کیلو اهم برای تعریف فرکانس قطع استفاده می شود که باید به طور معمول نصف فرکانس نمونه برداری باشد. از پیش تعیین شده 10 کیلو اهم (گلدان کوچک با سر سفید) برای تنظیم افزایش و مقدار Q فیلتر استفاده می شود. قابلمه تریمر 10 کیلو اهم (یکی با دستگیره تنظیم فلزی که شبیه پیچ کوچک سر تخت است) برای تنظیم ولتاژ نزدیک به نصف Vref استفاده می شود.

توجه: هنگام اتصال Nano به P. C. سوئیچ SPST را باز نگه دارید در غیر این صورت بسته است. مراقب باشید در صورت عدم انجام این کار می تواند به مدار/کامپیوتر/تنظیم کننده ولتاژ یا هر ترکیبی از موارد بالا آسیب برساند

مرحله 4: برنامه های کاربردی و IDE های لازم

برنامه های کاربردی و IDE های لازم
برنامه های کاربردی و IDE های لازم
برنامه های کاربردی و IDE های لازم
برنامه های کاربردی و IDE های لازم
برنامه های کاربردی و IDE های لازم
برنامه های کاربردی و IDE های لازم
برنامه های کاربردی و IDE های لازم
برنامه های کاربردی و IDE های لازم
  1. برای برنامه نویسی Arduino Nano ، من با استودیوی اولیه AVR 5.1 رفتم ، زیرا به نظر می رسد برای من کار می کند. در اینجا می توانید نصب کننده را پیدا کنید.
  2. برای برنامه نویسی Arduino Nano از Xloader استفاده کردم. استفاده از ابزار سبک وزن برای رایت فایل های hex در Arduinos بسیار آسان است. می توانید آن را از اینجا دریافت کنید.
  3. برای کمی پروژه کوچک پاداش و تنظیم مدار ، من از پردازش استفاده کردم. می توانید آن را از اینجا دریافت کنید ، هرچند تغییرات عمده ای را در هر نسخه ایجاد کنید ، بنابراین ممکن است مجبور شوید با عملکردهای منسوخ کنار بیایید تا طرح کار کند.
  4. FL studio یا هر نرم افزار پردازش MIDI دیگر. از اینجا می توانید نسخه دسترسی محدود FL studio را به صورت رایگان دریافت کنید.
  5. حلقه MIDI یک پورت MIDI مجازی ایجاد می کند و توسط FL studio به عنوان یک دستگاه MIDI تشخیص داده می شود. یک نسخه از همان را از اینجا دریافت کنید.
  6. MIDI بدون مو برای خواندن پیامهای MIDI از پورت COM و ارسال آن به پورت MIDI حلقه استفاده می شود. همچنین پیام های MIDI را در زمان واقعی اشکال زدایی می کند که اشکال زدایی را راحت می کند. MIDI بدون مو را از اینجا تهیه کنید.

مرحله 5: کدهای مربوطه برای همه چیز

من می خواهم از Electronic Lifes MFG (وب سایت اینجا !!) برای کتابخانه FFT نقطه ثابت که در این پروژه استفاده کردم تشکر کنم. کتابخانه برای خانواده AVR مگا بهینه شده است. این پیوند فایل ها و کدهای کتابخانه ای است که او استفاده کرده است. کد زیر را ضمیمه می کنم. این شامل طرح پردازش و کد AVR C نیز می باشد. لطفاً توجه داشته باشید که این پیکربندی برای من کار کرده است و اگر به دلیل این کدها به چیزی آسیب برسانید ، هیچ مسئولیتی نمی پذیرم. همچنین ، من برای کارکردن کد مشکلات زیادی داشتم. به عنوان مثال ، DDRD (Data Direction Register) به جای DDRDx معمولی (x = 0-7) دارای DDDx (x = 0-7) به عنوان ماسک بیت است. هنگام تدوین مراقب این خطاها باشید. همچنین تغییر میکرو کنترلر بر این تعاریف تأثیر می گذارد ، بنابراین هنگام برخورد با خطاهای کامپایل ، این مورد را نیز زیر نظر داشته باشید. و اگر تعجب می کنید که چرا پوشه پروژه DDT_Arduino_328p.rar نامیده می شود ، خوب بگذارید بگوییم که عصر هنگام شروع کار بسیار تاریک بود و من آنقدر تنبل بودم که چراغ ها را روشن نمی کردم.:پ

با آمدن به طرح پردازش ، از پردازش 3.3.6 برای نوشتن این طرح استفاده کردم. شما باید شماره پورت COM را در طرح به صورت دستی تنظیم کنید. می توانید نظرات موجود در کد را بررسی کنید.

اگر کسی می تواند به من در انتقال کدها به Arduino IDE و آخرین نسخه پردازشی کمک کند ، خوشحال می شوم و به توسعه دهندگان / مشارکت کنندگان نیز اعتبار می دهم.

مرحله 6: تنظیم آن

  1. کد را باز کنید و کد را با #تعریف pcvisual بدون کامنت و #تعریف نظرات متوسط تعریف کنید.
  2. xloader را باز کرده و فهرست را با کد مرور کنید ، فایل.hex را مرور کرده و با انتخاب برد مناسب و درگاه COM آن را در nano بسازید.
  3. طرح پردازش را باز کرده و با شاخص پورت COM مناسب اجرا کنید. اگر همه چیز خوب پیش رفت ، باید بتوانید طیفی از سیگنال را در پین A0 مشاهده کنید.
  4. یک پیچ گوشتی بگیرید و گلدان اصلاح را بچرخانید تا طیف صاف شود (قطعه DC باید نزدیک صفر باشد). پس هیچ سیگنالی به برد وارد نکنید. (ماژول میکروفون را وصل نکنید).
  5. اکنون از هر ابزار تولید کننده رفت و برگشت مانند این برای ورود ورودی به برد از طریق میکرو تلفن و مشاهده طیف استفاده کنید.
  6. اگر رفت و برگشت فرکانس ها را مشاهده نمی کنید ، با تغییر مقاومت 47 کیلو اهم ، فرکانس قطع را کاهش دهید. همچنین با استفاده از قابلمه از پیش تعیین شده 10 کیلو اهم ، سود را افزایش دهید. سعی کنید با تغییر این پارامترها یک خروجی رفت و برگشت صاف و برجسته به دست آورید. این بخش سرگرم کننده است (پاداش کمی!) ، آهنگ های مورد علاقه خود را پخش کنید و از طیف زمان واقعی آنها لذت ببرید. (فیلم را ببینید)
  7. حالا این بار کد C جاسازی شده را مجدداً با #تعریف کامنت های بصری و بدون تعریف ، تعریف کنید.
  8. کد کامپایل شده جدید را روی arduino Nano بارگذاری کنید.
  9. LoopMidi را باز کرده و یک پورت جدید ایجاد کنید.
  10. FL studio یا سایر نرم افزارهای رابط MIDI را باز کنید و مطمئن شوید که پورت midi حلقه در تنظیمات پورت MIDI قابل مشاهده است.
  11. MIDI بدون مو را با آردوینو متصل کنید. پورت خروجی را انتخاب کنید تا پورت LoopMidi باشد. به تنظیمات بروید و نرخ Baud را 115200 قرار دهید. حالا پورت COM مربوط به آردوینو نانو را انتخاب کرده و پورت را باز کنید.
  12. در نزدیکی میکروفون چند صدای "خالص" پخش کنید و باید صدای ضبط مربوطه را در نرم افزار MIDI نیز بشنوید. در صورت عدم پاسخگویی سعی کنید آستانه up_threshold که در کد C تعریف شده است را کاهش دهید. اگر یادداشت ها به طور تصادفی فعال می شوند ، آستانه بالا را افزایش دهید.
  13. پیانو خود را بگیرید و سرعت سیستم خود را آزمایش کنید !! بهترین کار این است که در قسمت قفل طلایی یادداشت ها می توان به راحتی چندین کلید همزمان را به راحتی تشخیص داد.

توجه: وقتی یک برنامه به پورت COM دسترسی پیدا می کند ، دیگر برنامه نمی تواند آن را بخواند. به عنوان مثال ، اگر MIDI بدون مو ، پورت COM را بخواند ، Xloader نمی تواند برد را فلش کند

مرحله 7: نتایج/فیلم ها

فعلا همین است بچه ها! امیدوارم دوست داشته باشید. اگر پیشنهاد یا پیشرفتی در پروژه دارید ، در قسمت نظرات به من اطلاع دهید. آرامش!

توصیه شده: