def run(self): logger.debug("AudioOutputLoop started") self._isRunning = True while self._isRunning: startTime = clock() self._lock.acquire(True) # do cool stuff here if self.numFrames + self._bufferSize > self.totalFrames: self._isRunning = False else: startFrame = self.numFrames endFrame = startFrame + self._bufferSize * 2 bytesOut = bytes(self.allsamples[startFrame:endFrame]) sound = pygame.mixer.Sound(self.allsamples[startFrame:endFrame]) self._channel.play(sound) self.numFrames += self._bufferSize * 2 stopTime = clock() timeInBlockInSec = (stopTime - startTime) sleepTime = self._maxTimePerBlockInSec - timeInBlockInSec if sleepTime < 0: logger.warn("Audio dropout!") else: logger.info("CPU: %f", 100 * timeInBlockInSec / self._maxTimePerBlockInSec) sleep(sleepTime) self._lock.release()
def addRequest(self, request:MediaRequest): try: self.queue.put(request, block = False) except queue.Full: logger.warn("Failed adding request, queue is full")