2012-01-03 5 views
6

में संग्रहीत एक लहर फ़ॉर्म से ध्वनि बजाना मैं वर्तमान में पाइथन में ध्वनि उत्पन्न करने के साथ प्रयोग कर रहा हूं, और मुझे उत्सुकता है कि मैं एक वेवफ़ॉर्म (44100 हर्ट्ज की नमूना दर के साथ) का प्रतिनिधित्व करने वाला सरणी कैसे ले सकता हूं, और इसे बजाओ। मैं यहां एक लाइब्रेरी पर भरोसा करने के बजाय शुद्ध पायथन की तलाश में हूं जो सिर्फ .wav प्रारूप से अधिक का समर्थन करता है।एक सरणी

उत्तर

5

आप लाइब्रेरी का उपयोग करना चाहिए। ऑडियो हार्डवेयर के साथ इंटरफेस करने के लिए इसे शुद्ध पायथन में लिखना कोड की कई हजारों लाइनें हो सकती है!

लाइब्रेरी के साथ, उदा। मुझे लगता है कि आप इस सूची http://wiki.python.org/moin/PythonInMusic यह के साथ काम करने के लिए कई उपयोगी उपकरणों की सूची लग सकता है

import audiere 
ds = audiere.open_device() 
os = ds.open_array(input_array, 44100) 
os.play() 

वहाँ भी pyglet है, pygame, और कई अन्य ..

+0

'audiere' एक बहुत पुरानी परियोजना प्रतीत होता है ... पिछले 2006 में जारी किया गया, और पाइथन बाध्यकारी के लिए रीडमे 2002 का दिनांक है और पाइथन 2.2 का संदर्भ है ... –

+0

मैंने इसे खुद को अजगर 2.7 पर उपयोग किया है और यह अभी भी ठीक काम कर रहा है। ऑडिअर मॉड्यूल http://pyaudiere.org/ से है, संभवतः आप http://audiere.sourceforge.net/ पर देख रहे थे। pyudiere ऑडिएर एपीआई – wim

+0

का उपयोग करता है pyudiere वेबसाइट अब मौजूद नहीं है, और ऑडिअर अभी भी 2006 से अपडेट नहीं किया गया है। यह अब एक अच्छा जवाब नहीं है। – jozzas

3

: audiere, यह इस रूप में सरल हो जाएगा ध्वनि।

3

ध्वनि दिए गए सरणी इनपुट_एरे 16 बिट नमूनों को चलाने के लिए। इस से pyadio documentation page

import pyaudio 

# instantiate PyAudio (1) 
p = pyaudio.PyAudio() 

# open stream (2), 2 is size in bytes of int16 
stream = p.open(format=p.get_format_from_width(2), 
       channels=1, 
       rate=44100, 
       output=True) 

# play stream (3), blocking call 
stream.write(input_array) 

# stop stream (4) 
stream.stop_stream() 
stream.close() 

# close PyAudio (5) 
p.terminate() 
2

उदाहरण संशोधित या sounddevice मॉड्यूल का उपयोग कर रहा है। pip install sounddevice का उपयोग कर स्थापित करें, लेकिन आप यह पहली जरूरत है: sudo apt-get install libportaudio2

पूर्ण बुनियादी:

import numpy as np 
import sounddevice as sd 

sd.play(myarray) 
#may need to be normalised like in below example 
#myarray must be a numpy array. If not, convert with np.array(myarray) 

कुछ और विकल्प:

import numpy as np 
import sounddevice as sd 

#variables 
samplfreq = 100 #the sampling frequency of your data (mine=100Hz, yours=44100) 
factor = 10  #incr./decr frequency (speed up/slow down by a factor) (normal speed = 1) 

#data 
print('..interpolating data') 
arr = myarray 

#normalise the data to between -1 and 1. If your data wasn't/isn't normalised it will be very noisy when played here 
sd.play(arr/np.max(np.abs(arr)), samplfreq*factor) 
+0

ध्यान दें कि ग्रहण के भीतर चलाने पर sounddevice काम नहीं करता है। –