Spisu treści:
- Krok 1: Wymagane komponenty
- Krok 2: Specyfikacje techniczne
- Krok 3: Schematy obwodów
- Krok 4: Niezbędne aplikacje i IDE
- Krok 5: Odpowiednie kody do wszystkiego
- Krok 6: Konfiguracja
- Krok 7: Wyniki / filmy
Wideo: Konwerter audio w czasie rzeczywistym na MIDI.: 7 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:30
Ludzie Namaste! Jest to projekt, nad którym pracowałem w ramach jednego z moich kursów (cyfrowe przetwarzanie sygnałów w czasie rzeczywistym) w ramach mojego programu licencjackiego. Projekt ma na celu stworzenie systemu DSP, który "nasłuchuje" danych audio i wysyła komunikaty MIDI z odpowiednimi nutami przez UART. Do tego celu wykorzystano Arduino Nano. Krótko mówiąc, mikrokontroler wykonuje FFT na przychodzących danych audio i dokonuje analizy szczytów oraz wysyła odpowiedni komunikat MIDI. Nie przejmuj się jednak MOSFETami, ponieważ są one przeznaczone do innego projektu (który zostanie również umieszczony później w instrukcjach) i nie są wymagane w tym projekcie. Więc zacznijmy już !!
Krok 1: Wymagane komponenty
Do zbudowania tego projektu potrzebne będą następujące komponenty, chociaż wiele z nich jest ogólnych i można je zastąpić ich odpowiednikami. Zapoznaj się również ze schematem obwodu, aby opracować i znaleźć lepsze implementacje.
Ilość składników
1. Mikrofon elektretowy. 1
2. Rezystor 30 kiloomów. 1
3. Rezystor 150 kiloomów. 1
4. Rezystor 100 omów. 1
5. Rezystory 2,2 kiloomowe. 3
6. Potencjometr 10 kiloomów. 1
7. Potencjometr do przycinania 10 kiloomów. 1
8. Potencjometr stereo 47 kiloomów. 1
9. Rezystory 470 omów. 2
10. Kondensatory 0,01uF. 2
11. Kondensatory 2,2uF. 3
12. Kondensatory 47uF. 2
13. Kondensator 1000uF. 1
14. Kondensator 470uF. 1
15. 7805 regulator napięcia. 1
16. Żeński i męski pasek nagłówka. 1 każdy
17. Złącze Jack Barrel. 1
18. Zasilacz prądu stałego 12 V 1 A. 1
19. Przełącznik SPST. (opcjonalnie) 1
20. Płyta perforowana. 1
Krok 2: Specyfikacje techniczne
Częstotliwość próbkowania: 3840 próbek/s
Liczba próbek na FFT: 256
Rozdzielczość częstotliwości: 15Hz
Częstotliwość odświeżania: około 15 Hz
Niższa i wyższa skala nut nie są prawidłowo uchwycone. Niższe dźwięki cierpią z powodu rozdzielczości niskich częstotliwości, podczas gdy wyższe częstotliwości cierpią z powodu niskich częstotliwości próbkowania. W arduino skończyła się już pamięć, więc nie ma możliwości uzyskania lepszej rozdzielczości. A lepsza rozdzielczość będzie kosztować zmniejszoną częstotliwość odświeżania, więc kompromis jest nieunikniony. Laymanowska wersja zasady nieoznaczoności Heisenberga.
Podstawową trudnością są wykładnicze odstępy między nutami (jak widać na rysunku. Każdy impuls na osi częstotliwości jest nutą muzyczną). Algorytmy takie jak LFT mogą pomóc, ale jest to trochę zaawansowane i mało skomplikowane dla urządzenia takiego jak arduino Nano.
Krok 3: Schematy obwodów
Uwaga: Nie przejmuj się trzema tranzystorami MOSFET i zaciskami śrubowymi na zdjęciach. Nie są wymagane w tym projekcie. Zwróć uwagę, że płytka wejścia mikrofonu jest wymienna lub jak nazywają ją modułową. Poniżej znajduje się krótki opis różnych bloków.
1) Dwa rezystory 470 omów łączą sygnał audio stereo z sygnałem audio mono. Upewnij się, że masa sygnału wejściowego jest zbliżona do wirtualnej masy (vg na schemacie obwodu), a nie do masy obwodu.
2) Następny blok to filtr dolnoprzepustowy drugiego rzędu, który jest odpowiedzialny za ograniczenie pasma sygnału wejściowego w celu uniknięcia aliasingu. Ponieważ pracujemy tylko z zasilaniem +12V, polaryzujemy wzmacniacz operacyjny, tworząc dzielnik napięcia RC. to ogłupia wzmacniacz operacyjny, myśląc, że zasilanie wynosi 6 0-6 woltów (podwójna szyna), gdzie vg jest punktem odniesienia dla wzmacniacza operacyjnego.
3) Następnie wyjście jest filtrowane dolnoprzepustowo, aby zablokować przesunięcie prądu stałego o wartości 6 woltów i połączone z prądem stałym o wartości około 0,55 wolta, ponieważ ADC zostanie skonfigurowany do używania wewnętrznego napięcia 1,1 V jako Vref.
Uwaga: przedwzmacniacz mikrofonu elektretowego nie jest najlepszym obwodem w Internecie. Obwód ze wzmacniaczem operacyjnym byłby lepszym wyborem. Chcemy, aby pasmo przenoszenia było jak najbardziej płaskie. Potencjometr stereo 47 kiloomów służy do definiowania częstotliwości odcięcia, która zwykle powinna wynosić połowę częstotliwości próbkowania. Preset 10 kiloomów (mały potencjometr z białą głowicą) służy do dostrajania wzmocnienia i wartości Q filtra. Potencjometr o wartości 10 kiloomów (jeden z metalową gałką strojenia, która wygląda jak mała śruba z płaskim łbem) służy do ustawienia napięcia tak blisko, jak połowa Vref.
Uwaga: Kiedy podłączasz Nano do PC. pozostaw przełącznik SPST otwarty, w przeciwnym razie zamknięty. Zachowaj szczególną ostrożność, jeśli tego nie zrobisz, może to uszkodzić obwód/komputer/regulator napięcia lub dowolną kombinację powyższych
Krok 4: Niezbędne aplikacje i IDE
- Do kodowania Arduino Nano wybrałem prymitywne studio AVR 5.1, ponieważ wydaje mi się, że działa. Instalator znajdziesz tutaj.
- Do programowania Arduino Nano użyłem Xloadera. Jest to naprawdę łatwe w użyciu lekkie narzędzie do nagrywania plików.hex na Arduinos. Możesz to dostać tutaj.
- Do małego bonusowego mini projektu i strojenia układu wykorzystałem przetwarzanie. Możesz go pobrać stąd, chociaż dokonaj poważnych zmian w każdej wersji, więc być może będziesz musiał bawić się przestarzałymi funkcjami, aby szkic działał.
- FL studio lub inne oprogramowanie do przetwarzania MIDI. Możesz pobrać wersję FL studio z ograniczonym dostępem za darmo stąd.
- Loop MIDI tworzy wirtualny port MIDI i jest wykrywany przez FL studio tak, jakby był urządzeniem MIDI. Pobierz kopię tego samego stąd.
- Bezwłosy MIDI służy do odczytywania komunikatów MIDI z portu COM i wysyłania ich do zapętlonego portu MIDI. Debuguje również komunikaty MIDI w czasie rzeczywistym, co sprawia, że debugowanie jest wygodne. Pobierz bezwłosy MIDI stąd.
Krok 5: Odpowiednie kody do wszystkiego
Chciałbym podziękować firmie Electronic Lifes MFG (strona internetowa tutaj!!) za bibliotekę punktów stałych FFT, którą wykorzystałem w tym projekcie. Biblioteka jest zoptymalizowana dla rodziny mega AVR. To jest link do plików bibliotecznych i kodów, z których korzystał. Załączam kod poniżej. Zawiera również szkic przetwarzania i kod AVR C. Należy pamiętać, że jest to konfiguracja, która zadziałała dla mnie i nie biorę żadnej odpowiedzialności, jeśli coś uszkodzisz z powodu tych kodów. Poza tym miałem wiele problemów, próbując sprawić, by kod działał. Na przykład DDRD (rejestr kierunku danych) ma DDDx (x = 0-7) jako maski bitowe zamiast konwencjonalnego DDRDx (x = 0-7). Uważaj na te błędy podczas kompilacji. Również zmiana mikrokontrolera wpływa na te definicje, więc miej to na oku podczas rozwiązywania błędów kompilacji. A jeśli zastanawiasz się, dlaczego folder projektu nazywa się DDT_Arduino_328p.rar, powiedzmy tylko, że wieczorem, kiedy zaczynałem, było bardzo ciemno i byłem na tyle leniwy, że nie zapalałem świateł.:P
Przechodząc do szkicu przetwarzania, użyłem przetwarzania 3.3.6 do napisania tego szkicu. Musisz ręcznie ustawić numer portu COM w szkicu. Możesz sprawdzić komentarze w kodzie.
Jeśli ktoś może mi pomóc przenieść kody do Arduino IDE i najnowszej wersji przetwarzania, byłbym zadowolony i udzielę również kredytów deweloperom/współtwórcom.
Krok 6: Konfiguracja
- Otwórz kod i skompiluj go z #define pcvisual bez komentarza i #define midi_out z komentarzem.
- Otwórz xloader i przejdź do katalogu z kodem, przejdź do pliku.hex i wypal go do nano wybierając odpowiednią płytkę i port COM.
- Otwórz szkic przetwarzania i uruchom go z odpowiednim indeksem portu COM. Jeśli wszystko pójdzie dobrze, powinieneś być w stanie zobaczyć widmo sygnału na pinie A0.
- Weź śrubokręt i obróć potencjometr trymera, aż widmo będzie płaskie (składowa DC powinna być bliska zeru). Nie wprowadzaj wtedy żadnego sygnału do tablicy. (Nie podłączaj modułu mikrofonu).
- Teraz użyj dowolnego takiego narzędzia generatora przemiatania, aby przekazać dane wejściowe do płytki z mikrofonu i obserwować widmo.
- Jeśli nie widzisz przemiatania częstotliwości, zmniejsz częstotliwość odcięcia, zmieniając rezystancję 47 kiloomów. Zwiększ również wzmocnienie, używając wstępnie ustawionego potencjometru 10 kiloomów. Postaraj się uzyskać płaski i wyraźny wynik wobulacji, zmieniając te parametry. To fajna część (mały bonus!), graj swoje ulubione piosenki i ciesz się ich spektrum w czasie rzeczywistym. (Obejrzyj wideo)
- Teraz ponownie skompiluj osadzony kod C, tym razem z komentarzem #define pcvisual i odkomentowaniem #define midi_out.
- Przeładuj nowy skompilowany kod na arduino Nano.
- Otwórz LoopMidi i utwórz nowy port.
- Otwórz FL studio lub inne oprogramowanie interfejsu MIDI i upewnij się, że port midi pętli jest widoczny w ustawieniach portu MIDI.
- Otwórz bezwłosy MIDI z podłączonym arduino. Wybierz port wyjściowy jako port LoopMidi. Przejdź do ustawień i ustaw szybkość transmisji na 115200. Teraz wybierz port COM odpowiadający Arduino Nano i otwórz port.
- Zagraj kilka „czystych” tonów w pobliżu mikrofonu i powinieneś również usłyszeć odpowiedni dźwięk w oprogramowaniu MIDI. Jeśli nie ma odpowiedzi, spróbuj obniżyć up_threshold zdefiniowany w kodzie C. Jeśli nuty są uruchamiane losowo, zwiększ wartość up_threshold.
- Zdobądź pianino i sprawdź, jak szybki jest twój system! Najlepszą rzeczą jest to, że w strefie banknotów ze złotą kłódką może łatwo wykryć wiele jednoczesnych naciśnięć klawiszy.
Uwaga: Kiedy port COM jest używany przez jedną aplikację, nie może być odczytany przez inną. Na przykład, jeśli bezwłosy MIDI odczytuje port COM, Xloader nie będzie w stanie flashować płyty
Krok 7: Wyniki / filmy
Na razie to wszystko! Mam nadzieję że ci się spodoba. Jeśli masz jakieś sugestie lub ulepszenia w projekcie daj mi znać w sekcji komentarzy. Pokój!
Zalecana:
Miernik poziomu wody w studni w czasie rzeczywistym: 6 kroków (ze zdjęciami)
Miernik poziomu wody w studni w czasie rzeczywistym: Te instrukcje opisują, jak zbudować tani miernik poziomu wody w czasie rzeczywistym do użytku w studniach kopanych. Miernik poziomu wody jest przeznaczony do zawieszenia w wykopanej studni, pomiaru poziomu wody raz dziennie i przesyłania danych przez WiFi lub połączenie komórkowe
Miernik temperatury, przewodności i poziomu wody w studni w czasie rzeczywistym: 6 kroków (ze zdjęciami)
Miernik temperatury wody w studni w czasie rzeczywistym, przewodności i poziomu wody: Instrukcje te opisują, jak zbudować tani wodomierz w czasie rzeczywistym do monitorowania temperatury, przewodności elektrycznej (EC) i poziomu wody w studniach wykopanych. Miernik przeznaczony jest do zawieszenia w wykopanej studni, pomiaru temperatury wody, EC i
Jak zrobić rejestrator danych wilgotności i temperatury w czasie rzeczywistym za pomocą Arduino UNO i karty SD - Symulacja rejestratora danych DHT11 w Proteus: 5 kroków
Jak zrobić rejestrator danych wilgotności i temperatury w czasie rzeczywistym za pomocą Arduino UNO i karty SD | Symulacja rejestratora danych DHT11 w Proteus: Wstęp: cześć, tu Liono Maker, tutaj link do YouTube. Tworzymy kreatywne projekty z Arduino i pracujemy na systemach wbudowanych.Data-Logger: Rejestrator danych (również rejestrator danych lub rejestrator danych) to urządzenie elektroniczne, które rejestruje dane w czasie w
Postshirt: wykrywanie postawy w czasie rzeczywistym: 9 kroków
Postshirt: wykrywanie postawy w czasie rzeczywistym: Postshirt to bezprzewodowy system wykrywania postawy w czasie rzeczywistym, który przesyła i klasyfikuje dane akcelerometru z pióra Adafruit do aplikacji na Androida przez Bluetooth. Cały system może wykryć w czasie rzeczywistym, czy użytkownik ma złą postawę i c
Wiggly Wobbly - Zobacz fale dźwiękowe !! Wizualizator audio w czasie rzeczywistym!!: 4 kroki
Wiggly Wobbly - Zobacz fale dźwiękowe !! Wizualizator dźwięku w czasie rzeczywistym !!: Czy kiedykolwiek zastanawiałeś się, jak wyglądają piosenki Beetle? A może po prostu chcesz zobaczyć, jak wygląda dźwięk? Nie martw się, jestem tutaj, aby ci pomóc, aby to reeeeeaaaaaaaaaaaaa