2017-04-14 16 views
1

1 WAV 파일의 끝을 다음 파일의 시작 부분의 20 %로 겹치려고합니다. 이와 같이, overla (일반적으로 약 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') 

을, 나는 마지막 웨이브 파일을 볼 때 목록의 처음 2 개 파일 만 실제로 결합되었고 나머지는 합성되지 않았습니다. 마지막으로 겹쳐진 사운드를 끝내기 위해 니어 엔드의 전체 wav 파일을 마지막으로 포함 할 때까지 partial_wav.wav을 계속 재 작성했습니다. 이를 디버깅하기 위해 모든 조합에 대해 서로 다른 파일에 new_wave을 저장했습니다. 첫 번째 웨이브 파일은 마지막 파일입니다. 전체 웨이브 파일 대신 처음 두 웨이브 파일 만 표시됩니다. 또한 모든 반복에 대해 len(partial_wav)이 점차 증가 할 것으로 예상했습니다.

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

주요 질문 내가 (마지막 30 %에 대해) 하나 개의 wav 파일의 끝을 겹쳐 어떻게

다음의 시작에와 : Hoever이 첫 번째 조합으로 동일하게 유지 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")