From e900665150ab4238358a41776cd5ac1bc71575f7 Mon Sep 17 00:00:00 2001 From: Ninnjah <45268461+Ninnjah@users.noreply.github.com> Date: Sat, 17 Oct 2020 23:51:55 +0300 Subject: [PATCH] Release update release --- main.py | 148 +++++++++++++++++++++++++++++----------- ui_overlay.py | 41 +++++++++++ ui_sundpood.py | 181 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 331 insertions(+), 39 deletions(-) create mode 100644 ui_overlay.py create mode 100644 ui_sundpood.py diff --git a/main.py b/main.py index dca1712..70492d9 100644 --- a/main.py +++ b/main.py @@ -5,8 +5,29 @@ import threading import keyboard import soundfile as sf import sounddevice as sd -from PyQt5 import QtWidgets, uic, QtGui, QtCore +from PyQt5 import QtWidgets, QtGui, QtCore +import ui_sundpood +import ui_overlay +class OverlayUi(QtWidgets.QMainWindow, ui_overlay.Ui_MainWindow): + def __init__(self, parent=None): + super().__init__(parent) + self.setupUi(self) + + def keyPressEvent(self, e): + if e.key() == QtCore.Qt.Key_F1: + self.hide() + win.show() + +class MainUi(QtWidgets.QMainWindow, ui_sundpood.Ui_MainWindow): + def __init__(self, parent=None): + super().__init__(parent) + self.setupUi(self) + + def keyPressEvent(self, e): + if e.key() == QtCore.Qt.Key_F1: + self.hide() + over.show() ###! JSON !### def jsonread(file): ## Чтение JSON @@ -28,55 +49,87 @@ def found_device(list_): # Поиск микшера VoiceMee index += 1 return index -def sound_get(filename, mode): # Сбор файлов - if os.path.exists(filename) and mode == False: - sounds_list = jsonread(filename) - elif not os.path.exists(filename) or mode == True: +def sound_get(mode): # Сбор файлов + MUSIC = ['Music'] + MEME = ['Meme'] + OTHER = ['Other'] + CATS = [MUSIC, MEME, OTHER] + + if os.path.exists('settings.json') and mode == False: + sounds_list = jsonread('settings.json') + + elif not os.path.exists('settings.json') or mode == True: + msg = QtWidgets.QMessageBox() + msg.setIcon(QtWidgets.QMessageBox.Critical) + msg.setText("You don't have any sounds in 'sound' folder") + msg.setInformativeText('download sound in .wav / .mp3 / .m4a format') + msg.setWindowTitle('Error') + if os.path.exists('sound'): sounds = os.listdir('sound') + if len(sounds) == 0: - msg = QtWidgets.QMessageBox() - msg.setIcon(QtWidgets.QMessageBox.Critical) - msg.setText("You don't have any sounds in 'sound' folder") - msg.setInformativeText('download sound in .wav format') - msg.setWindowTitle('Error') msg.exec_() exit() + + for i in os.listdir('sound'): # Коонвертируем файлы в .wav + name = i + format_ = '' + while i[-1] != '.': + format_ += i[-1] + i = i[:-1] + format_ = format_[::-1] + if format_ in ['mp3', 'm4a']: + os.system(f'ffmpeg.exe -i "sound\\{name}" "sound\\{i}wav"') + os.remove(f'sound\\{name}') + + sounds = os.listdir('sound') + for i in sounds: # Ищем ключевые слова в названиях песен + tag = '' + for x in i: + if x not in [' ', '.', '-', '_']: + tag += x + else: + break + if tag.lower() == 'music': + MUSIC.append(i) + elif tag.lower() == 'meme': + MEME.append(i) + else: + OTHER.append(i) + + menu = [] + for i in CATS: + menu.append(i) + if os.path.exists('settings.json'): - hotkeys = jsonread(filename)[1] - sounds_list = [sounds, hotkeys] + hotkeys = jsonread('settings.json')[1] + sounds_list = [sounds, hotkeys, menu] else: - sounds_list = [sounds, ['', '', '', '', '', '', '', '', '', '', '', '']] + sounds_list = [sounds, ['', '', '', '', '', '', '', '', '', '', '', ''], menu] for i in COMBOS: i.addItems(sounds) - jsonwrite(filename, sounds_list) + jsonwrite('settings.json', sounds_list) else: - os.mkdir('sound') - msg = QtWidgets.QMessageBox() - msg.setIcon(QtWidgets.QMessageBox.Critical) - msg.setText("You don't have any sounds in 'sound' folder") - msg.setInformativeText('download sound in .wav format') - msg.setWindowTitle('Error') msg.exec_() exit() return sounds_list def save(): # Сохранение списка хоткеев hotkeys = [] - sounds = sound_get('settings.json', False) + sounds = sound_get(False) for i in COMBOS: hotkeys.append(i.currentText()) jsonwrite('settings.json', [sounds, hotkeys]) sounds = None hotkeys = None -#def sounds_explore(): # Оверлей -# print('showing everlay') -# overlay.show() - def play_sound(index): # Проигрываение звука - filename = COMBOS[index].currentText() + try: + filename = COMBOS[index].currentText() + except: + filename = index try: data, fs = sf.read(os.path.join('sound', filename), dtype='float32') sd.play(data, fs) @@ -85,9 +138,24 @@ def play_sound(index): # Проигрываение зву except: pass -###! CONTROL !### +###! CONTROL !### def key(arg): # Хоткеи + + select = [0, 0] + + def select_move(mode): + select[1] += mode[1] + select[0] += mode[0] + if select[0] > len(menu)-1 or select[0] < -len(menu)+1: + select[0] = 0 + if select[1] > len(menu[select[0]])-1 or select[1] < -len(menu[select[0]])+1: + select[1] = 0 + if mode[0] > 0: + select[1] = 0 + over.label.setText(menu[select[0]][select[1]]) + win.select_label.setText(menu[select[0]][select[1]]) + keyboard.add_hotkey('f1', play_sound, args=[0]) keyboard.add_hotkey('f2', play_sound, args=[1]) keyboard.add_hotkey('f3', play_sound, args=[2]) @@ -100,15 +168,15 @@ def key(arg): # Хоткеи keyboard.add_hotkey('f10', play_sound, args=[9]) keyboard.add_hotkey('f11', play_sound, args=[10]) keyboard.add_hotkey('f12', play_sound, args=[11]) + keyboard.add_hotkey(72, select_move, args=[[0, -1]]) + keyboard.add_hotkey(80, select_move, args=[[0, 1]]) + keyboard.add_hotkey(77, select_move, args=[[1, 0]]) + keyboard.add_hotkey(75, select_move, args=[[-1, 0]]) + keyboard.add_hotkey(76, play_sound, args=[menu[select[0]][select[1]]]) keyboard.add_hotkey(73, sd.stop) - #keyboard.add_hotkey('shift+f2', sounds_explore) - keyboard.wait() - main() def main(): # Интерфейс - win.start_button.setText('Save') - win.show() - sounds = sound_get('settings.json', True)[1] + sounds = sound_get(True)[1] combo = 0 for i in sounds: @@ -119,19 +187,19 @@ def main(): # Интерфейс x = threading.Thread(target=key, args=(1,)) x.setDaemon(True) x.start() - win.start_button.clicked.connect(save) - + win.save_button.clicked.connect(save) if __name__ == '__main__': - # Поиск устроства ввода + ### Поиск устроства ввода ### list_ = list(sd.query_devices()) index = found_device(list_) sd.default.device = list_[index]['name'] + ### Создание окна ### app = QtWidgets.QApplication([]) - win = uic.loadUi("sundpood.ui") - #overlay = uic.loadUi("overlay.ui") - #overlay.setWindowFlags(QtCore.Qt.ToolTip) + over = OverlayUi() + win = MainUi() + win.show() COMBOS = [ win.combo0, @@ -148,5 +216,7 @@ if __name__ == '__main__': win.combo11, ] + menu = sound_get(True)[2] + main() sys.exit(app.exec()) diff --git a/ui_overlay.py b/ui_overlay.py new file mode 100644 index 0000000..36570fb --- /dev/null +++ b/ui_overlay.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'overlay.ui' +# +# Created by: PyQt5 UI code generator 5.15.0 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + MainWindow.setObjectName("MainWindow") + MainWindow.resize(250, 20) + MainWindow.setMinimumSize(QtCore.QSize(250, 20)) + MainWindow.setMaximumSize(QtCore.QSize(250, 20)) + MainWindow.setGeometry(QtCore.QRect(0, 0, 250, 20)) + MainWindow.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint) + icon = QtGui.QIcon.fromTheme("icon.ico") + MainWindow.setWindowIcon(icon) + MainWindow.setWindowOpacity(0.5) + MainWindow.setToolTipDuration(5) + MainWindow.setStyleSheet("background-color: black;\n" +"color: white;") + self.centralwidget = QtWidgets.QWidget(MainWindow) + self.centralwidget.setObjectName("centralwidget") + self.label = QtWidgets.QLabel(self.centralwidget) + self.label.setGeometry(QtCore.QRect(0, 0, 251, 21)) + self.label.setText("") + self.label.setObjectName("label") + MainWindow.setCentralWidget(self.centralwidget) + + self.retranslateUi(MainWindow) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate(" ", " ")) diff --git a/ui_sundpood.py b/ui_sundpood.py new file mode 100644 index 0000000..44b2a74 --- /dev/null +++ b/ui_sundpood.py @@ -0,0 +1,181 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'sundpood.ui' +# +# Created by: PyQt5 UI code generator 5.15.0 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + MainWindow.setObjectName("MainWindow") + MainWindow.resize(420, 450) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth()) + MainWindow.setSizePolicy(sizePolicy) + MainWindow.setMinimumSize(QtCore.QSize(420, 450)) + MainWindow.setMaximumSize(QtCore.QSize(420, 450)) + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap("icon.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + MainWindow.setWindowIcon(icon) + self.centralwidget = QtWidgets.QWidget(MainWindow) + self.centralwidget.setEnabled(True) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.centralwidget.sizePolicy().hasHeightForWidth()) + self.centralwidget.setSizePolicy(sizePolicy) + self.centralwidget.setMinimumSize(QtCore.QSize(420, 450)) + self.centralwidget.setMaximumSize(QtCore.QSize(420, 450)) + self.centralwidget.setObjectName("centralwidget") + self.save_button = QtWidgets.QPushButton(self.centralwidget) + self.save_button.setGeometry(QtCore.QRect(10, 360, 401, 71)) + font = QtGui.QFont() + font.setFamily("Consolas") + font.setPointSize(28) + self.save_button.setFont(font) + self.save_button.setObjectName("save_button") + self.verticalLayoutWidget = QtWidgets.QWidget(self.centralwidget) + self.verticalLayoutWidget.setGeometry(QtCore.QRect(110, 10, 301, 308)) + self.verticalLayoutWidget.setObjectName("verticalLayoutWidget") + self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget) + self.verticalLayout.setContentsMargins(0, 0, 0, 0) + self.verticalLayout.setObjectName("verticalLayout") + self.combo0 = QtWidgets.QComboBox(self.verticalLayoutWidget) + self.combo0.setObjectName("combo0") + self.verticalLayout.addWidget(self.combo0) + self.combo1 = QtWidgets.QComboBox(self.verticalLayoutWidget) + self.combo1.setObjectName("combo1") + self.verticalLayout.addWidget(self.combo1) + self.combo2 = QtWidgets.QComboBox(self.verticalLayoutWidget) + self.combo2.setObjectName("combo2") + self.verticalLayout.addWidget(self.combo2) + self.combo3 = QtWidgets.QComboBox(self.verticalLayoutWidget) + self.combo3.setObjectName("combo3") + self.verticalLayout.addWidget(self.combo3) + self.combo4 = QtWidgets.QComboBox(self.verticalLayoutWidget) + self.combo4.setObjectName("combo4") + self.verticalLayout.addWidget(self.combo4) + self.combo5 = QtWidgets.QComboBox(self.verticalLayoutWidget) + self.combo5.setObjectName("combo5") + self.verticalLayout.addWidget(self.combo5) + self.combo6 = QtWidgets.QComboBox(self.verticalLayoutWidget) + self.combo6.setObjectName("combo6") + self.verticalLayout.addWidget(self.combo6) + self.combo7 = QtWidgets.QComboBox(self.verticalLayoutWidget) + self.combo7.setObjectName("combo7") + self.verticalLayout.addWidget(self.combo7) + self.combo8 = QtWidgets.QComboBox(self.verticalLayoutWidget) + self.combo8.setObjectName("combo8") + self.verticalLayout.addWidget(self.combo8) + self.combo9 = QtWidgets.QComboBox(self.verticalLayoutWidget) + self.combo9.setObjectName("combo9") + self.verticalLayout.addWidget(self.combo9) + self.combo10 = QtWidgets.QComboBox(self.verticalLayoutWidget) + self.combo10.setObjectName("combo10") + self.verticalLayout.addWidget(self.combo10) + self.combo11 = QtWidgets.QComboBox(self.verticalLayoutWidget) + self.combo11.setObjectName("combo11") + self.verticalLayout.addWidget(self.combo11) + self.verticalLayoutWidget_2 = QtWidgets.QWidget(self.centralwidget) + self.verticalLayoutWidget_2.setGeometry(QtCore.QRect(10, 10, 91, 308)) + self.verticalLayoutWidget_2.setObjectName("verticalLayoutWidget_2") + self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_2) + self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_2.setObjectName("verticalLayout_2") + self.label = QtWidgets.QLabel(self.verticalLayoutWidget_2) + self.label.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.label.setObjectName("label") + self.verticalLayout_2.addWidget(self.label) + self.label_2 = QtWidgets.QLabel(self.verticalLayoutWidget_2) + self.label_2.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.label_2.setObjectName("label_2") + self.verticalLayout_2.addWidget(self.label_2) + self.label_3 = QtWidgets.QLabel(self.verticalLayoutWidget_2) + self.label_3.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.label_3.setObjectName("label_3") + self.verticalLayout_2.addWidget(self.label_3) + self.label_4 = QtWidgets.QLabel(self.verticalLayoutWidget_2) + self.label_4.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.label_4.setObjectName("label_4") + self.verticalLayout_2.addWidget(self.label_4) + self.label_5 = QtWidgets.QLabel(self.verticalLayoutWidget_2) + self.label_5.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.label_5.setObjectName("label_5") + self.verticalLayout_2.addWidget(self.label_5) + self.label_6 = QtWidgets.QLabel(self.verticalLayoutWidget_2) + self.label_6.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.label_6.setObjectName("label_6") + self.verticalLayout_2.addWidget(self.label_6) + self.label_7 = QtWidgets.QLabel(self.verticalLayoutWidget_2) + self.label_7.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.label_7.setObjectName("label_7") + self.verticalLayout_2.addWidget(self.label_7) + self.label_8 = QtWidgets.QLabel(self.verticalLayoutWidget_2) + self.label_8.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.label_8.setObjectName("label_8") + self.verticalLayout_2.addWidget(self.label_8) + self.label_9 = QtWidgets.QLabel(self.verticalLayoutWidget_2) + self.label_9.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.label_9.setObjectName("label_9") + self.verticalLayout_2.addWidget(self.label_9) + self.label_10 = QtWidgets.QLabel(self.verticalLayoutWidget_2) + self.label_10.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.label_10.setObjectName("label_10") + self.verticalLayout_2.addWidget(self.label_10) + self.label_11 = QtWidgets.QLabel(self.verticalLayoutWidget_2) + self.label_11.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.label_11.setObjectName("label_11") + self.verticalLayout_2.addWidget(self.label_11) + self.label_12 = QtWidgets.QLabel(self.verticalLayoutWidget_2) + self.label_12.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.label_12.setObjectName("label_12") + self.verticalLayout_2.addWidget(self.label_12) + self.select_label = QtWidgets.QLabel(self.centralwidget) + self.select_label.setGeometry(QtCore.QRect(10, 320, 401, 41)) + self.select_label.setLayoutDirection(QtCore.Qt.LeftToRight) + self.select_label.setStyleSheet("background-color: black;") + self.select_label.setText("") + self.select_label.setAlignment(QtCore.Qt.AlignCenter) + self.select_label.setObjectName("select_label") + self.info_label = QtWidgets.QLabel(self.centralwidget) + self.info_label.setGeometry(QtCore.QRect(10, 430, 401, 20)) + font = QtGui.QFont() + font.setFamily("Consolas") + self.info_label.setFont(font) + self.info_label.setLayoutDirection(QtCore.Qt.LeftToRight) + self.info_label.setStyleSheet("color: #505050;") + self.info_label.setMidLineWidth(0) + self.info_label.setObjectName("info_label") + MainWindow.setCentralWidget(self.centralwidget) + self.statusbar = QtWidgets.QStatusBar(MainWindow) + self.statusbar.setObjectName("statusbar") + MainWindow.setStatusBar(self.statusbar) + + self.retranslateUi(MainWindow) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "SundPood")) + self.save_button.setText(_translate("MainWindow", "Save")) + self.label.setText(_translate("MainWindow", "F1")) + self.label_2.setText(_translate("MainWindow", "F2")) + self.label_3.setText(_translate("MainWindow", "F3")) + self.label_4.setText(_translate("MainWindow", "F4")) + self.label_5.setText(_translate("MainWindow", "F5")) + self.label_6.setText(_translate("MainWindow", "F6")) + self.label_7.setText(_translate("MainWindow", "F7")) + self.label_8.setText(_translate("MainWindow", "F8")) + self.label_9.setText(_translate("MainWindow", "F9")) + self.label_10.setText(_translate("MainWindow", "F10")) + self.label_11.setText(_translate("MainWindow", "F11")) + self.label_12.setText(_translate("MainWindow", "F12")) + self.info_label.setText(_translate("MainWindow", "Press F1 to open overlay"))