2009-11-15 3 views
2

MP3 파일 위치를 입력으로 사용하는 라이브러리 또는 일종의 명령을 원합니다 (MP3 만 WAV, OGG 또는 기타 유형이 필요하지 않습니다). 그것을 끝내고 이퀄라이저 출력을 만들지 만 (31HZ, 62HZ, ..., 16KHZ) 같은 숫자로만 주파수를 사용할 수 있지만 사용 가능한 10 개의 모든 밴드가 10 개의 변수를 변경하면서 나에게 보여줍니다. 31 HZ 밴드는 (1, 30, 24, 5, 31, .. 등등) 모든 밴드에서 사용됩니다. 그러나 1 - 31 일 필요는 없습니다. 내가 말하려고 생각은 ... 다른 밴드에서 분리 & 수의 각 밴드의 값을 가지고있는 이퀄라이저로C++ 및 MP3 이퀄라이저 질문

같은 생각하지만, 정확히 .. 그래서 그것을 할 수 있는가? 그것을 할 수 있거나 그것을 할 수있는 것이 있습니까?

P.
- 나는 이퀄라이저를 만들고 있지 않습니다.
- 난 여전히 쉽게 걸릴 ++ C에 대한 멍청한 놈의 종류이고 가지 마세요 "당신은 수행하는 명령 줄이있는 바보는 점에서 C++ 올바른".. 고마워요 :)

+2

이퀄라이저 = 스펙트럼을! 나는 코드에 주석을 참조 간단한 데모를 만들었습니다 분석기 - 나는 네가 후자를 원한다고 생각해. – sellibitze

답변

2

SoX (사운드 교환)은 오디오 파일을 재생할 때 주파수 분석을 제공 할 수 있습니다. 명령

sox myfile.mp3 temp.wav stat --freq 

은 MP3 파일을 WAV 파일로 디코딩합니다. 그것은이 작업을 수행하는 동안, 그것은 4096 점 푸리에 오디오의 각 블록에 대한 변환을 수행하고 stderr이 같은 인쇄 주파수 전원 쌍 :

0.000000 3.079278 
10.766602 5.994057 
<snip> 
22028.466797 14.589799 
22039.233398 14.289429 
0.000000 0.232025 
<snip> 

그래서 당신은 입력으로이 쌍을 주파수 값을 매핑 할 것 밴드를 선택하고 각 밴드의 합계를 더하십시오.

또는 오픈 소스 MP3 디코더 (예 : MAD)로 시작하여 원하는 분석을 수행하도록 수정할 수 있습니다. MP3 디코딩은 두 단계로 나눌 수 있습니다 :

  • 이 분석을 위해 오디오 출력

으로 주파수 스펙트럼을 변환 부호화 된 비트 스트림으로부터 주파수 스펙트럼을 재구성, 당신은 단지 할 필요가 첫 번째 단계로 진행 한 다음 각 이퀄라이저 밴드에 스펙트럼 파워를 더합니다. 따라서이 방법은 SoX (디코드를 완료 한 다음 주파수 도메인으로 다시 변환)를 사용하는 것보다 훨씬 적은 처리량을 필요로하지만 MP3로만 연결됩니다 (문제는 아님).

0

당신이 C++의 초보자라고 생각한다면 Qt Phonon 라이브러리를 사용하는 것이 좋습니다. 당신은 파라 메트릭 EQ 매개 변수에 익숙하지 않은 경우

#include <QtCore/QCoreApplication> 
#include <phonon> 
#include <iostream> 

using namespace Phonon; 

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 

    Phonon::AudioOutput m_AudioOutput(Phonon::MusicCategory); 

    // Create Phonon music player 
    MediaObject *music = createPlayer(MusicCategory,MediaSource("path_to_audio_file.mp3")); 

    // Get list of included Fxs and print it to the stdout 
    QList<EffectDescription> fxs = Phonon::BackendCapabilities::availableAudioEffects(); 

    for(QList<EffectDescription>::iterator i = fxs.begin(); i != fxs.end(); i++) 
    { 
     std::cout<<std::string(i->name().toUtf8())<<std::endl; 
    } 

    // Creates a new Path connecting the two MediaNodes - source and sink 
    Phonon::Path path = Phonon::createPath(music, &m_AudioOutput); 

    if(path.isValid()) 
    { 
     // Create parametric EQ 
     Phonon::Effect *effect = new Phonon::Effect(fxs.at(0)); 
     path.insertEffect(effect); 

     // Get list of fx parameters 
     QList<Phonon::EffectParameter> pars = effect->parameters(); 

     // Do some changes with parameters - set frq. bands as you need 

     effect->setParameterValue(pars.at(0), 600); // Center frequency in Hz 
     effect->setParameterValue(pars.at(1), 12); // Bandwidth in Hz at -3dB 
     effect->setParameterValue(pars.at(2), -12); // Gain in dB 

     // Play audio file effected by the inserted Audio Fx 
     music->play(); 
    } 

    return a.exec(); 
} 

를이 링크를 한 번 봐 걸릴 :

http://www.astralsound.com/parametric_eq.htm