Fold utils.py
into parsers.py
and writers.py
This commit is contained in:
parent
356bb7b036
commit
e318d0a8a3
@ -1,8 +1,8 @@
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
import struct
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
|
|
||||||
from tja2fumen.utils import read_struct
|
|
||||||
from tja2fumen.types import (TJASong, TJAMeasure, TJAData, FumenCourse,
|
from tja2fumen.types import (TJASong, TJAMeasure, TJAData, FumenCourse,
|
||||||
FumenMeasure, FumenBranch, FumenNote, FumenHeader)
|
FumenMeasure, FumenBranch, FumenNote, FumenHeader)
|
||||||
from tja2fumen.constants import (NORMALIZE_COURSE, TJA_NOTE_TYPES,
|
from tja2fumen.constants import (NORMALIZE_COURSE, TJA_NOTE_TYPES,
|
||||||
@ -393,3 +393,31 @@ def read_fumen(fumen_file, exclude_empty_measures=False):
|
|||||||
or m.branches['master'].length]
|
or m.branches['master'].length]
|
||||||
|
|
||||||
return song
|
return song
|
||||||
|
|
||||||
|
|
||||||
|
def read_struct(file, order, format_string, seek=None):
|
||||||
|
"""
|
||||||
|
Interpret bytes as packed binary data.
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
- file: The fumen's file object (presumably in 'rb' mode).
|
||||||
|
- order: '<' or '>' (little or big endian).
|
||||||
|
- format_string: String made up of format characters that describes
|
||||||
|
the data layout. Full list of available characters:
|
||||||
|
(https://docs.python.org/3/library/struct.html#format-characters)
|
||||||
|
- seek: The position of the read pointer to be used within the file.
|
||||||
|
|
||||||
|
Return values:
|
||||||
|
- interpreted_string: A string containing interpreted byte values,
|
||||||
|
based on the specified 'fmt' format characters.
|
||||||
|
"""
|
||||||
|
if seek:
|
||||||
|
file.seek(seek)
|
||||||
|
expected_size = struct.calcsize(order + format_string)
|
||||||
|
byte_string = file.read(expected_size)
|
||||||
|
# One "official" fumen (AC11\deo\deo_n.bin) runs out of data early
|
||||||
|
# This workaround fixes the issue by appending 0's to get the size to match
|
||||||
|
if len(byte_string) != expected_size:
|
||||||
|
byte_string += (b'\x00' * (expected_size - len(byte_string)))
|
||||||
|
interpreted_string = struct.unpack(order + format_string, byte_string)
|
||||||
|
return interpreted_string
|
||||||
|
@ -1,36 +0,0 @@
|
|||||||
import struct
|
|
||||||
|
|
||||||
|
|
||||||
def read_struct(file, order, format_string, seek=None):
|
|
||||||
"""
|
|
||||||
Interpret bytes as packed binary data.
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
- file: The fumen's file object (presumably in 'rb' mode).
|
|
||||||
- order: '<' or '>' (little or big endian).
|
|
||||||
- format_string: String made up of format characters that describes
|
|
||||||
the data layout. Full list of available characters:
|
|
||||||
(https://docs.python.org/3/library/struct.html#format-characters)
|
|
||||||
- seek: The position of the read pointer to be used within the file.
|
|
||||||
|
|
||||||
Return values:
|
|
||||||
- interpreted_string: A string containing interpreted byte values,
|
|
||||||
based on the specified 'fmt' format characters.
|
|
||||||
"""
|
|
||||||
if seek:
|
|
||||||
file.seek(seek)
|
|
||||||
expected_size = struct.calcsize(order + format_string)
|
|
||||||
byte_string = file.read(expected_size)
|
|
||||||
# One "official" fumen (AC11\deo\deo_n.bin) runs out of data early
|
|
||||||
# This workaround fixes the issue by appending 0's to get the size to match
|
|
||||||
if len(byte_string) != expected_size:
|
|
||||||
byte_string += (b'\x00' * (expected_size - len(byte_string)))
|
|
||||||
interpreted_string = struct.unpack(order + format_string, byte_string)
|
|
||||||
return interpreted_string
|
|
||||||
|
|
||||||
|
|
||||||
def write_struct(file, order, format_string, value_list, seek=None):
|
|
||||||
if seek:
|
|
||||||
file.seek(seek)
|
|
||||||
packed_bytes = struct.pack(order + format_string, *value_list)
|
|
||||||
file.write(packed_bytes)
|
|
@ -1,4 +1,5 @@
|
|||||||
from tja2fumen.utils import write_struct
|
import struct
|
||||||
|
|
||||||
from tja2fumen.constants import BRANCH_NAMES, FUMEN_TYPE_NOTES
|
from tja2fumen.constants import BRANCH_NAMES, FUMEN_TYPE_NOTES
|
||||||
|
|
||||||
|
|
||||||
@ -38,3 +39,10 @@ def write_fumen(path_out, song):
|
|||||||
|
|
||||||
if note.type.lower() == "drumroll":
|
if note.type.lower() == "drumroll":
|
||||||
file.write(note.drumroll_bytes)
|
file.write(note.drumroll_bytes)
|
||||||
|
|
||||||
|
|
||||||
|
def write_struct(file, order, format_string, value_list, seek=None):
|
||||||
|
if seek:
|
||||||
|
file.seek(seek)
|
||||||
|
packed_bytes = struct.pack(order + format_string, *value_list)
|
||||||
|
file.write(packed_bytes)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user