pygame player different sample rates

This commit is contained in:
alessandro90
2018-09-28 14:14:37 +02:00
parent 0539a74c89
commit 0b10e675d3
4 changed files with 131 additions and 21 deletions

2
.gitignore vendored
View File

@@ -1,3 +1,5 @@
__pycache__ __pycache__
Data Data
.ipynb_checkpoints
*.ipynb
wav_converter.py wav_converter.py

View File

@@ -1,5 +1,6 @@
import os import os
import sys import sys
from pydub import AudioSegment
from pygame import mixer from pygame import mixer
from PyQt5.QtCore import QTimer from PyQt5.QtCore import QTimer
@@ -10,9 +11,11 @@ class AudioPlayer(object):
method and set_audio_player, which loads the current file. Everything else method and set_audio_player, which loads the current file. Everything else
is managed internally. 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): def __init__(self, play, pause, stop, volume, audio_progress):
mixer.init() # mixer.init(frequency = self.__sample_rate)
self.__paused = False self.__paused = False
self.__play = play self.__play = play
self.__pause = pause self.__pause = pause
@@ -27,23 +30,26 @@ class AudioPlayer(object):
self.__stop.clicked.connect(self.__stop_audio) self.__stop.clicked.connect(self.__stop_audio)
self.__volume.valueChanged.connect(self.__set_volume) self.__volume.valueChanged.connect(self.__set_volume)
def __set_volume(self): def __set_volume(self):
mixer.music.set_volume(self.__volume.value() / self.__volume.maximum()) mixer.music.set_volume(self.__volume.value() / self.__volume.maximum())
def __reset_audio_widget(self): def __reset_audio_widget(self):
self.__audio_progress.reset() if mixer.get_init():
self.__volume.setValue(50)
self.__enable_buttons(False, False, False)
self.__paused = False
if mixer.music.get_busy(): if mixer.music.get_busy():
mixer.music.stop() mixer.music.stop()
self.__timer.stop() self.__timer.stop()
mixer.quit()
self.__audio_progress.reset()
self.__enable_buttons(False, False, False)
self.__paused = False
def __update_bar(self): def __update_bar(self):
pos = mixer.music.get_pos() pos = mixer.music.get_pos()
if pos == -1: if pos == -1:
self.__timer.stop() self.__timer.stop()
self.__audio_progress.reset() self.__audio_progress.reset()
self.__enable_buttons(True, False, False)
else: else:
self.__audio_progress.setValue(pos) self.__audio_progress.setValue(pos)
@@ -54,13 +60,14 @@ class AudioPlayer(object):
def set_audio_player(self, fname): def set_audio_player(self, fname):
self.__reset_audio_widget() 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): if os.path.exists(full_name):
mixer.init(frequency = AudioSegment.from_ogg(full_name).frame_rate)
self.__play.setEnabled(True) self.__play.setEnabled(True)
self.__audio_file = full_name self.__audio_file = full_name
self.__set_max_progress_bar() self.__set_max_progress_bar()
mixer.music.load(full_name) mixer.music.load(full_name)
mixer.music.set_volume(self.__volume.value()) self.__volume.setValue(50)
def __play_audio(self): def __play_audio(self):
if not self.__paused: if not self.__paused:
@@ -73,6 +80,7 @@ class AudioPlayer(object):
def __stop_audio(self): def __stop_audio(self):
mixer.music.stop() mixer.music.stop()
self.__audio_progress.reset()
self.__timer.stop() self.__timer.stop()
self.__enable_buttons(True, False, False) self.__enable_buttons(True, False, False)

31
main.py
View File

@@ -20,21 +20,22 @@ class MyApp(QMainWindow, Ui_MainWindow):
super().__init__() super().__init__()
self.setupUi(self) self.setupUi(self)
self.show() self.show()
self.db_version = None
self.load_db() self.load_db()
self.display_signals() self.display_signals()
self.search_bar.textChanged.connect(self.display_signals) self.search_bar.textChanged.connect(self.display_signals)
self.result_list.itemSelectionChanged.connect(self.display_specs) self.result_list.itemSelectionChanged.connect(self.display_specs)
self.play.setIcon(qta.icon('fa5.play-circle', self.play.setIcon(qta.icon('fa5.play-circle',
color = "#7a7a7a", color = "#999999",
color_active = '#1d5eff')) color_disabled = '#000000'))
self.play.setIconSize(self.play.size()) self.play.setIconSize(self.play.size())
self.pause.setIcon(qta.icon('fa5.pause-circle', self.pause.setIcon(qta.icon('fa5.pause-circle',
color = "#7a7a7a", color = "#999999",
color_active = '#1d5eff')) color_disabled = '#000000'))
self.pause.setIconSize(self.pause.size()) self.pause.setIconSize(self.pause.size())
self.stop.setIcon(qta.icon('fa5.stop-circle', self.stop.setIcon(qta.icon('fa5.stop-circle',
color = "#7a7a7a", color = "#999999",
color_active = '#1d5eff')) color_disabled = '#000000'))
self.stop.setIconSize(self.stop.size()) self.stop.setIconSize(self.stop.size())
self.audio_widget = AudioPlayer(self.play, self.audio_widget = AudioPlayer(self.play,
self.pause, self.pause,
@@ -62,6 +63,24 @@ class MyApp(QMainWindow, Ui_MainWindow):
else: else:
self.signal_names = db['signal_0'] 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): def display_signals(self):
self.result_list.clear() self.result_list.clear()
for signal in self.signal_names: for signal in self.signal_names:

View File

@@ -38,6 +38,76 @@ QProgressBar::chunk {
/*background-color: #1d5eff;*/ /*background-color: #1d5eff;*/
background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #1d5eff, stop:0.5 #4177ff, stop:1 #1d5eff); background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #1d5eff, stop:0.5 #4177ff, stop:1 #1d5eff);
border-radius: 3px; 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;*/
}</string> }</string>
</property> </property>
<widget class="QWidget" name="centralwidget"> <widget class="QWidget" name="centralwidget">
@@ -94,10 +164,11 @@ QProgressBar::chunk {
<string/> <string/>
</property> </property>
<property name="statusTip"> <property name="statusTip">
<string>Search a signal name.</string> <string/>
</property> </property>
<property name="styleSheet"> <property name="styleSheet">
<string notr="true">color: rgb(255, 255, 255); <string notr="true">background-color: #343434;
color: rgb(255, 255, 255);
border: 1px solid gray; border: 1px solid gray;
border-radius: 5px;</string> border-radius: 5px;</string>
</property> </property>
@@ -147,9 +218,10 @@ border-radius: 5px;</string>
</property> </property>
<property name="styleSheet"> <property name="styleSheet">
<string notr="true">QListWidget { <string notr="true">QListWidget {
background-color:rgb(52,52,52);
color: rgb(255, 255, 255); color: rgb(255, 255, 255);
border: 1px solid gray; border: 1px solid gray;
border-radius: 10px; border-radius: 8px;
} }
</string> </string>
</property> </property>
@@ -159,6 +231,12 @@ border-radius: 5px;</string>
<property name="horizontalScrollBarPolicy"> <property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAsNeeded</enum> <enum>Qt::ScrollBarAsNeeded</enum>
</property> </property>
<property name="autoScrollMargin">
<number>16</number>
</property>
<property name="showDropIndicator" stdset="0">
<bool>false</bool>
</property>
</widget> </widget>
</item> </item>
</layout> </layout>
@@ -421,6 +499,9 @@ QSlider::handle:horizontal {
<property name="maximum"> <property name="maximum">
<number>100</number> <number>100</number>
</property> </property>
<property name="singleStep">
<number>10</number>
</property>
<property name="value"> <property name="value">
<number>50</number> <number>50</number>
</property> </property>