2017-04-14 51 views
1

我想重叠1个wav文件的结尾,并在下一个文件的开始处有20%。像这样,可以覆盖的文件数量是可变的(通常在5-6左右)。Python - 覆盖超过3个WAV文件的端到端

我一直在使用pydub实施是扩大覆盖2个wav文件以下尝试:

from pydub import AudioSegment 

sound1 = AudioSegment.from_wav("/path/to/file1.wav") 
sound2 = AudioSegment.from_wav("/path/to/file1.wav") 

# mix sound2 with sound1, starting at 70% into sound1) 
output = sound1.overlay(sound2, position=0.7 * len(sound1)) 

# save the result 
output.export("mixed_sounds.wav", format="wav") 

写下了下面的程序:

for i in range(0,len(files_to_combine)-1): 
    if 'full_wav' in locals(): 
     prev_wav = full_wav 
    else: 
     prev = files_to_combine[i] 
     prev_wav = AudioSegment.from_wav(prev) 

    next = files_to_combine[i+1]   
    next_wav = AudioSegment.from_wav(next) 

    new_wave = prev_wav.overlay(next_wav,position=len(prev_wav) - 0.3 * len(next_wav)) 
    new_wave.export('partial_wav.wav', format='wav') 

    full_wav = AudioSegment.from_wav('partial_wav.wav') 

然而,当我看到最后一波文件,只有列表files_to_combine中的前2个文件实际组合在一起,而不是其他文件。这个想法是不断地重写partial_wav.wav,直到它最终包含近端的完整wav文件到结束重叠声音。为了调试,我将new_wave存储在每个组合的不同文件中。第一个wave文件是最后一个:它只显示前两个wave文件,而不是整个文件。此外,我预计每个迭代的len(partial_wav)会逐渐增加。 Hoever,这仍然是第一组合后的相同:

partial_wave : 237 
partial_wave : 237 
partial_wave : 237 
partial_wave : 237 
partial_wave : 237 

主要问题

如何重叠的wav文件的末尾(约近30%)与下月初进行超过3个波形文件?

回答

1

我相信你可以继续级联audiosegments,直到你的最后一段如下。

工作代码:

from pydub import AudioSegment 
from pydub.playback import play 

sound1 = AudioSegment.from_wav("SineWave_440Hz.wav") 
sound2 = AudioSegment.from_wav("SineWave_150Hz.wav") 
sound3 = AudioSegment.from_wav("SineWave_660Hz.wav") 


# mix sound2 with sound1, starting at 70% into sound1) 
tmpsound = sound1.overlay(sound2, position=0.7 * len(sound1)) 


# mix sound3 with sound1+sound2, starting at 30% into sound1+sound2) 
output = tmpsound .overlay(sound3, position=0.3 * len(tmpsound)) 

play(output) 
output.export("mixed_sounds.wav", format="wav")