Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def audio_callback(outdata, frames, time, status):
if self._get_playback_state(stream_index) == PlaybackState.STOPPED:
raise sd.CallbackStop
while self._get_playback_state(stream_index) == PlaybackState.PAUSED:
self.playback_paused_changed[stream_index].wait()
assert frames == blocksize
if status.output_underflow:
self.logger.warning('Output underflow: increase blocksize?')
outdata = (b'\x00' if is_raw_stream else 0.) * len(outdata)
return
assert not status
try:
data = q.get_nowait()
except queue.Empty:
self.logger.warning('Buffer is empty: increase buffersize?')
format(frames, blocksize))
return
if status.output_underflow:
self.logger.warning('Output underflow: increase blocksize?')
outdata = (b'\x00' if is_raw_stream else 0.) * len(outdata)
return
if status:
self.logger.warning('Audio callback failed: {}'.format(status))
try:
data = q.get_nowait()
except queue.Empty:
self.logger.warning('Buffer is empty: increase buffersize?')
raise sd.CallbackStop
if len(data) < len(outdata):
outdata[:len(data)] = data
outdata[len(data):] = (b'\x00' if is_raw_stream else 0.) * \
(len(outdata) - len(data))
else:
outdata[:] = data
def callback(outdata, frames, time, status):
assert frames == args.blocksize
if status.output_underflow:
print('Output underflow: increase blocksize?', file=sys.stderr)
raise sd.CallbackAbort
assert not status
try:
data = q.get_nowait()
except queue.Empty:
print('Buffer is empty: increase buffersize?', file=sys.stderr)
raise sd.CallbackAbort
if len(data) < len(outdata):
outdata[:len(data)] = data
outdata[len(data):] = b'\x00' * (len(outdata) - len(data))
raise sd.CallbackStop
else:
outdata[:] = data
def callback(outdata, frame_count, time_info, status):
nonlocal idx
if status:
print(status)
remainder = len(buffer) - idx
if remainder == 0:
loop.call_soon_threadsafe(event.set)
raise sd.CallbackStop
valid_frames = frame_count if remainder >= frame_count else remainder
outdata[:valid_frames] = buffer[idx:idx + valid_frames]
outdata[valid_frames:] = 0
idx += valid_frames
def streamcallback(self, outdata: bytearray, frames: int, time: int, status: int) -> None:
try:
data = next(self.mixed_chunks)
except StopIteration:
raise sounddevice.CallbackStop # type: ignore # play remaining buffer and then stop the stream
if not data:
# no frames available, use silence
assert len(outdata) == len(self._empty_sound_data)
outdata[:] = self._empty_sound_data
elif len(data) < len(outdata):
# print("underflow", len(data), len(outdata))
# underflow, pad with silence
outdata[:len(data)] = data
outdata[len(data):] = b"\0" * (len(outdata) - len(data))
else:
outdata[:] = data
if self.playing_callback:
sample = Sample.from_raw_frames(outdata[:], self.samplewidth, self.samplerate, self.nchannels)
self.playing_callback(sample)
def _wrap_callback(callback, *args):
"""Invoke callback function and check for custom exceptions."""
args = args[:-1] + (CallbackFlags(args[-1]),)
try:
callback(*args)
except CallbackStop:
return _lib.paComplete
except CallbackAbort:
return _lib.paAbort
return _lib.paContinue