Код: Выделить всё
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));
}
Код: Выделить всё
hconcat(line, spectrogram->colRange(0, spectrogram->cols - 1), *spectrogram);
Код, который я пытаюсь заставить работать:
Код: Выделить всё
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));
}
По сути, я пытаюсь делать то, что делает код микрофона, то есть потоковую передачу данные вместо того, чтобы просто создавать один график, и я не знаю, как это сделать из файла. Первоначально я собирался попытаться имитировать класс WAVEHDR, повторно использовать код микрофона, каким-то образом превратив свой вектор амплитуды в lpData, но это кажется слишком запутанным.
(Примечание: код Я использую для микрофона спектрограмму, адаптированную с https://github.com/njanakiev/audio-spectrogram)
Подробнее здесь: https://stackoverflow.com/questions/793 ... -from-file