#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Imports (Global) import dbus, sys from PyQt4.QtCore import QCoreApplication # Imports (Custom Stuff) from shared_cadence import * # Cadence Global Settings GlobalSettings = QSettings("Cadence", "GlobalSettings") # DBus class DBus(object): __slots__ = [ 'bus', 'a2j', 'jack' ] DBus = DBus() def forceReset(): # Kill all audio processes stopAllAudioProcesses() # Remove configs configFiles = ( # Cadence GlobalSettings os.path.join(HOME, ".asoundrc"), # ALSA settings os.path.join(HOME, ".config", "Cadence", "GlobalSettings.conf"), # JACK2 settings os.path.join(HOME, ".config", "jack", "conf.xml"), # JACK1 settings os.path.join(HOME, ".config", "jack", "conf-jack1.xml") ) for config in configFiles: if os.path.exists(config): os.remove(config) # Start JACK, A2J and Pulse, according to user settings def startSession(): # Check if JACK is set to auto-start if not GlobalSettings.value("JACK/AutoStart", False, type=bool): print("JACK is set to NOT auto-start on login") return True # Kill all audio processes first stopAllAudioProcesses() # Connect to DBus DBus.bus = dbus.SessionBus() DBus.jack = DBus.bus.get_object("org.jackaudio.service", "/org/jackaudio/Controller") try: DBus.a2j = dbus.Interface(DBus.bus.get_object("org.gna.home.a2jmidid", "/"), "org.gna.home.a2jmidid.control") except: DBus.a2j = None if GlobalSettings.value("JACK/AutoLoadLadishStudio", False, type=bool): try: ladish_control = DBus.bus.get_object("org.ladish", "/org/ladish/Control") except: startJack() return False try: ladish_conf = DBus.bus.get_object("org.ladish.conf", "/org/ladish/conf") except: ladish_conf = None ladishStudioName = dbus.String(GlobalSettings.value("JACK/LadishStudioName", "", type=str)) ladishStudioListDump = ladish_control.GetStudioList() for thisStudioName, thisStudioDict in ladishStudioListDump: if ladishStudioName == thisStudioName: if ladish_conf and ladish_conf.get('/org/ladish/daemon/notify')[0] == "true": ladish_conf.set('/org/ladish/daemon/notify', "false") ladishNotifyHack = True else: ladishNotifyHack = False ladish_control.LoadStudio(thisStudioName) ladish_studio = DBus.bus.get_object("org.ladish", "/org/ladish/Studio") if not bool(ladish_studio.IsStarted()): ladish_studio.Start() if ladishNotifyHack: ladish_conf.set('/org/ladish/daemon/notify', "true") break else: startJack() else: startJack() if not bool(DBus.jack.IsStarted()): print("JACK Failed to Start") return False # Start bridges according to user settings # ALSA-Audio if GlobalSettings.value("ALSA-Audio/BridgeIndexType", iAlsaFileNone, type=int) == iAlsaFileLoop: os.system("cadence-aloop-daemon &") sleep(0.5) # ALSA-MIDI if GlobalSettings.value("A2J/AutoStart", True, type=bool) and DBus.a2j and not bool(DBus.a2j.is_started()): a2jExportHW = GlobalSettings.value("A2J/ExportHW", True, type=bool) DBus.a2j.set_hw_export(a2jExportHW) DBus.a2j.start() # PulseAudio if GlobalSettings.value("Pulse2JACK/AutoStart", True, type=bool): if GlobalSettings.value("Pulse2JACK/PlaybackModeOnly", False, type=bool): os.system("cadence-pulse2jack -p") else: os.system("cadence-pulse2jack") print("JACK Started Successfully") return True def startJack(): if not bool(DBus.jack.IsStarted()): DBus.jack.StartServer() def printLADSPA_PATH(): EXTRA_LADSPA_DIRS = GlobalSettings.value("AudioPlugins/EXTRA_LADSPA_PATH", "", type=str).split(":") LADSPA_PATH_str = ":".join(DEFAULT_LADSPA_PATH) for i in range(len(EXTRA_LADSPA_DIRS)): if EXTRA_LADSPA_DIRS[i]: LADSPA_PATH_str += ":"+EXTRA_LADSPA_DIRS[i] print(LADSPA_PATH_str) def printDSSI_PATH(): EXTRA_DSSI_DIRS = GlobalSettings.value("AudioPlugins/EXTRA_DSSI_PATH", "", type=str).split(":") DSSI_PATH_str = ":".join(DEFAULT_DSSI_PATH) for i in range(len(EXTRA_DSSI_DIRS)): if EXTRA_DSSI_DIRS[i]: DSSI_PATH_str += ":"+EXTRA_DSSI_DIRS[i] print(DSSI_PATH_str) def printLV2_PATH(): EXTRA_LV2_DIRS = GlobalSettings.value("AudioPlugins/EXTRA_LV2_PATH", "", type=str).split(":") LV2_PATH_str = ":".join(DEFAULT_LV2_PATH) for i in range(len(EXTRA_LV2_DIRS)): if EXTRA_LV2_DIRS[i]: LV2_PATH_str += ":"+EXTRA_LV2_DIRS[i] print(LV2_PATH_str) def printVST_PATH(): EXTRA_VST_DIRS = GlobalSettings.value("AudioPlugins/EXTRA_VST_PATH", "", type=str).split(":") VST_PATH_str = ":".join(DEFAULT_VST_PATH) for i in range(len(EXTRA_VST_DIRS)): if EXTRA_VST_DIRS[i]: VST_PATH_str += ":"+EXTRA_VST_DIRS[i] print(VST_PATH_str) def printArguments(): print("\t-s|--start \tStart session") print("\t --reset \tForce-reset all JACK daemons and settings (disables auto-start at login)") print("") print("\t-h|--help \tShow this help message") print("\t-v|--version\tShow version") def printError(cmd): print("Invalid arguments") print("Run '%s -h' for help" % (cmd)) def printHelp(cmd): print("Usage: %s [cmd]" % (cmd)) printArguments() def printVersion(): print("Cadence version %s" % (VERSION)) print("Developed by falkTX and the rest of the KXStudio Team") #--------------- main ------------------ if __name__ == '__main__': # App initialization app = QCoreApplication(sys.argv) app.setApplicationName("Cadence") app.setApplicationVersion(VERSION) app.setOrganizationName("Cadence") # Check arguments cmd = sys.argv[0] if len(app.arguments()) == 1: printHelp(cmd) elif len(app.arguments()) == 2: arg = app.arguments()[1] if arg == "--printLADSPA_PATH": printLADSPA_PATH() elif arg == "--printDSSI_PATH": printDSSI_PATH() elif arg == "--printLV2_PATH": printLV2_PATH() elif arg == "--printVST_PATH": printVST_PATH() elif arg == "--reset": forceReset() elif arg in ["-s", "--s", "-start", "--start"]: sys.exit(startSession()) elif arg in ["-h", "--h", "-help", "--help"]: printHelp(cmd) elif arg in ["-v", "--v", "-version", "--version"]: printVersion() else: printError(cmd) else: printError(cmd) # Exit sys.exit(0)