def test_als120(): fname = f'{TESTS_DIR_ALS}/example-120.als' with open(fname, 'rb') as f: proj = load_project(fname, f, theoretical=True) proj.parse() markers = proj.markers assert proj.version == AbletonSetVersion( major='5', minor='10.0_377', minorA=10, minorB=0, minorC=377, schema_change_count='3', creator='Ableton Live 10.1.7', revision='f7eb4c8e0a49802359f4e078b341fdfb9d547a77') assert [m.time for m in markers] == [ 0.0, 200.0000133333342, 216.00001440000096, 324.00002160000145, 464.0000309333354, 604.0000402666693, 716.0000477333365, 840.0000560000037, 1000.000066666671, 1189.053707412938, 1392.000092800006, 1512.0001008000067, 1656.0001104000073, 1792.0001194666745, 3904.0002602666837 ] assert [m.text for m in markers] == [ 'mirvs - his track你好', 'comfort - other track', 'comfort - yo', 'sh1n - track', 'stm - ggr', 'heart - ID', 'ID - ID', '', '', 'track - this track', 'another track', 'another track', 'another track', 'tids track', 'sd' ] assert [format_time(m.time) for m in markers] == [ '00:00', '03:20', '03:36', '05:24', '07:44', '10:04', '11:56', '14:00', '16:40', '19:49', '23:12', '25:12', '27:36', '29:52', '65:04' ]
def test_hours_pad(): assert format_time(60 * 60, hours_fmt=True, hours_pad=False) == '1:00:00' assert format_time(60 * 60 + 71, hours_fmt=True, hours_pad=False) == '1:01:11' assert format_time(60 * 60 * 9, hours_fmt=True, hours_pad=False) == '9:00:00' assert format_time(60 * 60 * 10, hours_fmt=True, hours_pad=False) == '10:00:00' assert format_time(60 * 60 * 10 + 59 * 60 + 59, hours_fmt=True, hours_pad=False) == '10:59:59' assert format_time(60 * 60 * 10 + 59 * 60 + 59 + 1, hours_fmt=True, hours_pad=False) == '11:00:00' assert format_time(59 * 60, hours_fmt=True, hours_pad=False) == '0:59:00' assert format_time(59, hours_fmt=True, hours_pad=False) == '0:00:59' assert format_time(0, hours_fmt=True, hours_pad=False) == '0:00:00'
def test_als140(): fname = f'{TESTS_DIR_ALS}/example-140.als' with open(fname, 'rb') as f: markers = extract_markers(fname, f, theoretical=True) times = ['00:00', '02:51', '03:05', '04:37', '06:37', '60:20'] assert [format_time(m.time) for m in markers] == times assert [m.time for m in markers] == [ 0.0, 171.42857142857142, 185.14285714285714, 277.7142857142857, 397.71428571428567, 3620.5714285714284 ] assert [m.text for m in markers] == [ 'mirvs - his track你好', 'comfort - other track', 'comfort - yo', 'sh1n - track', 'stm - ggr', 'sd' ]
def main(): fname = args.file try: # markers are raw time data. it's up to the client to determine how to # present it with open(fname, 'rb') as f: # markers = dawtool.extract_markers(fname, f) proj = load_project(fname, f, theoretical=args.theoretical) proj.parse() # print(len(proj.tempo_automation_events)) markers = proj.markers except FileNotFoundError: print(fname, 'not found') return except UnknownExtension as e: print('unknown ext', e) return except ValueError as e: print('Could not extract markers from', fname, ':', e) raise if args.verbose: proj.dump() if args.markers: # There was no error, but no markers if not markers: print('Could not find markers in', fname) return for m in markers: print(format_time(m.time, args.hours, precise=args.imprecise), m.text) if args.emit: print(proj.emit(), end='')
def test_format_time_under_hour(): assert format_time(59 * 60) == '59:00'
def test_precise(): assert format_time(59.1, precise=True) == '00:59.100' assert format_time(59.1) == '00:59' assert format_time(60.1, precise=True) == '01:00.100' assert format_time(60.1) == '01:00'
def test_format_time_hour_hour_fmt_precise(): assert format_time(60 * 60, precise=True) == '60:00.000'
def test_format_time_over_hour(): assert format_time(60 * 60) == '60:00'
def test_format_time_min_precise(): assert format_time(60, precise=True) == '01:00.000'
def test_format_time_min_hour_fmt(): assert format_time(60, True) == '00:01:00'
def test_format_time_min(): assert format_time(60) == '01:00'
def test_format_time_under_min_hour_fmt(): assert format_time(59, True) == '00:00:59'
def test_format_time_under_min(): assert format_time(59) == '00:59'