Python Language
pyaudio
खोज…
परिचय
PyAudio, पोर्टऑडियो, क्रॉस-प्लेटफ़ॉर्म ऑडियो I / O लाइब्रेरी के लिए Python बाइंडिंग प्रदान करता है। PyAudio के साथ, आप विभिन्न प्लेटफार्मों पर ऑडियो चलाने और रिकॉर्ड करने के लिए आसानी से पायथन का उपयोग कर सकते हैं। PyAudio से प्रेरित है:
1.pyPortAudio / fastaudio: पोर्टऑडियो v18 एपीआई के लिए पायथन बाइंडिंग।
2.tkSnack: Tcl / Tk और Python के लिए क्रॉस-प्लेटफ़ॉर्म साउंड टूलकिट।
टिप्पणियों
नोट: stream_callback को एक अलग थ्रेड (मुख्य थ्रेड से) में कहा जाता है। स्ट्रीम_कॉलबैक में होने वाले अपवाद:
डिबगिंग की सहायता करने के लिए मानक त्रुटि पर 1 ट्रेसबैक को प्रिंट करें,
2 (मुख्य बिंदु पर) (कुछ बिंदु पर) फेंके जाने वाले अपवाद को छोड़ दें, और
3। धारा को रोकने के लिए PortAudio को .AA का उपयोग करें।
नोट: यदि नॉन-ब्लॉकिंग ऑपरेशन का उपयोग कर रहे हैं तो Stream.read () या Stream.write () को कॉल न करें।
देखें: अतिरिक्त विवरण के लिए पोर्टआडियो का कॉलबैक हस्ताक्षर:
http://portaudio.com/docs/v19-doxydocs/portaudio_8h.html#a8a60fb2a5ec9cbade3f54a9c978e2710
कॉलबैक मोड ऑडियो I / O
"""PyAudio Example: Play a wave file (callback version)."""
import pyaudio
import wave
import time
import sys
if len(sys.argv) < 2:
print("Plays a wave file.\n\nUsage: %s filename.wav" % sys.argv[0])
sys.exit(-1)
wf = wave.open(sys.argv[1], 'rb')
# instantiate PyAudio (1)
p = pyaudio.PyAudio()
# define callback (2)
def callback(in_data, frame_count, time_info, status):
data = wf.readframes(frame_count)
return (data, pyaudio.paContinue)
# open stream using callback (3)
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
channels=wf.getnchannels(),
rate=wf.getframerate(),
output=True,
stream_callback=callback)
# start the stream (4)
stream.start_stream()
# wait for stream to finish (5)
while stream.is_active():
time.sleep(0.1)
# stop stream (6)
stream.stop_stream()
stream.close()
wf.close()
# close PyAudio (7)
p.terminate()
कॉलबैक मोड में, PyAudio एक निर्दिष्ट कॉलबैक फ़ंक्शन (2) को कॉल करेगा जब भी उसे नए ऑडियो डेटा (खेलने के लिए) और / या जब नया (रिकॉर्ड किया गया) ऑडियो डेटा उपलब्ध हो। ध्यान दें कि PyAudio कॉलबैक फ़ंक्शन को एक अलग थ्रेड में कॉल करता है। फ़ंक्शन में निम्न हस्ताक्षर callback(<input_data>, <frame_count>, <time_info>, <status_flag>)
और ऑडियो डेटा के frame_count
फ़्रेम वाले एक tuple को वापस करना होगा और ध्वज को चलाना / रिकॉर्ड करने के लिए अधिक फ़्रेम हैं या नहीं।
Pyaudio.Stream.start_stream () (4) का उपयोग करके ऑडियो स्ट्रीम को संसाधित करना शुरू करें, जो कॉलबैक फ़ंक्शन को बार-बार कॉल करेगा जब तक कि फ़ंक्शन pyaudio.paComplete रिटर्न नहीं करता ।
धारा को सक्रिय रखने के लिए, मुख्य सूत्र को समाप्त नहीं करना चाहिए, जैसे, नींद से (5)।
ब्लॉकिंग मोड ऑडियो I / O
"" "PyAudio उदाहरण: एक तरंग फ़ाइल चलाएं।" "
import pyaudio
import wave
import sys
CHUNK = 1024
if len(sys.argv) < 2:
print("Plays a wave file.\n\nUsage: %s filename.wav" % sys.argv[0])
sys.exit(-1)
wf = wave.open(sys.argv[1], 'rb')
# instantiate PyAudio (1)
p = pyaudio.PyAudio()
# open stream (2)
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
channels=wf.getnchannels(),
rate=wf.getframerate(),
output=True)
# read data
data = wf.readframes(CHUNK)
# play stream (3)
while len(data) > 0:
stream.write(data)
data = wf.readframes(CHUNK)
# stop stream (4)
stream.stop_stream()
stream.close()
# close PyAudio (5)
p.terminate()
PyAudio का उपयोग करने के लिए, पहले pyaudio.PyAudio () (1) का उपयोग करके PyAudio को इंस्टेंट करें , जो portaudio सिस्टम सेट करता है।
ऑडियो रिकॉर्ड या प्ले करने के लिए, वांछित ऑडियो मापदंडों के साथ pyaudio.PyAudio.open () (2) का उपयोग करके वांछित डिवाइस पर एक स्ट्रीम खोलें। यह ऑडियो चलाने या रिकॉर्ड करने के लिए एक pyaudio.Stream सेट करता है।
Pyaudio.Stream.write () का उपयोग करके स्ट्रीम में ऑडियो डेटा लिखकर ऑडियो चलाएं , या pyaudio.Stream.read () का उपयोग करके स्ट्रीम से ऑडियो डेटा पढ़ें। (3)
ध्यान दें कि " ब्लॉकिंग मोड " में, प्रत्येक pyaudio.Stream.write () या pyaudio.Stream.read () ब्लॉक तब तक दिया जाता है जब तक कि सभी दिए गए / अनुरोध किए गए फ़्रेम को रिकॉर्ड / रिकॉर्ड नहीं किया गया हो। वैकल्पिक रूप से, मक्खी पर ऑडियो डेटा उत्पन्न करने या रिकॉर्ड किए गए ऑडियो डेटा को तुरंत संसाधित करने के लिए, "कॉलबैक मोड" का उपयोग करें ( बैक मोड पर उदाहरण देखें )
स्ट्रीम समाप्त करने / रिकॉर्डिंग करने के लिए pyaudio.Stream.stop_stream () का उपयोग करें, और स्ट्रीम समाप्त करने के लिए pyaudio.Stream.close () का उपयोग करें। (4)
अंत में, pyaudio.PyAudio.terminate () (5) का उपयोग करके पोर्टऑडियो सत्र समाप्त करें