2014-02-13 6 views
3

wav/riff 사운드 파일의 주파수 스펙트럼을 포함하여 파일을 생성하는 방법은 무엇입니까? 나는 리눅스 커맨드 라인을 사용하고 싶다. 리눅스 명령 줄을 사용하여 WAV/RIFF에서 주파수 스펙트럼 가져 오기

나는 시원한 삭스 기능은 PNG 스펙트로
sox sound.wav -n spectrogram 

를 생성 할 알고하지만 주파수 스펙트럼의 시각적 표현이 필요하지 않습니다. 데이터 파일에서 주파수의 스펙트럼을 얻고 싶습니다. sox를 사용하는 옵션이 있어야한다고 생각합니다. Sox는 계획을 세우기 전에 데이터를 생성해야합니다. 이것을 얻는 방법?

잘 모르겠지만 두 번째 해결 방법은 wav 파일을 dat 파일로 내보내는 것입니다. dat 파일의 각 샘플은 순간의 멤브레인 위치 측정 값입니다. 그래서 이것은 주파수의 스펙트럼이 아닙니다.

sox sound.wav file.dat 

어떻게 막의 위치를 ​​스펙트럼으로 변환해야합니까?

감사합니다.

+0

SoX는 아직 이것을 지원하지 않습니다. 나는'-O FILE' 옵션을 추가하는 패치를 작성했습니다.이 옵션은 계산 된 데이터를'FILE'에 저장합니다. 메일 링리스트보기 : https://sourceforge.net/p/sox/mailman/message/34779977/ – Thor

답변

3

당신이 찾고있는 것을 푸리에 변환 (Fourier Transform) 또는 고속 푸리에 변환 (FFT)이라고합니다. FFT는 .wav 파일에 포함 된 시간 영역 샘플 (즉, 지정한 시점의 멤브레인 위치)을 주파수 구성 요소로 변환하는 수학 알고리즘입니다. Google FFT를 사용하면 Linux에서 컴파일하고 재사용 할 수있는 소스 코드를 비롯하여 훨씬 더 많은 정보를 얻을 수 있습니다. 좋은 시작을 위해서는 How do I plot the spectrum of a wav file using FFT?을 참조하십시오.

+0

감사합니다. SOX에서 직접 사용하는 것은 어떨까요? Sox는이 스펙트로 그램을 그리기 전에 주파수 데이터의 스펙트럼을 생성하기 위해 FFT를 수행해야합니다. 그것은 매우 빠르게 작동합니다. – zsedc

+0

나는 SOX가 스펙트럼을 생성하기 위해 내부적으로 FFT를 수행해야한다는 것에 동의한다. 그러나 SOX 출력을 원시 FFT 데이터로 만드는 방법이 있는지 확신 할 수 없습니다. 그러나 SOX를 사용하여 wav 파일에서 숫자 샘플을 가져올 수 있습니다.이 샘플은 FFT 프로그램에 입력해야합니다. 이에 대한 자세한 아이디어는 랜달 쿡 (Randall Cook)의 http://stackoverflow.com/questions/15031544/extract-fast-fourier-transform-data-from-file에서 응답을 참조하십시오. – mti2935

1

sox에서 stat 옵션을 사용해 볼 수 있습니다.

play track.wav stat -freq 
+0

이 명령의 출력은 무엇을 의미합니까? – theonlygusti