Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 47b452fe5f | |||
| 5d7599891c | |||
| eb9d4c8cf9 | |||
| 123a2126ee | |||
| 4360926339 |
@@ -1,46 +0,0 @@
|
|||||||
name: PyInstaller Build
|
|
||||||
on: [push]
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout Code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Setup Python
|
|
||||||
uses: actions/setup-python@v4
|
|
||||||
with:
|
|
||||||
python-version: '3.11'
|
|
||||||
|
|
||||||
- name: Install system dependencies for wxPython
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y \
|
|
||||||
libgtk-3-dev \
|
|
||||||
libnotify-dev \
|
|
||||||
libsdl2-dev \
|
|
||||||
libsm-dev \
|
|
||||||
libwebkit2gtk-4.1-dev \
|
|
||||||
libgstreamer1.0-dev \
|
|
||||||
libgstreamer-plugins-base1.0-dev \
|
|
||||||
freeglut3-dev \
|
|
||||||
libgstreamer-plugins-bad1.0-dev \
|
|
||||||
libpng-dev \
|
|
||||||
libjpeg-dev \
|
|
||||||
libtiff-dev
|
|
||||||
|
|
||||||
- name: Install Python dependencies
|
|
||||||
run: |
|
|
||||||
python -m pip install --upgrade pip setuptools wheel
|
|
||||||
pip install -r requirements.txt
|
|
||||||
pip install wxPython
|
|
||||||
pip install pyinstaller
|
|
||||||
|
|
||||||
- name: Build with PyInstaller
|
|
||||||
run: pyinstaller --onefile --name myapp main.py
|
|
||||||
|
|
||||||
- name: Upload Executable
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: myapp-linux
|
|
||||||
path: dist/myapp
|
|
||||||
25
.gitignore
vendored
Normal file
25
.gitignore
vendored
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
# Build artifacts
|
||||||
|
dist/
|
||||||
|
build/
|
||||||
|
|
||||||
|
# Python cache
|
||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
*$py.class
|
||||||
|
|
||||||
|
# PyInstaller
|
||||||
|
*.spec
|
||||||
|
|
||||||
|
# Virtual environments
|
||||||
|
.venv/
|
||||||
|
venv/
|
||||||
|
ENV/
|
||||||
|
|
||||||
|
# OS / editor
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
*.log
|
||||||
BIN
__pycache__/main.cpython-313.pyc
Normal file
BIN
__pycache__/main.cpython-313.pyc
Normal file
Binary file not shown.
1235
build/main/Analysis-00.toc
Normal file
1235
build/main/Analysis-00.toc
Normal file
File diff suppressed because it is too large
Load Diff
163
build/main/EXE-00.toc
Normal file
163
build/main/EXE-00.toc
Normal file
@@ -0,0 +1,163 @@
|
|||||||
|
('D:\\audio\\dist\\main.exe',
|
||||||
|
True,
|
||||||
|
False,
|
||||||
|
False,
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\PyInstaller\\bootloader\\images\\icon-console.ico',
|
||||||
|
None,
|
||||||
|
False,
|
||||||
|
False,
|
||||||
|
b'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<assembly xmlns='
|
||||||
|
b'"urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">\n <trustInfo x'
|
||||||
|
b'mlns="urn:schemas-microsoft-com:asm.v3">\n <security>\n <requested'
|
||||||
|
b'Privileges>\n <requestedExecutionLevel level="asInvoker" uiAccess='
|
||||||
|
b'"false"/>\n </requestedPrivileges>\n </security>\n </trustInfo>\n '
|
||||||
|
b'<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">\n <'
|
||||||
|
b'application>\n <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f'
|
||||||
|
b'0}"/>\n <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>\n '
|
||||||
|
b' <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>\n <s'
|
||||||
|
b'upportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>\n <supporte'
|
||||||
|
b'dOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>\n </application>\n <'
|
||||||
|
b'/compatibility>\n <application xmlns="urn:schemas-microsoft-com:asm.v3">'
|
||||||
|
b'\n <windowsSettings>\n <longPathAware xmlns="http://schemas.micros'
|
||||||
|
b'oft.com/SMI/2016/WindowsSettings">true</longPathAware>\n </windowsSett'
|
||||||
|
b'ings>\n </application>\n <dependency>\n <dependentAssembly>\n <ass'
|
||||||
|
b'emblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version='
|
||||||
|
b'"6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" langua'
|
||||||
|
b'ge="*"/>\n </dependentAssembly>\n </dependency>\n</assembly>',
|
||||||
|
True,
|
||||||
|
False,
|
||||||
|
None,
|
||||||
|
None,
|
||||||
|
None,
|
||||||
|
'D:\\audio\\build\\main\\main.pkg',
|
||||||
|
[('pyi-contents-directory _internal', '', 'OPTION'),
|
||||||
|
('PYZ-00.pyz', 'D:\\audio\\build\\main\\PYZ-00.pyz', 'PYZ'),
|
||||||
|
('struct', 'D:\\audio\\build\\main\\localpycs\\struct.pyc', 'PYMODULE'),
|
||||||
|
('pyimod01_archive',
|
||||||
|
'D:\\audio\\build\\main\\localpycs\\pyimod01_archive.pyc',
|
||||||
|
'PYMODULE'),
|
||||||
|
('pyimod02_importers',
|
||||||
|
'D:\\audio\\build\\main\\localpycs\\pyimod02_importers.pyc',
|
||||||
|
'PYMODULE'),
|
||||||
|
('pyimod03_ctypes',
|
||||||
|
'D:\\audio\\build\\main\\localpycs\\pyimod03_ctypes.pyc',
|
||||||
|
'PYMODULE'),
|
||||||
|
('pyimod04_pywin32',
|
||||||
|
'D:\\audio\\build\\main\\localpycs\\pyimod04_pywin32.pyc',
|
||||||
|
'PYMODULE'),
|
||||||
|
('pyiboot01_bootstrap',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\PyInstaller\\loader\\pyiboot01_bootstrap.py',
|
||||||
|
'PYSOURCE'),
|
||||||
|
('pyi_rth_inspect',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_inspect.py',
|
||||||
|
'PYSOURCE'),
|
||||||
|
('pyi_rth_pkgutil',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_pkgutil.py',
|
||||||
|
'PYSOURCE'),
|
||||||
|
('pyi_rth_multiprocessing',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_multiprocessing.py',
|
||||||
|
'PYSOURCE'),
|
||||||
|
('main', 'D:\\audio\\main.py', 'PYSOURCE'),
|
||||||
|
('python313.dll',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\python313.dll',
|
||||||
|
'BINARY'),
|
||||||
|
('_multiprocessing.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_multiprocessing.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('pyexpat.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\pyexpat.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('_ssl.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_ssl.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('_hashlib.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_hashlib.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('unicodedata.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\unicodedata.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('_decimal.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_decimal.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('_socket.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_socket.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('select.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\select.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('_lzma.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_lzma.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('_bz2.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_bz2.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('_ctypes.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_ctypes.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('_queue.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_queue.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('wx\\_media.cp313-win_amd64.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\_media.cp313-win_amd64.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('_overlapped.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_overlapped.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('_asyncio.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_asyncio.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('wx\\_adv.cp313-win_amd64.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\_adv.cp313-win_amd64.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('wx\\_html.cp313-win_amd64.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\_html.cp313-win_amd64.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('wx\\_msw.cp313-win_amd64.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\_msw.cp313-win_amd64.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('wx\\siplib.cp313-win_amd64.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\siplib.cp313-win_amd64.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('wx\\_core.cp313-win_amd64.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\_core.cp313-win_amd64.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('VCRUNTIME140.dll',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\VCRUNTIME140.dll',
|
||||||
|
'BINARY'),
|
||||||
|
('libcrypto-3.dll',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\libcrypto-3.dll',
|
||||||
|
'BINARY'),
|
||||||
|
('libssl-3.dll',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\libssl-3.dll',
|
||||||
|
'BINARY'),
|
||||||
|
('libffi-8.dll',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\libffi-8.dll',
|
||||||
|
'BINARY'),
|
||||||
|
('wx\\wxmsw32u_core_vc140_x64.dll',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\wxmsw32u_core_vc140_x64.dll',
|
||||||
|
'BINARY'),
|
||||||
|
('wx\\wxbase32u_vc140_x64.dll',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\wxbase32u_vc140_x64.dll',
|
||||||
|
'BINARY'),
|
||||||
|
('VCRUNTIME140_1.dll',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\VCRUNTIME140_1.dll',
|
||||||
|
'BINARY'),
|
||||||
|
('wx\\wxmsw32u_media_vc140_x64.dll',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\wxmsw32u_media_vc140_x64.dll',
|
||||||
|
'BINARY'),
|
||||||
|
('wx\\wxmsw32u_html_vc140_x64.dll',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\wxmsw32u_html_vc140_x64.dll',
|
||||||
|
'BINARY'),
|
||||||
|
('MSVCP140.dll', 'C:\\Windows\\System32\\MSVCP140.dll', 'BINARY'),
|
||||||
|
('wx\\wxbase32u_net_vc140_x64.dll',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\wxbase32u_net_vc140_x64.dll',
|
||||||
|
'BINARY'),
|
||||||
|
('base_library.zip', 'D:\\audio\\build\\main\\base_library.zip', 'DATA')],
|
||||||
|
[],
|
||||||
|
False,
|
||||||
|
False,
|
||||||
|
1770832619,
|
||||||
|
[('run.exe',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\PyInstaller\\bootloader\\Windows-64bit-intel\\run.exe',
|
||||||
|
'EXECUTABLE')],
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\python313.dll')
|
||||||
141
build/main/PKG-00.toc
Normal file
141
build/main/PKG-00.toc
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
('D:\\audio\\build\\main\\main.pkg',
|
||||||
|
{'BINARY': True,
|
||||||
|
'DATA': True,
|
||||||
|
'EXECUTABLE': True,
|
||||||
|
'EXTENSION': True,
|
||||||
|
'PYMODULE': True,
|
||||||
|
'PYSOURCE': True,
|
||||||
|
'PYZ': False,
|
||||||
|
'SPLASH': True,
|
||||||
|
'SYMLINK': False},
|
||||||
|
[('pyi-contents-directory _internal', '', 'OPTION'),
|
||||||
|
('PYZ-00.pyz', 'D:\\audio\\build\\main\\PYZ-00.pyz', 'PYZ'),
|
||||||
|
('struct', 'D:\\audio\\build\\main\\localpycs\\struct.pyc', 'PYMODULE'),
|
||||||
|
('pyimod01_archive',
|
||||||
|
'D:\\audio\\build\\main\\localpycs\\pyimod01_archive.pyc',
|
||||||
|
'PYMODULE'),
|
||||||
|
('pyimod02_importers',
|
||||||
|
'D:\\audio\\build\\main\\localpycs\\pyimod02_importers.pyc',
|
||||||
|
'PYMODULE'),
|
||||||
|
('pyimod03_ctypes',
|
||||||
|
'D:\\audio\\build\\main\\localpycs\\pyimod03_ctypes.pyc',
|
||||||
|
'PYMODULE'),
|
||||||
|
('pyimod04_pywin32',
|
||||||
|
'D:\\audio\\build\\main\\localpycs\\pyimod04_pywin32.pyc',
|
||||||
|
'PYMODULE'),
|
||||||
|
('pyiboot01_bootstrap',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\PyInstaller\\loader\\pyiboot01_bootstrap.py',
|
||||||
|
'PYSOURCE'),
|
||||||
|
('pyi_rth_inspect',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_inspect.py',
|
||||||
|
'PYSOURCE'),
|
||||||
|
('pyi_rth_pkgutil',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_pkgutil.py',
|
||||||
|
'PYSOURCE'),
|
||||||
|
('pyi_rth_multiprocessing',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_multiprocessing.py',
|
||||||
|
'PYSOURCE'),
|
||||||
|
('main', 'D:\\audio\\main.py', 'PYSOURCE'),
|
||||||
|
('python313.dll',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\python313.dll',
|
||||||
|
'BINARY'),
|
||||||
|
('_multiprocessing.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_multiprocessing.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('pyexpat.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\pyexpat.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('_ssl.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_ssl.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('_hashlib.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_hashlib.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('unicodedata.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\unicodedata.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('_decimal.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_decimal.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('_socket.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_socket.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('select.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\select.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('_lzma.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_lzma.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('_bz2.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_bz2.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('_ctypes.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_ctypes.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('_queue.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_queue.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('wx\\_media.cp313-win_amd64.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\_media.cp313-win_amd64.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('_overlapped.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_overlapped.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('_asyncio.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_asyncio.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('wx\\_adv.cp313-win_amd64.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\_adv.cp313-win_amd64.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('wx\\_html.cp313-win_amd64.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\_html.cp313-win_amd64.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('wx\\_msw.cp313-win_amd64.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\_msw.cp313-win_amd64.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('wx\\siplib.cp313-win_amd64.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\siplib.cp313-win_amd64.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('wx\\_core.cp313-win_amd64.pyd',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\_core.cp313-win_amd64.pyd',
|
||||||
|
'EXTENSION'),
|
||||||
|
('VCRUNTIME140.dll',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\VCRUNTIME140.dll',
|
||||||
|
'BINARY'),
|
||||||
|
('libcrypto-3.dll',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\libcrypto-3.dll',
|
||||||
|
'BINARY'),
|
||||||
|
('libssl-3.dll',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\libssl-3.dll',
|
||||||
|
'BINARY'),
|
||||||
|
('libffi-8.dll',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\libffi-8.dll',
|
||||||
|
'BINARY'),
|
||||||
|
('wx\\wxmsw32u_core_vc140_x64.dll',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\wxmsw32u_core_vc140_x64.dll',
|
||||||
|
'BINARY'),
|
||||||
|
('wx\\wxbase32u_vc140_x64.dll',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\wxbase32u_vc140_x64.dll',
|
||||||
|
'BINARY'),
|
||||||
|
('VCRUNTIME140_1.dll',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\VCRUNTIME140_1.dll',
|
||||||
|
'BINARY'),
|
||||||
|
('wx\\wxmsw32u_media_vc140_x64.dll',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\wxmsw32u_media_vc140_x64.dll',
|
||||||
|
'BINARY'),
|
||||||
|
('wx\\wxmsw32u_html_vc140_x64.dll',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\wxmsw32u_html_vc140_x64.dll',
|
||||||
|
'BINARY'),
|
||||||
|
('MSVCP140.dll', 'C:\\Windows\\System32\\MSVCP140.dll', 'BINARY'),
|
||||||
|
('wx\\wxbase32u_net_vc140_x64.dll',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\wxbase32u_net_vc140_x64.dll',
|
||||||
|
'BINARY'),
|
||||||
|
('base_library.zip', 'D:\\audio\\build\\main\\base_library.zip', 'DATA')],
|
||||||
|
'python313.dll',
|
||||||
|
False,
|
||||||
|
False,
|
||||||
|
False,
|
||||||
|
[],
|
||||||
|
None,
|
||||||
|
None,
|
||||||
|
None)
|
||||||
BIN
build/main/PYZ-00.pyz
Normal file
BIN
build/main/PYZ-00.pyz
Normal file
Binary file not shown.
640
build/main/PYZ-00.toc
Normal file
640
build/main/PYZ-00.toc
Normal file
@@ -0,0 +1,640 @@
|
|||||||
|
('D:\\audio\\build\\main\\PYZ-00.pyz',
|
||||||
|
[('__future__',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\__future__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('_colorize',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\_colorize.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('_compat_pickle',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\_compat_pickle.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('_compression',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\_compression.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('_opcode_metadata',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\_opcode_metadata.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('_py_abc',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\_py_abc.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('_pydatetime',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\_pydatetime.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('_pydecimal',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\_pydecimal.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('_strptime',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\_strptime.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('_threading_local',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\_threading_local.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('argparse',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\argparse.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('ast',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\ast.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.base_events',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\base_events.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.base_futures',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\base_futures.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.base_subprocess',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\base_subprocess.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.base_tasks',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\base_tasks.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.constants',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\constants.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.coroutines',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\coroutines.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.events',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\events.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.exceptions',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\exceptions.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.format_helpers',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\format_helpers.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.futures',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\futures.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.locks',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\locks.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.log',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\log.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.mixins',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\mixins.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.proactor_events',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\proactor_events.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.protocols',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\protocols.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.queues',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\queues.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.runners',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\runners.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.selector_events',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\selector_events.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.sslproto',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\sslproto.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.staggered',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\staggered.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.streams',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\streams.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.subprocess',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\subprocess.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.taskgroups',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\taskgroups.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.tasks',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\tasks.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.threads',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\threads.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.timeouts',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\timeouts.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.transports',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\transports.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.trsock',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\trsock.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.unix_events',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\unix_events.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.windows_events',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\windows_events.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('asyncio.windows_utils',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\asyncio\\windows_utils.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('base64',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\base64.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('bisect',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\bisect.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('bz2',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\bz2.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('calendar',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\calendar.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('concurrent',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\concurrent\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('concurrent.futures',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\concurrent\\futures\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('concurrent.futures._base',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\concurrent\\futures\\_base.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('concurrent.futures.process',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\concurrent\\futures\\process.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('concurrent.futures.thread',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\concurrent\\futures\\thread.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('contextlib',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\contextlib.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('contextvars',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\contextvars.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('copy',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\copy.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('csv',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\csv.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('ctypes',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\ctypes\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('ctypes._endian',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\ctypes\\_endian.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('dataclasses',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\dataclasses.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('datetime',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\datetime.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('decimal',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\decimal.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('dis',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\dis.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email._encoded_words',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\_encoded_words.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email._header_value_parser',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\_header_value_parser.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email._parseaddr',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\_parseaddr.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email._policybase',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\_policybase.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.base64mime',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\base64mime.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.charset',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\charset.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.contentmanager',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\contentmanager.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.encoders',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\encoders.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.errors',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\errors.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.feedparser',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\feedparser.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.generator',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\generator.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.header',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\header.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.headerregistry',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\headerregistry.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.iterators',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\iterators.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.message',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\message.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.parser',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\parser.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.policy',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\policy.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.quoprimime',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\quoprimime.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('email.utils',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\utils.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('fnmatch',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\fnmatch.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('fractions',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\fractions.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('ftplib',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\ftplib.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('getopt',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\getopt.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('getpass',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\getpass.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('gettext',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\gettext.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('glob',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\glob.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('gzip',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\gzip.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('hashlib',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\hashlib.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('hmac',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\hmac.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('http',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\http\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('http.client',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\http\\client.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('http.cookiejar',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\http\\cookiejar.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib._abc',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\_abc.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib._bootstrap',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\_bootstrap.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib._bootstrap_external',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\_bootstrap_external.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.abc',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\abc.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.machinery',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\machinery.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.metadata',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\metadata\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.metadata._adapters',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\metadata\\_adapters.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.metadata._collections',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\metadata\\_collections.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.metadata._functools',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\metadata\\_functools.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.metadata._itertools',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\metadata\\_itertools.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.metadata._meta',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\metadata\\_meta.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.metadata._text',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\metadata\\_text.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.readers',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\readers.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.resources',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\resources\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.resources._adapters',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\resources\\_adapters.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.resources._common',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\resources\\_common.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.resources._functional',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\resources\\_functional.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.resources._itertools',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\resources\\_itertools.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.resources.abc',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\resources\\abc.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.resources.readers',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\resources\\readers.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('importlib.util',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\util.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('inspect',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\inspect.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('ipaddress',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\ipaddress.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('json',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\json\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('json.decoder',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\json\\decoder.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('json.encoder',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\json\\encoder.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('json.scanner',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\json\\scanner.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('logging',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\logging\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('lzma',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\lzma.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('mimetypes',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\mimetypes.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('multiprocessing',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\multiprocessing\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('multiprocessing.connection',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\multiprocessing\\connection.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('multiprocessing.context',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\multiprocessing\\context.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('multiprocessing.dummy',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\multiprocessing\\dummy\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('multiprocessing.dummy.connection',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\multiprocessing\\dummy\\connection.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('multiprocessing.forkserver',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\multiprocessing\\forkserver.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('multiprocessing.heap',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\multiprocessing\\heap.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('multiprocessing.managers',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\multiprocessing\\managers.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('multiprocessing.pool',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\multiprocessing\\pool.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('multiprocessing.popen_fork',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\multiprocessing\\popen_fork.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('multiprocessing.popen_forkserver',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\multiprocessing\\popen_forkserver.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('multiprocessing.popen_spawn_posix',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\multiprocessing\\popen_spawn_posix.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('multiprocessing.popen_spawn_win32',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\multiprocessing\\popen_spawn_win32.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('multiprocessing.process',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\multiprocessing\\process.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('multiprocessing.queues',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\multiprocessing\\queues.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('multiprocessing.reduction',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\multiprocessing\\reduction.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('multiprocessing.resource_sharer',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\multiprocessing\\resource_sharer.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('multiprocessing.resource_tracker',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\multiprocessing\\resource_tracker.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('multiprocessing.shared_memory',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\multiprocessing\\shared_memory.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('multiprocessing.sharedctypes',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\multiprocessing\\sharedctypes.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('multiprocessing.spawn',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\multiprocessing\\spawn.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('multiprocessing.synchronize',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\multiprocessing\\synchronize.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('multiprocessing.util',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\multiprocessing\\util.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('netrc',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\netrc.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('nturl2path',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\nturl2path.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('numbers',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\numbers.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('opcode',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\opcode.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('pathlib',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\pathlib\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('pathlib._abc',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\pathlib\\_abc.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('pathlib._local',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\pathlib\\_local.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('pickle',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\pickle.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('pkgutil',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\pkgutil.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('pprint',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\pprint.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('py_compile',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\py_compile.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('queue',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\queue.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('quopri',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\quopri.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('random',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\random.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('runpy',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\runpy.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('secrets',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\secrets.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('selectors',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\selectors.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('shutil',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\shutil.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('signal',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\signal.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('socket',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\socket.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('ssl',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\ssl.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('statistics',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\statistics.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('string',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\string.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('stringprep',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\stringprep.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('subprocess',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\subprocess.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('tarfile',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\tarfile.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('tempfile',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\tempfile.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('textwrap',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\textwrap.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('threading',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\threading.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('token',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\token.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('tokenize',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\tokenize.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('tracemalloc',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\tracemalloc.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('typing',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\typing.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('typing_extensions',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\typing_extensions.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\urllib\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib.error',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\urllib\\error.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib.parse',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\urllib\\parse.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib.request',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\urllib\\request.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('urllib.response',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\urllib\\response.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('wx',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('wx.__version__',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\__version__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('wx.adv',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\adv.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('wx.core',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\core.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('wx.html',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\html.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('wx.lib',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\lib\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('wx.lib.colourutils',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\lib\\colourutils.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('wx.media',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\media.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('wx.msw',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\wx\\msw.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('xml',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\xml\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('xml.parsers',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\xml\\parsers\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('xml.parsers.expat',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\xml\\parsers\\expat.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('xml.sax',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\xml\\sax\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('xml.sax._exceptions',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\xml\\sax\\_exceptions.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('xml.sax.expatreader',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\xml\\sax\\expatreader.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('xml.sax.handler',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\xml\\sax\\handler.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('xml.sax.saxutils',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\xml\\sax\\saxutils.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('xml.sax.xmlreader',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\xml\\sax\\xmlreader.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('xmlrpc',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\xmlrpc\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('xmlrpc.client',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\xmlrpc\\client.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('zipfile',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\zipfile\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('zipfile._path',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\zipfile\\_path\\__init__.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('zipfile._path.glob',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\zipfile\\_path\\glob.py',
|
||||||
|
'PYMODULE'),
|
||||||
|
('zipimport',
|
||||||
|
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\zipimport.py',
|
||||||
|
'PYMODULE')])
|
||||||
BIN
build/main/base_library.zip
Normal file
BIN
build/main/base_library.zip
Normal file
Binary file not shown.
BIN
build/main/localpycs/pyimod01_archive.pyc
Normal file
BIN
build/main/localpycs/pyimod01_archive.pyc
Normal file
Binary file not shown.
BIN
build/main/localpycs/pyimod02_importers.pyc
Normal file
BIN
build/main/localpycs/pyimod02_importers.pyc
Normal file
Binary file not shown.
BIN
build/main/localpycs/pyimod03_ctypes.pyc
Normal file
BIN
build/main/localpycs/pyimod03_ctypes.pyc
Normal file
Binary file not shown.
BIN
build/main/localpycs/pyimod04_pywin32.pyc
Normal file
BIN
build/main/localpycs/pyimod04_pywin32.pyc
Normal file
Binary file not shown.
BIN
build/main/localpycs/struct.pyc
Normal file
BIN
build/main/localpycs/struct.pyc
Normal file
Binary file not shown.
BIN
build/main/main.pkg
Normal file
BIN
build/main/main.pkg
Normal file
Binary file not shown.
38
build/main/warn-main.txt
Normal file
38
build/main/warn-main.txt
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
|
||||||
|
This file lists modules PyInstaller was not able to find. This does not
|
||||||
|
necessarily mean these modules are required for running your program. Both
|
||||||
|
Python's standard library and 3rd-party Python packages often conditionally
|
||||||
|
import optional modules, some of which may be available only on certain
|
||||||
|
platforms.
|
||||||
|
|
||||||
|
Types of import:
|
||||||
|
* top-level: imported at the top-level - look at these first
|
||||||
|
* conditional: imported within an if-statement
|
||||||
|
* delayed: imported within a function
|
||||||
|
* optional: imported within a try-except-statement
|
||||||
|
|
||||||
|
IMPORTANT: Do NOT post this list to the issue-tracker. Use it as a basis for
|
||||||
|
tracking down the missing module yourself. Thanks!
|
||||||
|
|
||||||
|
missing module named _posixshmem - imported by multiprocessing.resource_tracker (conditional), multiprocessing.shared_memory (conditional)
|
||||||
|
missing module named _scproxy - imported by urllib.request (conditional)
|
||||||
|
missing module named termios - imported by getpass (optional)
|
||||||
|
missing module named pwd - imported by posixpath (delayed, conditional, optional), shutil (delayed, optional), tarfile (optional), pathlib._local (optional), subprocess (delayed, conditional, optional), netrc (delayed, conditional), getpass (delayed, optional)
|
||||||
|
missing module named multiprocessing.BufferTooShort - imported by multiprocessing (top-level), multiprocessing.connection (top-level)
|
||||||
|
missing module named multiprocessing.AuthenticationError - imported by multiprocessing (top-level), multiprocessing.connection (top-level)
|
||||||
|
missing module named _posixsubprocess - imported by subprocess (conditional), multiprocessing.util (delayed)
|
||||||
|
missing module named grp - imported by shutil (delayed, optional), tarfile (optional), pathlib._local (optional), subprocess (delayed, conditional, optional)
|
||||||
|
missing module named posix - imported by posixpath (optional), shutil (conditional), importlib._bootstrap_external (conditional), os (conditional, optional)
|
||||||
|
missing module named resource - imported by posix (top-level)
|
||||||
|
missing module named _frozen_importlib_external - imported by importlib._bootstrap (delayed), importlib (optional), importlib.abc (optional), zipimport (top-level)
|
||||||
|
excluded module named _frozen_importlib - imported by importlib (optional), importlib.abc (optional), zipimport (top-level)
|
||||||
|
missing module named multiprocessing.get_context - imported by multiprocessing (top-level), multiprocessing.pool (top-level), multiprocessing.managers (top-level), multiprocessing.sharedctypes (top-level)
|
||||||
|
missing module named multiprocessing.TimeoutError - imported by multiprocessing (top-level), multiprocessing.pool (top-level)
|
||||||
|
missing module named multiprocessing.set_start_method - imported by multiprocessing (top-level), multiprocessing.spawn (top-level)
|
||||||
|
missing module named multiprocessing.get_start_method - imported by multiprocessing (top-level), multiprocessing.spawn (top-level)
|
||||||
|
missing module named pyimod02_importers - imported by C:\Users\aaron\AppData\Local\Programs\Python\Python313\Lib\site-packages\PyInstaller\hooks\rthooks\pyi_rth_pkgutil.py (delayed)
|
||||||
|
missing module named _suggestions - imported by traceback (delayed, optional)
|
||||||
|
missing module named asyncio.DefaultEventLoopPolicy - imported by asyncio (delayed, conditional), asyncio.events (delayed, conditional)
|
||||||
|
missing module named annotationlib - imported by typing_extensions (conditional)
|
||||||
|
missing module named Carbon - imported by wx.lib.colourutils (conditional, optional)
|
||||||
|
missing module named fcntl - imported by subprocess (optional)
|
||||||
10966
build/main/xref-main.html
Normal file
10966
build/main/xref-main.html
Normal file
File diff suppressed because it is too large
Load Diff
BIN
dist/main.exe
vendored
Normal file
BIN
dist/main.exe
vendored
Normal file
Binary file not shown.
392
main.py
392
main.py
@@ -1,8 +1,10 @@
|
|||||||
import os
|
import os
|
||||||
|
import json
|
||||||
import threading
|
import threading
|
||||||
import shutil
|
import shutil
|
||||||
import subprocess
|
import subprocess
|
||||||
import wx
|
import wx
|
||||||
|
import wx.media
|
||||||
|
|
||||||
AUDIO_FORMATS = ["mp3", "wav", "aac", "flac", "ogg", "m4a"]
|
AUDIO_FORMATS = ["mp3", "wav", "aac", "flac", "ogg", "m4a"]
|
||||||
VIDEO_FORMATS = ["mp4", "mkv", "mov", "webm"]
|
VIDEO_FORMATS = ["mp4", "mkv", "mov", "webm"]
|
||||||
@@ -10,10 +12,15 @@ VIDEO_FORMATS = ["mp4", "mkv", "mov", "webm"]
|
|||||||
|
|
||||||
class ConverterFrame(wx.Frame):
|
class ConverterFrame(wx.Frame):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__(parent=None, title="Audio/Video Converter", size=(720, 460))
|
super().__init__(parent=None, title="Audio/Video Converter", size=(640, 380))
|
||||||
panel = wx.Panel(self)
|
panel = wx.Panel(self)
|
||||||
|
label_color = wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)
|
||||||
|
|
||||||
self.input_picker = wx.FilePickerCtrl(panel, message="Select input file")
|
self.input_picker = wx.FilePickerCtrl(
|
||||||
|
panel,
|
||||||
|
message="Select input file",
|
||||||
|
style=wx.FLP_OPEN | wx.FLP_FILE_MUST_EXIST | wx.FLP_USE_TEXTCTRL,
|
||||||
|
)
|
||||||
self.mode_choice = wx.Choice(panel, choices=["Audio", "Video"])
|
self.mode_choice = wx.Choice(panel, choices=["Audio", "Video"])
|
||||||
self.mode_choice.SetSelection(0)
|
self.mode_choice.SetSelection(0)
|
||||||
self.format_choice = wx.Choice(panel, choices=AUDIO_FORMATS)
|
self.format_choice = wx.Choice(panel, choices=AUDIO_FORMATS)
|
||||||
@@ -21,54 +28,81 @@ class ConverterFrame(wx.Frame):
|
|||||||
self.output_picker = wx.FilePickerCtrl(
|
self.output_picker = wx.FilePickerCtrl(
|
||||||
panel,
|
panel,
|
||||||
message="Select output file",
|
message="Select output file",
|
||||||
style=wx.FLP_SAVE | wx.FLP_OVERWRITE_PROMPT,
|
style=wx.FLP_SAVE | wx.FLP_OVERWRITE_PROMPT | wx.FLP_USE_TEXTCTRL,
|
||||||
)
|
)
|
||||||
self.audio_bitrate = wx.TextCtrl(panel, value="", size=(120, -1))
|
self.audio_bitrate = wx.TextCtrl(panel, value="", size=(120, -1))
|
||||||
self.video_bitrate = wx.TextCtrl(panel, value="", size=(120, -1))
|
self.video_bitrate = wx.TextCtrl(panel, value="", size=(120, -1))
|
||||||
self.copy_streams = wx.CheckBox(panel, label="Copy streams (fast, no re-encode)")
|
self.activation_bytes = wx.TextCtrl(panel, value="", size=(120, -1))
|
||||||
self.start_btn = wx.Button(panel, label="Convert")
|
self.copy_streams = wx.CheckBox(panel, label="Co&py streams (fast, no re-encode)")
|
||||||
|
self.copy_streams.SetForegroundColour(label_color)
|
||||||
|
self.split_mp3_choice = wx.Choice(panel, choices=["No", "Yes"])
|
||||||
|
self.split_mp3_choice.SetSelection(0)
|
||||||
|
self.start_btn = wx.Button(panel, label="&Convert")
|
||||||
self.log_ctrl = wx.TextCtrl(panel, style=wx.TE_MULTILINE | wx.TE_READONLY)
|
self.log_ctrl = wx.TextCtrl(panel, style=wx.TE_MULTILINE | wx.TE_READONLY)
|
||||||
self.status = wx.StaticText(panel, label="Ready")
|
self.status = wx.StaticText(panel, label="Ready")
|
||||||
|
self.status.SetForegroundColour(label_color)
|
||||||
|
|
||||||
|
self.media = wx.media.MediaCtrl(panel, style=wx.SIMPLE_BORDER)
|
||||||
|
self.play_btn = wx.Button(panel, label="&Play/Pause")
|
||||||
|
self.stop_btn = wx.Button(panel, label="S&top")
|
||||||
|
self.position_slider = wx.Slider(panel, minValue=0, maxValue=1000, style=wx.SL_HORIZONTAL)
|
||||||
|
self.time_label = wx.StaticText(panel, label="00:00 / 00:00")
|
||||||
|
self.time_label.SetForegroundColour(label_color)
|
||||||
|
self.media_length_ms = 0
|
||||||
|
self.dragging_slider = False
|
||||||
|
self.pending_play = False
|
||||||
|
self.media_loaded = False
|
||||||
|
self.loaded_media_path = ""
|
||||||
|
self.player_timer = wx.Timer(self)
|
||||||
|
|
||||||
self.audio_bitrate.SetHint("e.g. 192k")
|
self.audio_bitrate.SetHint("e.g. 192k")
|
||||||
self.video_bitrate.SetHint("e.g. 2000k")
|
self.video_bitrate.SetHint("e.g. 2000k")
|
||||||
|
self.activation_bytes.SetHint("e.g. 1")
|
||||||
|
self.audio_bitrate.SetName("Audio bitrate")
|
||||||
|
self.video_bitrate.SetName("Video bitrate")
|
||||||
|
self.activation_bytes.SetName("Activation bytes")
|
||||||
|
self.configure_file_picker_accessibility(self.input_picker, "Input file")
|
||||||
|
self.mode_choice.SetName("Conversion mode")
|
||||||
|
self.format_choice.SetName("Output format")
|
||||||
|
self.configure_file_picker_accessibility(self.output_picker, "Output file")
|
||||||
|
self.copy_streams.SetName("Copy streams")
|
||||||
|
self.split_mp3_choice.SetName("Split MP3 into captures")
|
||||||
|
self.start_btn.SetName("Convert")
|
||||||
|
self.play_btn.SetName("Play or pause")
|
||||||
|
self.stop_btn.SetName("Stop playback")
|
||||||
|
self.input_picker.SetHelpText("Input file")
|
||||||
|
self.mode_choice.SetHelpText("Conversion mode")
|
||||||
|
self.format_choice.SetHelpText("Output format")
|
||||||
|
self.output_picker.SetHelpText("Output file")
|
||||||
|
self.audio_bitrate.SetHelpText("Audio bitrate")
|
||||||
|
self.video_bitrate.SetHelpText("Video bitrate")
|
||||||
|
self.activation_bytes.SetHelpText("Activation bytes")
|
||||||
|
self.copy_streams.SetHelpText("Copy streams")
|
||||||
|
self.split_mp3_choice.SetHelpText("Split MP3 output into captures based on chapters")
|
||||||
|
self.start_btn.SetHelpText("Convert")
|
||||||
|
self.play_btn.SetHelpText("Play or pause")
|
||||||
|
self.stop_btn.SetHelpText("Stop playback")
|
||||||
|
self.media.SetMinSize((200, 36))
|
||||||
|
if hasattr(self.media, "SetVolume"):
|
||||||
|
self.media.SetVolume(1.0)
|
||||||
|
|
||||||
form = wx.FlexGridSizer(cols=3, hgap=8, vgap=8)
|
form = wx.BoxSizer(wx.VERTICAL)
|
||||||
form.Add(wx.StaticText(panel, label="Input"), 0, wx.ALIGN_CENTER_VERTICAL)
|
self.add_labeled_control(panel, form, "&Input file", self.input_picker, "Input file")
|
||||||
form.Add(self.input_picker, 1, wx.EXPAND)
|
self.add_labeled_control(panel, form, "&Mode", self.mode_choice, "Conversion mode")
|
||||||
form.Add((1, 1))
|
self.add_labeled_control(panel, form, "F&ormat", self.format_choice, "Output format")
|
||||||
|
self.add_labeled_control(panel, form, "O&utput file", self.output_picker, "Output file")
|
||||||
form.Add(wx.StaticText(panel, label="Mode"), 0, wx.ALIGN_CENTER_VERTICAL)
|
self.add_labeled_control(panel, form, "Audio &bitrate", self.audio_bitrate, "Audio bitrate")
|
||||||
form.Add(self.mode_choice, 0)
|
self.add_labeled_control(panel, form, "Video b&itrate", self.video_bitrate, "Video bitrate")
|
||||||
form.Add((1, 1))
|
self.add_labeled_control(panel, form, "A&ctivation bytes", self.activation_bytes, "Activation bytes")
|
||||||
|
form.Add(self.copy_streams, 0, wx.EXPAND | wx.BOTTOM, 6)
|
||||||
form.Add(wx.StaticText(panel, label="Format"), 0, wx.ALIGN_CENTER_VERTICAL)
|
self.add_labeled_control(panel, form, "Split MP3 into &captures", self.split_mp3_choice, "Split MP3 into captures")
|
||||||
form.Add(self.format_choice, 0)
|
|
||||||
form.Add((1, 1))
|
|
||||||
|
|
||||||
form.Add(wx.StaticText(panel, label="Output"), 0, wx.ALIGN_CENTER_VERTICAL)
|
|
||||||
form.Add(self.output_picker, 1, wx.EXPAND)
|
|
||||||
form.Add((1, 1))
|
|
||||||
|
|
||||||
form.Add(wx.StaticText(panel, label="Audio bitrate"), 0, wx.ALIGN_CENTER_VERTICAL)
|
|
||||||
form.Add(self.audio_bitrate, 0)
|
|
||||||
form.Add(wx.StaticText(panel, label="Optional"), 0, wx.ALIGN_CENTER_VERTICAL)
|
|
||||||
|
|
||||||
form.Add(wx.StaticText(panel, label="Video bitrate"), 0, wx.ALIGN_CENTER_VERTICAL)
|
|
||||||
form.Add(self.video_bitrate, 0)
|
|
||||||
form.Add(wx.StaticText(panel, label="Optional"), 0, wx.ALIGN_CENTER_VERTICAL)
|
|
||||||
|
|
||||||
form.Add(wx.StaticText(panel, label=""), 0)
|
|
||||||
form.Add(self.copy_streams, 0)
|
|
||||||
form.Add((1, 1))
|
|
||||||
|
|
||||||
form.AddGrowableCol(1, 1)
|
|
||||||
|
|
||||||
main = wx.BoxSizer(wx.VERTICAL)
|
main = wx.BoxSizer(wx.VERTICAL)
|
||||||
main.Add(form, 0, wx.EXPAND | wx.ALL, 12)
|
main.Add(form, 0, wx.EXPAND | wx.ALL, 10)
|
||||||
main.Add(self.start_btn, 0, wx.LEFT | wx.RIGHT | wx.BOTTOM, 12)
|
main.Add(self.start_btn, 0, wx.LEFT | wx.RIGHT | wx.BOTTOM, 10)
|
||||||
main.Add(self.log_ctrl, 1, wx.EXPAND | wx.LEFT | wx.RIGHT, 12)
|
main.Add(self.build_player(panel), 0, wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, 10)
|
||||||
main.Add(self.status, 0, wx.LEFT | wx.RIGHT | wx.BOTTOM, 12)
|
main.Add(self.log_ctrl, 1, wx.EXPAND | wx.LEFT | wx.RIGHT, 10)
|
||||||
|
main.Add(self.status, 0, wx.LEFT | wx.RIGHT | wx.BOTTOM, 10)
|
||||||
|
|
||||||
panel.SetSizer(main)
|
panel.SetSizer(main)
|
||||||
|
|
||||||
@@ -77,8 +111,19 @@ class ConverterFrame(wx.Frame):
|
|||||||
self.input_picker.Bind(wx.EVT_FILEPICKER_CHANGED, self.on_input_change)
|
self.input_picker.Bind(wx.EVT_FILEPICKER_CHANGED, self.on_input_change)
|
||||||
self.start_btn.Bind(wx.EVT_BUTTON, self.on_start)
|
self.start_btn.Bind(wx.EVT_BUTTON, self.on_start)
|
||||||
|
|
||||||
|
self.play_btn.Bind(wx.EVT_BUTTON, self.on_play_pause)
|
||||||
|
self.stop_btn.Bind(wx.EVT_BUTTON, self.on_stop)
|
||||||
|
self.position_slider.Bind(wx.EVT_SLIDER, self.on_seek)
|
||||||
|
self.position_slider.Bind(wx.EVT_SCROLL_THUMBRELEASE, self.on_seek_release)
|
||||||
|
self.Bind(wx.media.EVT_MEDIA_LOADED, self.on_media_loaded, self.media)
|
||||||
|
self.Bind(wx.media.EVT_MEDIA_FINISHED, self.on_media_finished, self.media)
|
||||||
|
self.Bind(wx.EVT_TIMER, self.on_player_timer, self.player_timer)
|
||||||
|
|
||||||
|
self.setup_hotkeys()
|
||||||
|
|
||||||
self.update_format_choices()
|
self.update_format_choices()
|
||||||
self.Center()
|
self.Center()
|
||||||
|
self.player_timer.Start(250)
|
||||||
|
|
||||||
def on_mode_change(self, _event):
|
def on_mode_change(self, _event):
|
||||||
self.update_format_choices()
|
self.update_format_choices()
|
||||||
@@ -89,6 +134,7 @@ class ConverterFrame(wx.Frame):
|
|||||||
|
|
||||||
def on_input_change(self, _event):
|
def on_input_change(self, _event):
|
||||||
self.suggest_output_path()
|
self.suggest_output_path()
|
||||||
|
self.load_media_from_input()
|
||||||
|
|
||||||
def update_format_choices(self):
|
def update_format_choices(self):
|
||||||
mode = self.mode_choice.GetStringSelection()
|
mode = self.mode_choice.GetStringSelection()
|
||||||
@@ -98,6 +144,7 @@ class ConverterFrame(wx.Frame):
|
|||||||
choices = VIDEO_FORMATS
|
choices = VIDEO_FORMATS
|
||||||
self.format_choice.Set(choices)
|
self.format_choice.Set(choices)
|
||||||
self.format_choice.SetSelection(0)
|
self.format_choice.SetSelection(0)
|
||||||
|
self.update_split_option_state()
|
||||||
|
|
||||||
def suggest_output_path(self):
|
def suggest_output_path(self):
|
||||||
in_path = self.input_picker.GetPath()
|
in_path = self.input_picker.GetPath()
|
||||||
@@ -107,6 +154,193 @@ class ConverterFrame(wx.Frame):
|
|||||||
base, _ = os.path.splitext(in_path)
|
base, _ = os.path.splitext(in_path)
|
||||||
suggested = base + "." + out_ext
|
suggested = base + "." + out_ext
|
||||||
self.output_picker.SetPath(suggested)
|
self.output_picker.SetPath(suggested)
|
||||||
|
self.update_split_option_state()
|
||||||
|
|
||||||
|
def update_split_option_state(self):
|
||||||
|
is_mp3 = self.format_choice.GetStringSelection().lower() == "mp3"
|
||||||
|
self.split_mp3_choice.Enable(is_mp3)
|
||||||
|
if not is_mp3:
|
||||||
|
self.split_mp3_choice.SetSelection(0)
|
||||||
|
|
||||||
|
def build_player(self, panel):
|
||||||
|
player = wx.BoxSizer(wx.VERTICAL)
|
||||||
|
|
||||||
|
controls = wx.BoxSizer(wx.HORIZONTAL)
|
||||||
|
controls.Add(self.play_btn, 0, wx.RIGHT, 8)
|
||||||
|
controls.Add(self.stop_btn, 0, wx.RIGHT, 8)
|
||||||
|
controls.Add(self.time_label, 0, wx.ALIGN_CENTER_VERTICAL)
|
||||||
|
|
||||||
|
player.Add(self.media, 0, wx.EXPAND | wx.BOTTOM, 6)
|
||||||
|
player.Add(self.position_slider, 0, wx.EXPAND | wx.BOTTOM, 6)
|
||||||
|
player.Add(controls, 0, wx.EXPAND | wx.BOTTOM, 4)
|
||||||
|
|
||||||
|
return player
|
||||||
|
|
||||||
|
def add_labeled_control(self, panel, parent_sizer, label, control, accessible_name=None):
|
||||||
|
label_ctrl = wx.StaticText(panel, label=label)
|
||||||
|
label_ctrl.SetForegroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT))
|
||||||
|
clean_label = label.replace("&", "")
|
||||||
|
if accessible_name is None:
|
||||||
|
accessible_name = clean_label
|
||||||
|
# Keep a stable, human-readable name/description for assistive technologies.
|
||||||
|
control.SetName(accessible_name)
|
||||||
|
control.SetHelpText(accessible_name)
|
||||||
|
label_ctrl.SetName(clean_label)
|
||||||
|
# Keep label and field adjacent in tab order for native AT label lookup.
|
||||||
|
if hasattr(label_ctrl, "MoveBeforeInTabOrder"):
|
||||||
|
label_ctrl.MoveBeforeInTabOrder(control)
|
||||||
|
field_sizer = wx.BoxSizer(wx.VERTICAL)
|
||||||
|
field_sizer.Add(label_ctrl, 0, wx.BOTTOM, 2)
|
||||||
|
field_sizer.Add(control, 0, wx.EXPAND)
|
||||||
|
parent_sizer.Add(field_sizer, 0, wx.EXPAND | wx.BOTTOM, 6)
|
||||||
|
|
||||||
|
def configure_file_picker_accessibility(self, picker, label):
|
||||||
|
picker.SetName(label)
|
||||||
|
picker.SetHelpText(label)
|
||||||
|
|
||||||
|
text_ctrl = picker.GetTextCtrl()
|
||||||
|
if text_ctrl:
|
||||||
|
text_ctrl.SetName(f"{label} path")
|
||||||
|
text_ctrl.SetHelpText(label)
|
||||||
|
|
||||||
|
button = picker.GetPickerCtrl()
|
||||||
|
if button:
|
||||||
|
button.SetName(f"Browse {label}")
|
||||||
|
button.SetHelpText(f"Browse {label}")
|
||||||
|
|
||||||
|
def setup_hotkeys(self):
|
||||||
|
self.ID_PLAYPAUSE = wx.NewIdRef()
|
||||||
|
self.ID_STOP = wx.NewIdRef()
|
||||||
|
self.ID_CONVERT = wx.NewIdRef()
|
||||||
|
self.ID_SEEK_BACK = wx.NewIdRef()
|
||||||
|
self.ID_SEEK_FWD = wx.NewIdRef()
|
||||||
|
|
||||||
|
entries = [
|
||||||
|
wx.AcceleratorEntry(wx.ACCEL_NORMAL, wx.WXK_SPACE, self.ID_PLAYPAUSE),
|
||||||
|
wx.AcceleratorEntry(wx.ACCEL_CTRL, ord("S"), self.ID_STOP),
|
||||||
|
wx.AcceleratorEntry(wx.ACCEL_CTRL, wx.WXK_RETURN, self.ID_CONVERT),
|
||||||
|
wx.AcceleratorEntry(wx.ACCEL_ALT, wx.WXK_LEFT, self.ID_SEEK_BACK),
|
||||||
|
wx.AcceleratorEntry(wx.ACCEL_ALT, wx.WXK_RIGHT, self.ID_SEEK_FWD),
|
||||||
|
]
|
||||||
|
|
||||||
|
self.SetAcceleratorTable(wx.AcceleratorTable(entries))
|
||||||
|
self.Bind(wx.EVT_MENU, self.on_play_pause, id=self.ID_PLAYPAUSE)
|
||||||
|
self.Bind(wx.EVT_MENU, self.on_stop, id=self.ID_STOP)
|
||||||
|
self.Bind(wx.EVT_MENU, self.on_start, id=self.ID_CONVERT)
|
||||||
|
self.Bind(wx.EVT_MENU, self.on_seek_back, id=self.ID_SEEK_BACK)
|
||||||
|
self.Bind(wx.EVT_MENU, self.on_seek_forward, id=self.ID_SEEK_FWD)
|
||||||
|
|
||||||
|
def load_media_from_input(self):
|
||||||
|
path = self.input_picker.GetPath()
|
||||||
|
if not path:
|
||||||
|
return
|
||||||
|
self.load_media(path)
|
||||||
|
|
||||||
|
def load_media(self, path):
|
||||||
|
if not os.path.isfile(path):
|
||||||
|
return
|
||||||
|
self.media_length_ms = 0
|
||||||
|
self.media_loaded = False
|
||||||
|
self.loaded_media_path = path
|
||||||
|
self.position_slider.SetRange(0, 1000)
|
||||||
|
self.position_slider.SetValue(0)
|
||||||
|
self.update_time_label(0)
|
||||||
|
if not self.media.Load(path):
|
||||||
|
self.pending_play = False
|
||||||
|
self.append_log("Unable to load media: " + path)
|
||||||
|
else:
|
||||||
|
self.media_loaded = True
|
||||||
|
|
||||||
|
def on_media_loaded(self, _event):
|
||||||
|
self.media_loaded = True
|
||||||
|
length = self.media.Length()
|
||||||
|
if length and length > 0:
|
||||||
|
self.media_length_ms = length
|
||||||
|
self.position_slider.SetRange(0, length)
|
||||||
|
self.update_time_label(0)
|
||||||
|
if self.pending_play:
|
||||||
|
self.pending_play = False
|
||||||
|
self.media.Play()
|
||||||
|
|
||||||
|
def on_media_finished(self, _event):
|
||||||
|
self.update_time_label(self.media_length_ms)
|
||||||
|
if self.media_length_ms > 0:
|
||||||
|
self.position_slider.SetValue(self.media_length_ms)
|
||||||
|
|
||||||
|
def on_player_timer(self, _event):
|
||||||
|
if self.dragging_slider or self.media_length_ms <= 0:
|
||||||
|
return
|
||||||
|
if self.media.GetState() == wx.media.MEDIASTATE_PLAYING:
|
||||||
|
position = self.media.Tell()
|
||||||
|
if position >= 0:
|
||||||
|
self.position_slider.SetValue(position)
|
||||||
|
self.update_time_label(position)
|
||||||
|
|
||||||
|
def on_play_pause(self, _event):
|
||||||
|
path = self.input_picker.GetPath()
|
||||||
|
if not path:
|
||||||
|
return
|
||||||
|
|
||||||
|
state = self.media.GetState()
|
||||||
|
if state == wx.media.MEDIASTATE_PLAYING:
|
||||||
|
self.pending_play = False
|
||||||
|
self.media.Pause()
|
||||||
|
return
|
||||||
|
|
||||||
|
if (not self.media_loaded) or (self.loaded_media_path != path):
|
||||||
|
self.load_media(path)
|
||||||
|
|
||||||
|
if self.media.Play():
|
||||||
|
self.pending_play = False
|
||||||
|
else:
|
||||||
|
self.pending_play = True
|
||||||
|
|
||||||
|
def on_stop(self, _event):
|
||||||
|
self.pending_play = False
|
||||||
|
self.media.Stop()
|
||||||
|
self.position_slider.SetValue(0)
|
||||||
|
self.update_time_label(0)
|
||||||
|
|
||||||
|
def on_seek(self, _event):
|
||||||
|
self.dragging_slider = True
|
||||||
|
if self.media_length_ms <= 0:
|
||||||
|
return
|
||||||
|
self.update_time_label(self.position_slider.GetValue())
|
||||||
|
|
||||||
|
def on_seek_release(self, _event):
|
||||||
|
self.dragging_slider = False
|
||||||
|
if self.media_length_ms <= 0:
|
||||||
|
return
|
||||||
|
self.media.Seek(self.position_slider.GetValue())
|
||||||
|
|
||||||
|
def on_seek_back(self, _event):
|
||||||
|
self.seek_relative(-5000)
|
||||||
|
|
||||||
|
def on_seek_forward(self, _event):
|
||||||
|
self.seek_relative(5000)
|
||||||
|
|
||||||
|
def seek_relative(self, delta_ms):
|
||||||
|
if self.media_length_ms <= 0:
|
||||||
|
return
|
||||||
|
position = self.media.Tell()
|
||||||
|
if position < 0:
|
||||||
|
position = 0
|
||||||
|
new_pos = max(0, min(self.media_length_ms, position + delta_ms))
|
||||||
|
self.media.Seek(new_pos)
|
||||||
|
self.position_slider.SetValue(new_pos)
|
||||||
|
self.update_time_label(new_pos)
|
||||||
|
|
||||||
|
def update_time_label(self, position_ms):
|
||||||
|
total = self.media_length_ms
|
||||||
|
self.time_label.SetLabel(
|
||||||
|
f"{self.format_time(position_ms)} / {self.format_time(total)}"
|
||||||
|
)
|
||||||
|
|
||||||
|
def format_time(self, millis):
|
||||||
|
seconds = max(0, int(millis / 1000))
|
||||||
|
minutes = seconds // 60
|
||||||
|
seconds = seconds % 60
|
||||||
|
return f"{minutes:02d}:{seconds:02d}"
|
||||||
|
|
||||||
def on_start(self, _event):
|
def on_start(self, _event):
|
||||||
if not shutil.which("ffmpeg"):
|
if not shutil.which("ffmpeg"):
|
||||||
@@ -130,9 +364,16 @@ class ConverterFrame(wx.Frame):
|
|||||||
mode = self.mode_choice.GetStringSelection()
|
mode = self.mode_choice.GetStringSelection()
|
||||||
a_bitrate = self.audio_bitrate.GetValue().strip()
|
a_bitrate = self.audio_bitrate.GetValue().strip()
|
||||||
v_bitrate = self.video_bitrate.GetValue().strip()
|
v_bitrate = self.video_bitrate.GetValue().strip()
|
||||||
|
activation_bytes = self.activation_bytes.GetValue().strip()
|
||||||
copy = self.copy_streams.GetValue()
|
copy = self.copy_streams.GetValue()
|
||||||
|
split_mp3 = self.split_mp3_choice.GetStringSelection().lower() == "yes"
|
||||||
|
output_format = self.format_choice.GetStringSelection().lower()
|
||||||
|
should_split_mp3 = split_mp3 and output_format == "mp3"
|
||||||
|
|
||||||
cmd = ["ffmpeg", "-y", "-i", in_path]
|
cmd = ["ffmpeg", "-y"]
|
||||||
|
if activation_bytes:
|
||||||
|
cmd += ["-activation_bytes", activation_bytes]
|
||||||
|
cmd += ["-i", in_path]
|
||||||
|
|
||||||
if mode == "Audio":
|
if mode == "Audio":
|
||||||
cmd.append("-vn")
|
cmd.append("-vn")
|
||||||
@@ -149,6 +390,25 @@ class ConverterFrame(wx.Frame):
|
|||||||
if a_bitrate:
|
if a_bitrate:
|
||||||
cmd += ["-b:a", a_bitrate]
|
cmd += ["-b:a", a_bitrate]
|
||||||
|
|
||||||
|
if should_split_mp3:
|
||||||
|
chapter_times = self.get_chapter_end_times(in_path)
|
||||||
|
if chapter_times:
|
||||||
|
output_pattern = self.build_capture_output_pattern(out_path)
|
||||||
|
cmd += [
|
||||||
|
"-f",
|
||||||
|
"segment",
|
||||||
|
"-segment_times",
|
||||||
|
",".join(chapter_times),
|
||||||
|
"-reset_timestamps",
|
||||||
|
"1",
|
||||||
|
"-segment_format",
|
||||||
|
"mp3",
|
||||||
|
output_pattern,
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
self.append_log("No chapter markers found; writing a single MP3 file.")
|
||||||
|
cmd.append(out_path)
|
||||||
|
else:
|
||||||
cmd.append(out_path)
|
cmd.append(out_path)
|
||||||
|
|
||||||
self.append_log("Command: " + " ".join(cmd))
|
self.append_log("Command: " + " ".join(cmd))
|
||||||
@@ -180,6 +440,58 @@ class ConverterFrame(wx.Frame):
|
|||||||
wx.CallAfter(self.status.SetLabel, status_text)
|
wx.CallAfter(self.status.SetLabel, status_text)
|
||||||
wx.CallAfter(self.start_btn.Enable)
|
wx.CallAfter(self.start_btn.Enable)
|
||||||
|
|
||||||
|
def build_capture_output_pattern(self, out_path):
|
||||||
|
base, ext = os.path.splitext(out_path)
|
||||||
|
return f"{base}_capture_%03d{ext}"
|
||||||
|
|
||||||
|
def get_chapter_end_times(self, in_path):
|
||||||
|
if not shutil.which("ffprobe"):
|
||||||
|
self.append_log("ffprobe not found on PATH; cannot split by chapters.")
|
||||||
|
return []
|
||||||
|
cmd = [
|
||||||
|
"ffprobe",
|
||||||
|
"-v",
|
||||||
|
"error",
|
||||||
|
"-print_format",
|
||||||
|
"json",
|
||||||
|
"-show_chapters",
|
||||||
|
"-i",
|
||||||
|
in_path,
|
||||||
|
]
|
||||||
|
try:
|
||||||
|
proc = subprocess.run(
|
||||||
|
cmd,
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
stderr=subprocess.STDOUT,
|
||||||
|
text=True,
|
||||||
|
check=False,
|
||||||
|
)
|
||||||
|
if proc.returncode != 0:
|
||||||
|
self.append_log("ffprobe failed; cannot split by chapters.")
|
||||||
|
return []
|
||||||
|
data = json.loads(proc.stdout or "{}")
|
||||||
|
except Exception as exc:
|
||||||
|
self.append_log(f"ffprobe error: {exc}")
|
||||||
|
return []
|
||||||
|
|
||||||
|
chapters = data.get("chapters", [])
|
||||||
|
end_times = []
|
||||||
|
for chapter in chapters:
|
||||||
|
end_time = chapter.get("end_time")
|
||||||
|
if end_time is None:
|
||||||
|
continue
|
||||||
|
try:
|
||||||
|
end_times.append(float(end_time))
|
||||||
|
except (TypeError, ValueError):
|
||||||
|
continue
|
||||||
|
if len(end_times) <= 1:
|
||||||
|
return []
|
||||||
|
end_times = end_times[:-1]
|
||||||
|
formatted = []
|
||||||
|
for value in end_times:
|
||||||
|
formatted.append(f"{value:.3f}".rstrip("0").rstrip("."))
|
||||||
|
return formatted
|
||||||
|
|
||||||
|
|
||||||
class App(wx.App):
|
class App(wx.App):
|
||||||
def OnInit(self):
|
def OnInit(self):
|
||||||
|
|||||||
38
main.spec
Normal file
38
main.spec
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
# -*- mode: python ; coding: utf-8 -*-
|
||||||
|
|
||||||
|
|
||||||
|
a = Analysis(
|
||||||
|
['main.py'],
|
||||||
|
pathex=[],
|
||||||
|
binaries=[],
|
||||||
|
datas=[],
|
||||||
|
hiddenimports=[],
|
||||||
|
hookspath=[],
|
||||||
|
hooksconfig={},
|
||||||
|
runtime_hooks=[],
|
||||||
|
excludes=[],
|
||||||
|
noarchive=False,
|
||||||
|
optimize=0,
|
||||||
|
)
|
||||||
|
pyz = PYZ(a.pure)
|
||||||
|
|
||||||
|
exe = EXE(
|
||||||
|
pyz,
|
||||||
|
a.scripts,
|
||||||
|
a.binaries,
|
||||||
|
a.datas,
|
||||||
|
[],
|
||||||
|
name='main',
|
||||||
|
debug=False,
|
||||||
|
bootloader_ignore_signals=False,
|
||||||
|
strip=False,
|
||||||
|
upx=True,
|
||||||
|
upx_exclude=[],
|
||||||
|
runtime_tmpdir=None,
|
||||||
|
console=True,
|
||||||
|
disable_windowed_traceback=False,
|
||||||
|
argv_emulation=False,
|
||||||
|
target_arch=None,
|
||||||
|
codesign_identity=None,
|
||||||
|
entitlements_file=None,
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user