Add support for #BARLINE
commands
Fixes #3. Necessary to get `mikdp` test to pass.
This commit is contained in:
parent
2e54975534
commit
52827f1abc
@ -11,7 +11,7 @@ default_measure = {
|
||||
'bpm': 0.0,
|
||||
'fumenOffset': 0.0,
|
||||
'gogo': False,
|
||||
'hidden': True,
|
||||
'barline': True,
|
||||
'padding1': 0,
|
||||
'branchInfo': [-1, -1, -1, -1, -1, -1],
|
||||
'padding2': 0,
|
||||
@ -42,6 +42,7 @@ def preprocessTJAMeasures(tja):
|
||||
currentBPM = 0
|
||||
currentScroll = 1.0
|
||||
currentGogo = False
|
||||
currentBarline = True
|
||||
|
||||
measuresCorrected = []
|
||||
for measure in tja['measures']:
|
||||
@ -63,7 +64,7 @@ def preprocessTJAMeasures(tja):
|
||||
combined.append(notes.pop(0))
|
||||
|
||||
# Step 2: Split measure into submeasure
|
||||
measure_cur = {'bpm': currentBPM, 'scroll': currentScroll, 'gogo': currentGogo,
|
||||
measure_cur = {'bpm': currentBPM, 'scroll': currentScroll, 'gogo': currentGogo, 'barline': currentBarline,
|
||||
'subdivisions': len(measure['data']), 'pos_start': 0, 'pos_end': 0,
|
||||
'time_sig': measure['length'], 'data': []}
|
||||
for data in combined:
|
||||
@ -88,7 +89,8 @@ def preprocessTJAMeasures(tja):
|
||||
currentGogo = bool(int(data['value']))
|
||||
measure_cur['gogo'] = currentGogo
|
||||
elif data['type'] == 'barline':
|
||||
pass
|
||||
currentBarline = bool(int(data['value']))
|
||||
measure_cur['barline'] = currentBarline
|
||||
else:
|
||||
print(f"Unexpected event type: {data['type']}")
|
||||
measure_cur['pos_end'] = len(measure['data'])
|
||||
@ -136,13 +138,14 @@ def convertTJAToFumen(tja):
|
||||
measureFumen['fumenOffset'] = measureOffsetPrev + measureDurationPrev
|
||||
measureDurationPrev = measureDuration
|
||||
|
||||
# Best guess at what 'hidden' status means for each measure:
|
||||
# - 'True' means the measure lands on a barline (i.e. most measures)
|
||||
# - 'False' means that the measure is between barlines. For example:
|
||||
# 1. Measures before the first barline
|
||||
# Best guess at what 'barline' status means for each measure:
|
||||
# - 'True' means the measure lands on a barline (i.e. most measures), and thus barline should be shown
|
||||
# - 'False' means that the measure doesn't land on a barline, and thus barline should be hidden.
|
||||
# For example:
|
||||
# 1. Measures where #BARLINEOFF has been set
|
||||
# 2. Sub-measures that don't fall on the barline
|
||||
if idx_m == 0 or (measureRatio != 1.0 and measureTJA['pos_start'] != 0):
|
||||
measureFumen['hidden'] = False
|
||||
if measureTJA['barline'] is False or (measureRatio != 1.0 and measureTJA['pos_start'] != 0):
|
||||
measureFumen['barline'] = False
|
||||
|
||||
# Create note dictionaries based on TJA measure data (containing 0's plus 1/2/3/4/etc. for notes)
|
||||
note_counter = 0
|
||||
|
@ -346,7 +346,7 @@ def readFumen(fumenFile, byteOrder=None, debug=False):
|
||||
# - 'f': BPM (represented by one float (4 bytes))
|
||||
# - 'f': fumenOffset (represented by one float (4 bytes))
|
||||
# - 'B': gogo (represented by one unsigned char (1 byte))
|
||||
# - 'B': hidden (represented by one unsigned char (1 byte))
|
||||
# - 'B': barline (represented by one unsigned char (1 byte))
|
||||
# - 'H': <padding> (represented by one unsigned short (2 bytes))
|
||||
# - 'iiiiii': branchInfo (represented by six integers (24 bytes))
|
||||
# - 'i': <padding> (represented by one integer (4 bytes)
|
||||
@ -363,7 +363,7 @@ def readFumen(fumenFile, byteOrder=None, debug=False):
|
||||
# measure["offset"] = ((prev["offset"] + measure["fumenOffset"] + 240000) /
|
||||
# (measure["bpm"] - prev["fumenOffset"] - 240000 / prev["bpm"]))
|
||||
measure["gogo"] = getBool(measureStruct[2])
|
||||
measure["hidden"] = getBool(measureStruct[3])
|
||||
measure["barline"] = getBool(measureStruct[3])
|
||||
measure["padding1"] = measureStruct[4]
|
||||
measure["branchInfo"] = list(measureStruct[5:11])
|
||||
measure["padding2"] = measureStruct[11]
|
||||
|
@ -35,7 +35,7 @@ def writeFumen(file, song):
|
||||
file.seek(0x208)
|
||||
for measureNumber in range(song['length']):
|
||||
measure = song['measures'][measureNumber]
|
||||
measureStruct = [measure['bpm'], measure['fumenOffset'], int(measure['gogo']), int(measure['hidden'])]
|
||||
measureStruct = [measure['bpm'], measure['fumenOffset'], int(measure['gogo']), int(measure['barline'])]
|
||||
measureStruct.extend([measure['padding1']] + measure['branchInfo'] + [measure['padding2']])
|
||||
writeStruct(file, order, format_string="ffBBHiiiiiii", value_list=measureStruct)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user