Inhaltsverzeichnis:

Echtzeit-Audio-zu-MIDI-Konverter. - Gunook
Echtzeit-Audio-zu-MIDI-Konverter. - Gunook

Video: Echtzeit-Audio-zu-MIDI-Konverter. - Gunook

Video: Echtzeit-Audio-zu-MIDI-Konverter. - Gunook
Video: Arbeiten mit MIDI-Files | Cubase Praxis Tipps 2024, November
Anonim
Echtzeit-Audio-zu-MIDI-Konverter
Echtzeit-Audio-zu-MIDI-Konverter

Namasté-Leute! Dies ist ein Projekt, an dem ich in einem meiner Kurse (Real-Time Digital Signal Processing) in meinem Bachelorstudium gearbeitet habe. Das Projekt zielt darauf ab, ein DSP-System zu entwickeln, das Audiodaten "abhört" und MIDI-Nachrichten mit entsprechenden Noten über UART ausgibt. Dafür wurde Arduino Nano verwendet. Lange Rede, kurzer Sinn, der Mikrocontroller führt eine FFT auf eingehende Audiodaten durch, analysiert die Spitzen und sendet eine entsprechende MIDI-Nachricht. Machen Sie sich jedoch keine Sorgen um die MOSFETs, da sie für ein anderes Projekt gelten (das später auch auf Instructables gestellt wird) und für dieses Projekt nicht erforderlich sind. Fangen wir also schon an!!

Schritt 1: Erforderliche Komponenten

Erforderliche Komponenten
Erforderliche Komponenten

Wir benötigen die folgenden Komponenten, um dieses Projekt zu erstellen, obwohl viele davon generisch sind und durch ihre Äquivalente ersetzt werden können. Sehen Sie sich auch den Schaltplan an, um bessere Implementierungen zu erarbeiten und zu suchen.

Komponentenmenge

1. Elektret-Mikrofon. 1

2. 30 Kilo Ohm Widerstand. 1

3. 150 Kilo Ohm Widerstand. 1

4. 100 Ohm Widerstand. 1

5. 2,2 Kilo-Ohm-Widerstände. 3

6. 10-Kilo-Ohm-Preset-Poti. 1

7. 10 Kilo Ohm Trimmerpotentiometer. 1

8. 47-Kilo-Ohm-Stereo-Poti. 1

9. 470 Ohm Widerstände. 2

10. 0,01uF Kondensatoren. 2

11. 2.2uF-Kondensatoren. 3

12. 47uF-Kondensatoren. 2

13. 1000uF Kondensator. 1

14. 470uF Kondensator. 1

15. 7805 Spannungsregler. 1

16. Buchsen- und Steckerleiste. je 1

17. Barrel Jack-Anschluss. 1

18. 12 V 1 Ampere DC-Adapter. 1

19. SPST-Schalter. (Optional) 1

20. Perfboard. 1

Schritt 2: Technische Spezifikationen

Technische Spezifikationen
Technische Spezifikationen

Abtastfrequenz: 3840 Abtastungen/Sek.

Anzahl der Samples pro FFT: 256

Frequenzauflösung: 15Hz

Bildwiederholfrequenz: ca. 15 Hz

Die unteren und höheren Tonleitern der Musiknoten werden nicht korrekt erfasst. Tiefere Töne leiden unter einer niedrigen Frequenzauflösung, während höhere Frequenzen unter niedrigen Abtastraten leiden. Das Arduino hat bereits keinen Speicher mehr, daher gibt es keine Möglichkeit, eine bessere Auflösung zu erzielen. Und eine bessere Auflösung geht mit einer geringeren Bildwiederholfrequenz einher, sodass Kompromisse unvermeidlich sind. Laienversion des Heisenbergschen Unschärferelationsprinzips.

Die Hauptschwierigkeit ist der exponentielle Abstand zwischen den Noten (Wie in der Abbildung zu sehen. Jeder Impuls auf der Frequenzachse ist eine Musiknote). Algorithmen wie LFT könnten helfen, aber das ist für ein Gerät wie Arduino Nano etwas fortgeschritten und wenig kompliziert.

Schritt 3: Schaltpläne

Schaltpläne
Schaltpläne
Schaltpläne
Schaltpläne
Schaltpläne
Schaltpläne
Schaltpläne
Schaltpläne

Hinweis: Lassen Sie sich nicht von den drei MOSFETs und den Schraubklemmen in den Bildern stören. Sie werden für dieses Projekt nicht benötigt. Beachten Sie, dass die Mikrofoneingangsplatine abnehmbar ist oder modular genannt wird. Nachfolgend finden Sie eine kleine Beschreibung der verschiedenen Blöcke.

1) Die beiden 470-Ohm-Widerstände kombinieren das Stereo-Audiosignal zu einem Mono-Audiosignal. Stellen Sie sicher, dass die Masse des Signaleingangs zur virtuellen Masse (vg im Schaltplan) und nicht zur Masse der Schaltung führt.

2) Der nächste Block ist ein Sallen-Key-Tiefpassfilter zweiter Ordnung, der für die Bandbegrenzung des Eingangssignals verantwortlich ist, um Aliasing zu vermeiden. Da wir nur mit einer +12-V-Versorgung arbeiten, spannen wir den Operationsverstärker durch einen RC-Spannungsteiler vor. das täuscht den Operationsverstärker zu glauben, dass die Versorgung eine 6 0 -6 Volt-Versorgung (Dual Rail) ist, wobei vg die Massereferenz für den Operationsverstärker ist.

3) Dann wird der Ausgang tiefpassgefiltert, um einen DC-Offset von 6 Volt zu blockieren und mit einem DC von etwa 0,55 Volt gekoppelt, da der ADC so konfiguriert ist, dass er die internen 1,1 V als Vref verwendet.

Hinweis: Der Vorverstärker für das Elektretmikrofon ist nicht die beste Schaltung im Internet. Eine Schaltung mit Operationsverstärker wäre die bessere Wahl gewesen. Wir wünschen uns einen möglichst flachen Frequenzgang. Der 47-Kilo-Ohm-Stereo-Poti wird verwendet, um die Grenzfrequenz zu definieren, die typischerweise die Hälfte der Sampling-Frequenz betragen sollte. Das 10-Kilo-Ohm-Preset (Der kleine Topf mit weißem Kopf) wird verwendet, um die Verstärkung und den Q-Wert des Filters abzustimmen. Der 10-Kilo-Ohm-Trimmerpotentiometer (einer mit einem metallischen Stimmknopf, der wie eine kleine Flachkopfschraube aussieht) wird verwendet, um die Spannung auf die Hälfte von Vref einzustellen.

Hinweis: Wenn Sie den Nano mit dem PC verbinden. Halten Sie den SPST-Schalter offen, sonst geschlossen. Achten Sie besonders darauf, dass dies nicht der Fall ist, da dies den Schaltkreis/Computer/Spannungsregler oder eine Kombination der oben genannten beschädigen kann

Schritt 4: Notwendige Anwendungen und IDEs

Notwendige Anwendungen und IDEs
Notwendige Anwendungen und IDEs
Notwendige Anwendungen und IDEs
Notwendige Anwendungen und IDEs
Notwendige Anwendungen und IDEs
Notwendige Anwendungen und IDEs
Notwendige Anwendungen und IDEs
Notwendige Anwendungen und IDEs
  1. Für die Codierung des Arduino Nano habe ich mich für das primitive AVR Studio 5.1 entschieden, weil es für mich zu funktionieren scheint. Den Installer finden Sie hier.
  2. Für die Programmierung des Arduino Nano habe ich Xloader verwendet. Es ist wirklich einfach zu verwenden, um.hex-Dateien auf Arduinos zu brennen. Sie können es hier bekommen.
  3. Für kleines Bonus-Miniprojekt und das Tunen der Schaltung habe ich Verarbeitung verwendet. Sie können es von hier aus erhalten, obwohl es in jeder Revision größere Änderungen gibt, sodass Sie möglicherweise mit veralteten Funktionen herumspielen müssen, damit die Skizze funktioniert.
  4. FL Studio oder jede andere MIDI-Verarbeitungssoftware. Sie können hier die FL Studio-Version mit eingeschränktem Zugriff kostenlos erhalten.
  5. Loop MIDI erstellt einen virtuellen MIDI-Port und wird von FL Studio erkannt, als ob es ein MIDI-Gerät wäre. Holen Sie sich hier eine Kopie davon.
  6. Hairless MIDI wird verwendet, um MIDI-Nachrichten vom COM-Port zu lesen und an den Loop-MIDI-Port zu senden. Es debuggt auch MIDI-Meldungen in Echtzeit, was das Debuggen bequem macht. Holen Sie sich Hairless MIDI von hier.

Schritt 5: Relevante Codes für alles

Ich möchte Electronic Lifes MFG (Website Here!!) für die Fixpunkt-FFT-Bibliothek danken, die ich in diesem Projekt verwendet habe. Die Bibliothek ist für die Mega-AVR-Familie optimiert. Dies ist der Link zu Bibliotheksdateien und Codes, die er verwendet hat. Ich hänge meinen Code unten an. Es enthält auch die Verarbeitungsskizze und den AVR-C-Code. Bitte beachten Sie, dass dies die Konfiguration ist, die für mich funktioniert hat und ich keine Verantwortung übernehme, wenn Sie aufgrund dieser Codes etwas beschädigen. Außerdem hatte ich viele Probleme, den Code zum Laufen zu bringen. Beispielsweise hat DDRD (Data Direction Register) DDDx (x = 0-7) als Bitmasken anstelle des herkömmlichen DDRDx (x = 0-7). Achten Sie beim Kompilieren auf diese Fehler. Auch das Ändern des Mikrocontrollers wirkt sich auf diese Definitionen aus, also behalten Sie dies auch im Auge, wenn Sie mit Kompilierungsfehlern umgehen. Und wenn Sie sich fragen, warum der Projektordner DDT_Arduino_328p.rar heißt, sagen wir einfach, dass es abends sehr dunkel war, als ich anfing, und ich war faul genug, das Licht nicht anzuschalten.:P

Um zur Verarbeitungsskizze zu kommen, habe ich die Verarbeitung 3.3.6 verwendet, um diese Skizze zu schreiben. Sie müssen die COM-Portnummer in der Skizze manuell festlegen. Sie können die Kommentare im Code überprüfen.

Wenn mir jemand helfen kann, die Codes auf die Arduino IDE und die neueste Verarbeitungsversion zu portieren, würde ich mich freuen und auch den Entwicklern / Mitwirkenden danken.

Schritt 6: Einrichten

  1. Öffnen Sie den Code und kompilieren Sie den Code mit #define pcvisual unkommentiert und #define midi_out kommentiert.
  2. Öffnen Sie xloader und navigieren Sie zum Verzeichnis mit Code, navigieren Sie zur.hex-Datei und brennen Sie sie auf Nano, indem Sie das entsprechende Board und den COM-Port auswählen.
  3. Öffnen Sie die Verarbeitungsskizze und führen Sie sie mit dem entsprechenden COM-Port-Index aus. Wenn alles gut geht, sollten Sie ein Spektrum des Signals an Pin A0 sehen können.
  4. Holen Sie sich einen Schraubendreher und drehen Sie den Trimmerpotentiometer, bis das Spektrum flach ist (die DC-Komponente sollte nahe Null sein). Geben Sie dann kein Signal in die Platine ein. (Bringen Sie das Mikrofonmodul nicht an).
  5. Verwenden Sie nun ein beliebiges Sweep-Generator-Tool wie dieses, um über das Mikrofon Eingaben an die Platine zu geben und das Spektrum zu beobachten.
  6. Wenn Sie keinen Frequenzdurchlauf sehen, verringern Sie die Grenzfrequenz, indem Sie den Widerstand von 47 Kiloohm ändern. Erhöhen Sie auch die Verstärkung, indem Sie das 10-Kilo-Ohm-Preset-Poti verwenden. Versuchen Sie, durch Ändern dieser Parameter einen flachen und markanten Sweep-Ausgang zu erzielen. Dies ist der lustige Teil (der kleine Bonus!), spielen Sie Ihre Lieblingssongs und genießen Sie ihr Echtzeit-Spektrum. (Schau das Video)
  7. Kompilieren Sie nun den eingebetteten C-Code dieses Mal erneut mit #define pcvisual kommentiert und #define midi_out unkommentiert.
  8. Laden Sie den neu kompilierten Code neu auf Arduino Nano.
  9. Öffnen Sie LoopMidi und erstellen Sie einen neuen Port.
  10. Öffnen Sie FL Studio oder eine andere MIDI-Interface-Software und stellen Sie sicher, dass der Loop-Midi-Port in den MIDI-Port-Einstellungen sichtbar ist.
  11. Öffnen Sie haarloses MIDI mit angeschlossenem Arduino. Wählen Sie den Ausgangsport als LoopMidi-Port aus. Gehen Sie zu Einstellungen und stellen Sie die Baudrate auf 115200 ein. Wählen Sie nun den COM-Port aus, der Arduino Nano entspricht, und öffnen Sie den Port.
  12. Spielen Sie einige "reine" Töne in der Nähe des Mikrofons und Sie sollten den entsprechenden Notenanschlag auch in der MIDI-Software hören. Wenn keine Antwort erfolgt, versuchen Sie, den im C-Code definierten up_threshold zu senken. Wenn die Noten zufällig ausgelöst werden, erhöhen Sie den up_threshold.
  13. Holen Sie sich Ihr Klavier und testen Sie, wie schnell Ihr System ist! Das Beste ist, dass es in der Gold-Lock-Zone der Noten bequem mehrere gleichzeitige Tastendrücke erkennen kann.

Hinweis: Wenn von einer Anwendung auf den COM-Port zugegriffen wird, kann er von einer anderen nicht gelesen werden. Wenn beispielsweise Hairless MIDI den COM-Port liest, kann Xloader das Board nicht flashen

Schritt 7: Ergebnisse/Videos

Das war's erst mal Jungs! Hoffe du magst es. Wenn Sie Vorschläge oder Verbesserungen für das Projekt haben, lassen Sie es mich im Kommentarbereich wissen. Frieden!

Empfohlen: