Add files via upload
This commit is contained in:
1 parent
c52482dce6
commit
89e4aea79e
91 files changed
+27328
No files matched your search
@@ -0,0 +1,123 @@
|
||||
import os
|
||||
import json
|
||||
import yaml
|
||||
import subprocess
|
||||
import xml.etree.ElementTree as ET
|
||||
import shutil
|
||||
|
||||
def parse_mmp_file(file_path):
|
||||
try:
|
||||
tree = ET.parse(file_path)
|
||||
root = tree.getroot()
|
||||
|
||||
bpm = root.find('./head').attrib.get('bpm', 'N/A')
|
||||
|
||||
tracks = root.findall('./song/trackcontainer/track')
|
||||
track_info = []
|
||||
|
||||
for track in tracks:
|
||||
track_name = track.attrib.get('name', 'N/A')
|
||||
track_type = track.attrib.get('type')
|
||||
|
||||
if track_name:
|
||||
instruments = []
|
||||
|
||||
if track_type == '0': # Faixa do tipo plugin
|
||||
track_info.append({
|
||||
'track_name': track_name,
|
||||
'type': 'plugin',
|
||||
'instruments': [],
|
||||
})
|
||||
|
||||
elif track_type == '2': # Faixa do tipo Sample Track
|
||||
track_info.append({
|
||||
'track_name': track_name,
|
||||
'type': 'sample',
|
||||
'instruments': [],
|
||||
})
|
||||
|
||||
elif track_type == '1': # Faixa do tipo Beat/Bassline
|
||||
bbtrack = track.find('./bbtrack')
|
||||
if bbtrack is not None:
|
||||
trackcontainers = bbtrack.findall('./trackcontainer')
|
||||
for container in trackcontainers:
|
||||
instrument_tracks = container.findall('./track')
|
||||
for instrument_track in instrument_tracks:
|
||||
instrument_name = instrument_track.attrib.get('name', 'N/A')
|
||||
instruments.append({
|
||||
'instrument_name': instrument_name,
|
||||
})
|
||||
|
||||
track_info.append({
|
||||
'track_name': track_name,
|
||||
'type': 'bassline',
|
||||
'instruments': instruments,
|
||||
})
|
||||
|
||||
return {
|
||||
'file': file_path,
|
||||
'bpm': bpm,
|
||||
'tracks': track_info
|
||||
}
|
||||
|
||||
except ET.ParseError as e:
|
||||
print(f'Erro ao analisar o arquivo XML {file_path}: {e}')
|
||||
return None
|
||||
|
||||
def process_mmps_in_folder(folder_path):
|
||||
mmp_files = [f for f in os.listdir(folder_path) if f.endswith('.mmp') or f.endswith('.mmpz')]
|
||||
all_data = []
|
||||
|
||||
mmpz_folder = os.path.join(folder_path, 'mmpz')
|
||||
if not os.path.exists(mmpz_folder):
|
||||
os.makedirs(mmpz_folder)
|
||||
|
||||
for file in mmp_files:
|
||||
file_path = os.path.join(folder_path, file)
|
||||
print(f'Processando arquivo: {file_path}')
|
||||
|
||||
if file.endswith('.mmpz'):
|
||||
destination_path = os.path.join(mmpz_folder, file)
|
||||
shutil.move(file_path, destination_path)
|
||||
print(f'Arquivo {file} movido para {destination_path}')
|
||||
|
||||
file_name = os.path.basename(destination_path)
|
||||
file_name = os.path.splitext(file_name)[0] + ".mmp"
|
||||
output_file_path = os.path.join(folder_path, file_name)
|
||||
comando = f'lmms --dump "{destination_path}" > "{output_file_path}"'
|
||||
try:
|
||||
os.environ['QT_DEBUG_PLUGINS'] = '1'
|
||||
os.environ['QT_QPA_PLATFORM'] = 'offscreen'
|
||||
subprocess.run(comando, shell=True, check=True)
|
||||
print("Comando executado com sucesso!")
|
||||
except subprocess.CalledProcessError as e:
|
||||
print(f"Ocorreu um erro ao executar o comando: {e}")
|
||||
|
||||
mmp_data = parse_mmp_file(output_file_path)
|
||||
elif file.endswith('.mmp'):
|
||||
mmp_data = parse_mmp_file(file_path)
|
||||
|
||||
if mmp_data:
|
||||
all_data.append(mmp_data)
|
||||
|
||||
json_file_name = os.path.splitext(file)[0] + ".json"
|
||||
json_file_path = os.path.join('metadata', json_file_name)
|
||||
save_to_json(mmp_data, json_file_path)
|
||||
|
||||
yaml_file_name = os.path.splitext(file)[0] + ".yml"
|
||||
yaml_file_path = os.path.join('_data', yaml_file_name)
|
||||
save_to_yaml(mmp_data, yaml_file_path)
|
||||
|
||||
return all_data
|
||||
|
||||
def save_to_json(data, output_file):
|
||||
with open(output_file, 'w', encoding='utf-8') as f:
|
||||
json.dump(data, f, ensure_ascii=False, indent=4)
|
||||
|
||||
def save_to_yaml(data, output_file):
|
||||
with open(output_file, 'w', encoding='utf-8') as f:
|
||||
yaml.dump(data, f)
|
||||
|
||||
mmp_folder_path = 'mmp'
|
||||
processed_data = process_mmps_in_folder(mmp_folder_path)
|
||||
print("Processamento concluído.")
|
||||
@@ -0,0 +1,50 @@
|
||||
import os
|
||||
import yaml
|
||||
import json
|
||||
from collections import defaultdict
|
||||
|
||||
current_dir = os.path.dirname(__file__)
|
||||
data_dir = os.path.abspath(os.path.join(current_dir, '..', '_data'))
|
||||
if not os.path.exists(data_dir):
|
||||
raise FileNotFoundError(f'O diretório {data_dir} não foi encontrado.')
|
||||
|
||||
instruments_count = defaultdict(int)
|
||||
similar_files = defaultdict(list)
|
||||
|
||||
def load_yaml(file_path):
|
||||
with open(file_path, 'r') as f:
|
||||
return yaml.safe_load(f)
|
||||
|
||||
for filename in os.listdir(data_dir):
|
||||
if filename.endswith('.yml') or filename.endswith('.yaml'):
|
||||
file_path = os.path.join(data_dir, filename)
|
||||
data = load_yaml(file_path)
|
||||
|
||||
bpm = data.get('bpm', 'N/A')
|
||||
file_name = data.get('file', 'N/A')
|
||||
tracks = data.get('tracks', [])
|
||||
|
||||
for track in tracks:
|
||||
track_name = track.get('track_name', 'N/A')
|
||||
instruments = track.get('instruments', [])
|
||||
|
||||
for instrument in instruments:
|
||||
instrument_name = instrument.get('instrument_name', 'N/A')
|
||||
instruments_count[instrument_name] += 1
|
||||
if file_name not in similar_files[instrument_name]:
|
||||
similar_files[instrument_name].append(file_name)
|
||||
output_data = []
|
||||
for instrument_name, count in instruments_count.items():
|
||||
output_data.append({
|
||||
'instrument_name': instrument_name,
|
||||
'count': count,
|
||||
'files': similar_files[instrument_name]
|
||||
})
|
||||
|
||||
current_dir = os.path.dirname(__file__)
|
||||
data_dir = os.path.abspath(os.path.join(current_dir, '..', '_data'))
|
||||
output_file = os.path.join(data_dir, 'processed_data.json')
|
||||
|
||||
with open(output_file, 'w') as outfile:
|
||||
json.dump(output_data, outfile, indent=4)
|
||||
print(f"Dados processados e salvos em {output_file}")
|
||||
Reference in new issue
Block a user