def filter_song_md(song, md_list=['id'], no_singletons=True):
    """Returns a list of desired metadata from a song.
    Does not modify the given song.

    :param song: Dictionary representing a GM song.
    :param md_list: (optional) the ordered list of metadata to select.
    :param no_singletons: (optional) if md_list is of length 1, return the data, not a singleton list.
    """

    filtered = [song[md_type] for md_type in md_list]

    if len(md_list) == 1 and no_singletons:
        return filtered[0]
    else:
        return filtered