diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ba0a51b07..e9f35797c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -55,6 +55,9 @@ These changes are available on the `master` branch, but have not yet been releas ([#2496](https://github.com/Pycord-Development/pycord/pull/2496)) - ⚠️ **Removed support for Python 3.8.** ([#2521](https://github.com/Pycord-Development/pycord/pull/2521)) +- Replaced audioop (deprecated module) implementation of `PCMVolumeTransformer.read` + method with a pure Python equivalent. + ([#2176](https://github.com/Pycord-Development/pycord/pull/2176)) ### Deprecated diff --git a/discord/player.py b/discord/player.py index 9868aabe70..65b23ed42a 100644 --- a/discord/player.py +++ b/discord/player.py @@ -25,8 +25,8 @@ from __future__ import annotations +import array import asyncio -import audioop import io import json import logging @@ -37,6 +37,7 @@ import threading import time import traceback +from math import floor from typing import IO, TYPE_CHECKING, Any, Callable, Generic, TypeVar from .errors import ClientException @@ -704,8 +705,17 @@ def cleanup(self) -> None: self.original.cleanup() def read(self) -> bytes: + maxval = 0x7FFF + minval = -0x8000 + + volume = min(self._volume, 2.0) ret = self.original.read() - return audioop.mul(ret, 2, min(self._volume, 2.0)) + samples = array.array("h") + samples.frombytes(ret) + for i in range(len(samples)): + samples[i] = int(floor(min(maxval, max(samples[i] * volume, minval)))) + + return samples.tobytes() class AudioPlayer(threading.Thread): diff --git a/requirements/dev.txt b/requirements/dev.txt index 3a4a5a1a28..744004f276 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -3,7 +3,7 @@ pylint~=3.3.1 pytest~=8.3.3 pytest-asyncio~=0.23.8 # pytest-order~=1.0.1 -mypy~=1.11.2 +mypy~=1.12.0 coverage~=7.6 pre-commit==4.0.1 codespell==2.3.0