Пример #1
0
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;
}
Пример #2
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;
}