Я создаю инструмент, который должен запускаться на сервере и анализировать звуковые файлы. Я хочу сделать это в Ruby, поскольку все мои другие инструменты также написаны на Ruby. Но мне трудно найти хороший способ этого.Извлечение быстрого преобразования Фурье данные из файла
Множество примеров, которые я нашел, выполняет визуализаторы и графические материалы. Мне просто нужны данные FFT, не более того. Мне нужно как получить аудиоданные, так и сделать БПФ. Моя конечная цель - рассчитать некоторые вещи, такие как средний/средний/режим, 25-процентный и 75-й процентиль по всем частотам (взвешенная амплитуда), BPM и, возможно, некоторые другие хорошие характеристики, чтобы впоследствии могли группировать подобные звуки вместе ,
Сначала я пытался использовать рубиново-аудио и FFTW3, но я никогда не хожу два по-настоящему работать вместе. Документация не была хорошей, так что я действительно не знал, какие данные перетасовываются. Далее я попытался использовать bplay/brec и ограничить свой скрипт Ruby просто использованием STDIN и выполнить FFT на этом (все еще используя fftw3). Но я не мог заставить bplay/brec работать, поскольку на сервере нет звуковой карты, и мне не удалось просто получить звук непосредственно в STDOUT, не перейдя сначала на аудиоустройство.
Вот ближе я получил:
# extracting audio from wav with ruby-audio
buf = RubyAudio::Buffer.float(1024)
RubyAudio::Sound.open(fname) do |snd|
while snd.read(buf) != 0
# ???
end
end
# performing FFT on audio
def get_fft(input, window_size)
data = input.read(window_size).unpack("s*")
na = NArray.to_na(data)
fft = FFTW3.fft(na).to_a[0, window_size/2]
return fft
end
Так что теперь я застрял и не могу найти более хорошие результаты на Google. Так что, возможно, вы, SO, можете мне помочь?
Спасибо!
Возможно, это предыдущее обсуждение может быть полезным: http://stackoverflow.com/questions/2834548/ruby-play-pause-resume -aac-audio-files – fmendez
Не могли бы вы объяснить, почему вы застряли? Пожалуйста, указывайте сообщения об ошибках или пробелы в своем понимании того, как все должно работать. –
До сих пор я добавил свой код. У меня огромный разрыв между чтением данных с использованием ruby-audio и извлечением FFT с использованием fftw3. См. Комментарий с тремя вопросительными знаками. У меня есть данные wav внутри buf, но я не знаю, что данные действительно представляют/представляют. Есть ли там заголовки? Это сжатие/кодирование? и т. д. и т. д. Я хочу получить данные в get_fft (который берется почти дословно из другого сообщения SO). –