На этом шаге мы рассмотрим назначение, формат конструктора, основные методы этого класса и пример использования объекта даннаго класса.
Класс QAudioEncoderSettings используется для настройки параметров кодирования записываемого звука. Формат вызова его конструктора очень прост:
<Объект> = QAudioEncoderSettings([<QAudioEncoderSettings>])
Если указать в качестве параметра экземпляр класса QAudioEncoderSettings, будет создана его копия.
Класс QAudioEncoderSettings поддерживает следующие основные методы (полный их список представлен на странице https://doc.qt.io/qt-5/qaudioencodersettings.html):
Качество кодирования имеет смысл указывать только в случае, если задан режим кодирования с постоянным качеством (атрибут ConstantQualityEncoding);
Для примера напишем простую утилиту, осуществляющую запись звука с микрофона в минимальном качестве, - своего рода программный диктофон (рисунок 1).
from PyQt5 import QtCore, QtWidgets, QtMultimedia import sys, os class MyWindow(QtWidgets.QWidget): def __init__(self, parent=None): QtWidgets.QWidget.__init__(self, parent, flags = QtCore.Qt.Window | QtCore.Qt.MSWindowsFixedSizeDialogHint) self.setWindowTitle("Запись звука") # Инициализируем подсистему для записи звука self.ardRecorder = QtMultimedia.QAudioRecorder() # Устанавливаем максимальную громкость self.ardRecorder.setVolume(100) # Звук будет сохраняться в файле record.wav, находящемся # в той же папке, где хранится программа fn = QtCore.QUrl.fromLocalFile(os.path.abspath("record.wav")) self.ardRecorder.setOutputLocation(fn) # Устанавливаем звуковой вход по умолчанию self.ardRecorder.setAudioInput(self.ardRecorder.defaultAudioInput()) # Указываем формат файла WAV self.ardRecorder.setContainerFormat("audio/x-wav") # Задаем параметры кодирования звука aes = QtMultimedia.QAudioEncoderSettings() aes.setCodec("audio/pcm") aes.setSampleRate(8000) aes.setChannelCount(1) aes.setEncodingMode(QtMultimedia.QMultimedia.ConstantQualityEncoding) aes.setQuality(QtMultimedia.QMultimedia.VeryLowQuality) self.ardRecorder.setAudioSettings(aes) self.ardRecorder.statusChanged.connect(self.initRecorder) self.ardRecorder.durationChanged.connect(self.showDuration) # Создаем компоненты для запуска, приостановки и остановки # записи звука и регулирования его уровня vbox = QtWidgets.QVBoxLayout() hbox = QtWidgets.QHBoxLayout() self.btnRecord = QtWidgets.QPushButton("&3апись") self.btnRecord.clicked.connect(self.ardRecorder.record) hbox.addWidget(self.btnRecord) self.btnPause = QtWidgets.QPushButton("П&ауза") self.btnPause.clicked.connect(self.ardRecorder.pause) self.btnPause.setEnabled(False) hbox.addWidget(self.btnPause) self.btnStop = QtWidgets.QPushButton("&Стоп") self.btnStop.clicked.connect(self.ardRecorder.stop) self.btnStop.setEnabled(False) hbox.addWidget(self.btnStop) vbox.addLayout(hbox) hbox = QtWidgets.QHBoxLayout() lblVolume = QtWidgets.QLabel("&Уровень записи") hbox.addWidget(lblVolume) sldVolume = QtWidgets.QSlider(QtCore.Qt.Horizontal) sldVolume.setRange(0, 100) sldVolume.setTickPosition(QtWidgets.QSlider.TicksAbove) sldVolume.setTickInterval(10) sldVolume.setValue(100) lblVolume.setBuddy(sldVolume) sldVolume.valueChanged.connect(self.ardRecorder.setVolume) hbox.addWidget(sldVolume) vbox.addLayout(hbox) # Создаем надпись, в которую будет выводиться состояние # программы self.lblStatus = QtWidgets.QLabel("Готово") vbox.addWidget(self.lblStatus) self.setLayout(vbox) self.resize(300, 100) # В зависимости от состояния записи звука делаем нужные # кнопки доступными или, напротив, недоступными и выводим # соответствующий текст в надписи def initRecorder(self, status): if status == QtMultimedia.QMediaRecorder.RecordingStatus: self.btnRecord.setEnabled(False) self.btnPause.setEnabled(True) self.btnStop.setEnabled(True) self.lblStatus.setText("Запись") elif status == QtMultimedia.QMediaRecorder.PausedStatus: self.btnRecord.setEnabled(True) self.btnPause.setEnabled(False) self.lblStatus.setText("Пауза") elif status == QtMultimedia.QMediaRecorder.FinalizingStatus: self.btnRecord.setEnabled(True) self.btnPause.setEnabled(False) self.btnStop.setEnabled(False) self.lblStatus.setText("Готово") # Выводим продолжительность записанного звука def showDuration(self, duration): self.lblStatus.setText("Записано " + str(duration // 1000) + " секунд") app = QtWidgets.QApplication(sys.argv) window = MyWindow() window.show() sys.exit(app.exec_())
Рис.1. Утилита для записи звука
На следующем шаге мы рассмотрим класс QSoundEffect.