Browse Source

Merge 658b4031f3 into 5edd5ee84e

pull/93/merge
Eugene 10 years ago
parent
commit
e2a974e15b
1 changed files with 43 additions and 21 deletions
  1. +43
    -21
      src/jacksettings.py

+ 43
- 21
src/jacksettings.py View File

@@ -56,10 +56,7 @@ JACK_TIMER_HPET = 2
if "linux" in platform:
LINUX = True

if version_info >= (3, 0):
from subprocess import getoutput
else:
from commands import getoutput
import glob
else:
LINUX = False

@@ -691,26 +688,48 @@ class JackSettingsW(QDialog):
# -----------------------------------------------------------------
# Helper functions

def getAlsaDeviceList(self):
alsaDeviceList = []
def getAlsaDeviceList(self, mode = 'DUPLEX'):

class AlsaDevice:
@property
def key(self):
return '%s,%s' % (self.card, self.device)

def has(self, mode):
if mode in self.mode: return True
if mode == 'DUPLEX':
if ('CAPTURE' in self.mode) and ('PLAYBACK' in self.mode):
return True
return False

def __repr__(self):
return 'AlsaDevice<id="%s,%s" mode=%s>' % (self.card, self.device, self.mode)

aplay_out = getoutput("env LANG=C aplay -l").split("\n")
for line in aplay_out:
line = line.strip()
if line.startswith("card "):
cardInfo = line.split(", ", 1)[0].split(": ")
cardIndex = cardInfo[0].replace("card ", "")
cardName = cardInfo[1].split(" [")[0]
alsaDeviceList = {}

deviceInfo = line.split(", ", 1)[1].split(": ")
deviceIndex = deviceInfo[0].replace("device ", "")
deviceName = deviceInfo[1].split(" [")[0]
for filename in glob.glob('/proc/asound/card*/*/info'):

if cardName != "Loopback":
fullName = "hw:%s,%s [%s]" % (cardName, deviceIndex, deviceName)
alsaDeviceList.append(fullName)
info = open(filename)

device = AlsaDevice()

for line in info:
key, value = line.split(':', 2)
setattr(device, key, value.strip())

# Skip loopback device
if device.name == 'Loopback': continue

device_old = alsaDeviceList.get(device.key, None)
if device_old:
if device.stream not in device_old.mode:
device_old.mode.append(device.stream)
else:
device.mode = [ device.stream ]
alsaDeviceList[device.key] = device

return [('hw:%s,%s [%s]' % (device.card, device.device, device.name)) for device in alsaDeviceList.values() if device.has(mode)]

return alsaDeviceList

def setComboBoxValue(self, box, text, split=False):
for i in range(box.count()):
@@ -777,9 +796,12 @@ class JackSettingsW(QDialog):
self.ui.obj_driver_playback.addItem("none")

if LINUX:
dev_list = self.getAlsaDeviceList()
dev_list = self.getAlsaDeviceList('CAPTURE')
for dev in dev_list:
self.ui.obj_driver_capture.addItem(dev)

dev_list = self.getAlsaDeviceList('PLAYBACK')
for dev in dev_list:
self.ui.obj_driver_playback.addItem(dev)
else:
dev_list = gJackctl.GetParameterConstraint(["driver", "device"])[3]


Loading…
Cancel
Save