Съдържание:
- Стъпка 1: Необходими компоненти
- Стъпка 2: Технически спецификации
- Стъпка 3: Схеми
- Стъпка 4: Необходими приложения и IDE
- Стъпка 5: Подходящи кодове за всичко
- Стъпка 6: Настройване
- Стъпка 7: Резултати/видеоклипове
Видео: Аудио в MIDI конвертор в реално време .: 7 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:52
Намасте хора! Това е проект, по който работих за един от курсовете ми (Обработка на цифрови сигнали в реално време) в бакалавърската си програма. Проектът има за цел да създаде DSP система, която "слуша" аудио данни и извежда MIDI съобщения на съответните бележки по UART. За тази цел беше използван Arduino Nano. Накратко, микроконтролерът прави FFT за входящи аудио данни и прави анализ на пиковете и изпраща подходящо MIDI съобщение. Все пак не се притеснявайте за MOSFET, защото те са за някакъв друг проект (който ще бъде публикуван по -късно и върху инструкциите) и не са необходими за този проект. Така че нека започнем вече !!
Стъпка 1: Необходими компоненти
Ще имаме нужда от следните компоненти, за да изградим този проект, въпреки че много от тях са общи и могат да бъдат заменени с техните еквиваленти. Също така се обърнете към електрическата схема, за да разработите и търсите за по -добри реализации.
Количество на компонентите
1. Електретен микрофон. 1
2. 30 Kilo Ohm резистор. 1
3. 150 Kilo Ohm резистор. 1
4. 100 ома резистор. 1
5. 2.2 Kilo Ohm резистори. 3
6. 10 Kilo Ohm предварително зададен съд. 1
7. 10 Kilo Ohm тримерно гърне. 1
8. 47 Kilo Ohm стерео пот. 1
9. 470 ома резистори. 2
10. 0,01uF кондензатори. 2
11. 2.2uF кондензатори. 3
12. 47uF кондензатори. 2
13. 1000uF кондензатор. 1
14. 470uF кондензатор. 1
15. 7805 регулатор на напрежението. 1
16. Женска и мъжка заглавна лента. По 1 всеки
17. Съединител за варел. 1
18. 12 V 1 Amp DC адаптер. 1
19. SPST ключ. (По избор) 1
20. Perfboard. 1
Стъпка 2: Технически спецификации
Честота на вземане на проби: 3840 проби/сек
Брой проби за FFT: 256
Честотна резолюция: 15Hz
Честота на опресняване: Около 15 Hz
Долните и по -високите скали на музикалните ноти не са заснети правилно. По -ниските ноти страдат от нискочестотна резолюция, тъй като по -високите честоти страдат от ниски честоти на дискретизация. Arduino вече няма памет, така че няма начин да получите по -добра разделителна способност. И по-добрата резолюция ще дойде на цена с намалена честота на опресняване, така че компромисът е неизбежен. Лаическа версия на принципа на несигурността на Хайзенберг.
Основната трудност е експоненциалното разстояние между нотите (Както се вижда на фигурата. Всеки импулс по честотната ос е музикална нота). Алгоритми като LFT може да помогнат, но това е малко напреднало и малко сложно за устройство като arduino Nano.
Стъпка 3: Схеми
Забележка: Не се притеснявайте от трите MOSFET и винтовите клеми на снимките. Те не са необходими за този проект. Забележете, че входната платка на микрофона е подвижна или както я наричат модулна. По -долу е дадено малко описание на различните блокове.
1) Двата 470 ома резистора комбинират стерео аудио сигнала с моно аудио сигнал. Уверете се, че заземяването на сигнала влиза към виртуалното заземяване (vg в електрическата схема), а не към земята на веригата.
2) Следващият блок е нискочестотен филтър от 2-ри ред, който е отговорен за ограничаване на обхвата на входния сигнал, за да се избегне псевдоним. Тъй като работим само с +12v захранване, ние отклоняваме операционния усилвател, като правим RC делител на напрежение. което заблуждава оп -усилвателя да мисли, че захранването е 6 0 -6 волта захранване (двойна шина), където vg е заземяването за операционния усилвател.
3) След това изходът е нискочестотен филтриран, за да блокира DC компенсацията от 6 волта и съчетан с DC от около 0,55 волта, тъй като ADC ще бъде конфигуриран да използва вътрешния 1.1 v като Vref.
Забележка: Предварителният усилвател за електретен микрофон не е най-добрата схема в интернет. Схема, включваща оп-усилвател, би била по-добър избор. Искаме честотната характеристика да бъде възможно най -плоска. Стерео потът от 47 килоома се използва за определяне на граничната честота, която обикновено трябва да бъде половината от честотата на вземане на проби. Предварително зададената настройка от 10 килоома (малкото гърне с бяла глава) се използва за настройване на усилването и Q стойността на филтъра. Машината за подстригване от 10 килоома (една с метално копче за настройка, която прилича на малък винт с плоска глава) се използва за настройване на напрежението до половината Vref.
Забележка: Когато свързвате Nano към P. C. дръжте SPST превключвателя отворен и друг затворен. Обърнете специално внимание на това, ако това не направите, може да навреди на веригата/компютъра/регулатора на напрежението или на всяка комбинация от горните
Стъпка 4: Необходими приложения и IDE
- За кодирането на Arduino Nano отидох с примитивното AVR студио 5.1, защото изглежда ми работи. Можете да намерите инсталатора тук.
- За програмиране на Arduino Nano използвах Xloader. Неговият наистина лесен за използване лек инструмент за записване на.hex файлове в Arduinos. Можете да го получите тук.
- За малък бонус мини проект и настройка на веригата използвах обработка. Можете да го получите от тук, въпреки че има значителни промени във всяка ревизия, така че може да се наложи да се заиграете с отхвърлени функции, за да работи скицата.
- FL studio или друг софтуер за обработка на MIDI. Можете да получите безплатно версия на FL studio с ограничен достъп от тук.
- Loop MIDI създава виртуален MIDI порт и се открива от FL studio, сякаш е MIDI устройство. Вземете копие на същото от тук.
- Без косите MIDI се използва за четене на MIDI съобщения от COM порта и изпращането им към MIDI порта на контура. Той също така отстранява грешки в MIDI съобщения в реално време, което прави отстраняването на грешки удобно. Вземете MIDI без коса от тук.
Стъпка 5: Подходящи кодове за всичко
Бих искал да благодаря на Electronic Lifes MFG (Website Here !!) за FFT библиотеката с фиксирана точка, която използвах в този проект. Библиотеката е оптимизирана за мега AVR семейство. Това е връзката към библиотечните файлове и кодовете, които той използва. Прилагам моя код по -долу. Той включва и скицата за обработка и кода на AVR C. Моля, обърнете внимание, че това е конфигурацията, която работи при мен и не поемам никаква отговорност в такъв случай, ако повредите нещо поради тези кодове. Също така имах много проблеми, опитвайки се да накарам кода да работи. Например, DDRD (регистър за посока на данни) има DDDx (x = 0-7) като битови маски вместо конвенционалния DDRDx (x = 0-7). Внимавайте за тези грешки при компилирането. Също така смяната на микроконтролера засяга тези дефиниции, така че следете и това, докато се занимавате с грешки при компилирането. И ако се чудите защо папката на проекта се нарича DDT_Arduino_328p.rar, нека просто кажем, че вечерта беше много тъмно, когато започнах и бях достатъчно мързелив, за да не запаля светлините.: P
Отивайки до скицата за обработка, използвах обработка 3.3.6, за да напиша тази скица. Ще трябва ръчно да зададете номера на COM порта в скицата. Можете да проверите коментарите в кода.
Ако някой може да ми помогне да прехвърля кодовете към Arduino IDE и най -новата версия за обработка, ще се радвам и ще дам кредити и на разработчиците / сътрудниците.
Стъпка 6: Настройване
- Отворете кода и компилирайте кода с #define pcvisual без коментар и #define midi_out коментиран.
- Отворете xloader и отидете до директорията с код, отидете до.hex файла и го запишете в nano, като изберете подходяща платка и COM порт.
- Отворете скицата за обработка и я стартирайте с подходящ индекс на COM порт. Ако всичко върви добре, трябва да можете да видите спектър от сигнала на щифт A0.
- Вземете отвертка и завъртете косенето на тримера, докато спектърът стане равен (DC компонентът трябва да е близо до нула). Тогава не въвеждайте никакъв сигнал към платката. (Не поставяйте микрофонния модул).
- Сега използвайте всеки инструмент за генератор на почистване като този, за да въведете информация за платката от микрофона и да наблюдавате спектъра.
- Ако не виждате размахване на честотите, намалете граничната честота, като промените съпротивлението от 47 килоома. Също така увеличете печалбата, като използвате предварително зададената тенджера от 10 килоома. Опитайте се да постигнете равномерен и забележим резултат на размах, като промените тези параметри. Това е забавната част (малкият бонус!), Пуснете любимите си песни и се насладете на техния спектър в реално време. (Гледай видеото)
- Сега компилирайте вградения C код отново този път с #define pcvisual коментиран и #define midi_out без коментар.
- Презаредете новия компилиран код в arduino Nano.
- Отворете LoopMidi и създайте нов порт.
- Отворете FL studio или друг софтуер за MIDI интерфейс и се уверете, че midi портът на цикъла е видим в настройките на MIDI порта.
- Отворете MIDI без коса с свързан arduino. Изберете изходния порт за порт LoopMidi. Отидете в настройките и задайте скорост на предаване на 115200. Сега изберете COM порт, съответстващ на Arduino Nano и отворете порта.
- Пуснете някои „чисти“тонове близо до микрофона и трябва да чуете и съответния нотен удар в софтуера MIDI. Ако няма отговор, опитайте да намалите up_threshold, определен в C кода. Ако бележките се задействат произволно, увеличете up_threshold.
- Вземете пианото си и тествайте колко бърза е вашата система !! Най-хубавото е, че в зоната със златисто заключване на бележки тя може лесно да открие многократно едновременно натискане на клавиши.
Забележка: Когато COM портът е достъпен от едно приложение, той не може да бъде прочетен от друго. Например, ако Hairless MIDI чете COM порт, Xloader няма да може да мига платката
Стъпка 7: Резултати/видеоклипове
Това е засега момчета! Надявам се да ви хареса. Ако имате предложения или подобрения в проекта, уведомете ме в секцията за коментари. Спокойствие!
Препоръчано:
Как да използвате модул с часовник в реално време (DS3231): 5 стъпки
Как да използвате модул с часовник в реално време (DS3231): DS3231 е евтин, изключително точен I2C часовник в реално време (RTC) с интегриран температурно компенсиран кристален осцилатор (TCXO) и кристал. Устройството включва вход за батерия и поддържа точно отчитане на времето, когато основното захранване
Ръководител на кубика на Рубик със затворени очи в реално време, използващ Raspberry Pi и OpenCV: 4 стъпки
Решавач на куб Рубик в реално време със завързани очи, използващ Raspberry Pi и OpenCV: Това е втората версия на инструмента за куб на Рубик, създаден за решаване на завързани очи. Първата версия е разработена от javascript, можете да видите проекта RubiksCubeBlindfolded1 За разлика от предишната, тази версия използва OpenCV библиотека за откриване на цветовете и
Измервател на нивото на водата в кладенец в реално време: 6 стъпки (със снимки)
Измервател на нивото на водата в кладенец в реално време: Тези инструкции описват как да се изгради евтин водомер в реално време за използване в изкопани кладенци. Измервателят на нивото на водата е проектиран да виси в изкопан кладенец, да измерва нивото на водата веднъж на ден и да изпраща данните чрез WiFi или клетъчна връзка
Разпознаване на устройства в реално време с помощта на ЕМ стъпки: 6 стъпки
Разпознаване на устройства в реално време с помощта на ЕМ стъпки: Това устройство е предназначено да класифицира различни електронни устройства според техните ЕМ сигнали. За различните устройства те имат различни ЕМ сигнали, излъчвани от него. Ние разработихме решение за IoT за идентифициране на електронните устройства, използващи частици
Wiggly Wobbly - Вижте Звуковите вълни !! Аудио визуализатор в реално време !!: 4 стъпки
Wiggly Wobbly - Вижте Звуковите вълни !! Аудио визуализатор в реално време !!: Чудили ли сте се как изглеждат песните на Beetle ?? Или просто искате да видите как изглежда звукът? Тогава не се притеснявайте, аз съм тук, за да ви помогна да го направите отново! Повдигнете високоговорителя си и се стремете към избледнелото