Я работаю над приложением, которое производит выборку аудио и должно обрабатывать эти данные в реальном времени (БПФ и спектр гармонических произведений).
Мне нужно использовать частоту дискретизации 44100 Гц и разрешение по частоте 0,5 Гц, что означает, что мне нужно 88200 сэмплов перед БПФ. Для захвата требуется около 2 секунд, так как это в два раза больше частоты дискретизации; однако после первого сэмплирования я значительно улучшаю ситуацию, используя круговой буфер для сэмплирования, и с тех пор считываю только половину сэмплов.
К сожалению, производительность по-прежнему довольно низкая, и время ожидания довольно велико. Это большая проблема, поскольку приложение должно своевременно реагировать на ввод, как это происходит.
У кого-нибудь есть предложения, как мне улучшить производительность этого? Я думаю, что основная проблема заключается в требовании больших выборок, и было бы хорошо, если бы я мог каким-то образом уменьшить объем читаемого звука, сохраняя при этом ту же точность. Может быть, многопоточность поможет здесь?
EDIT
Если это помогает узнать, я пытаюсь выполнить оценку F0 в реальном времени по данным электрогитары, а также оценку F0 для сопоставления аккордов. У меня есть способы сделать это, которые работают, и они достаточно точны, но это для универсального проекта, и у меня действительно нет достаточно времени, чтобы слишком глубоко изучить другие методы, кроме FFT. На самом деле, я просто надеюсь на какой-то способ ускорить процесс выборки.