def mapSubsToAudio(dataList, fallBackMapping=False):
    """
    Map Subtitles to audio list.

    If you have loaded an MKV with subtitels and audio files,
    this file will map the subtitle file based on its name to the audio streams.
    If fallbackMapping is selected, the remaining files, will be mapped ascending to the last
    audio streams: (a0:; a1:s0; a2:s1; a3:s2; for 3 subtitles and 4 audio files). This is handy,
    if the first stream is the aggregated stream and all others have subtitles but names do not match.

    :param dataList:        must be loaded with mkv.load()
    :type  dataList:        list of dictionaries
    :param fallBackMapping: Use Fallback mapping to map the subs ascending to the last audio files. default=False
    :type  fallBackMapping: bool

    :return: tuple(0) List of dictionaries holding data and mapped subtitles according to mkv.load
             tuple(1) List of remaining subtitles which could not be mapped. Could be empty
    :rtype:  tuple of size 2 (both lists)
    """
    subsList = [dataDict for dataDict in dataList if dataDict["type"] == "subtitle"]
    subsFoundList = [False for i in range(len(subsList))]
    audioList = [dataDict for dataDict in dataList if dataDict["type"] == "audio"]
    for i, audioDict in enumerate(audioList):
        for j, subsDict in enumerate(subsList):
            if audioDict["title"] == subsDict["title"]:
                audioList[i]["subs"] = subsDict["subs"]
                subsFoundList[j] = True
                break
    if fallBackMapping:
        remains = [subsList[i] for i,b in enumerate(subsFoundList) if b == False]
        index = len(remains) - 1
        for i, audio in reversed(list(enumerate(audioList))):
            if "subs" not in audio and index >= 0:
                audioList[i]["subs"] = remains[index]["subs"]
                index -= 1

    return audioList, [subsList[i] for i,b in enumerate(subsFoundList) if b == False]