Другие языки программирования и технологии

Делаю нейронную сеть на C++. Как в C++ работать с микрофоном?

Давно загорелся идеей написать программу (на основе нейронных сетей) , которая будет сочинять музыку.

Принцип действия долго объяснять не буду - сам пока некоторые моменты не продумал. Но выглядеть это будет примерно так:



Звук с микрофона попадает в первый клеточный автомат (CA), который делает первичную обработку звукового сигнала (подавляет шум) . Дальше попадает в первую нейронную сеть с рандомными коэффициентами связей. И на выходе часть этой какофонии отправляет в следующую нейронную сеть, без коэффициентов (в общем-то первая NN нам нужна только для того, чтобы связать два клеточных автомата. Основа и обучение нашей программы будут заключаться в следующих NN) и часть попадает на выходной клеточный автомат, который тоже подавляет шум и отправляет звук на колонки.

Но суть не в этом. Все мое написание программы застопорилось на микрофоне. Звук с микрофона надо расшифровать и записать в матрицу клеточного автомата. Принцип действия следующий:



Звук с микрофона разбивается на определенные интервалы (скажем, 1 секунда) . И дальше на каждом интервале нам надо получить весь диапазон частот и записать в массив m(t,f), где t - интервал, f - частота (это число округлять придется, чтобы не было дробных индексов массива) а в m(t,f) хранится интенсивность (громкость) определенной частоты.

Такой тип записи звукового сигнала существует и используется некоторыми группами в своих композициях (например Apex Twin). Называется "Спектрография звука".

Aaron Funk - Songs About My Cats


Ну вобщем суть понятна, я надеюсь. Мне надо сделать простейший звуковой спектрограф.

Да, и к вопросу, почему я использую микрофон а не wav-файл. На самом деле написание программы для создания музыки - это не конечная моя цель. В дальнейшем хочу перепрограммировать свою нейронную сеть не для работы с музыкой, а для работы с немножко другим типом данных. Поэтому расшифровка сигнала с микрофона а не с файла - для меня актуальная задача.
¤Arman¤ *a¤R¤M¤A¤N*
¤Arman¤ *a¤R¤M¤A¤N*
3 511
Интересная задумка!
Интересно, какую нейронную сеть Вы используете? Собственной разработки или уже готовый пакет?
Каким образом Вы будете обучать нейронную сеть?
"Сочинение музыки" будет происходить в режиме обучения или в режиме работы нейронной сети?
Что касается файла и микрофона, то здесь у Вас пока неверное понимание сути процесса!
То, что записывается wav-файл как раз и являются отсчётами дискретизированного сигнала. Там требуются знание таких параметров, как частота дискретизации и разрядность данных, ну и вариант записи стерео или моно.
Получение спектральных составляющих делается с помощью БПФ при захвате определённого количества отсчётов звукового сигнала, равного степени двойки. То есть Вы должны выбрать скольки точечный БПФ Вы будете использовать.
А работа с "микрофоном" - это задача реальных условий, то есть оптимизация алгоритмов по скорости, чтобы они успевали обрабатывать входные данные. Никто при разработке алгоритмов не пользуется реальной скоростью. Сначала идёт разработка алгоритмов по записанным фрагментам, а уж потом, при получении положительных результатов, ставится задача оптимизировать разработанные алгоритмы под реальный сигнал!
Николай Пиманов
Николай Пиманов
76 473
Лучший ответ
¤Arman¤ *a¤R¤M¤A¤N* Исключительно собственной разработки.

Что касается файла и микрофона, то у меня вообще нет никакого понимания сути процесса. Раньше я звук никогда не программировал.
БПФ - это Фурье?
¤Arman¤ *a¤R¤M¤A¤N* Добрался таки вчера до Хайкина. 9-я глава заинтересовала - "Карты самоорганизации". По-моему это тот велосипед, который я тут изобретаю.
Пошевели нейронами :) Почитай API к своей ОС.

PS. И, кстати, поток с микрофона ты будешь получать аналогично потоку из вавки.. . Так что...
Плисак Николай
Плисак Николай
13 013
Под форточку Direct используй, или работай напрямую с дровами, но это далеко не просто (да и инфы мало об этом)
¤Arman¤ *a¤R¤M¤A¤N* То что придется работать с DirectShow я и без того знаю. Меня интересует не это. В каком виде представляется аудио-поток, и можно ли его записать в массив, так как я описал в своем вопросе?
¤Arman¤ *a¤R¤M¤A¤N* Интересует спектральный анализ звука.
Вы очень крутой человек, я вами горжусь.