Python: уроки, справочник и задачи

Python PyAudio

Раздел: Модули и библиотеки Python · Обновлено 31.10.2026

PyAudio дает Python прямой доступ к микрофону и динамикам через кроссплатформенную библиотеку PortAudio. С ее помощью пишут диктофоны, голосовые помощники, индикаторы громкости и программы, которые передают звук в систему распознавания речи.

Здесь вы узнаете, что умеет библиотека и где ее границы, а в новом разделе получите полностью рабочий пример для Python 3.12 и 3.13: запись с микрофона в WAV-файл, воспроизведение, выбор устройства и разбор ошибок установки. Учтите главное: PyAudio работает с сырыми аудиоданными, а файлы читает и пишет стандартный модуль wave.

Python PyAudio
Фото: Marie-Lan Nguyen / CC BY 2.5, Wikimedia Commons
Содержание статьи
  1. Основные возможности PyAudio
    1. 1. Установка PyAudio
    2. 2. Совместимость
    3. 3. Форматы аудио
    4. 4. Обработка звука в реальном времени
    5. 5. Примеры применения PyAudio
    6. 6. Ссылки
  2. Пример использования PyAudio для записи и воспроизведения звука
  3. Запись с микрофона в WAV: рабочий пример
    1. Установка на разных системах
    2. Код записи
    3. Воспроизведение файла
    4. Выбор микрофона
    5. Частые ошибки
  4. Частые вопросы
    1. Может ли PyAudio открыть MP3-файл?
    2. Как записывать звук, пока программа делает что-то еще?
    3. Есть ли альтернатива PyAudio?
    4. Как измерить громкость звука с микрофона?

Python PyAudio - это библиотека, предоставляющая возможности для работы с аудио в языке программирования Python. Она позволяет осуществлять запись и воспроизведение звука, работать с аудиоданными в реальном времени, обрабатывать звуковые потоки и многое другое.

Основные возможности PyAudio

  1. Запись аудио: С помощью PyAudio можно легко записывать звук с микрофона или других аудиоисточников.
  2. Воспроизведение аудио: Библиотека позволяет воспроизводить аудиофайлы или звуковые потоки.
  3. Обработка звука: PyAudio поддерживает обработку звуковых данных, такую как фильтрация, изменение громкости, преобразование формата и другие операции.
  4. Работа в реальном времени: С возможностью работы с аудиопотоками в реальном времени, PyAudio подходит для создания звуковых приложений, анализаторов звука и других проектов, требующих обработки аудиоданных на лету.

1. Установка PyAudio

Для установки PyAudio можно воспользоваться менеджером пакетов pip. Просто выполните следующую команду в консоли:

pip install pyaudio

2. Совместимость

PyAudio совместима с различными операционными системами, включая Windows, macOS и Linux. Она использует PortAudio - кроссплатформенную библиотеку для работы с аудиоустройствами.

3. Форматы аудио

PyAudio работает с несжатыми данными PCM; WAV-файлы читаются и пишутся модулем wave, а MP3, OGG и FLAC нужно декодировать другими библиотеками. Это позволяет вам работать с различными типами звуковых файлов.

4. Обработка звука в реальном времени

Благодаря возможности работы с аудиопотоками в реальном времени, вы можете создавать звуковые эффекты, инструменты для музыкального производства, системы распознавания голоса и другие приложения, требующие непрерывной обработки аудиоданных.

5. Примеры применения PyAudio

6. Ссылки

PyAudio предоставляет широкие возможности для работы с аудио в Python и может быть полезным инструментом для реализации различных проектов, связанных с обработкой звука.

Пример использования PyAudio для записи и воспроизведения звука

import pyaudio
import wave
FORMAT = pyaudio.paInt16  # Формат звука (16 бит, стерео)
CHANNELS = 2
RATE = 44100  # Частота дискретизации
CHUNK = 1024  # Размер блока данных
p = pyaudio.PyAudio()
# Запись звука
stream = p.open(format=FORMAT,
                channels=CHANNELS,
                rate=RATE,
                input=True,
                frames_per_buffer=CHUNK)
frames = []
for i in range(0, int(RATE / CHUNK * 5)):
    data = stream.read(CHUNK)
    frames.append(data)
# Остановка записи
stream.stop_stream()
stream.close()
# Воспроизведение записанного звука
stream = p.open(format=FORMAT,
                channels=CHANNELS,
                rate=RATE,
                output=True)
for frame in frames:
    stream.write(frame)
# Остановка воспроизведения
stream.stop_stream()
stream.close()
p.terminate()

Этот пример демонстрирует базовый функционал PyAudio для записи звука с микрофона, сохранения его в массив данных и воспроизведения этого звука.

PyAudio отлично подходит для разработки звуковых приложений, систем распознавания речи, аудиоанализа и других проектов, связанных с обработкой звука.

Запись с микрофона в WAV: рабочий пример

Здесь разобраны такие пункты: установка на разных системах, код записи, воспроизведение файла, выбор микрофона, частые ошибки.

Установка на разных системах

СистемаКоманды
Windowspython -m pip install pyaudio
Ubuntu, Debiansudo apt install portaudio19-dev python3-dev, затем python -m pip install pyaudio
macOSbrew install portaudio, затем python -m pip install pyaudio

Если pip пытается собрать пакет из исходников и требует Microsoft Visual C++, значит, для вашей версии Python нет готового wheel. Проверьте страницу пакета на pypi.org или используйте версию Python, для которой wheel опубликован.

Код записи

import wave
import pyaudio

RATE = 44100
CHANNELS = 1
FORMAT = pyaudio.paInt16
CHUNK = 1024
SECONDS = 5

p = pyaudio.PyAudio()
stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE,
                input=True, frames_per_buffer=CHUNK)
frames = []
try:
    for _ in range(int(RATE / CHUNK * SECONDS)):
        frames.append(stream.read(CHUNK, exception_on_overflow=False))
finally:
    stream.stop_stream()
    stream.close()
    sample_width = p.get_sample_size(FORMAT)
    p.terminate()

with wave.open("record.wav", "wb") as wf:
    wf.setnchannels(CHANNELS)
    wf.setsampwidth(sample_width)
    wf.setframerate(RATE)
    wf.writeframes(b"".join(frames))

Блок try/finally гарантирует, что поток и PortAudio будут освобождены даже при ошибке или нажатии Ctrl+C. Иначе микрофон может остаться занятым до перезапуска программы.

Разберем параметры. RATE задает частоту дискретизации: 44100 отсчетов в секунду дают качество компакт-диска, а для распознавания речи обычно хватает 16000. FORMAT = paInt16 означает 16 бит на отсчет, то есть 2 байта. CHUNK определяет размер блока, который читается за один вызов: маленький блок уменьшает задержку, но повышает риск переполнения буфера. Пять секунд моно-записи при таких настройках занимают около 430 КБ, стерео вдвое больше. Если нужен сжатый файл, сначала сохраните WAV, а затем конвертируйте его отдельным инструментом.

Воспроизведение файла

with wave.open("record.wav", "rb") as wf:
    p = pyaudio.PyAudio()
    stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
                    channels=wf.getnchannels(),
                    rate=wf.getframerate(), output=True)
    while data := wf.readframes(1024):
        stream.write(data)
    stream.close()
    p.terminate()

Выбор микрофона

p = pyaudio.PyAudio()
for i in range(p.get_device_count()):
    info = p.get_device_info_by_index(i)
    if info["maxInputChannels"] > 0:
        print(i, info["name"], int(info["defaultSampleRate"]))
p.terminate()

Номер нужного устройства передайте в p.open(..., input_device_index=номер). Одно и то же устройство часто появляется в списке несколько раз, по разу для каждого звукового API Windows (MME, DirectSound, WASAPI). Начинайте с варианта MME: он самый совместимый.

Частые ошибки

Частые вопросы

Короткие ответы на вопросы, которые чаще всего возникают по этой теме.

Может ли PyAudio открыть MP3-файл?

Нет. PyAudio принимает и отдает только несжатые отсчеты PCM. Для WAV используйте стандартный модуль wave, а MP3, OGG и FLAC сначала декодируйте другой библиотекой, например pydub или soundfile.

Как записывать звук, пока программа делает что-то еще?

Откройте поток с параметром stream_callback. PortAudio будет вызывать вашу функцию в отдельном потоке для каждого блока данных, а основной код продолжит работу. Функция должна быть быстрой и возвращать кортеж из данных и флага pyaudio.paContinue.

Есть ли альтернатива PyAudio?

Популярная замена - библиотека sounddevice. Она тоже построена на PortAudio, ставится из готовых пакетов и сразу возвращает данные в виде массивов NumPy, что удобно для анализа сигнала.

Как измерить громкость звука с микрофона?

Преобразуйте блок байтов в числа, например через array.array("h", data) или NumPy, и вычислите среднеквадратичное значение. Сравнивая его с порогом, можно включать запись только при наличии речи.