mirror of
https://github.com/DJ2LS/FreeDATA
synced 2024-05-14 08:04:33 +00:00
adjusted server shutdown and transmitting state
This commit is contained in:
parent
787cb2d862
commit
41d9642eb1
3 changed files with 14 additions and 11 deletions
|
@ -1,16 +1,12 @@
|
|||
"""
|
||||
Gather information about audio devices.
|
||||
"""
|
||||
import atexit
|
||||
import multiprocessing
|
||||
import crcengine
|
||||
import sounddevice as sd
|
||||
import structlog
|
||||
import numpy as np
|
||||
import queue
|
||||
import threading
|
||||
|
||||
atexit.register(sd._terminate)
|
||||
|
||||
log = structlog.get_logger("audio")
|
||||
|
||||
|
|
|
@ -9,7 +9,6 @@ Created on Wed Dec 23 07:04:24 2020
|
|||
# pylint: disable=invalid-name, line-too-long, c-extension-no-member
|
||||
# pylint: disable=import-outside-toplevel
|
||||
|
||||
import atexit
|
||||
import queue
|
||||
import time
|
||||
import codec2
|
||||
|
@ -56,6 +55,7 @@ class RF:
|
|||
|
||||
|
||||
self.ptt_state = False
|
||||
self.enqueuing_audio = False # set to True, while we are processing audio
|
||||
|
||||
self.AUDIO_SAMPLE_RATE = 48000
|
||||
self.modem_sample_rate = codec2.api.FREEDV_FS_8000
|
||||
|
@ -104,9 +104,6 @@ class RF:
|
|||
if not self.init_audio():
|
||||
raise RuntimeError("Unable to init audio devices")
|
||||
self.demodulator.start(self.sd_input_stream)
|
||||
atexit.register(self.sd_input_stream.stop)
|
||||
|
||||
|
||||
|
||||
return True
|
||||
|
||||
|
@ -247,6 +244,8 @@ class RF:
|
|||
|
||||
|
||||
def enqueue_audio_out(self, audio_48k) -> None:
|
||||
self.enqueuing_audio = True
|
||||
|
||||
if not self.states.isTransmitting():
|
||||
self.states.setTransmitting(True)
|
||||
|
||||
|
@ -267,6 +266,7 @@ class RF:
|
|||
for block in sliced_audio_data:
|
||||
self.audio_out_queue.put(block)
|
||||
|
||||
self.enqueuing_audio = False
|
||||
self.states.transmitting_event.wait()
|
||||
|
||||
self.radio.set_ptt(False)
|
||||
|
@ -275,7 +275,6 @@ class RF:
|
|||
return
|
||||
|
||||
def sd_output_audio_callback(self, outdata: np.ndarray, frames: int, time, status) -> None:
|
||||
|
||||
try:
|
||||
if not self.audio_out_queue.empty():
|
||||
chunk = self.audio_out_queue.get_nowait()
|
||||
|
@ -283,8 +282,11 @@ class RF:
|
|||
outdata[:] = chunk.reshape(outdata.shape)
|
||||
|
||||
else:
|
||||
# Fill with zeros if the queue is empty
|
||||
# reset transmitting state only, if we are not actively processing audio
|
||||
# for avoiding a ptt toggle state bug
|
||||
if not self.enqueuing_audio:
|
||||
self.states.setTransmitting(False)
|
||||
# Fill with zeros if the queue is empty
|
||||
outdata.fill(0)
|
||||
except Exception as e:
|
||||
self.log.warning("[AUDIO STATUS]", status=status, time=time, frames=frames, e=e)
|
||||
|
|
|
@ -328,9 +328,13 @@ def sock_states(sock):
|
|||
def stop_server():
|
||||
try:
|
||||
app.service_manager.stop_modem()
|
||||
except Exception:
|
||||
if app.service_manager.modem:
|
||||
app.service_manager.modem.sd_input_stream.stop
|
||||
audio.sd._terminate()
|
||||
except Exception as e:
|
||||
print("Error stopping modem")
|
||||
time.sleep(1)
|
||||
print("------------------------------------------")
|
||||
print('Server shutdown...')
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
@ -367,4 +371,5 @@ if __name__ == "__main__":
|
|||
modemaddress = '127.0.0.1'
|
||||
if not modemport:
|
||||
modemport = 5000
|
||||
|
||||
app.run(modemaddress, modemport)
|
||||
|
|
Loading…
Reference in a new issue