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("