Isi kandungan:

Penukar Audio Masa Nyata ke MIDI .: 7 Langkah
Penukar Audio Masa Nyata ke MIDI .: 7 Langkah

Video: Penukar Audio Masa Nyata ke MIDI .: 7 Langkah

Video: Penukar Audio Masa Nyata ke MIDI .: 7 Langkah
Video: Asekkk๐Ÿ˜€๐Ÿ˜€๐Ÿ˜€ #shorts #pontianak #komedi 2024, Julai
Anonim
Penukar Audio Masa Nyata ke MIDI
Penukar Audio Masa Nyata ke MIDI

Orang Namaste! Ini adalah projek yang saya kerjakan untuk salah satu kursus saya (Pemprosesan Isyarat Digital Masa Sebenar) dalam program sarjana saya. Projek ini bertujuan untuk membuat sistem DSP yang "mendengar" data audio dan mengeluarkan mesej MIDI dari nota yang sesuai melalui UART. Arduino Nano digunakan untuk tujuan ini. Singkatnya pengawal mikro melakukan FFT pada data audio yang masuk dan melakukan beberapa analisis puncak dan menghantar mesej MIDI yang sesuai. Jangan terganggu dengan MOSFET walaupun kerana mereka adalah untuk projek lain (yang akan disiapkan kemudian pada instruksinya juga) dan tidak diperlukan untuk projek ini. Oleh itu mari kita mulakan !!

Langkah 1: Komponen Diperlukan

Komponen Diperlukan
Komponen Diperlukan

Kami memerlukan komponen berikut untuk membina projek ini walaupun kebanyakannya bersifat generik dan boleh diganti dengan yang setara. Rujuk juga rajah litar untuk bersenam dan cari pelaksanaan yang lebih baik.

Kuantiti Komponen

1. Mikrofon Electret. 1

2. Perintang 30 Kilo Ohm. 1

3. Perintang 150 Kilo Ohm. 1

4. Perintang 100 ohm. 1

5. 2.2 Perintang Kilo Ohm. 3

6. Periuk pratetap 10 Kilo Ohm. 1

7. Periuk perapi 10 Kilo Ohm. 1

8. Periuk stereo 47 Kilo Ohm. 1

9. 470 perintang Ohms. 2

10. Kapasitor 0.01uF. 2

11. Kapasitor 2.2uF. 3

12. Kapasitor 47uF. 2

13. Kapasitor 1000uF. 1

14. Kapasitor 470uF. 1

15. 7805 pengatur voltan. 1

16. Jalur tajuk wanita dan lelaki. 1 setiap satu

17. Penyambung Jack tong. 1

18. Penyesuai DC 12 V 1 Amp. 1

19. Suis SPST. (Pilihan) 1

20. Papan tulis. 1

Langkah 2: Spesifikasi Teknikal

Spesifikasi teknikal
Spesifikasi teknikal

Kekerapan persampelan: 3840 sampel / saat

Bilangan sampel per FFT: 256

Resolusi Kekerapan: 15Hz

Kadar penyegaran: Sekitar 15 Hz

Skala not muzik yang lebih rendah dan tinggi tidak ditangkap dengan betul. Nota bawah mengalami resolusi frekuensi rendah di mana frekuensi yang lebih tinggi mengalami kadar persampelan rendah. Arduino sudah kehabisan memori sehingga tidak ada cara untuk mendapatkan resolusi yang lebih baik. Dan penyelesaian yang lebih baik akan dikenakan dengan kadar pengurangan penyegaran sehingga pertukaran tidak dapat dielakkan. Prinsip ketidaktentuan Heisenberg versi awam.

Kesukaran utama adalah jarak eksponensial antara nota (Seperti yang ditunjukkan dalam gambar. Setiap dorongan pada paksi frekuensi adalah nota muzik). Algoritma seperti LFT mungkin membantu tetapi itu agak maju dan agak rumit untuk peranti seperti arduino Nano.

Langkah 3: Gambarajah Litar

Rajah Litar
Rajah Litar
Rajah Litar
Rajah Litar
Rajah Litar
Rajah Litar
Rajah Litar
Rajah Litar

Catatan: Jangan diganggu oleh tiga MOSFET dan terminal skru dalam gambar. Mereka tidak diperlukan untuk projek ini. Perhatikan bahawa papan input mikrofon boleh ditanggalkan atau kerana mereka memanggilnya Modular. Huraian kecil mengenai pelbagai blok diberikan di bawah.

1) Kedua-dua perintang 470 ohm menggabungkan isyarat audio stereo ke isyarat audio mono. Pastikan tanah isyarat masuk ke tanah maya (vg dalam rajah litar) dan bukan ke tanah litar.

2) Blok seterusnya adalah saringan lulus rendah sallen-key orde 2 yang bertanggungjawab untuk mengehadkan isyarat isyarat untuk mengelakkan aliasing. Oleh kerana kita bekerja dengan bekalan hanya + 12v, kita akan mengurangkan op-amp dengan membuat pembahagi voltan RC. yang memperbodohkan op-amp untuk berfikir bahawa bekalannya adalah bekalan 6 0 -6 volt (dual rail) di mana vg adalah rujukan tanah untuk op amp.

3) Kemudian outputnya low pass disaring untuk menyekat offset DC 6 volt dan digabungkan dengan DC sekitar 0.55 volt kerana ADC akan dikonfigurasi untuk menggunakan 1.1 v dalaman sebagai Vref.

Catatan: Penguat pra untuk mikrofon electret bukanlah litar terbaik di internet. Litar yang melibatkan op-amp pasti menjadi pilihan yang lebih baik. Kami mahukan tindak balas frekuensi setinggi mungkin. Pot stereo 47 kilo ohm digunakan untuk menentukan frekuensi pemotongan yang biasanya separuh frekuensi persampelan. Pratetap 10 kilo ohm (Pot kecil dengan kepala putih) digunakan untuk menyesuaikan keuntungan dan nilai Q penapis. Periuk perapi 10 kilo ohm (satu dengan tombol penala logam yang kelihatan seperti skru kepala rata kecil) digunakan untuk mengatur voltan sedekat setengah Vref.

Nota: Semasa anda menyambungkan Nano ke P. C. pastikan suis SPST terbuka yang lain ditutup. Berhati-hatilah sekiranya ini tidak berlaku sehingga boleh membahayakan rangkaian / komputer / pengatur voltan atau gabungan mana-mana perkara di atas

Langkah 4: Aplikasi dan IDE yang diperlukan

Aplikasi dan IDE yang diperlukan
Aplikasi dan IDE yang diperlukan
Aplikasi dan IDE yang diperlukan
Aplikasi dan IDE yang diperlukan
Aplikasi dan IDE yang diperlukan
Aplikasi dan IDE yang diperlukan
Aplikasi dan IDE yang diperlukan
Aplikasi dan IDE yang diperlukan
  1. Untuk pengekodan Arduino Nano, saya pergi dengan AVR studio 5.1 primitif kerana nampaknya berfungsi untuk saya. Anda boleh mendapatkan pemasang di sini.
  2. Untuk pengaturcaraan Arduino Nano saya menggunakan Xloader. Alat ringan yang sangat mudah digunakan untuk membakar fail.hex ke Arduinos. Anda boleh mendapatkannya di sini.
  3. Untuk projek mini bonus kecil dan menala litar saya menggunakan pemprosesan. Anda boleh mendapatkannya dari sini walaupun membuat perubahan besar dalam setiap semakan sehingga anda mungkin harus bermain-main dengan fungsi yang tidak digunakan untuk membuat lakaran berfungsi.
  4. Studio FL atau perisian pemprosesan MIDI yang lain. Anda boleh mendapatkan versi akses terhad studio FL secara percuma dari sini.
  5. Loop MIDI membuat port MIDI maya dan dikesan oleh studio FL seolah-olah ia adalah peranti MIDI. Dapatkan salinan yang sama dari sini.
  6. MIDI tanpa rambut digunakan untuk membaca mesej MIDI dari port COM dan menghantarnya ke gelung MIDI. Ia juga menyahpepijat mesej MIDI dalam masa nyata yang memudahkan proses penyahpepijatan. Dapatkan MIDI Tanpa Rambut dari sini.

Langkah 5: Kod Berkaitan untuk Segala-galanya

Saya ingin mengucapkan terima kasih kepada Electronic Lifes MFG (Website Here !!) untuk perpustakaan FFT titik tetap yang saya gunakan dalam projek ini. Perpustakaan dioptimumkan untuk keluarga AVR mega. Ini adalah pautan ke fail dan kod perpustakaan yang digunakannya. Saya melampirkan kod saya di bawah. Ini termasuk lakaran pemprosesan dan kod AVR C juga. Harap maklum bahawa ini adalah konfigurasi yang berfungsi untuk saya dan saya tidak akan bertanggungjawab sekiranya anda merosakkan sesuatu kerana kod ini. Saya juga menghadapi banyak masalah semasa membuat kod berfungsi. Contohnya, DDRD (Data Direction Register) mempunyai DDDx (x = 0-7) sebagai topeng bit dan bukannya DDRDx konvensional (x = 0-7). Awas kesilapan ini semasa menyusun. Mengubah pengawal mikro juga mempengaruhi definisi ini, jadi perhatikan juga semasa menangani kesilapan penyusunan. Dan jika anda tertanya-tanya mengapa folder projek dipanggil DDT_Arduino_328p.rar, mari kita katakan bahawa ia sangat gelap pada waktu petang ketika saya mula dan saya cukup malas untuk tidak menyalakan lampu.: P

Datang ke lakaran pemprosesan, saya menggunakan pemprosesan 3.3.6 untuk menulis lakaran ini. Anda perlu menetapkan nombor port COM dalam lakaran secara manual. Anda boleh menyemak komen dalam kod.

Sekiranya ada yang dapat menolong saya menghantar kod ke Arduino IDE dan versi pemprosesan terkini, saya akan gembira dan akan memberikan penghargaan kepada penyumbang juga.

Langkah 6: Menyiapkannya

  1. Buka kod dan susun kodnya dengan #define pcvisual unmented dan #define midi_out mengulas.
  2. Buka xloader dan semak ke direktori dengan kod, semak ke fail.hex dan bakar ke nano dengan memilih papan dan port COM yang sesuai.
  3. Buka lakaran pemprosesan dan jalankan dengan indeks port COM yang sesuai. Sekiranya semuanya berjalan lancar, anda seharusnya dapat melihat spektrum isyarat pada pin A0.
  4. Dapatkan pemutar skru dan putar periuk perapi sehingga spektrum rata (komponen DC hampir mendekati sifar). Jangan masukkan isyarat ke papan ketika itu. (Jangan pasangkan modul mikrofon).
  5. Sekarang gunakan alat penjana sapu seperti ini untuk memberi input ke papan dari telefon bimbit mikro dan perhatikan spektrumnya.
  6. Sekiranya anda tidak melihat sapuan frekuensi, turunkan frekuensi pemotongan dengan menukar rintangan 47 kilo ohm. Tingkatkan juga keuntungan dengan menggunakan periuk pratetap 10 kilo ohm. Cuba dapatkan output sapuan yang rata dan menonjol dengan mengubah parameter ini. Ini adalah bahagian yang menyeronokkan (bonus kecil!), Mainkan lagu kegemaran anda dan nikmati spektrum masa nyata mereka. (Tonton videonya)
  7. Sekarang kompilasikan kod C tertanam sekali lagi kali ini dengan #define pcvisual yang dikomentari dan #define midi_out tidak dikomentari.
  8. Muat semula kod yang disusun baru ke arduino Nano.
  9. Buka LoopMidi dan buat port baru.
  10. Buka studio FL atau perisian antara muka MIDI lain dan pastikan port loop midi dapat dilihat dalam tetapan port MIDI.
  11. Buka MIDI tanpa rambut dengan arduino bersambung. Pilih port output untuk menjadi port LoopMidi. Pergi ke tetapan dan tetapkan kadar Baud menjadi 115200. Sekarang pilih port COM yang sesuai dengan Arduino Nano dan buka port.
  12. Mainkan beberapa nada "tulen" di dekat mikrofon dan anda juga akan mendengar nota yang sesuai dalam perisian MIDI juga. Sekiranya tidak ada tindak balas cuba turunkan up_threshold yang ditentukan dalam kod C. Sekiranya nota dicetuskan secara rawak, maka tingkatkan kenaikan up_threshold.
  13. Dapatkan piano anda dan uji seberapa pantas sistem anda !! Perkara terbaik adalah bahawa di zon kunci emas, nota dapat dengan mudah mengesan beberapa penekanan kekunci serentak dengan mudah.

Catatan: Apabila port COM diakses oleh satu aplikasi, ia tidak dapat dibaca oleh aplikasi lain. Sebagai contoh jika MIDI Tanpa Rambut membaca port COM, Xloader tidak akan dapat menyalakan papan

Langkah 7: Hasil / Video

Itu sahaja untuk lelaki sekarang! Harap awak suka. Sekiranya anda mempunyai cadangan atau penambahbaikan dalam projek, beritahu saya di bahagian komen. Damai!

Disyorkan: