Browse Source

Change waveform data to be input as a list of ints

pull/10230/head
blord0 1 month ago
parent
commit
8bea5c3aa9
  1. 22
      discord/file.py

22
discord/file.py

@ -120,7 +120,7 @@ class File:
description: Optional[str] = None, description: Optional[str] = None,
voice: bool = MISSING, voice: bool = MISSING,
duration: Optional[float] = None, duration: Optional[float] = None,
waveform: Optional[str] = None, waveform: Optional[list[int]] = None,
): ):
if isinstance(fp, io.IOBase): if isinstance(fp, io.IOBase):
if not (fp.seekable() and fp.readable()): if not (fp.seekable() and fp.readable()):
@ -153,6 +153,13 @@ class File:
self.spoiler: bool = spoiler self.spoiler: bool = spoiler
self.description: Optional[str] = description self.description: Optional[str] = description
self.duration = duration self.duration = duration
if waveform is not None:
if len(waveform) > 256:
raise ValueError("Waveforms have a maximum of 256 values")
elif max(waveform) > 255:
raise ValueError("Maximum value of ints is 255 for waveforms")
elif min(waveform) < 0:
raise ValueError("Minimum value of ints is 0 for waveforms")
self._waveform = waveform self._waveform = waveform
if voice is MISSING: if voice is MISSING:
@ -171,8 +178,8 @@ class File:
return 'SPOILER_' + self._filename if self.spoiler else self._filename return 'SPOILER_' + self._filename if self.spoiler else self._filename
@property @property
def waveform(self) -> str: def waveform(self) -> list[int]:
""":class:`str`: The waveform data for the voice message. """:class:`list[int]`: The waveform data for the voice message.
.. note:: .. note::
If a waveform was not given, it will be generated If a waveform was not given, it will be generated
@ -184,7 +191,7 @@ class File:
try: try:
self._waveform = self.generate_waveform() self._waveform = self.generate_waveform()
except Exception: except Exception:
self._waveform = base64.b64encode(os.urandom(256)).decode('utf-8') self._waveform = list(os.urandom(256))
self.reset() self.reset()
return self._waveform return self._waveform
@ -220,11 +227,11 @@ class File:
if self.voice: if self.voice:
payload['duration_secs'] = self.duration payload['duration_secs'] = self.duration
payload['waveform'] = self.waveform payload['waveform'] = base64.b64encode(bytes(self.waveform)).decode('utf-8')
return payload return payload
def generate_waveform(self) -> str: def generate_waveform(self) -> list[int]:
if not self.voice: if not self.voice:
raise ValueError("Cannot produce waveform for non voice file") raise ValueError("Cannot produce waveform for non voice file")
self.reset() self.reset()
@ -276,5 +283,4 @@ class File:
for i in range(len(sample_waveform)): for i in range(len(sample_waveform)):
sample_waveform[i] = int(sample_waveform[i] * mult) sample_waveform[i] = int(sample_waveform[i] * mult)
print(len(sample_waveform)) return sample_waveform
return base64.b64encode(bytes(sample_waveform)).decode('utf-8')

Loading…
Cancel
Save