mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-09-05 17:36:15 +00:00
Rewrite voice connection internals
This commit is contained in:
@ -703,7 +703,6 @@ class AudioPlayer(threading.Thread):
|
||||
self._resumed: threading.Event = threading.Event()
|
||||
self._resumed.set() # we are not paused
|
||||
self._current_error: Optional[Exception] = None
|
||||
self._connected: threading.Event = client._connected
|
||||
self._lock: threading.Lock = threading.Lock()
|
||||
|
||||
if after is not None and not callable(after):
|
||||
@ -714,7 +713,8 @@ class AudioPlayer(threading.Thread):
|
||||
self._start = time.perf_counter()
|
||||
|
||||
# getattr lookup speed ups
|
||||
play_audio = self.client.send_audio_packet
|
||||
client = self.client
|
||||
play_audio = client.send_audio_packet
|
||||
self._speak(SpeakingState.voice)
|
||||
|
||||
while not self._end.is_set():
|
||||
@ -725,22 +725,28 @@ class AudioPlayer(threading.Thread):
|
||||
self._resumed.wait()
|
||||
continue
|
||||
|
||||
# are we disconnected from voice?
|
||||
if not self._connected.is_set():
|
||||
# wait until we are connected
|
||||
self._connected.wait()
|
||||
# reset our internal data
|
||||
self.loops = 0
|
||||
self._start = time.perf_counter()
|
||||
|
||||
self.loops += 1
|
||||
data = self.source.read()
|
||||
|
||||
if not data:
|
||||
self.stop()
|
||||
break
|
||||
|
||||
# are we disconnected from voice?
|
||||
if not client.is_connected():
|
||||
_log.debug('Not connected, waiting for %ss...', client.timeout)
|
||||
# wait until we are connected, but not forever
|
||||
connected = client.wait_until_connected(client.timeout)
|
||||
if self._end.is_set() or not connected:
|
||||
_log.debug('Aborting playback')
|
||||
return
|
||||
_log.debug('Reconnected, resuming playback')
|
||||
self._speak(SpeakingState.voice)
|
||||
# reset our internal data
|
||||
self.loops = 0
|
||||
self._start = time.perf_counter()
|
||||
|
||||
play_audio(data, encode=not self.source.is_opus())
|
||||
self.loops += 1
|
||||
next_time = self._start + self.DELAY * self.loops
|
||||
delay = max(0, self.DELAY + (next_time - time.perf_counter()))
|
||||
time.sleep(delay)
|
||||
@ -792,7 +798,7 @@ class AudioPlayer(threading.Thread):
|
||||
def is_paused(self) -> bool:
|
||||
return not self._end.is_set() and not self._resumed.is_set()
|
||||
|
||||
def _set_source(self, source: AudioSource) -> None:
|
||||
def set_source(self, source: AudioSource) -> None:
|
||||
with self._lock:
|
||||
self.pause(update_speaking=False)
|
||||
self.source = source
|
||||
|
Reference in New Issue
Block a user