2017-05-23 19 views
0

음악 파일의 주파수 특성에 대한 정보를 mp3 형식으로 얻으려고했습니다.mp3의 주파수

C++을 사용하여 mp3 파일의 주파수를 얻는 방법은 무엇입니까? 그리고 fftw 라이브러리는 어떤 데이터를 사용합니까?

+0

종종 가장 쉬운 방법은 기존의 툴을 사용하여, WAV로 MP3 파일을 변환하는 것입니다 같은 처리 라이브러리를 신호 것을 공급하여 원하는 결과를 얻을 수 있습니다 'sox'와 같은. WAV는 C++에서 읽는 것이 쉽습니다. – MSalters

답변

2

이것은 두 단계 과정으로, 먼저 mp3 파일을 C++ 프로그램에서 원하는대로 데이터 구조로 읽어야합니다. 대부분의 mp3 파일은 각 채널에 대해 하나씩, 두 개의 배열/벡터를 갖는 스테레오 형식입니다. FFTW는 두 단계로 작동합니다. 먼저 데이터, FFT 포인트 수, 역/순방향 FFT 방향 등을 설명하는 계획을 만듭니다. 다음 단계에서는이 계획과 입력 데이터를 사용하여 주파수 변환을 계산합니다. 그런 다음 결과 float/double complex 배열의 크기 응답을 FFTW에서 가져올 수 있습니다. FFTW 자습서에 대한 링크 http://www.fftw.org/fftw2_doc/fftw_2.html

이러한 단계를 수동으로 수행 할 필요가 없다고 말하면과 같이 사용자가 직접 할 수있는 많은 오픈 소스 음악 정보 검색 라이브러리가 있습니다. 또한 오디오 데이터를 얻을 수 등 PortAudio로 오디오 라이브러리를 사용하여 데이터를 openvsip 또는 LiquidDSP

+0

답변 해 주셔서 감사합니다. 올바른 순간을 정확하게 이해합니까? 예 : mp3 형식의 audiodata가 압축되어 있고 주파수에 대한 올바른 정보를 얻으려면 fftw를 사용하기 전에 예를 들어 .wav로 변환하는 것이 바람직하거나 중요하지 않습니다. – cranberry

+0

MP3는 손실이 많은 데이터 압축 방식입니다. 즉, FFT를 MP3 프레임 (데이터 부분)에 직접 적용하면 원래의 주파수 스펙트럼에 약간의 차이가 있지만 여전히 아주 가깝습니다. Wav 형식으로 변환하면 오디오 데이터를 처리 할 수있는 가능성이 높아집니다. 그러나 이전에자가 학습이나 과제를위한 것이 아니라면 MP3 읽기를 지원하는 오디오 라이브러리를 사용해야합니다. – fsheikh