İçindekiler:

MIDI Dönüştürücüye Gerçek Zamanlı Ses.: 7 Adım
MIDI Dönüştürücüye Gerçek Zamanlı Ses.: 7 Adım

Video: MIDI Dönüştürücüye Gerçek Zamanlı Ses.: 7 Adım

Video: MIDI Dönüştürücüye Gerçek Zamanlı Ses.: 7 Adım
Video: Bilim insanları 3 bin yıllık mumyayı konuşturdu 2024, Kasım
Anonim
MIDI Dönüştürücüye Gerçek Zamanlı Ses
MIDI Dönüştürücüye Gerçek Zamanlı Ses

Namaste insanlar! Bu, lisans programımda derslerimden biri için (Gerçek Zamanlı Dijital Sinyal İşleme) üzerinde çalıştığım bir projedir. Proje, ses verilerini "dinleyen" ve UART üzerinden karşılık gelen notaların MIDI mesajlarını çıkaran bir DSP sistemi yapmayı amaçlamaktadır. Bu amaçla Arduino Nano kullanıldı. Uzun lafın kısası, mikro denetleyici gelen ses verileri üzerinde bir FFT yapar ve tepe noktalarının bazı analizlerini yapar ve uygun MIDI mesajını gönderir. MOSFET'ler hakkında endişelenmeyin, çünkü onlar başka bir proje için (daha sonra talimatlara da eklenecek) ve bu proje için gerekli değiller. O halde şimdiden başlayalım!!

Adım 1: Gerekli Bileşenler

Gerekli Bileşenler
Gerekli Bileşenler

Bu projeyi oluşturmak için aşağıdaki bileşenlere ihtiyacımız olacak, ancak bunların çoğu geneldir ve eşdeğerleriyle ikame edilebilir. Ayrıca çalışmak ve daha iyi uygulamaları aramak için devre şemasına bakın.

Bileşen Miktarı

1. Elektret Mikrofon. 1

2. 30 Kilo Ohm direnç. 1

3. 150 Kilo Ohm direnç. 1

4. 100 ohm direnç. 1

5. 2.2 Kilo Ohm dirençler. 3

6. 10 Kilo Ohm önceden ayarlanmış pot. 1

7. 10 Kilo Ohm düzeltici pot. 1

8. 47 Kilo Ohm stereo pot. 1

9. 470 Ohm dirençler. 2

10. 0.01uF kapasitörler. 2

11. 2.2uF kapasitörler. 3

12. 47uF kapasitörler. 2

13. 1000uF kapasitör. 1

14. 470uF kapasitör. 1

15. 7805 voltaj regülatörü. 1

16. Dişi ve Erkek başlık şeridi. 1 adet

17. Namlu Jakı konektörü. 1

18. 12 V 1 Amp DC Adaptörü. 1

19. SPST anahtarı. (Opsiyonel) 1

20. Perfboard. 1

Adım 2: Teknik Özellikler

Teknik özellikler
Teknik özellikler

Örnekleme frekansı: 3840 örnek/sn

FFT başına örnek sayısı: 256

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

Yenileme hızı: Yaklaşık 15 Hz

Müzik notalarının alt ve üst gamları doğru şekilde yakalanmıyor. Daha yüksek frekanslar düşük örnekleme oranlarından muzdaripken, düşük notalar düşük frekans çözünürlüğünden muzdariptir. Arduino'nun hafızası zaten yetersiz, bu yüzden daha iyi çözünürlük elde etmenin bir yolu yok. Ve daha iyi çözünürlük, daha düşük yenileme hızı pahasına elde edilecek, bu nedenle takas kaçınılmaz. Heisenberg'in belirsizlik ilkesinin Layman versiyonu.

Birincil zorluk, notalar arasındaki üstel boşluktur (Şekilde görüldüğü gibi. Frekans eksenindeki her darbe bir notadır). LFT gibi algoritmalar yardımcı olabilir, ancak bu biraz gelişmiş ve arduino Nano gibi bir cihaz için biraz karmaşık.

Adım 3: Devre Şemaları

Devre diyagramları
Devre diyagramları
Devre diyagramları
Devre diyagramları
Devre diyagramları
Devre diyagramları
Devre diyagramları
Devre diyagramları

Not: Resimlerdeki üç MOSFET ve vidalı terminaller sizi yormasın. Bu proje için gerekli değiller. Mikrofon giriş kartının çıkarılabilir olduğuna veya Modüler dedikleri gibi olduğuna dikkat edin. Çeşitli blokların küçük bir açıklaması aşağıda verilmiştir.

1) İki 470 ohm direnç, stereo ses sinyalini mono ses sinyaliyle birleştirir. Sinyal girişinin topraklamasının devrenin toprağına değil sanal toprağa (devre şemasında vg) gittiğinden emin olun.

2) Bir sonraki blok, örtüşmeyi önlemek için giriş sinyalini sınırlayan banttan sorumlu olan 2. dereceden bir sallen-anahtar düşük geçiş filtresidir. Sadece +12v besleme ile çalıştığımız için, bir RC voltaj bölücü yaparak op-amp'i önyargılı hale getiriyoruz. bu, op-amp'i, kaynağın 6 0 -6 volt besleme (çift ray) olduğunu düşünmeye kandırır; burada vg, op amp için zemin referansıdır.

3) Daha sonra çıkış, 6 voltluk DC ofsetini engellemek için düşük geçişli filtrelenir ve ADC, dahili 1.1 v'yi Vref olarak kullanacak şekilde yapılandırılacağından, yaklaşık 0,55 voltluk DC ile birleştirilir.

Not: Elektret mikrofonun ön yükselticisi internetteki en iyi devre değildir. Op-amp içeren bir devre daha iyi bir seçim olurdu. Frekans yanıtının mümkün olduğunca düz olmasını istiyoruz. 47 kilo ohm stereo pot, tipik olarak örnekleme frekansının yarısı olması gereken kesme frekansını tanımlamak için kullanılır. 10 kilo ohm ön ayarı (Beyaz başlıklı küçük kap), filtrenin kazancını ve Q değerini ayarlamak için kullanılır. 10 kilo ohm'luk düzeltici pot (biri küçük, düz başlı bir vidaya benzeyen metalik ayar düğmeli), voltajı yarım Vref kadar yakın olacak şekilde ayarlamak için kullanılır.

Not: Nano'yu PC'ye bağlarken SPST anahtarını açık, aksi halde kapalı tutun. Bunun yapılmamasına özellikle dikkat edin, devre/bilgisayar/voltaj regülatörüne veya yukarıdakilerin herhangi bir kombinasyonuna zarar verebilir

Adım 4: Gerekli Uygulamalar ve IDE'ler

Gerekli Uygulamalar ve IDE'ler
Gerekli Uygulamalar ve IDE'ler
Gerekli Uygulamalar ve IDE'ler
Gerekli Uygulamalar ve IDE'ler
Gerekli Uygulamalar ve IDE'ler
Gerekli Uygulamalar ve IDE'ler
Gerekli Uygulamalar ve IDE'ler
Gerekli Uygulamalar ve IDE'ler
  1. Arduino Nano'yu kodlamak için ilkel AVR stüdyosu 5.1 ile gittim çünkü benim için çalışıyor gibi görünüyor. Yükleyiciyi burada bulabilirsiniz.
  2. Arduino Nano'yu programlamak için Xloader kullandım..hex dosyalarını Arduinos'a yazmak için hafif bir araç kullanmak gerçekten çok kolay. Buradan alabilirsiniz.
  3. Küçük bonus mini proje ve devreyi ayarlamak için işleme kullandım. Her revizyonda büyük değişiklikler olmasına rağmen buradan alabilirsiniz, bu nedenle eskizi çalıştırmak için kullanımdan kaldırılmış işlevlerle uğraşmak zorunda kalabilirsiniz.
  4. FL studio veya herhangi bir diğer MIDI işleme yazılımı. FL studio sınırlı erişim sürümünü buradan ücretsiz olarak edinebilirsiniz.
  5. Döngü MIDI, sanal bir MIDI bağlantı noktası oluşturur ve FL stüdyosu tarafından bir MIDI aygıtıymış gibi algılanır. Aynısının bir kopyasını buradan alın.
  6. Hairless MIDI, COM portundan MIDI mesajlarını okumak ve MIDI portuna göndermek için kullanılır. Ayrıca MIDI mesajlarının hatalarını gerçek zamanlı olarak ayıklar ve bu da hata ayıklamayı kolaylaştırır. Tüysüz MIDI'yi buradan alın.

Adım 5: Her Şey İçin İlgili Kodlar

Bu projede kullandığım sabit noktalı FFT kütüphanesi için Electronic Lifes MFG'ye (Website Here!!) teşekkür ederim. Kütüphane mega AVR ailesi için optimize edilmiştir. Bu, kullandığı kütüphane dosyalarına ve kodlarına bağlantıdır. Aşağıda kodumu ekliyorum. İşlem taslağı ve AVR C kodunu da içerir. Lütfen bunun benim için çalışan yapılandırma olduğunu ve bu kodlar nedeniyle herhangi bir şeye zarar verirseniz herhangi bir sorumluluk almadığımı unutmayın. Ayrıca, kodu çalıştırmaya çalışırken çok fazla sorun yaşadım. Örneğin, DDRD (Veri Yön Kaydı), geleneksel DDRDx (x = 0-7) yerine bit maskeleri olarak DDDx'e (x = 0-7) sahiptir. Derleme yaparken bu hatalara dikkat edin. Ayrıca mikro denetleyiciyi değiştirmek bu tanımları etkiler, bu nedenle derleme hatalarıyla uğraşırken buna da dikkat edin. Ve proje klasörünün adı neden DDT_Arduino_328p.rar diye merak ediyorsanız, işe başladığımda akşam çok karanlıktı ve ışıkları açmayacak kadar tembeldim diyelim.:P

İşleme taslağına gelince, bu taslağı yazmak için işleme 3.3.6 kullandım. Çizimdeki COM bağlantı noktası numarasını manuel olarak ayarlamanız gerekir. Koddaki yorumları kontrol edebilirsiniz.

Kodları Arduino IDE'ye ve en son işleme sürümüne taşımama yardımcı olabilecek biri varsa, memnun olurum ve geliştiricilere/katkıda bulunanlara da kredi veririm.

Adım 6: Ayarlama

  1. Kodu açın ve kodu #define pcvisual uncommented ve #define midi_out yorumlu olarak derleyin.
  2. xloader'ı açın ve kodlu dizine göz atın,.hex dosyasına göz atın ve uygun board ve COM portunu seçerek nano'ya yazın.
  3. İşleme çizimini açın ve uygun COM bağlantı noktası dizini ile çalıştırın. Her şey yolunda giderse, A0 pimindeki sinyalin bir spektrumunu görebilmeniz gerekir.
  4. Bir tornavida alın ve düzeltici potu spektrum düz olana kadar çevirin (DC bileşeni sıfıra yakın olmalıdır). O zaman karta herhangi bir sinyal girmeyin. (Mikrofon modülünü takmayın).
  5. Şimdi, tahtaya mikrofondan girdi vermek için bunun gibi herhangi bir süpürme üreteci aracı kullanın ve spektrumu gözlemleyin.
  6. Bir frekans taraması görmüyorsanız, 47 kilo ohm direncini değiştirerek kesme frekansını azaltın. Ayrıca 10 kilo ohm önceden ayarlanmış potu kullanarak kazancı artırın. Bu parametreleri değiştirerek düz ve belirgin bir süpürme çıktısı elde etmeye çalışın. Bu eğlenceli kısım (küçük bonus!), En sevdiğiniz şarkıları çalın ve gerçek zamanlı spektrumlarının tadını çıkarın. (Videoyu izle)
  7. Şimdi gömülü C kodunu bu sefer #define pcvisual yorumlu ve #define midi_out yorumsuz olarak yeniden derleyin.
  8. Yeni derlenmiş kodu arduino Nano'ya yeniden yükleyin.
  9. LoopMidi'yi açın ve yeni bir bağlantı noktası oluşturun.
  10. FL stüdyosunu veya diğer MIDI arabirim yazılımını açın ve MIDI bağlantı noktası ayarlarında döngülü midi bağlantı noktasının görünür olduğundan emin olun.
  11. Arduino bağlıyken tüysüz MIDI'yi açın. LoopMidi bağlantı noktası olarak çıkış bağlantı noktasını seçin. Ayarlara gidin ve Baud hızını 115200 olarak ayarlayın. Şimdi Arduino Nano'ya karşılık gelen COM portunu seçin ve portu açın.
  12. Mikrofonun yanında bazı "saf" tonlar çalın ve MIDI yazılımında da karşılık gelen nota vurulduğunu duymalısınız. Yanıt yoksa, C kodunda tanımlanan up_threshold değerini düşürmeyi deneyin. Notlar rastgele tetikleniyorsa, up_threshold değerini artırın.
  13. Piyanonuzu alın ve sisteminizin ne kadar hızlı olduğunu test edin!! En iyi yanı, altın kilitli nota bölgesinde, aynı anda birden fazla tuşa basmayı kolayca algılayabilmesidir.

Not: COM bağlantı noktasına bir uygulama tarafından erişildiğinde, başka bir uygulama tarafından okunamaz. Örneğin, Hairless MIDI COM portunu okuyorsa, Xloader kartı flaş edemez

Adım 7: Sonuçlar/Videolar

Şimdilik bu kadar arkadaşlar! Umarım beğenirsin. Projeyle ilgili herhangi bir öneriniz veya iyileştirmeniz varsa, yorum bölümünde bana bildirin. Barış!

Önerilen: