Daftar Isi:

Konverter Audio ke MIDI Real-time.: 7 Langkah
Konverter Audio ke MIDI Real-time.: 7 Langkah

Video: Konverter Audio ke MIDI Real-time.: 7 Langkah

Video: Konverter Audio ke MIDI Real-time.: 7 Langkah
Video: HOW TO EXTRACT MIDI FROM ANY SAMPLE 2024, Juli
Anonim
Konverter Audio ke MIDI waktu nyata
Konverter Audio ke MIDI waktu nyata

Orang Namaste! Ini adalah proyek yang saya kerjakan untuk salah satu mata kuliah saya (Real-Time Digital Signal Processing) di program sarjana saya. Proyek ini bertujuan untuk membuat sistem DSP yang "mendengarkan" data audio dan mengeluarkan pesan MIDI dari catatan yang sesuai melalui UART. Arduino Nano digunakan untuk tujuan ini. Singkat cerita, mikrokontroler melakukan FFT pada data audio yang masuk dan melakukan beberapa analisis puncak dan mengirimkan pesan MIDI yang sesuai. Namun, jangan repot-repot tentang MOSFET karena mereka untuk beberapa proyek lain (yang akan disiapkan nanti untuk instruksi juga) dan tidak diperlukan untuk proyek ini. Jadi mari kita mulai!!

Langkah 1: Komponen Diperlukan

Komponen yang Diperlukan
Komponen yang Diperlukan

Kita memerlukan komponen berikut untuk membangun proyek ini meskipun banyak di antaranya bersifat generik dan dapat diganti dengan yang setara. Juga lihat diagram sirkuit untuk bekerja dan mencari implementasi yang lebih baik.

Kuantitas Komponen

1. Mikrofon Electret. 1

2. Resistor 30 Kilo Ohm. 1

3. Resistor 150 Kilo Ohm. 1

4. Resistor 100 ohm. 1

5. Resistor 2.2 Kilo Ohm. 3

6. Panci preset 10 Kilo Ohm. 1

7. Panci pemangkas 10 Kilo Ohm. 1

8. Panci stereo 47 Kilo Ohm. 1

9. Resistor 470 Ohm. 2

10. kapasitor 0,01uF. 2

11. kapasitor 2.2uF. 3

12. Kapasitor 47uF. 2

13. Kapasitor 1000uF. 1

14. Kapasitor 470uF. 1

15. Pengatur tegangan 7805. 1

16. Strip header Wanita dan Pria. masing-masing 1

17. Konektor Barrel Jack. 1

18. Adaptor DC 12 V 1 Amp. 1

19. Saklar SPST. (Opsional) 1

20. Papan Perf. 1

Langkah 2: Spesifikasi Teknis

Spesifikasi teknis
Spesifikasi teknis

Frekuensi pengambilan sampel: 3840 sampel/dtk

Jumlah sampel per FFT: 256

Resolusi Frekuensi: 15Hz

Tingkat penyegaran: Sekitar 15 Hz

Tangga nada musik yang lebih rendah dan lebih tinggi tidak ditangkap dengan benar. Catatan yang lebih rendah menderita resolusi frekuensi rendah sedangkan frekuensi yang lebih tinggi menderita tingkat pengambilan sampel yang rendah. Arduino sudah kehabisan memori sehingga tidak ada cara untuk mendapatkan resolusi yang lebih baik. Dan resolusi yang lebih baik akan datang dengan biaya refresh rate yang berkurang sehingga trade-off tidak bisa dihindari. Versi awam dari prinsip ketidakpastian Heisenberg.

Kesulitan utama adalah jarak eksponensial antara not (Seperti terlihat pada gambar. Setiap impuls pada sumbu frekuensi adalah not musik). Algoritme seperti LFT mungkin membantu, tetapi itu agak maju dan sedikit rumit untuk perangkat seperti arduino Nano.

Langkah 3: Diagram Sirkuit

Diagram Sirkuit
Diagram Sirkuit
Diagram Sirkuit
Diagram Sirkuit
Diagram Sirkuit
Diagram Sirkuit
Diagram Sirkuit
Diagram Sirkuit

Catatan: Jangan ganggu dengan tiga MOSFET dan terminal sekrup pada gambar. Mereka tidak diperlukan untuk proyek ini. Perhatikan bahwa papan input mikrofon dapat dilepas atau disebut Modular. Sebuah deskripsi kecil dari berbagai blok diberikan di bawah ini.

1) Dua resistor 470 ohm menggabungkan sinyal audio stereo menjadi sinyal audio mono. Pastikan bahwa arde sinyal masuk ke arde virtual (vg dalam diagram rangkaian) dan bukan ke arde sirkuit.

2) Blok berikutnya adalah filter low pass kunci sallen orde 2 yang bertanggung jawab untuk membatasi pita sinyal input untuk menghindari aliasing. Karena kami bekerja hanya dengan suplai +12v, kami membiaskan op-amp dengan membuat pembagi tegangan RC. yang membodohi op-amp dengan berpikir bahwa suplai adalah suplai 6 0 -6 volt (rel ganda) di mana vg adalah referensi ground untuk op amp.

3) Kemudian keluaran low pass difilter untuk memblokir DC offset 6 volt dan ditambah dengan DC sekitar 0,55 volt karena ADC akan dikonfigurasi menggunakan internal 1,1 v sebagai Vref.

Catatan: Pre-amplifier untuk mikrofon electret bukanlah sirkuit terbaik di internet. Sebuah sirkuit yang melibatkan op-amp akan menjadi pilihan yang lebih baik. Kami menginginkan respons frekuensi sedatar mungkin. Pot stereo 47 kilo ohm digunakan untuk menentukan frekuensi cut-off yang biasanya setengah dari frekuensi sampling. Preset 10 kilo ohm (Panci kecil dengan kepala putih) digunakan untuk menyetel penguatan dan nilai Q filter. Panci pemangkas 10 kilo ohm (satu dengan kenop penyetelan logam yang terlihat seperti sekrup kepala datar kecil) digunakan untuk mengatur tegangan sedekat setengah Vref.

Catatan: Saat Anda menghubungkan Nano ke P. C. biarkan sakelar SPST terbuka jika tidak ditutup. Pertahankan perawatan khusus ini gagal melakukannya dapat membahayakan sirkuit/komputer/regulator tegangan atau kombinasi 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 pengkodean Arduino Nano, saya menggunakan studio AVR primitif 5.1 karena tampaknya berfungsi untuk saya. Anda dapat menemukan penginstalnya di sini.
  2. Untuk memprogram Arduino Nano saya menggunakan Xloader. Sangat mudah untuk menggunakan alat ringan untuk membakar file.hex ke Arduinos. Anda bisa mendapatkannya di sini.
  3. Untuk proyek mini bonus kecil dan penyetelan sirkuit, saya menggunakan pemrosesan. Anda bisa mendapatkannya dari sini meskipun membuat ada perubahan besar di setiap revisi sehingga Anda mungkin harus mengutak-atik fungsi yang tidak digunakan lagi untuk membuat sketsa berfungsi.
  4. FL studio atau perangkat lunak pengolah MIDI lainnya. Anda bisa mendapatkan versi akses terbatas FL studio gratis dari sini.
  5. Loop MIDI membuat port MIDI virtual dan dideteksi oleh FL studio seolah-olah itu adalah perangkat MIDI. Dapatkan salinan yang sama dari sini.
  6. Hairless MIDI digunakan untuk membaca pesan MIDI dari port COM dan mengirimkannya ke loop MIDI port. Ini juga men-debug pesan MIDI secara real-time yang membuat debugging menjadi nyaman. Dapatkan MIDI Tanpa Rambut dari sini.

Langkah 5: Kode yang Relevan untuk Semuanya

Saya ingin berterima kasih kepada Electronic Lifes MFG (Situs Web Di Sini!!) untuk pustaka FFT titik tetap yang saya gunakan dalam proyek ini. Perpustakaan dioptimalkan untuk keluarga mega AVR. Ini adalah tautan ke file dan kode perpustakaan yang dia gunakan. Saya melampirkan kode saya di bawah ini. Ini termasuk sketsa pemrosesan dan kode AVR C juga. Harap dicatat bahwa ini adalah konfigurasi yang bekerja untuk saya dan saya tidak bertanggung jawab apa pun jika Anda merusak sesuatu karena kode ini. Juga, saya memiliki banyak masalah saat mencoba membuat kode berfungsi. Misalnya, DDRD (Data Direction Register) memiliki DDDx (x = 0-7) sebagai bit mask daripada DDRDx konvensional (x = 0-7). Hati-hati dengan kesalahan ini saat kompilasi. Mengubah mikrokontroler juga memengaruhi definisi ini, jadi perhatikan juga saat menangani kesalahan kompilasi. Dan jika Anda bertanya-tanya mengapa folder proyek disebut DDT_Arduino_328p.rar, anggap saja malam itu sangat gelap ketika saya mulai dan saya cukup malas untuk tidak menyalakan lampu.:P

Datang ke sketsa pemrosesan, saya menggunakan pemrosesan 3.3.6 untuk menulis sketsa ini. Anda harus mengatur nomor port COM dalam sketsa secara manual. Anda dapat memeriksa komentar di kode.

Jika ada yang bisa membantu saya mem-port kode ke Arduino IDE dan versi pemrosesan terbaru, saya akan senang dan akan memberikan kredit kepada para pengembang\kontributor juga.

Langkah 6: Mengaturnya

  1. Buka kode dan kompilasi kode dengan #define pcvisual tidak dikomentari dan #define midi_out dikomentari.
  2. Buka xloader dan ramban ke direktori dengan kode, telusuri ke file.hex dan bakar ke nano dengan memilih papan dan port COM yang sesuai.
  3. Buka sketsa pemrosesan dan jalankan dengan indeks port COM yang sesuai. Jika semuanya berjalan dengan baik, Anda seharusnya dapat melihat spektrum sinyal pada pin A0.
  4. Dapatkan obeng dan putar pot pemangkas sampai spektrum rata (komponen DC harus mendekati nol). Jangan masukkan sinyal apa pun ke papan saat itu. (Jangan pasang modul mikrofon).
  5. Sekarang gunakan alat generator sapuan seperti ini untuk memberikan masukan ke papan dari telepon mikro dan mengamati spektrumnya.
  6. Jika Anda tidak melihat sapuan frekuensi, kurangi frekuensi cut-off dengan mengubah resistansi 47 kilo ohm. Juga tingkatkan gain dengan menggunakan pot preset 10 kilo ohm. Cobalah untuk mendapatkan output sapuan yang rata dan menonjol dengan mengubah parameter ini. Ini adalah bagian yang menyenangkan (bonus kecil!), Mainkan lagu favorit Anda dan nikmati spektrum waktu nyatanya. (Tonton videonya)
  7. Sekarang kompilasi kode C yang disematkan lagi kali ini dengan #define pcvisual dikomentari dan #define midi_out tidak dikomentari.
  8. Muat ulang kode baru yang dikompilasi ke arduino Nano.
  9. Buka LoopMidi dan buat port baru.
  10. Buka FL studio atau perangkat lunak antarmuka MIDI lainnya dan pastikan port midi loop terlihat di pengaturan port MIDI.
  11. Buka MIDI tanpa rambut dengan arduino terhubung. Pilih port output untuk menjadi port LoopMidi. Buka pengaturan dan atur kecepatan Baud menjadi 115200. Sekarang pilih port COM yang sesuai dengan Arduino Nano dan buka port tersebut.
  12. Mainkan beberapa nada "murni" di dekat mikrofon dan Anda juga akan mendengar nada yang sesuai dalam perangkat lunak MIDI. Jika tidak ada respons, coba turunkan up_threshold yang ditentukan dalam kode C. Jika not dipicu secara acak maka tingkatkan up_threshold.
  13. Dapatkan piano Anda dan uji seberapa cepat sistem Anda!! Hal terbaik adalah bahwa di zona kunci emas catatan itu dapat dengan nyaman mendeteksi beberapa penekanan tombol simultan dengan mudah.

Catatan: Ketika port COM diakses oleh satu aplikasi, itu tidak dapat dibaca oleh yang lain. Misalnya jika Hairless MIDI membaca port COM, Xloader tidak akan dapat mem-flash board

Langkah 7: Hasil/Video

Itu saja untuk sekarang teman-teman! Harap Anda menyukainya. Jika Anda memiliki saran atau perbaikan dalam proyek ini, beri tahu saya di bagian komentar. Perdamaian!

Direkomendasikan: