Szukaj…


Wprowadzenie

PyAudio zapewnia powiązania Python dla PortAudio, wieloplatformowej biblioteki we / wy audio. Dzięki PyAudio możesz łatwo używać Pythona do odtwarzania i nagrywania dźwięku na różnych platformach. PyAudio jest inspirowany:

1.pyPortAudio / fastaudio: Powiązania w języku Python dla interfejsu API PortAudio v18.

2.tkSnack: wieloplatformowy zestaw narzędzi dźwiękowych dla Tcl / Tk i Python.

Uwagi

Uwaga: stream_callback jest wywoływany w osobnym wątku (od głównego wątku). Wyjątki występujące w wywołaniu stream_callback będą:
1. wydrukuj ślad po błędzie standardowym, aby ułatwić debugowanie,
2. zaznacz wyjątek, który ma zostać zgłoszony (w pewnym momencie) w głównym wątku, i
3.. Zwróć paAbort do PortAudio, aby zatrzymać strumień.
Uwaga: Nie wywoływaj Stream.read () ani Stream.write (), jeśli korzystasz z operacji nieblokującej.
Zobacz: podpis wywołania zwrotnego PortAudio, aby uzyskać dodatkowe informacje:
http://portaudio.com/docs/v19-doxydocs/portaudio_8h.html#a8a60fb2a5ec9cbade3f54a9c978e2710

Tryb oddzwaniania Audio 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()

W trybie oddzwaniania PyAudio wywoła określoną funkcję oddzwaniania (2), ilekroć potrzebuje nowych danych audio (do odtworzenia) i / lub gdy dostępne są nowe (nagrane) dane audio. Zauważ, że PyAudio wywołuje funkcję zwrotną w osobnym wątku. Funkcja ma następujące callback(<input_data>, <frame_count>, <time_info>, <status_flag>) sygnatury callback(<input_data>, <frame_count>, <time_info>, <status_flag>) i musi zwrócić krotkę zawierającą frame_count klatek danych audio oraz flagę wskazującą, czy jest więcej klatek do odtworzenia / nagrania.

Rozpocznij przetwarzanie strumienia audio za pomocą pyaudio.Stream.start_stream () (4), który będzie wywoływał funkcję zwrotną wielokrotnie, dopóki funkcja nie zwróci pyaudio.paComplete .

Aby utrzymać strumień aktywny, główny wątek nie może się kończyć, np. Przez uśpienie (5).

Tryb blokowania Audio I / O

„” „PyAudio Przykład: Odtwórz plik wave.” „”

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()

Aby użyć PyAudio, najpierw utwórz PyAudio za pomocą pyaudio.PyAudio () (1), który konfiguruje system portaudio.

Aby nagrać lub odtworzyć dźwięk, otwórz strumień na żądanym urządzeniu z pożądanymi parametrami audio za pomocą pyaudio.PyAudio.open () (2). Spowoduje to skonfigurowanie pyaudio.Stream do odtwarzania lub nagrywania dźwięku.

Odtwarzaj dźwięk, zapisując dane audio w strumieniu za pomocą pyaudio.Stream.write () lub odczytaj dane audio ze strumienia za pomocą pyaudio.Stream.read () . (3)

Zauważ, że w „ trybie blokowania ” każdy blok pyaudio.Stream.write () lub pyaudio.Stream.read (), dopóki wszystkie podane / żądane klatki nie zostaną odtworzone / nagrane. Alternatywnie, aby generować dane audio w locie lub natychmiast przetwarzać nagrane dane audio, użyj „trybu oddzwaniania” ( patrz przykład w trybie oddzwaniania )

Użyj pyaudio.Stream.stop_stream (), aby wstrzymać odtwarzanie / nagrywanie, oraz pyaudio.Stream.close (), aby zakończyć strumień. (4)

Na koniec zakończ sesję portaudio za pomocą pyaudio.PyAudio.terminate () (5)



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow