Ricerca…


introduzione

PyAudio fornisce collegamenti Python per PortAudio, la libreria I / O audio multipiattaforma. Con PyAudio, puoi facilmente usare Python per riprodurre e registrare l'audio su una varietà di piattaforme. PyAudio è ispirato da:

1.pyPortAudio / fastaudio: collegamenti Python per l'API PortAudio v18.

2.tkSnack: toolkit audio cross-platform per Tcl / Tk e Python.

Osservazioni

Nota: stream_callback è chiamato in un thread separato (dal thread principale). Le eccezioni che si verificano nello stream_callback:
1 .stampare un traceback sull'errore standard per facilitare il debug,
2 .queue l'eccezione da lanciare (ad un certo punto) nel thread principale, e
3 .return paAbort su PortAudio per interrompere lo streaming.
Nota: non chiamare Stream.read () o Stream.write () se si utilizza l'operazione non bloccante.
Vedi: Firma callback di PortAudio per ulteriori dettagli:
http://portaudio.com/docs/v19-doxydocs/portaudio_8h.html#a8a60fb2a5ec9cbade3f54a9c978e2710

Modalità di callback 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 modalità callback, PyAudio chiamerà una funzione di callback specificata (2) ogni volta che ha bisogno di nuovi dati audio (da riprodurre) e / o quando sono disponibili nuovi dati audio (registrati). Si noti che PyAudio chiama la funzione di callback in un thread separato. La funzione ha il seguente callback(<input_data>, <frame_count>, <time_info>, <status_flag>) firma callback(<input_data>, <frame_count>, <time_info>, <status_flag>) e deve restituire una tupla contenente frame_count frame di dati audio e un flag che indica se ci sono più frame da riprodurre / registrare.

Inizia l'elaborazione del flusso audio usando pyaudio.Stream.start_stream () (4), che chiamerà ripetutamente la funzione di callback fino a quando quella funzione non restituirà pyaudio.paComplete .

Per mantenere attivo il flusso, il thread principale non deve terminare, ad es. Dormendo (5).

Modalità I / O audio blocco

"" "Esempio di PyAudio: riproduzione di un file 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()

Per usare PyAudio, prima istanzia PyAudio usando pyaudio.PyAudio () (1), che configura il sistema portaudio.

Per registrare o riprodurre audio, apri uno stream sul dispositivo desiderato con i parametri audio desiderati usando pyaudio.PyAudio.open () (2). Questo imposta un pyaudio.Stream per riprodurre o registrare l'audio.

Riproduci l'audio scrivendo i dati audio nello stream utilizzando pyaudio.Stream.write () o leggi i dati audio dallo stream utilizzando pyaudio.Stream.read () . (3)

Nota che in " modalità di blocco ", ogni blocco pyaudio.Stream.write () o pyaudio.Stream.read () si blocca fino a quando tutti i fotogrammi dati / richiesti sono stati riprodotti / registrati. In alternativa, per generare dati audio al volo o elaborare immediatamente i dati audio registrati, utilizzare la "modalità di richiamata" ( fare riferimento all'esempio sulla modalità di richiamata )

Utilizzare pyaudio.Stream.stop_stream () per sospendere la riproduzione / registrazione e pyaudio.Stream.close () per terminare lo streaming. (4)

Infine, termina la sessione portaudio usando pyaudio.PyAudio.terminate () (5)



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow