def generate_spectrogram(self): """ generate spectrogram of all media files loaded in player #1 """ if self.cbVisualizeSpectrogram.isChecked(): if dialog.MessageDialog( programName, ("You choose to visualize the spectrogram for the media in player #1.<br>" "Choose YES to generate the spectrogram.\n\n" "Spectrogram generation can take some time for long media, be patient" ), [YES, NO]) == YES: if not self.ffmpeg_cache_dir: tmp_dir = tempfile.gettempdir() else: tmp_dir = self.ffmpeg_cache_dir w = dialog.Info_widget() w.resize(350, 100) w.setWindowFlags(Qt.WindowStaysOnTopHint) w.setWindowTitle("BORIS") w.label.setText("Generating spectrogram...") #for media in self.pj[OBSERVATIONS][self.observationId][FILE][PLAYER1]: for row in range(self.twVideo1.rowCount()): media_file_path = project_functions.media_full_path( self.twVideo1.item(row, 0).text(), self.project_path) if os.path.isfile(media_file_path): process = plot_spectrogram.create_spectrogram_multiprocessing( mediaFile=media_file_path, tmp_dir=tmp_dir, chunk_size=self.chunk_length, ffmpeg_bin=self.ffmpeg_bin, spectrogramHeight=self.spectrogramHeight, spectrogram_color_map=self.spectrogram_color_map) if process: w.show() while True: QApplication.processEvents() if not process.is_alive(): w.hide() break else: QMessageBox.warning( self, programName, "<b>{}</b> file not found".format(media_file_path)) else: self.cbVisualizeSpectrogram.setChecked(False)
def generate_spectrogram(self): """ generate spectrogram of all media files loaded in player #1 """ if self.cbVisualizeSpectrogram.isChecked(): if dialog.MessageDialog(programName, ("Você escolhe visualizar o espectrograma para a mídia no player #1.<br>" "Escolha SIM para gerar o espectrograma.\n\n" "Geração de espectrograma pode levar algum tempo para mídia longa, seja paciente"), [YES, NO]) == YES: if not self.ffmpeg_cache_dir: tmp_dir = tempfile.gettempdir() else: tmp_dir = self.ffmpeg_cache_dir w = dialog.Info_widget() w.resize(350, 100) w.setWindowFlags(Qt.WindowStaysOnTopHint) w.setWindowTitle("eMOC") w.label.setText("Gerando espectrograma...") #for media in self.pj[OBSERVATIONS][self.observationId][FILE][PLAYER1]: for row in range(self.twVideo1.rowCount()): media_file_path = project_functions.media_full_path(self.twVideo1.item(row, 0).text(), self.project_path) if os.path.isfile(media_file_path): process = plot_spectrogram.create_spectrogram_multiprocessing(mediaFile=media_file_path, tmp_dir=tmp_dir, chunk_size=self.chunk_length, ffmpeg_bin=self.ffmpeg_bin, spectrogramHeight=self.spectrogramHeight, spectrogram_color_map=self.spectrogram_color_map) if process: w.show() while True: QApplication.processEvents() if not process.is_alive(): w.hide() break else: QMessageBox.warning(self, programName , "<b>{}</b> Arquivo não encontrado".format(media_file_path)) else: self.cbVisualizeSpectrogram.setChecked(False)
def extract_wav(self): """ extract wav of all media files loaded in player #1 """ if self.cbVisualizeSpectrogram.isChecked() or self.cb_visualize_waveform.isChecked(): flag_wav_produced = False # check if player 1 is selected flag_player1 = False for row in range(self.twVideo1.rowCount()): if self.twVideo1.cellWidget(row, 0).currentText() == "1": flag_player1 = True if not flag_player1: QMessageBox.critical(self, programName , "The player #1 is not selected") self.cbVisualizeSpectrogram.setChecked(False) self.cb_visualize_waveform.setChecked(False) return if dialog.MessageDialog(programName, ("You choose to visualize the spectrogram or waveform for the media in player #1.<br>" "The WAV will be extracted from the media files, be patient"), [YES, NO]) == YES: w = dialog.Info_widget() w.resize(350, 100) w.setWindowFlags(Qt.WindowStaysOnTopHint) w.setWindowTitle("BORIS") w.label.setText("Extracting WAV from media files...") for row in range(self.twVideo1.rowCount()): # check if player 1 if self.twVideo1.cellWidget(row, 0).currentText() != "1": continue media_file_path = project_functions.media_full_path(self.twVideo1.item(row, MEDIA_FILE_PATH_IDX).text(), self.project_path) if self.twVideo1.item(row, HAS_AUDIO_IDX).text() == "False": QMessageBox.critical(self, programName , f"The media file {media_file_path} do not seem to have audio") flag_wav_produced = False break if os.path.isfile(media_file_path): w.show() QApplication.processEvents() if utilities.extract_wav(self.ffmpeg_bin, media_file_path, self.tmp_dir) == "": QMessageBox.critical(self, programName , f"Error during extracting WAV of the media file {media_file_path}") flag_wav_produced = False break w.hide() flag_wav_produced = True else: QMessageBox.warning(self, programName , f"<b>{media_file_path}</b> file not found") if not flag_wav_produced: self.cbVisualizeSpectrogram.setChecked(False) self.cb_visualize_waveform.setChecked(False) else: self.cbVisualizeSpectrogram.setChecked(False) self.cb_visualize_waveform.setChecked(False)