2010-05-23 9 views
14

मैं अजगर प्रोग्रामिंग भाषा का उपयोग कर रहा हूं, मैं अन्य WAV फ़ाइल के अंत में wav फ़ाइल में शामिल होना चाहता हूं? मेरे पास मंच में एक प्रश्न है जो सुझाव देता है कि दो WAV फ़ाइल को कैसे विलय करना है यानी कुछ ऑफसेट पर एक WAV फ़ाइल की सामग्री जोड़ें, लेकिन मैं एक दूसरे के अंत में दो WAV फ़ाइल में शामिल होना चाहता हूं ...पायथन का उपयोग कर दो WAV फाइलों में कैसे शामिल हों?

और मैं भी अपने स्वयं के WAV फ़ाइल को जीतने के लिए एक समस्या थी, मैं जीतने में सक्षम था .. मैं ध्वनि बजाने में सक्षम था लेकिन समय का उपयोग कर रहा था। किसी भी खिड़की की आवाज खेलने से पहले कुछ समय के लिए सो जाओ, हानिकारक बुद्धि यह है कि अगर मैं ध्वनि बजाना चाहता था लंबे समय से समय। नींद (एन), एन सेक भी, विंडोज़ ध्वनि wil जेएस ओवरलैप एन एन सेकेंड जीतने के बाद ओवरलैप ..

क्या कोई मदद कर सकता है? कृपया कृपया इन समस्याओं को हल करने का सुझाव दें ...

धन्यवाद मैं 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 मैं डाउनलोड के लिए एक संगत संस्करण प्राप्त कर सकते हैं मेरे पास है उपयोग कर रहा हूँ के लिए किसी भी पैकेज स्थापित करने की जरूरत है की जाँच करें आप मुझे प्रदान to..can लिंक कृपया ..i ने खुद को साइट पर बैठने की कोशिश की बीटी का सामना करना पड़ रहा है ... अगर वहां कदम स्थापित करने के लिए कदम है तो कृपया सुझाव दें .. उत्तर के लिए धन्यवाद .. क्या आप जानते हैं कि ध्वनि कैसे खेलें, मैंने अपनी प्रो बुद्धि प्लेइन का उल्लेख किया उस माप को मापो ?? – kaushik

+0

पायथन 2.6 ठीक है, और Numpy/Scipy वेबसाइट भी ठीक होनी चाहिए। मैं दूसरों को आपके प्रश्नों का उत्तर देने और आगे के सुझाव प्रदान करने दे सकता हूं। हालांकि मेरा जवाब काम करता है, शायद अधिक सुरुचिपूर्ण, प्रत्यक्ष समाधान हैं। –

+0

Ahh..thanks, ne तरीके wav फ़ाइलें खेलना के बारे में मेरे अन्य समस्या अब हल कर रहे हैं .. – 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") 

नोट: पाइडब ऑडियोपॉप के चारों ओर एक हल्का आवरण है। तो पर्दे के पीछे है, यह क्या कर रहा है अनिवार्य रूप से क्या Tom10 उल्लेख

+0

यह प्रभावशाली है! धन्यवाद। – mondieki

2

बस @ tom10 के जवाब पर बनाने के लिए:

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())) 

इसके बजाय तो सभी डेटा भंडारण के एक ही बार में अंत में यह लिखने की, यह थोड़ा लिखते हैं थोड़ा सा यह contextlib.close का भी उपयोग करता है ताकि आपको फ़ाइलों को बंद करने की आवश्यकता न हो।

0

मैं librosa.load और librosa.write_wav का उपयोग करूंगा। डॉक here

संबंधित मुद्दे