помните о том, что, насколько я знаю, чтение потоковых данных является своего рода генератором процесса. Когда вы читаете его, вы теряете данные. Другими словами: основываясь на вашем чанке, вы при каждом «чтении» перемещаете указатель, который захватывает ваши двоичные данные.
Ответ
Почему бы вам не создать 2 потока с 2 потоками? Не бойся потоков. Вы можете инициализировать столько, сколько хотите.
- 1 поток получает двоичные данные и передает их в поток (от клиента к звуковому устройству)
- 2 потока получают данные из вашего входного потока (в двоичном виде с вашего микрофона), и вы отправляете их на свой клиент?
Сейчас я немного работаю с PyAudio, и потоковая передача довольно интересна, но трудна для понимания с точки зрения программирования. На самом деле вы можете создать 2 выходных потока в своих наушниках и где-то на аппаратном уровне, по пути к вашим наушникам потоки суммируют себя, так что вы можете просто слушать два звука одновременно.
Примечание:
Также я хотел сказать, что вам не нужно беспокоиться об использовании потоков. Потоки работают в пакетном режиме, а не в реальном времени. Будь то чтение или запись, это работает так, что у вас есть двоичные данные, которые вы помещаете в поток, и все готово. Аппаратное обеспечение принимает двоичные данные, передает их в поток и только после его завершения поток запрашивает другие данные. Так что если у вас есть sample_rate 44100 и порция 22050 (только пример), ваш цикл будет всего 0,5 с. Так что вам даже не нужно беспокоиться о переполнении, слишком большом количестве данных для обработки или о том, что ваши потоки становятся сумасшедшими.
Фактически, в тот момент, когда вы отправляете данные в поток, ваш питон ждет, пока ваше оборудование завершит работу. Очень легкий.