mirror of
https://github.com/damp11113/IDRB.git
synced 2025-04-28 06:58:09 +00:00
new update
This commit is contained in:
parent
a528a477c2
commit
392c9896b3
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
dist/
|
||||||
|
build/
|
@ -8,13 +8,30 @@ import numpy as np
|
|||||||
import pickle
|
import pickle
|
||||||
import pyaudio
|
import pyaudio
|
||||||
from pyogg import OpusDecoder
|
from pyogg import OpusDecoder
|
||||||
from damp11113 import CV22DPG
|
|
||||||
from Crypto.Cipher import AES
|
from Crypto.Cipher import AES
|
||||||
from Crypto.Protocol.KDF import scrypt
|
from Crypto.Protocol.KDF import scrypt
|
||||||
from Crypto.Random import get_random_bytes
|
import configparser
|
||||||
|
import ctypes
|
||||||
|
|
||||||
librarylist = ["Opencv (opencv.org)", "PyOgg (TeamPyOgg)", "DearPyGui (hoffstadt)"]
|
librarylist = ["Opencv (opencv.org)", "PyOgg (TeamPyOgg)", "DearPyGui (hoffstadt)"]
|
||||||
|
|
||||||
|
def CV22DPG(cv2_array):
|
||||||
|
try:
|
||||||
|
if cv2_array is None or len(cv2_array.shape) < 3:
|
||||||
|
print("Invalid or empty array received.")
|
||||||
|
return None
|
||||||
|
|
||||||
|
if len(cv2_array.shape) == 2:
|
||||||
|
cv2_array = cv2_array[:, :, np.newaxis]
|
||||||
|
|
||||||
|
data = np.flip(cv2_array, 2)
|
||||||
|
data = data.ravel()
|
||||||
|
data = np.asfarray(data, dtype='f')
|
||||||
|
return np.true_divide(data, 255.0)
|
||||||
|
except Exception as e:
|
||||||
|
print("Error in CV22DPG:", e)
|
||||||
|
return None
|
||||||
|
|
||||||
def calculate_speed(start_time, end_time, data_size):
|
def calculate_speed(start_time, end_time, data_size):
|
||||||
elapsed_time = end_time - start_time
|
elapsed_time = end_time - start_time
|
||||||
speed_kbps = (data_size / elapsed_time) / 1024 # Convert bytes to kilobytes
|
speed_kbps = (data_size / elapsed_time) / 1024 # Convert bytes to kilobytes
|
||||||
@ -62,7 +79,9 @@ def decrypt_data(encrypted_message, password, salt, iv):
|
|||||||
class App:
|
class App:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.RDS = None
|
self.RDS = None
|
||||||
self.device_name_output = "Speakers (2- USB Audio DAC )"
|
self.config = configparser.ConfigParser()
|
||||||
|
self.config.read("config.ini")
|
||||||
|
self.device_name_output = self.config["audio"]["device"]
|
||||||
self.working = False
|
self.working = False
|
||||||
self.readchannel = 1
|
self.readchannel = 1
|
||||||
self.firstrun = True
|
self.firstrun = True
|
||||||
@ -72,6 +91,7 @@ class App:
|
|||||||
self.ccisencrypt = None
|
self.ccisencrypt = None
|
||||||
self.ccisdecrypt = None
|
self.ccisdecrypt = None
|
||||||
self.ccisdecryptpassword = None
|
self.ccisdecryptpassword = None
|
||||||
|
self.paudio = pyaudio.PyAudio()
|
||||||
|
|
||||||
def connecttoserver(self, sender, data):
|
def connecttoserver(self, sender, data):
|
||||||
dpg.configure_item("connectservergroup", show=False)
|
dpg.configure_item("connectservergroup", show=False)
|
||||||
@ -85,11 +105,10 @@ class App:
|
|||||||
except:
|
except:
|
||||||
dpg.configure_item("connectbutton", show=True)
|
dpg.configure_item("connectbutton", show=True)
|
||||||
self.working = True
|
self.working = True
|
||||||
p = pyaudio.PyAudio()
|
|
||||||
|
|
||||||
self.device_index_output = 0
|
self.device_index_output = 0
|
||||||
for i in range(p.get_device_count()):
|
for i in range(self.paudio.get_device_count()):
|
||||||
dev = p.get_device_info_by_index(i)
|
dev = self.paudio.get_device_info_by_index(i)
|
||||||
if dev['name'] == self.device_name_output:
|
if dev['name'] == self.device_name_output:
|
||||||
self.device_index_output = dev['index']
|
self.device_index_output = dev['index']
|
||||||
break
|
break
|
||||||
@ -145,11 +164,9 @@ class App:
|
|||||||
self.ccisdecrypt = None
|
self.ccisdecrypt = None
|
||||||
self.ccisdecryptpassword = None
|
self.ccisdecryptpassword = None
|
||||||
|
|
||||||
p = pyaudio.PyAudio()
|
|
||||||
|
|
||||||
self.device_index_output = 0
|
self.device_index_output = 0
|
||||||
for i in range(p.get_device_count()):
|
for i in range(self.paudio.get_device_count()):
|
||||||
dev = p.get_device_info_by_index(i)
|
dev = self.paudio.get_device_info_by_index(i)
|
||||||
if dev['name'] == self.device_name_output:
|
if dev['name'] == self.device_name_output:
|
||||||
self.device_index_output = dev['index']
|
self.device_index_output = dev['index']
|
||||||
break
|
break
|
||||||
@ -159,6 +176,11 @@ class App:
|
|||||||
self.ccdecryptpassword = dpg.get_value("requestpasswordinputpopup")
|
self.ccdecryptpassword = dpg.get_value("requestpasswordinputpopup")
|
||||||
self.ccisdecryptpassword = True
|
self.ccisdecryptpassword = True
|
||||||
|
|
||||||
|
def changeaudiodevice(self, sender, data):
|
||||||
|
self.device_name_output = dpg.get_value(sender)
|
||||||
|
self.config["audio"]["device"] = dpg.get_value(sender)
|
||||||
|
self.config.write(open('config.ini', 'w'))
|
||||||
|
|
||||||
def stream(self, socket):
|
def stream(self, socket):
|
||||||
opus_decoder = None
|
opus_decoder = None
|
||||||
streamoutput = None
|
streamoutput = None
|
||||||
@ -223,11 +245,10 @@ class App:
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
if self.firstrun:
|
if self.firstrun:
|
||||||
p = pyaudio.PyAudio()
|
|
||||||
opus_decoder = OpusDecoder()
|
opus_decoder = OpusDecoder()
|
||||||
opus_decoder.set_channels(self.RDS["ContentInfo"]["channel"])
|
opus_decoder.set_channels(self.RDS["ContentInfo"]["channel"])
|
||||||
opus_decoder.set_sampling_frequency(self.RDS["ContentInfo"]["samplerates"])
|
opus_decoder.set_sampling_frequency(self.RDS["ContentInfo"]["samplerates"])
|
||||||
streamoutput = p.open(format=pyaudio.paInt16, channels=self.RDS["ContentInfo"]["channel"], rate=self.RDS["ContentInfo"]["samplerates"], output=True, output_device_index=self.device_index_output)
|
streamoutput = self.paudio.open(format=pyaudio.paInt16, channels=self.RDS["ContentInfo"]["channel"], rate=self.RDS["ContentInfo"]["samplerates"], output=True, output_device_index=self.device_index_output)
|
||||||
evaluation_audio_X = np.fft.fftfreq(1024, 1.0 / self.RDS["ContentInfo"]["samplerates"])[:1024 // 2]
|
evaluation_audio_X = np.fft.fftfreq(1024, 1.0 / self.RDS["ContentInfo"]["samplerates"])[:1024 // 2]
|
||||||
if len(datadecoded["channel"]) > 1:
|
if len(datadecoded["channel"]) > 1:
|
||||||
channel_info = []
|
channel_info = []
|
||||||
@ -441,6 +462,12 @@ class App:
|
|||||||
dpg.add_line_series([], [], label="Audio Data", parent="y_axis2", tag="transferateaudiodataoncchannelplot")
|
dpg.add_line_series([], [], label="Audio Data", parent="y_axis2", tag="transferateaudiodataoncchannelplot")
|
||||||
dpg.add_line_series([], [], label="Images Data", parent="y_axis3", tag="transferateimagesoncchannelplot")
|
dpg.add_line_series([], [], label="Images Data", parent="y_axis3", tag="transferateimagesoncchannelplot")
|
||||||
|
|
||||||
|
with dpg.window(label="Config", tag="configwindow", show=False, width=500):
|
||||||
|
dpg.add_text("Please restart software when configured")
|
||||||
|
with dpg.tab_bar():
|
||||||
|
with dpg.tab(label="Audio"):
|
||||||
|
dpg.add_combo([], label="Output Device", tag="selectaudiooutputdevicecombo", callback=self.changeaudiodevice)
|
||||||
|
|
||||||
def menubar(self):
|
def menubar(self):
|
||||||
with dpg.viewport_menu_bar():
|
with dpg.viewport_menu_bar():
|
||||||
with dpg.menu(label="File"):
|
with dpg.menu(label="File"):
|
||||||
@ -448,11 +475,17 @@ class App:
|
|||||||
with dpg.menu(label="View"):
|
with dpg.menu(label="View"):
|
||||||
dpg.add_menu_item(label="Evaluation", callback=lambda: dpg.configure_item("evaluationwindow", show=True))
|
dpg.add_menu_item(label="Evaluation", callback=lambda: dpg.configure_item("evaluationwindow", show=True))
|
||||||
with dpg.menu(label="Settings"):
|
with dpg.menu(label="Settings"):
|
||||||
|
dpg.add_menu_item(label="Config", callback=lambda: dpg.configure_item("configwindow", show=True))
|
||||||
|
dpg.add_spacer()
|
||||||
dpg.add_menu_item(label="StyleEditor", callback=dpg.show_style_editor)
|
dpg.add_menu_item(label="StyleEditor", callback=dpg.show_style_editor)
|
||||||
|
|
||||||
with dpg.menu(label="Help"):
|
with dpg.menu(label="Help"):
|
||||||
dpg.add_menu_item(label="About", callback=lambda: dpg.configure_item("aboutwindow", show=True))
|
dpg.add_menu_item(label="About", callback=lambda: dpg.configure_item("aboutwindow", show=True))
|
||||||
|
|
||||||
def init(self):
|
def init(self):
|
||||||
|
if self.config["debug"]["hideconsole"] == "true":
|
||||||
|
ctypes.windll.user32.ShowWindow(ctypes.windll.kernel32.GetConsoleWindow(), 0)
|
||||||
|
|
||||||
dpg.create_context()
|
dpg.create_context()
|
||||||
dpg.create_viewport(title=f'IDRB Client v1.5 Beta', width=1280, height=720, large_icon="IDRBfavicon.ico") # set viewport window
|
dpg.create_viewport(title=f'IDRB Client v1.5 Beta', width=1280, height=720, large_icon="IDRBfavicon.ico") # set viewport window
|
||||||
dpg.setup_dearpygui()
|
dpg.setup_dearpygui()
|
||||||
@ -472,6 +505,16 @@ class App:
|
|||||||
|
|
||||||
self.window()
|
self.window()
|
||||||
self.menubar()
|
self.menubar()
|
||||||
|
|
||||||
|
num_devices = self.paudio.get_device_count()
|
||||||
|
output_devices = []
|
||||||
|
for i in range(num_devices):
|
||||||
|
device_info = self.paudio.get_device_info_by_index(i)
|
||||||
|
if device_info['maxOutputChannels'] > 0:
|
||||||
|
output_devices.append(device_info['name'])
|
||||||
|
|
||||||
|
dpg.configure_item("selectaudiooutputdevicecombo", items=output_devices, default_value=self.config["audio"]["device"])
|
||||||
|
|
||||||
# -------------------------------------------
|
# -------------------------------------------
|
||||||
dpg.show_viewport()
|
dpg.show_viewport()
|
||||||
# Start a separate thread for a task
|
# Start a separate thread for a task
|
||||||
|
56
Client/client.spec
Normal file
56
Client/client.spec
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
# -*- mode: python ; coding: utf-8 -*-
|
||||||
|
|
||||||
|
|
||||||
|
block_cipher = None
|
||||||
|
|
||||||
|
|
||||||
|
a = Analysis(
|
||||||
|
['client.py'],
|
||||||
|
pathex=[],
|
||||||
|
binaries=[],
|
||||||
|
datas=[
|
||||||
|
"config.ini",
|
||||||
|
"IDRBfavicon.ico",
|
||||||
|
"IDRBfavicon.png",
|
||||||
|
"IDRBlogo.png",
|
||||||
|
],
|
||||||
|
hiddenimports=[],
|
||||||
|
hookspath=[],
|
||||||
|
hooksconfig={},
|
||||||
|
runtime_hooks=[],
|
||||||
|
excludes=[],
|
||||||
|
win_no_prefer_redirects=False,
|
||||||
|
win_private_assemblies=False,
|
||||||
|
cipher=block_cipher,
|
||||||
|
noarchive=False,
|
||||||
|
)
|
||||||
|
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
|
||||||
|
|
||||||
|
exe = EXE(
|
||||||
|
pyz,
|
||||||
|
a.scripts,
|
||||||
|
[],
|
||||||
|
exclude_binaries=True,
|
||||||
|
name='client',
|
||||||
|
debug=False,
|
||||||
|
bootloader_ignore_signals=False,
|
||||||
|
strip=False,
|
||||||
|
upx=True,
|
||||||
|
console=True,
|
||||||
|
disable_windowed_traceback=False,
|
||||||
|
argv_emulation=False,
|
||||||
|
target_arch=None,
|
||||||
|
codesign_identity=None,
|
||||||
|
entitlements_file=None,
|
||||||
|
icon=['IDRBfavicon.ico'],
|
||||||
|
)
|
||||||
|
coll = COLLECT(
|
||||||
|
exe,
|
||||||
|
a.binaries,
|
||||||
|
a.zipfiles,
|
||||||
|
a.datas,
|
||||||
|
strip=False,
|
||||||
|
upx=True,
|
||||||
|
upx_exclude=[],
|
||||||
|
name='IDRB client',
|
||||||
|
)
|
5
Client/config.ini
Normal file
5
Client/config.ini
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
[audio]
|
||||||
|
device =
|
||||||
|
|
||||||
|
[debug]
|
||||||
|
hideconsole = true
|
Loading…
x
Reference in New Issue
Block a user