From 0b10e675d309e468177d6f21e849fe0cce130547 Mon Sep 17 00:00:00 2001 From: alessandro90 Date: Fri, 28 Sep 2018 14:14:37 +0200 Subject: [PATCH] pygame player different sample rates --- .gitignore | 2 ++ audio_player.py | 24 +++++++++----- main.py | 39 ++++++++++++++++------ main_window.ui | 87 +++++++++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 131 insertions(+), 21 deletions(-) diff --git a/.gitignore b/.gitignore index ea42f42..0bd1f8a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ __pycache__ Data +.ipynb_checkpoints +*.ipynb wav_converter.py diff --git a/audio_player.py b/audio_player.py index 0031ec2..65edd90 100644 --- a/audio_player.py +++ b/audio_player.py @@ -1,5 +1,6 @@ import os import sys +from pydub import AudioSegment from pygame import mixer from PyQt5.QtCore import QTimer @@ -10,9 +11,11 @@ class AudioPlayer(object): method and set_audio_player, which loads the current file. Everything else is managed internally. """ - __time_step = 1000 + __time_step = 1000 # Milliseconds. + # __sample_rate = 8000 # Sample frequency of all audio files. + def __init__(self, play, pause, stop, volume, audio_progress): - mixer.init() + # mixer.init(frequency = self.__sample_rate) self.__paused = False self.__play = play self.__pause = pause @@ -27,23 +30,26 @@ class AudioPlayer(object): self.__stop.clicked.connect(self.__stop_audio) self.__volume.valueChanged.connect(self.__set_volume) + def __set_volume(self): mixer.music.set_volume(self.__volume.value() / self.__volume.maximum()) def __reset_audio_widget(self): + if mixer.get_init(): + if mixer.music.get_busy(): + mixer.music.stop() + self.__timer.stop() + mixer.quit() self.__audio_progress.reset() - self.__volume.setValue(50) self.__enable_buttons(False, False, False) self.__paused = False - if mixer.music.get_busy(): - mixer.music.stop() - self.__timer.stop() def __update_bar(self): pos = mixer.music.get_pos() if pos == -1: self.__timer.stop() self.__audio_progress.reset() + self.__enable_buttons(True, False, False) else: self.__audio_progress.setValue(pos) @@ -54,13 +60,14 @@ class AudioPlayer(object): def set_audio_player(self, fname): self.__reset_audio_widget() - full_name = os.path.join('Data', 'Audio', fname + '.ogg') + full_name = os.path.join('Data', 'Audio_wav', fname + '.wav') if os.path.exists(full_name): + mixer.init(frequency = AudioSegment.from_ogg(full_name).frame_rate) self.__play.setEnabled(True) self.__audio_file = full_name self.__set_max_progress_bar() mixer.music.load(full_name) - mixer.music.set_volume(self.__volume.value()) + self.__volume.setValue(50) def __play_audio(self): if not self.__paused: @@ -73,6 +80,7 @@ class AudioPlayer(object): def __stop_audio(self): mixer.music.stop() + self.__audio_progress.reset() self.__timer.stop() self.__enable_buttons(True, False, False) diff --git a/main.py b/main.py index 21bec38..b34ae56 100644 --- a/main.py +++ b/main.py @@ -20,27 +20,28 @@ class MyApp(QMainWindow, Ui_MainWindow): super().__init__() self.setupUi(self) self.show() + self.db_version = None self.load_db() self.display_signals() self.search_bar.textChanged.connect(self.display_signals) self.result_list.itemSelectionChanged.connect(self.display_specs) self.play.setIcon(qta.icon('fa5.play-circle', - color = "#7a7a7a", - color_active = '#1d5eff')) + color = "#999999", + color_disabled = '#000000')) self.play.setIconSize(self.play.size()) self.pause.setIcon(qta.icon('fa5.pause-circle', - color = "#7a7a7a", - color_active = '#1d5eff')) + color = "#999999", + color_disabled = '#000000')) self.pause.setIconSize(self.pause.size()) self.stop.setIcon(qta.icon('fa5.stop-circle', - color = "#7a7a7a", - color_active = '#1d5eff')) + color = "#999999", + color_disabled = '#000000')) self.stop.setIconSize(self.stop.size()) self.audio_widget = AudioPlayer(self.play, - self.pause, - self.stop, - self.volume, - self.audio_progress) + self.pause, + self.stop, + self.volume, + self.audio_progress) def load_db(self): try: @@ -61,6 +62,24 @@ class MyApp(QMainWindow, Ui_MainWindow): box.show() else: self.signal_names = db['signal_0'] + + try: + with open(os.path.join('Data', 'verdb.ini'), 'r') as dbver: + self.db_version = int(dbver.read()) + except (FileNotFoundError, ValueError): + box = QMessageBox(self) + box.setStyleSheet(""" + color:#FFFFFF; + """) + box.setWindowTitle("No database version") + box.setText("Unable to detect database version.\n" + "Possible data curruption.\n" + "Go to Updates->Force Download.") + box.show() + self.setStatusTip(f"Database version: undefined.") + else: + self.setStatusTip(f"Database version: {self.db_version}.") + def display_signals(self): self.result_list.clear() diff --git a/main_window.ui b/main_window.ui index 68e00b0..ccd114b 100644 --- a/main_window.ui +++ b/main_window.ui @@ -38,6 +38,76 @@ QProgressBar::chunk { /*background-color: #1d5eff;*/ background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #1d5eff, stop:0.5 #4177ff, stop:1 #1d5eff); border-radius: 3px; +} + +QAbstractScrollArea::corner { + background: none; + border: none; +} + +QScrollBar:vertical, QScrollBar:horizontal{ + background-color:#343434; + border-radius: 5px; + /*background: none;*/ +} + +QScrollBar:vertical { + margin-top: 0px; + margin-bottom: 0px; + /*width: 10px;*/ +} +QScrollBar:horizontal{ + margin-left: 0px; + margin-right: 0px; + /*height: 10px;*/ +} + +QScrollBar::handle:vertical, QScrollBar::handle:horizontal{ + border-radius: 5px; + border-color: none; + border-width: 1px; + background-color: #959595; +} + +QScrollBar::add-line:vertical, QScrollBar::add-line:horizontal{ + width: 0px; + height: 0px; +} + +QScrollBar::sub-line:vertical, QScrollBar::sub-line:horizontal{ + width: 0px; + height: 0px; +} + +QScrollBar::add-page:vertical{ + border-left: 1px solid gray; + background: transparent; + border-radius: 5px; +/* + border: 1px#343434; + background-color: #343434;*/ +} +QScrollBar::add-page:horizontal{ + border-top: 1px solid gray; + background: transparent; + border-radius: 5px; +/* + border: 1px#343434; + background-color: #343434;*/ +} +QScrollBar::sub-page:vertical{ + border-left: 1px solid gray; + background: transparent; + border-radius: 5px; +/* border: 1px #343434; + background-color: #343434;*/ +} +QScrollBar::sub-page:horizontal{ + border-top: 1px solid gray; + background: transparent; + border-radius: 5px; +/* border: 1px #343434; + background-color: #343434;*/ } @@ -94,10 +164,11 @@ QProgressBar::chunk { - Search a signal name. + - color: rgb(255, 255, 255); + background-color: #343434; +color: rgb(255, 255, 255); border: 1px solid gray; border-radius: 5px; @@ -147,9 +218,10 @@ border-radius: 5px; QListWidget { + background-color:rgb(52,52,52); color: rgb(255, 255, 255); border: 1px solid gray; - border-radius: 10px; + border-radius: 8px; } @@ -159,6 +231,12 @@ border-radius: 5px; Qt::ScrollBarAsNeeded + + 16 + + + false + @@ -421,6 +499,9 @@ QSlider::handle:horizontal { 100 + + 10 + 50