@@ -24,12 +24,12 @@ except: | |||||
# Imports (Global) | # Imports (Global) | ||||
from platform import architecture | from platform import architecture | ||||
from PyQt4.QtCore import QSettings | |||||
from PyQt4.QtGui import QApplication, QLabel, QMainWindow, QSizePolicy | from PyQt4.QtGui import QApplication, QLabel, QMainWindow, QSizePolicy | ||||
# Imports (Custom Stuff) | # Imports (Custom Stuff) | ||||
import ui_cadence | import ui_cadence | ||||
import systray | import systray | ||||
from shared_cadence import * | |||||
from shared_jack import * | from shared_jack import * | ||||
from shared_settings import * | from shared_settings import * | ||||
@@ -50,30 +50,6 @@ if haveWine: | |||||
# --------------------------------------------------------------------- | # --------------------------------------------------------------------- | ||||
DEFAULT_LADSPA_PATH = [ | |||||
os.path.join(HOME, ".ladspa"), | |||||
os.path.join("/", "usr", "lib", "ladspa"), | |||||
os.path.join("/", "usr", "local", "lib", "ladspa") | |||||
] | |||||
DEFAULT_DSSI_PATH = [ | |||||
os.path.join(HOME, ".dssi"), | |||||
os.path.join("/", "usr", "lib", "dssi"), | |||||
os.path.join("/", "usr", "local", "lib", "dssi") | |||||
] | |||||
DEFAULT_LV2_PATH = [ | |||||
os.path.join(HOME, ".lv2"), | |||||
os.path.join("/", "usr", "lib", "lv2"), | |||||
os.path.join("/", "usr", "local", "lib", "lv2") | |||||
] | |||||
DEFAULT_VST_PATH = [ | |||||
os.path.join(HOME, ".vst"), | |||||
os.path.join("/", "usr", "lib", "vst"), | |||||
os.path.join("/", "usr", "local", "lib", "vst") | |||||
] | |||||
DESKTOP_X_IMAGE = [ | DESKTOP_X_IMAGE = [ | ||||
"eog.desktop", | "eog.desktop", | ||||
"kde4/digikam.desktop", | "kde4/digikam.desktop", | ||||
@@ -112,9 +88,6 @@ XDG_APPLICATIONS_PATH = [ | |||||
WINEASIO_PREFIX = "HKEY_CURRENT_USER\Software\Wine\WineASIO" | WINEASIO_PREFIX = "HKEY_CURRENT_USER\Software\Wine\WineASIO" | ||||
# Global Settings | |||||
GlobalSettings = QSettings("Cadence", "GlobalSettings") | |||||
# --------------------------------------------------------------------- | # --------------------------------------------------------------------- | ||||
def get_architecture(): | def get_architecture(): | ||||
@@ -2,21 +2,15 @@ | |||||
# -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||||
# Imports (Global) | # Imports (Global) | ||||
import dbus, os, sys | |||||
from PyQt4.QtCore import QCoreApplication, QProcess, QSettings | |||||
from time import sleep | |||||
import dbus, sys | |||||
from PyQt4.QtCore import QCoreApplication | |||||
# Imports (Custom Stuff) | # Imports (Custom Stuff) | ||||
from shared import * | |||||
from shared_cadence import * | |||||
# Cadence Global Settings | # Cadence Global Settings | ||||
GlobalSettings = QSettings("Cadence", "GlobalSettings") | GlobalSettings = QSettings("Cadence", "GlobalSettings") | ||||
DEFAULT_LADSPA_PATH = "/usr/lib/ladspa:/usr/local/lib/ladspa:/usr/lib32/ladspa:"+HOME+"/.ladspa" | |||||
DEFAULT_DSSI_PATH = "/usr/lib/dssi:/usr/local/lib/dssi:/usr/lib32/dssi:"+HOME+"/.dssi" | |||||
DEFAULT_LV2_PATH = "/usr/lib/lv2:/usr/local/lib/lv2:"+HOME+"/.lv2" | |||||
DEFAULT_VST_PATH = "/usr/lib/vst:/usr/local/lib/vst:/usr/lib32/vst:"+HOME+"/.vst" | |||||
# DBus | # DBus | ||||
class DBus(object): | class DBus(object): | ||||
__slots__ = [ | __slots__ = [ | ||||
@@ -28,7 +22,83 @@ DBus = DBus() | |||||
# Start JACK, A2J and Pulse, according to user settings | # Start JACK, A2J and Pulse, according to user settings | ||||
def startSession(): | def startSession(): | ||||
pass | |||||
# 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 | |||||
# Load settings (JACK etc) | |||||
if not GlobalSettings.value("JACK/AutoStart", True, type=bool): | |||||
print("JACK is set to NOT auto-start on login") | |||||
return True | |||||
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 | |||||
ladishNotifyHack = False | |||||
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 | |||||
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 | |||||
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() | |||||
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(): | def printLADSPA_PATH(): | ||||
EXTRA_LADSPA_DIRS = GlobalSettings.value("AudioPlugins/EXTRA_LADSPA_PATH", "", type=str).split(":") | EXTRA_LADSPA_DIRS = GlobalSettings.value("AudioPlugins/EXTRA_LADSPA_PATH", "", type=str).split(":") | ||||
@@ -0,0 +1,89 @@ | |||||
#!/usr/bin/env python3 | |||||
# -*- coding: utf-8 -*- | |||||
# Imports (Global) | |||||
import os | |||||
from PyQt4.QtCore import QProcess, QSettings | |||||
from time import sleep | |||||
# Imports (Custom Stuff) | |||||
from shared import * | |||||
# Default Plugin PATHs | |||||
DEFAULT_LADSPA_PATH = [ | |||||
os.path.join(HOME, ".ladspa"), | |||||
os.path.join("/", "usr", "lib", "ladspa"), | |||||
os.path.join("/", "usr", "local", "lib", "ladspa") | |||||
] | |||||
DEFAULT_DSSI_PATH = [ | |||||
os.path.join(HOME, ".dssi"), | |||||
os.path.join("/", "usr", "lib", "dssi"), | |||||
os.path.join("/", "usr", "local", "lib", "dssi") | |||||
] | |||||
DEFAULT_LV2_PATH = [ | |||||
os.path.join(HOME, ".lv2"), | |||||
os.path.join("/", "usr", "lib", "lv2"), | |||||
os.path.join("/", "usr", "local", "lib", "lv2") | |||||
] | |||||
DEFAULT_VST_PATH = [ | |||||
os.path.join(HOME, ".vst"), | |||||
os.path.join("/", "usr", "lib", "vst"), | |||||
os.path.join("/", "usr", "local", "lib", "vst") | |||||
] | |||||
# Global Settings | |||||
GlobalSettings = QSettings("Cadence", "GlobalSettings") | |||||
# Get Process list | |||||
def getProcList(): | |||||
retProcs = [] | |||||
process = QProcess() | |||||
process.start("ps", ["-e"]) | |||||
process.waitForFinished() | |||||
processDump = process.readAllStandardOutput().split("\n") | |||||
for i in range(len(processDump)): | |||||
if (i == 0): continue | |||||
dumpTest = str(processDump[i]).rsplit(":", 1)[-1].split(" ") | |||||
if len(dumpTest) > 1: | |||||
retProcs.append(dumpTest[1]) | |||||
return retProcs | |||||
def stopAllAudioProcesses(): | |||||
process = QProcess() | |||||
procsTerm = ["a2j", "a2jmidid", "artsd", "jackd", "jackdmp", "knotify4", "lash", "ladishd", "ladiappd", "ladiconfd", "jmcore"] | |||||
procsKill = ["jackdbus", "pulseaudio"] | |||||
tries = 20 | |||||
process.start("killall", procsTerm) | |||||
process.waitForFinished() | |||||
for x in range(tries): | |||||
procsList = getProcList() | |||||
for term in range(len(procsTerm)): | |||||
if term in procsList: | |||||
break | |||||
else: | |||||
sleep(0.1) | |||||
else: | |||||
break | |||||
process.start("killall", ["-KILL"] + procsKill) | |||||
process.waitForFinished() | |||||
for x in range(tries): | |||||
procsList = getProcList() | |||||
for kill in range(len(procsKill)): | |||||
if kill in procsList: | |||||
break | |||||
else: | |||||
sleep(0.1) | |||||
else: | |||||
break |