Как сложить каждую строку перестановки в python - PullRequest
1 голос
/ 07 января 2020

Моя цель состоит в том, чтобы по-разному суммировать десять аудиофайлов, полученных из перестановок, чтобы иметь разные аудиофайлы для каждой перестановки (всего 10! = 3 628 800 конечных аудиосигналов) и экспортировать их в виде файлов wav.

Пример (sound1 + sound3 + sound2 + sound4 + sound 8 + sound6 + sound5 + sound7 + sound10 + sound9 = первый звук и т. Д. c.)

Как это сделать ?. Я пытался, но у меня возникли некоторые проблемы с суммой.

Вот что я сделал до сих пор

from pydub import AudioSegment
import itertools

sound1 = AudioSegment.from_wav("/Users/Desktop/Countingpuppet/Music/1_R.wav")
sound2 = AudioSegment.from_wav("/Users/Desktop/Countingpuppet/Music/2_R.wav")
sound3 = AudioSegment.from_wav("/Users/Desktop/Countingpuppet/Music/3_R.wav")
sound4 = AudioSegment.from_wav("/Users/Desktop/Countingpuppet/Music/4_R.wav")
sound5 = AudioSegment.from_wav("/Users/Desktop/Countingpuppet/Music/5_R.wav")
sound6 = AudioSegment.from_wav("/Users/Desktop/Countingpuppet/Music/6_R.wav")
sound7 = AudioSegment.from_wav("/Users/Desktop/Countingpuppet/Music/7_R.wav")
sound8 = AudioSegment.from_wav("/Users/Desktop/Countingpuppet/Music/8_R.wav")
sound9 = AudioSegment.from_wav("/Users/Desktop/Countingpuppet/Music/9_R.wav")
sound10 = AudioSegment.from_wav("/Users/Desktop/Countingpuppet/Music/10_R.wav")

lis = (sound1,sound2,sound3,sound4,sound5,sound6,sound7,sound8,sound9,sound10)

list(itertools.permutations(lis))

dc = []
for i in range(1, len(lis) + 1):
    #sum(list(itertools.permutations(lis, i)))
    sum(lis(i))
    #dc += lis(i)

#combined_sounds = sound1 + sound2
#combined_sounds.export("/output/path.wav", format="wav")

1 Ответ

1 голос
/ 07 января 2020

Пусть myPerm будет перестановкой целых чисел {0,...,9}, вы, вероятно, хотите это:

sum([lis(i) for i in myPerm])

, но, если сумма является коммутативной (то есть a+b == b+a), вы, вероятно, на самом деле не хотите что вы утверждаете, что хотите достичь.

РЕДАКТИРОВАТЬ:

После того, как я прочитал ваше редактирование, я думаю, что вы хотите сделать аналогичный

t = ("ba","a","c")
["".join(i) for i in itertools.permutations(t)]

для аудиофайлов.

Посмотрев на этот ответ: { ссылка } Я заключаю, что вы должны заменить "".join(i) на sum(i, AudioSegment.empty()). Я надеюсь, что это решит вашу проблему. (Я не пробовал сам на своей машине)

...