Введение

Примеры

Аудио вход / выход в режиме обратного вызова

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

В режиме обратного вызова PyAudio будет вызывать указанную функцию обратного вызова (2) всякий раз, когда ему нужны новые аудиоданные (для воспроизведения) и / или когда доступны новые (записанные) аудиоданные. Обратите внимание, что PyAudio вызывает функцию обратного вызова в отдельном потоке. Функция имеет следующую подпись callback(<input_data>, <frame_count>, <time_info>, <status_flag>) и должен возвращать кортеж , содержащий frame_count кадры аудиоданных и флаг , означающий , есть ли еще кадры для воспроизведения / записи.

Начало обработки звукового потока с использованием pyaudio.Stream.start_stream () (4), который будет вызывать функцию обратного вызова , пока эта функция не возвращает pyaudio.paComplete.

Чтобы поддерживать поток активным, основной поток не должен завершаться, например, с помощью sleep (5).

Аудио ввод / вывод в режиме блокировки

"" "Пример PyAudio: Воспроизведение волнового файла." ""

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


 

Чтобы использовать PyAudio, первый экземпляр PyAudio с помощью pyaudio.PyAudio () (1), который устанавливает Portaudio системы.

Для записи или воспроизведения аудио, открыть поток на нужном устройстве с требуемыми параметрами аудио , используя pyaudio.PyAudio.open () (2). Это устанавливает pyaudio.Stream для проигрывания или записи звука.

Воспроизведение аудио записи аудиоданных в поток с помощью pyaudio.Stream.write (), или читать аудиоданные из потока с помощью pyaudio.Stream.read (). (3)

Обратите внимание , что в «блокирование» режиме, каждый pyaudio.Stream.write () или pyaudio.Stream.read () блоки , пока все данное / просили кадры были воспроизведены / записаны. В качестве альтернативы, чтобы генерировать звуковые данные на лету или сразу обрабатывать записанные звуковые данные, использовать режим «обратного вызова» (см пример на режим вызова обратно)

Используйте pyaudio.Stream.stop_stream () для приостановки воспроизведения / записи, и pyaudio.Stream.close () , чтобы прекратить поток. (4)

И, наконец, завершить сеанс , используя Portaudio pyaudio.PyAudio.terminate () (5)

Синтаксис

Параметры

Примечания