Merge remote-tracking branch 'origin/audio_loop'

This commit is contained in:
Marco
2019-07-31 23:16:14 +02:00
3 changed files with 140 additions and 86 deletions

View File

@@ -19,8 +19,7 @@ from PyQt5.QtGui import QPixmap
from PyQt5 import uic from PyQt5 import uic
from PyQt5.QtCore import (QFileInfo, from PyQt5.QtCore import (QFileInfo,
Qt, Qt,
pyqtSlot, pyqtSlot,)
QRect,)
from audio_player import AudioPlayer from audio_player import AudioPlayer
from weatherdata import SpaceWeatherData, ForecastData from weatherdata import SpaceWeatherData, ForecastData
@@ -495,6 +494,7 @@ class Artemis(QMainWindow, Ui_MainWindow):
self.pause, self.pause,
self.stop, self.stop,
self.volume, self.volume,
self.loop,
self.audio_progress, self.audio_progress,
self.active_color, self.active_color,
self.inactive_color self.inactive_color

View File

@@ -9177,8 +9177,8 @@ STORM</string>
<property name="styleSheet"> <property name="styleSheet">
<string notr="true"/> <string notr="true"/>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QGridLayout" name="gridLayout_11">
<item> <item row="0" column="0">
<widget class="QWidget" name="audio_widget" native="true"> <widget class="QWidget" name="audio_widget" native="true">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed"> <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
@@ -9199,7 +9199,101 @@ QPushButton {
}</string> }</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_3"> <layout class="QGridLayout" name="gridLayout_3">
<item row="3" column="0" colspan="3"> <item row="0" column="0">
<widget class="QPushButton" name="play">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>45</width>
<height>45</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="checkable">
<bool>false</bool>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QPushButton" name="pause">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>45</width>
<height>45</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="checkable">
<bool>false</bool>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QPushButton" name="stop">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>45</width>
<height>45</height>
</size>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QPushButton" name="loop">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>45</width>
<height>45</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="0" colspan="4">
<widget class="QProgressBar" name="audio_progress"> <widget class="QProgressBar" name="audio_progress">
<property name="enabled"> <property name="enabled">
<bool>false</bool> <bool>false</bool>
@@ -9227,79 +9321,7 @@ QPushButton {
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="0"> <item row="1" column="0" colspan="4">
<widget class="QPushButton" name="play">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>70</width>
<height>70</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="checkable">
<bool>false</bool>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QPushButton" name="pause">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>70</width>
<height>70</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="checkable">
<bool>false</bool>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QPushButton" name="stop">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>70</width>
<height>70</height>
</size>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="2" column="0" colspan="3">
<layout class="QHBoxLayout" name="horizontalLayout"> <layout class="QHBoxLayout" name="horizontalLayout">
<item> <item>
<widget class="QLabel" name="volume_label"> <widget class="QLabel" name="volume_label">
@@ -9368,7 +9390,7 @@ QSlider::handle:horizontal {
</layout> </layout>
</widget> </widget>
</item> </item>
<item> <item row="1" column="0">
<widget class="QLabel" name="spectrogram"> <widget class="QLabel" name="spectrogram">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred"> <sizepolicy hsizetype="Preferred" vsizetype="Preferred">

View File

@@ -19,17 +19,21 @@ class AudioPlayer(QObject):
pause, pause,
stop, stop,
volume, volume,
loop,
audio_progress, audio_progress,
active_color, active_color,
inactive_color): inactive_color):
"""Initialize the player.""" """Initialize the player."""
super().__init__() super().__init__()
self._active_color = active_color
self._inactive_color = inactive_color
self._paused = False self._paused = False
self._first_call = True self._first_call = True
self._play = play self._play = play
self._pause = pause self._pause = pause
self._stop = stop self._stop = stop
self._volume = volume self._volume = volume
self._loop = loop
self._audio_progress = audio_progress self._audio_progress = audio_progress
self._audio_file = None self._audio_file = None
self._timer = QTimer() self._timer = QTimer()
@@ -38,22 +42,45 @@ class AudioPlayer(QObject):
self._pause.clicked.connect(self._pause_audio) self._pause.clicked.connect(self._pause_audio)
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)
self._loop.clicked.connect(self._set_loop_icon)
self._play.setIconSize(self._play.size()) self._play.setIconSize(self._play.size())
self._pause.setIconSize(self._pause.size()) self._pause.setIconSize(self._pause.size())
self._stop.setIconSize(self._stop.size()) self._stop.setIconSize(self._stop.size())
self._loop.setIconSize(self._loop.size())
self.refresh_btns_colors(active_color, inactive_color) self.refresh_btns_colors(active_color, inactive_color)
@pyqtSlot()
def _set_loop_icon(self):
"""Set the icon for the loop audio button."""
if self._loop.isChecked():
loop_icon = qta.icon(
'fa5s.redo-alt',
color=self._active_color,
color_disabled=self._inactive_color,
animation=qta.Spin(self._loop)
)
else:
loop_icon = qta.icon(
'fa5s.redo-alt',
color=self._active_color,
color_disabled=self._inactive_color
)
self._loop.setIcon(loop_icon)
def refresh_btns_colors(self, active_color, inactive_color): def refresh_btns_colors(self, active_color, inactive_color):
"""Repaint the buttons of the widgetd after the theme has changed.""" """Repaint the buttons of the widgetd after the theme has changed."""
self._play.setIcon(qta.icon('fa5.play-circle', self._active_color = active_color
self._inactive_color = inactive_color
self._play.setIcon(qta.icon('fa5s.play',
color=active_color, color=active_color,
color_disabled=inactive_color)) color_disabled=inactive_color))
self._pause.setIcon(qta.icon('fa5.pause-circle', self._pause.setIcon(qta.icon('fa5s.pause',
color=active_color, color=active_color,
color_disabled=inactive_color)) color_disabled=inactive_color))
self._stop.setIcon(qta.icon('fa5.stop-circle', self._stop.setIcon(qta.icon('fa5s.stop',
color=active_color, color=active_color,
color_disabled=inactive_color)) color_disabled=inactive_color))
self._set_loop_icon()
@pyqtSlot() @pyqtSlot()
def _set_volume(self): def _set_volume(self):
@@ -71,8 +98,7 @@ class AudioPlayer(QObject):
self._timer.stop() self._timer.stop()
mixer.quit() mixer.quit()
self._audio_progress.reset() self._audio_progress.reset()
self._enable_buttons(False, False, False) self._enable_buttons(False, False, False, False)
self._paused = False
@pyqtSlot() @pyqtSlot()
def _update_bar(self): def _update_bar(self):
@@ -81,6 +107,10 @@ class AudioPlayer(QObject):
if pos == -1: if pos == -1:
self._timer.stop() self._timer.stop()
self._audio_progress.reset() self._audio_progress.reset()
if self._loop.isChecked():
self._play_audio()
self._enable_buttons(False, True, True)
else:
self._enable_buttons(True, False, False) self._enable_buttons(True, False, False)
else: else:
self._audio_progress.setValue(pos) self._audio_progress.setValue(pos)
@@ -102,6 +132,7 @@ class AudioPlayer(QObject):
) )
if os.path.exists(full_name): if os.path.exists(full_name):
self._play.setEnabled(True) self._play.setEnabled(True)
self._loop.setEnabled(True)
self._audio_file = full_name self._audio_file = full_name
@pyqtSlot() @pyqtSlot()
@@ -137,8 +168,9 @@ class AudioPlayer(QObject):
self._paused = True self._paused = True
self._enable_buttons(True, False, False) self._enable_buttons(True, False, False)
def _enable_buttons(self, play_en, pause_en, stop_en): def _enable_buttons(self, play_en, pause_en, stop_en, loop_en=True):
"""Set the three buttons status.""" """Set the three buttons status."""
self._play.setEnabled(play_en) self._play.setEnabled(play_en)
self._pause.setEnabled(pause_en) self._pause.setEnabled(pause_en)
self._stop.setEnabled(stop_en) self._stop.setEnabled(stop_en)
self._loop.setEnabled(loop_en)