Module calvo_cli_tools.jack_tools.client

Query JACK status from a client perspective.

Expand source code
#!/usr/bin/env python3
#
#  client.py
#
"""Query JACK status from a client perspective."""

import argparse
import string
import sys
import json
import jack


def main(args=None):
    ap = argparse.ArgumentParser(description=__doc__)
    ap.add_argument(
        '-c', '--client-name',
        metavar='NAME',
        default='jack_client',
        help="JACK client name (default: %(default)s)")
    ap.add_argument(
        'command',
        nargs='?',
        default='query',
        choices=['query', 'port-info'],
        help="Transport command")

    args = ap.parse_args(args)

    try:
        client = jack.Client(args.client_name)
    except jack.JackError as exc:
        return "Could not create JACK client: {}".format(exc)

    result = 0
    if args.command == 'check':
        # If we get this far we are connected to jack.
        print("running")
        result = 0
    if args.command == 'query':
        res = {
            "status": "running",
            "cpu_load": client.cpu_load(),
            "block_size": client.blocksize,
            "realtime": client.realtime,
            "sample_rate": client.samplerate,
        }
        json.dump(res, sys.stdout, indent=2)
        result = 0
    if args.command == 'port-info':
        all_ports = client.get_ports('')
        res = {
            'all': [],
            'audio': {
                'playback': [],
                'capture': [],
            },
            'midi': {
                'playback': [],
                'capture': [],
            },
            # 'terminal': {
            #     'playback': [],
            #     'capture': [],
            # }
        }
        for port in all_ports:
            res['all'].append(port.name)
            p_direction = "playback" if port.is_input else 'capture'

            p_type = ""
            if port.is_audio:
                p_type = "audio"
            elif port.is_midi:
                p_type = "midi"
            # elif port.is_terminal:
            #     p_type = "terminal"
            res[p_type][p_direction].append(port.name)
            # print(port.name)

        json.dump(res, sys.stdout, indent=2)
    client.close()
    return result


if __name__ == '__main__':
    sys.exit(main() or 0)

Functions

def main(args=None)
Expand source code
def main(args=None):
    ap = argparse.ArgumentParser(description=__doc__)
    ap.add_argument(
        '-c', '--client-name',
        metavar='NAME',
        default='jack_client',
        help="JACK client name (default: %(default)s)")
    ap.add_argument(
        'command',
        nargs='?',
        default='query',
        choices=['query', 'port-info'],
        help="Transport command")

    args = ap.parse_args(args)

    try:
        client = jack.Client(args.client_name)
    except jack.JackError as exc:
        return "Could not create JACK client: {}".format(exc)

    result = 0
    if args.command == 'check':
        # If we get this far we are connected to jack.
        print("running")
        result = 0
    if args.command == 'query':
        res = {
            "status": "running",
            "cpu_load": client.cpu_load(),
            "block_size": client.blocksize,
            "realtime": client.realtime,
            "sample_rate": client.samplerate,
        }
        json.dump(res, sys.stdout, indent=2)
        result = 0
    if args.command == 'port-info':
        all_ports = client.get_ports('')
        res = {
            'all': [],
            'audio': {
                'playback': [],
                'capture': [],
            },
            'midi': {
                'playback': [],
                'capture': [],
            },
            # 'terminal': {
            #     'playback': [],
            #     'capture': [],
            # }
        }
        for port in all_ports:
            res['all'].append(port.name)
            p_direction = "playback" if port.is_input else 'capture'

            p_type = ""
            if port.is_audio:
                p_type = "audio"
            elif port.is_midi:
                p_type = "midi"
            # elif port.is_terminal:
            #     p_type = "terminal"
            res[p_type][p_direction].append(port.name)
            # print(port.name)

        json.dump(res, sys.stdout, indent=2)
    client.close()
    return result