BOSWatch 3
Python Script to receive and decode German BOS Information with rtl_fm and multimon-NG
 
Loading...
Searching...
No Matches
boswatch.inputSource.pulseaudioInput.PulseAudioInput Class Reference

Class for the PulseAudio input source. More...

Protected Member Functions

 _runThread (self, dataQueue, PulseAudioConfig, decoderConfig)
 Thread routine of the input source has to be inherit.
 

Additional Inherited Members

- Public Member Functions inherited from boswatch.inputSource.inputBase.InputBase
 __init__ (self, inputQueue, inputConfig, decoderConfig)
 Build a new InputSource class.
 
 start (self)
 Start the input source thread.
 
 shutdown (self)
 Stop the input source thread.
 
 addToQueue (self, data)
 Decode and add alarm data to the queue for further processing during boswatch client.
 
 getDecoderInstance (self, decoderConfig, StdIn)
 
- Protected Attributes inherited from boswatch.inputSource.inputBase.InputBase
 _inputThread
 
 _isRunning
 
 _inputQueue
 
 _inputConfig
 
 _decoderConfig
 

Detailed Description

Class for the PulseAudio input source.

Member Function Documentation

◆ _runThread()

boswatch.inputSource.pulseaudioInput.PulseAudioInput._runThread (   self,
  dataQueue,
  sdrConfig,
  decoderConfig 
)
protected

Thread routine of the input source has to be inherit.

Reimplemented from boswatch.inputSource.inputBase.InputBase.

28 def _runThread(self, dataQueue, PulseAudioConfig, decoderConfig):
29 PulseAudioProc = None
30 mmProc = None
31 try:
32 PulseAudioProc = ProcessManager("parec")
33 PulseAudioProc.addArgument("--channels=1") # supress any other outputs
34 PulseAudioProc.addArgument("--format=s16le") # set output format (16bit)
35 PulseAudioProc.addArgument("--rate=22050") # set output sampling rate (22050Hz)
36 PulseAudioProc.addArgument("--device=" +
37 str(PulseAudioConfig.get("device", default="boswatch")) +
38 ".monitor") # sink name
39 PulseAudioProc.setStderr(open(paths.LOG_PATH + "pulseaudio.log", "a"))
40 PulseAudioProc.start()
41
42 mmProc = self.getDecoderInstance(decoderConfig, PulseAudioProc.stdout)
43 mmProc.start()
44
45 logging.info("start decoding")
46 while self._isRunning:
47 if not PulseAudioProc.isRunning:
48 logging.warning("PulseAudio was down - try to restart")
49 PulseAudioProc.start()
50
51 if PulseAudioProc.isRunning:
52 logging.info("rtl_fm is back up - restarting multimon...")
53 mmProc.setStdin(PulseAudioProc.stdout)
54 mmProc.start()
55 elif not mmProc.isRunning:
56 logging.warning("multimon was down - try to restart")
57 mmProc.start()
58 elif PulseAudioProc.isRunning and mmProc.isRunning:
59 line = mmProc.readline()
60 if line:
61 self.addToQueue(line)
62 except:
63 logging.exception("error in PulseAudio input routine")
64 finally:
65 mmProc.stop()
66 PulseAudioProc.stop()