| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Захват и обработка звука с микрофона |
| Автор: david08 13.2.2014, 02:29 |
| Доброго времени суток! Подскажите пожалуйста, как снимать данные с потока микрофона для последующей обработки? Винда или Линукс не важно, интересует дальнейшее разложение сигнала в спектр и построение чего-то типа спектр от времени. Примерно представляю, что нужно пользоваться быстрым преобразованием Фурье, но если можете помочь разобраться как это реализуется, был бы очень признателен. |
| Автор: borisbn 13.2.2014, 11:54 |
| Скачиваешь http://www.fftw.org/, вызываешь http://www.fftw.org/fftw3_doc/Complex-One_002dDimensional-DFTs.html#Complex-One_002dDimensional-DFTs, из полученного массива считаешь спектр мощности ( powSpectr[ i ] = complexSpectr[ i ][ 0 ] * complexSpectr[ i ][ 0 ] + complexSpectr[ i ][ 1 ] * complexSpectr[ i ][ 1 ] ), затем рассчитываешь логарифмический спектр ( logSpectr[ i ] = 10 * log10( powSpectr[ i ] ) ), затем повторяешь всё то же самое для следующей по времени выборки сигнала. Затем рисуешь такой график: по оси X у тебя индекс массива logSpectr, по оси Y - время ( или просто номер выборки ), а цвет каждой точки берётся из таблицы цветов по индексу, равному logSpectr[ i ], т.е. как-то так: color = colorTable[ logSpectr[ i ] ]; |
| Автор: borisbn 13.2.2014, 12:58 |
Должен получиться вот такой "водопад" (нижняя половина рисунка)![]() |