STFT и ISTFT в реальном времени в Julia для обработки аудио - PullRequest
0 голосов
/ 23 ноября 2018

Я новичок в обработке звука и работе с данными, которые передаются в режиме реального времени.То, что я хочу сделать, это:

  • прослушивание встроенного микрофона
  • фрагментов, сгруппированных в 0,1-секундные фрагменты
  • преобразование фрагмента в периодограмму черезкратковременное преобразование Фурье (STFT)
  • применение некоторых простых функций
  • преобразование обратно в данные временных рядов с помощью обратного STFT (ISTFT)
  • воспроизведение нового звука на наушниках

Я искал "real time spectrograms", чтобы дать мне руководство о том, как работать с данными, но без кубиков.Однако я обнаружил несколько интересных пакетов, в том числе PortAudio.jl, DSP.jl и MusicProcessing.jl.

Мне кажется, что мне нужно использовать многопроцессорные методы, чтобы просто сохранять входящие данные в подходящихчанки, одновременно применяя некоторую функцию к предыдущему чанку, в то же время воспроизводя другой ранее обработанный чанк.Все это кажется слишком сложным, и на какое-то время я отталкиваю меня от участия в этом проекте.

Любая помощь будет принята с благодарностью, спасибо.

1 Ответ

0 голосов
/ 24 ноября 2018

Как всегда, начните с простой версии того, что вам действительно нужно ... на данный момент не обращайте внимания на извлечение звука из микрофона, вместо этого напишите некоторый код для синтеза кривой синуса известной частоты и используйте его в качестве входного аудио, иличитать аудио из файла wav - выгода здесь в том, что он известен и воспроизводим в отличие от звука микрофона

В этом посте показано, как использовать некоторые из упомянутых вами библиотек http://www.seaandsailor.com/audiosp_julia.html

Вы говорите о "настоящемвременная спектрограмма "... это просто многократная обработка окна аудио, поэтому давайте сначала также упростим это ... как только вы сможете прочитать аудиофайл wav, затем отправьте его в вызов FFT, который вернет этот звук обратнокривая в ее представлении в частотной области ... при правильном указании этих данных в частотной области можно затем отправить обратный вызов FFT, чтобы вернуть вам исходную звуковую кривую во временной области

После того, как вы приступите к работе, оберните еев вызове, который предоставляет скользящее окно аудиосэмплов, чтобы дать вам «в реальном времени» bвозможность анализировать входящее аудио с вашего микрофона ... имейте в виду, что вы всегда используете мощность 2 количества аудиосэмплов в своем окне сэмплов, которые вы передаете в вызовы FFT и IFFT ... допустим, ваше окно равно 16384сэмплы ... ваш сервер julia должен будет манипулировать несколькими требованиями (1) вытащить следующий буфер сэмплов из вашего микрофона (2) отправить окно сэмплов в ваш вызов FFT и IFFT ... знать количество сэмплов аудиов вашем скользящем окне, как правило, будет шире, чем размер входящего буфера микрофона - отсюда и понятие скользящего окна ... со временем добавьте ваш микрофонный буфер в переднюю часть этого окна и удалите такое же количество сэмплов из хвостовой частиэто окно образцов

...