STFT и ISTFT в реальном времени в Julia для обработки аудио
Я новичок в обработке звука и работе с данными, которые передаются в режиме реального времени. Что я хочу сделать, это:
- слушать встроенный микрофон
- куски вместе образцы в 0,1 секунды
- преобразовать блок в периодограмму с помощью кратковременного преобразования Фурье (STFT)
- применить несколько простых функций
- преобразовать обратно в данные временного ряда с помощью обратной STFT (ISTFT)
- воспроизвести новый звук в наушниках
Я искал вокруг "real time spectrograms"
дать мне руководство о том, как работать с данными, но не игра в кости. Я, однако, обнаружил несколько интересных пакетов, в том числе PortAudio.jl
, DSP.jl
а также MusicProcessing.jl
,
Такое ощущение, что мне нужно использовать многопроцессорные методы, чтобы просто сохранять входящие данные в подходящих чанках, одновременно применяя некоторую функцию к предыдущему чанку и одновременно воспроизводя другой ранее обработанный чанк. Все это кажется слишком сложным, и на какое-то время я откладываю подход к этому проекту.
Любая помощь будет принята с благодарностью, спасибо.
1 ответ
Как всегда, начните с простой версии того, что вам действительно нужно... на данный момент не обращайте внимания на извлечение звука из микрофона, вместо этого напишите некоторый код, чтобы синтезировать кривую греха с известной частотой, и используйте его в качестве входного аудио или читайте в аудио из файла WAV - преимущество в том, что он известен и воспроизводим в отличие от микрофона
этот пост показывает, как использовать некоторые из упомянутых вами библиотек http://www.seaandsailor.com/audiosp_julia.html
Вы говорите о "спектрограмме в реальном времени" ... это просто многократная обработка окна аудио, поэтому давайте сначала упростим и это... как только вы сможете прочитать в аудиофайл wav, затем отправить его в вызов FFT, который вернет эту звуковую кривую в ее представлении в частотной области... при правильном утверждении эти данные в частотной области могут быть затем отправлены в обратный вызов FFT, чтобы вернуть вам исходную звуковую кривую во временной области
После того, как вы приступите к работе, оберните его в вызов, который предоставляет скользящее окно аудиосэмплов, чтобы дать вам возможность "в реальном времени" анализировать входящий звук с вашего микрофона... имейте в виду, что вы всегда используете мощность 2 количества аудиосэмплов в вашем окне сэмплов, которые вы вводите в вызовы FFT и IFFT... допустим, ваше окно содержит 16384 сэмпла... вашему серверу julia необходимо будет выполнить несколько требований (1) собрать следующий буфер сэмплов из ваш микрофонный канал (2) отправляет окно сэмплов в ваш вызов FFT и IFFT... имейте в виду, что количество аудиосэмплов в вашем скользящем окне, как правило, будет больше, чем размер буфера входящего микрофона - отсюда и понятие скользящего окно... со временем добавьте ваш микрофонный буфер в переднюю часть этого окна и удалите то же количество сэмплов из хвостовой части этого окна сэмплов