Пример #1
0
    def __setRecordParams(self):  ##设置音频输入参数
        selectedFile = self.ui.editOutputFile.text().strip()
        if (selectedFile == ""):
            QMessageBox.critical(self, "错误", "请先设置录音输出文件")
            return False

        if os.path.exists(selectedFile):
            os.remove(selectedFile)  # 删除已有文件
        ##         QMessageBox.critical(self,"错误","录音输出文件被占用,无法删除")
        ##         return False

        recordFile = QUrl.fromLocalFile(selectedFile)
        self.recorder.setOutputLocation(recordFile)  # 设置输出文件

        recordDevice = self.ui.comboDevices.currentText()
        self.recorder.setAudioInput(recordDevice)  # 设置录入设备

        settings = QAudioEncoderSettings()  # 音频编码设置
        settings.setCodec(self.ui.comboCodec.currentText())  # 编码

        sampRate = int(self.ui.comboSampleRate.currentText())
        settings.setSampleRate(sampRate)  # 采样率

        channelCount = int(self.ui.comboChannels.currentText())
        settings.setChannelCount(channelCount)  # 通道数

        settings.setEncodingMode(QMultimedia.ConstantBitRateEncoding)  # 固定比特率

        self.recorder.setAudioSettings(settings)  # 音频设置
        return True
Пример #2
0
class QVoiceRecorder(object):
    def __init__(self):
        pass

    def initAudioInput(self, filepath):

        self.recorder = QAudioRecorder()

        self.settings = QAudioEncoderSettings()
        self.settings.setCodec("audio/vorbis")
        self.recorder.setContainerFormat("ogg")
        #self.settings.setQuality(QtMultimedia.HighQuality)

        self.recorder.setEncodingSettings(self.settings)

        url = QtCore.QUrl.fromLocalFile(
            QtCore.QFileInfo(filepath).absoluteFilePath())
        self.recorder.setOutputLocation(url)

    def start(self):
        self.recorder.record()

    def stop(self):
        self.recorder.pause()
        self.recorder.stop()
        self.recorder.stop()
Пример #3
0
class SimpleAudioRecorder(QAudioRecorder):
    def __init__(self, data: ConverterData, transcription: Transcription,
                 app_settings: AppSettings) -> None:
        super().__init__()
        self.app_settings = app_settings
        self.temp = data.get_temp_file()
        self.transcription = transcription
        self.file_path = os.path.join(self.temp,
                                      f'{self.transcription.id}.wav')
        self.settings = QAudioEncoderSettings()

    def start_recording(self) -> None:
        LOG_RECORDER.info("Audio recording started.")
        self.settings.setCodec('audio/pcm')
        self.settings.setChannelCount(1)
        self.settings.setBitRate(96000)
        self.settings.setSampleRate(44100)
        self.settings.setQuality(self.app_settings.audio_quality)
        self.settings.setEncodingMode(QMultimedia.ConstantQualityEncoding)
        container = 'audio/x-wav'
        self.setEncodingSettings(self.settings, QVideoEncoderSettings(),
                                 container)
        self.setOutputLocation(QUrl.fromLocalFile(self.file_path))
        self.record()

    def stop_recording(self) -> Union[str, None]:
        LOG_RECORDER.info("Audio recording finished.")
        LOG_RECORDER.info(f"Audio file: {self.file_path}")
        self.stop()
        return self.file_path
Пример #4
0
    def startVid(self):
        self.cam.load()
        # self.camvfind.show()
        self.cam.setViewfinder(self.camvfind)
        self.cam.setCaptureMode(QCamera.CaptureVideo)
        self.cam.start()

        audio = QAudioEncoderSettings()
        audio.setCodec("audio/amr")
        audio.setQuality(QtMultimedia.QMultimedia.NormalQuality)
        video = QVideoEncoderSettings()
        # video.setCodec("video/mp4")
        video.setQuality(QtMultimedia.QMultimedia.NormalQuality)
        video.setResolution(1920, 1080)
        video.setFrameRate(30.0)
        # self.recorder.setAudioSettings(audio)
        self.recorder.setVideoSettings(video)
        self.recorder.setContainerFormat("mp4")
Пример #5
0
    def __setRecordParams(self):  ##设置音频输入参数
        selectedFile = self.ui.editOutputFile.text().strip()
        if (selectedFile == ""):
            QMessageBox.critical(self, "错误", "请先设置录音输出文件")
            return False

        if os.path.exists(selectedFile):
            os.remove(selectedFile)  #删除已有文件

    ##         QMessageBox.critical(self,"错误","录音输出文件被占用,无法删除")
    ##         return False

        recordFile = QUrl.fromLocalFile(selectedFile)
        self.recorder.setOutputLocation(recordFile)  #设置输出文件

        recordDevice = self.ui.comboDevices.currentText()
        self.recorder.setAudioInput(recordDevice)  #设置录入设备

        settings = QAudioEncoderSettings()  #音频编码设置
        settings.setCodec(self.ui.comboCodec.currentText())  #编码

        sampRate = int(self.ui.comboSampleRate.currentText())
        settings.setSampleRate(sampRate)  #采样率

        bitRate = int(self.ui.comboBitrate.currentText())
        settings.setBitRate(bitRate)  #比特率

        channelCount = int(self.ui.comboChannels.currentText())
        settings.setChannelCount(channelCount)  #通道数

        ##      quality=self.ui.sliderQuality.value()   #也可以
        quality = QMultimedia.EncodingQuality(self.ui.sliderQuality.value())
        settings.setQuality(quality)  #品质

        if self.ui.radioQuality.isChecked():  #编码模式为固定品质,自动决定采样率,采样点大小
            settings.setEncodingMode(QMultimedia.ConstantQualityEncoding)
        else:
            settings.setEncodingMode(
                QMultimedia.ConstantBitRateEncoding)  #固定比特率

        self.recorder.setAudioSettings(settings)  #音频设置
        return True
Пример #6
0
    def record(self, filename):
        url = QtCore.QUrl.fromLocalFile(
            QtCore.QFileInfo(filename).absoluteFilePath())
        #content = QMediaObject(url)

        #self.recorder = QAudioRecorder()
        #source = QAudioInput()
        #source = QMediaObject()
        self.recorder = QAudioRecorder()

        settings = QAudioEncoderSettings()
        settings.setChannelCount(1)
        settings.setSampleRate(44100)
        settings.setBitRate(32)
        settings.setCodec("audio/vorbis")
        #settings.setEncodingMode(QtMultimedia.ConstantQualityEnconding)

        self.recorder.setContainerFormat("ogg")
        self.recorder.setEncodingSettings(settings)
        self.recorder.setOutputLocation(url)
Пример #7
0
    def initAudioListWidget(self, dbAdapter, deckpath, current_rowid):
        self.audioItemsDict = []

        self.dbAdapter = dbAdapter
        self.deckpath = deckpath
        self.current_rowid = current_rowid

        self.audioPlayer = QMediaPlayer()
        self.audioPlayer.mediaStatusChanged.connect(self.mediaStatusChanged)

        os_name = platform.uname()[0]
        if os_name == "Windows" or os_name == "Darwin":
            self.audioRecorder = QAudioRecorder()
        else:
            from modules.deck.gstAudioRecorder import GstAudioRecorder
            self.audioRecorder = GstAudioRecorder()

        settings = QAudioEncoderSettings()

        audioformat = self.config.readVar('vocable', 'audioformat')
        if audioformat == 'ogg':
            settings.setCodec("audio/vorbis")
            self.audioRecorder.setContainerFormat("ogg")
        elif audioformat == 'mp3':
            settings.setCodec("audio/mpeg")
            self.audioRecorder.setContainerFormat("mp3")
        elif audioformat == 'amr':
            settings.setCodec("audio/amr")
        else:
            settings.setCodec("audio/PCM")
            self.audioRecorder.setContainerFormat("wav")

        self.audioRecorder.setEncodingSettings(settings)

        self.setColumnCount(6)
        self.setHorizontalHeaderLabels(
            ["description", "", "", "", "", "filename"])
        self.setRowCount(0)

        self.itemChanged.connect(self.onItemChanged)
Пример #8
0
    def setupWindow(self):
        """Set up widgets in the main window and the QAudioRecorder instance."""
        # Set up two push buttons (the app's first "screen")
        self.select_path_button = QPushButton("Select Audio Path")
        self.select_path_button.setObjectName("SelectFile")
        self.select_path_button.setFixedWidth(140)
        self.select_path_button.clicked.connect(self.selectAudioPath)

        self.start_button = QPushButton()
        self.start_button.setObjectName("StartButton")
        self.start_button.setEnabled(False)
        self.start_button.setFixedSize(105, 105)
        self.start_button.clicked.connect(self.startRecording)

        # Set up the labels and stop button (the app's second "screen")
        self.recording_label = QLabel("Recording...")
        self.recording_label.setFont(QFont("Helvetica [Cronyx]", 32))
        self.recording_label.setVisible(False)
        self.recording_label.setAlignment(Qt.AlignHCenter)
        self.time_label = QLabel("00:00")
        self.time_label.setFont(QFont("Helvetica [Cronyx]", 18))
        self.time_label.setObjectName("Time")
        self.time_label.setVisible(False)
        self.time_label.setAlignment(Qt.AlignHCenter)

        self.stop_button = QPushButton()
        self.stop_button.setObjectName("StopButton")
        self.stop_button.setFixedSize(65, 65)
        self.stop_button.setVisible(False)
        self.stop_button.clicked.connect(self.stopRecording)

        # Set up the main layout
        self.main_v_box = QVBoxLayout()
        self.main_v_box.setAlignment(Qt.AlignHCenter)
        self.main_v_box.addWidget(self.select_path_button)
        # Force select_path_button to be centered in the window
        self.main_v_box.setAlignment(self.select_path_button, Qt.AlignCenter)
        self.main_v_box.addStretch(3)
        self.main_v_box.addWidget(self.start_button)
        self.main_v_box.setAlignment(self.start_button, Qt.AlignCenter)
        self.main_v_box.addWidget(self.recording_label)
        self.main_v_box.addWidget(self.time_label)
        self.main_v_box.addStretch(3)
        self.main_v_box.addWidget(self.stop_button)
        self.main_v_box.setAlignment(self.stop_button, Qt.AlignCenter)
        self.main_v_box.addStretch(1)

        self.setLayout(self.main_v_box)  # Set the beginning layout

        # Specify audio encoder settings
        audio_settings = QAudioEncoderSettings()
        # Depending upon your platform or the codecs that you have available, you
        # will need to change the codec. For Linux users if you are having issues
        # use "audio/x-vorbis", and then select the .ogg extension when saving
        # the file
        audio_settings.setCodec("audio/wav")
        audio_settings.setQuality(QMultimedia.HighQuality)

        # Create instance of QAudioRecorder for recording audio
        self.audio_recorder = QAudioRecorder()
        # Uncomment to discover possible codecs supported on your platform
        #print(self.audio_recorder.supportedAudioCodecs())
        self.audio_recorder.setEncodingSettings(audio_settings)
        self.audio_recorder.durationChanged.connect(self.displayTime)