Beatporter icon indicating copy to clipboard operation
Beatporter copied to clipboard

Adding most popular matching track when no track matches duration is a bad idea...

Open lorenzolamasse opened this issue 1 year ago • 2 comments

Hi,

Made a slight modif in my local base to avoid adding a random matching track when there is no track matching the exact duration. It's mostly the case with remixes and extended versions that are not (yet) available on Spotify. I personally prefer skipping these tracks instead of adding a random version of them:

def best_of_multiple_matches(source_track, found_tracks):
    counter = 1
    duration_matches = [
        0,
    ]
    for track in found_tracks:
        print("\t\t\t[+] Match {}: {}".format(counter, track["id"]))
        if do_durations_match(source_track["duration_ms"], track["duration_ms"]):
            duration_matches[0] += 1
            duration_matches.append(track)
        counter += 1
    if duration_matches[0] == 1:
        best_track = duration_matches.pop()["id"]
        print(
            "\t\t\t[+] Only one exact match with matching duration, going with that one: {}".format(
                best_track
            )
        )
        return best_track
    else:
        if duration_matches[0] == 0:
            print("No track with matching duration, ignoring track !")
        else:
            
            # TODO: Popularity does not always yield the correct result
            best_track = most_popular_track(found_tracks)
            print(
                "\t\t\t[+] Multiple exact matches with matching durations, going with the most popular one: {}".format(
                best_track
                )
                )
            return best_track

lorenzolamasse avatar Oct 31 '24 10:10 lorenzolamasse

Modified a slight bit as well the duration matching as it happens quite often to have around 1 seconds of duration difference between platforms:

def do_durations_match(source_track_duration, found_track_duration):
    if abs(source_track_duration - found_track_duration) < 1000:
        print("\t\t\t\t[+] Durations match")
        return True
    else:
        print("\t\t\t\t[!] Durations do not match")
        return False

lorenzolamasse avatar Oct 31 '24 10:10 lorenzolamasse

I changed the code to just return the first match if there is no exact match. I was running into the issue where usually the first match was correct but it was skipping it because spotify didnt have an extended version or the time was different by more than one second. This has yielded the best results for me.

`def best_of_multiple_matches(source_track, found_tracks):
    counter = 1
    duration_matches = [0, ]
    for track in found_tracks:
        print("\t\t\t[+] Match {}: {}".format(counter, track["id"]))
        if do_durations_match(source_track["duration_ms"], track["duration_ms"]):
            duration_matches[0] += 1
            duration_matches.append(track)
        counter += 1
    if duration_matches[0] == 1:
        best_track = duration_matches.pop()["id"]
        print("\t\t\t[+] Only one exact match with matching duration, going with that one: {}".format(best_track))
        return best_track

    # Modified: Return the first match instead of the most popular
    best_track = found_tracks[0]["id"]
    print("\t\t\t[+] No exact match with duration, going with the first match: {}".format(best_track))
    return best_track`

mclopes avatar Dec 26 '24 02:12 mclopes