Получить спектр частот из WAV/RIFF с помощью командной строки linux

Как сгенерировать файл, включающий спектр частот звукового файла wav/riff? Я хотел бы использовать командную строку Linux.

Я знаю крутую функцию sox для создания спектрограмм png

sox sound.wav -n spectrogram

Но мне не нужно визуальное представление спектра частот. Я просто хочу получить спектр частот в файле данных, чтобы я мог работать с ними. Я считаю, что должен быть вариант с использованием sox. Sox должен сгенерировать эти данные перед их построением. Как это получить?

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

sox sound.wav file.dat

Как преобразовать эти положения мембраны в спектр, который мне нужен?

Спасибо.


person zsedc    schedule 13.02.2014    source источник
comment
SoX еще не поддерживает это. Я написал патч, добавляющий опцию -O FILE, которая будет сохранять рассчитанные данные в FILE. См. список рассылки: sourceforge.net/p/sox/mailman/message/34779977< /а>   -  person Thor    schedule 15.04.2016
comment
Теперь, годы спустя, он поддерживает его.   -  person user77232    schedule 24.07.2020


Ответы (3)


То, что вы ищете, называется преобразованием Фурье или быстрым преобразованием Фурье (БПФ). БПФ — это математический алгоритм, преобразующий отсчеты во временной области (т. е. положения мембраны, как вы выразились, в моменты времени), содержащиеся в файле .wav, — в частотные составляющие. Если вы погуглите БПФ, вы найдете гораздо больше информации, включая исходный код, который вы можете скомпилировать и повторно использовать в Linux. См. Как построить спектр wav-файл с использованием БПФ? для хорошего начала.

person mti2935    schedule 13.02.2014
comment
Спасибо. Как насчет использования его непосредственно из SOX? Сокс должен выполнить БПФ, чтобы сгенерировать данные спектра частот, прежде чем строить эту спектрограмму. Это работает очень быстро. - person zsedc; 13.02.2014
comment
Я согласен с тем, что SOX должен выполнять внутреннее преобразование Фурье для генерации спектра. Но я не уверен, что есть способ заставить SOX выводить необработанные данные FFT. Но вы можете использовать SOX для извлечения числовых выборок из файла wav, которые вам нужно будет ввести в программу БПФ. См. ответ Рэндалла Кука по адресу stackoverflow .com/questions/15031544/, чтобы узнать больше об этом. - person mti2935; 13.02.2014

Вы можете попробовать параметр stat в sox.

play track.wav stat -freq
person Domingo    schedule 03.05.2017

Как насчет

sox sound.wav -n stat -freq >& file.dat
person Wilbert    schedule 09.10.2019