Шаг 295.
Библиотека PyQt5.
Мультимедиа. Запись звука. Класс QAudioRecorder
На этом шаге мы рассмотрим назначение, иерархию, конструктор, а также основные методы и сигналы этого класса.
Класс QAudioRecorder позволяет записывать звук с микрофона и сохранять его в аудиофайле в закодированном виде. Его иерархия наследования выглядит так:
(GObject, QMediaBindableInterface) - QMediaRecorder - QAudioRecorder
Формат вызова конструктора этого класса следующий:
<Объект> = QAudioRecorder([parent=None])
В параметре parent может быть указана ссылка на родительский компонент.
Большую часть полезных для нас методов QAudioRecorder наследует от своего родителя - QMediaRecorder. Эти методы приведены далее (полный их список доступен на страницах
https://doc.qt.io/qt-5/qmediarecorder.html и
https://doc.qt.io/qt-5/qaudiorecorder.html):
- setOutputLocation (<QUrl>) - задает путь к файлу, в котором будет сохраняться записываемый звук;
- setAudioInput (<Звуковой вход>) - задает вход, с которого будет сниматься записываемый звук. Наименование входа задается в виде строки;
- setContainerFormat (<Формат файла>) - задает MIME-тип файла, в котором будет сохраняться записываемый звук. Формат указывается в виде строки;
- setAudioSettings(<QAudioEncoderSettings>) - задает параметры кодирования записываемого звука. Параметры указываются в виде экземпляра класса QAudioEncoderSettings;
- setVolume (<Уровень>) - задает уровень записываемого звука в виде числа от 0 (звук отключен) до 100 (максимальный уровень). Метод является слотом;
- record () - запускает или возобновляет запись звука. Метод является слотом;
- pause () - приостанавливает запись звука. Метод является слотом;
- stop () - останавливает запись звука. Метод является слотом;
- setMetaData (<Ключ>, <Значение>) - заносит в метаданные сохраняемого файла заданное значение под заданным ключом. Доступные ключи были рассмотрены
в описании метода metaData() (см. 289 шаг);
- defaultAudioInput () - возвращает строку с наименованием звукового входа, используемого по умолчанию:
print(ar.defaultAudioInput())
# Пример:
# Микрофон (Webcam 200)
- audioInputs () - возвращает список наименований всех имеющихся в системе звуковых входов, заданных строками:
ar = QtMultimedia.QAudioRecorder()
for f in ar.audioInputs():
print(f)
# Пример:
# Микрофон (Webcam 200)
- supportedContainers () - возвращает список всех поддерживаемых классом QAudioRecorder MIME-типов файлов, указанных в виде строк:
for f in ar.supportedContainers():
print(f, end=" ")
# Выведет: audio/x-wav audio/x-raw
Как видим, поддерживаются лишь форматы WAV и RAW;
- supportedAudioCodecs () - выводит список наименований всех поддерживаемых классом QAudioRecorder аудиокодеков, заданных в виде строк:
for f in ar.supportedAudioCodecs():
print(f, end=" ")
# Выведет: audio/pcm
Поддерживается лишь кодек PCM - самый простой из имеющих хождение;
- supportedAudioSampleRates ([settings=QAudioEncoderSettings()]) - позволяет узнать поддерживаемые частоты дискретизации звука. Если в параметре settings указать
экземпляр класса QAudioEncoderSettings, задающий параметры кодирования, будут возвращены только частоты, доступные для этих параметров.
Возвращаемый результат представляет собой кортеж, первый элемент которого - список целочисленных значений частот дискретизации. Второй элемент будет значением True, если
поддерживаются произвольные частоты дискретизации, или False - в противном случае. Пример:
sr = ar.supportedAudioSampleRates()
for f in sr[0]:
print(f, end=" ")
print()
print(sr[1])
# Выведет:
# 8000 11025 22050 44100 48000 96000
# False
- duration () - возвращает текущую продолжительность записанного звука в миллисекундах;
- volume () - возвращает уровень записываемого звука в виде числа от 0 до 100;
- state () - возвращает текущее состояние записи звука в виде значения одного из следующих атрибутов класса QMediaRecorder:
- StoppedState (или 0) - запись звука не начиналась или была остановлена;
- RecordingState (или 1) - идет запись звука;
- PausedState (или 2) - запись звука приостановлена;
- status () - возвращает текущее состояние подсистемы записи звука в виде значения одного из следующих атрибутов класса QMediaRecorder:
- UnavailableStatus (или 0) - состояние определить не удается, подсистема записи звука недоступна, или указаны не поддерживаемые параметры записи;
- UnloadedStatus (или 1) - подсистема записи звука неактивна;
- LoadingStatus (или 2) - подсистема записи звука в данный момент активизируется;
- LoadedStatus (или 3) - подсистема записи звука активна;
- StartingStatus (или 4) - запускается запись звука;
- RecordingStatus (или 5) - идет запись звука;
- PausedStatus (или 6) - запись звука приостановлена;
- FinalizingStatus (или 7) - запись звука остановлена, и идет сохранение аудиофайла;
- error () - возвращает ошибку, возникшую при записи звука, в виде значения одного из следующих атрибутов класса QMediaRecorder:
- NoError (или 0) - никакой ошибки не возникло;
- ResourceError (или 1) - подсистема записи звука недоступна или не готова к работе;
- FormatError (или 2) - заданы недопустимые параметры кодирования звука;
- OutOfSpaceError (или 3) - недостаточно места для сохранения аудиофайла;
- errorString () - возвращает текстовое описание ошибки.
Класс QAudioRecorder поддерживает довольно много сигналов, из которых нас интересуют лишь некоторые (полный их список приведен на страницах
https://doc.qt.io/qt-5/qmediarecorder.html и
https://doc.qt.io/qt-5/qaudiorecorder.html):
- durationChanged (<Продолжительность>) - генерируется при изменении продолжительности записанного звука. В параметре передается новое значение продолжительности, заданное целым числом;
- stateChanged (<Состояние>) - генерируется при изменении состояния записи звука. В параметре передается целочисленный идентификатор нового состояния;
- statusChanged (<Состояние>) - генерируется при изменении состояния подсистемы записи звука. В параметре передается целочисленный идентификатор нового состояния;
- volumeChanged (<Уровень звука>) - генерируется при изменении уровня записываемого звука. В параметре передается новое значение уровня в виде целого числа.
На следующем шаге мы рассмотрим класс QAudioEncoderSettings.
Предыдущий шаг
Содержание
Следующий шаг