new update

This commit is contained in:
dharm pimsen 2023-12-18 21:39:13 +07:00
parent a528a477c2
commit 392c9896b3
4 changed files with 118 additions and 12 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
dist/
build/

View File

@ -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
View 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
View File

@ -0,0 +1,5 @@
[audio]
device =
[debug]
hideconsole = true