int musly_track_analyze_audiofile( musly_jukebox* jukebox, const char* audiofile, int max_seconds, musly_track* track) { if (jukebox && jukebox->decoder) { // try decoding the given audio file musly::decoder* d = reinterpret_cast<musly::decoder*>(jukebox->decoder); // decode a maximum of 60 seconds std::vector<float> pcm = d->decodeto_22050hz_mono_float(audiofile, max_seconds); if (pcm.size() == 0) { return -1; } // select the central max_pcmlength (usually 30s) of the piece int start = 0; int sel_central_samples = 30*22050; int len = pcm.size(); if (len > sel_central_samples) { start = (len - sel_central_samples) / 2; len = sel_central_samples; } return musly_track_analyze_pcm(jukebox, pcm.data()+start, len, track); } else { return -1; } return 0; }
int musly_track_analyze_audiofile( musly_jukebox* jukebox, const char* audiofile, float excerpt_length, float excerpt_start, musly_track* track) { if (jukebox && jukebox->decoder) { // try decoding the given audio file musly::decoder* d = reinterpret_cast<musly::decoder*>(jukebox->decoder); // decode the specified excerpt std::vector<float> pcm = d->decodeto_22050hz_mono_float(audiofile, excerpt_length, excerpt_start); if (pcm.size() == 0) { return -1; } // pass it on to build the similarity model return musly_track_analyze_pcm(jukebox, pcm.data(), pcm.size(), track); } else { return -1; } return 0; }