Не получается сменить формат файла при записи аудио с помощью PyQt6.QtMultimedia.QMediaRecorder
Мне нужен диктофон как часть программы.
Ниже приведена тестовая часть для диктофона:
import os
import sys
from PyQt6.QtMultimedia import QMediaRecorder, QMediaCaptureSession, QAudioInput, QMediaFormat
from PyQt6.QtWidgets import QMainWindow, QApplication, QPushButton
from PyQt6 import QtCore
# Для тестирования
class MainForm(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
self.audio_recorder_init('files/pretest')
self.button_start.clicked.connect(self.start_record)
self.button_stop.clicked.connect(self.stop_record)
def initUI(self):
self.setGeometry(100, 100, 1000, 500)
self.setFixedSize(self.width(), self.height())
self.button_start = QPushButton('Start', self)
self.button_stop = QPushButton('Stop', self)
self.button_stop.move(0, 50)
def audio_recorder_init(self, filename):
mcs = QMediaCaptureSession(self)
self.inp = QAudioInput(self)
self.inp.setVolume(1.0)
mcs.setAudioInput(self.inp)
self.ardRecorder = QMediaRecorder(self)
mcs.setRecorder(self.ardRecorder)
self.ardRecorder.setOutputLocation(QtCore.QUrl.fromLocalFile(os.path.abspath(filename)))
# media_format = QMediaFormat(QMediaFormat.FileFormat.MP3)
# media_format.setAudioCodec(QMediaFormat.AudioCodec.MP3)
# self.ardRecorder.setMediaFormat(media_format)
self.ardRecorder.setQuality(QMediaRecorder.Quality.LowQuality)
self.ardRecorder.setEncodingMode(QMediaRecorder.EncodingMode.ConstantQualityEncoding)
self.ardRecorder.setAudioChannelCount(1)
self.ardRecorder.setAudioSampleRate(-1)
def start_record(self):
self.ardRecorder.record()
def stop_record(self):
self.ardRecorder.stop()
if __name__ == '__main__':
app = QApplication(sys.argv)
MF = MainForm()
MF.show()
sys.exit(app.exec())
Программа работает и записывает звук в формате .m4a
.
Но я хочу получить файлы .mp3
или .wav
.
Если раскомментировать строки:
# media_format = QMediaFormat(QMediaFormat.FileFormat.MP3)
# media_format.setAudioCodec(QMediaFormat.AudioCodec.MP3)
# self.ardRecorder.setMediaFormat(media_format)
то при запуске в консоль выводится:
[mp3_mf @ 0000024738C00AC0] MFT name: 'MP3 Encoder ACM Wrapper MFT'
При этом создаётся файл с расширением .m4a
, но проигрыватель отказывается его воспроизводить (но звук всё-таки записывается.
Я пробовал конвертировать этот файл через онлайн-конвертер в mp3
и получилось его воспроизвести).
Если заменить формат файла и аудиокодека с MP3
на Wave
, то программа вообще виснет.
В чём может быть проблема? И как можно её решить?
Источник: Stack Overflow на русском