2012-03-19 18 views
22

क्या साइन लहर की तरह एक साधारण ध्वनि उत्पन्न करने के लिए पाइथन प्राप्त करना संभव है?पायथन के साथ ध्वनि उत्पादन/संश्लेषण?

क्या इसके लिए कोई मॉड्यूल उपलब्ध है? यदि नहीं, तो आप अपना खुद का निर्माण कैसे करेंगे?

इसके अलावा, क्या आपको ध्वनि चलाने के लिए पाइथन चलाने के लिए किसी प्रकार का होस्ट वातावरण चाहिए, या इसे टर्मिनल से कॉल करने से ही हासिल किया जा सकता है?

यदि उत्तर ओएस-निर्भर है, तो मैं एक मैक का उपयोग कर रहा हूं।

+3

@ होचल वेल, यह कितना विडंबनापूर्ण है कि यह पहला Google परिणाम है जो विभिन्न खोजशब्दों के साथ खोज करने में एक दिन के बाद लौटाया गया है ... –

+0

मैं [Pyo] (http://ajaxsoundstudio.com/pyodoc/index) की जांच करूंगा .html)। [यहां है] (http://ajaxsoundstudio.com/pyodoc/examples/02-controls/04-building-lfo.html) एक अच्छा प्रारंभिक उदाहरण। – mobeets

उत्तर

1

मुझे PyAudiere पसंद है, जो आपको ध्वनि के रूप में numpy arrays खेलने देता है ... मुझे लगता है कि यह मेरी Matlab पृष्ठभूमि के साथ अच्छी तरह से jives। मेरा मानना ​​है कि यह क्रॉस-प्लेटफार्म है। मुझे लगता है कि scikits.audiolab वही काम करता है, और अधिक वर्तमान/बेहतर समर्थित हो सकता है ... चीज़ों को वेवफाइल के रूप में सहेजने की कोशिश करने या उन्हें बफर में लिखने और पायथन की बिल्टिन ध्वनि लाइब्रेरी का उपयोग करने की तुलना में मेरे लिए आसान लगता है।

+2

जहाँ तक मैं देख सकता हूं कि ऑडीयर को पीपीआई से डाउनलोड नहीं किया जा सकता है और उनकी pyudiere.org साइट अब कुछ यादृच्छिक विज्ञापन-पृष्ठ है। –

+0

हाँ, ऐसा लगता है कि इन सभी ध्वनि पुस्तकालयों को कुछ महीनों के बाद छोड़ दिया जाता है। यह एक असली समस्या बन रहा है। शायद PyGame जाने का रास्ता है। यह ओवरकिल की तरह लगता है, लेकिन कम से कम यह अच्छी तरह से समर्थित है। – rdchambers

5

पाइथन इन संगीत विकी पेज बहुत अच्छी तरह से रखा नहीं गया है, लेकिन यह एक अच्छा प्रारंभिक बिंदु है। http://wiki.python.org/moin/PythonInMusic

6

मैं जानता हूँ कि मैं इस पर खेल के लिए एक छोटी सी देर हो रही है, लेकिन इस संश्लेषण और ऑडियो रचना के लिए एक बहुत शानदार अजगर परियोजना है: https://github.com/hecanjog/pippi

यह अभी भी सक्रिय रूप से विकसित किया जा रहा है, लेकिन यह चल रहा है कुछ समय के लिए।

3

कुछ असंगत या गैर-मौजूद परियोजनाओं पर समय बर्बाद करने के बाद, मैंने पाइथन मॉड्यूल wavebender की खोज की, जो साइन, स्क्वायर और संयुक्त तरंगों के एकल या एकाधिक चैनलों की पीढ़ी प्रदान करता है। परिणाम या तो वेवफ़ाइल या sys.stdout पर लिखे जा सकते हैं, जहां से उन्हें रीयल-टाइम में सीधे aplay द्वारा व्याख्या किया जा सकता है। कुछ उपयोगी उदाहरण here समझाए गए हैं, और परियोजना के github page पर शामिल हैं।

+2

हाय - मैं पिप्पी का लेखक हूं। यह थोड़ी देर के लिए प्री-रिलीज किया गया है लेकिन मैं एक स्थिर 1.0 रिलीज की ओर काम कर रहा हूं। यदि आपके पास जिथब पर आपकी समस्याओं के साथ एक बग रिपोर्ट जमा करने का समय है, तो मैं वास्तव में इसकी सराहना करता हूं। धन्यवाद! –

+0

धन्यवाद, मैं इसे फिर से देखना पसंद करूंगा और देख सकता हूं कि मैं कुछ योगदान कर सकता हूं या नहीं। यह जिंदा सुनकर अच्छा लगा! –

+0

दुर्भाग्य से, वेवेंडर अभी भी [गैर-कार्यात्मक और अनियमित] प्रतीत होता है। (Https://github.com/zacharydenton/wavebender/issues/5) – Cerin

2

मैं अजगर में एक शक्तिशाली सिंथेसाइज़र पर काम कर रहा हूं। मैंने सीधे .wav फ़ाइल पर लिखने के लिए कस्टम फ़ंक्शंस का उपयोग किया। ऐसे कार्यों में बनाया गया है जिनका उपयोग इस उद्देश्य के लिए किया जा सकता है। नमूना दर, प्रति नमूना बिट्स, चैनलों की संख्या, और संश्लेषण की अवधि को प्रतिबिंबित करने के लिए आपको .wav शीर्षलेख को संशोधित करने की आवश्यकता होगी।

यहां एक पाप तरंग जनरेटर का प्रारंभिक संस्करण है जो मूल्यों की एक सूची आउटपुट करता है जो बाइट फ़ाइल के डेटा पैरामीटर को लिखने के लिए बाइटियर के लिए उपयुक्त हो जाता है। [संपादित करें] एक रूपांतरण समारोह को सूची को लागू करने से पहले सूची को छोटे एंडियन हेक्स मानों में बदलने की आवश्यकता होगी। .wav विनिर्देश के विवरण के लिए नीचे WAVE पीसीएम ध्वनिफाइल प्रारूप लिंक देखें। [/ संपादित करें]

def sin_basic(freq, time=1, amp=1, phase=0, samplerate=44100, bitspersample=16): 
    bytelist = [] 
    import math 
    TwoPiDivSamplerate = 2*math.pi/samplerate 
    increment = TwoPiDivSamplerate * freq 
    incadd = phase*increment 
    for i in range(int(samplerate*time)): 
     if incadd > (2**(bitspersample - 1) - 1): 
      incadd = (2**(bitspersample - 1) - 1) - (incadd - (2**(bitspersample - 1) - 1)) 
     elif incadd < -(2**(bitspersample - 1) - 1): 
      incadd = -(2**(bitspersample - 1) - 1) + (-(2**(bitspersample - 1) - 1) - incadd) 
     bytelist.append(int(round(amp*(2**(bitspersample - 1) - 1)*math.sin(incadd)))) 
     incadd += increment 
    return bytelist 

एक नया संस्करण आवृत्ति, आयाम, और तरंग मापदंडों के चरण व्यवस्थित करने के लिए waveforms उपयोग कर सकते हैं। डेटा प्रारूप एक साथ तरंगों को मिश्रण और संयोजित करने के लिए तुच्छ बनाता है। यदि यह आपकी गली लगता है, तो WAVE PCM soundfile format देखें।

14

मैं वही चीज़ ढूंढ रहा था, अंत में, मैंने यह कोड लिखा जो ठीक काम कर रहा है।

import math  #import needed modules 
import pyaudio  #sudo apt-get install python-pyaudio 

PyAudio = pyaudio.PyAudio  #initialize pyaudio 

#See https://en.wikipedia.org/wiki/Bit_rate#Audio 
BITRATE = 16000  #number of frames per second/frameset.  

FREQUENCY = 500  #Hz, waves per second, 261.63=C4-note. 
LENGTH = 1  #seconds to play sound 

if FREQUENCY > BITRATE: 
    BITRATE = FREQUENCY+100 

NUMBEROFFRAMES = int(BITRATE * LENGTH) 
RESTFRAMES = NUMBEROFFRAMES % BITRATE 
WAVEDATA = ''  

#generating wawes 
for x in xrange(NUMBEROFFRAMES): 
WAVEDATA = WAVEDATA+chr(int(math.sin(x/((BITRATE/FREQUENCY)/math.pi))*127+128))  

for x in xrange(RESTFRAMES): 
WAVEDATA = WAVEDATA+chr(128) 

p = PyAudio() 
stream = p.open(format = p.get_format_from_width(1), 
       channels = 1, 
       rate = BITRATE, 
       output = True) 

stream.write(WAVEDATA) 
stream.stop_stream() 
stream.close() 
p.terminate() 
+2

यह काम करता है, लेकिन प्लेबैक के अंत में एक बहुत जोरदार "पॉप" उत्पन्न करता है । – Cerin

+2

हमें इन चींटियों को एसीआई अक्षरों में डालने की आवश्यकता क्यों है? –

+2

@Cerin ऐसा इसलिए होगा क्योंकि इसका अंतिम नमूना शून्य से बहुत दूर था, और फिर आपके स्पीकर अचानक एक नमूने के भीतर शून्य पर लौट आए, जो एक बहुत ही महत्वपूर्ण शोर पैदा करता है। यदि आप अंत में शून्य पर अंत में दो नमूने प्रदान करते हैं, या सुनिश्चित करें कि आपकी लहर वापस (करीब) शून्य हो गई है, तो आपको क्लीनर समाप्त हो जाएगा। –

3

मुझे इन दो पायथन भंडारों को बहुत उपयोगी पाया गया है, शायद इसे देखना चाहें ...

अजगरhttps://github.com/JeremyCCHsu/Python-Wrapper-for-World-Vocoder

IPython: https://timsainb.github.io/spectrograms-mfccs-and-inversion-in-python.html

[संपादित करें] के रूप में बताया है, यहाँ दो लिंक

अजगर एक एक त्रुटि है लगता है की एक explanational है, लेकिन कई लोग इसे चलाने में सक्षम थे, इसलिए मुझे यकीन नहीं है। ipython एक आकर्षण की तरह काम किया, तो मुझे आशा है कि आप इसे चला सकते हैं।

दोनों लिंक एक इनपुट के रूप में ऑडियो लेना चाहते हैं, अधिमानतः .wav फ़ाइल। स्पेक्ट्रोग्राम प्राप्त करने के लिए इसे (इसे एफएफटी: 512, चरण आकार = 512/8) का उपयोग करें (आप इसे भी कल्पना कर सकते हैं), यह 2 डी मैट्रिक्स है, और फिर अपनी मशीन लर्निंग ऑब्जेक्ट्स को प्रशिक्षित करें या जो कुछ भी आप मैट्रिक्स का उपयोग करना चाहते हैं जो मूल का प्रतिनिधित्व करता है ऑडियो। यदि आप चाहते हैं, किसी भी बिंदु पर, वे वैक्टर क्या प्रतिनिधित्व करते हैं तो आप ऑडियो को फिर से संश्लेषित कर सकते हैं।

+0

मुझे उम्मीद है कि यह मदद करता है ... –

+0

अच्छा जवाब @Priyank Pathak – Veltro