Оглавление:

Конвертер аудио в MIDI в реальном времени: 7 шагов
Конвертер аудио в MIDI в реальном времени: 7 шагов

Видео: Конвертер аудио в MIDI в реальном времени: 7 шагов

Видео: Конвертер аудио в MIDI в реальном времени: 7 шагов
Видео: ВОЗМОЖНО ЛИ ПЕРЕВЕСТИ АУДИО В MIDI? / И НЕ ПОДБИРАТЬ НА СЛУХ МЕЛОДИИ 2024, Июль
Anonim
Конвертер аудио в MIDI в реальном времени
Конвертер аудио в MIDI в реальном времени

Намасте люди! Это проект, над которым я работал над одним из моих курсов (обработка цифровых сигналов в реальном времени) в рамках моей программы бакалавриата. Проект направлен на создание системы DSP, которая «слушает» аудиоданные и выводит MIDI-сообщения соответствующих нот через UART. Для этого использовалась Arduino Nano. Короче говоря, микроконтроллер выполняет БПФ для входящих аудиоданных, выполняет некоторый анализ пиков и отправляет соответствующее MIDI-сообщение. Не беспокойтесь о полевых МОП-транзисторах, потому что они предназначены для какого-то другого проекта (который также будет размещен позже в инструкциях) и не требуются для этого проекта. Итак, приступим уже !!

Шаг 1. Необходимые компоненты

Необходимые компоненты
Необходимые компоненты

Для создания этого проекта нам понадобятся следующие компоненты, хотя многие из них являются общими и могут быть заменены их эквивалентами. Также обратитесь к принципиальной схеме для разработки и поиска лучших реализаций.

Компонент Количество

1. Электретный микрофон. 1

2. Резистор 30 кОм. 1

3. Резистор 150 кОм. 1

4. Резистор 100 Ом. 1

5. Резисторы 2,2 кОм. 3

6. Предустановленный потенциометр 10 кОм. 1

7. Подстроечный резистор 10 кОм. 1

8. Стереопоток 47 кОм. 1

9. Резисторы 470 Ом. 2

10. Конденсаторы 0,01 мкФ. 2

11. Конденсаторы 2,2 мкФ. 3

12. Конденсаторы емкостью 47 мкФ. 2

13. Конденсатор 1000 мкФ. 1

14. Конденсатор емкостью 470 мкФ. 1

15. Регулятор напряжения 7805. 1

16. Полоса заголовка «Женский» и «Мужской». По 1 штуке

17. Разъем цилиндрического домкрата. 1

18. Адаптер постоянного тока 12 В, 1 А. 1

19. Переключатель SPST. (Необязательно) 1

20. Перфорированная плита. 1

Шаг 2: Технические характеристики

Технические характеристики
Технические характеристики

Частота дискретизации: 3840 образцов / сек.

Количество выборок на БПФ: 256

Разрешение по частоте: 15 Гц

Частота обновления: около 15 Гц

Нижняя и верхняя шкалы музыкальных нот фиксируются неправильно. Низкие ноты страдают от низкого разрешения по частоте, тогда как более высокие частоты страдают от низкой частоты дискретизации. В Arduino уже не хватает памяти, поэтому нет возможности улучшить разрешение. А лучшее разрешение будет достигнуто за счет снижения частоты обновления, поэтому компромисс неизбежен. Обычная версия принципа неопределенности Гейзенберга.

Основная трудность - экспоненциальный интервал между нотами (как видно на рисунке. Каждый импульс на частотной оси - это музыкальная нота). Могут помочь такие алгоритмы, как LFT, но это немного продвинуто и немного сложно для такого устройства, как arduino Nano.

Шаг 3: Принципиальные схемы

Принципиальные схемы
Принципиальные схемы
Принципиальные схемы
Принципиальные схемы
Принципиальные схемы
Принципиальные схемы
Принципиальные схемы
Принципиальные схемы

Примечание. Не обращайте внимания на три полевых МОП-транзистора и винтовые клеммы на рисунках. Они не требуются для этого проекта. Обратите внимание, что плата микрофонного входа съемная или, как ее называют, модульная. Ниже приводится небольшое описание различных блоков.

1) Два резистора на 470 Ом объединяют стереофонический аудиосигнал в монофонический аудиосигнал. Убедитесь, что земля входного сигнала идет на виртуальную землю (vg на принципиальной схеме), а не на землю цепи.

2) Следующий блок - это фильтр нижних частот второго порядка с плоской клавишей, который отвечает за ограничение полосы входного сигнала во избежание наложения спектров. Поскольку мы работаем только с источником питания +12 В, мы смещаем операционный усилитель, сделав RC-делитель напряжения. это вводит операционный усилитель в заблуждение, заставляя его думать, что напряжение питания составляет 60–6 В (двойная шина), где vg - это заземление для операционного усилителя.

3) Затем выходной сигнал проходит фильтрацию нижних частот, чтобы блокировать смещение постоянного тока на 6 вольт и соединяется с постоянным током около 0,55 вольт, потому что АЦП будет настроен на использование внутреннего 1,1 В в качестве Vref.

Примечание: предусилитель для электретного микрофона - не лучшая схема в Интернете. Схема с операционным усилителем была бы лучшим выбором. Мы хотим, чтобы частотная характеристика была как можно более ровной. Стерео потенциометр на 47 кОм используется для определения частоты среза, которая обычно должна составлять половину частоты дискретизации. Предварительная установка 10 кОм (небольшой горшок с белой головкой) используется для настройки усиления и значения добротности фильтра. Подстроечный резистор 10 кОм (с металлической ручкой настройки, которая выглядит как маленький винт с плоской головкой) используется для установки напряжения, близкого к половине Vref.

Примечание: когда вы подключаете Nano к ПК. держите переключатель SPST открытым, иначе замкнутым. Соблюдайте особые меры предосторожности, иначе это может привести к повреждению схемы / компьютера / регулятора напряжения или любой комбинации вышеперечисленного

Шаг 4: Необходимые приложения и IDE

Необходимые приложения и IDE
Необходимые приложения и IDE
Необходимые приложения и IDE
Необходимые приложения и IDE
Необходимые приложения и IDE
Необходимые приложения и IDE
Необходимые приложения и IDE
Необходимые приложения и IDE
  1. Для кодирования Arduino Nano я выбрал примитивную AVR studio 5.1, потому что мне кажется, что она мне подходит. Вы можете найти программу установки здесь.
  2. Для программирования Arduino Nano я использовал Xloader. Это действительно простой в использовании легкий инструмент для записи файлов.hex на Arduinos. Вы можете получить его здесь.
  3. Для небольшого бонусного мини-проекта и настройки схемы я использовал процессинг. Вы можете получить его отсюда, хотя внесите значительные изменения в каждую ревизию, поэтому вам, возможно, придется возиться с устаревшими функциями, чтобы скетч заработал.
  4. FL studio или любое другое программное обеспечение для обработки MIDI. Вы можете бесплатно получить версию FL studio с ограниченным доступом здесь.
  5. Loop MIDI создает виртуальный MIDI-порт и обнаруживается FL studio, как если бы это было MIDI-устройство. Получите копию отсюда.
  6. Безволосый MIDI используется для чтения MIDI-сообщений из COM-порта и отправки их в петлевой MIDI-порт. Он также отлаживает MIDI-сообщения в режиме реального времени, что делает отладку удобной. Получите здесь MIDI без волос.

Шаг 5: Соответствующие коды для всего

Я хотел бы поблагодарить Electronic Lifes MFG (Website Here !!) за библиотеку БПФ с фиксированной точкой, которую я использовал в этом проекте. Библиотека оптимизирована для мега-семейства AVR. Это ссылка на файлы библиотеки и коды, которые он использовал. Прилагаю свой код ниже. Он также включает в себя скетч обработки и код AVR C. Обратите внимание, что эта конфигурация сработала для меня, и я не несу никакой ответственности, если вы повредите что-либо из-за этих кодов. Кроме того, у меня было много проблем, пытаясь заставить код работать. Например, DDRD (регистр направления данных) имеет DDDx (x = 0-7) в качестве битовых масок вместо обычного DDRDx (x = 0-7). Следите за этими ошибками при компиляции. Также изменение микроконтроллера влияет на эти определения, поэтому следите за этим, когда имеете дело с ошибками компиляции. И если вам интересно, почему папка проекта называется DDT_Arduino_328p.rar, ну давайте просто скажем, что вечером было очень темно, когда я начал, и я был достаточно ленив, чтобы не включать свет.:П

Переходя к обработке скетча, я использовал обработку 3.3.6, чтобы написать этот скетч. Вам нужно будет установить номер COM-порта в скетче вручную. Вы можете проверить комментарии в коде.

Если кто-нибудь может помочь мне перенести коды в Arduino IDE и последнюю версию обработки, я был бы рад и также поблагодарил бы разработчиков / участников.

Шаг 6: Настройка

  1. Откройте код и скомпилируйте код с #define pcvisual без комментариев и #define midi_out с комментариями.
  2. Откройте xloader и перейдите в каталог с кодом, перейдите к файлу.hex и запишите его на nano, выбрав соответствующую плату и COM-порт.
  3. Откройте скетч обработки и запустите его с соответствующим индексом COM-порта. Если все пойдет хорошо, вы сможете увидеть спектр сигнала на выводе A0.
  4. Возьмите отвертку и поверните потенциометр триммера, пока спектр не станет ровным (постоянная составляющая должна быть близка к нулю). Тогда не подавайте никаких сигналов на плату. (Не прикрепляйте микрофонный модуль).
  5. Теперь воспользуйтесь любым подобным инструментом генератора развертки, чтобы подать сигнал на плату с микрофона и наблюдать за спектром.
  6. Если вы не видите колебания частот, уменьшите частоту среза, изменив сопротивление 47 кОм. Также увеличьте усиление, используя предварительно установленный потенциометр 10 кОм. Попытайтесь получить ровный и заметный выход развертки, изменив эти параметры. Это самая интересная часть (небольшой бонус!): Играйте свои любимые песни и наслаждайтесь их спектром в реальном времени. (Смотреть видео)
  7. Теперь снова скомпилируйте встроенный код C с комментариями #define pcvisual и без комментариев #define midi_out.
  8. Перезагрузите новый скомпилированный код на arduino Nano.
  9. Откройте LoopMidi и создайте новый порт.
  10. Откройте FL studio или другое программное обеспечение интерфейса MIDI и убедитесь, что порт MIDI петли виден в настройках порта MIDI.
  11. Откройте MIDI без волос с подключенным ардуино. Выберите выходной порт в качестве порта LoopMidi. Зайдите в настройки и установите скорость передачи 115200 бод. Теперь выберите COM-порт, соответствующий Arduino Nano, и откройте порт.
  12. Сыграйте несколько «чистых» тонов возле микрофона, и вы также должны услышать удар соответствующей ноты в программном обеспечении MIDI. Если нет ответа, попробуйте снизить значение up_threshold, определенное в коде C. Если ноты запускаются случайным образом, увеличьте up_threshold.
  13. Возьмите пианино и проверьте, насколько быстро ваша система !! Лучше всего то, что в зоне золотого замка нот он может легко обнаружить несколько одновременных нажатий клавиш.

Примечание. Когда к COM-порту обращается одно приложение, другое приложение не может его прочитать. Например, если Hairless MIDI читал COM-порт, Xloader не сможет прошить плату

Шаг 7: Результаты / видео

На этом все, ребята! Надеюсь, тебе понравится. Если у вас есть предложения или улучшения в проекте, дайте мне знать в разделе комментариев. Мир!

Рекомендуемые: