예제 #1
0
def run_alsa_bridge():
    global reactivateCounter
    global bufferSize, sampleRate, channels
    global procIn, procOut
    global useZita

    if procIn.state() != QProcess.NotRunning:
        procIn.terminate()
        procIn.waitForFinished(1000)
    if procOut.state() != QProcess.NotRunning:
        procOut.terminate()
        procOut.waitForFinished(1000)

    reactivateCounter = -1

    if useZita:
        procIn.start("env",  ["JACK_SAMPLE_RATE=%i" % sampleRate, "JACK_PERIOD_SIZE=%i" % bufferSize, "zita-a2j", "-d", "hw:Loopback,1,0", "-r", "%i" % sampleRate, "-p", "%i" % bufferSize, "-j", "alsa2jack", "-c", "%i" % channels])
        procOut.start("env", ["JACK_SAMPLE_RATE=%i" % sampleRate, "JACK_PERIOD_SIZE=%i" % bufferSize, "zita-j2a", "-d", "hw:Loopback,1,1", "-r", "%i" % sampleRate, "-p", "%i" % bufferSize, "-j", "jack2alsa", "-c", "%i" % channels])
    else:
        procIn.start("env",  ["JACK_SAMPLE_RATE=%i" % sampleRate, "JACK_PERIOD_SIZE=%i" % bufferSize, "alsa_in",  "-d", "cloop", "%i" % sampleRate, "-p", "%i" % bufferSize, "-j", "alsa2jack", "-q", "1", "-c", "%i" % channels])
        procOut.start("env", ["JACK_SAMPLE_RATE=%i" % sampleRate, "JACK_PERIOD_SIZE=%i" % bufferSize, "alsa_out", "-d", "ploop", "%i" % sampleRate, "-p", "%i" % bufferSize, "-j", "jack2alsa", "-q", "1", "-c", "%i" % channels])

    if procIn.waitForStarted():
        sleep(1)
        jacklib.connect(client, "alsa2jack:capture_1", "system:playback_1")
        jacklib.connect(client, "alsa2jack:capture_2", "system:playback_2")

    if procOut.waitForStarted():
        sleep(1)
        jacklib.connect(client, "system:capture_1", "jack2alsa:playback_1")
        jacklib.connect(client, "system:capture_2", "jack2alsa:playback_2")
예제 #2
0
def connectAllOutputs(port):
    if port.mode != PORT_MODE_INPUT:
        return

    output_ports = []

    for jack_port in port_list:
        if jack_port.mode == PORT_MODE_OUTPUT:
            output_ports.append(jack_port.name)

    for connection in saved_connections:
        if connection in connection_list:
            continue

        if connection[0] in output_ports and connection[1] == port.name:
            jacklib.connect(jack_client, connection[0], port.name)
def run_alsa_bridge():
    global reactivateCounter
    global bufferSize, sampleRate, channels
    global procIn, procOut
    global useZita

    if procIn.state() != QProcess.NotRunning:
        procIn.terminate()
        procIn.waitForFinished(1000)
    if procOut.state() != QProcess.NotRunning:
        procOut.terminate()
        procOut.waitForFinished(1000)

    reactivateCounter = -1

    if useZita:
        procIn.start("env", [
            "JACK_SAMPLE_RATE=%i" % sampleRate,
            "JACK_PERIOD_SIZE=%i" % bufferSize, "zita-a2j", "-d",
            "hw:Loopback,1,0", "-r",
            "%i" % sampleRate, "-p",
            "%i" % bufferSize, "-j", "alsa2jack", "-c",
            "%i" % channels
        ])
        procOut.start("env", [
            "JACK_SAMPLE_RATE=%i" % sampleRate,
            "JACK_PERIOD_SIZE=%i" % bufferSize, "zita-j2a", "-d",
            "hw:Loopback,1,1", "-r",
            "%i" % sampleRate, "-p",
            "%i" % bufferSize, "-j", "jack2alsa", "-c",
            "%i" % channels
        ])
    else:
        procIn.start("env", [
            "JACK_SAMPLE_RATE=%i" % sampleRate,
            "JACK_PERIOD_SIZE=%i" % bufferSize, "alsa_in", "-d", "cloop",
            "%i" % sampleRate, "-p",
            "%i" % bufferSize, "-j", "alsa2jack", "-q", "1", "-c",
            "%i" % channels
        ])
        procOut.start("env", [
            "JACK_SAMPLE_RATE=%i" % sampleRate,
            "JACK_PERIOD_SIZE=%i" % bufferSize, "alsa_out", "-d", "ploop",
            "%i" % sampleRate, "-p",
            "%i" % bufferSize, "-j", "jack2alsa", "-q", "1", "-c",
            "%i" % channels
        ])

    if procIn.waitForStarted():
        sleep(1)
        jacklib.connect(client, "alsa2jack:capture_1", "system:playback_1")
        jacklib.connect(client, "alsa2jack:capture_2", "system:playback_2")

    if procOut.waitForStarted():
        sleep(1)
        jacklib.connect(client, "system:capture_1", "jack2alsa:playback_1")
        jacklib.connect(client, "system:capture_2", "jack2alsa:playback_2")
예제 #4
0
def makeMayConnections():
    output_ports = []
    input_ports = []
    new_output_ports = []
    new_input_ports = []

    for port in port_list:
        if port.mode == PORT_MODE_OUTPUT:
            output_ports.append(port.name)
            if port.is_new:
                new_output_ports.append(port.name)

        elif port.mode == PORT_MODE_INPUT:
            input_ports.append(port.name)
            if port.is_new:
                new_input_ports.append(port.name)

    global pending_connection
    one_connected = False

    for connection in saved_connections:
        if (not connection in connection_list
                and connection[0] in output_ports
                and connection[1] in input_ports
                and (connection[0] in new_output_ports
                     or connection[1] in new_input_ports)):

            if one_connected:
                pending_connection = True
                break

            jacklib.connect(jack_client, connection[0], connection[1])
            one_connected = True
    else:
        pending_connection = False

        for port in port_list:
            port.is_new = False
예제 #5
0
파일: VNA.py 프로젝트: docprofsky/pysdrvna
  def __init__(self,configd=None):
    """Create a VNA object"""

    if configd is None: configd = config.__dict__

    self.printlevel = configd['printlevel']
    self.fftn = configd['fftn']
    self.amp = configd['amp']
    self.warmuptime = configd['warmuptime']
    self.cooldowntime = configd['cooldowntime']
   
    self.docapture = threading.Event()
    self.docapture.set()

    self.xrun = threading.Event()
    self.xrun.clear()

    self.startframe = 0

    #self.jackclient = jacklib.client_open("pysdrvna", jacklib.JackNoStartServer | jacklib.JackSessionID, None)
    self.jackclient = jacklib.client_open("pysdrvna", jacklib.JackSessionID, None)
    
    try:
      self.jackclient.contents
    except:
      print("Problems with Jack")
      return
      #raise

    self.iI = jacklib.port_register(self.jackclient,"iI", jacklib.JACK_DEFAULT_AUDIO_TYPE, jacklib.JackPortIsInput, 0)
    self.iQ = jacklib.port_register(self.jackclient,"iQ", jacklib.JACK_DEFAULT_AUDIO_TYPE, jacklib.JackPortIsInput, 0)    

    self.oI = jacklib.port_register(self.jackclient,"oI", jacklib.JACK_DEFAULT_AUDIO_TYPE, jacklib.JackPortIsOutput, 0)
    self.oQ = jacklib.port_register(self.jackclient,"oQ", jacklib.JACK_DEFAULT_AUDIO_TYPE, jacklib.JackPortIsOutput, 0)
   
    jacklib.set_process_callback(self.jackclient, self.JackProcess, 0)
    jacklib.set_xrun_callback(self.jackclient, self.JackXrun, 0)

    jacklib.activate(self.jackclient)
   
    jacklib.connect(self.jackclient,"pysdrvna:oQ", configd['outQ'])
    jacklib.connect(self.jackclient,"pysdrvna:oI", configd['outI'])    
    
    jacklib.connect(self.jackclient,configd['inQ'],"pysdrvna:iQ")
    jacklib.connect(self.jackclient,configd['inI'],"pysdrvna:iI") 
    
    self.Sr = float(jacklib.get_sample_rate(self.jackclient))
    self.dt = 1.0/self.Sr
      
    ## Align frequency to nearest bin
    self.fftbin = int(round((configd['freq']/self.Sr)*self.fftn))      
    self.freq = (float(self.fftbin)/self.fftn) * self.Sr
    
    ## Windowing function
    #self.fftwindow = np.blackman(self.fftn)
    self.fftwindow = np.hanning(self.fftn)
    #self.fftwindow = np.kaiser(self.fftn,14)
    #self.fftwindow = np.hamming(self.fftn)
    #self.fftwindow = np.bartlett(self.fftn)
    #self.fftwindow = None
      
    ## Latency settings
    jlr = jacklib.jack_latency_range_t()
    jacklib.port_get_latency_range(self.oI,jacklib.JackPlaybackLatency,jlr)
    self.minrtframes = jlr.min
    jacklib.port_get_latency_range(self.iI,jacklib.JackCaptureLatency,jlr)
    self.minrtframes += jlr.min
 
    # The above code does not always work
    # Reasonable estimate is 3 times the buffer size
    ## Compute initial array length
    self.buffersz = int(jacklib.get_buffer_size(self.jackclient))
    if self.minrtframes < (3*self.buffersz):
        self.minrtframes = 3 * self.buffersz


    ## rtframes is the round trip audio latency, or when the received audio signal will start    
    self.rtframes = configd['rtframes'] if configd['rtframes'] else self.minrtframes
    ## delta from rtframes to phase shift sync in frames
    self.rtframes2sync = configd['rtframes2sync']
    ## delta from phase shift sync to fft start in frames
    self.sync2fft = configd['sync2fft']
    ## delta from end of fft to end of audio
    self.fft2end = configd['fft2end']


    if configd['rtframes'] is None:
        ## Loose fit if estimating based on minrtframes
        buffers, remainder = divmod((2*self.rtframes) + self.rtframes2sync + self.sync2fft + self.fftn + self.fft2end,self.buffersz)
    else:
        ## Tight fit if rtframes is defined
        buffers, remainder = divmod(self.rtframes + self.rtframes2sync + self.sync2fft + self.fftn + self.fft2end,self.buffersz)
  
    if remainder > 0: buffers = buffers + 1
    self.synci = self.rtframes
    self.InitJackArrays(self.freq,buffers*self.buffersz)
    
    self.fftia = pyfftw.n_byte_align_empty(self.fftn, 16, 'complex128')
    self.fftoa = pyfftw.n_byte_align_empty(self.fftn, 16, 'complex128')
    ## Create FFT Plan
    self.fft = pyfftw.FFTW(self.fftia,self.fftoa)

    self.OpenSoftRock()
    self.Info()
예제 #6
0
 def _ray_patchbay_connect(self, path, args):
     port_out_name, port_in_name = args
     #connect here
     jacklib.connect(self.jack_client, port_out_name, port_in_name)