Документация по Python

pyaudio

В: Документация по Python

Введение

Примеры

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

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

Синтаксис

Параметры

Примечания

Еще от кодкамп
Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.