Python process tracklist, get cumulative timestamp of each track
Implicit tuples

(tmm,tss) = (0,0)


This shouldn't need any parens.

Generator


  couldn't easily see how to rewrite it from a for-loop to a generator 


It actually is quite easy. Make your code into a function, delete result, and replace result.append with yield.

Time spans


  are there better idioms for the (mm,ss) modulo-60 counters? 


Yes!

Custom objects


  I think we don't need a custom object


Named tuples take one line to declare, and suck less than unstructured data. So do that, at least.

Underscores

I just noticed that you're looping with an underscore as your loop variable. By convention this means "I'm not going to use this value"... but then you used it anyway. Give this variable a meaningful name.

Example

import re
from collections import namedtuple
from datetime import timedelta

TRACK_PAT = re.compile(r'(?P&lt;no&gt;[0-9]+)\. (?P&lt;name&gt;.*) (?P&lt;mm&gt;[0-9]+):(?P&lt;ss&gt;[0-9]+)$', re.M)
Track = namedtuple('Track', ('number', 'time', 'length', 'name'))


def parse_track(body):
    t_total = timedelta()
    for match in TRACK_PAT.finditer(body):
        length = timedelta(minutes=int(match['mm']), seconds=int(match['ss']))
        yield Track(int(match['no']), t_total, length, match['name'])
        t_total += length


for track in parse_track(
"""
1. Waiting For A Miracle 5:02
2. Bedroom Eyes 5:01
3. In Over My Head 4:31
4. Higher Ground / Written-By – S. Wonder* 3:38
5. Hot Blood 4:15
6. Running Away 4:28
7. I've Had Enough 3:47
8. Blacklisted / Guitar [Other] – Jonny Fean* 4:11
9. Last Thing At Night 2:49"""
):
    print(f'{track.number} | {track.time} | {track.length} | {track.name}')