Итак, я создаю программу голосовой связи, которая будет получать звук от нескольких пользователей. Я быстро понял, что звук нужно каким-то образом микшировать, проблема в том, что я не уверен, какие манипуляции со звуком мне нужно выполнить. На данный момент все, что я делаю, — это суммирую различные аудиодейтаграммы, поступающие от разных пользователей, делю их на количество пользователей и обрезаю значения до -1 и 1. Я думаю, что это очень грубо, но я не уверен, что еще делать. Было бы неплохо, если бы кто-нибудь дал мне совет о том, что еще следует реализовать с точки зрения микширования звука.
Вот ветка микширования, которая у меня есть на данный момент:
Код: Выделить всё
def AudioMix():
global RecievedAudio
global MixedAudio
FloatAudio = np.zeros(255, dtype=np.float32)
while True:
FloatAudio.fill(0)
PacksSummed = 0
for i in range(50):
if(RecievedAudio[i] != b''):
FloatAudio += np.frombuffer(RecievedAudio[i][4:BytesRecieved], dtype=np.float32)
del RecievedAudio[i][:BytesRecieved]
PacksSummed += 1
if(PacksSummed != 0):
FloatAudio /= PacksSummed
FloatAudio = np.clip(FloatAudio, -1.0, 1.0)
MixedAudio.extend(FloatAudio.tobytes())
time.sleep(0.001) # sleep for 1ms
Отдельный поток получает звук и в зависимости от того, какой пользователь его отправил (пользователь 0, пользователь 1 и т. д.), добавляет его в RecievedAudio, а затем поток вывода звука извлекает звук из MixedAudio.
Подробнее здесь:
https://stackoverflow.com/questions/798 ... e-voice-co