Sök…


Introduktion

PyAudio tillhandahåller Python-bindningar för PortAudio, I / O-biblioteket för tvärplattform. Med PyAudio kan du enkelt använda Python för att spela och spela in ljud på olika plattformar. PyAudio är inspirerad av:

1.pyPortAudio / fastaudio: Python-bindningar för PortAudio v18 API.

2.tkSnack: tvärplattforms ljudverktygssats för Tcl / Tk och Python.

Anmärkningar

Obs: stream_callback kallas i en separat tråd (från huvudtråden). Undantag som inträffar i stream_callback kommer:
1. Skriv ut en traceback på standardfel för att underlätta felsökning,
2 .ge undantaget som ska kastas (vid någon tidpunkt) i huvudtråden, och
3 .return paAbort till PortAudio att stoppa strömmen.
Obs: Ring inte Stream.read () eller Stream.write () om du inte använder blockeringsfunktionen.
Se: PortAudios återuppringningssignatur för ytterligare information:
http://portaudio.com/docs/v19-doxydocs/portaudio_8h.html#a8a60fb2a5ec9cbade3f54a9c978e2710

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

I återuppringningsläget kommer PyAudio att ringa en specificerad återuppringningsfunktion (2) när den behöver ny ljuddata (för att spela) och / eller när det finns nya (inspelade) ljuddata tillgängliga. Observera att PyAudio anropar återuppringningsfunktionen i en separat tråd. Funktionen har följande signaturuppringning callback(<input_data>, <frame_count>, <time_info>, <status_flag>) och måste returnera en tupel som innehåller frame_count ramar för ljuddata och en flagga som anger om det finns fler ramar att spela / spela in.

Börja behandla ljudströmmen med pyaudio.Stream.start_stream () (4), som kommer att ringa återuppringningsfunktionen upprepade gånger tills den funktionen returnerar pyaudio.paComplete .

För att hålla strömmen aktiv måste huvudtråden inte avslutas, t.ex. genom att sova (5).

Blockering Mode Audio I / O

"" "PyAudio Exempel: Spela en vågfil." ""

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

För att använda PyAudio, först instans PyAudio med pyaudio.PyAudio () (1), som sätter upp portaudio-systemet.

För att spela in eller spela ljud öppnar du en ström på önskad enhet med önskade ljudparametrar med pyaudio.PyAudio.open () (2). Detta ställer in en pyaudio.Stream för att spela eller spela in ljud.

Spela ljud genom att skriva ljuddata till strömmen med pyaudio.Stream.write () , eller läsa ljuddata från strömmen med pyaudio.Stream.read () . (3)

Observera att i " blockeringsläge " blockerar varje pyaudio.Stream.write () eller pyaudio.Stream.read () tills alla givna / begärda ramar har spelats / spelats in. Alternativt, för att generera ljuddata i farten eller omedelbart bearbeta inspelade ljuddata, använd "återuppringningsläge" ( se exemplet om återuppringningsläge)

Använd pyaudio.Stream.stop_stream () för att pausa uppspelning / inspelning och pyaudio.Stream.close () för att avsluta strömmen. (4)

Slutligen avslutar portaudiosessionen med pyaudio.PyAudio.terminate () (5)



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow