aboutsummaryrefslogtreecommitdiff
path: root/discord/opus.py
diff options
context:
space:
mode:
authorRapptz <[email protected]>2017-04-18 02:29:43 -0400
committerRapptz <[email protected]>2017-04-18 03:49:48 -0400
commit3b1b26ffb1c9a75ac9c3f958d6e134ccddd6be07 (patch)
treedcaac87b10f4d2a2bdf82f260a5738c1367f425f /discord/opus.py
parentDon't clear state when READY is reached for auto sharded clients. (diff)
downloaddiscord.py-3b1b26ffb1c9a75ac9c3f958d6e134ccddd6be07.tar.xz
discord.py-3b1b26ffb1c9a75ac9c3f958d6e134ccddd6be07.zip
Re-implement voice sending.
This is a complete redesign of the old voice code. A list of major changes is as follows: * The voice websocket will now automatically reconnect with exponential back-off just like the regular Client does. * Removal of the stream player concept. * Audio now gracefully pauses and resumes when a disconnect is found. * Introduce a discord.AudioSource concept to abstract streams * Flatten previous stream player functionality with the VoiceClient, e.g. player.stop() is now voice_client.stop() * With the above re-coupling this means you no longer have to store players anywhere. * The after function now requires a single parameter, the error, if any existed. This will typically be None. A lot of this design is experimental.
Diffstat (limited to 'discord/opus.py')
-rw-r--r--discord/opus.py19
1 files changed, 10 insertions, 9 deletions
diff --git a/discord/opus.py b/discord/opus.py
index 911501c1..fcf27a72 100644
--- a/discord/opus.py
+++ b/discord/opus.py
@@ -183,15 +183,16 @@ signal_ctl = {
}
class Encoder:
- def __init__(self, sampling, channels, application=APPLICATION_AUDIO):
- self.sampling_rate = sampling
- self.channels = channels
- self.application = application
+ SAMPLING_RATE = 48000
+ CHANNELS = 2
+ FRAME_LENGTH = 20
+ SAMPLE_SIZE = 4 # (bit_rate / 8) * CHANNELS (bit_rate == 16)
+ SAMPLES_PER_FRAME = int(SAMPLING_RATE / 1000 * FRAME_LENGTH)
+
+ FRAME_SIZE = SAMPLES_PER_FRAME * SAMPLE_SIZE
- self.frame_length = 20
- self.sample_size = 2 * self.channels # (bit_rate / 8) but bit_rate == 16
- self.samples_per_frame = int(self.sampling_rate / 1000 * self.frame_length)
- self.frame_size = self.samples_per_frame * self.sample_size
+ def __init__(self, application=APPLICATION_AUDIO):
+ self.application = application
if not is_loaded():
raise OpusNotLoaded()
@@ -210,7 +211,7 @@ class Encoder:
def _create_state(self):
ret = ctypes.c_int()
- result = _lib.opus_encoder_create(self.sampling_rate, self.channels, self.application, ctypes.byref(ret))
+ result = _lib.opus_encoder_create(self.SAMPLING_RATE, self.CHANNELS, self.application, ctypes.byref(ret))
if ret.value != 0:
log.info('error has happened in state creation')