Compare commits
	
		
			3 Commits
		
	
	
		
			86ce617f14
			...
			e68223f1e6
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| e68223f1e6 | |||
| 34e6171e3f | |||
| 967c4ad161 | 
@ -1,30 +1,30 @@
 | 
			
		||||
import std/logging
 | 
			
		||||
import jacket
 | 
			
		||||
 | 
			
		||||
var jclient: ClientTPtr
 | 
			
		||||
var time: TimeT
 | 
			
		||||
var status: cint
 | 
			
		||||
var log = newConsoleLogger(lvlInfo)
 | 
			
		||||
 | 
			
		||||
jclient = clientOpen("test_jacket", NullOption.ord, addr status)
 | 
			
		||||
proc errorCb(msg: cstring) {.cdecl.} =
 | 
			
		||||
    # Suppress verbose JACK error messges when server is not available by 
 | 
			
		||||
    # default. Pass ``lvlAll`` when creating the logger to enable them.
 | 
			
		||||
    debug "JACK error: " & $msg
 | 
			
		||||
 | 
			
		||||
echo "Server status: " & $status
 | 
			
		||||
addHandler(log)
 | 
			
		||||
setErrorFunction(errorCb)
 | 
			
		||||
jclient = clientOpen("test_jacket", NullOption.ord, status.addr)
 | 
			
		||||
debug "Server status: " & $status
 | 
			
		||||
 | 
			
		||||
if jclient == nil:
 | 
			
		||||
    echo getJackStatusErrorString(status)
 | 
			
		||||
    error getJackStatusErrorString(status)
 | 
			
		||||
    quit 1
 | 
			
		||||
 | 
			
		||||
time = getTime()
 | 
			
		||||
let ver = getVersionString()
 | 
			
		||||
echo "JACK version: " & $ver
 | 
			
		||||
let rate = getSampleRate(jclient)
 | 
			
		||||
echo "Sample rate: " & $rate
 | 
			
		||||
let bufsize = getBufferSize(jclient)
 | 
			
		||||
echo "Buffer size: " & $bufsize
 | 
			
		||||
let load = cpuLoad(jclient)
 | 
			
		||||
echo "DSP load: " & $load & "%"
 | 
			
		||||
echo "Server time: " & $time
 | 
			
		||||
let name = getClientName(jclient)
 | 
			
		||||
echo "Client name: " & $name
 | 
			
		||||
let rt = if isRealtime(jclient) > 0: "yes" else: "no"
 | 
			
		||||
echo "RT enabled: " & rt
 | 
			
		||||
echo("JACK version: ", getVersionString())
 | 
			
		||||
echo("Sample rate: ", jclient.getSampleRate)
 | 
			
		||||
echo("Buffer size: ", jclient.getBufferSize)
 | 
			
		||||
echo("DSP load: ", jclient.cpuLoad, "%")
 | 
			
		||||
echo("Server time: ", getTime())
 | 
			
		||||
echo("Client name: ", jclient.getClientName)
 | 
			
		||||
echo("RT enabled: ", if jclient.isRealtime > 0: "yes" else: "no")
 | 
			
		||||
 | 
			
		||||
discard clientClose(jclient)
 | 
			
		||||
discard jclient.clientClose
 | 
			
		||||
 | 
			
		||||
@ -1,55 +1,61 @@
 | 
			
		||||
import std/os
 | 
			
		||||
import std/[logging, os]
 | 
			
		||||
import jacket
 | 
			
		||||
 | 
			
		||||
var jclient: ClientTPtr
 | 
			
		||||
var status: cint
 | 
			
		||||
var log = newConsoleLogger(lvlInfo)
 | 
			
		||||
 | 
			
		||||
proc errorCb(msg: cstring) {.cdecl.} =
 | 
			
		||||
    # Suppress verbose JACK error messages when server is not available by
 | 
			
		||||
    # default. Pass ``lvlAll`` when creating the logger to enable them.
 | 
			
		||||
    debug "JACK error: " & $msg
 | 
			
		||||
 | 
			
		||||
proc cleanup() {.noconv.} =
 | 
			
		||||
    echo "Cleaning up..."
 | 
			
		||||
    debug "Cleaning up..."
 | 
			
		||||
 | 
			
		||||
    if jclient != nil:
 | 
			
		||||
        discard deactivate(jclient)
 | 
			
		||||
        discard clientClose(jclient)
 | 
			
		||||
        discard jclient.deactivate()
 | 
			
		||||
        discard jclient.clientClose()
 | 
			
		||||
        jclient = nil
 | 
			
		||||
 | 
			
		||||
    quit 0
 | 
			
		||||
    quit QuitSuccess
 | 
			
		||||
 | 
			
		||||
proc portConnected(portA: PortIdT; portB: PortIdT; connect: cint; arg: pointer) {.cdecl.} =
 | 
			
		||||
    let portAPtr = portById(jclient, portA)
 | 
			
		||||
    let portBPtr = portById(jclient, portB)
 | 
			
		||||
    let portAPtr = jclient.portById(portA)
 | 
			
		||||
    let portBPtr = jclient.portById(portB)
 | 
			
		||||
    
 | 
			
		||||
    if portAPtr != nil:
 | 
			
		||||
        echo "Port A: " & $portName(portAPtr)
 | 
			
		||||
        echo("Port A: ", portName(portAPtr))
 | 
			
		||||
    else:
 | 
			
		||||
        echo "Port A: <unknown>"
 | 
			
		||||
 | 
			
		||||
    if portAPtr != nil:
 | 
			
		||||
        echo "Port B: " & $portName(portBPtr)
 | 
			
		||||
        echo("Port B: ", portName(portBPtr))
 | 
			
		||||
    else:
 | 
			
		||||
        echo "Port B: <unknown>"
 | 
			
		||||
        
 | 
			
		||||
    echo "Action: " & (if connect > 0: "connect" else: "disconnect")
 | 
			
		||||
    echo("Action: ", if connect > 0: "connect" else: "disconnect")
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
jclient = clientOpen("jacket_port_register", NoStartServer.ord, addr status)
 | 
			
		||||
 | 
			
		||||
echo "Server status: " & $status
 | 
			
		||||
addHandler(log)
 | 
			
		||||
setErrorFunction(errorCb)
 | 
			
		||||
jclient = clientOpen("jacket_port_register", NoStartServer.ord, status.addr)
 | 
			
		||||
debug "Server status: " & $status
 | 
			
		||||
 | 
			
		||||
if jclient == nil:
 | 
			
		||||
    echo getJackStatusErrorString(status)
 | 
			
		||||
    error getJackStatusErrorString(status)
 | 
			
		||||
    quit 1
 | 
			
		||||
 | 
			
		||||
setControlCHook(cleanup)
 | 
			
		||||
 | 
			
		||||
discard portRegister(jclient, "in_1", JACK_DEFAULT_AUDIO_TYPE, PortIsInput.ord, 0)
 | 
			
		||||
discard portRegister(jclient, "out_1", JACK_DEFAULT_AUDIO_TYPE, PortIsOutput.ord, 0)
 | 
			
		||||
discard jclient.portRegister("in_1", JACK_DEFAULT_AUDIO_TYPE, PortIsInput.ord, 0)
 | 
			
		||||
discard jclient.portRegister("out_1", JACK_DEFAULT_AUDIO_TYPE, PortIsOutput.ord, 0)
 | 
			
		||||
 | 
			
		||||
if setPortConnectCallback(jclient, portConnected, nil) != 0:
 | 
			
		||||
    echo "Error: could not set port connection callback."
 | 
			
		||||
if jclient.setPortConnectCallback(portConnected, nil) != 0:
 | 
			
		||||
    error "Error: could not set port connection callback."
 | 
			
		||||
 | 
			
		||||
discard activate(jclient)
 | 
			
		||||
 | 
			
		||||
while true:
 | 
			
		||||
    sleep(50)
 | 
			
		||||
if jclient.activate() == 0:
 | 
			
		||||
    while true:
 | 
			
		||||
        sleep(50)
 | 
			
		||||
 | 
			
		||||
cleanup()
 | 
			
		||||
 | 
			
		||||
@ -1,31 +1,37 @@
 | 
			
		||||
import std/os
 | 
			
		||||
import std/[logging, os]
 | 
			
		||||
import jacket
 | 
			
		||||
 | 
			
		||||
var jclient: ClientTPtr
 | 
			
		||||
var status: cint
 | 
			
		||||
var log = newConsoleLogger(lvlInfo)
 | 
			
		||||
 | 
			
		||||
proc errorCb(msg: cstring) {.cdecl.} =
 | 
			
		||||
    # Suppress verbose JACK error messages when server is not available by
 | 
			
		||||
    # default. Pass ``lvlAll`` when creating the logger to enable them.
 | 
			
		||||
    debug "JACK error: " & $msg
 | 
			
		||||
 | 
			
		||||
proc cleanup() {.noconv.} =
 | 
			
		||||
    echo "Cleaning up..."
 | 
			
		||||
    debug "Cleaning up..."
 | 
			
		||||
    
 | 
			
		||||
    if jclient != nil:
 | 
			
		||||
        discard clientClose(jclient)
 | 
			
		||||
        discard jclient.clientClose
 | 
			
		||||
        jclient = nil
 | 
			
		||||
    
 | 
			
		||||
    quit 0
 | 
			
		||||
    quit QuitSuccess
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
jclient = clientOpen("jacket_port_register", NoStartServer.ord or UseExactName.ord, addr status)
 | 
			
		||||
 | 
			
		||||
echo "Server status: " & $status
 | 
			
		||||
addHandler(log)
 | 
			
		||||
setErrorFunction(errorCb)
 | 
			
		||||
jclient = clientOpen("jacket_port_register", NoStartServer.ord or UseExactName.ord, status.addr)
 | 
			
		||||
debug "Server status: " & $status
 | 
			
		||||
 | 
			
		||||
if jclient == nil:
 | 
			
		||||
    echo getJackStatusErrorString(status)
 | 
			
		||||
    error getJackStatusErrorString(status)
 | 
			
		||||
    quit 1
 | 
			
		||||
 | 
			
		||||
setControlCHook(cleanup)
 | 
			
		||||
 | 
			
		||||
discard portRegister(jclient, "in_1", JACK_DEFAULT_AUDIO_TYPE, PortIsInput.ord, 0)
 | 
			
		||||
discard portRegister(jclient, "out_1", JACK_DEFAULT_AUDIO_TYPE, PortIsOutput.ord, 0)
 | 
			
		||||
discard jclient.portRegister("in_1", JACK_DEFAULT_AUDIO_TYPE, PortIsInput.ord, 0)
 | 
			
		||||
discard jclient.portRegister("out_1", JACK_DEFAULT_AUDIO_TYPE, PortIsOutput.ord, 0)
 | 
			
		||||
 | 
			
		||||
while true:
 | 
			
		||||
    sleep(50)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										26
									
								
								jacket.nim
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								jacket.nim
									
									
									
									
									
								
							@ -1,27 +1,22 @@
 | 
			
		||||
# jacket.nim
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Possible names/install locations of libjack, according to
 | 
			
		||||
# Possible names/install locations of libjack, according to:
 | 
			
		||||
# https://github.com/x42/weakjack/blob/master/weak_libjack.c#L108
 | 
			
		||||
# 
 | 
			
		||||
# MacOS:
 | 
			
		||||
# * /usr/local/lib/libjack.dylib
 | 
			
		||||
# * /opt/homebrew/lib/libjack.dylib
 | 
			
		||||
# * /opt/local/lib/libjack.dylib
 | 
			
		||||
# Win:
 | 
			
		||||
# * libjack64.dll
 | 
			
		||||
# * libjack.dll
 | 
			
		||||
# Unix:
 | 
			
		||||
# * libjack.so.0
 | 
			
		||||
proc getJackLibName: string =
 | 
			
		||||
    when system.hostOS == "windows":
 | 
			
		||||
        result = "libjack.dll"
 | 
			
		||||
        when sizeof(int) == 4:
 | 
			
		||||
            result = "libjack.dll"
 | 
			
		||||
        else:
 | 
			
		||||
            result = "libjack64.dll"
 | 
			
		||||
    elif system.hostOS == "macosx":
 | 
			
		||||
        result = "libjack.dylib"
 | 
			
		||||
        result = "(|/usr/local/lib/|/opt/homebrew/lib/|/opt/local/lib/)libjack.dylib"
 | 
			
		||||
    else:
 | 
			
		||||
        result = "libjack.so.0"
 | 
			
		||||
  
 | 
			
		||||
{.push dynlib: getJackLibName().}
 | 
			
		||||
# ------------------------------ Constants --------------------------------
 | 
			
		||||
 | 
			
		||||
const
 | 
			
		||||
    JACK_MAX_FRAMES* = (4294967295'i64)
 | 
			
		||||
    JACK_LOAD_INIT_LIMIT* = 1024
 | 
			
		||||
@ -43,7 +38,6 @@ type
 | 
			
		||||
    PortT = distinct object
 | 
			
		||||
    PortTPtr* = ptr PortT
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
type
 | 
			
		||||
    JackOptions* {.size: sizeof(cint) pure.} = enum
 | 
			
		||||
        NullOption = 0x00,
 | 
			
		||||
@ -56,7 +50,7 @@ type
 | 
			
		||||
 | 
			
		||||
type
 | 
			
		||||
    JackStatus* {.size: sizeof(cint).} = enum
 | 
			
		||||
        Success = 0x00
 | 
			
		||||
        Success = 0x00,
 | 
			
		||||
        Failure = 0x01,
 | 
			
		||||
        InvalidOption = 0x02,
 | 
			
		||||
        NameNotUnique = 0x04,
 | 
			
		||||
@ -455,6 +449,8 @@ proc setInfoFunction*(infoCallback: JackInfoCallback) {.importc: "jack_set_info_
 | 
			
		||||
 | 
			
		||||
{.pop.}
 | 
			
		||||
 | 
			
		||||
# --------------------------- Helper functions ----------------------------
 | 
			
		||||
 | 
			
		||||
proc getJackStatusErrorString*(status: cint): string =
 | 
			
		||||
    # Get JACK error status as string.
 | 
			
		||||
    if status == Success.ord:
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user