in sing/nsynth/__init__.py [0:0]
def __init__(self, path):
self.path = Path(path)
# Cache the json to avoid reparsing it everytime
if self.path in self._json_cache:
self._metadata = self._json_cache[self.path]
else:
if self.path.suffix == ".gz":
file = gzip.open(self.path)
else:
file = open(self.path, "rb")
self._metadata = json.load(file)
self._map_velocity(self._metadata)
self._json_cache[self.path] = self._metadata
self.names = sorted(self._metadata.keys())
# Compute the mapping instrument_name -> instrument id
self.instruments = {}
for meta in self._metadata.values():
self.instruments[meta["instrument_str"]] = meta["instrument"]
# Compute the cardinality for the features velocity, instrument,
# pitch and instrument_family
self.cardinalities = {}
for feature in self._FEATURES:
self.cardinalities[feature] = 1 + max(
i[feature] for i in self._metadata.values())