Python Language
pyaudio
Suche…
Einführung
PyAudio bietet Python-Bindungen für PortAudio, die plattformübergreifende Audio-E / A-Bibliothek. Mit PyAudio können Sie Python problemlos verwenden, um Audio auf verschiedenen Plattformen abzuspielen und aufzunehmen. PyAudio ist inspiriert von:
1.pyPortAudio / fastaudio: Python-Bindungen für die PortAudio v18-API.
2.tkSnack: Cross-Plattform-Sound-Toolkit für Tcl / Tk und Python.
Bemerkungen
Hinweis: stream_callback wird in einem separaten Thread (vom Hauptthread) aufgerufen. Ausnahmen, die im stream_callback auftreten, werden:
1 .print eine Rückverfolgung auf dem Standardfehlerdebugging zu unterstützen,
2 .queue die Ausnahme, die (zu einem bestimmten Zeitpunkt) im Hauptthread geworfen werden soll, und
3. Bringen Sie paAbort zu PortAudio zurück, um den Stream zu stoppen.
Hinweis: Rufen Sie nicht Stream.read () oder Stream.write () auf, wenn Sie einen nicht blockierenden Vorgang verwenden.
Weitere Informationen finden Sie unter PortAudio-Rückrufsignatur:
http://portaudio.com/docs/v19-doxydocs/portaudio_8h.html#a8a60fb2a5ec9cbade3f54a9c978e2710
Callback-Modus Audio-E / A
"""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()
Im Callback-Modus ruft PyAudio eine angegebene Callback-Funktion (2) auf, wenn neue Audiodaten benötigt werden (zum Abspielen) und / oder wenn neue (aufgezeichnete) Audiodaten verfügbar sind. Beachten Sie, dass PyAudio die Rückruffunktion in einem separaten Thread aufruft. Die Funktion hat den folgenden Signatur- callback(<input_data>, <frame_count>, <time_info>, <status_flag>)
und muss ein Tupel zurückgeben, das frame_count
Frames mit Audiodaten und ein Flag enthält, das frame_count
, ob weitere Frames zum Abspielen / Aufnehmen vorhanden sind.
Starten Sie die Verarbeitung des Audiostreams mit pyaudio.Stream.start_stream () (4), die die Callback-Funktion wiederholt aufruft, bis diese Funktion pyaudio.paComplete zurückgibt .
Um den Stream aktiv zu halten, darf der Haupt-Thread nicht beendet werden, z. B. durch Schlafen (5).
Audio-E / A im Blockierungsmodus
"" "PyAudio-Beispiel: Abspielen einer Wave-Datei." ""
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()
Um PyAudio zu verwenden, instanziieren Sie zuerst PyAudio mit pyaudio.PyAudio () (1), wodurch das Portaudio-System eingerichtet wird.
Um Audio aufzunehmen oder abzuspielen, öffnen Sie mit pyaudio.PyAudio.open () (2) einen Stream mit den gewünschten Audioparametern auf dem gewünschten Gerät. Dadurch wird ein pyaudio.Stream zur Wiedergabe oder Aufnahme von Audio eingerichtet.
Sie können Audiodaten abspielen , indem Sie Audiodaten mit pyaudio.Stream.write () in den Stream schreiben oder Audiodaten mit pyaudio.Stream.read () aus dem Stream lesen . (3)
Beachten Sie, dass im " Blockierungsmodus " jeder pyaudio.Stream.write () oder pyaudio.Stream.read () blockiert, bis alle angegebenen / angeforderten Frames abgespielt / aufgezeichnet wurden. Alternativ können Sie Audiodaten im laufenden Betrieb erzeugen oder aufgezeichnete Audiodaten sofort verarbeiten, indem Sie den „Rückrufmodus“ verwenden ( siehe Beispiel zum Rückrufmodus ).
Verwenden Sie pyaudio.Stream.stop_stream (), um die Wiedergabe / Aufnahme anzuhalten , und pyaudio.Stream.close (), um den Stream zu beenden. (4)
Beenden Sie schließlich die Portaudio-Sitzung mit pyaudio.PyAudio.terminate () (5).