| | |
| | | TAG = __name__ |
| | | logger = setup_logging() |
| | | |
| | | AUDIO_FRAME_DURATION = 60 |
| | | AUDIO_COMPLETION_TIMEOUT_MIN = 8.0 |
| | | AUDIO_COMPLETION_TIMEOUT_MAX = 180.0 |
| | | |
| | | |
| | | def audio_completion_timeout_sec(queue_len: int, frame_ms: int = AUDIO_FRAME_DURATION) -> float: |
| | | """Wait long enough for remaining opus frames, plus a small drain margin.""" |
| | | try: |
| | | remaining = int(queue_len or 0) |
| | | except (TypeError, ValueError): |
| | | remaining = 0 |
| | | if remaining < 0: |
| | | remaining = 0 |
| | | try: |
| | | frame = int(frame_ms or AUDIO_FRAME_DURATION) |
| | | except (TypeError, ValueError): |
| | | frame = AUDIO_FRAME_DURATION |
| | | if frame <= 0: |
| | | frame = AUDIO_FRAME_DURATION |
| | | return min( |
| | | AUDIO_COMPLETION_TIMEOUT_MAX, |
| | | max(AUDIO_COMPLETION_TIMEOUT_MIN, remaining * frame / 1000.0 + AUDIO_COMPLETION_TIMEOUT_MIN), |
| | | ) |
| | | |
| | | |
| | | class AudioRateController: |
| | | """ |