pyaudio - инструмент для работы со звуком¶
Модуль позволяет работать с кросплатформенной библиотекой PortAudio, проигрывать и записывать звуки.
Атрибуты модуля¶
Методы модуля¶
-
pyaudio.
get_format_from_width
(width, unsigned-True)¶ возвращает Типы образцов формата PortAudio для указанной ширины
- Parameters
width (int) – ширина образца в байтах
unsigned (bool) – для ширины 1 байт, знаковый или беззнаковый
- Raises
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)¶ возвращает размер (в байтах) для заданного формата образца
- Parameters
format – Типы образцов
- Raises
ValueError – при неверном типе формата
Объекты модуля¶
- class
pyaudio.
PyAudio
¶ основной объект модуля, который предоставляет возможность работы со звуком.
-
close
(stream)¶ закрывает поток
- Parameters
stream (pyaudio.Stream) – поток
- Raises
ValueError – если потока не существует
-
get_default_host_api_info
()¶ возвращает словарь, содержащий устройства для работы со звуком в системе
- Raises
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)¶ возвращает словарь, информацию об устройстве
- Raises
IOError – для неподдерживаемых устройств
-
get_format_from_width
(width, unsigned-True)¶ возвращает Типы образцов для указанной ширины. аналог
get_format_from_width()
- Parameters
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)¶ возвращает словарь, информацию об устройстве
- Raises
IOError – для неподдерживаемых устройств
-
get_host_api_info_by_type
(host_api_type)¶ возвращает словарь, информацию об устройстве
- Raises
IOError – для неподдерживаемых устройств
-
get_sample_size
(format)¶ возвращает размер (в байтах) для заданного формата образца, аналог
get_sample_size()
- Parameters
format – Типы образцов
- Raises
ValueError – при неверном типе формата
-
is_format_supported
(rate, input_device=None, input_channels=None, input_format=None, output_device=None, output_channels=None, output_format=None)¶ возвращает True, если указанная конфигурация поддерживается устройством, иначе возбуждает исключение
- Parameters
rate – скорость потока (в Hz)
input_device – индекс входного устройств. None для полудуплексных выходных потоков
input_channels – количество входных каналов. Игнорируется если input_device не задан
input_format – входной формат PortAudio
output_device – индекс выходного устройства. None для полудуплексных входных потоков
output_channels – количество выходных каналов. Игнорируется если output_device не задан
output_format – выходной формат PortAudio
- Raises
ValueError – если конфигурация не поддерживается. Исключение в виде кортежа (error string, PortAudio Error Code).
-
open
(*args, **kwargs)¶ возвращает объект
Stream
, открывает поток на воспроизведение или чтение звука. принимает те же параметр что и конструкторStream
-
terminate
()¶ закрывает объект
-
- class
pyaudio.
Stream
(**kwargs)¶ звуковой поток. используйте
PyAudio.open()
для получения данного объекта- Parameters
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)¶ записывает в поток данные, например при воспроизведении звука
- Parameters
frames – данные
num_frames – количество данных для записи в поток
exception_on_underflow – обработка ошибки переполнения потока
- class
pyaudio.
PaMacCoreStreamInfo
(flags=None, channel_map=None)¶ утсройство доступное только на MacOS
- Parameters
flags – Специфичные типы для MacOS
channel_map – массив, описывающий отображанеие канала
-
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.
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()