Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def stream_file(filename: str, output_format: SampleFormat = SampleFormat.SIGNED16, nchannels: int = 2,
sample_rate: int = 44100, frames_to_read: int = 1024,
dither: DitherMode = DitherMode.NONE, seek_frame: int = 0) -> Generator[array.array, int, None]:
"""
Convenience generator function to decode and stream any supported audio file
as chunks of raw PCM samples in the chosen format.
If you send() a number into the generator rather than just using next() on it,
you'll get that given number of frames, instead of the default configured amount.
This is particularly useful to plug this stream into an audio device callback that
wants a variable number of frames per call.
"""
filenamebytes = _get_filename_bytes(filename)
decoder = ffi.new("ma_decoder *")
decoder_config = lib.ma_decoder_config_init(output_format.value, nchannels, sample_rate)
decoder_config.ditherMode = dither.value
result = lib.ma_decoder_init_file(filenamebytes, ffi.addressof(decoder_config), decoder)
if result != lib.MA_SUCCESS:
raise DecodeError("failed to init decoder", result)
if seek_frame > 0: