20240316175500

This commit is contained in:
zhaoyafan 2024-03-16 17:55:23 +08:00
parent 4c83e9e960
commit 9e9add9e4a
1 changed files with 31 additions and 29 deletions

60
main.py
View File

@ -1,5 +1,6 @@
import os import os
import sys import sys
import site
import time import time
import logging import logging
import pyaudio import pyaudio
@ -9,7 +10,7 @@ import threading
import subprocess import subprocess
from sounddevice import PortAudioError from sounddevice import PortAudioError
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QMessageBox, QPushButton, QHBoxLayout from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QMessageBox, QPushButton, QHBoxLayout
from PyQt5.QtCore import QTimer, Qt, QPoint, QLibraryInfo from PyQt5.QtCore import QTimer, Qt, QPoint, QCoreApplication
class LoggerFileHandler: class LoggerFileHandler:
@ -28,19 +29,19 @@ class LoggerConsHandler:
class Logger: class Logger:
logger = None logger = None
levels = { levels = {
"CRITICAL": logging.CRITICAL, 'CRITICAL': logging.CRITICAL,
"FATAL": logging.FATAL, 'FATAL': logging.FATAL,
"ERROR": logging.ERROR, 'ERROR': logging.ERROR,
"WARNING": logging.WARNING, 'WARNING': logging.WARNING,
"WARN": logging.WARN, 'WARN': logging.WARN,
"INFO": logging.INFO, 'INFO': logging.INFO,
"DEBUG": logging.DEBUG, 'DEBUG': logging.DEBUG,
"NOTSET": logging.NOTSET, 'NOTSET': logging.NOTSET,
"D": logging.DEBUG, 'D': logging.DEBUG,
"I": logging.INFO, 'I': logging.INFO,
"W": logging.WARNING, 'W': logging.WARNING,
"E": logging.ERROR, 'E': logging.ERROR,
"F": logging.FATAL 'F': logging.FATAL
} }
default_format = '{asctime} - {name} - {levelname[0]}: {message}' default_format = '{asctime} - {name} - {levelname[0]}: {message}'
default_format_style = '{' default_format_style = '{'
@ -187,7 +188,7 @@ def is_audio_device_connected(device_name):
for i in range(audio.get_device_count()): for i in range(audio.get_device_count()):
device_info = audio.get_device_info_by_index(i) device_info = audio.get_device_info_by_index(i)
if device_info.get('maxInputChannels') > 0 or device_info.get('maxOutputChannels') > 0: if device_info.get('maxInputChannels') > 0 or device_info.get('maxOutputChannels') > 0:
device_list.append(device_info["name"]) device_list.append(device_info['name'])
audio.terminate() audio.terminate()
for item in device_list: for item in device_list:
if device_name in item: if device_name in item:
@ -203,7 +204,7 @@ class MainWindow(QWidget):
sys.exit() sys.exit()
self.play_controlled = 0 self.play_controlled = 0
try: try:
self.audio_device_name = open(os.path.join(os.path.dirname(__file__), 'AudioDevice.ini'), "r", encoding="utf-8").read().strip() self.audio_device_name = open(os.path.join(os.path.dirname(__file__), 'AudioDevice.ini'), 'r', encoding='utf-8').read().strip()
except Exception as err: except Exception as err:
self.audio_device_name = '*' self.audio_device_name = '*'
QMessageBox.warning(self, '错误', '%s' % (str(err),)) QMessageBox.warning(self, '错误', '%s' % (str(err),))
@ -217,20 +218,20 @@ class MainWindow(QWidget):
self.setWindowTitle(self.title) self.setWindowTitle(self.title)
self.setGeometry(0, 0, 200, 100) self.setGeometry(0, 0, 200, 100)
self.status_label = QLabel('暂无节目播放', self) self.status_label = QLabel('暂无节目播放', self)
self.status_label.setStyleSheet("font-size: 20px; font-family: 'Microsoft YaHei'; color: #ffffff;") self.status_label.setStyleSheet('font-size: 20px; font-family: \'Microsoft YaHei\'; color: #ffffff;')
self.status_label.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) self.status_label.setAlignment(Qt.AlignLeft | Qt.AlignVCenter)
self.status_label.setFixedSize(200, 40) self.status_label.setFixedSize(200, 40)
self.bt_next_shortcut = "F5" self.bt_next_shortcut = 'F5'
self.bt_next = QPushButton('%s(%s)' % ('切换', self.bt_next_shortcut), self) self.bt_next = QPushButton('%s(%s)' % ('切换', self.bt_next_shortcut), self)
self.bt_next.setShortcut(self.bt_next_shortcut) self.bt_next.setShortcut(self.bt_next_shortcut)
self.bt_next.setStyleSheet("font-size: 14px; font-family: 'Microsoft YaHei'; color: #ffffff;") self.bt_next.setStyleSheet('font-size: 14px; font-family: \'Microsoft YaHei\'; color: #ffffff;')
self.bt_next.clicked.connect(self.button_next) self.bt_next.clicked.connect(self.button_next)
self.bt_stop_shortcut = "F6" self.bt_stop_shortcut = 'F6'
self.bt_stop = QPushButton('%s(%s)' % ('停止', self.bt_stop_shortcut), self) self.bt_stop = QPushButton('%s(%s)' % ('停止', self.bt_stop_shortcut), self)
self.bt_stop.setShortcut(self.bt_stop_shortcut) self.bt_stop.setShortcut(self.bt_stop_shortcut)
self.bt_stop.setStyleSheet("font-size: 14px; font-family: 'Microsoft YaHei'; color: #ffffff;") self.bt_stop.setStyleSheet('font-size: 14px; font-family: \'Microsoft YaHei\'; color: #ffffff;')
self.bt_stop.clicked.connect(self.button_stop) self.bt_stop.clicked.connect(self.button_stop)
layout = QHBoxLayout() layout = QHBoxLayout()
@ -260,13 +261,13 @@ class MainWindow(QWidget):
def check_device_status(self): def check_device_status(self):
if self.audio_device_name == '*' or is_audio_device_connected(self.audio_device_name): if self.audio_device_name == '*' or is_audio_device_connected(self.audio_device_name):
self.setStyleSheet('background-color: #61b64a;') self.setStyleSheet('background-color: #62AC3E;')
if (self.play_controlled == 0) == 1: if (self.play_controlled == 0) == 1:
self.play_controlled = 1 self.play_controlled = 1
# audio device connect # audio device connect
bat_thread = threading.Thread( bat_thread = threading.Thread(
target=subprocess.run, target=subprocess.run,
args=(os.path.join(os.path.dirname(__file__), "EventConnect.bat"),), args=(os.path.join(os.path.dirname(__file__), 'EventConnect.bat'),),
kwargs={'shell': True, 'stdout': subprocess.DEVNULL, 'stderr': subprocess.DEVNULL} kwargs={'shell': True, 'stdout': subprocess.DEVNULL, 'stderr': subprocess.DEVNULL}
) )
bat_thread.start() bat_thread.start()
@ -278,7 +279,7 @@ class MainWindow(QWidget):
# audio device disconn # audio device disconn
bat_thread = threading.Thread( bat_thread = threading.Thread(
target=subprocess.run, target=subprocess.run,
args=(os.path.join(os.path.dirname(__file__), "EventDisconn.bat"),), args=(os.path.join(os.path.dirname(__file__), 'EventDisconn.bat'),),
kwargs={'shell': True, 'stdout': subprocess.DEVNULL, 'stderr': subprocess.DEVNULL} kwargs={'shell': True, 'stdout': subprocess.DEVNULL, 'stderr': subprocess.DEVNULL}
) )
bat_thread.start() bat_thread.start()
@ -293,25 +294,25 @@ class MainWindow(QWidget):
player.stop() if player.play_status else player.play() player.stop() if player.play_status else player.play()
def event_play(self): def event_play(self):
self.status_label.setStyleSheet("font-size: 20px; font-family: 'Microsoft YaHei'; color: #ffffff;") self.status_label.setStyleSheet('font-size: 20px; font-family: \'Microsoft YaHei\'; color: #ffffff;')
self.title = '正在播放' self.title = '正在播放'
self.bt_stop.setText('%s(%s)' % ('停止', self.bt_stop_shortcut)) self.bt_stop.setText('%s(%s)' % ('停止', self.bt_stop_shortcut))
self.bt_stop.setShortcut(self.bt_stop_shortcut) self.bt_stop.setShortcut(self.bt_stop_shortcut)
bat_thread = threading.Thread( bat_thread = threading.Thread(
target=subprocess.run, target=subprocess.run,
args=(os.path.join(os.path.dirname(__file__), "EventPlay.bat"),), args=(os.path.join(os.path.dirname(__file__), 'EventPlay.bat'),),
kwargs={'shell': True, 'stdout': subprocess.DEVNULL, 'stderr': subprocess.DEVNULL} kwargs={'shell': True, 'stdout': subprocess.DEVNULL, 'stderr': subprocess.DEVNULL}
) )
bat_thread.start() bat_thread.start()
def event_stop(self): def event_stop(self):
self.status_label.setStyleSheet("font-size: 20px; font-family: 'Microsoft YaHei'; color: #dd0000;") self.status_label.setStyleSheet('font-size: 20px; font-family: \'Microsoft YaHei\'; color: #dd0000;')
self.title = '停止播放' self.title = '停止播放'
self.bt_stop.setText('%s(%s)' % ('播放', self.bt_stop_shortcut)) self.bt_stop.setText('%s(%s)' % ('播放', self.bt_stop_shortcut))
self.bt_stop.setShortcut(self.bt_stop_shortcut) self.bt_stop.setShortcut(self.bt_stop_shortcut)
bat_thread = threading.Thread( bat_thread = threading.Thread(
target=subprocess.run, target=subprocess.run,
args=(os.path.join(os.path.dirname(__file__), "EventStop.bat"),), args=(os.path.join(os.path.dirname(__file__), 'EventStop.bat'),),
kwargs={'shell': True, 'stdout': subprocess.DEVNULL, 'stderr': subprocess.DEVNULL} kwargs={'shell': True, 'stdout': subprocess.DEVNULL, 'stderr': subprocess.DEVNULL}
) )
bat_thread.start() bat_thread.start()
@ -322,7 +323,8 @@ class MainWindow(QWidget):
if __name__ == '__main__': if __name__ == '__main__':
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = QLibraryInfo.location(QLibraryInfo.PluginsPath) for i in site.getsitepackages():
i.endswith('site-packages') and QCoreApplication.addLibraryPath(os.path.abspath(os.path.join(i, 'PyQt5/Qt5/plugins')))
app = QApplication(sys.argv) app = QApplication(sys.argv)
window_main = MainWindow() window_main = MainWindow()
player.callback_play = window_main.event_play player.callback_play = window_main.event_play