|
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
-
- # Imports (Global)
- import os
- from signal import signal, SIGINT, SIGTERM
- from time import sleep
- from PyQt4.QtCore import QProcess
-
- # Imports (Custom Stuff)
- import jacklib
-
- # --------------------------------------------------
- # Global loop check
-
- global doLoop, doRunNow, procIn, procOut
- doLoop = True
- doRunNow = True
- procIn = QProcess()
- procOut = QProcess()
- checkFile = "/tmp/.cadence-aloop-daemon.x"
-
- # --------------------------------------------------
- # Global JACK variables
-
- global bufferSize, sampleRate
- bufferSize = 1024
- sampleRate = 44100
-
- # --------------------------------------------------
- # quit on SIGINT or SIGTERM
-
- def signal_handler(sig, frame=0):
- global doLoop
- doLoop = False
-
- # --------------------------------------------------
- # listen to jack buffer size changes
-
- def buffer_size_callback(newBufferSize, arg):
- global doRunNow, bufferSize
- bufferSize = newBufferSize
- doRunNow = True
- return 0
-
- # --------------------------------------------------
- # listen to jack shutdown
-
- def shutdown_callback(arg):
- global doLoop
- doLoop = False
-
- # --------------------------------------------------
- # run alsa_in and alsa_out
- def run_alsa_bridge():
- global bufferSize, sampleRate
- global procIn, procOut
-
- if procIn.state() != QProcess.NotRunning:
- procIn.terminate()
- procIn.waitForFinished(1000)
- if procOut.state() != QProcess.NotRunning:
- procOut.terminate()
- procOut.waitForFinished(1000)
-
- procIn.start("env", ["JACK_SAMPLE_RATE=%i" % sampleRate, "JACK_PERIOD_SIZE=%i" % bufferSize, "alsa_in", "-j", "alsa2jack", "-d", "cloop", "-q", "1"])
- procOut.start("env", ["JACK_SAMPLE_RATE=%i" % sampleRate, "JACK_PERIOD_SIZE=%i" % bufferSize, "alsa_out", "-j", "jack2alsa", "-d", "ploop", "-q", "1"])
-
- procIn.waitForStarted()
- procOut.waitForStarted()
-
- # Pause it for a bit, and connect to the system ports
- sleep(1)
- jacklib.connect(client, "alsa2jack:capture_1", "system:playback_1")
- jacklib.connect(client, "alsa2jack:capture_2", "system:playback_2")
- jacklib.connect(client, "system:capture_1", "jack2alsa:playback_1")
- jacklib.connect(client, "system:capture_2", "jack2alsa:playback_2")
-
- #--------------- main ------------------
- if __name__ == '__main__':
-
- # Init JACK client
- client = jacklib.client_open("cadence-aloop-daemon", jacklib.JackUseExactName, None)
-
- if not client:
- quit()
-
- jacklib.set_buffer_size_callback(client, buffer_size_callback, None)
- jacklib.on_shutdown(client, shutdown_callback, None)
- jacklib.activate(client)
-
- # Quit when requested
- signal(SIGINT, signal_handler)
- signal(SIGTERM, signal_handler)
-
- # Get initial values
- sampleRate = jacklib.get_sample_rate(client)
- bufferSize = jacklib.get_buffer_size(client)
-
- # Create check file
- if not os.path.exists(checkFile):
- os.mknod(checkFile)
-
- # Keep running until told otherwise
- while doLoop and os.path.exists(checkFile):
- if doRunNow:
- doRunNow = False
- run_alsa_bridge()
- sleep(1)
-
- # Close JACK client
- jacklib.deactivate(client)
- jacklib.client_close(client)
-
- if os.path.exists(checkFile):
- os.remove(checkFile)
-
- if procIn.state() != QProcess.NotRunning:
- procIn.terminate()
- procIn.waitForFinished(1000)
- if procOut.state() != QProcess.NotRunning:
- procOut.terminate()
- procOut.waitForFinished(1000)
|