def from_Composition(composition, width=80):
    """Convert a mingus.containers.Composition to an ASCII tablature string.

    Automatically add an header based on the title, subtitle, author, e-mail
    and description attributes. An extra description of the piece can also
    be given.

    Tunings can be set by using the Track.instrument.tuning or Track.tuning
    attribute.
    """
    # Collect tunings
    instr_tunings = []
    for track in composition:
        tun = track.get_tuning()
        if tun:
            instr_tunings.append(tun)
        else:
            instr_tunings.append(default_tuning)
    result = add_headers(
        width,
        composition.title,
        composition.subtitle,
        composition.author,
        composition.email,
        composition.description,
        instr_tunings,
        )

    # Some variables
    w = _get_width(width)
    barindex = 0
    bars = width / w
    lastlen = 0
    maxlen = max([len(x) for x in composition.tracks])

    while barindex < maxlen:
        notfirst = False
        for tracks in composition:
            tuning = tracks.get_tuning()
            ascii = []
            for x in xrange(bars):
                if barindex + x < len(tracks):
                    bar = tracks[barindex + x]
                    r = from_Bar(bar, w, tuning, collapse=False)
                    barstart = r[1].find('||') + 2

                    # Add extra '||' to quarter note marks to connect tracks.
                    if notfirst:
                        r[0] = (r[0])[:barstart - 2] + '||' + (r[0])[barstart:]

                    # Add bar to ascii
                    if ascii != []:
                        for i in range(1, len(r) + 1):
                            item = r[len(r) - i]
                            ascii[-i] += item[barstart:]
                    else:
                        ascii += r

            # Add extra '||' to connect tracks
            if notfirst and ascii != []:
                pad = ascii[-1].find('||')
                result += [' ' * pad + '||', ' ' * pad + '||']
            else:
                notfirst = True

            # Finally, add ascii to result
            result += ascii
        result += ['', '', '']
        barindex += bars
    return os.linesep.join(result)
Convert a mingus.containers.Composition to an ASCII tablature string.

    Automatically add an header based on the title, subtitle, author, e-mail
    and description attributes. An extra description of the piece can also
    be given.

    Tunings can be set by using the Track.instrument.tuning or Track.tuning
    attribute.