����JFIF��H�H����Exif��MM�*���� ��3����V�����3������3�(��������������������3�����
Server IP : 74.208.127.88 / Your IP : 3.15.238.90 Web Server : Apache/2.4.41 (Ubuntu) System : Linux ubuntu 5.4.0-163-generic #180-Ubuntu SMP Tue Sep 5 13:21:23 UTC 2023 x86_64 User : www-data ( 33) PHP Version : 7.4.3-4ubuntu2.29 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /usr/share/apport/symptoms/ |
Upload File : |
# Written by David Henningsson <david.henningsson@canonical.com> # Copyright Canonical Ltd 2010. # Licensed under GPLv3. from _audio_data import run_subprocess import re class MixerControl: ''' A simple mixer control ''' def parse_amixer(self, amixer_data): self.name = amixer_data[0][len("Simple mixer control "):] self.amixer_dict = {} for line in amixer_data: s = line.split(":") if (len(s) != 2): continue self.amixer_dict[s[0].strip()] = s[1].strip() self.caps = set(self.amixer_dict['Capabilities'].split(" ")) if not 'Playback channels' in self.amixer_dict: pchan_set = set() else: pchan_set = set(self.amixer_dict['Playback channels'].split(" - ")) self.has_dB = True self.pchans = {} for c in pchan_set: self.pchans[c] = {} s = self.amixer_dict[c] m = re.search("\[([\-0-9.]+)dB\]", s) if m is None: self.has_dB = False else: self.pchans[c]['dB'] = float(m.group(1)) if re.search("\[on\]", s): self.pchans[c]['muted'] = False if re.search("\[off\]", s): self.pchans[c]['muted'] = True m = re.search(" ?(\d+) ", s) if m is not None: self.pchans[c]['value'] = int(m.group(1)) m = re.search("\[([\-0-9.]+)%\]", s) if m is not None: self.pchans[c]['percent'] = float(m.group(1)) def __init__(self, amixer_data, device_name): self.device_name = device_name self.parse_amixer(amixer_data) def get_pretty_name(self): s = self.name.split("'") t = int(s[2].split(",")[1]) s = s[1] if (t > 0): return s + " " + str(t) return s def get_caps(self): return self.caps def do_get(self): s = run_subprocess(("amixer", "-D", self.device_name, "sget", self.name)) self.parse_amixer(s.splitlines()) def do_set(self, *args): run_subprocess(("amixer", "-D", self.device_name, "--", "sset", self.name) + args) def get_pstate(self): self.do_get() return self.pchans def set_dB(self, level): s = '{0:.4f}dB'.format(level) if ("pswitch" in self.caps) or ("pswitch-joined" in self.caps): self.do_set(s, "unmute") else: self.do_set(s) def set_mute(self, is_muted): if is_muted: self.do_set("mute") else: self.do_set("unmute") def set_original(self): for (k,v) in self.pchans.iteritems(): t = [] # t = [k] didn't work if 'value' in v: t.append(str(v['value'])) if 'muted' in v: t.append("mute" if v['muted'] else "unmute") if len(t) <= 0: return self.do_set(*t) class MixerControlList: def __init__(self, device_name, report): self.device_name = device_name self.parse_amixer(report) def parse_amixer(self, report): r = run_subprocess(report, "Symptom_amixer", ["amixer", "-D", self.device_name, "scontents"]) self.controls = [] s = [] for line in r.splitlines(): if (s != []) and (not line.startswith(" ")): self.controls.append(MixerControl(s, self.device_name)) s = [] s.append(line) if (s != []): self.controls.append(MixerControl(s, self.device_name)) def get_control_cap(self, cap_list): result = [] for c in self.controls: if len(c.get_caps().intersection(set(cap_list))) > 0: result.append(c) return result def restore_all(self): for c in self.controls: c.set_original()