Browse Source

Cadence: Implement session auto-start jack

tags/v0.9.0
falkTX 12 years ago
parent
commit
668bb50e36
3 changed files with 170 additions and 38 deletions
  1. +1
    -28
      src/cadence.py
  2. +80
    -10
      src/cadence_session_start.py
  3. +89
    -0
      src/shared_cadence.py

+ 1
- 28
src/cadence.py View File

@@ -24,12 +24,12 @@ except:

# Imports (Global)
from platform import architecture
from PyQt4.QtCore import QSettings
from PyQt4.QtGui import QApplication, QLabel, QMainWindow, QSizePolicy

# Imports (Custom Stuff)
import ui_cadence
import systray
from shared_cadence import *
from shared_jack 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 = [
"eog.desktop",
"kde4/digikam.desktop",
@@ -112,9 +88,6 @@ XDG_APPLICATIONS_PATH = [

WINEASIO_PREFIX = "HKEY_CURRENT_USER\Software\Wine\WineASIO"

# Global Settings
GlobalSettings = QSettings("Cadence", "GlobalSettings")

# ---------------------------------------------------------------------

def get_architecture():


+ 80
- 10
src/cadence_session_start.py View File

@@ -2,21 +2,15 @@
# -*- coding: utf-8 -*-

# 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)
from shared import *
from shared_cadence import *

# Cadence Global Settings
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
class DBus(object):
__slots__ = [
@@ -28,7 +22,83 @@ DBus = DBus()

# Start JACK, A2J and Pulse, according to user settings
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():
EXTRA_LADSPA_DIRS = GlobalSettings.value("AudioPlugins/EXTRA_LADSPA_PATH", "", type=str).split(":")


+ 89
- 0
src/shared_cadence.py View File

@@ -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

Loading…
Cancel
Save