diff --git a/_config_plugins.py b/_config_plugins.py index 0ce80e5c..ac8ba267 100644 --- a/_config_plugins.py +++ b/_config_plugins.py @@ -3,115 +3,13 @@ # SPDX-FileCopyrightText: 2024 SatyrDiamond # SPDX-License-Identifier: GPL-3.0-or-later -from plugin_extsearch import base as base_extsearch -import platform -import os -#import dawdreamer -import time +from plugins import base as dv_plugins from objects import globalstore -class scanstate: - def __init__(self): - pluginnum = 0 - maxplugs = 0 - -class paramdata: - def __init__(self): - self.uniqueid = None - self.plugtype = None - self.audio_num_inputs = None - self.audio_num_outputs = None - self.num_params = None - self.params = {} - - -#def probe_vst2(platformtxt, pluginfo_obj, scanstate_obj, paramdata_obj): -# engine = dawdreamer.RenderEngine(44100, 128) -# vstarch, vstpath = pluginfo_obj.find_locpath([32, 64]) -# -# try: -# if vstpath: -# #print(str(scanstate_obj.pluginnum)+'/'+str(scanstate_obj.maxplugs)+' | Probing '+pluginfo_obj.name+'...') -# synth = engine.make_plugin_processor("testplug", vstpath) -# -# paramdata = synth.get_parameters_description() -# paramdata_obj.audio_num_inputs = synth.get_num_input_channels() -# paramdata_obj.audio_num_outputs = synth.get_num_output_channels() -# paramdata_obj.num_params = len(paramdata) -# -# paramdata_obj.plugtype = 'vst2' -# paramdata_obj.uniqueid = str(pluginfo_obj.id) -# for param in paramdata: -# p_index = 'ext_param_'+str(param['index']) -# p_name = param['name'] -# p_min = param['min'] -# p_max = param['max'] -# p_def = param['defaultValue'] -# paramdata_obj.params[p_index] = [False, 'float', float(p_def), float(p_min), float(p_max), p_name] -# -# engine.remove_processor("testplug") -# except: -# pass - - - -if __name__ == "__main__": - - plugsearch_classes = base_extsearch - - validplugs = [] - - platform_architecture = platform.architecture() - if platform_architecture[1] == 'WindowsPE': platformtxt = 'win' - else: platformtxt = 'lin' - - for plugconvplugin in plugsearch_classes.plugins: - plco_class_data = plugconvplugin() - try: - if plco_class_data.is_dawvert_plugin() == 'externalsearch' and plco_class_data.issupported(platformtxt): - validplugs.append(plco_class_data) - except: pass - - homepath = os.path.expanduser("~") - - for plugsearchclass in validplugs: - plugsearchclass.import_plugins(platformtxt, homepath) - - globalstore.extplug.write() - - #useprobe = 1 -# - #useprobe = 0 - #if useprobe == 0: - # answer = input("Probe Plugins for Info? [y/n]") - # if answer.lower() == "y": useprobe = 1 - - #if useprobe == 1: - # pluginfo_objs = manager_extplug.vst2_getall() - # numplugs = len(pluginfo_objs) -# - # scanstate_obj = scanstate() - # scanstate_obj.maxplugs = numplugs - # scanstate_obj.pluginnum = 0 -# - # while scanstate_obj.pluginnum != scanstate_obj.maxplugs: - # pluginfo_obj = pluginfo_objs[scanstate_obj.pluginnum] - # paramdata_obj = paramdata() -# - # is_exists = manager_extplug.extplug_dataset.params_exists('vst2', str(pluginfo_obj.id)) -# - # if pluginfo_obj.id and not is_exists: - # idstr = str(pluginfo_obj.id) - # probe_vst2(platformtxt, pluginfo_obj, scanstate_obj, paramdata_obj) - # manager_extplug.extplug_dataset.object_add('vst2', idstr) - # manager_extplug.extplug_dataset.params_create(paramdata_obj.plugtype, idstr) - # for n, v in paramdata_obj.params.items(): - # manager_extplug.extplug_dataset.params_i_add(paramdata_obj.plugtype, idstr, n) - # manager_extplug.extplug_dataset.params_i_set(paramdata_obj.plugtype, idstr, n, v) - # pluginfo_obj.audio_num_inputs = paramdata_obj.audio_num_inputs - # pluginfo_obj.audio_num_outputs = paramdata_obj.audio_num_outputs - # pluginfo_obj.num_params = paramdata_obj.num_params - # manager_extplug.vst2_add(pluginfo_obj, platformtxt) - # manager_extplug.write_db() - # scanstate_obj.pluginnum += 1 +dv_plugins.load_plugindir('externalsearch', '') +externalsearch_obj = dv_plugins.create_selector('externalsearch') +for shortname, plug_obj, prop_obj in externalsearch_obj.iter(): + if globalstore.os_platform in prop_obj.supported_os: + plug_obj.import_plugins() +globalstore.extplug.write() \ No newline at end of file diff --git a/dawvert_cmd.py b/dawvert_cmd.py index 9f60e6f9..9a00d61d 100644 --- a/dawvert_cmd.py +++ b/dawvert_cmd.py @@ -65,9 +65,6 @@ if args.extrafile != None: core.config_data.path_extrafile = args.extrafile if args.mi2m__output_unused_nle == True: core.config_data.flags_convproj.append('mi2m-output-unused-nle') if args.ips: pluginset = args.ips -if args.nonfree_plugins == True: core.config_data.extplug_cat.append('nonfree') -if args.shareware_plugins == True: core.config_data.extplug_cat.append('shareware') -if args.old_plugins == True: core.config_data.extplug_cat.append('old') if args.splitter_mode != None: core.config_data.splitter_mode = int(args.splitter_mode) if args.splitter_detect_start != None: core.config_data.splitter_detect_start = bool(int(args.splitter_detect_start)) @@ -111,10 +108,7 @@ file_name = os.path.splitext(os.path.basename(in_file))[0] -dawvert_core.config.path_samples_extracted += file_name + '/' -dawvert_core.config.path_samples_downloaded += file_name + '/' -dawvert_core.config.path_samples_generated += file_name + '/' -dawvert_core.config.path_samples_converted += file_name + '/' +dawvert_core.config.set_projname_path(file_name) os.makedirs(dawvert_core.config.path_samples_extracted, exist_ok=True) os.makedirs(dawvert_core.config.path_samples_downloaded, exist_ok=True) diff --git a/dawvert_ui.py b/dawvert_ui.py index b4f7f535..5317f3f2 100644 --- a/dawvert_ui.py +++ b/dawvert_ui.py @@ -1,100 +1,279 @@ # SPDX-FileCopyrightText: 2024 SatyrDiamond # SPDX-License-Identifier: GPL-3.0-or-later -import os -import sys -from PyQt6 import QtWidgets, uic, QtCore, QtGui -from PyQt6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QFileDialog - +from functions import plug_conv from objects import core as dv_core +from objects import globalstore +from objects.exceptions import ProjectFileParserException + +from plugins import base as dv_plugins + from pathlib import Path -from functions import plug_conv +from PyQt6 import QtWidgets, uic, QtCore, QtGui +from PyQt6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QFileDialog from threading import Thread + +import logging +import os +import sys import traceback +logging.disable(logging.INFO) + from objects.convproj import fileref -from objects.exceptions import ProjectFileParserException filesearcher = fileref.filesearcher scriptfiledir = os.path.dirname(os.path.realpath(__file__)) -plug_conv.load_plugins() - from objects_ui.ui_pyqt import Ui_MainWindow class converterstate(): is_converting = False + is_plugscan = False + +globalstore.extplug.load() + +dawvert_core = dv_core.core() +dawvert_core.config.load('./__config/config.ini') + +dawvert_config__main = {} +dawvert_config__main['songnum'] = dawvert_core.config.songnum +dawvert_config__main['extrafile'] = dawvert_core.config.path_extrafile +dawvert_config__main['drag_drop'] = 0 + +dawvert_config__nopl_splitter = {} +dawvert_config__nopl_splitter['mode'] = dawvert_core.config.splitter_mode +dawvert_config__nopl_splitter['detect_start'] = dawvert_core.config.splitter_detect_start +dawvert_config__mi2m = {} + +class ConversionWorker(QtCore.QObject): + finished = QtCore.pyqtSignal() + update_ui = QtCore.pyqtSignal(list) + + in_file = None + out_file = None + out_samples = None + + def __init__(self, *args, **kwargs): + super(ConversionWorker, self).__init__(*args, **kwargs) + + def run(self): + try: + converterstate.is_converting = True + + inname = dawvert_core.input_get_current_name() + outname = dawvert_core.output_get_current_name() + + in_file = ConversionWorker.in_file + out_file = ConversionWorker.out_file + outsamples = ConversionWorker.out_samples + + plug_conv.load_plugins() + + file_name = os.path.splitext(os.path.basename(in_file))[0] + + dawvert_core.config.flags_convproj = [] + if 'output_unused_nle' in dawvert_config__mi2m: dawvert_core.config.flags_convproj.append('mi2m-output-unused-nle') + dawvert_core.config.splitter_mode = dawvert_config__nopl_splitter['mode'] + dawvert_core.config.splitter_detect_start = dawvert_config__nopl_splitter['detect_start'] + + if 'songnum' in dawvert_config__main: dawvert_core.config.songnum = dawvert_config__main['songnum'] + if 'extrafile' in dawvert_config__main: dawvert_core.config.path_extrafile = dawvert_config__main['extrafile'] + + if outsamples: + outsamples += '/' + + dawvert_core.config.path_samples_extracted = outsamples+'extracted/' + dawvert_core.config.path_samples_downloaded = outsamples+'downloaded/' + dawvert_core.config.path_samples_generated = outsamples+'generated/' + dawvert_core.config.path_samples_converted = outsamples+'converted/' + + else: + dawvert_core.config.set_projname_path(file_name) + + #os.makedirs(dawvert_core.config.path_samples_extracted, exist_ok=True) + #os.makedirs(dawvert_core.config.path_samples_downloaded, exist_ok=True) + #os.makedirs(dawvert_core.config.path_samples_generated, exist_ok=True) + #os.makedirs(dawvert_core.config.path_samples_converted, exist_ok=True) + + filesearcher.reset() + filesearcher.add_basepath('projectfile', os.path.dirname(in_file)) + filesearcher.add_basepath('dawvert', scriptfiledir) + + filesearcher.add_searchpath_partial('projectfile', '.', 'projectfile') + + filesearcher.add_searchpath_full_filereplace('extracted', dawvert_core.config.path_samples_extracted, None) + filesearcher.add_searchpath_full_filereplace('downloaded', dawvert_core.config.path_samples_downloaded, None) + filesearcher.add_searchpath_full_filereplace('generated', dawvert_core.config.path_samples_generated, None) + filesearcher.add_searchpath_full_filereplace('converted', dawvert_core.config.path_samples_converted, None) + filesearcher.add_searchpath_full_filereplace('external_data', os.path.join(scriptfiledir, '__external_data'), None) + + self.update_ui.emit([1, 0]) + self.update_ui.emit([0, 'Processing Input...']) + dawvert_core.parse_input(in_file, dawvert_core.config) + self.update_ui.emit([1, 25]) + self.update_ui.emit([0, 'Converting Project Type and Samples...']) + dawvert_core.convert_type_output(dawvert_core.config) + self.update_ui.emit([1, 50]) + self.update_ui.emit([0, 'Converting Plugins...']) + dawvert_core.convert_plugins(dawvert_core.config) + self.update_ui.emit([1, 75]) + self.update_ui.emit([0, 'Processing Output...']) + dawvert_core.parse_output(out_file) + converterstate.is_converting = False + self.update_ui.emit([1, 100]) + self.update_ui.emit([2, ['OK', '']]) + except ProjectFileParserException: + converterstate.is_converting = False + ex_type, ex_value, ex_traceback = sys.exc_info() + self.update_ui.emit([2, ['Project File Error', str(ex_value)]]) + except SystemExit: + converterstate.is_converting = False + ex_type, ex_value, ex_traceback = sys.exc_info() + self.update_ui.emit([2, ['Exited with no output, See Console.', '']]) + print(traceback.format_exc()) + except: + converterstate.is_converting = False + ex_type, ex_value, ex_traceback = sys.exc_info() + self.update_ui.emit([2, ['Error. See Console.', ex_type.__name__+': '+str(ex_value)]]) + print(traceback.format_exc()) + self.finished.emit() + +class PlugScanWorker(QtCore.QObject): + finished = QtCore.pyqtSignal() + update_ui = QtCore.pyqtSignal(list) + + def __init__(self, *args, **kwargs): + super(PlugScanWorker, self).__init__(*args, **kwargs) + + def run(self): + if not converterstate.is_plugscan: + try: + oldplugcount = globalstore.extplug.count('all') + converterstate.is_plugscan = True + dv_plugins.load_plugindir('externalsearch', '') + + externalsearch_obj = dv_plugins.create_selector('externalsearch') + for shortname, dvplugin in externalsearch_obj.iter_dvp(): + self.update_ui.emit([0, 'Scanning '+dvplugin.name+'...']) + dvplugin.plug_obj.import_plugins() + globalstore.extplug.write() + + newplugcount = globalstore.extplug.count('all') + if newplugcount>oldplugcount: + self.update_ui.emit([0, 'Done, '+str(newplugcount-oldplugcount)+' new plugins found.']) + else: + self.update_ui.emit([0, 'Done.']) -convprocess = {} -def process_converter(qt_obj): - try: - converterstate.is_converting = True - dawvert_core = qt_obj.dawvert_core - - dawvert_core.config.load('./__config/config.ini') - - inname = dawvert_core.input_get_current_name() - outname = dawvert_core.output_get_current_name() - - in_file = qt_obj.ui.InputFilePath.text() - out_file = qt_obj.ui.OutputFilePath.text() - - file_name = os.path.splitext(os.path.basename(in_file))[0] - - dawvert_core.config.path_samples_extracted += file_name + '/' - dawvert_core.config.path_samples_downloaded += file_name + '/' - dawvert_core.config.path_samples_generated += file_name + '/' - dawvert_core.config.path_samples_converted += file_name + '/' - - os.makedirs(dawvert_core.config.path_samples_extracted, exist_ok=True) - os.makedirs(dawvert_core.config.path_samples_downloaded, exist_ok=True) - os.makedirs(dawvert_core.config.path_samples_generated, exist_ok=True) - os.makedirs(dawvert_core.config.path_samples_converted, exist_ok=True) - - filesearcher.reset() - filesearcher.add_basepath('projectfile', os.path.dirname(in_file)) - filesearcher.add_basepath('dawvert', scriptfiledir) - - filesearcher.add_searchpath_partial('projectfile', '.', 'projectfile') - - filesearcher.add_searchpath_full_filereplace('extracted', dawvert_core.config.path_samples_extracted, None) - filesearcher.add_searchpath_full_filereplace('downloaded', dawvert_core.config.path_samples_downloaded, None) - filesearcher.add_searchpath_full_filereplace('generated', dawvert_core.config.path_samples_generated, None) - filesearcher.add_searchpath_full_filereplace('converted', dawvert_core.config.path_samples_converted, None) - filesearcher.add_searchpath_full_filereplace('external_data', os.path.join(scriptfiledir, '__external_data'), None) - - qt_obj.ui.SubStatusText.setText('Processing Input...') - dawvert_core.parse_input(in_file, dawvert_core.config) - qt_obj.ui.progressBar.setValue(25) - qt_obj.ui.SubStatusText.setText('Converting Project Type and Samples...') - dawvert_core.convert_type_output(dawvert_core.config) - qt_obj.ui.progressBar.setValue(50) - qt_obj.ui.SubStatusText.setText('Converting Plugins...') - dawvert_core.convert_plugins(dawvert_core.config) - qt_obj.ui.progressBar.setValue(75) - qt_obj.ui.SubStatusText.setText('Processing Output...') - dawvert_core.parse_output(out_file) - qt_obj.ui.progressBar.setValue(100) - qt_obj.ui.StatusText.setText('Status: OK') - qt_obj.ui.SubStatusText.setText('') - except ProjectFileParserException: - converterstate.is_converting = False - ex_type, ex_value, ex_traceback = sys.exc_info() - qt_obj.ui.StatusText.setText('Status: Project File Error') - qt_obj.ui.SubStatusText.setText(str(ex_value)) - except SystemExit: - converterstate.is_converting = False - ex_type, ex_value, ex_traceback = sys.exc_info() - qt_obj.ui.StatusText.setText('Status: Exited with no output') - qt_obj.ui.SubStatusText.setText('See Console.') - print(traceback.format_exc()) - except: - converterstate.is_converting = False - ex_type, ex_value, ex_traceback = sys.exc_info() - qt_obj.ui.StatusText.setText('Status: Error. See Console.') - qt_obj.ui.SubStatusText.setText(ex_type.__name__+': '+str(ex_value)) - print(traceback.format_exc()) - converterstate.is_converting = False + vst2_count = globalstore.extplug.count('vst2') + vst3_count = globalstore.extplug.count('vst3') + clap_count = globalstore.extplug.count('clap') + self.update_ui.emit([1, [vst2_count, vst3_count, clap_count]]) + except: + self.update_ui.emit([0, 'Error. See Console.']) + print(traceback.format_exc()) + pass + + converterstate.is_plugscan = False + self.finished.emit() + +class configinput(): + qt_ui = None + qt_item = None + d_data = {} + d_key = None + ctrltype = None + + def change_control(ctrltype): + configinput.ctrltype = ctrltype + qt_ui = configinput.qt_ui + if configinput.ctrltype == 'int': + qt_ui.ConfigInt.show() + qt_ui.ConfigFloat.hide() + qt_ui.ConfigString.hide() + qt_ui.ConfigBool.hide() + qt_ui.ConfigInt.setValue(configinput.get_value()) + if configinput.ctrltype == 'float': + qt_ui.ConfigInt.hide() + qt_ui.ConfigFloat.show() + qt_ui.ConfigString.hide() + qt_ui.ConfigBool.hide() + qt_ui.ConfigFloat.setValue(configinput.get_value()) + if configinput.ctrltype == 'str': + qt_ui.ConfigInt.hide() + qt_ui.ConfigFloat.hide() + qt_ui.ConfigString.show() + qt_ui.ConfigBool.hide() + qt_ui.ConfigString.setText(configinput.get_value()) + if configinput.ctrltype == 'bool': + qt_ui.ConfigInt.hide() + qt_ui.ConfigFloat.hide() + qt_ui.ConfigString.hide() + qt_ui.ConfigBool.show() + qt_ui.ConfigBool.setChecked(configinput.get_value()) + + def update_value(value): + value = configinput.d_data[configinput.d_key] = bool(value) if configinput.ctrltype == 'bool' else value + if configinput.qt_item: + configinput.qt_item.setText(1, str(value)) + + def get_value(): + if configinput.d_key in configinput.d_data: return configinput.d_data[configinput.d_key] + else: + if configinput.ctrltype == 'int': return 0 + if configinput.ctrltype == 'float': return 0.0 + if configinput.ctrltype == 'str': return '' + if configinput.ctrltype == 'bool': return False + + def select_item(): + qt_ui = configinput.qt_ui + selected_items = qt_ui.ConfigList.selectedItems() + if len(selected_items)==1: + ptrid = id(selected_items[0]) + if ptrid in configdata.ptrnames: + configinput.qt_item = selected_items[0] + configinput.d_data, configinput.d_key, ctrltype, listpart = configdata.ptrnames[ptrid] + configinput.change_control(ctrltype) + +class configdata(): + ptrnames = {} + + def __init__(self, qt_ui, configparts, configlabel, dictdata): + listtree_temp = QtWidgets.QTreeWidgetItem(qt_ui.ConfigList) + listtree_temp.setText(0, configlabel) + self.configparts = configparts + self.dictdata = dictdata + + for key, data in configparts.items(): + valuetype, fullname = data + + listpart_temp = QtWidgets.QTreeWidgetItem(listtree_temp) + listpart_temp.setText(0, fullname) + if key in dictdata: listpart_temp.setText(1, str(dictdata[key])) + configdata.ptrnames[id(listpart_temp)] = [dictdata, key, valuetype, listpart_temp] + +configparts_main = { + 'songnum': ['int', 'Song Number'], + 'extrafile': ['str', 'Extra File'], + 'drag_drop': ['int', 'Drag and Drop Location'] +} + +configparts_soundfont = { + 'gm': ['str', 'GM'], + 'xg': ['str', 'XG'], + 'gs': ['str', 'GS'], + 'mt32': ['str', 'MT32'], + 'mariopaint': ['str', 'Mario Paint'] +} + +configparts_splitter = { + 'mode': ['int', 'Mode'], + 'detect_start': ['bool', 'Detect Start'] +} + +configparts_mi2m = { + 'output_unused_nle': ['bool', 'OutUnused'] +} class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): def __init__(self, *args, obj=None, **kwargs): @@ -110,8 +289,12 @@ def __init__(self, *args, obj=None, **kwargs): layout = QtWidgets.QVBoxLayout() + configinput.qt_ui = self.ui + self.ui.InputFileButton.clicked.connect(self.__choose_input) self.ui.OutputFileButton.clicked.connect(self.__choose_output) + self.ui.OutputSampleButton.clicked.connect(self.__choose_samples) + self.ui.ListWidget_InPlugSet.currentRowChanged.connect(self.__change_input_plugset) self.ui.ListWidget_InPlugin.currentRowChanged.connect(self.__change_input_plugin_nofb) @@ -120,18 +303,73 @@ def __init__(self, *args, obj=None, **kwargs): self.ui.ConvertButton.setEnabled(False) self.ui.ConvertButton.clicked.connect(self.__do_convert) + self.ui.PluginScanButton.clicked.connect(self.__do_extplugscan) self.ui.AutoDetectButton.clicked.connect(self.__do_auto_detect) - self.dawvert_core = dv_core.core() - - for x in self.dawvert_core.input_get_pluginsets_names(): - self.ui.ListWidget_InPlugSet.addItem(x) + for x in dawvert_core.input_get_pluginsets_names(): self.ui.ListWidget_InPlugSet.addItem(x) + for x in dawvert_core.output_get_pluginsets_names(): self.ui.ListWidget_OutPlugSet.addItem(x) - for x in self.dawvert_core.output_get_pluginsets_names(): - self.ui.ListWidget_OutPlugSet.addItem(x) + self.ui.ExtPlugG_Shareware.clicked.connect(self.__extplugcheck_shareware) + self.ui.ExtPlugG_FOSS.clicked.connect(self.__extplugcheck_foss) + self.ui.ExtPlugG_Old.clicked.connect(self.__extplugcheck_old) + self.ui.ExtPlugG_NonFree.clicked.connect(self.__extplugcheck_nonfree) self.__update_convst() + self.__set_checks() + self.__display_extplugcount() + + configinput.change_control('float') + + self.ui.ConfigInt.valueChanged.connect(configinput.update_value) + self.ui.ConfigFloat.valueChanged.connect(configinput.update_value) + self.ui.ConfigString.textChanged.connect(configinput.update_value) + self.ui.ConfigBool.stateChanged.connect(configinput.update_value) + + configdata(self.ui, configparts_main, 'Main', dawvert_config__main) + configdata(self.ui, configparts_soundfont, 'Soundfonts', dawvert_core.config.paths_soundfonts) + configdata(self.ui, configparts_splitter, 'NoPl Splitter', dawvert_config__nopl_splitter) + configdata(self.ui, configparts_mi2m, 'MI2M', dawvert_config__mi2m) + + self.ui.ConfigList.itemSelectionChanged.connect(configinput.select_item) + + #self.ui.ConfigList.topLevelItem(0).setText(0, 'Input') + #self.ui.ConfigList.topLevelItem(0).setText(0, 'Output') + #self.ui.ConfigList.topLevelItem(0).setText(0, 'SF2') + #self.ui.ConfigList.topLevelItem(0).setText(0, 'Splitter') + testdict = {} + + def __display_extplugcount(self): + vst2_count = globalstore.extplug.count('vst2') + vst3_count = globalstore.extplug.count('vst3') + clap_count = globalstore.extplug.count('clap') + self.ui.ExtCountVST2.setText('VST2: '+str(vst2_count)) + self.ui.ExtCountVST3.setText('VST3: '+str(vst3_count)) + self.ui.ExtCountCLAP.setText('CLAP: '+str(clap_count)) + + def __set_checks(self): + extplug_cat = dawvert_core.config.extplug_cat + self.ui.ExtPlugG_Shareware.setChecked('shareware' in extplug_cat) + self.ui.ExtPlugG_FOSS.setChecked('foss' in extplug_cat) + self.ui.ExtPlugG_Old.setChecked('old' in extplug_cat) + self.ui.ExtPlugG_NonFree.setChecked('nonfree' in extplug_cat) + + def __plugcatmod(self, name, isset): + extplug_cat = dawvert_core.config.extplug_cat + if name not in extplug_cat and isset: extplug_cat.append(name) + if name in extplug_cat and not isset: extplug_cat.remove(name) + + def __extplugcheck_shareware(self, event): + self.__plugcatmod('shareware', event) + + def __extplugcheck_foss(self, event): + self.__plugcatmod('foss', event) + + def __extplugcheck_old(self, event): + self.__plugcatmod('old', event) + + def __extplugcheck_nonfree(self, event): + self.__plugcatmod('nonfree', event) def dragEnterEvent(self, event): if event.mimeData().hasUrls(): @@ -143,8 +381,15 @@ def dropEvent(self, event): files = [u.toLocalFile() for u in event.mimeData().urls()] for f in files: self.ui.InputFilePath.setText(f) - self.ui.OutputFilePath.setText(f.rsplit('.',1)[0]) + if dawvert_config__main['drag_drop'] == 0: + self.ui.OutputFilePath.setText(f.rsplit('.',1)[0]) + self.ui.OutputSamplePath.setText(f.rsplit('.',1)[0]+'_samples') + if dawvert_config__main['drag_drop'] == 1: + outfile = os.path.join(globalstore.dawvert_script_path, 'output', os.path.basename(f)) + self.ui.OutputFilePath.setText(outfile.rsplit('.',1)[0]) + self.ui.OutputSamplePath.setText(outfile.rsplit('.',1)[0]+'_samples') self.__do_auto_detect() + self.__change_output_path() def __choose_input(self): filename, _filter = QFileDialog.getOpenFileName( @@ -158,23 +403,32 @@ def __choose_input(self): def __choose_output(self): filename, _filter = QFileDialog.getSaveFileName( self, - "Open File", + "Save File", "", "", ) self.ui.OutputFilePath.setText(filename) + def __choose_samples(self): + filename, _filter = QFileDialog.getSaveFileName( + self, + "Save File", + "", + "", + ) + self.ui.OutputSamplePath.setText(filename) + def __do_auto_detect(self): filename = self.ui.InputFilePath.text() if os.path.exists(filename): try: - detect_plugin_found = self.dawvert_core.input_autoset(filename) - plugnames = self.dawvert_core.input_get_plugins() + detect_plugin_found = dawvert_core.input_autoset(filename) + plugnames = dawvert_core.input_get_plugins() if detect_plugin_found: self.ui.ListWidget_InPlugin.setCurrentRow(plugnames.index(detect_plugin_found)) return True else: - outshort = self.dawvert_core.input_autoset_fileext(filename) + outshort = dawvert_core.input_autoset_fileext(filename) if outshort: self.ui.ListWidget_InPlugin.setCurrentRow(plugnames.index(outshort)) return outshort != None @@ -184,12 +438,12 @@ def __do_auto_detect(self): def __update_convst(self): in_file = self.ui.InputFilePath.text().replace('/', '\\') out_file = self.ui.OutputFilePath.text().replace('/', '\\') - inplug = self.dawvert_core.input_get_current() - outplug = self.dawvert_core.output_get_current() + inplug = dawvert_core.input_get_current() + outplug = dawvert_core.output_get_current() not_same = in_file!=out_file out_exists = not os.path.exists(out_file) - in_usable, in_usable_msg = self.dawvert_core.input_get_usable() - out_usable, out_usable_msg = self.dawvert_core.output_get_usable() + in_usable, in_usable_msg = dawvert_core.input_get_usable() + out_usable, out_usable_msg = dawvert_core.output_get_usable() outstate = bool(inplug and outplug and not_same and out_exists and in_usable) self.ui.ConvertButton.setEnabled(outstate and not converterstate.is_converting) @@ -216,47 +470,47 @@ def __update_convst(self): def __change_input_plugset(self, num): - plugsetname = self.dawvert_core.input_get_pluginsets_index(num) - self.dawvert_core.input_load_plugins(plugsetname) + plugsetname = dawvert_core.input_get_pluginsets_index(num) + dawvert_core.input_load_plugins(plugsetname) self.__update_input_plugins() self.__change_input_plugin(0) def __change_input_plugin(self, num): - pluginname = self.dawvert_core.input_get_plugins_index(num) - if pluginname: self.dawvert_core.input_set(pluginname) + pluginname = dawvert_core.input_get_plugins_index(num) + if pluginname: dawvert_core.input_set(pluginname) else: - plugnames = self.dawvert_core.input_get_plugins() - if plugnames: self.dawvert_core.input_set(plugnames[0]) + plugnames = dawvert_core.input_get_plugins() + if plugnames: dawvert_core.input_set(plugnames[0]) self.__update_convst() def __change_input_plugin_nofb(self, num): - pluginname = self.dawvert_core.input_get_plugins_index(num) - if pluginname: self.dawvert_core.input_set(pluginname) + pluginname = dawvert_core.input_get_plugins_index(num) + if pluginname: dawvert_core.input_set(pluginname) self.__update_convst() def __update_input_plugins(self): self.ui.ListWidget_InPlugin.clear() - for x in self.dawvert_core.input_get_plugins_names(): + for x in dawvert_core.input_get_plugins_names(): self.ui.ListWidget_InPlugin.addItem(x) def __change_output_plugset(self, num): - plugsetname = self.dawvert_core.output_get_pluginsets_index(num) - self.dawvert_core.output_load_plugins(plugsetname) + plugsetname = dawvert_core.output_get_pluginsets_index(num) + dawvert_core.output_load_plugins(plugsetname) self.__update_output_plugins() self.__change_output_path() def __change_output_plugin(self, num): - pluginname = self.dawvert_core.output_get_plugins_index(num) - if pluginname: self.dawvert_core.output_set(pluginname) + pluginname = dawvert_core.output_get_plugins_index(num) + if pluginname: dawvert_core.output_set(pluginname) self.__update_convst() self.__change_output_path() def __change_output_path(self): - outfound = self.dawvert_core.output_get_current() + outfound = dawvert_core.output_get_current() filename = self.ui.OutputFilePath.text() if outfound and filename: try: - fileext = self.dawvert_core.output_get_extension() + fileext = dawvert_core.output_get_extension() filename = Path(filename) filename = filename.with_suffix('.'+fileext) self.ui.OutputFilePath.setText(str(filename)) @@ -266,13 +520,58 @@ def __change_output_path(self): def __update_output_plugins(self): self.ui.ListWidget_OutPlugin.clear() - for x in self.dawvert_core.output_get_plugins_names(): + for x in dawvert_core.output_get_plugins_names(): self.ui.ListWidget_OutPlugin.addItem(x) + def __update_ui_ele(self, n): + update_type, update_data = n + if update_type == 0: + self.ui.SubStatusText.setText(update_data) + if update_type == 1: + self.ui.progressBar.setValue(update_data) + if update_type == 2: + self.ui.StatusText.setText('Status: '+update_data[0]) + self.ui.SubStatusText.setText(update_data[1]) + + def __update_ui_ele_ext(self, n): + update_type, update_data = n + if update_type == 0: + self.ui.PluginScanStatus.setText(update_data) + if update_type == 1: + self.ui.ExtCountVST2.setText('VST2: '+str(update_data[0])) + self.ui.ExtCountVST3.setText('VST3: '+str(update_data[1])) + self.ui.ExtCountCLAP.setText('CLAP: '+str(update_data[2])) + def __do_convert(self): - thread1 = Thread(target = process_converter, args = (self,)) - thread1.start() - self.__update_convst() + if not converterstate.is_converting: + converterstate.is_converting = True + self.__update_convst() + + ConversionWorker.in_file = self.ui.InputFilePath.text() + ConversionWorker.out_file = self.ui.OutputFilePath.text() + ConversionWorker.out_samples = self.ui.OutputSamplePath.text() + + self.thread = QtCore.QThread(parent=self) + self.worker = ConversionWorker() + self.worker.moveToThread(self.thread) + self.thread.started.connect(self.worker.run) + self.worker.finished.connect(self.thread.quit) + self.worker.finished.connect(self.worker.deleteLater) + self.thread.finished.connect(self.thread.deleteLater) + self.worker.update_ui.connect(self.__update_ui_ele) + self.thread.start() + + def __do_extplugscan(self): + if not converterstate.is_plugscan: + self.thread = QtCore.QThread(parent=self) + self.worker = PlugScanWorker() + self.worker.moveToThread(self.thread) + self.thread.started.connect(self.worker.run) + self.worker.finished.connect(self.thread.quit) + self.worker.finished.connect(self.worker.deleteLater) + self.thread.finished.connect(self.thread.deleteLater) + self.worker.update_ui.connect(self.__update_ui_ele_ext) + self.thread.start() app = QtWidgets.QApplication(sys.argv) diff --git a/functions_plugin/flp_enc_plugins.py b/functions_plugin/flp_enc_plugins.py index 7029a06e..7bdcc241 100644 --- a/functions_plugin/flp_enc_plugins.py +++ b/functions_plugin/flp_enc_plugins.py @@ -226,7 +226,7 @@ def setparams(convproj_obj, plugin_obj): if vst_datatype == 'param': prognums = list(plugin_obj.programs) - prognum = prognums.index(plugin_obj.current_program) + prognum = prognums.index(plugin_obj.current_program) if plugin_obj.current_program in prognums else 0 wrapper_state.raw(b'\xf7\xff\xff\xff\x05\xfe\xff\xff\xff') wrapper_state.raw(b'\x00\x00\x00\x00') diff --git a/functions_plugin/soundation_values.py b/functions_plugin/soundation_values.py deleted file mode 100644 index ae016961..00000000 --- a/functions_plugin/soundation_values.py +++ /dev/null @@ -1,8 +0,0 @@ -# SPDX-FileCopyrightText: 2024 SatyrDiamond -# SPDX-License-Identifier: GPL-3.0-or-later - -def europa_vals(): - return ["Curve1","Curve2","Curve3","Curve4","Curve","Amp Attack","Amp Decay","Amp Sustain","Amp Release","Reverb Damp","Reverb Size","Reverb Decay","Reverb Amount","Effect On","LFO 1 Rate","Mod1 Dest1 Amt","Mod1 Dest2 Amt","Mod1 Dest1","Mod1 Dest2","Mod1 Scale Amt","Mod1 Scale","Mod1 Source","Routing X","Routing Y","Routing Selected","Mod2 Dest1 Amt","Mod2 Dest2 Amt","Mod2 Dest1","Mod2 Dest2","Mod2 Scale Amt","Mod2 Scale","Mod2 Source","Mod3 Dest1 Amt","Mod3 Dest2 Amt","Mod3 Dest1","Mod3 Dest2","Mod3 Scale Amt","Mod3 Scale","Mod3 Source","Mod4 Dest1 Amt","Mod4 Dest2 Amt","Mod4 Dest1","Mod4 Dest2","Mod4 Scale Amt","Mod4 Scale","Mod4 Source","Mod5 Dest1 Amt","Mod5 Dest2 Amt","Mod5 Dest1","Mod5 Dest2","Mod5 Scale Amt","Mod5 Scale","Mod5 Source","Mod6 Dest1 Amt","Mod6 Dest2 Amt","Mod6 Dest1","Mod6 Dest2","Mod6 Scale Amt","Mod6 Scale","Mod6 Source","Mod7 Dest1 Amt","Mod7 Dest2 Amt","Mod7 Dest1","Mod7 Dest2","Mod7 Scale Amt","Mod7 Scale","Mod7 Source","Mod8 Dest1 Amt","Mod8 Dest2 Amt","Mod8 Dest1","Mod8 Dest2","Mod8 Scale Amt","Mod8 Scale","Mod8 Source","LFO 1 Delay","pitch_wheel","mod_wheel","PitchBend CV Amount","ModWheel CV Amount","Osc1 Semi","Osc1 Oct","Osc1 Tune","Osc1 Pitch Kbd","Portamento","Key Mode","Portamento Mode","Pitchbend Range","Env Select","Env 1 Rate","Env 2 Rate","Env 3 Rate","Env 4 Rate","Env 1 Syncrate","Env 2 Syncrate","Env 3 Syncrate","Env 4 Syncrate","Mouse Down","Env Preset","Env Edit Mode","Effect Select","Effect Order","Reverb On","Delay On","Dist On","Comp On","Phaser On","Eq On","LFO 1 SyncRate","LFO 1 KeySync","LFO 1 Global","LFO 1 TempoSync","LFO 1 Wave","LFO 2 Rate","LFO 2 Delay","LFO 2 SyncRate","LFO 2 KeySync","LFO 2 Global","LFO 2 TempoSync","LFO 2 Wave","LFO 3 Rate","LFO 3 Delay","LFO 3 SyncRate","LFO 3 KeySync","LFO 3 Global","LFO 3 TempoSync","LFO 3 Wave","LFO Select","Amp Gain","Amp Velocity","Pan","Filter Freq","Filter Reso","Filter Type","Filter Kbd","Filter Mod","Filter Vel","Osc1 Level","Dist Drive","Dist Type","Dist Tone","Mod Effect Amount","Mod Effect Rate","Mod Effect Depth","Mod Effect Spread","Delay Amount","Delay FB","Delay Sync","Delay PingPong","Delay Time","Delay Synced Time","EQ Gain","EQ Q","EQ Freq","Comp Release","Comp Attack","Comp Threshold","Comp Ratio","Mod Effect Type","Delay Pan","Dist Amount","Voices","Osc1 Shape","Osc1 Wave","Master Volume","Osc1 Mod1","Osc1 Mod1 Amt","Osc1 Filter","Osc1 Filter Freq","Osc1 Filter Reso","Osc1 Pan","Osc1 Filter Kbd","Osc1 Count","Osc1 Detune","Osc1 Blend","Osc1 Spread","Osc1 Unison Mode","Osc1 Harm","Osc1 Harm Pos","Osc1 Mod2","Osc1 Mod2 Amt","Filter Drive","Osc1 Unison On","Osc1 Filter On","Osc1 Harm On","Osc1 Mod1 On","Osc1 Mod2 On","Osc1 To Filter","Osc1 Harm Amt","Osc1 SyncPhase","Osc1 Shape Source","Osc1 Shape Amt","Osc1 Shape Vel","Osc1 Filter Source","Osc1 Filter Mod","Osc1 Filter Vel","Osc1 Mod1 Source","Osc1 Mod1 Mod","Osc1 Mod2 Source","Osc1 Mod2 Mod","Filter Mod Source","Osc1 On","OscSel","Osc2 Semi","Osc2 Oct","Osc2 Tune","Osc2 Pitch Kbd","Osc2 Shape","Osc2 Wave","Osc2 Mod1","Osc2 Mod1 Amt","Osc2 Filter","Osc2 Filter Freq","Osc2 Filter Reso","Osc2 Pan","Osc2 Filter Kbd","Osc2 Count","Osc2 Detune","Osc2 Blend","Osc2 Spread","Osc2 Unison Mode","Osc2 Harm","Osc2 Harm Pos","Osc2 Mod2","Osc2 Mod2 Amt","Osc2 Unison On","Osc2 Filter On","Osc2 Harm On","Osc2 Mod1 On","Osc2 Mod2 On","Osc2 To Filter","Osc2 Harm Amt","Osc2 SyncPhase","Osc2 Shape Source","Osc2 Shape Amt","Osc2 Shape Vel","Osc2 Filter Source","Osc2 Filter Mod","Osc2 Filter Vel","Osc2 Mod1 Source","Osc2 Mod1 Mod","Osc2 Mod2 Source","Osc2 Mod2 Mod","Osc2 On","Osc3 Semi","Osc3 Oct","Osc3 Tune","Osc3 Pitch Kbd","Osc3 Level","Osc3 Shape","Osc3 Wave","Osc3 Mod1","Osc3 Mod1 Amt","Osc3 Filter","Osc3 Filter Freq","Osc3 Filter Reso","Osc3 Pan","Osc3 Filter Kbd","Osc3 Count","Osc3 Detune","Osc3 Blend","Osc3 Spread","Osc3 Unison Mode","Osc3 Harm","Osc3 Harm Pos","Osc3 Mod2","Osc3 Mod2 Amt","Osc3 Unison On","Osc3 Filter On","Osc3 Harm On","Osc3 Mod1 On","Osc3 Mod2 On","Osc3 To Filter","Osc3 Harm Amt","Osc3 SyncPhase","Osc3 Shape Source","Osc3 Shape Amt","Osc3 Shape Vel","Osc3 Filter Source","Osc3 Filter Mod","Osc3 Filter Vel","Osc3 Mod1 Source","Osc3 Mod1 Mod","Osc3 Mod2 Source","Osc3 Mod2 Mod","Osc3 On","Osc2 Level","Osc WCurve","Osc FCurve","Osc Unison","Env Pos","Click Timer","Filter Dist","Always Render","NoteOn","builtin_onoffbypass"] - -def spc_vals(): - return ["pitch_2","gain_8","gain_4","pan_0","pan_14","gain_7","pan_12","pan_15","pan_10","pitch_1","pan_9","punch","pan_4","pan_13","gain_3","bite","pan_8","pan_11","msl","gain_15","pan_5","pitch_0","pitch_6","pan_7","pitch_14","gain_2","pitch_13","pitch_10","pitch_12","pan_3","pitch_5","pitch_8","pitch_11","pitch_9","pitch_15","pitch_4","gain_1","pan_2","pitch_3","pan_6","gain_0","gain_13","pitch_7","gain_14","gain_11","gain_10","gain_12","pan_1","gain_5","gain_9","gain_6"] diff --git a/objects/convproj/fileref.py b/objects/convproj/fileref.py index 9eaf2ccd..7828e3e8 100644 --- a/objects/convproj/fileref.py +++ b/objects/convproj/fileref.py @@ -467,5 +467,5 @@ def convert(self, dawaudiofiles, outpath): output_file = self.fileref.get_path(None, False) logger_project.info('fileref: converted "'+output_file+'" to '+filesupported[0]) break - else: - logger_project.error('fileref: audiofile plugin "'+shortname+'" is not usable: '+usable_meg) + else: + logger_project.error('fileref: audiofile plugin "'+shortname+'" is not usable: '+usable_meg) diff --git a/objects/core.py b/objects/core.py index 22a5fb01..33445766 100644 --- a/objects/core.py +++ b/objects/core.py @@ -96,6 +96,19 @@ class config_data: splitter_detect_start = False searchpaths = [] + def set_defualt_path(self): + config_data.path_samples_extracted = os.getcwd() + '/__samples_extracted/' + config_data.path_samples_downloaded = os.getcwd() + '/__samples_downloaded/' + config_data.path_samples_generated = os.getcwd() + '/__samples_generated/' + config_data.path_samples_converted = os.getcwd() + '/__samples_converted/' + + def set_projname_path(self, file_name): + self.set_defualt_path() + config_data.path_samples_extracted += file_name + '/' + config_data.path_samples_downloaded += file_name + '/' + config_data.path_samples_generated += file_name + '/' + config_data.path_samples_converted += file_name + '/' + def load(self, filepath): global paths_soundfonts config = configparser.ConfigParser() diff --git a/objects/datastorage/extplug_db.py b/objects/datastorage/extplug_db.py index 5759b109..61f80419 100644 --- a/objects/datastorage/extplug_db.py +++ b/objects/datastorage/extplug_db.py @@ -260,6 +260,12 @@ def getall(): o.append(pluginfo_obj) return o + def count(): + if extplug_db.db_plugins: + return extplug_db.db_plugins.execute("SELECT count(*) FROM vst2").fetchone()[0] + else: + return 0 + class vst3: exe_txt_start = "SELECT name, id, type, creator, category, version, sdk_version, url, email, audio_num_inputs, audio_num_outputs, midi_num_inputs, midi_num_outputs, num_params, path_32bit_win, path_64bit_win, path_32bit_unix, path_64bit_unix FROM vst3" @@ -331,6 +337,12 @@ def get(bycat, in_val, in_platformtxt, cpu_arch_list): if founddata: pluginfo_obj.from_sql_vst3(founddata, in_platformtxt) return pluginfo_obj + def count(): + if extplug_db.db_plugins: + return extplug_db.db_plugins.execute("SELECT count(*) FROM vst3").fetchone()[0] + else: + return 0 + class clap: def add(pluginfo_obj, platformtxt): if pluginfo_obj.id and extplug_db.db_plugins: @@ -348,6 +360,12 @@ def add(pluginfo_obj, platformtxt): if platformtxt == 'win': extplug_db.db_plugins.execute("UPDATE clap SET path_win = ? WHERE id = ?", (pluginfo_obj.path, pluginfo_obj.id,)) if platformtxt == 'lin': extplug_db.db_plugins.execute("UPDATE clap SET path_unix = ? WHERE id = ?", (pluginfo_obj.path, pluginfo_obj.id,)) + def count(): + if extplug_db.db_plugins: + return extplug_db.db_plugins.execute("SELECT count(*) FROM clap").fetchone()[0] + else: + return 0 + class ladspa: def add(pluginfo_obj, platformtxt): if pluginfo_obj.id and extplug_db.db_plugins: @@ -362,3 +380,9 @@ def add(pluginfo_obj, platformtxt): if pluginfo_obj.midi_num_outputs: extplug_db.db_plugins.execute("UPDATE ladspa SET midi_num_outputs = ? WHERE id = ?", (pluginfo_obj.midi_num_outputs, pluginfo_obj.id,)) if pluginfo_obj.num_params: extplug_db.db_plugins.execute("UPDATE ladspa SET num_params = ? WHERE id = ?", (pluginfo_obj.num_params, pluginfo_obj.id,)) if pluginfo_obj.num_params_out: extplug_db.db_plugins.execute("UPDATE ladspa SET num_params_out = ? WHERE id = ?", (pluginfo_obj.num_params_out, pluginfo_obj.id,)) + + def count(): + if extplug_db.db_plugins: + return extplug_db.db_plugins.execute("SELECT count(*) FROM ladspa").fetchone()[0] + else: + return 0 diff --git a/objects/file_proj/proj_lmms.py b/objects/file_proj/proj_lmms.py index ad5a7275..3a5b067c 100644 --- a/objects/file_proj/proj_lmms.py +++ b/objects/file_proj/proj_lmms.py @@ -799,7 +799,7 @@ def read(self, xmldata): self.bbtrack.read(xmlpart) if xmlpart.tag == 'sampletrack': self.sampletrack.read(xmlpart) - if xmlpart.tag == 'pattern': + if xmlpart.tag in ['pattern', 'midiclip']: pattern_obj = lmms_pattern() pattern_obj.read(xmlpart) self.patterns.append(pattern_obj) @@ -912,7 +912,7 @@ def __init__(self): def read(self, xmldata): self.window.read(xmldata) for xmlpart in xmldata: - if xmlpart.tag == 'fxchannel': + if xmlpart.tag in ['fxchannel', 'mixerchannel']: fxchannel_obj = lmms_fxchannel() fxchannel_obj.read(xmlpart) self.fxchannels[int(xmlpart.get('num'))] = fxchannel_obj diff --git a/objects/globalstore.py b/objects/globalstore.py index a45cc6d4..4418e952 100644 --- a/objects/globalstore.py +++ b/objects/globalstore.py @@ -14,6 +14,13 @@ logger_globalstore = logging.getLogger('globalstore') +home_folder = os.path.expanduser("~") +dawvert_script_path = os.getcwd() + +platform_architecture = platform.architecture() +if platform_architecture[1] == 'WindowsPE': os_platform = 'win' +else: os_platform = 'lin' + class extplug: def load(): try: @@ -48,6 +55,12 @@ def add(plugtype, platformtxt): if plugtype == 'clap': ep_class.clap.add(pluginfo_obj, platformtxt) if plugtype == 'ladspa': ep_class.ladspa.add(pluginfo_obj, platformtxt) + def count(plugtype): + if plugtype == 'vst2': return ep_class.vst2.count() + if plugtype == 'vst3': return ep_class.vst3.count() + if plugtype == 'clap': return ep_class.clap.count() + if plugtype == 'ladspa': return ep_class.ladspa.count() + if plugtype == 'all': return ep_class.vst2.count()+ep_class.vst3.count()+ep_class.clap.count() class extlib: loaded_parts = {} diff --git a/objects_ui/ui_pyqt.py b/objects_ui/ui_pyqt.py index 186ce858..f4570423 100644 --- a/objects_ui/ui_pyqt.py +++ b/objects_ui/ui_pyqt.py @@ -1,162 +1,319 @@ -# Form implementation generated from reading ui file 'ui_pyqt.ui' -# -# Created by: PyQt6 UI code generator 6.4.2 -# -# WARNING: Any manual changes made to this file will be lost when pyuic6 is -# run again. Do not edit this file unless you know what you are doing. - - -from PyQt6 import QtCore, QtGui, QtWidgets - - -class Ui_MainWindow(object): - def setupUi(self, MainWindow): - MainWindow.setObjectName("MainWindow") - MainWindow.resize(537, 729) - self.horizontalLayout_2 = QtWidgets.QHBoxLayout(MainWindow) - self.horizontalLayout_2.setObjectName("horizontalLayout_2") - self.horizontalLayout = QtWidgets.QHBoxLayout() - self.horizontalLayout.setObjectName("horizontalLayout") - self.verticalLayout_2 = QtWidgets.QVBoxLayout() - self.verticalLayout_2.setObjectName("verticalLayout_2") - self.verticalLayout_8 = QtWidgets.QVBoxLayout() - self.verticalLayout_8.setContentsMargins(0, 0, 0, 0) - self.verticalLayout_8.setObjectName("verticalLayout_8") - self.label_10 = QtWidgets.QLabel(parent=MainWindow) - self.label_10.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) - self.label_10.setObjectName("label_10") - self.verticalLayout_8.addWidget(self.label_10) - self.horizontalLayout_7 = QtWidgets.QHBoxLayout() - self.horizontalLayout_7.setObjectName("horizontalLayout_7") - self.label = QtWidgets.QLabel(parent=MainWindow) - self.label.setObjectName("label") - self.horizontalLayout_7.addWidget(self.label) - self.InputFilePath = QtWidgets.QLineEdit(parent=MainWindow) - self.InputFilePath.setObjectName("InputFilePath") - self.horizontalLayout_7.addWidget(self.InputFilePath) - self.InputFileButton = QtWidgets.QToolButton(parent=MainWindow) - self.InputFileButton.setObjectName("InputFileButton") - self.horizontalLayout_7.addWidget(self.InputFileButton) - self.verticalLayout_8.addLayout(self.horizontalLayout_7) - self.AutoDetectButton = QtWidgets.QPushButton(parent=MainWindow) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.AutoDetectButton.sizePolicy().hasHeightForWidth()) - self.AutoDetectButton.setSizePolicy(sizePolicy) - self.AutoDetectButton.setObjectName("AutoDetectButton") - self.verticalLayout_8.addWidget(self.AutoDetectButton) - self.gridLayout = QtWidgets.QGridLayout() - self.gridLayout.setObjectName("gridLayout") - self.ListWidget_InPlugin = QtWidgets.QListWidget(parent=MainWindow) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Expanding) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.ListWidget_InPlugin.sizePolicy().hasHeightForWidth()) - self.ListWidget_InPlugin.setSizePolicy(sizePolicy) - self.ListWidget_InPlugin.setStyleSheet("font: 15pt \"Ubuntu\";") - self.ListWidget_InPlugin.setObjectName("ListWidget_InPlugin") - self.gridLayout.addWidget(self.ListWidget_InPlugin, 2, 1, 1, 1) - self.ListWidget_InPlugSet = QtWidgets.QListWidget(parent=MainWindow) - self.ListWidget_InPlugSet.setMaximumSize(QtCore.QSize(100, 10000)) - self.ListWidget_InPlugSet.setObjectName("ListWidget_InPlugSet") - self.gridLayout.addWidget(self.ListWidget_InPlugSet, 2, 0, 1, 1) - self.label_4 = QtWidgets.QLabel(parent=MainWindow) - self.label_4.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) - self.label_4.setObjectName("label_4") - self.gridLayout.addWidget(self.label_4, 1, 1, 1, 1) - self.label_7 = QtWidgets.QLabel(parent=MainWindow) - self.label_7.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) - self.label_7.setObjectName("label_7") - self.gridLayout.addWidget(self.label_7, 1, 0, 1, 1) - self.verticalLayout_8.addLayout(self.gridLayout) - self.verticalLayout_2.addLayout(self.verticalLayout_8) - self.verticalLayout_9 = QtWidgets.QVBoxLayout() - self.verticalLayout_9.setContentsMargins(0, 0, 0, 0) - self.verticalLayout_9.setObjectName("verticalLayout_9") - self.label_6 = QtWidgets.QLabel(parent=MainWindow) - self.label_6.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) - self.label_6.setObjectName("label_6") - self.verticalLayout_9.addWidget(self.label_6) - self.horizontalLayout_10 = QtWidgets.QHBoxLayout() - self.horizontalLayout_10.setObjectName("horizontalLayout_10") - self.label_5 = QtWidgets.QLabel(parent=MainWindow) - self.label_5.setObjectName("label_5") - self.horizontalLayout_10.addWidget(self.label_5) - self.OutputFilePath = QtWidgets.QLineEdit(parent=MainWindow) - self.OutputFilePath.setObjectName("OutputFilePath") - self.horizontalLayout_10.addWidget(self.OutputFilePath) - self.OutputFileButton = QtWidgets.QToolButton(parent=MainWindow) - self.OutputFileButton.setObjectName("OutputFileButton") - self.horizontalLayout_10.addWidget(self.OutputFileButton) - self.verticalLayout_9.addLayout(self.horizontalLayout_10) - self.gridLayout_5 = QtWidgets.QGridLayout() - self.gridLayout_5.setObjectName("gridLayout_5") - self.ListWidget_OutPlugSet = QtWidgets.QListWidget(parent=MainWindow) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(9) - sizePolicy.setHeightForWidth(self.ListWidget_OutPlugSet.sizePolicy().hasHeightForWidth()) - self.ListWidget_OutPlugSet.setSizePolicy(sizePolicy) - self.ListWidget_OutPlugSet.setMinimumSize(QtCore.QSize(0, 0)) - self.ListWidget_OutPlugSet.setMaximumSize(QtCore.QSize(100, 10000)) - self.ListWidget_OutPlugSet.setObjectName("ListWidget_OutPlugSet") - self.gridLayout_5.addWidget(self.ListWidget_OutPlugSet, 1, 0, 1, 1) - self.label_8 = QtWidgets.QLabel(parent=MainWindow) - self.label_8.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) - self.label_8.setObjectName("label_8") - self.gridLayout_5.addWidget(self.label_8, 0, 0, 1, 1) - self.ListWidget_OutPlugin = QtWidgets.QListWidget(parent=MainWindow) - self.ListWidget_OutPlugin.setStyleSheet("font: 15pt \"Ubuntu\";") - self.ListWidget_OutPlugin.setObjectName("ListWidget_OutPlugin") - self.gridLayout_5.addWidget(self.ListWidget_OutPlugin, 1, 1, 1, 1) - self.label_9 = QtWidgets.QLabel(parent=MainWindow) - self.label_9.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) - self.label_9.setObjectName("label_9") - self.gridLayout_5.addWidget(self.label_9, 0, 1, 1, 1) - self.verticalLayout_9.addLayout(self.gridLayout_5) - self.verticalLayout_2.addLayout(self.verticalLayout_9) - self.StatusText = QtWidgets.QLabel(parent=MainWindow) - self.StatusText.setStyleSheet("font: 18pt \"Ubuntu\";") - self.StatusText.setObjectName("StatusText") - self.verticalLayout_2.addWidget(self.StatusText) - self.SubStatusText = QtWidgets.QLabel(parent=MainWindow) - self.SubStatusText.setObjectName("SubStatusText") - self.verticalLayout_2.addWidget(self.SubStatusText) - self.progressBar = QtWidgets.QProgressBar(parent=MainWindow) - self.progressBar.setProperty("value", 0) - self.progressBar.setObjectName("progressBar") - self.verticalLayout_2.addWidget(self.progressBar) - self.ConvertButton = QtWidgets.QPushButton(parent=MainWindow) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.ConvertButton.sizePolicy().hasHeightForWidth()) - self.ConvertButton.setSizePolicy(sizePolicy) - self.ConvertButton.setMinimumSize(QtCore.QSize(222, 0)) - self.ConvertButton.setStyleSheet("font: 20pt \"Source Sans Pro\";") - self.ConvertButton.setObjectName("ConvertButton") - self.verticalLayout_2.addWidget(self.ConvertButton) - self.horizontalLayout.addLayout(self.verticalLayout_2) - self.horizontalLayout_2.addLayout(self.horizontalLayout) - - self.retranslateUi(MainWindow) - QtCore.QMetaObject.connectSlotsByName(MainWindow) - - def retranslateUi(self, MainWindow): - _translate = QtCore.QCoreApplication.translate - MainWindow.setWindowTitle(_translate("MainWindow", "Form")) - self.label_10.setText(_translate("MainWindow", "Input")) - self.label.setText(_translate("MainWindow", "Input File")) - self.InputFileButton.setText(_translate("MainWindow", "...")) - self.AutoDetectButton.setText(_translate("MainWindow", "Auto-Detect")) - self.label_4.setText(_translate("MainWindow", "Input Plugin")) - self.label_7.setText(_translate("MainWindow", "Plugin Set")) - self.label_6.setText(_translate("MainWindow", "Output")) - self.label_5.setText(_translate("MainWindow", "Output File")) - self.OutputFileButton.setText(_translate("MainWindow", "...")) - self.label_8.setText(_translate("MainWindow", "Plugin Set")) - self.label_9.setText(_translate("MainWindow", "Output Plugin")) - self.StatusText.setText(_translate("MainWindow", "Status: ")) - self.SubStatusText.setText(_translate("MainWindow", "Status Text")) - self.ConvertButton.setText(_translate("MainWindow", "Convert")) +# Form implementation generated from reading ui file 'ui_pyqt.ui' +# +# Created by: PyQt6 UI code generator 6.7.1 +# +# WARNING: Any manual changes made to this file will be lost when pyuic6 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt6 import QtCore, QtGui, QtWidgets + + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + MainWindow.setObjectName("MainWindow") + MainWindow.resize(903, 551) + self.verticalLayout = QtWidgets.QVBoxLayout(MainWindow) + self.verticalLayout.setObjectName("verticalLayout") + self.AreasIO = QtWidgets.QHBoxLayout() + self.AreasIO.setObjectName("AreasIO") + self.InputGroup = QtWidgets.QGroupBox(parent=MainWindow) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.InputGroup.sizePolicy().hasHeightForWidth()) + self.InputGroup.setSizePolicy(sizePolicy) + self.InputGroup.setMinimumSize(QtCore.QSize(240, 0)) + self.InputGroup.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) + self.InputGroup.setObjectName("InputGroup") + self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.InputGroup) + self.verticalLayout_4.setObjectName("verticalLayout_4") + self.InputFileArea = QtWidgets.QHBoxLayout() + self.InputFileArea.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetDefaultConstraint) + self.InputFileArea.setObjectName("InputFileArea") + self.InputTextFile = QtWidgets.QLabel(parent=self.InputGroup) + self.InputTextFile.setObjectName("InputTextFile") + self.InputFileArea.addWidget(self.InputTextFile) + self.InputFilePath = QtWidgets.QLineEdit(parent=self.InputGroup) + self.InputFilePath.setObjectName("InputFilePath") + self.InputFileArea.addWidget(self.InputFilePath) + self.InputFileButton = QtWidgets.QToolButton(parent=self.InputGroup) + self.InputFileButton.setObjectName("InputFileButton") + self.InputFileArea.addWidget(self.InputFileButton) + self.verticalLayout_4.addLayout(self.InputFileArea) + self.AutoDetectButton = QtWidgets.QPushButton(parent=self.InputGroup) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.AutoDetectButton.sizePolicy().hasHeightForWidth()) + self.AutoDetectButton.setSizePolicy(sizePolicy) + self.AutoDetectButton.setObjectName("AutoDetectButton") + self.verticalLayout_4.addWidget(self.AutoDetectButton) + self.InputListArea = QtWidgets.QGridLayout() + self.InputListArea.setObjectName("InputListArea") + self.ListWidget_InPlugin = QtWidgets.QListWidget(parent=self.InputGroup) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ListWidget_InPlugin.sizePolicy().hasHeightForWidth()) + self.ListWidget_InPlugin.setSizePolicy(sizePolicy) + self.ListWidget_InPlugin.setStyleSheet("font: 15pt \"Ubuntu\";") + self.ListWidget_InPlugin.setObjectName("ListWidget_InPlugin") + self.InputListArea.addWidget(self.ListWidget_InPlugin, 2, 1, 1, 1) + self.ListWidget_InPlugSet = QtWidgets.QListWidget(parent=self.InputGroup) + self.ListWidget_InPlugSet.setMaximumSize(QtCore.QSize(100, 10000)) + self.ListWidget_InPlugSet.setObjectName("ListWidget_InPlugSet") + self.InputListArea.addWidget(self.ListWidget_InPlugSet, 2, 0, 1, 1) + self.label_4 = QtWidgets.QLabel(parent=self.InputGroup) + self.label_4.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) + self.label_4.setObjectName("label_4") + self.InputListArea.addWidget(self.label_4, 1, 1, 1, 1) + self.label_7 = QtWidgets.QLabel(parent=self.InputGroup) + self.label_7.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) + self.label_7.setObjectName("label_7") + self.InputListArea.addWidget(self.label_7, 1, 0, 1, 1) + self.verticalLayout_4.addLayout(self.InputListArea) + self.AreasIO.addWidget(self.InputGroup) + self.ConfigArea = QtWidgets.QGroupBox(parent=MainWindow) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Maximum, QtWidgets.QSizePolicy.Policy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ConfigArea.sizePolicy().hasHeightForWidth()) + self.ConfigArea.setSizePolicy(sizePolicy) + self.ConfigArea.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) + self.ConfigArea.setObjectName("ConfigArea") + self.verticalLayout_7 = QtWidgets.QVBoxLayout(self.ConfigArea) + self.verticalLayout_7.setObjectName("verticalLayout_7") + self.ConfigList = QtWidgets.QTreeWidget(parent=self.ConfigArea) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ConfigList.sizePolicy().hasHeightForWidth()) + self.ConfigList.setSizePolicy(sizePolicy) + self.ConfigList.setMinimumSize(QtCore.QSize(250, 0)) + self.ConfigList.setObjectName("ConfigList") + self.verticalLayout_7.addWidget(self.ConfigList) + self.verticalLayout_3 = QtWidgets.QVBoxLayout() + self.verticalLayout_3.setObjectName("verticalLayout_3") + self.ConfigInt = QtWidgets.QSpinBox(parent=self.ConfigArea) + self.ConfigInt.setObjectName("ConfigInt") + self.verticalLayout_3.addWidget(self.ConfigInt) + self.ConfigFloat = QtWidgets.QDoubleSpinBox(parent=self.ConfigArea) + self.ConfigFloat.setObjectName("ConfigFloat") + self.verticalLayout_3.addWidget(self.ConfigFloat) + self.ConfigString = QtWidgets.QLineEdit(parent=self.ConfigArea) + self.ConfigString.setObjectName("ConfigString") + self.verticalLayout_3.addWidget(self.ConfigString) + self.ConfigBool = QtWidgets.QCheckBox(parent=self.ConfigArea) + self.ConfigBool.setObjectName("ConfigBool") + self.verticalLayout_3.addWidget(self.ConfigBool) + self.verticalLayout_7.addLayout(self.verticalLayout_3) + self.AreasIO.addWidget(self.ConfigArea) + self.OutputGroup = QtWidgets.QGroupBox(parent=MainWindow) + self.OutputGroup.setMinimumSize(QtCore.QSize(240, 0)) + self.OutputGroup.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) + self.OutputGroup.setObjectName("OutputGroup") + self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.OutputGroup) + self.verticalLayout_2.setObjectName("verticalLayout_2") + self.OutputFileArea = QtWidgets.QHBoxLayout() + self.OutputFileArea.setObjectName("OutputFileArea") + self.OutputTextFile = QtWidgets.QLabel(parent=self.OutputGroup) + self.OutputTextFile.setObjectName("OutputTextFile") + self.OutputFileArea.addWidget(self.OutputTextFile) + self.OutputFilePath = QtWidgets.QLineEdit(parent=self.OutputGroup) + self.OutputFilePath.setObjectName("OutputFilePath") + self.OutputFileArea.addWidget(self.OutputFilePath) + self.OutputFileButton = QtWidgets.QToolButton(parent=self.OutputGroup) + self.OutputFileButton.setObjectName("OutputFileButton") + self.OutputFileArea.addWidget(self.OutputFileButton) + self.verticalLayout_2.addLayout(self.OutputFileArea) + self.OutputSampleArea_2 = QtWidgets.QHBoxLayout() + self.OutputSampleArea_2.setObjectName("OutputSampleArea_2") + self.OutputSampleFile = QtWidgets.QLabel(parent=self.OutputGroup) + self.OutputSampleFile.setObjectName("OutputSampleFile") + self.OutputSampleArea_2.addWidget(self.OutputSampleFile) + self.OutputSamplePath = QtWidgets.QLineEdit(parent=self.OutputGroup) + self.OutputSamplePath.setObjectName("OutputSamplePath") + self.OutputSampleArea_2.addWidget(self.OutputSamplePath) + self.OutputSampleButton = QtWidgets.QToolButton(parent=self.OutputGroup) + self.OutputSampleButton.setObjectName("OutputSampleButton") + self.OutputSampleArea_2.addWidget(self.OutputSampleButton) + self.verticalLayout_2.addLayout(self.OutputSampleArea_2) + self.OutputListArea = QtWidgets.QGridLayout() + self.OutputListArea.setObjectName("OutputListArea") + self.ListWidget_OutPlugSet = QtWidgets.QListWidget(parent=self.OutputGroup) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(9) + sizePolicy.setHeightForWidth(self.ListWidget_OutPlugSet.sizePolicy().hasHeightForWidth()) + self.ListWidget_OutPlugSet.setSizePolicy(sizePolicy) + self.ListWidget_OutPlugSet.setMinimumSize(QtCore.QSize(0, 0)) + self.ListWidget_OutPlugSet.setMaximumSize(QtCore.QSize(100, 10000)) + self.ListWidget_OutPlugSet.setObjectName("ListWidget_OutPlugSet") + self.OutputListArea.addWidget(self.ListWidget_OutPlugSet, 1, 0, 1, 1) + self.label_8 = QtWidgets.QLabel(parent=self.OutputGroup) + self.label_8.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) + self.label_8.setObjectName("label_8") + self.OutputListArea.addWidget(self.label_8, 0, 0, 1, 1) + self.ListWidget_OutPlugin = QtWidgets.QListWidget(parent=self.OutputGroup) + self.ListWidget_OutPlugin.setStyleSheet("font: 15pt \"Ubuntu\";") + self.ListWidget_OutPlugin.setObjectName("ListWidget_OutPlugin") + self.OutputListArea.addWidget(self.ListWidget_OutPlugin, 1, 1, 1, 1) + self.label_9 = QtWidgets.QLabel(parent=self.OutputGroup) + self.label_9.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) + self.label_9.setObjectName("label_9") + self.OutputListArea.addWidget(self.label_9, 0, 1, 1, 1) + self.verticalLayout_2.addLayout(self.OutputListArea) + self.AreasIO.addWidget(self.OutputGroup) + self.verticalLayout.addLayout(self.AreasIO) + self.BottomArea = QtWidgets.QHBoxLayout() + self.BottomArea.setObjectName("BottomArea") + self.AreaInteract = QtWidgets.QVBoxLayout() + self.AreaInteract.setObjectName("AreaInteract") + self.StatusText = QtWidgets.QLabel(parent=MainWindow) + self.StatusText.setStyleSheet("font: 18pt \"Ubuntu\";") + self.StatusText.setObjectName("StatusText") + self.AreaInteract.addWidget(self.StatusText) + self.SubStatusText = QtWidgets.QLabel(parent=MainWindow) + self.SubStatusText.setObjectName("SubStatusText") + self.AreaInteract.addWidget(self.SubStatusText) + self.progressBar = QtWidgets.QProgressBar(parent=MainWindow) + self.progressBar.setProperty("value", 0) + self.progressBar.setObjectName("progressBar") + self.AreaInteract.addWidget(self.progressBar) + self.ConvertButton = QtWidgets.QPushButton(parent=MainWindow) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Minimum) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ConvertButton.sizePolicy().hasHeightForWidth()) + self.ConvertButton.setSizePolicy(sizePolicy) + self.ConvertButton.setMinimumSize(QtCore.QSize(222, 0)) + self.ConvertButton.setStyleSheet("font: 20pt \"Source Sans Pro\";") + self.ConvertButton.setObjectName("ConvertButton") + self.AreaInteract.addWidget(self.ConvertButton) + self.ExtPluginArea = QtWidgets.QHBoxLayout() + self.ExtPluginArea.setObjectName("ExtPluginArea") + self.ExtPlugScanner = QtWidgets.QGroupBox(parent=MainWindow) + self.ExtPlugScanner.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) + self.ExtPlugScanner.setObjectName("ExtPlugScanner") + self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.ExtPlugScanner) + self.verticalLayout_5.setObjectName("verticalLayout_5") + self.horizontalLayout = QtWidgets.QHBoxLayout() + self.horizontalLayout.setObjectName("horizontalLayout") + self.PluginScanButton = QtWidgets.QPushButton(parent=self.ExtPlugScanner) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.PluginScanButton.sizePolicy().hasHeightForWidth()) + self.PluginScanButton.setSizePolicy(sizePolicy) + self.PluginScanButton.setObjectName("PluginScanButton") + self.horizontalLayout.addWidget(self.PluginScanButton) + self.PluginScanStatus = QtWidgets.QLabel(parent=self.ExtPlugScanner) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.PluginScanStatus.sizePolicy().hasHeightForWidth()) + self.PluginScanStatus.setSizePolicy(sizePolicy) + self.PluginScanStatus.setText("") + self.PluginScanStatus.setObjectName("PluginScanStatus") + self.horizontalLayout.addWidget(self.PluginScanStatus) + self.verticalLayout_5.addLayout(self.horizontalLayout) + self.horizontalLayout_2 = QtWidgets.QHBoxLayout() + self.horizontalLayout_2.setObjectName("horizontalLayout_2") + self.ExtCountVST2 = QtWidgets.QLabel(parent=self.ExtPlugScanner) + self.ExtCountVST2.setObjectName("ExtCountVST2") + self.horizontalLayout_2.addWidget(self.ExtCountVST2) + self.ExtCountVST3 = QtWidgets.QLabel(parent=self.ExtPlugScanner) + self.ExtCountVST3.setObjectName("ExtCountVST3") + self.horizontalLayout_2.addWidget(self.ExtCountVST3) + self.ExtCountCLAP = QtWidgets.QLabel(parent=self.ExtPlugScanner) + self.ExtCountCLAP.setObjectName("ExtCountCLAP") + self.horizontalLayout_2.addWidget(self.ExtCountCLAP) + self.verticalLayout_5.addLayout(self.horizontalLayout_2) + self.ExtPluginArea.addWidget(self.ExtPlugScanner) + self.ExtPlugCatsGroup = QtWidgets.QGroupBox(parent=MainWindow) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ExtPlugCatsGroup.sizePolicy().hasHeightForWidth()) + self.ExtPlugCatsGroup.setSizePolicy(sizePolicy) + self.ExtPlugCatsGroup.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) + self.ExtPlugCatsGroup.setObjectName("ExtPlugCatsGroup") + self.gridLayout_2 = QtWidgets.QGridLayout(self.ExtPlugCatsGroup) + self.gridLayout_2.setObjectName("gridLayout_2") + self.gridLayout = QtWidgets.QGridLayout() + self.gridLayout.setObjectName("gridLayout") + self.ExtPlugG_FOSS = QtWidgets.QCheckBox(parent=self.ExtPlugCatsGroup) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ExtPlugG_FOSS.sizePolicy().hasHeightForWidth()) + self.ExtPlugG_FOSS.setSizePolicy(sizePolicy) + self.ExtPlugG_FOSS.setObjectName("ExtPlugG_FOSS") + self.gridLayout.addWidget(self.ExtPlugG_FOSS, 0, 0, 1, 1) + self.ExtPlugG_Shareware = QtWidgets.QCheckBox(parent=self.ExtPlugCatsGroup) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ExtPlugG_Shareware.sizePolicy().hasHeightForWidth()) + self.ExtPlugG_Shareware.setSizePolicy(sizePolicy) + self.ExtPlugG_Shareware.setObjectName("ExtPlugG_Shareware") + self.gridLayout.addWidget(self.ExtPlugG_Shareware, 1, 0, 1, 1) + self.ExtPlugG_Old = QtWidgets.QCheckBox(parent=self.ExtPlugCatsGroup) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ExtPlugG_Old.sizePolicy().hasHeightForWidth()) + self.ExtPlugG_Old.setSizePolicy(sizePolicy) + self.ExtPlugG_Old.setObjectName("ExtPlugG_Old") + self.gridLayout.addWidget(self.ExtPlugG_Old, 1, 1, 1, 1) + self.ExtPlugG_NonFree = QtWidgets.QCheckBox(parent=self.ExtPlugCatsGroup) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ExtPlugG_NonFree.sizePolicy().hasHeightForWidth()) + self.ExtPlugG_NonFree.setSizePolicy(sizePolicy) + self.ExtPlugG_NonFree.setObjectName("ExtPlugG_NonFree") + self.gridLayout.addWidget(self.ExtPlugG_NonFree, 0, 1, 1, 1) + self.gridLayout_2.addLayout(self.gridLayout, 0, 0, 1, 1) + self.ExtPluginArea.addWidget(self.ExtPlugCatsGroup) + self.AreaInteract.addLayout(self.ExtPluginArea) + self.BottomArea.addLayout(self.AreaInteract) + self.verticalLayout.addLayout(self.BottomArea) + + self.retranslateUi(MainWindow) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "Form")) + self.InputGroup.setTitle(_translate("MainWindow", "Input")) + self.InputTextFile.setText(_translate("MainWindow", "File")) + self.InputFileButton.setText(_translate("MainWindow", "...")) + self.AutoDetectButton.setText(_translate("MainWindow", "Auto-Detect")) + self.label_4.setText(_translate("MainWindow", "Input Plugin")) + self.label_7.setText(_translate("MainWindow", "Plugin Set")) + self.ConfigArea.setTitle(_translate("MainWindow", "Config")) + self.ConfigList.headerItem().setText(0, _translate("MainWindow", "Name")) + self.ConfigList.headerItem().setText(1, _translate("MainWindow", "Value")) + self.ConfigBool.setText(_translate("MainWindow", "Value")) + self.OutputGroup.setTitle(_translate("MainWindow", "Output")) + self.OutputTextFile.setText(_translate("MainWindow", "File")) + self.OutputFileButton.setText(_translate("MainWindow", "...")) + self.OutputSampleFile.setText(_translate("MainWindow", "Samples")) + self.OutputSampleButton.setText(_translate("MainWindow", "...")) + self.label_8.setText(_translate("MainWindow", "Plugin Set")) + self.label_9.setText(_translate("MainWindow", "Output Plugin")) + self.StatusText.setText(_translate("MainWindow", "Status: ")) + self.SubStatusText.setText(_translate("MainWindow", "Status Text")) + self.ConvertButton.setText(_translate("MainWindow", "Convert")) + self.ExtPlugScanner.setTitle(_translate("MainWindow", "External Plugin Scanner")) + self.PluginScanButton.setText(_translate("MainWindow", "Scan Plugins")) + self.ExtCountVST2.setText(_translate("MainWindow", "VST2: 0")) + self.ExtCountVST3.setText(_translate("MainWindow", "VST3: 0")) + self.ExtCountCLAP.setText(_translate("MainWindow", "CLAP: 0")) + self.ExtPlugCatsGroup.setTitle(_translate("MainWindow", "External Plugins Groups")) + self.ExtPlugG_FOSS.setText(_translate("MainWindow", "FOSS")) + self.ExtPlugG_Shareware.setText(_translate("MainWindow", "Shareware")) + self.ExtPlugG_Old.setText(_translate("MainWindow", "Old/Discontinued")) + self.ExtPlugG_NonFree.setText(_translate("MainWindow", "Non-Free")) diff --git a/objects_ui/ui_pyqt.ui b/objects_ui/ui_pyqt.ui index 0ce6cfb1..f8d6acd9 100644 --- a/objects_ui/ui_pyqt.ui +++ b/objects_ui/ui_pyqt.ui @@ -6,225 +6,307 @@ 0 0 - 537 - 729 + 903 + 551 Form - + - + - - - - - 0 - - - 0 - - - 0 - - - 0 - - - + + + + 0 + 0 + + + + + 240 + 0 + + + + Input + + + Qt::AlignCenter + + + + + + QLayout::SetDefaultConstraint + + + + + File + + + + + + + + + + ... + + + + + + + + + + 0 + 0 + + + + Auto-Detect + + + + + + + + + + 0 + 0 + + + + font: 15pt "Ubuntu"; + + + + + + + + 100 + 10000 + + + + + + + + Input Plugin + + + Qt::AlignCenter + + + + + + + Plugin Set + + + Qt::AlignCenter + + + + + + + + + + + + + 0 + 0 + + + + Config + + + Qt::AlignCenter + + + + + + + 0 + 0 + + + + + 250 + 0 + + + - Input - - - Qt::AlignCenter - - - - - - - - - Input File - - - - - - - - - - ... - - - - - - - - - - 0 - 0 - + Name + + - Auto-Detect + Value - - - - - - - - - 0 - 0 - - - - font: 15pt "Ubuntu"; - - - - - - - - 100 - 10000 - - - - - - - - Input Plugin - - - Qt::AlignCenter - - - - - - - Plugin Set - - - Qt::AlignCenter - - - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Output - - - Qt::AlignCenter - - - - - - - - - Output File - - - - - - - - - - ... - - - - - - - - - - - - 0 - 9 - - - - - 0 - 0 - - - - - 100 - 10000 - - - - - - - - Plugin Set - - - Qt::AlignCenter - - - - - - - font: 15pt "Ubuntu"; - - - - - - - Output Plugin - - - Qt::AlignCenter - - - - - - - + + + + + + + + + + + + + + + + + + Value + + + + + + + + + + + + + 240 + 0 + + + + Output + + + Qt::AlignCenter + + + + + + + + File + + + + + + + + + + ... + + + + + + + + + + + Samples + + + + + + + + + + ... + + + + + + + + + + + + 0 + 9 + + + + + 0 + 0 + + + + + 100 + 10000 + + + + + + + + Plugin Set + + + Qt::AlignCenter + + + + + + + font: 15pt "Ubuntu"; + + + + + + + Output Plugin + + + Qt::AlignCenter + + + + + + + + + + + + + + @@ -271,6 +353,151 @@ + + + + + + External Plugin Scanner + + + Qt::AlignCenter + + + + + + + + + 0 + 0 + + + + Scan Plugins + + + + + + + + 0 + 0 + + + + + + + + + + + + + + + VST2: 0 + + + + + + + VST3: 0 + + + + + + + CLAP: 0 + + + + + + + + + + + + + 0 + 0 + + + + External Plugins Groups + + + Qt::AlignCenter + + + + + + + + + 0 + 0 + + + + FOSS + + + + + + + + 0 + 0 + + + + Shareware + + + + + + + + 0 + 0 + + + + Old/Discontinued + + + + + + + + 0 + 0 + + + + Non-Free + + + + + + + + + + diff --git a/plugins/__init__.py b/plugins/__init__.py index 86cedd3d..133c72cd 100644 --- a/plugins/__init__.py +++ b/plugins/__init__.py @@ -110,11 +110,21 @@ def __init__(self): def from_dict(self, indict): if 'encode_supported' in indict: self.encode_supported = indict['encode_supported'] if 'decode_supported' in indict: self.decode_supported = indict['decode_supported'] + +class info_externalsearch: + def __init__(self): + self.supported_os = False + + def from_dict(self, indict): + if 'supported_os' in indict: self.supported_os = indict['supported_os'] + + + class dv_plugin: def __init__(self): self.name = "" @@ -164,6 +174,11 @@ def propproc(self): propobj.from_dict(self.prop) self.prop_obj = propobj + if self.type == 'externalsearch': + propobj = info_externalsearch() + propobj.from_dict(self.prop) + self.prop_obj = propobj + class plugin_selector: def __init__(self, plugintype, loaded_plugins): diff --git a/plugins/input/m_tracker_it.py b/plugins/input/m_tracker_it.py index 591e70ab..6bac030e 100644 --- a/plugins/input/m_tracker_it.py +++ b/plugins/input/m_tracker_it.py @@ -1,10 +1,7 @@ # SPDX-FileCopyrightText: 2024 SatyrDiamond # SPDX-License-Identifier: GPL-3.0-or-later -from functions import data_bytes from functions import data_values -from objects.file_proj import proj_it -from objects.tracker import pat_single import io import os.path import plugins @@ -103,16 +100,19 @@ def detect_internal(self, bytestream): bytestream.seek(0) def parse_bytes(self, convproj_obj, input_bytes, dv_config, input_file): + from objects.file_proj import proj_it project_obj = proj_it.it_song() if not project_obj.load_from_raw(input_bytes): exit() self.parse_internal(convproj_obj, project_obj, dv_config, input_file) def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_it project_obj = proj_it.it_song() if not project_obj.load_from_file(input_file): exit() self.parse_internal(convproj_obj, project_obj, dv_config, input_file) def parse_internal(self, convproj_obj, project_obj, dv_config, input_file): + from objects.tracker import pat_single global samplefolder try: import xmodits diff --git a/plugins/input/m_tracker_mod.py b/plugins/input/m_tracker_mod.py index 5244616c..3fea63a0 100644 --- a/plugins/input/m_tracker_mod.py +++ b/plugins/input/m_tracker_mod.py @@ -6,9 +6,6 @@ import re import numpy as np import math -from objects.file_proj import proj_mod -from objects import audio_data -from objects.tracker import pat_single FINETUNE = [8363, 8413, 8463, 8529, 8581, 8651, 8723, 8757, 7895, 7941, 7985, 8046, 8107, 8169, 8232, 8280] TEXTSTART = 'MOD_Inst_' @@ -30,16 +27,20 @@ def get_prop(self, in_dict): def supported_autodetect(self): return False def parse_bytes(self, convproj_obj, input_bytes, dv_config, input_file): + from objects.file_proj import proj_mod project_obj = proj_mod.mod_song() if not project_obj.load_from_raw(input_bytes, IGNORE_ERRORS): exit() self.parse_internal(convproj_obj, project_obj, dv_config) def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_mod project_obj = proj_mod.mod_song() if not project_obj.load_from_file(input_file, IGNORE_ERRORS): exit() self.parse_internal(convproj_obj, project_obj, dv_config) def parse_internal(self, convproj_obj, project_obj, dv_config): + from objects.tracker import pat_single + from objects import audio_data samplefolder = dv_config.path_samples_extracted cvpj_bpm = 125 diff --git a/plugins/input/m_tracker_s3m.py b/plugins/input/m_tracker_s3m.py index f62e9b1c..9876950f 100644 --- a/plugins/input/m_tracker_s3m.py +++ b/plugins/input/m_tracker_s3m.py @@ -5,8 +5,6 @@ import plugins import os.path from functions import data_bytes -from objects.file_proj import proj_s3m -from objects.tracker import pat_single TEXTSTART = 's3m_inst_' MAINCOLOR = [0.65, 0.57, 0.33] @@ -40,16 +38,19 @@ def detect_internal(self, bytestream): bytestream.seek(0) def parse_bytes(self, convproj_obj, input_bytes, dv_config, input_file): + from objects.file_proj import proj_s3m project_obj = proj_s3m.s3m_song() if not project_obj.load_from_raw(input_bytes): exit() self.parse_internal(convproj_obj, project_obj, dv_config) def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_s3m project_obj = proj_s3m.s3m_song() if not project_obj.load_from_file(input_file): exit() self.parse_internal(convproj_obj, project_obj, dv_config) def parse_internal(self, convproj_obj, project_obj, dv_config): + from objects.tracker import pat_single samplefolder = dv_config.path_samples_extracted current_tempo = project_obj.tempo diff --git a/plugins/input/m_tracker_umx.py b/plugins/input/m_tracker_umx.py index 176b2d98..7c144d3f 100644 --- a/plugins/input/m_tracker_umx.py +++ b/plugins/input/m_tracker_umx.py @@ -5,7 +5,6 @@ import os import numpy as np import math -from objects.file_proj import proj_umx from plugins.input.m_tracker_s3m import input_s3m as s3m from plugins.input.m_tracker_mod import input_mod as mod @@ -44,6 +43,7 @@ def detect(self, input_file): else: return False def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_umx project_obj = proj_umx.umx_file() if not project_obj.load_from_file(input_file): exit() diff --git a/plugins/input/m_tracker_xm.py b/plugins/input/m_tracker_xm.py index a8d4772b..3cd334d0 100644 --- a/plugins/input/m_tracker_xm.py +++ b/plugins/input/m_tracker_xm.py @@ -5,8 +5,6 @@ import plugins import os.path from functions import data_values -from objects.file_proj import proj_xm -from objects.tracker import pat_single try: import xmodits except: xmodits_exists = False @@ -62,16 +60,19 @@ def detect_internal(self, bytestream): bytestream.seek(0) def parse_bytes(self, convproj_obj, input_bytes, dv_config, input_file): + from objects.file_proj import proj_xm project_obj = proj_xm.xm_song() if not project_obj.load_from_raw(input_bytes): exit() self.parse_internal(convproj_obj, project_obj, dv_config, input_file) def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_xm project_obj = proj_xm.xm_song() if not project_obj.load_from_file(input_file): exit() self.parse_internal(convproj_obj, project_obj, dv_config, input_file) def parse_internal(self, convproj_obj, project_obj, dv_config, input_file): + from objects.tracker import pat_single global samplefolder samplefolder = dv_config.path_samples_extracted diff --git a/plugins/input/m_uc_trkr_deflemask.py b/plugins/input/m_uc_trkr_deflemask.py index d2f71275..86ac0081 100644 --- a/plugins/input/m_uc_trkr_deflemask.py +++ b/plugins/input/m_uc_trkr_deflemask.py @@ -1,10 +1,7 @@ # SPDX-FileCopyrightText: 2024 SatyrDiamond # SPDX-License-Identifier: GPL-3.0-or-later -from objects.file_proj import proj_deflemask -from objects.tracker import pat_multi from objects import globalstore -from objects import audio_data import plugins class input_deflemask(plugins.base): @@ -20,6 +17,9 @@ def get_prop(self, in_dict): in_dict['track_nopl'] = True in_dict['fxtype'] = 'rack' def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_deflemask + from objects.tracker import pat_multi + from objects import audio_data project_obj = proj_deflemask.deflemask_project() if not project_obj.load_from_file(input_file): exit() diff --git a/plugins/input/m_uc_trkr_famitracker.py b/plugins/input/m_uc_trkr_famitracker.py index e7900568..4c930c1e 100644 --- a/plugins/input/m_uc_trkr_famitracker.py +++ b/plugins/input/m_uc_trkr_famitracker.py @@ -1,10 +1,7 @@ # SPDX-FileCopyrightText: 2024 SatyrDiamond # SPDX-License-Identifier: GPL-3.0-or-later -from objects.file_proj import proj_famitracker -from objects.tracker import pat_multi from objects import globalstore -from objects import audio_data import plugins dpcm_rate_arr = [4181.71,4709.93,5264.04,5593.04,6257.95,7046.35,7919.35,8363.42,9419.86,11186.1,12604.0,13982.6,16884.6,21306.8,24858.0,33143.9] @@ -22,6 +19,9 @@ def get_prop(self, in_dict): in_dict['track_nopl'] = True in_dict['fxtype'] = 'rack' def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_famitracker + from objects.tracker import pat_multi + from objects import audio_data project_obj = proj_famitracker.famitracker_project() if not project_obj.load_from_file(input_file): exit() diff --git a/plugins/input/m_uc_trkr_trackerboy.py b/plugins/input/m_uc_trkr_trackerboy.py index bc2a5657..60a5b8fb 100644 --- a/plugins/input/m_uc_trkr_trackerboy.py +++ b/plugins/input/m_uc_trkr_trackerboy.py @@ -1,11 +1,8 @@ # SPDX-FileCopyrightText: 2024 SatyrDiamond # SPDX-License-Identifier: GPL-3.0-or-later -from objects.file_proj import proj_trackerboy -from objects.tracker import pat_multi from functions import data_bytes from objects import globalstore -from objects import audio_data import plugins def speed_to_tempo(framerate, speed): @@ -53,6 +50,8 @@ def get_prop(self, in_dict): in_dict['track_nopl'] = True in_dict['fxtype'] = 'rack' def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_trackerboy + from objects.tracker import pat_multi project_obj = proj_trackerboy.trackerboy_project() if not project_obj.load_from_file(input_file): exit() diff --git a/plugins/input/mi_boscaceoil.py b/plugins/input/mi_boscaceoil.py index 601d6990..5da25666 100644 --- a/plugins/input/mi_boscaceoil.py +++ b/plugins/input/mi_boscaceoil.py @@ -3,20 +3,15 @@ from functions import data_values from functions import xtramath -from functions_plugin_cvpj import params_fm from objects import globalstore -from objects.convproj import project as convproj -from objects.file_proj import proj_boscaceoil -from objects.inst_params import fm_opm -from objects.inst_params import fx_delay import plugins -import json FX_NAMES = ['delay','chorus','reverb','distortion','low_boost','compressor','high_pass'] CEOL_COLORS = [[0.23, 0.15, 0.93],[0.61, 0.04, 0.94],[0.82, 0.16, 0.23],[0.82, 0.60, 0.16],[0.21, 0.84, 0.14],[0.07, 0.56, 0.91]] def add_master_fx(convproj_obj, fx_type, fx_value): if fx_type == 0: #delay + from objects.inst_params import fx_delay delay_obj = fx_delay.fx_delay() delay_obj.feedback_first = True delay_obj.feedback[0] = 0.1 @@ -75,6 +70,8 @@ def get_prop(self, in_dict): in_dict['plugin_included'] = ['simple:chorus','simple:reverb','simple:distortion','simple:bassboost','universal:compressor','universal:filter','fm:opm','native-boscaceoil','universal:filter','midi'] def supported_autodetect(self): return False def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_boscaceoil + from objects.inst_params import fm_opm global ceol_data project_obj = proj_boscaceoil.ceol_song() diff --git a/plugins/input/mi_famistudiotxt.py b/plugins/input/mi_famistudiotxt.py index 0aef36ef..fa6d6365 100644 --- a/plugins/input/mi_famistudiotxt.py +++ b/plugins/input/mi_famistudiotxt.py @@ -8,9 +8,6 @@ from functions import xtramath from objects import globalstore -from objects import audio_data -from objects.file_proj import proj_famistudiotxt -from objects.inst_params import juce_plugin dpcm_rate_arr = [4181.71,4709.93,5264.04,5593.04,6257.95,7046.35,7919.35,8363.42,9419.86,11186.1,12604.0,13982.6,16884.6,21306.8,24858.0,33143.9] @@ -139,6 +136,7 @@ def create_inst(convproj_obj, WaveType, fst_Instrument, fxchannel_obj, fx_num): if WaveType in ['VRC7FM']: inst_obj.datavals.add('middlenote', 12) def create_dpcm_inst(DPCMMappings, DPCMSamples, fx_num, fst_instrument): + from objects import audio_data global samplefolder global dpcm_rate_arr @@ -278,6 +276,8 @@ def get_prop(self, in_dict): in_dict['plugin_included'] = ['epsm_rhythm','fds','fm:epsm','fm:vrc7','namco163_famistudio','sampler:multi','universal:synth-osc'] def supported_autodetect(self): return False def parse(self, i_convproj_obj, input_file, dv_config): + from objects.file_proj import proj_famistudiotxt + global samplefolder global convproj_obj convproj_obj = i_convproj_obj diff --git a/plugins/input/mi_flp.py b/plugins/input/mi_flp.py index 57fb0a83..7a9028ed 100644 --- a/plugins/input/mi_flp.py +++ b/plugins/input/mi_flp.py @@ -10,12 +10,8 @@ from pathlib import Path from functions import data_bytes -from functions import data_values from functions import xtramath -from functions_plugin import flp_dec_plugins from objects import globalstore -from objects.file_proj import proj_flp -from objects.inst_params import fx_delay from objects.convproj import fileref @@ -216,7 +212,7 @@ class input_flp(plugins.base): def __init__(self): pass def is_dawvert_plugin(self): return 'input' def get_shortname(self): return 'flp' - def get_name(self): return 'FL Studio' + def get_name(self): return 'FL Studio 12-21' def get_priority(self): return 0 def get_prop(self, in_dict): in_dict['file_ext'] = 'flp' @@ -243,6 +239,9 @@ def detect(self, input_file): if bytesdata == b'FLhd': return True else: return False def parse(self, convproj_obj, input_file, dv_config): + from functions_plugin import flp_dec_plugins + from objects.file_proj import proj_flp + from objects.inst_params import fx_delay convproj_obj.type = 'mi' diff --git a/plugins/input/mi_jummbox.py b/plugins/input/mi_jummbox.py index e6784b5a..6c23c881 100644 --- a/plugins/input/mi_jummbox.py +++ b/plugins/input/mi_jummbox.py @@ -6,8 +6,6 @@ from functions import xtramath from functions import colors from objects import globalstore -from objects.file_proj import proj_jummbox -from objects.inst_params import fx_delay from objects.exceptions import ProjectFileParserException import plugins import json @@ -183,6 +181,7 @@ def parse_notes(cvpj_notelist, channum, bb_notes, bb_instruments): def add_inst_fx(convproj_obj, inst_obj, bb_fx, cvpj_instid): if 'echo' in bb_fx.used: + from objects.inst_params import fx_delay fx_pluginid = cvpj_instid+'_echo' delay_obj = fx_delay.fx_delay() delay_obj.feedback_first = True @@ -220,7 +219,7 @@ class input_jummbox(plugins.base): def __init__(self): pass def is_dawvert_plugin(self): return 'input' def get_shortname(self): return 'jummbox' - def get_name(self): return 'Jummbox' + def get_name(self): return 'Beepbox/Jummbox' def get_priority(self): return 0 def get_prop(self, in_dict): in_dict['file_ext'] = 'json' @@ -231,6 +230,8 @@ def get_prop(self, in_dict): def supported_autodetect(self): return False def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_jummbox + convproj_obj.type = 'mi' convproj_obj.set_timings(8, True) diff --git a/plugins/input/mi_notessimo_v3.py b/plugins/input/mi_notessimo_v3.py index 38174d5d..beac2bd2 100644 --- a/plugins/input/mi_notessimo_v3.py +++ b/plugins/input/mi_notessimo_v3.py @@ -4,9 +4,7 @@ from functions import data_bytes from functions import note_data from functions import xtramath -from objects.convproj import project as convproj from objects import globalstore -from objects.file_proj import proj_notessimo_v3 import json import plugins import struct @@ -209,6 +207,8 @@ def get_prop(self, in_dict): in_dict['plugin_included'] = ['midi'] def supported_autodetect(self): return False def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_notessimo_v3 + global sheetrealsize global samplefolder samplefolder = dv_config.path_samples_extracted diff --git a/plugins/input/ms_1bd.py b/plugins/input/ms_1bd.py index 07081c43..80ff4905 100644 --- a/plugins/input/ms_1bd.py +++ b/plugins/input/ms_1bd.py @@ -3,11 +3,8 @@ import plugins import os -from functions import data_bytes -from functions import data_values from functions import colors from objects import globalstore -from objects.file_proj import proj_1bitdragon import logging logger_input = logging.getLogger('input') @@ -54,6 +51,8 @@ def get_prop(self, in_dict): in_dict['file_ext'] = '1bd' in_dict['track_lanes'] = True def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_1bitdragon + convproj_obj.set_timings(4, True) convproj_obj.type = 'ms' diff --git a/plugins/input/ms_lovelycomposer.py b/plugins/input/ms_lovelycomposer.py index cc5f26ad..13cdf636 100644 --- a/plugins/input/ms_lovelycomposer.py +++ b/plugins/input/ms_lovelycomposer.py @@ -9,7 +9,6 @@ from functions import colors from functions import xtramath from objects import globalstore -from objects.file_proj import proj_lovelycomposer # Name, Type, FadeIn, FadeOut, PitchMod, Slide, Vib, Color @@ -154,6 +153,8 @@ def get_prop(self, in_dict): in_dict['plugin_included'] = ['universal:synth-osc'] def supported_autodetect(self): return False def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_lovelycomposer + convproj_obj.type = 'ms' convproj_obj.set_timings(4, False) diff --git a/plugins/input/ms_notessimo_v2.py b/plugins/input/ms_notessimo_v2.py index 4463dbe9..ee2a2e78 100644 --- a/plugins/input/ms_notessimo_v2.py +++ b/plugins/input/ms_notessimo_v2.py @@ -1,12 +1,8 @@ # SPDX-FileCopyrightText: 2024 SatyrDiamond # SPDX-License-Identifier: GPL-3.0-or-later -from functions import data_bytes -from functions import note_data from functions import xtramath -from objects.convproj import project as convproj from objects import globalstore -from objects.file_proj import proj_notessimo_v2 import json import plugins import struct @@ -26,6 +22,8 @@ def get_prop(self, in_dict): in_dict['plugin_included'] = ['midi'] def supported_autodetect(self): return False def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_notessimo_v2 + global used_insts used_insts = [] diff --git a/plugins/input/ms_serato.py b/plugins/input/ms_serato.py index 0597c910..9b619e2a 100644 --- a/plugins/input/ms_serato.py +++ b/plugins/input/ms_serato.py @@ -1,9 +1,6 @@ # SPDX-FileCopyrightText: 2024 SatyrDiamond # SPDX-License-Identifier: GPL-3.0-or-later -from objects.file_proj import proj_serato -from functions import colors -from objects.convproj import sample_entry import plugins import urllib.parse import os @@ -67,6 +64,9 @@ def get_prop(self, in_dict): in_dict['file_ext'] = 'ssp' def supported_autodetect(self): return False def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_serato + from objects.convproj import sample_entry + convproj_obj.type = 'ms' convproj_obj.set_timings(960, True) diff --git a/plugins/input/r_ableton.py b/plugins/input/r_ableton.py index 9c20a293..8f9ca091 100644 --- a/plugins/input/r_ableton.py +++ b/plugins/input/r_ableton.py @@ -2,13 +2,7 @@ # SPDX-License-Identifier: GPL-3.0-or-later from functions import data_bytes -from functions import colors -from functions import data_values from objects import globalstore -from functions_plugin_ext import plugin_vst2 -from functions_plugin_ext import plugin_vst3 -from objects.file_proj import proj_ableton -from objects import auto_id from io import BytesIO import numpy as np @@ -101,6 +95,9 @@ def do_automation(convproj_obj, AutomationEnvelopes): convproj_obj.timesig = [(alsevent.Value%99)+1, 2**(alsevent.Value//99)] def do_devices(x_trackdevices, track_id, track_obj, convproj_obj): + from functions_plugin_ext import plugin_vst2 + from functions_plugin_ext import plugin_vst3 + global vector_shapesdata middlenote = 0 @@ -184,7 +181,7 @@ def do_devices(x_trackdevices, track_id, track_obj, convproj_obj): windata_obj.pos_y = int(VstPluginInfo['WinPosY']) vst_Path = str(VstPluginInfo['Path']).replace('/','\\') - convproj_obj.add_fileref(vst_Path, vst_Path) + convproj_obj.add_fileref(vst_Path, vst_Path, 'win') plugin_obj.filerefs['plugin'] = vst_Path plugin_obj.datavals_global.add('fourid', vst_UniqueId) @@ -361,6 +358,10 @@ def get_prop(self, in_dict): in_dict['audio_filetypes'] = ['wav','flac','ogg','mp3'] def parse(self, convproj_obj, input_file, dv_config): + from functions import colors + from objects.file_proj import proj_ableton + from objects import auto_id + global autoid_assoc global timesigid global vector_shapesdata diff --git a/plugins/input/r_amped.py b/plugins/input/r_amped.py index 0b654dc0..63e66f02 100644 --- a/plugins/input/r_amped.py +++ b/plugins/input/r_amped.py @@ -1,18 +1,13 @@ # SPDX-FileCopyrightText: 2024 SatyrDiamond # SPDX-License-Identifier: GPL-3.0-or-later -from functions import colors -from functions import data_bytes from functions import data_values from functions import xtramath from objects import globalstore -from objects.file_proj import proj_amped import xml.etree.ElementTree as ET import plugins import json import os -import struct -import base64 import zipfile from objects.exceptions import ProjectFileParserException @@ -344,6 +339,8 @@ def get_prop(self, in_dict): in_dict['plugin_included'] = ['native-amped', 'midi', 'synth-nonfree:europa', 'sampler:multi'] def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_amped + global samplefolder try: diff --git a/plugins/input/r_audiosauna.py b/plugins/input/r_audiosauna.py index 0aa7782d..453cc225 100644 --- a/plugins/input/r_audiosauna.py +++ b/plugins/input/r_audiosauna.py @@ -3,7 +3,6 @@ from functions import colors from objects import globalstore -from objects.file_proj import proj_audiosauna import plugins import zipfile import os @@ -45,6 +44,8 @@ def detect(self, input_file): except: return False def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_audiosauna + global cvpj_l convproj_obj.type = 'r' convproj_obj.set_timings(128, False) diff --git a/plugins/input/r_dawproject.py b/plugins/input/r_dawproject.py index 4025632c..d80e741c 100644 --- a/plugins/input/r_dawproject.py +++ b/plugins/input/r_dawproject.py @@ -1,11 +1,6 @@ # SPDX-FileCopyrightText: 2024 SatyrDiamond # SPDX-License-Identifier: GPL-3.0-or-later -from objects.file_proj import proj_dawproject -from functions_plugin_ext import plugin_vst2 -from functions_plugin_ext import plugin_vst3 -from functions import note_data -from objects import auto_id from objects.exceptions import ProjectFileParserException import plugins import zipfile @@ -67,6 +62,9 @@ def do_sends(convproj_obj, track_obj, dp_channel): do_param(convproj_obj, send_obj.params, send.volume, 'amount', None, 'float', ['send', send.id, 'amount']) def do_devices(convproj_obj, track_obj, ismaster, dp_devices): + from functions_plugin_ext import plugin_vst2 + from functions_plugin_ext import plugin_vst3 + for device in dp_devices: plugin_obj = None @@ -306,6 +304,9 @@ def get_prop(self, in_dict): in_dict['audio_stretch'] = ['warp'] in_dict['audio_nested'] = True def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_dawproject + from objects import auto_id + convproj_obj.type = 'r' convproj_obj.set_timings(1, True) diff --git a/plugins/input/r_flipper0.py b/plugins/input/r_flipper0.py index 3af8bb81..79f812f2 100644 --- a/plugins/input/r_flipper0.py +++ b/plugins/input/r_flipper0.py @@ -1,8 +1,6 @@ # SPDX-FileCopyrightText: 2024 SatyrDiamond # SPDX-License-Identifier: GPL-3.0-or-later -from objects.file_proj import proj_flipperzero -from functions import note_data import plugins class input_petaporon(plugins.base): @@ -16,6 +14,9 @@ def get_prop(self, in_dict): in_dict['file_ext'] = 'fmf' in_dict['track_nopl'] = True def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_flipperzero + from functions import note_data + convproj_obj.type = 'r' convproj_obj.set_timings(1, True) diff --git a/plugins/input/r_fruitytracks.py b/plugins/input/r_fruitytracks.py index dcc5a37b..65e55740 100644 --- a/plugins/input/r_fruitytracks.py +++ b/plugins/input/r_fruitytracks.py @@ -1,7 +1,6 @@ # SPDX-FileCopyrightText: 2024 SatyrDiamond # SPDX-License-Identifier: GPL-3.0-or-later -from objects.file_proj import proj_fruitytracks import plugins import json import os @@ -29,6 +28,8 @@ def detect(self, input_file): def supported_autodetect(self): return True def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_fruitytracks + convproj_obj.type = 'r' convproj_obj.set_timings(4, True) diff --git a/plugins/input/r_lmms.py b/plugins/input/r_lmms.py index cbe643d6..f2976c82 100644 --- a/plugins/input/r_lmms.py +++ b/plugins/input/r_lmms.py @@ -15,7 +15,6 @@ from functions import colors from objects.convproj import placements_notes from objects.convproj import placements_audio -from objects.file_proj import proj_lmms from objects.inst_params import fx_delay from objects.inst_params import fm_opl from objects.inst_params import chip_sid @@ -289,15 +288,15 @@ def decodeplugin(convproj_obj, lmms_plugin, pluginname): plugin_obj = sid_obj.to_cvpj(convproj_obj, pluginid) elif pluginname == "OPL2": - opn_obj = fm_opl.opl_inst() - opn_obj.set_opl2() + opl_obj = fm_opl.opl_inst() + opl_obj.set_opl2() - op_obj.feedback_1 = int(lmms_plugin.get_param('feedback', 0)) - op_obj.fm_1 = bool(lmms_plugin.get_param('fm', 0)) - op_obj.tremolo_depth = bool(lmms_plugin.get_param('trem_depth', 0)) - op_obj.vibrato_depth = bool(lmms_plugin.get_param('vib_depth', 0)) + opl_obj.feedback_1 = int(lmms_plugin.get_param('feedback', 0)) + opl_obj.fm_1 = bool(lmms_plugin.get_param('fm', 0)) + opl_obj.tremolo_depth = bool(lmms_plugin.get_param('trem_depth', 0)) + opl_obj.vibrato_depth = bool(lmms_plugin.get_param('vib_depth', 0)) for opnum in range(2): - op_obj = opn_obj.ops[opnum] + op_obj = opl_obj.ops[opnum] optxt = 'op'+str(opnum+1)+'_' op_obj.env_attack = 15-int(lmms_plugin.get_param(optxt+'a', 0)) @@ -312,7 +311,7 @@ def decodeplugin(convproj_obj, lmms_plugin, pluginname): op_obj.vibrato = bool(lmms_plugin.get_param(optxt+'vib', 0)) op_obj.waveform = lmms_plugin.get_param(optxt+'waveform', 0) - plugin_obj = opn_obj.to_cvpj(convproj_obj, pluginid) + plugin_obj = opl_obj.to_cvpj(convproj_obj, pluginid) else: plugin_obj, pluginid = convproj_obj.add_plugin_genid('native-lmms', pluginname) @@ -420,7 +419,7 @@ def lmms_decode_effectslot(convproj_obj, lmms_effect): DelayTimeSamples = lmms_plugin.get_param('DelayTimeSamples', 1) delay_obj = fx_delay.fx_delay() delay_obj.feedback[0] = float(lmms_plugin.get_param('FeebackAmount', 0.5)) - is_steps, timeval = get_timedata(float(DelayTimeSamples)) + is_steps, timeval = get_timedata(DelayTimeSamples) timing_obj = delay_obj.timing_add(0) if is_steps: timing_obj.set_steps(timeval, convproj_obj) else: timing_obj.set_seconds(float(DelayTimeSamples)) @@ -676,6 +675,8 @@ def detect(self, input_file): except ET.ParseError: output = False return output def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_lmms + global dataset global autoid_assoc global bbpld diff --git a/plugins/input/r_mekimeki.py b/plugins/input/r_mekimeki.py index 7f418878..ac81666d 100644 --- a/plugins/input/r_mekimeki.py +++ b/plugins/input/r_mekimeki.py @@ -4,7 +4,6 @@ import plugins import json from functions import xtramath -from functions import note_data import logging logger_input = logging.getLogger('input') @@ -31,6 +30,8 @@ def get_prop(self, in_dict): in_dict['track_nopl'] = True def supported_autodetect(self): return False def parse(self, convproj_obj, input_file, dv_config): + from functions import note_data + bytestream = open(input_file, 'r') file_data = bytestream.read() diff --git a/plugins/input/r_onlineseq.py b/plugins/input/r_onlineseq.py index 3db3f9b4..282e28e7 100644 --- a/plugins/input/r_onlineseq.py +++ b/plugins/input/r_onlineseq.py @@ -1,9 +1,6 @@ # SPDX-FileCopyrightText: 2024 SatyrDiamond # SPDX-License-Identifier: GPL-3.0-or-later -from objects.convproj import project as convproj -from objects.file_proj import proj_onlineseq -from objects.inst_params import fx_delay from objects import globalstore import plugins import struct @@ -23,6 +20,9 @@ def get_prop(self, in_dict): in_dict['plugin_included'] = ['midi','native-onlineseq','universal:synth-osc'] def supported_autodetect(self): return False def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_onlineseq + from objects.inst_params import fx_delay + global onlseq_notelist global onlseq_customnames diff --git a/plugins/input/r_orgyana.py b/plugins/input/r_orgyana.py index c00611d5..f39a311d 100644 --- a/plugins/input/r_orgyana.py +++ b/plugins/input/r_orgyana.py @@ -1,10 +1,7 @@ # SPDX-FileCopyrightText: 2024 SatyrDiamond # SPDX-License-Identifier: GPL-3.0-or-later -from functions import colors from objects import globalstore -from objects import audio_data -from objects.file_proj import proj_orgyana import plugins import os @@ -27,6 +24,10 @@ def detect(self, input_file): else: return False def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_orgyana + from functions import colors + from objects import audio_data + convproj_obj.type = 'r' convproj_obj.set_timings(4, True) diff --git a/plugins/input/r_petaporon.py b/plugins/input/r_petaporon.py index 10e25a36..79d50214 100644 --- a/plugins/input/r_petaporon.py +++ b/plugins/input/r_petaporon.py @@ -2,7 +2,6 @@ # SPDX-License-Identifier: GPL-3.0-or-later from objects import globalstore -from functions import colors from io import BytesIO import json import plugins @@ -32,6 +31,7 @@ def get_prop(self, in_dict): in_dict['track_nopl'] = True in_dict['plugin_included'] = ['universal:synth-osc'] def parse(self, convproj_obj, input_file, dv_config): + from functions import colors bytestream = open(input_file, 'r') try: diff --git a/plugins/input/r_piyopiyo.py b/plugins/input/r_piyopiyo.py index 1050f891..ede84634 100644 --- a/plugins/input/r_piyopiyo.py +++ b/plugins/input/r_piyopiyo.py @@ -5,9 +5,7 @@ import json import struct import os.path -from functions import colors from objects import globalstore -from objects.file_proj import proj_piyopiyo def parse_notes(convproj_obj, trackid, notes_data, track_obj, keyoffset): for pos, nd in enumerate(notes_data): @@ -36,6 +34,9 @@ def detect(self, input_file): else: return False def parse(self, convproj_obj, input_file, dv_config): + from functions import colors + from objects.file_proj import proj_piyopiyo + convproj_obj.type = 'r' convproj_obj.set_timings(4, True) diff --git a/plugins/input/r_reaper.py b/plugins/input/r_reaper.py index 52c0ca0a..153cffed 100644 --- a/plugins/input/r_reaper.py +++ b/plugins/input/r_reaper.py @@ -2,17 +2,11 @@ # SPDX-License-Identifier: GPL-3.0-or-later from functions import data_bytes -from functions import colors -from functions_plugin_ext import plugin_vst2 -from functions_plugin_ext import plugin_vst3 import plugins import json import os import struct import rpp -import base64 -from io import BytesIO -from objects.file_proj import proj_reaper def reaper_color_to_cvpj_color(i_color, isreversed): bytecolors = struct.pack('i', i_color) @@ -71,6 +65,10 @@ def get_prop(self, in_dict): in_dict['audio_filetypes'] = ['wav','flac','ogg','mp3'] def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_reaper + from functions_plugin_ext import plugin_vst2 + from functions_plugin_ext import plugin_vst3 + bytestream = open(input_file, 'r') rpp_data = rpp.load(bytestream) diff --git a/plugins/input/r_soundation.py b/plugins/input/r_soundation.py index a0df8ee8..7abffeeb 100644 --- a/plugins/input/r_soundation.py +++ b/plugins/input/r_soundation.py @@ -2,10 +2,8 @@ # SPDX-License-Identifier: GPL-3.0-or-later from functions import data_bytes -from functions import colors from functions import xtramath from objects import globalstore -from objects.file_proj import proj_soundation from objects.exceptions import ProjectFileParserException import plugins import struct @@ -56,6 +54,9 @@ def get_prop(self, in_dict): in_dict['audio_filetypes'] = ['wav','flac','ogg','mp3'] def parse(self, i_convproj_obj, input_file, dv_config): + from functions import colors + from objects.file_proj import proj_soundation + global dataset global convproj_obj diff --git a/plugins/input/r_temper.py b/plugins/input/r_temper.py index bf941eb2..32389752 100644 --- a/plugins/input/r_temper.py +++ b/plugins/input/r_temper.py @@ -4,7 +4,6 @@ from functions import note_data from functions import value_midi import xml.etree.ElementTree as ET -from objects.file_proj import proj_temper import plugins import json @@ -28,6 +27,8 @@ def detect(self, input_file): except ET.ParseError: output = False return output def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_temper + convproj_obj.type = 'r' convproj_obj.set_timings(6716, False) diff --git a/plugins/input/r_waveform.py b/plugins/input/r_waveform.py index dd333f5b..7be295e2 100644 --- a/plugins/input/r_waveform.py +++ b/plugins/input/r_waveform.py @@ -2,10 +2,6 @@ # SPDX-License-Identifier: GPL-3.0-or-later from functions import colors -from objects.file_proj import proj_waveform -from objects.inst_params import juce_plugin -from functions_plugin import juce_memoryblock -from objects.data_bytes import bytereader from objects import globalstore from lxml import etree import plugins @@ -40,6 +36,7 @@ def sampler_decode_dict(sampler_data, indict): return set_name, dictpart def sampler_parse(indata): + from objects.data_bytes import bytereader sampler_data = bytereader.bytereader() sampler_data.load_raw(indata) sampleheader = {} @@ -67,6 +64,7 @@ def soundlayer_samplepart(sp_obj, soundlayer): if 'looped' in soundlayer: sp_obj.loop_active = soundlayer['looped'] def do_plugin(convproj_obj, wf_plugin, track_obj): + from functions_plugin import juce_memoryblock if wf_plugin.plugtype == 'vst': vstname = wf_plugin.params['name'] if "name" in wf_plugin.params else '' @@ -97,6 +95,7 @@ def do_plugin(convproj_obj, wf_plugin, track_obj): pass else: try: + from objects.inst_params import juce_plugin juceobj = juce_plugin.juce_plugin() juceobj.uniqueId = wf_plugin.params['uniqueId'] if "uniqueId" in wf_plugin.params else '' juceobj.name = wf_plugin.params['name'] if "name" in wf_plugin.params else '' @@ -208,6 +207,7 @@ def get_prop(self, in_dict): in_dict['plugin_ext'] = ['vst2'] def supported_autodetect(self): return False def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_waveform global cvpj_l convproj_obj.type = 'r' diff --git a/plugins/input/r_wavtool.py b/plugins/input/r_wavtool.py index c4642777..c70af1ce 100644 --- a/plugins/input/r_wavtool.py +++ b/plugins/input/r_wavtool.py @@ -2,13 +2,6 @@ # SPDX-License-Identifier: GPL-3.0-or-later from functions import colors -from objects.file_proj import proj_wavtool -from functions_plugin_ext import plugin_vst2 -from functions_plugin_ext import plugin_vst3 -from functions_plugin_ext import data_vc2xml -from functions_plugin import juce_memoryblock -from objects.inst_params import fx_delay -from objects.inst_params import juce_plugin from objects.exceptions import ProjectFileParserException from functions import data_xml import plugins @@ -33,6 +26,11 @@ def extract_audio(audioname): return audio_filename def add_devices(convproj_obj, track_obj, trackid, devices_obj): + from functions_plugin_ext import plugin_vst2 + from functions_plugin_ext import plugin_vst3 + from objects.inst_params import fx_delay + from functions_plugin import juce_memoryblock + from functions_plugin_ext import data_vc2xml if trackid in devices_obj.tracks: device_track = devices_obj.tracks[trackid] @@ -375,6 +373,8 @@ def get_prop(self, in_dict): in_dict['plugin_included'] = ['native-wavtool','sampler:single','sampler:multi'] def supported_autodetect(self): return False def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_wavtool + global zip_data global samplefolder diff --git a/plugins/input/ri_caustic.py b/plugins/input/ri_caustic.py index 0a9210d6..8e435984 100644 --- a/plugins/input/ri_caustic.py +++ b/plugins/input/ri_caustic.py @@ -2,17 +2,15 @@ # SPDX-License-Identifier: GPL-3.0-or-later from dataclasses import dataclass -from functions import data_bytes -from functions import xtramath -from objects import audio_data + from objects import globalstore -from objects.file_proj import proj_caustic +from functions import xtramath + import json import os.path import plugins import struct - caustic_fxtype = {} caustic_fxtype[0] = 'delay' caustic_fxtype[1] = 'reverb' @@ -106,6 +104,9 @@ def get_prop(self, in_dict): in_dict['audio_filetypes'] = ['wav'] def supported_autodetect(self): return False def parse(self, convproj_obj, input_file, dv_config): + from objects import audio_data + from objects.file_proj import proj_caustic + global dataset convproj_obj.type = 'ri' diff --git a/plugins/input/rm_adlib_rol.py b/plugins/input/rm_adlib_rol.py index ff27b6cb..26430344 100644 --- a/plugins/input/rm_adlib_rol.py +++ b/plugins/input/rm_adlib_rol.py @@ -1,15 +1,10 @@ # SPDX-FileCopyrightText: 2024 SatyrDiamond # SPDX-License-Identifier: GPL-3.0-or-later -from functions_plugin_cvpj import params_fm -from functions import data_bytes -from functions import data_values -from objects import globalstore -from objects.file_proj import proj_adlib_rol -from objects.file import adlib_bnk - import plugins +from objects import globalstore + class input_adlib_rol(plugins.base): def __init__(self): pass def is_dawvert_plugin(self): return 'input' @@ -29,6 +24,9 @@ def detect(self, input_file): if bytesdata == b'\\roll\\default\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00': return True else: return False def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_adlib_rol + from objects.file import adlib_bnk + convproj_obj.type = 'rm' project_obj = proj_adlib_rol.adlib_rol_project() diff --git a/plugins/input/rm_adlib_sop.py b/plugins/input/rm_adlib_sop.py index 8585e5b1..16d21cf5 100644 --- a/plugins/input/rm_adlib_sop.py +++ b/plugins/input/rm_adlib_sop.py @@ -4,9 +4,6 @@ import plugins import os.path -from functions import data_bytes -from objects.file_proj import proj_adlib_sop - endtxt = ['', '4OP', '2OP'] panvals = [1, 0, -1] maincolor = [0.39, 0.16, 0.78] @@ -30,6 +27,8 @@ def detect(self, input_file): if bytesdata == b'sopepos': return True else: return False def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_adlib_sop + song_file = open(input_file, 'rb') convproj_obj.type = 'rm' diff --git a/plugins/input/rm_mariopaint_msq.py b/plugins/input/rm_mariopaint_msq.py index c784169e..6927bd51 100644 --- a/plugins/input/rm_mariopaint_msq.py +++ b/plugins/input/rm_mariopaint_msq.py @@ -1,8 +1,6 @@ # SPDX-FileCopyrightText: 2024 SatyrDiamond # SPDX-License-Identifier: GPL-3.0-or-later -from objects.songinput import mariopaint -from functions import xtramath import io import plugins @@ -52,6 +50,8 @@ def get_prop(self, in_dict): in_dict['plugin_included'] = ['midi'] def supported_autodetect(self): return False def parse(self, convproj_obj, input_file, dv_config): + from objects.songinput import mariopaint + convproj_obj.type = 'rm' mariopaint_obj = mariopaint.mariopaint_song() diff --git a/plugins/input/rm_mariopaint_mss.py b/plugins/input/rm_mariopaint_mss.py index 5cd2cf2d..5865b3bb 100644 --- a/plugins/input/rm_mariopaint_mss.py +++ b/plugins/input/rm_mariopaint_mss.py @@ -1,9 +1,7 @@ # SPDX-FileCopyrightText: 2024 SatyrDiamond # SPDX-License-Identifier: GPL-3.0-or-later -from objects.songinput import mariopaint from objects.exceptions import ProjectFileParserException -from objects import globalstore import plugins import xml.etree.ElementTree as ET @@ -55,6 +53,8 @@ def detect(self, input_file): except ET.ParseError: output = False return output def parse(self, convproj_obj, input_file, dv_config): + from objects.songinput import mariopaint + convproj_obj.type = 'rm' mariopaint_obj = mariopaint.mariopaint_song() diff --git a/plugins/input/rm_mariopaint_smp.py b/plugins/input/rm_mariopaint_smp.py index 6edca06b..3a26a91e 100644 --- a/plugins/input/rm_mariopaint_smp.py +++ b/plugins/input/rm_mariopaint_smp.py @@ -1,7 +1,6 @@ # SPDX-FileCopyrightText: 2024 SatyrDiamond # SPDX-License-Identifier: GPL-3.0-or-later -from objects.songinput import mariopaint import io import plugins @@ -26,6 +25,8 @@ def get_prop(self, in_dict): in_dict['plugin_included'] = ['midi'] def supported_autodetect(self): return False def parse(self, convproj_obj, input_file, dv_config): + from objects.songinput import mariopaint + convproj_obj.type = 'rm' mariopaint_obj = mariopaint.mariopaint_song() diff --git a/plugins/input/rm_mc_noteblock_studio.py b/plugins/input/rm_mc_noteblock_studio.py index a5949152..2728124b 100644 --- a/plugins/input/rm_mc_noteblock_studio.py +++ b/plugins/input/rm_mc_noteblock_studio.py @@ -1,15 +1,12 @@ # SPDX-FileCopyrightText: 2024 SatyrDiamond # SPDX-License-Identifier: GPL-3.0-or-later -from functions import data_bytes -from functions import colors -from objects import globalstore -from objects.file_proj import proj_nbs -from objects.convproj import fileref import json import math import plugins +from objects import globalstore + class input_gt_mnbs(plugins.base): def __init__(self): pass def is_dawvert_plugin(self): return 'input' @@ -24,6 +21,9 @@ def get_prop(self, in_dict): in_dict['plugin_included'] = ['sampler:single'] def supported_autodetect(self): return False def parse(self, convproj_obj, input_file, dv_config): + from objects.file_proj import proj_nbs + from objects.convproj import fileref + convproj_obj.type = 'rm' convproj_obj.set_timings(4, True) diff --git a/plugins/input/rm_midi.py b/plugins/input/rm_midi.py index 10bdbb87..5c878f01 100644 --- a/plugins/input/rm_midi.py +++ b/plugins/input/rm_midi.py @@ -2,13 +2,13 @@ # SPDX-License-Identifier: GPL-3.0-or-later import plugins -from objects.songinput import midi_in import logging logger_input = logging.getLogger('input') class reader_midifile_class(): def do_song(self, input_file): + from objects.songinput import midi_in from objects_midi.parser import MidiFile midifile = MidiFile.fromFile(input_file) ppq = midifile.ppqn diff --git a/plugins/input/rm_pxtone.py b/plugins/input/rm_pxtone.py index 65ea8ee3..f9adb6fa 100644 --- a/plugins/input/rm_pxtone.py +++ b/plugins/input/rm_pxtone.py @@ -1,15 +1,12 @@ # SPDX-FileCopyrightText: 2024 SatyrDiamond # SPDX-License-Identifier: GPL-3.0-or-later -from objects import audio_data -from functions import colors -from objects import globalstore -from objects.file_proj import proj_pxtone import struct import math import os import numpy as np import plugins +from objects import globalstore def get_float(in_int): return struct.unpack("