Example #1
0
int main (int argc, const char * argv[])
{
    /*
    void* lame = dlopen("/usr/local/lib/libmp3lame.dylib", RTLD_NOW);
    
    if (!lame)
        std::cout << "Fail! No library found" << std::endl;
    
    typedef std::function<lame_global_flags*()> lame_init_func;
    lame_init_func lame_init;
    
    lame_init = (lame_global_struct*(*)())dlsym(lame, "lame_init");
    
    if (!lame_init)
        std::cout << "Fail! No function found" << std::endl;
    
    lame_init();
    
    dlclose(lame);
    */
    
    AudioTrack track;
    if (!track.initFromFile(argv[1]))
        return 1;
    
    /*
    unsigned int alSource;
    unsigned int alSampleSet;
    alGenSources(1, &alSource);
    alGenBuffers(1, &alSampleSet);
    alBufferData(alSampleSet, AL_FORMAT_STEREO16, track.getSamples(), (int)track.getSamplesCount(), track.getSampleRate());
    alSourcei(alSource, AL_BUFFER, alSampleSet);
    alSourcei(alSource, AL_LOOPING, AL_TRUE);
    alSourcePlay(alSource);
    */
    
    AudioAnalyzer FourierUtil;
	FFTWOutput FourierOutput;
	AudioFeatures TrackFeatures;
	AudioSections TrackSections;
	FourierUtil.SetWindowLen(.02f);
	FourierUtil.SetOverlap(.5f);
	FourierUtil.SetWindowingFunction(AudioAnalyzer::HANN);
	FourierUtil.UsePadding(true);
    
    std::cout << "Generating full periodogram..." << std::endl;
    FourierUtil.ComputeFFT(&track, 0, FourierOutput);
    
    std::cout << "Generating feature vector..." << std::endl;
    FourierUtil.ComputeAudioFeatures(FourierOutput, TrackFeatures);

    std::cout << "Determining beat locations and BPM..." << std::endl;
    TrackSections.Generate(TrackFeatures, 2000.0f);
    
    std::cout << "Track BPM estimation: " << TrackSections.GetGlobalBPM() << " BPM" << std::endl;
    
    return 0;
}