amine@106: import os amine@106: import sys amine@106: import math amine@106: amine@106: amine@106: if sys.version_info >= (3, 0): amine@106: PYTHON_3 = True amine@106: else: amine@106: PYTHON_3 = False amine@106: amine@106: amine@106: def _sample_generator(*data_buffers): amine@106: """ amine@106: Takes a list of many mono audio data buffers and makes a sample generator amine@106: of interleaved audio samples, one sample from each channel. The resulting amine@106: generator can be used to build a multichannel audio buffer. amine@106: >>> gen = _sample_generator("abcd", "ABCD") amine@106: >>> list(gen) amine@106: ["a", "A", "b", "B", "c", "C", "d", "D"] amine@106: """ amine@106: frame_gen = zip(*data_buffers) amine@106: return (sample for frame in frame_gen for sample in frame) amine@106: amine@106: amine@106: def _array_to_bytes(a): amine@106: """ amine@106: Converts an `array.array` to `bytes`. amine@106: """ amine@106: if PYTHON_3: amine@106: return a.tobytes() amine@106: else: amine@106: return a.tostring()