pygame player different sample rates
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,3 +1,5 @@
|
|||||||
__pycache__
|
__pycache__
|
||||||
Data
|
Data
|
||||||
|
.ipynb_checkpoints
|
||||||
|
*.ipynb
|
||||||
wav_converter.py
|
wav_converter.py
|
||||||
|
|||||||
@@ -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):
|
||||||
|
if mixer.get_init():
|
||||||
|
if mixer.music.get_busy():
|
||||||
|
mixer.music.stop()
|
||||||
|
self.__timer.stop()
|
||||||
|
mixer.quit()
|
||||||
self.__audio_progress.reset()
|
self.__audio_progress.reset()
|
||||||
self.__volume.setValue(50)
|
|
||||||
self.__enable_buttons(False, False, False)
|
self.__enable_buttons(False, False, False)
|
||||||
self.__paused = False
|
self.__paused = False
|
||||||
if mixer.music.get_busy():
|
|
||||||
mixer.music.stop()
|
|
||||||
self.__timer.stop()
|
|
||||||
|
|
||||||
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)
|
||||||
|
|
||||||
|
|||||||
39
main.py
39
main.py
@@ -20,27 +20,28 @@ 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,
|
||||||
self.stop,
|
self.stop,
|
||||||
self.volume,
|
self.volume,
|
||||||
self.audio_progress)
|
self.audio_progress)
|
||||||
|
|
||||||
def load_db(self):
|
def load_db(self):
|
||||||
try:
|
try:
|
||||||
@@ -61,6 +62,24 @@ class MyApp(QMainWindow, Ui_MainWindow):
|
|||||||
box.show()
|
box.show()
|
||||||
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()
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user