Имитирование ввода WAVEHDR для потоковой передачи спектрограммы из файлаC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Имитирование ввода WAVEHDR для потоковой передачи спектрограммы из файла

Сообщение Anonymous »

У меня есть код, который принимает входные данные с микрофона и передает спектрограмму через OpenCV. Это отлично работает:

Код: Выделить всё

while (cv::waitKey(10) != 27) {

waveInPrepareHeader(hWaveIn, &WaveInHdr, sizeof(WAVEHDR));              /* Prepare header for input         */
if (waveInAddBuffer(hWaveIn, &WaveInHdr, sizeof(WAVEHDR))) return -1;   /* Insert a wave input buffer       */
if (waveInStart(hWaveIn)) return -1;                                    /* Commence sampling input          */
/* Wait until finished recording    */
do {} while (waveInUnprepareHeader(hWaveIn, &WaveInHdr, sizeof(WAVEHDR)) == WAVERR_STILLPLAYING);

addInput(WaveInHdr);
cv::imshow("Spectrogram", spectrogram.getDetailedSpectrogram(20, cv::COLORMAP_JET));
}
Вышеуказанный входной сигнал с микрофона обрабатывается с помощью функции addInput. Затем это коротковременное преобразование Фурье и разрезание на отдельные векторы-столбцы, например:

Код: Выделить всё

hconcat(line, spectrogram->colRange(0, spectrogram->cols - 1), *spectrogram);
Мне хотелось сделать то же самое, но с использованием амплитуд напряжения, записанных в файл CSV. Я могу построить спектрограммы, но не знаю, как их «потоковать».
Код, который я пытаюсь заставить работать:

Код: Выделить всё

    std::ifstream by_ifstream;
std::string filePath = "file.csv";
read_file(filePath, by_ifstream);

while (cv::waitKey(10) != 27) {
STFT(amplitudes, 1024, 128, 32e3);
cv::imshow("Spectrogram", spectrogram.getDetailedSpectrogram(20, cv::COLORMAP_JET));
}
где функция STFT принимает вектор амплитуд.
По сути, я пытаюсь делать то, что делает код микрофона, то есть потоковую передачу данные вместо того, чтобы просто создавать один график, и я не знаю, как это сделать из файла. Первоначально я собирался попытаться имитировать класс WAVEHDR, повторно использовать код микрофона, каким-то образом превратив свой вектор амплитуды в lpData, но это кажется слишком запутанным.
(Примечание: код Я использую для микрофона спектрограмму, адаптированную с https://github.com/njanakiev/audio-spectrogram)

Подробнее здесь: https://stackoverflow.com/questions/793 ... -from-file
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»