pyaudio - инструмент для работы со звуком

Модуль позволяет работать с кросплатформенной библиотекой PortAudio, проигрывать и записывать звуки.

Атрибуты модуля

Методы модуля

pyaudio.get_format_from_width(width, unsigned-True)

возвращает Типы образцов формата PortAudio для указанной ширины

Параметры:
  • width (int) – ширина образца в байтах
  • unsigned (bool) – для ширины 1 байт, знаковый или беззнаковый
Исключение:

ValueError – если ширина не корректна

pyaudio.get_portaudio_version()

возвращает версию PortAudio

>>> pyaudio.get_portaudio_version()
1899L
pyaudio.get_portaudio_version_text()

возврашает полную информацию о версии модуля

>>> pyaudio.get_portaudio_version_text()
u'PortAudio V19-devel (built Feb 25 2014 21:09:53)'
pyaudio.get_sample_size(format)

возвращает размер (в байтах) для заданного формата образца

Параметры:formatТипы образцов
Исключение:ValueError – при неверном типе формата

Объекты модуля

class pyaudio.PyAudio

основной объект модуля, который предоставляет возможность работы со звуком.

close(stream)

закрывает поток

Параметры:stream (pyaudio.Stream) – поток
Исключение:ValueError – если потока не существует
get_default_host_api_info()

возвращает словарь, содержащий устройства для работы со звуком в системе

Исключение:IOError – если нет устройств в системе
>>> p.get_default_host_api_info()
{'defaultInputDevice': 5L,
 'defaultOutputDevice': 5L,
 'deviceCount': 6L,
 'index': 0L,
 'name': u'ALSA',
 'structVersion': 1L,
 'type': 8L}
get_default_input_device_info()

возвращает словарь, содержащий устройства ввода в системе

>>> p.get_default_input_device_info()
{'defaultHighInputLatency': 0.034829931972789115,
 'defaultHighOutputLatency': 0.034829931972789115,
 'defaultLowInputLatency': 0.008707482993197279,
 'defaultLowOutputLatency': 0.008707482993197279,
 'defaultSampleRate': 44100.0,
 'hostApi': 0L,
 'index': 5L,
 'maxInputChannels': 32L,
 'maxOutputChannels': 32L,
 'name': u'default',
 'structVersion': 2L}
get_default_output_device_info()

возвращает словарь, содержащий устройства вывода в системе

>>> p.get_default_output_device_info()
{'defaultHighInputLatency': 0.034829931972789115,
 'defaultHighOutputLatency': 0.034829931972789115,
 'defaultLowInputLatency': 0.008707482993197279,
 'defaultLowOutputLatency': 0.008707482993197279,
 'defaultSampleRate': 44100.0,
 'hostApi': 0L,
 'index': 7L,
 'maxInputChannels': 32L,
 'maxOutputChannels': 32L,
 'name': u'default',
 'structVersion': 2L}
get_device_count()

возвращает количесвто устройств

>>> p.get_device_count()
8L
get_device_info_by_host_api_device_index(host_api_index, host_api_device_index)

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

Raiseы IOError:для неподдерживаемых устройств
get_device_info_by_index(device_index)

возвращает словарь, информацию об устройстве

Исключение:IOError – для неподдерживаемых устройств
get_format_from_width(width, unsigned-True)

возвращает Типы образцов для указанной ширины. аналог get_format_from_width()

Параметры:
  • width (int) – ширина образца в байтах (от 1 до 4)
  • unsigned (bool) – для ширины 1 байт, знаковый или беззнаковый
Raiseы ValueError:
 

если ширина не корректна

get_host_api_count()

возвращает количество доступных интерфейсов PortAudio.

>>> p.get_host_api_count()
2L
get_host_api_info_by_index(host_api_index)

возвращает словарь, информацию об устройстве

Исключение:IOError – для неподдерживаемых устройств
get_host_api_info_by_type(host_api_type)

возвращает словарь, информацию об устройстве

Исключение:IOError – для неподдерживаемых устройств
get_sample_size(format)

возвращает размер (в байтах) для заданного формата образца, аналог get_sample_size()

Параметры:formatТипы образцов
Исключение:ValueError – при неверном типе формата
is_format_supported(rate, input_device=None, input_channels=None, input_format=None, output_device=None, output_channels=None, output_format=None)

возвращает True, если указанная конфигурация поддерживается устройством, иначе возбуждает исключение

Параметры:
  • rate – скорость потока (в Hz)
  • input_device – индекс входного устройств. None для полудуплексных выходных потоков
  • input_channels – количество входных каналов. Игнорируется если input_device не задан
  • input_format – входной формат PortAudio
  • output_device – индекс выходного устройства. None для полудуплексных входных потоков
  • output_channels – количество выходных каналов. Игнорируется если output_device не задан
  • output_format – выходной формат PortAudio
Исключение:

ValueError – если конфигурация не поддерживается. Исключение в виде кортежа (error string, PortAudio Error Code).

open(*args, **kwargs)

возвращает объект Stream, открывает поток на воспроизведение или чтение звука. принимает те же параметр что и конструктор Stream

terminate()

закрывает объект

class pyaudio.Stream(**kwargs)

звуковой поток. используйте PyAudio.open() для получения данного объекта

Параметры:
  • PA_manger – ссылка на экземпляр PyAudio
  • rate – скорость потока
  • channels – количество каналов
  • formatТипы образцов
  • input – указывает, что это входной поток, по умолчанию False
  • output – указывает, что это выходной поток, по умолчанию False
  • input_device_index – индекс входного устройства, игнорируется, если input = False. По умолчанию None, дефолтное устройство
  • output_device_index – индекс выходного устройства, игнорируется, если output = False. По умолчанию None, дефолтное устройство
  • frames_per_buffer – количество фреймов в буфере
  • start – стартует поток после инициализации сразу, по умолчанию True
  • input_host_api_specific_stream_info – указывает на специфичное хост входное устройтсво (pyaudio.PaMacCoreStreamInfo)
  • output_host_api_specific_stream_info – указывает на специфичное хост выходное устройтсво (pyaudio.PaMacCoreStreamInfo)
  • stream_callback – обработчик потока, вызывается каждый раз, когда в поток попадают данные. сигнатура обработчика callback(input_data, frame_count, time_info, status_flag), должен возвраващть кортеж (frame_count, flag)
close()

закрывает поток

get_cpu_load()

возвращает вещественное число, загрузку процессора

get_input_latency()

возвращает задержку ввода

get_output_latency()

возвращает задержку вывода

get_time()

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

get_write_available()

возвращает время потока

is_active()

возвращает статус состояния потока

is_stopped()

возвращает статус состояния потока

read(num_frames)

читает данные из потока, при записи звука

start_stream()

запускает поток

stop_stream()

завершает поток

write(frames, num_frames=None, exception_on_underflow=False)

записывает в поток данные, например при воспроизведении звука

Параметры:
  • frames – данные
  • num_frames – количество данных для записи в поток
  • exception_on_underflow – обработка ошибки переполнения потока
class pyaudio.PaMacCoreStreamInfo(flags=None, channel_map=None)

утсройство доступное только на MacOS

Параметры:
get_channel_map()

возвращает карту канала

get_flags()

возвращает флаги

Типы образцов

paFloat32 - 1

32-х битный long

paInt32 - 2

32-х битный int

paInt24 - 4

24-х битный int

paInt16 - 8

16 битный int

paInt8 - 16

8 битный int

paUint8 - 32

8 битный беззнаковый int

paCustomFormat - 65536

специальный формат

Типы рузльтатов обработчика записи

paContinue - 0

следующитй блок потока

paComplete - 1

последний блок потока

paAbort - 2

обнаружена ошибка, остановить проигрывание или запись

Типы флагов обработчика

paInputUnderflow - 1

входной буфер не заполнен

paInputOverflow - 2

входной буфер переполнен

paOutputUnderflow - 4

выходной поток не заполнен

paOutputOverflow - 8

выходной поток переполнен

paPrimingOutput - 16

подготовка, но ещё не воспроизведение

Типы устройств

paInDevelopment - 0

Still in development

paDirectSound - 1

DirectSound (Windows only)

paMME - 2

Multimedia Extension (Windows only)

paASIO - 3

Steinberg Audio Stream Input/Output

paSoundManager - 4

SoundManager (OSX only)

paCoreAudio - 5

CoreAudio (OSX only)

paOSS - 7

Open Sound System (Linux only)

paALSA - 8

Advanced Linux Sound Architecture (Linux only)

paAL - 9

Open Audio Library

paBeOS - 10

BeOS Sound System

paWDMKS - 11

Windows Driver Model (Windows only)

paJACK - 12

JACK Audio Connection Kit

paWASAPI - 13

Windows Vista Audio stack architecture

paNoDevice - -1

нет актуалного устройства

Типы ошибок

class pyaudio.paNoError
class pyaudio.paNotInitialized
class pyaudio.paUnanticipatedHostError
class pyaudio.paInvalidChannelCount
class pyaudio.paInvalidSampleRate
class pyaudio.paInvalidDevice
class pyaudio.paInvalidFlag
class pyaudio.paSampleFormatNotSupported
class pyaudio.paBadIODeviceCombination
class pyaudio.paInsufficientMemory
class pyaudio.paBufferTooBig
class pyaudio.paBufferTooSmall
class pyaudio.paNullCallback
class pyaudio.paBadStreamPtr
class pyaudio.paTimedOut
class pyaudio.paInternalError
class pyaudio.paDeviceUnavailable
class pyaudio.paIncompatibleHostApiSpecificStreamInfo
class pyaudio.paStreamIsStopped
class pyaudio.paStreamIsNotStopped
class pyaudio.paInputOverflow
class pyaudio.paOutputUnderflowed
class pyaudio.paHostApiNotFound
class pyaudio.paInvalidHostApi
class pyaudio.paCanNotReadFromACallbackStream
class pyaudio.paCanNotWriteToACallbackStream
class pyaudio.paCanNotReadFromAnOutputOnlyStream
class pyaudio.paCanNotWriteToAnInputOnlyStream
class pyaudio.paIncompatibleStreamHostApi

Специфичные типы для MacOS

pyaudio.paMacCoreChangeDeviceParameters
pyaudio.paMacCoreFailIfConversionRequired
pyaudio.paMacCoreConversionQualityMin
pyaudio.paMacCoreConversionQualityMedium
pyaudio.paMacCoreConversionQualityLow
pyaudio.paMacCoreConversionQualityHigh
pyaudio.paMacCoreConversionQualityMax
pyaudio.paMacCorePlayNice
pyaudio.paMacCorePro
pyaudio.paMacCoreMinimizeCPUButPlayNice
pyaudio.paMacCoreMinimizeCPU

Примеры

"""проигрывание wav файла, блокирующий поток выполнения"""

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 data !- '':
    stream.write(data)
    data - wf.readframes(CHUNK)

# stop stream (4)
stream.stop_stream()
stream.close()

# close PyAudio (5)
p.terminate()
"""проигрывание wav файла, не блокирующий поток"""

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