# vi: et sw=2 # # PulseSink.py # Copyright (C) 2009 Harry Karvonen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # # Author: Harry Karvonen # from lib_pulseaudio import * from PulseClient import PulseClient from PulseVolume import PulseVolumeCtypes # This class contains all commons features from PulseSinkInputInfo and # PulseSinkInfo class PulseSink: def __init__(self, index, name, mute, volume, client): self.index = index self.name = name self.mute = mute self.volume = volume self.client = client return # PROTOTYPE def unmuteStream(self): raise Exception("ABSTRACT METHOD CALLED") return # PROTOTYPE def muteStream(self): raise Exception("ABSTRACT METHOD CALLED") return # PROTOTYPE def setVolume(self): raise Exception("ABSTRACT METHOD CALLED") return def printDebug(self): print "self.index:", self.index print "self.name:", self.name print "self.mute:", self.mute print "self.volume:", self.volume print "self.client:", self.client return ################################################################################ class PulseSinkInfo(PulseSink): def __init__(self, pa_sink_info): PulseSink.__init__(self, pa_sink_info.index, pa_sink_info.name, pa_sink_info.mute, PulseVolumeCtypes(pa_sink_info.volume), PulseClient("Selected Sink")) self.description = pa_sink_info.description self.sample_spec = pa_sink_info.sample_spec self.channel_map = pa_sink_info.channel_map self.owner_module = pa_sink_info.owner_module self.monitor_source = pa_sink_info.monitor_source self.monitor_source_name = pa_sink_info.monitor_source_name self.latency = pa_sink_info.latency self.driver = pa_sink_info.driver self.flags = pa_sink_info.flags self.proplist = pa_sink_info.proplist self.configured_latency = pa_sink_info.configured_latency return ### # # Define PROTOTYPE functions def unmuteStream(self, pulseInterface): pulseInterface.pulse_unmute_sink(self.index) self.mute = 0 return ### def muteStream(self, pulseInterface): pulseInterface.pulse_mute_sink(self.index) self.mute = 1 return ### def setVolume(self, pulseInterface, volume): pulseInterface.pulse_set_sink_volume(self.index, volume) self.volume = volume return ### def printDebug(self): print "PulseSinkInfo" PulseSink.printDebug(self) print "self.description", self.description print "self.sample_spec", self.sample_spec print "self.channel_map", self.channel_map print "self.owner_module", self.owner_module print "self.monitor_source", self.monitor_source print "self.monitor_source_name", self.monitor_source_name print "self.latency", self.latency print "self.driver", self.driver print "self.flags", self.flags print "self.proplist", self.proplist print "self.configured_latency", self.configured_latency return ### def __str__(self): return "ID: " + str(self.index) + ", Name: \"" + \ self.name + "\"" ################################################################################ class PulseSinkInputInfo(PulseSink): def __init__(self, pa_sink_input_info): PulseSink.__init__(self, pa_sink_input_info.index, pa_sink_input_info.name, pa_sink_input_info.mute, PulseVolumeCtypes(pa_sink_input_info.volume), PulseClient("Unknown client")) self.owner_module = pa_sink_input_info.owner_module self.client_id = pa_sink_input_info.client self.sink = pa_sink_input_info.sink self.sample_spec = pa_sink_input_info.sample_spec self.channel_map = pa_sink_input_info.channel_map self.buffer_usec = pa_sink_input_info.buffer_usec self.sink_usec = pa_sink_input_info.sink_usec self.resample_method = pa_sink_input_info.resample_method self.driver = pa_sink_input_info.driver #self.proplist = pa_sink_input_info.proplist return ### def setClient(self, c): self.client = c ### # # Define PROTOTYPE functions def unmuteStream(self, pulseInterface): pulseInterface.pulse_unmute_stream(self.index) self.mute = 0 return ### def muteStream(self, pulseInterface): pulseInterface.pulse_mute_stream(self.index) self.mute = 1 return ### def setVolume(self, pulseInterface, volume): pulseInterface.pulse_set_sink_input_volume(self.index, volume) self.volume = volume return ### def printDebug(self): print "PulseSinkInputInfo" PulseSink.printDebug(self) print "self.owner_module:", self.owner_module print "self.client_id:", self.client_id print "self.sink:", self.sink print "self.sample_spec:", self.sample_spec print "self.channel_map:", self.channel_map print "self.buffer_usec:", self.buffer_usec print "self.sink_usec:", self.sink_usec print "self.resample_method:", self.resample_method print "self.driver:", self.driver ### def __str__(self): if self.client: return "ID: " + str(self.index) + ", Name: \"" + \ self.name + "\", mute: " + str(self.mute) + ", " + str(self.client) return "ID: " + str(self.index) + ", Name: \"" + \ self.name + "\", mute: " + str(self.mute)