QMediaPlayer version. Not working

This commit is contained in:
alessandro90
2018-09-26 14:36:11 +02:00
parent c5488ef7ad
commit cf4b749cd9
4 changed files with 326 additions and 100 deletions

68
audio_player.py Normal file
View File

@@ -0,0 +1,68 @@
import os
import sys
from PyQt5.QtCore import QUrl, QFileInfo
from PyQt5.QtMultimedia import QMediaContent, QMediaPlayer
class AudioPlayer(object):
def __init__(self, play, pause, stop, volume, audio_progress):
self.play = play
self.pause = pause
self.stop = stop
self.volume = volume
self.audio_progress = audio_progress
self.audio_file = None
self.player = QMediaPlayer()
self.player.setVolume(51)
self.player.durationChanged.connect(self.set_max_progress_bar)
self.player.positionChanged.connect(self.set_progress_bar)
self.play.clicked.connect(self.audio)
self.pause.clicked.connect(self.pause_audio)
self.stop.clicked.connect(self.stop_audio)
self.player.stateChanged.connect(self.reset_audio_widget)
self.volume.valueChanged.connect(self.set_volume)
def set_volume(self):
self.player.setVolume(self.volume.value())
def reset_audio_widget(self):
if self.player.state() == QMediaPlayer.StoppedState:
self.audio_progress.setValue(0)
self.volume.setValue(51)
self.pause.setEnabled(False)
self.stop.setEnabled(False)
def set_max_progress_bar(self):
print(self.player.duration())
self.audio_progress.setMaximum(self.player.duration())
def set_progress_bar(self):
print(self.player.position())
self.audio_progress.setValue(self.player.position())
def set_media_player(self):
self.player.setMedia(QMediaContent(self.audio_file))
def set_audio_player(self, fname):
self.reset_audio_widget()
self.play.setEnabled(False)
full_name = os.path.join('Data', 'Audio', fname + '.mp3')
if QFileInfo(full_name).exists():
print('exists')
self.play.setEnabled(True)
self.audio_file = QUrl.fromLocalFile(full_name)
self.set_media_player()
else:
print('not exists')
def audio(self):
self.player.play()
self.stop.setEnabled(True)
self.pause.setEnabled(True)
def stop_audio(self):
self.player.stop()
def pause_audio(self):
self.player.pause()

BIN
icons_imgs/volume.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

28
main.py
View File

@@ -6,7 +6,10 @@ from PyQt5.QtWidgets import (QMainWindow,
QMessageBox,) QMessageBox,)
from PyQt5.QtGui import QPixmap from PyQt5.QtGui import QPixmap
from PyQt5 import uic from PyQt5 import uic
from PyQt5.QtCore import QFileInfo from PyQt5.QtCore import QFileInfo, QSize
import qtawesome as qta
from audio_player import AudioPlayer
qt_creator_file = "main_window.ui" qt_creator_file = "main_window.ui"
@@ -20,7 +23,24 @@ class MyApp(QMainWindow, Ui_MainWindow):
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_spectrogram) self.result_list.itemSelectionChanged.connect(self.display_specs)
self.play.setIcon(qta.icon('fa5.play-circle',
color = "#7a7a7a",
color_active = '#1d5eff'))
self.play.setIconSize(self.play.size())
self.pause.setIcon(qta.icon('fa5.pause-circle',
color = "#7a7a7a",
color_active = '#1d5eff'))
self.pause.setIconSize(self.pause.size())
self.stop.setIcon(qta.icon('fa5.stop-circle',
color = "#7a7a7a",
color_active = '#1d5eff'))
self.stop.setIconSize(self.stop.size())
self.audio_widget = AudioPlayer(self.play,
self.pause,
self.stop,
self.volume,
self.audio_progress)
def load_db(self): def load_db(self):
try: try:
@@ -48,6 +68,10 @@ class MyApp(QMainWindow, Ui_MainWindow):
if self.search_bar.text().lower() in signal.lower(): if self.search_bar.text().lower() in signal.lower():
self.result_list.addItem(signal) self.result_list.addItem(signal)
def display_specs(self):
self.display_spectrogram()
self.audio_widget.set_audio_player(self.result_list.currentItem().text())
def display_spectrogram(self): def display_spectrogram(self):
spectrogram_name = self.result_list.currentItem().text() spectrogram_name = self.result_list.currentItem().text()
path_spectr = os.path.join("Data", "Spectra", spectrogram_name + ".jpg") path_spectr = os.path.join("Data", "Spectra", spectrogram_name + ".jpg")

View File

@@ -10,6 +10,12 @@
<height>800</height> <height>800</height>
</rect> </rect>
</property> </property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle"> <property name="windowTitle">
<string>MainWindow</string> <string>MainWindow</string>
</property> </property>
@@ -23,18 +29,16 @@ QPushButton {
} }
QProgressBar { QProgressBar {
/*border: 2px solid grey;*/ border: 2px #7a7a7a;
border-radius: 8px; border-radius: 3px;
background-color: #7a7a7a background-color: #7a7a7a;
} }
QProgressBar::chunk { QProgressBar::chunk {
background-color: #1d5eff; /*background-color: #1d5eff;*/
width: 20px; background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #1d5eff, stop:0.5 #4177ff, stop:1 #1d5eff);
border-radius: 7px border-radius: 3px;
} }</string>
</string>
</property> </property>
<widget class="QWidget" name="centralwidget"> <widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout_2"> <layout class="QGridLayout" name="gridLayout_2">
@@ -186,11 +190,7 @@ QTabWidget::tab-bar {
/* Style the tab using the tab sub-control. Note that /* Style the tab using the tab sub-control. Note that
it reads QTabBar _not_ QTabWidget */ it reads QTabBar _not_ QTabWidget */
QTabBar::tab { QTabBar::tab {
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, background: #7a7a7a;
stop: 0 #7a7a7a, stop: 1.0 #7a7a7a);
/*background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #E1E1E1, stop: 0.4 #DDDDDD,
stop: 0.5 #D8D8D8, stop: 1.0 #D3D3D3);*/
border-top-left-radius: 8px; border-top-left-radius: 8px;
border-top-right-radius: 8px; border-top-right-radius: 8px;
min-width: 16ex; min-width: 16ex;
@@ -199,11 +199,7 @@ QTabBar::tab {
} }
QTabBar::tab:selected { QTabBar::tab:selected {
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, background: #999999;
stop: 0 #999999, stop: 1.0 #999999);
/* background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #fafafa, stop: 0.4 #f4f4f4,
stop: 0.5 #e7e7e7, stop: 1.0 #fafafa);*/
color: #1d5eff color: #1d5eff
} }
@@ -240,89 +236,227 @@ QTabBar::tab:!selected {
<attribute name="title"> <attribute name="title">
<string>Main</string> <string>Main</string>
</attribute> </attribute>
<widget class="QLabel" name="spectrogram"> <widget class="QWidget" name="layoutWidget">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>480</x> <x>270</x>
<y>280</y> <y>110</y>
<width>221</width> <width>161</width>
<height>421</height> <height>491</height>
</rect> </rect>
</property> </property>
<property name="text"> <layout class="QVBoxLayout" name="verticalLayout">
<string/> <item>
</property> <widget class="QWidget" name="audio_widget" native="true">
<property name="scaledContents"> <property name="sizePolicy">
<bool>true</bool> <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
</property> <horstretch>0</horstretch>
</widget> <verstretch>0</verstretch>
<widget class="QWidget" name="widget_2" native="true"> </sizepolicy>
<property name="geometry"> </property>
<rect> <property name="styleSheet">
<x>50</x> <string notr="true">QPushButton {
<y>120</y> /*background-color: #1d5eff;*/
<width>371</width> border: 1px solid gray;
<height>381</height> border-color: #1d5eff;
</rect> border-radius: 20px;
</property> }
<widget class="QPushButton" name="pushButton"> /*
<property name="geometry"> QPushButton:disabled {
<rect> background-color: #7a7a7a;
<x>40</x> }
<y>40</y> */</string>
<width>75</width> </property>
<height>23</height> <layout class="QGridLayout" name="gridLayout_3">
</rect> <item row="3" column="0" colspan="3">
</property> <widget class="QProgressBar" name="audio_progress">
<property name="text"> <property name="enabled">
<string>PushButton</string> <bool>false</bool>
</property> </property>
</widget> <property name="sizePolicy">
<widget class="QPushButton" name="pushButton_2"> <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<property name="geometry"> <horstretch>0</horstretch>
<rect> <verstretch>0</verstretch>
<x>140</x> </sizepolicy>
<y>40</y> </property>
<width>75</width> <property name="maximumSize">
<height>23</height> <size>
</rect> <width>16777215</width>
</property> <height>10</height>
<property name="text"> </size>
<string>PushButton</string> </property>
</property> <property name="styleSheet">
</widget> <string notr="true"/>
<widget class="QPushButton" name="pushButton_3"> </property>
<property name="geometry"> <property name="value">
<rect> <number>75</number>
<x>240</x> </property>
<y>40</y> <property name="textVisible">
<width>75</width> <bool>false</bool>
<height>23</height> </property>
</rect> </widget>
</property> </item>
<property name="text"> <item row="0" column="0">
<string>PushButton</string> <widget class="QPushButton" name="play">
</property> <property name="enabled">
</widget> <bool>false</bool>
<widget class="QProgressBar" name="progressBar"> </property>
<property name="geometry"> <property name="sizePolicy">
<rect> <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<x>110</x> <horstretch>0</horstretch>
<y>90</y> <verstretch>0</verstretch>
<width>118</width> </sizepolicy>
<height>23</height> </property>
</rect> <property name="minimumSize">
</property> <size>
<property name="styleSheet"> <width>41</width>
<string notr="true"/> <height>41</height>
</property> </size>
<property name="value"> </property>
<number>15</number> <property name="text">
</property> <string/>
<property name="textVisible"> </property>
<bool>false</bool> <property name="checkable">
</property> <bool>false</bool>
</widget> </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>41</width>
<height>41</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>41</width>
<height>41</height>
</size>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="2" column="0" colspan="3">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap>icons_imgs/volume.png</pixmap>
</property>
<property name="scaledContents">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QSlider" name="volume">
<property name="styleSheet">
<string notr="true">QSlider::groove:horizontal {
/*border: 1px solid #999999;*/
height: 6px; /* the groove expands to the size of the slider by default. by giving it a height, it has a fixed size */
background: #7a7a7a;
margin: 0 5px;
border-radius: 3px
}
QSlider::handle:horizontal {
background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 gray, stop:0.5 white, stop:1.0 gray);
border: 1px solid #5c5c5c;
width: 15px;
margin: -5px -5px; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */
border-radius: 8px;
}
</string>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>51</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QLabel" name="spectrogram">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>153</width>
<height>100</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="scaledContents">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget> </widget>
</widget> </widget>
<widget class="QWidget" name="tab_2"> <widget class="QWidget" name="tab_2">