mirror of
https://github.com/DJ2LS/FreeDATA
synced 2024-05-14 08:04:33 +00:00
possible fix of crashing audio device
This commit is contained in:
parent
722f1ef785
commit
e82592bab7
2 changed files with 48 additions and 46 deletions
|
@ -135,25 +135,27 @@ class RF:
|
||||||
|
|
||||||
def start_modem(self):
|
def start_modem(self):
|
||||||
if not TESTMODE and HamlibParam.hamlib_radiocontrol not in ["tci"]:
|
if not TESTMODE and HamlibParam.hamlib_radiocontrol not in ["tci"]:
|
||||||
self.init_audio()
|
result = self.init_audio()
|
||||||
|
|
||||||
elif not TESTMODE:
|
elif not TESTMODE:
|
||||||
self.init_tci()
|
result = self.init_tci()
|
||||||
else:
|
else:
|
||||||
self.init_mkfifo()
|
result = self.init_mkfifo()
|
||||||
|
if result not in [False]:
|
||||||
|
# init codec2 instances
|
||||||
|
self.init_codec2()
|
||||||
|
|
||||||
# init codec2 instances
|
# init rig control
|
||||||
self.init_codec2()
|
self.init_rig_control()
|
||||||
|
|
||||||
# init rig control
|
# init decoders
|
||||||
self.init_rig_control()
|
self.init_decoders()
|
||||||
|
|
||||||
# init decoders
|
# init decoding threads
|
||||||
self.init_decoders()
|
self.init_data_threads()
|
||||||
|
atexit.register(self.stream.stop)
|
||||||
# init decoding threads
|
else:
|
||||||
self.init_data_threads()
|
return False
|
||||||
atexit.register(self.stream.stop)
|
|
||||||
|
|
||||||
def stop_modem(self):
|
def stop_modem(self):
|
||||||
try:
|
try:
|
||||||
|
@ -167,48 +169,47 @@ class RF:
|
||||||
self.log.error("[MDM] Error stopping modem", e=err)
|
self.log.error("[MDM] Error stopping modem", e=err)
|
||||||
|
|
||||||
def init_audio(self):
|
def init_audio(self):
|
||||||
|
self.log.info(f"[MDM] init: get audio devices", input_device=self.audio_input_device,
|
||||||
|
output_device=self.audio_output_device)
|
||||||
try:
|
try:
|
||||||
self.log.info(f"[MDM] init: get audio devices", input_device=self.audio_input_device,
|
result = audio.get_device_index_from_crc(self.audio_input_device, True)
|
||||||
output_device=self.audio_output_device)
|
if result is None:
|
||||||
try:
|
raise ValueError("Invalid input device")
|
||||||
result = audio.get_device_index_from_crc(self.audio_input_device, True)
|
else:
|
||||||
if result is None:
|
in_dev_index, in_dev_name = result
|
||||||
raise ValueError("Invalid input device")
|
|
||||||
else:
|
|
||||||
in_dev_index, in_dev_name = result
|
|
||||||
|
|
||||||
result = audio.get_device_index_from_crc(self.audio_output_device, False)
|
result = audio.get_device_index_from_crc(self.audio_output_device, False)
|
||||||
if result is None:
|
if result is None:
|
||||||
raise ValueError("Invalid output device")
|
raise ValueError("Invalid output device")
|
||||||
else:
|
else:
|
||||||
out_dev_index, out_dev_name = result
|
out_dev_index, out_dev_name = result
|
||||||
|
|
||||||
self.log.info(f"[MDM] init: receiving audio from '{in_dev_name}'")
|
self.log.info(f"[MDM] init: receiving audio from '{in_dev_name}'")
|
||||||
self.log.info(f"[MDM] init: transmiting audio on '{out_dev_name}'")
|
self.log.info(f"[MDM] init: transmiting audio on '{out_dev_name}'")
|
||||||
self.log.debug("[MDM] init: starting pyaudio callback and decoding threads")
|
self.log.debug("[MDM] init: starting pyaudio callback and decoding threads")
|
||||||
|
|
||||||
# init codec2 resampler
|
# init codec2 resampler
|
||||||
self.resampler = codec2.resampler()
|
self.resampler = codec2.resampler()
|
||||||
|
|
||||||
# init audio stream
|
# init audio stream
|
||||||
self.stream = sd.RawStream(
|
self.stream = sd.RawStream(
|
||||||
channels=1,
|
channels=1,
|
||||||
dtype="int16",
|
dtype="int16",
|
||||||
callback=self.callback,
|
callback=self.callback,
|
||||||
device=(in_dev_index, out_dev_index),
|
device=(in_dev_index, out_dev_index),
|
||||||
samplerate=self.AUDIO_SAMPLE_RATE_RX,
|
samplerate=self.AUDIO_SAMPLE_RATE_RX,
|
||||||
blocksize=4800,
|
blocksize=4800,
|
||||||
)
|
)
|
||||||
self.stream.start()
|
self.stream.start()
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
except Exception as audioerr:
|
except Exception as audioerr:
|
||||||
self.log.error("[MDM] init: starting pyaudio callback failed", e=audioerr)
|
self.log.error("[MDM] init: starting pyaudio callback failed", e=audioerr)
|
||||||
|
|
||||||
except Exception as err:
|
|
||||||
self.log.warning("[MDM] init: can't open audio device. Stopping modem", e=err)
|
|
||||||
self.stop_modem()
|
self.stop_modem()
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def init_tci(self):
|
def init_tci(self):
|
||||||
# placeholder area for processing audio via TCI
|
# placeholder area for processing audio via TCI
|
||||||
|
|
|
@ -42,3 +42,4 @@ class SM:
|
||||||
del self.data_handler
|
del self.data_handler
|
||||||
self.modem = False
|
self.modem = False
|
||||||
self.data_handler = False
|
self.data_handler = False
|
||||||
|
threading.Event().wait(0.5)
|
||||||
|
|
Loading…
Reference in a new issue