-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathaudio.py
154 lines (106 loc) · 4.56 KB
/
audio.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# =============================================================================
# Module: audio.py
# Contacts: Edward Li ([email protected])
# =============================================================================
"""___DESC___
"""
# =============================================================================
# IMPORTS
# =============================================================================
import subprocess
# =============================================================================
# CLASSES
# =============================================================================
class Audio(object):
# =========================================================================
def __init__(self):
self._devices = list()
self._device = Device()
args = 'pacmd list-sources'
popen = subprocess.Popen(args, shell=True,
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
device = Device()
for line in popen.stdout:
line = line.strip()
if line.startswith('name: '):
device.name = line.split(':', 1)[1].strip()
elif line.startswith('device.api = '):
device.api = line.split('=', 1)[1].strip().strip('"')
elif line.startswith('alsa.subdevice = '):
device.subdevice = line.split('=', 1)[1].strip().strip('"')
elif line.startswith('alsa.card = '):
device.card = line.split('=', 1)[1].strip().strip('"')
elif line.startswith('device.description = '):
device.description = line.split('=', 1)[1].strip().strip('"')
if device.name.startswith('<alsa_input.') and \
device.api and device.subdevice and device.card and \
device.description:
if device not in self._devices:
self._devices.append(device)
device = Device()
# =========================================================================
def deviceSet(self, index):
self._device = self.devices[index]
# =========================================================================
@property
def devices(self):
return self._devices
# =========================================================================
@property
def device(self):
return self._device
# =============================================================================
class Device(object):
# =========================================================================
def __init__(self, name=None, api=None, subdevice=None, card=None,
description=None):
self._name = name
self._api = api
self._subdevice = subdevice
self._card = card
self._description = description
# =========================================================================
@property
def source(self):
return 'plughw:{c},{s}'.format(c=self.card, s=self.subdevice)
# =========================================================================
@property
def name(self):
return self._name
# =========================================================================
@name.setter
def name(self, value):
self._name = value
# =========================================================================
@property
def api(self):
return self._api
# =========================================================================
@api.setter
def api(self, value):
self._api = value
# =========================================================================
@property
def subdevice(self):
return self._subdevice
# =========================================================================
@subdevice.setter
def subdevice(self, value):
self._subdevice = value
# =========================================================================
@property
def card(self):
return self._card
# =========================================================================
@card.setter
def card(self, value):
self._card = value
# =========================================================================
@property
def description(self):
return self._description
# =========================================================================
@description.setter
def description(self, value):
self._description = value
# =============================================================================