<div dir="ltr">Thank you Neil and Andrew for getting me pointed in the right direction. Here is where I am now.<div><br></div><div>I've taken Neil's suggestion of a Queue, and am using the multiprocessing module's Queue which is thread-safe, and am using that as the audio buffer. I then use multiprocessing's Process class to throw the generation process into a separate process, like so:</div><div><br></div><div><br></div><div><div><font face="monospace, monospace">import multiprocessing</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">audio_bytes = multiprocessing.Queue(maxsize=int(RATE/4.0))</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">def generate_samples():</font></div><div><font face="monospace, monospace">    while True:</font></div><div><font face="monospace, monospace">        audio_bytes.put((round(random.random() * VOLRANGE) + MINVOL))</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">def get_samples(in_data, frame_count, time_info, status_flags):<br></font></div><div><font face="monospace, monospace">    out_data = b""</font></div><div><font face="monospace, monospace">    for _ in range(frame_count):</font></div><div><font face="monospace, monospace">        out_data += pack('h', audio_bytes.get())</font></div><div><font face="monospace, monospace">    return out_data, pyaudio.paContinue</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">def main():</font></div><div><font face="monospace, monospace">    sound_process = multiprocessing.Process(target=generate_samples)</font></div><div><font face="monospace, monospace">    sound_process.start()</font></div></div><div><font face="monospace, monospace"><br></font></div><div><br></div><div>Currently, I'm using a buffer size of a quarter of a second. I'm still not using a generator to create the samples, but I'm working towards that. I wanted to get the basics down first.</div><div><br></div><div>I also thought that I could use asyncio's ensure_future() to accomplish effectively the same thing effectively, except asyncio is just concurrent, whereas multiprocessing is parallel (I believe?).</div><div><br></div><div>-Eric</div><div><br></div></div>