Zoeken…


Invoering

PyAudio biedt Python-bindingen voor PortAudio, de cross-platform audio I / O-bibliotheek. Met PyAudio kunt u eenvoudig Python gebruiken om audio op verschillende platforms af te spelen en op te nemen. PyAudio is geïnspireerd door:

1.pyPortAudio / fastaudio: Python-bindingen voor PortAudio v18 API.

2.tkSnack: platformonafhankelijke geluidstoolkit voor Tcl / Tk en Python.

Opmerkingen

Opmerking: stream_callback wordt in een afzonderlijke thread (van de hoofdthread) genoemd. Uitzonderingen die optreden in de stream_callback zullen:
1. print een traceback op standaardfout om foutopsporing te helpen,
2. Wacht op de uitzondering die op een bepaald moment in de hoofdthread moet worden gegooid, en
3. Keer terug naar PortAudio om de stream te stoppen.
Opmerking: roep Stream.read () of Stream.write () niet aan als u een niet-blokkerende bewerking gebruikt.
Zie: PortAudio's callback-handtekening voor meer informatie:
http://portaudio.com/docs/v19-doxydocs/portaudio_8h.html#a8a60fb2a5ec9cbade3f54a9c978e2710

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

In de callback-modus roept PyAudio een opgegeven callback-functie (2) aan wanneer het nieuwe audiogegevens nodig heeft (om af te spelen) en / of wanneer er nieuwe (opgenomen) audiogegevens beschikbaar zijn. Merk op dat PyAudio de callback-functie in een afzonderlijke thread aanroept. De functie heeft de volgende callback(<input_data>, <frame_count>, <time_info>, <status_flag>) en moet een tuple retourneren met frame_count frames van audiogegevens en een vlag die aangeeft of er meer frames zijn om af te spelen / op te nemen.

Begin met het verwerken van de audiostream met pyaudio.Stream.start_stream () (4), die de callback-functie herhaaldelijk aanroept totdat die functie pyaudio.paComplete retourneert.

Om de stream actief te houden, mag de hoofdthread niet eindigen, bijvoorbeeld door te slapen (5).

Blokkeermodus Audio I / O

"" "Voorbeeld van PyAudio: speel een wave-bestand af." ""

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

Als u PyAudio wilt gebruiken, moet u eerst PyAudio instantiëren met pyaudio.PyAudio () (1), waarmee het portaudio-systeem wordt ingesteld.

Om audio op te nemen of af te spelen, opent u een stream op het gewenste apparaat met de gewenste audioparameters met behulp van pyaudio.PyAudio.open () (2). Hiermee wordt een pyaudio.Stream ingesteld om audio af te spelen of op te nemen.

Speel audio af door audiogegevens naar de stream te schrijven met pyaudio.Stream.write () of lees audiogegevens uit de stream met pyaudio.Stream.read () . (3)

Merk op dat in " blokkeermodus " elke pyaudio.Stream.write () of pyaudio.Stream.read () blokken blokkeert totdat alle gegeven / gevraagde frames zijn afgespeeld / opgenomen. Als alternatief kunt u, om direct audiogegevens te genereren of opgenomen audiogegevens onmiddellijk te verwerken, de "terugbelmodus" gebruiken ( raadpleeg het voorbeeld over de terugbelmodus )

Gebruik pyaudio.Stream.stop_stream () om het afspelen / opnemen te pauzeren en pyaudio.Stream.close () om de stream te beëindigen. (4)

Beëindig ten slotte de portaudio-sessie met pyaudio.PyAudio.terminate () (5)



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow