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... имейте в виду, что количество аудиосэмплов в вашем скользящем окне, как правило, будет больше, чем размер буфера входящего микрофона - отсюда и понятие скользящего окно... со временем добавьте ваш микрофонный буфер в переднюю часть этого окна и удалите то же количество сэмплов из хвостовой части этого окна сэмплов

Другие вопросы по тегам