No more ffmpeg in ffmpegfile (lol) a little laggy, maybe?
authorjweigele <jweigele@local>
Thu, 15 Sep 2022 19:00:40 +0000 (12:00 -0700)
committerjweigele <jweigele@local>
Thu, 15 Sep 2022 19:00:40 +0000 (12:00 -0700)
ffmpegfile.py

index 54c0d01e6e2839f1d0af85fb8c6dd2559778294c..927fd48309296fc79e082e46e401e95f9a566979 100644 (file)
@@ -33,11 +33,16 @@ class AudioChunk(object):
             self.samples = numpy.array([x[0] for x in struct.iter_unpack('<h', init_bytes)])
         elif init_samples is not None:
             self.samples = init_samples
+            #log.debug('init by samples')
+            if len(self.samples) < MAX_SAMPLES*2:
+                samples_to_add = int(MAX_SAMPLES*2 - len(self.samples))
+                #log.debug('samples to add: {}'.format(samples_to_add))
+                self.samples = numpy.concatenate((self.samples, numpy.array([0]*samples_to_add)))
 
     @property
     def sample_buffer(self):
         #log.debug(self.samples)
-        log.debug(len(self.samples))
+        #log.debug(len(self.samples))
         #log.debug(list(self.samples))
         return struct.pack('<'+'h'*self.samples.size, *list(self.samples)) 
 
@@ -179,8 +184,20 @@ class AudioBuffer(discord.AudioSource):
                 #log.debug(next_samples)
                 while numpy.size(next_samples) > 0:
                     # switch to mono if needed (channel shouldn't change from initial)
-                    if channels == 3:
-                        next_samples = numpy.delete(next_samples, 1, 0)
+                    #log.debug('channels are {}'.format(channels))
+                    if channels == 2:
+                        #log.debug('before deleting {}'.format(next_samples.shape))
+                        #log.debug(next_samples[0][:10])
+                        #next_samples = numpy.squeeze(next_samples.reshape(1, -1))
+                        # total length * 2
+                        rechannel = numpy.empty(next_samples[0].shape[0]*2, dtype='float32')
+                        # first channel
+                        rechannel[::2] = next_samples[0]
+                        # second channel
+                        rechannel[1::2] = next_samples[1]
+                        next_samples = rechannel
+                        #log.debug('after deleting {}'.format(next_samples.shape))
+                        #log.debug(next_samples[:10])
                     # for the downcast to int16
                     next_samples *= 32768.0
                     next_bytes = next_samples.astype('int16')