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