Mündəricat:

MIDI Dönüştürücüsünə Real Zamanlı Audio: 7 Addım
MIDI Dönüştürücüsünə Real Zamanlı Audio: 7 Addım

Video: MIDI Dönüştürücüsünə Real Zamanlı Audio: 7 Addım

Video: MIDI Dönüştürücüsünə Real Zamanlı Audio: 7 Addım
Video: Все что нужно знать о MIDI (запись лекции) 2024, Noyabr
Anonim
MIDI çeviricisinə real vaxt audio
MIDI çeviricisinə real vaxt audio

Namuslu insanlar! Bu, bakalavr proqramımdakı kurslardan birində (Real-Time Digital Signal Processing) işlədiyim bir layihədir. Layihə, audio məlumatları "dinləyən" və UART üzərindən müvafiq qeydlərin MIDI mesajlarını verən bir DSP sistemi yaratmağı hədəfləyir. Bu məqsədlə Arduino Nano istifadə edildi. Uzun sözün qısası, mikro nəzarətçi gələn səs məlumatları üzərində FFT edir və zirvələri bir qədər analiz edir və uyğun MIDI mesajı göndərir. MOSFET -lərdən narahat olmayın, çünki onlar başqa bir layihə üçündür (daha sonra təlimatlarda da göstəriləcək) və bu layihə üçün tələb olunmur. Beləliklə, artıq başlayaq !!

Addım 1: Tələb olunan komponentlər

Tələb olunan komponentlər
Tələb olunan komponentlər

Bu layihəni qurmaq üçün aşağıdakı komponentlərə ehtiyacımız olacaq, baxmayaraq ki, bunların çoxu ümumi və ekvivalentləri ilə əvəz edilə bilər. Daha yaxşı tətbiqlər üçün işləmək və ovlamaq üçün dövrə diaqramına baxın.

Komponent miqdarı

1. Elektret Mikrofonu. 1

2. 30 Kilo Ohm müqavimət. 1

3. 150 Kilo Ohm müqavimət. 1

4. 100 ohm müqavimət. 1

5. 2.2 Kilo Ohm rezistorlar. 3

6. 10 Kilo Ohm qabaqcadan hazırlanmış qab. 1

7. 10 Kilo Ohm kəsmə qabı. 1

8. 47 Kilo Ohm stereo qazan. 1

9. 470 Ohm rezistorlar. 2

10. 0.01uF kondansatörler. 2

11. 2.2 uF kondansatörler. 3

12. 47 uF kondansatörler. 2

13. 1000 uF kondansatör. 1

14. 470 uF kondansatör. 1

15. 7805 gərginlik tənzimləyicisi. 1

16. Qadın və Kişi başlıq zolağı. Hər biri 1

17. Barrel Jack konnektoru. 1

18. 12 V 1 Amp DC Adapter. 1

19. SPST açarı. (İsteğe bağlı) 1

20. Perfboard. 1

Addım 2: Texniki Xüsusiyyətlər

Texniki Xüsusiyyətlər
Texniki Xüsusiyyətlər

Nümunə alma tezliyi: 3840 nümunə/san

FFT başına nümunə sayı: 256

Tezlik Çözünürlüğü: 15Hz

Yeniləmə dərəcəsi: təxminən 15 Hz

Musiqi notlarının aşağı və yuxarı ölçüləri düzgün çəkilmir. Aşağı notlar aşağı tezlik qətnaməsindən əziyyət çəkir, daha yüksək tezliklər isə aşağı seçmə nisbətlərindən əziyyət çəkirlər. Arduino artıq yaddaşda deyil, buna görə daha yaxşı bir həll əldə etmək üçün bir yol yoxdur. Və daha yaxşı bir həll, yeniləmə sürətinin azalması ilə nəticələnəcək, belə ki, ticarət qaçılmazdır. Heisenberqin qeyri -müəyyənlik prinsipinin Layman versiyası.

Əsas çətinlik notlar arasındakı eksponensial boşluqdur (Şəkildə göründüyü kimi. Tezlik oxundakı hər impuls musiqi notudur). LFT kimi alqoritmlər kömək edə bilər, amma bu, arduino Nano kimi bir cihaz üçün bir az inkişaf etmiş və bir az mürəkkəbdir.

Addım 3: Dövrə Diaqramları

Dövrə Diaqramları
Dövrə Diaqramları
Dövrə Diaqramları
Dövrə Diaqramları
Dövrə Diaqramları
Dövrə Diaqramları
Dövrə Diaqramları
Dövrə Diaqramları

Qeyd: Şəkillərdəki üç MOSFET və vida terminalları sizi narahat etməsin. Bu layihə üçün onlara ehtiyac yoxdur. Diqqət yetirin ki, mikrofon giriş lövhəsi sökülə bilər və ya modul adlandırırlar. Müxtəlif blokların kiçik bir təsviri aşağıda verilmişdir.

1) İki 470 ohm rezistor, stereo səs siqnalını mono səs siqnalına birləşdirir. Daxil olan siqnalın zəminin dövrə torpağına deyil, virtual yerə (dövrə diaqramında vg) getdiyinə əmin olun.

2) Növbəti blok, kənarlaşdırılmaması üçün giriş siqnalını məhdudlaşdırmaqdan məsul olan 2-ci dərəcəli sallen-key aşağı keçid filtridir. Yalnız +12v təchizatı ilə işlədiyimiz üçün, bir RC gərginlik bölücü edərək, op-amp-ə meyl edirik. v -nin op amp üçün əsas istinad olduğu təchizatın 6 0 -6 voltluq bir təchizat (ikili dəmir yolu) olduğunu düşünməklə op -ampu aldadır.

3) Sonra çıxış 6 voltluq DC ofsetini maneə törətmək üçün süzülür və təxminən 0.55 volt DC ilə birləşdirilir, çünki ADC Vref kimi daxili 1.1 v istifadə etmək üçün konfiqurasiya ediləcək.

Qeyd: Elektret mikrofonu üçün ön gücləndirici internetdəki ən yaxşı sxem deyil. Op-amp ilə əlaqəli bir dövrə daha yaxşı bir seçim olardı. Tezlik reaksiyasının mümkün qədər düz olmasını istəyirik. 47 kilo ohm stereo qazan, nümunə götürmə tezliyinin yarısı qədər olan kəsmə tezliyini təyin etmək üçün istifadə olunur. 10 kilo ohm əvvəlcədən təyin edilmiş (ağ başlı kiçik qazan) filtrin qazancını və Q dəyərini tənzimləmək üçün istifadə olunur. Gərginliyi Vref -in yarısına yaxınlaşdırmaq üçün 10 kilo ohm kəsmə qabı (kiçik bir düz başlı vint kimi görünən metal tənzimləmə düyməsi olan) istifadə olunur.

Qeyd: Nanonu PC -yə bağladığınız zaman. SPST açarını açıq saxlayın, əks halda bağlı saxlayın. Bunun edilməməsinə xüsusi diqqət yetirin, dövrə/kompüterə/gərginlik tənzimləyicisinə və ya yuxarıda göstərilən hər hansı bir birləşməyə zərər verə bilər

Addım 4: Lazımi Tətbiqlər və IDE -lər

Lazımi Tətbiqlər və IDE -lər
Lazımi Tətbiqlər və IDE -lər
Lazımi Tətbiqlər və IDE -lər
Lazımi Tətbiqlər və IDE -lər
Lazımi Tətbiqlər və IDE -lər
Lazımi Tətbiqlər və IDE -lər
Lazımi Tətbiqlər və IDE -lər
Lazımi Tətbiqlər və IDE -lər
  1. Arduino Nanonun kodlaşdırılması üçün ibtidai AVR studio 5.1 ilə getdim, çünki mənim üçün işləyir. Yükləyicini burada tapa bilərsiniz.
  2. Arduino Nanonun proqramlaşdırılması üçün Xloader istifadə etdim. Hex faylları Arduinos -a yazmaq üçün yüngül alətdən istifadə etmək çox asandır. Burada əldə edə bilərsiniz.
  3. Kiçik bir bonus layihəsi və dövrəni tənzimləmək üçün emaldan istifadə etdim. Hər düzəlişdə böyük dəyişikliklər olsa da, eskizin işləməsi üçün köhnəlmiş funksiyalarla əyləşməli ola bilərsiniz.
  4. FL studio və ya hər hansı digər MIDI emal proqramı. FL studio məhdud giriş versiyasını buradan pulsuz əldə edə bilərsiniz.
  5. Loop MIDI, virtual bir MIDI portu yaradır və FL studio tərəfindən sanki bir MIDI cihazı kimi aşkar edilir. Buradan eyni nüsxəni alın.
  6. Tüksüz MIDI, COM portundan MIDI mesajlarını oxumaq və MIDI limanına döngə göndərmək üçün istifadə olunur. Həm də MIDI mesajlarını real vaxt rejimində düzəldir, bu da ayıklamayı rahat edir. Buradan Tüksüz MIDI alın.

Addım 5: Hər şey üçün müvafiq kodlar

Bu layihədə istifadə etdiyim sabit nöqtə FFT kitabxanası üçün Electronic Lifes MFG -yə (Burada Veb səhifə !!) təşəkkür etmək istəyirəm. Kitabxana mega AVR ailəsi üçün optimallaşdırılmışdır. Bu, istifadə etdiyi kitabxana sənədlərinə və kodlarına keçiddir. Kodumu aşağıda əlavə edirəm. İşləmə eskizini və AVR C kodunu da əhatə edir. Unutmayın ki, bu mənim üçün işləyən konfiqurasiyadır və bu kodlara görə hər hansı bir şeyə zərər verdiyiniz təqdirdə heç bir məsuliyyət daşımıram. Ayrıca, kodu işləməyə çalışarkən bir çox problemim oldu. Məsələn, DDRD (Data Direction Register), adi DDRDx (x = 0-7) yerinə bit maskaları olaraq DDDx (x = 0-7) malikdir. Tərtib edərkən bu səhvlərə diqqət yetirin. Mikro nəzarətçini dəyişdirmək də bu tərifləri təsir edir, buna görə də tərtib səhvləri ilə məşğul olarkən buna da diqqət yetirin. Layihə qovluğunun niyə DDT_Arduino_328p.rar adlandırıldığını düşünürsünüzsə, deyək ki, başladığım axşam çox qaranlıq idi və işığı yandırmamaq üçün tənbəl idim.: P.

İşləmə eskizinə gəlincə, bu eskizi yazmaq üçün 3.3.6 emalından istifadə etdim. Eskizdə COM port nömrəsini əl ilə təyin etməlisiniz. Koddakı şərhləri yoxlaya bilərsiniz.

Kimsə kodları Arduino IDE -yə və son emal versiyasına köçürməyimə kömək edə bilərsə, məmnun olaram və inkişaf etdiricilərə / töhfə verənlərə də kredit verərəm.

Addım 6: Quraşdırma

  1. Kodu açın və #define pcvisual şərh edilməmiş və #define midi_out şərhləri ilə kodu tərtib edin.
  2. Xloader -i açın və kodu olan qovluğa baxın,.hex faylına baxın və uyğun lövhə və COM portunu seçərək nanoya yandırın.
  3. İşləmə eskizini açın və uyğun COM port indeksi ilə işləyin. Hər şey yaxşı gedirsə, A0 pinindəki bir siqnal spektrini görə bilməlisiniz.
  4. Bir tornavida alın və spektr düz olana qədər trimmer qazanı döndərin (DC komponenti sıfıra yaxın olmalıdır). O zaman lövhəyə heç bir siqnal daxil etməyin. (Mikrofon modulunu bağlamayın).
  5. İndi mikro-telefondan lövhəyə giriş vermək və spektri müşahidə etmək üçün bu kimi hər hansı bir süpürmə generatoru vasitəsindən istifadə edin.
  6. Əgər tezliklərin silinməsini görmürsənsə, 47 kilo ohm müqavimətini dəyişdirərək kəsmə tezliyini azaldın. 10 kilo ohm əvvəlcədən qurulmuş qazan istifadə edərək qazancı da artırın. Bu parametrləri dəyişdirərək düz və görkəmli bir tarama çıxışı əldə etməyə çalışın. Bu əyləncəli hissədir (kiçik bonus!), Sevdiyiniz mahnıları səsləndirin və onların real vaxt spektrindən zövq alın. (Videoya baxın)
  7. İndi bu dəfə #define pcvisual şərhli və #define midi_out şərh olunmamış olaraq yenidən C kodunu tərtib edin.
  8. Yeni tərtib edilmiş kodu arduino Nano'ya yenidən yükləyin.
  9. LoopMidi açın və yeni bir liman yaradın.
  10. FL studio və ya digər MIDI interfeys proqramını açın və MIDI port parametrlərində loop midi portunun göründüyündən əmin olun.
  11. Arduino ilə əlaqəli açıq tüksüz MIDI. LoopMidi portu olmaq üçün çıxış limanını seçin. Ayarlara gedin və Baud sürətini 115200 olaraq təyin edin. İndi Arduino Nanoya uyğun COM portunu seçin və portu açın.
  12. Mikrofonun yanında bir neçə "saf" ton çalın və MIDI proqramında müvafiq notu da eşitməlisiniz. Cavab yoxdursa, C kodunda təyin olunan up_thresholdu aşağı salmağa çalışın. Qeydlər təsadüfi olaraq işə salınırsa, yuxarı həddi artırın.
  13. Pianonuzu alın və sisteminizin nə qədər sürətli olduğunu sınayın! Ən yaxşı şey, qızıl rəngli notlar zonasında eyni anda birdən çox düymə basmağı asanlıqla aşkar edə bilməsidir.

Qeyd: COM portuna bir tətbiq tərəfindən daxil olduqda başqa bir proqram tərəfindən oxuna bilməz. Məsələn, Hairless MIDI COM portunu oxusa, Xloader lövhəni yandıra bilməz

Addım 7: Nəticələr/Videolar

Hələlik uşaqlar budur! Ümid edirəm bəyənərsən. Layihədə hər hansı bir təklif və ya irəliləyişiniz varsa, şərh bölməsində mənə bildirin. Sülh!

Tövsiyə: