From 8578e04837ff8dc5a1ad7ace6f9bb95efa73f853 Mon Sep 17 00:00:00 2001 From: rynan4818 <14249877+rynan4818@users.noreply.github.com> Date: Sun, 21 Apr 2024 13:25:59 +0900 Subject: [PATCH 1/3] BPM Change support for V2.5 and V3.0 --- ScriptMapperClass.py | 53 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/ScriptMapperClass.py b/ScriptMapperClass.py index f0c5c37..b822727 100644 --- a/ScriptMapperClass.py +++ b/ScriptMapperClass.py @@ -76,16 +76,41 @@ def check_bpm(self): self.logger.log(f'bpmを計測 {self.bpm} \n') f = open(self.file_path, 'rb') j = json.load(f) + if '_events' in j: + bpmChanges = j['_events'] # V2.5 + for b in bpmChanges: + if b['_type'] == 100: + if self.bpmchanges == []: + self.logger.log('V2.5のBPM Eventsを検出') + self.logger.log(f'grid : {b['_time']:6.2f} (BPM : {b['_floatValue']})') + self.bpmchanges.append({ + 'grid': b['_time'], + 'bpm': b['_floatValue']}) + if self.bpmchanges != []: + self.logger.log('') + return if '_customData' in j: if '_BPMChanges' not in j['_customData']: return else: + self.logger.log('CustomDataのBPMChangesを検出') bpmChanges = j['_customData']['_BPMChanges'] for b in bpmChanges: + self.logger.log(f'time : {b['_time'] * 60 / bpm:6.2f} (BPM : {b['_BPM']})') self.bpmchanges.append({ 'time': b['_time'] * 60 / bpm, 'bpm': b['_BPM'], 'perbar': b['_beatsPerBar']}) + self.logger.log('') + elif 'bpmEvents' in j: + self.logger.log('V3.0のBPM Eventsを検出') + bpmChanges = j['bpmEvents'] # V3 + for b in bpmChanges: + self.logger.log(f'grid : {b['b']:6.2f} (BPM : {b['m']})') + self.bpmchanges.append({ + 'grid': b['b'], + 'bpm': b['m']}) + self.logger.log('') def make_manual_commands(self): path_dir = self.path_obj.parent @@ -163,8 +188,30 @@ def calc_duration(self): for i in range(size-1): start = command_b[i].grid end = command_b[i+1].grid - dur_grid = end - start - command_b[i].duration = dur_grid*60/self.bpm + current_bpm = self.bpm + bpmchange_grid = 0 + virtual_time = 0 + start_time = 0 + end_time = 0 + start_check = True + v1_format = False + for change in self.bpmchanges: + if 'grid' not in change: + dur_grid = end - start + command_b[i].duration = dur_grid*60/self.bpm + v1_format = True + break + if start_check and change['grid'] >= start: + start_time = virtual_time + (start - bpmchange_grid) * 60 / current_bpm + start_check = False + if change['grid'] >= end: + break + virtual_time += (change['grid'] - bpmchange_grid) * 60 / current_bpm + current_bpm = change['bpm'] + bpmchange_grid = change['grid'] + if not v1_format: + end_time = virtual_time + (end - bpmchange_grid) * 60 / current_bpm + command_b[i].duration = end_time - start_time def show_bookmarks(self) -> None: self.logger.log('\nfill,copyの処理を完了しました。最終的なブックマークは以下になります。') @@ -178,6 +225,8 @@ def show_bookmarks(self) -> None: span_end = 0 current_bpm = self.bpm for change in self.bpmchanges: + if 'time' not in change: # V2.5以降 + break span = change['time'] - span_end span_end = change['time'] if span > virtual_time: From b03df90eec3887cc021de5e543d564f6a11c0c41 Mon Sep 17 00:00:00 2001 From: rynan4818 <14249877+rynan4818@users.noreply.github.com> Date: Sun, 21 Apr 2024 21:15:05 +0900 Subject: [PATCH 2/3] Syntax Error Fix --- ScriptMapperClass.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ScriptMapperClass.py b/ScriptMapperClass.py index b822727..e9ec5ec 100644 --- a/ScriptMapperClass.py +++ b/ScriptMapperClass.py @@ -82,7 +82,7 @@ def check_bpm(self): if b['_type'] == 100: if self.bpmchanges == []: self.logger.log('V2.5のBPM Eventsを検出') - self.logger.log(f'grid : {b['_time']:6.2f} (BPM : {b['_floatValue']})') + self.logger.log(f'grid : {b["_time"]:6.2f} (BPM : {b["_floatValue"]})') self.bpmchanges.append({ 'grid': b['_time'], 'bpm': b['_floatValue']}) @@ -96,7 +96,7 @@ def check_bpm(self): self.logger.log('CustomDataのBPMChangesを検出') bpmChanges = j['_customData']['_BPMChanges'] for b in bpmChanges: - self.logger.log(f'time : {b['_time'] * 60 / bpm:6.2f} (BPM : {b['_BPM']})') + self.logger.log(f'time : {b["_time"] * 60 / bpm:6.2f} (BPM : {b["_BPM"]})') self.bpmchanges.append({ 'time': b['_time'] * 60 / bpm, 'bpm': b['_BPM'], @@ -106,7 +106,7 @@ def check_bpm(self): self.logger.log('V3.0のBPM Eventsを検出') bpmChanges = j['bpmEvents'] # V3 for b in bpmChanges: - self.logger.log(f'grid : {b['b']:6.2f} (BPM : {b['m']})') + self.logger.log(f'grid : {b["b"]:6.2f} (BPM : {b["m"]})') self.bpmchanges.append({ 'grid': b['b'], 'bpm': b['m']}) From dcd9745db5cc35691c6eeb12b174bfbf72c68849 Mon Sep 17 00:00:00 2001 From: rynan4818 <14249877+rynan4818@users.noreply.github.com> Date: Wed, 19 Jun 2024 22:39:11 +0900 Subject: [PATCH 3/3] BPM change bug fixed --- ScriptMapperClass.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ScriptMapperClass.py b/ScriptMapperClass.py index e9ec5ec..030487c 100644 --- a/ScriptMapperClass.py +++ b/ScriptMapperClass.py @@ -209,6 +209,8 @@ def calc_duration(self): virtual_time += (change['grid'] - bpmchange_grid) * 60 / current_bpm current_bpm = change['bpm'] bpmchange_grid = change['grid'] + if start_check: + start_time = virtual_time + (start - bpmchange_grid) * 60 / current_bpm if not v1_format: end_time = virtual_time + (end - bpmchange_grid) * 60 / current_bpm command_b[i].duration = end_time - start_time