Я работаю в программе, которая должна смешивать аудио массивы с заданным начальным индексом. Например
signal1 = np.array([1,2,3,4])
signal2 = np.array([5,5,5])
signal3 = np.array([7,7,7,7])
sig = np.array([signal1,signal2,signal3])
onset(0, 2, 8)
result = mixing_function(sig,onset)
Исходя из начала, signal2 будет добавляться к signal1 из индекса 2, а signal3 будет добавляться к миксу из индекса 8, поэтому часть микширования будет дополнена нулями. Должен вернуться:
[1,2,8,9,5,0,0,0,7,7,7,7]
Я не уверен, каков эффективный способ написания кода для этого. На данный момент я создал нулевой массив с максимальной длиной maxlen. Затем я добавляю каждый элемент в sig к соответствующему диапазону индекса результата:
def mixing_function(sig,onset):
maxlen = np.max([o + len(s) for o, s in zip(onset, sig)])
result = np.zeros(maxlen)
for i in range(len(onset)):
result[onset[i]:onset[i] + len(sig[i])] += sig[i]
return result
Тем не менее, это может быть довольно медленным, особенно когда много сигналов смешиваются друг с другом с разным началом. Пожалуйста, совет, если есть гораздо более эффективный способ
Большое спасибо
J