import io from discord.sinks.core import Filters, Sink, default_filters, AudioData class StreamingSink(Sink): """A custom sink that will convert the audio to """ def __init__(self, signals, stt, filters=None): if filters is None: filters = default_filters self.filters = filters Filters.__init__(self, **self.filters) self.encoding = "pcm" self.vc = None self.audio_data = {} self.signals = signals self.stt = stt # Override the write method to instead stream the audio elsewhere @Filters.container def write(self, data, user): print("Receiving voice") if user not in self.audio_data: file = io.BytesIO() self.audio_data.update({user: AudioData(file)}) file = self.audio_data[user] file.write(data) # # Save sound data to AudioSegment object # sound = AudioSegment( # # raw audio data (bytes) # data=data, # # 2 byte (16 bit) samples # sample_width=2, # # 48 kHz frame rate # frame_rate=48000, # # stereo # channels=2 # ) # # Convert sound to mono # sound = sound.set_channels(1) # # Convert sound to 16khz # sound = sound.set_frame_rate(16000) # # Send the 16bit 16khz mono PCM audio data to STT # if self.signals.stt_ready: # self.stt.feed_audio(sound.raw_data) # print("FEEDING AUDIO") def format_audio(self, audio): return