Add files via upload
This commit is contained in:
commit
81130ac087
2 changed files with 408 additions and 0 deletions
145
main.py
Normal file
145
main.py
Normal file
|
@ -0,0 +1,145 @@
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import json
|
||||||
|
import threading
|
||||||
|
import keyboard
|
||||||
|
import soundfile as sf
|
||||||
|
import sounddevice as sd
|
||||||
|
from PyQt5 import QtWidgets, uic, QtGui, QtCore
|
||||||
|
|
||||||
|
|
||||||
|
###! JSON !###
|
||||||
|
def jsonread(file): ## Чтение JSON
|
||||||
|
with open(file, "r", encoding='utf-8') as read_file:
|
||||||
|
data = json.load(read_file)
|
||||||
|
return data
|
||||||
|
|
||||||
|
def jsonwrite(file, data): ## Запись JSON
|
||||||
|
with open(file, 'w', encoding='utf-8') as write_file:
|
||||||
|
write_file.write(json.dumps(data))
|
||||||
|
|
||||||
|
|
||||||
|
###! FUNCTIONS !###
|
||||||
|
def found_device(list_): # Поиск микшера VoiceMeeter
|
||||||
|
index = 0
|
||||||
|
for i in list_:
|
||||||
|
if 'VoiceMeeter Input' in i['name']:
|
||||||
|
break
|
||||||
|
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:
|
||||||
|
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()
|
||||||
|
if os.path.exists('settings.json'):
|
||||||
|
hotkeys = jsonread(filename)[1]
|
||||||
|
sounds_list = [sounds, hotkeys]
|
||||||
|
else:
|
||||||
|
sounds_list = [sounds, ['', '', '', '', '', '', '', '', '', '', '', '']]
|
||||||
|
|
||||||
|
for i in COMBOS:
|
||||||
|
i.addItems(sounds)
|
||||||
|
jsonwrite(filename, 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 play_sound(index): # Проигрываение звука
|
||||||
|
#filename = sound_get('settings.json', False)[1][index]
|
||||||
|
filename = COMBOS[index].currentText()
|
||||||
|
try:
|
||||||
|
data, fs = sf.read(os.path.join('sound', filename), dtype='float32')
|
||||||
|
sd.play(data, fs)
|
||||||
|
sd.wait()
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def start():
|
||||||
|
hotkeys = []
|
||||||
|
sounds = sound_get('settings.json', False)
|
||||||
|
for i in COMBOS:
|
||||||
|
hotkeys.append(i.currentText())
|
||||||
|
jsonwrite('settings.json', [sounds, hotkeys])
|
||||||
|
sounds = None
|
||||||
|
hotkeys = None
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
###! CONTROL !###
|
||||||
|
def key(arg): # Хоткеи
|
||||||
|
keyboard.add_hotkey('f1', play_sound, args=[0])
|
||||||
|
keyboard.add_hotkey('f2', play_sound, args=[1])
|
||||||
|
keyboard.add_hotkey('f3', play_sound, args=[2])
|
||||||
|
keyboard.add_hotkey('f4', play_sound, args=[3])
|
||||||
|
keyboard.add_hotkey('f5', play_sound, args=[4])
|
||||||
|
keyboard.add_hotkey('f6', play_sound, args=[5])
|
||||||
|
keyboard.add_hotkey('f7', play_sound, args=[6])
|
||||||
|
keyboard.add_hotkey('f8', play_sound, args=[7])
|
||||||
|
keyboard.add_hotkey('f9', play_sound, args=[8])
|
||||||
|
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.wait(hotkey='alt+x')
|
||||||
|
main()
|
||||||
|
|
||||||
|
def main(): # Интерфейс
|
||||||
|
win.show()
|
||||||
|
win.start_button.setText('Save')
|
||||||
|
sounds = sound_get('settings.json', True)[1]
|
||||||
|
|
||||||
|
combo = 0
|
||||||
|
for i in sounds:
|
||||||
|
index = COMBOS[combo].findText(i)
|
||||||
|
COMBOS[combo].setCurrentIndex(index)
|
||||||
|
combo += 1
|
||||||
|
|
||||||
|
x = threading.Thread(target=key, args=(1,))
|
||||||
|
x.setDaemon(True)
|
||||||
|
x.start()
|
||||||
|
win.start_button.clicked.connect(start)
|
||||||
|
|
||||||
|
|
||||||
|
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")
|
||||||
|
|
||||||
|
COMBOS = [
|
||||||
|
win.combo0,
|
||||||
|
win.combo1,
|
||||||
|
win.combo2,
|
||||||
|
win.combo3,
|
||||||
|
win.combo4,
|
||||||
|
win.combo5,
|
||||||
|
win.combo6,
|
||||||
|
win.combo7,
|
||||||
|
win.combo8,
|
||||||
|
win.combo9,
|
||||||
|
win.combo10,
|
||||||
|
win.combo11,
|
||||||
|
]
|
||||||
|
|
||||||
|
main()
|
||||||
|
sys.exit(app.exec())
|
263
sundpood.ui
Normal file
263
sundpood.ui
Normal file
|
@ -0,0 +1,263 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>MainWindow</class>
|
||||||
|
<widget class="QMainWindow" name="MainWindow">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>420</width>
|
||||||
|
<height>450</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>420</width>
|
||||||
|
<height>450</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>420</width>
|
||||||
|
<height>450</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>SundPood</string>
|
||||||
|
</property>
|
||||||
|
<property name="windowIcon">
|
||||||
|
<iconset theme="icon.ico"/>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="centralwidget">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>420</width>
|
||||||
|
<height>450</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>420</width>
|
||||||
|
<height>450</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<widget class="QPushButton" name="start_button">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>330</y>
|
||||||
|
<width>401</width>
|
||||||
|
<height>101</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>Consolas</family>
|
||||||
|
<pointsize>28</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>START</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="verticalLayoutWidget">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>110</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>301</width>
|
||||||
|
<height>308</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="combo0"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="combo1"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="combo2"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="combo3"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="combo4"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="combo5"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="combo6"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="combo7"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="combo8"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="combo9"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="combo10"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="combo11"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="verticalLayoutWidget_2">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>91</width>
|
||||||
|
<height>308</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>F1</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>F2</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>F3</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_4">
|
||||||
|
<property name="text">
|
||||||
|
<string>F4</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_5">
|
||||||
|
<property name="text">
|
||||||
|
<string>F5</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_6">
|
||||||
|
<property name="text">
|
||||||
|
<string>F6</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_7">
|
||||||
|
<property name="text">
|
||||||
|
<string>F7</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_8">
|
||||||
|
<property name="text">
|
||||||
|
<string>F8</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_9">
|
||||||
|
<property name="text">
|
||||||
|
<string>F9</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_10">
|
||||||
|
<property name="text">
|
||||||
|
<string>F10</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_11">
|
||||||
|
<property name="text">
|
||||||
|
<string>F11</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_12">
|
||||||
|
<property name="text">
|
||||||
|
<string>F12</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="QStatusBar" name="statusbar"/>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
Loading…
Add table
Reference in a new issue