में संग्रहीत एक लहर फ़ॉर्म से ध्वनि बजाना मैं वर्तमान में पाइथन में ध्वनि उत्पन्न करने के साथ प्रयोग कर रहा हूं, और मुझे उत्सुकता है कि मैं एक वेवफ़ॉर्म (44100 हर्ट्ज की नमूना दर के साथ) का प्रतिनिधित्व करने वाला सरणी कैसे ले सकता हूं, और इसे बजाओ। मैं यहां एक लाइब्रेरी पर भरोसा करने के बजाय शुद्ध पायथन की तलाश में हूं जो सिर्फ .wav प्रारूप से अधिक का समर्थन करता है।एक सरणी
एक सरणी
उत्तर
आप लाइब्रेरी का उपयोग करना चाहिए। ऑडियो हार्डवेयर के साथ इंटरफेस करने के लिए इसे शुद्ध पायथन में लिखना कोड की कई हजारों लाइनें हो सकती है!
लाइब्रेरी के साथ, उदा। मुझे लगता है कि आप इस सूची http://wiki.python.org/moin/PythonInMusic यह के साथ काम करने के लिए कई उपयोगी उपकरणों की सूची लग सकता है
import audiere
ds = audiere.open_device()
os = ds.open_array(input_array, 44100)
os.play()
वहाँ भी pyglet है, pygame, और कई अन्य ..
: audiere, यह इस रूप में सरल हो जाएगा ध्वनि।
ध्वनि दिए गए सरणी इनपुट_एरे 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()
उदाहरण संशोधित या 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)
ध्यान दें कि ग्रहण के भीतर चलाने पर sounddevice काम नहीं करता है। –
'audiere' एक बहुत पुरानी परियोजना प्रतीत होता है ... पिछले 2006 में जारी किया गया, और पाइथन बाध्यकारी के लिए रीडमे 2002 का दिनांक है और पाइथन 2.2 का संदर्भ है ... –
मैंने इसे खुद को अजगर 2.7 पर उपयोग किया है और यह अभी भी ठीक काम कर रहा है। ऑडिअर मॉड्यूल http://pyaudiere.org/ से है, संभवतः आप http://audiere.sourceforge.net/ पर देख रहे थे। pyudiere ऑडिएर एपीआई – wim
का उपयोग करता है pyudiere वेबसाइट अब मौजूद नहीं है, और ऑडिअर अभी भी 2006 से अपडेट नहीं किया गया है। यह अब एक अच्छा जवाब नहीं है। – jozzas