2010-05-23 8 views
14

파이썬 프로그래밍 언어를 사용하고 있습니다. 다른 wav 파일의 끝에 wav 파일 하나에 합류하고 싶습니다. 두 개의 wav 파일을 병합하는 방법을 제안하는 포럼에 질문이 있습니다. 즉, 특정 오프셋에서 하나의 wav 파일의 내용을 추가하지만 서로의 끝에 두 개의 wav 파일을 결합하고 싶습니다 ...파이썬을 사용하여 두 개의 wav 파일을 결합하는 방법은 무엇입니까?

그리고 또한 winsound 모듈을 사용하여 내 자신의 wav 파일을 재생 prob했다. 나는 소리를 재생할 수 있지만 특정 시간 동안 모든 Windows 사운드를 재생하기 전에 time.sleep 사용하여 단점 위트 이것은 내가 소리를 재생하려면 원하는 경우입니다 더 긴 thn time.sleep (N), N 초 또한, N 초 후에 wsound nd stop을 재생하면 windows 소리가 겹치지 않게됩니다.

누구든지 도움을 줄 수 있습니까?

감사합니다. N

답변

1

당신이 사용할 수있는 사전 audiolab :

import audiolab, scipy 
a, fs, enc = audiolab.wavread('file1.wav') 
b, fs, enc = audiolab.wavread('file2.wav') 
c = scipy.vstack((a,b)) 
audiolab.wavwrite(c, 'file3.wav', fs, enc) 
+0

scipy를 사용하기 위해 패키지를 설치해야합니까 ... python2.6을 사용하고 있습니다. 다운로드 할 수있는 호환 버전을 얻을 수 있습니까? ..i fip scipy 사이트 자체 bt에 직면 sme prob ... if ne 설치 거기에 제안하십시오 .. 대답을 주셔서 감사합니다 ... 어떻게 소리를 재생할 수 있습니다, 나는 내 prob 위트 playin, 모든 언급 그것을 측정 fr ?? – kaushik

+0

Python 2.6이 좋으며 Numpy/Scipy 웹 사이트도 괜찮을 것입니다. 나는 다른 사람들이 당신의 질문에 대답하도록하고 더 많은 제안을 할 수 있습니다. 내 대답은 효과가 있지만, 아마도 더 우아한, 직접 솔루션이 있습니다. –

+0

Ahh ..thanks, ne way playin wav 파일에 대한 내 다른 prob가 지금 해결되었습니다 ... – kaushik

0

내가 SOX [1] 라이브러리를 사용하여 다음과

>>> import subprocess 
>>> sound_output_path = /tmp 
>>> sox_filenames = ['file.wav', 'file1.wav'] 
>>> subprocess.call(['sox'] + sox_filenames + ['%s/out.wav' % sound_output_path]) 

[1] http://sox.sourceforge.net/

30

파이썬 선박과 같이 호출 wave 필요한 것을 할 수있는 모듈. 아래의 예는 파일 (모노 또는 스테레오, 프레임 속도 등)의 세부 사항이 동일 할 때 작동합니다

import wave 

infiles = ["sound_1.wav", "sound_2.wav"] 
outfile = "sounds.wav" 

data= [] 
for infile in infiles: 
    w = wave.open(infile, 'rb') 
    data.append([w.getparams(), w.readframes(w.getnframes())]) 
    w.close() 

output = wave.open(outfile, 'wb') 
output.setparams(data[0][0]) 
output.writeframes(data[0][1]) 
output.writeframes(data[1][1]) 
output.close() 
10

내가 쉬운 일이 이런 종류의 수 있도록 설계되었습니다 pydub의 메인테이너입니다.

from pydub import AudioSegment 

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

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

참고 : pydub은 오디오 랩을 둘러싼 가벼운 포장지입니다.

from contextlib import closing 

with closing(wave.open(outfile, 'wb')) as output: 

    # find sample rate from first file 
    with closing(wave.open(wav_files[0])) as w: 
     output.setparams(w.getparams()) 

    # write each file to output 
    for infile in wav_files: 
     with closing(wave.open(infile)) as w: 
      output.writeframes(w.readframes(w.getnframes())) 

대신에 모든 데이터를 저장 한 번에 말을 쓰는, 그것이 비트 기록 : 그래서 무대 뒤에서, Tom10이

+0

이것은 인상적이다! 고맙습니다. – mondieki

2

그냥 @의 tom10의 대답에 구축 언급 본질적으로 무엇을하고있어 비트마다. 또한 contextlib.close를 사용하므로 파일을 닫을 필요가 없습니다.

0

librosa.loadlibrosa.write_wav을 사용합니다. 문서 확인 here

관련 문제