Skip to content

Commit ba7471b

Browse files
authored
Merge branch 'master' into feat/audioop
2 parents 8b4364e + fce7396 commit ba7471b

File tree

5 files changed

+20
-3
lines changed

5 files changed

+20
-3
lines changed

.pre-commit-config.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ repos:
2121
# - --remove-duplicate-keys
2222
# - --remove-unused-variables
2323
- repo: https://github.com/asottile/pyupgrade
24-
rev: v3.17.0
24+
rev: v3.18.0
2525
hooks:
2626
- id: pyupgrade
2727
exclude: \.(po|pot|yml|yaml)$
@@ -31,7 +31,7 @@ repos:
3131
- id: isort
3232
exclude: \.(po|pot|yml|yaml)$
3333
- repo: https://github.com/psf/black
34-
rev: 24.8.0
34+
rev: 24.10.0
3535
hooks:
3636
- id: black
3737
args: [--safe, --quiet]

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ These changes are available on the `master` branch, but have not yet been releas
2222
`tags`. ([#2520](https://github.com/Pycord-Development/pycord/pull/2520))
2323
- Added `Member.guild_banner` and `Member.display_banner` properties.
2424
([#2556](https://github.com/Pycord-Development/pycord/pull/2556))
25+
- Added `elapsed` method to `VoiceClient`.
26+
([#2587](https://github.com/Pycord-Development/pycord/pull/2587/))
2527
- Added optional `filter` parameter to `utils.basic_autocomplete()`.
2628
([#2590](https://github.com/Pycord-Development/pycord/pull/2590))
2729

discord/player.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -734,6 +734,7 @@ def __init__(self, source: AudioSource, client: VoiceClient, *, after=None):
734734
self._current_error: Exception | None = None
735735
self._connected: threading.Event = client._connected
736736
self._lock: threading.Lock = threading.Lock()
737+
self._played_frames_offset: int = 0
737738

738739
if after is not None and not callable(after):
739740
raise TypeError('Expected a callable for the "after" parameter.')
@@ -761,10 +762,12 @@ def _do_run(self) -> None:
761762
# wait until we are connected
762763
self._connected.wait()
763764
# reset our internal data
765+
self._played_frames_offset += self.loops
764766
self.loops = 0
765767
self._start = time.perf_counter()
766768

767769
self.loops += 1
770+
768771
# Send the data read from the start of the function if it is not None
769772
if first_data is not None:
770773
data = first_data
@@ -819,6 +822,7 @@ def pause(self, *, update_speaking: bool = True) -> None:
819822
self._speak(False)
820823

821824
def resume(self, *, update_speaking: bool = True) -> None:
825+
self._played_frames_offset += self.loops
822826
self.loops = 0
823827
self._start = time.perf_counter()
824828
self._resumed.set()
@@ -844,3 +848,7 @@ def _speak(self, speaking: bool) -> None:
844848
)
845849
except Exception as e:
846850
_log.info("Speaking call in player failed: %s", e)
851+
852+
def played_frames(self) -> int:
853+
"""Gets the number of 20ms frames played since the start of the audio file."""
854+
return self._played_frames_offset + self.loops

discord/voice_client.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
from __future__ import annotations
4141

4242
import asyncio
43+
import datetime
4344
import logging
4445
import select
4546
import socket
@@ -988,3 +989,9 @@ def send_audio_packet(self, data: bytes, *, encode: bool = True) -> None:
988989
)
989990

990991
self.checked_add("timestamp", opus.Encoder.SAMPLES_PER_FRAME, 4294967295)
992+
993+
def elapsed(self) -> datetime.timedelta:
994+
"""Returns the elapsed time of the playing audio."""
995+
if self._player:
996+
return datetime.timedelta(milliseconds=self._player.played_frames() * 20)
997+
return datetime.timedelta()

requirements/dev.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ pylint~=3.3.1
33
pytest~=8.3.3
44
pytest-asyncio~=0.23.8
55
# pytest-order~=1.0.1
6-
mypy~=1.11.2
6+
mypy~=1.12.0
77
coverage~=7.6
88
pre-commit==4.0.1
99
codespell==2.3.0

0 commit comments

Comments
 (0)