Merge branch 'develop'
This commit is contained in:
commit
b9ff22a1ad
8
.gitignore
vendored
8
.gitignore
vendored
@ -5,7 +5,7 @@ __pycache__/
|
|||||||
|
|
||||||
# C extensions
|
# C extensions
|
||||||
*.so
|
*.so
|
||||||
|
out/*
|
||||||
# Distribution / packaging
|
# Distribution / packaging
|
||||||
.Python
|
.Python
|
||||||
build/
|
build/
|
||||||
@ -136,3 +136,9 @@ dmypy.json
|
|||||||
|
|
||||||
# Cython debug symbols
|
# Cython debug symbols
|
||||||
cython_debug/
|
cython_debug/
|
||||||
|
|
||||||
|
|
||||||
|
# project_files
|
||||||
|
src/sounds/*
|
||||||
|
|
||||||
|
node_modules/
|
||||||
|
5
.idea/codeStyles/codeStyleConfig.xml
Normal file
5
.idea/codeStyles/codeStyleConfig.xml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<component name="ProjectCodeStyleConfiguration">
|
||||||
|
<state>
|
||||||
|
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
|
||||||
|
</state>
|
||||||
|
</component>
|
24
Dockerfile
Normal file
24
Dockerfile
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
FROM alpine:3.9 AS build
|
||||||
|
WORKDIR /opt/app/MagicPodcast
|
||||||
|
# Install Python and external dependencies, including headers and GCC
|
||||||
|
RUN apk add --no-cache python3 python3-dev py3-pip libffi libffi-dev musl-dev gcc
|
||||||
|
# Install Pipenv
|
||||||
|
RUN pip3 install pipenv
|
||||||
|
# Create a virtual environment and activate it
|
||||||
|
RUN python3 -m venv /opt/venv
|
||||||
|
ENV PATH="/opt/venv/bin:$PATH" VIRTUAL_ENV="/opt/venv"
|
||||||
|
# Install dependencies into the virtual environment with Pipenv
|
||||||
|
COPY Pipfile Pipfile.lock /opt/app/MagicPodcast
|
||||||
|
RUN pipenv install --deploy
|
||||||
|
FROM alpine:3.9
|
||||||
|
WORKDIR /opt/app/MagicPodcast
|
||||||
|
# Install Python and external runtime dependencies only
|
||||||
|
RUN apk add --no-cache python3 libffi
|
||||||
|
# Copy the virtual environment from the previous image
|
||||||
|
COPY --from=build /opt/venv /opt/venv
|
||||||
|
# Activate the virtual environment
|
||||||
|
ENV PATH="/opt/venv/bin:$PATH" VIRTUAL_ENV="/opt/venv"
|
||||||
|
# Copy your application
|
||||||
|
COPY . /opt/app/MagicPodcast
|
||||||
|
|
||||||
|
|
18
Jenkinsfile
vendored
Normal file
18
Jenkinsfile
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
pipeline {
|
||||||
|
agent { docker { image 'python:3.9' } }
|
||||||
|
stages {
|
||||||
|
stage('build') {
|
||||||
|
steps {
|
||||||
|
sh 'pip install pipenv'
|
||||||
|
sh 'pipenv shell --python 3.9'
|
||||||
|
sh 'pipenv run pip install -r requirements.txt'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('test') {
|
||||||
|
steps {
|
||||||
|
sh './run_tests.sh'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
6
Pipfile
6
Pipfile
@ -4,6 +4,12 @@ verify_ssl = true
|
|||||||
name = "pypi"
|
name = "pypi"
|
||||||
|
|
||||||
[packages]
|
[packages]
|
||||||
|
pyqt5 = "*"
|
||||||
|
flask = "*"
|
||||||
|
pipfile-requirements = "*"
|
||||||
|
pylama = "*"
|
||||||
|
ffmpeg = "*"
|
||||||
|
pip = "*"
|
||||||
|
|
||||||
[dev-packages]
|
[dev-packages]
|
||||||
|
|
||||||
|
207
Pipfile.lock
generated
207
Pipfile.lock
generated
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"_meta": {
|
"_meta": {
|
||||||
"hash": {
|
"hash": {
|
||||||
"sha256": "a36a5392bb1e8bbc06bfaa0761e52593cf2d83b486696bf54667ba8da616c839"
|
"sha256": "a59428c79a266fc1237cdd4e74b0803bb5f39803495f1fc6c134df7333cdc2bc"
|
||||||
},
|
},
|
||||||
"pipfile-spec": 6,
|
"pipfile-spec": 6,
|
||||||
"requires": {
|
"requires": {
|
||||||
@ -15,6 +15,209 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"default": {},
|
"default": {
|
||||||
|
"click": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a",
|
||||||
|
"sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"
|
||||||
|
],
|
||||||
|
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
|
||||||
|
"version": "==7.1.2"
|
||||||
|
},
|
||||||
|
"ffmpeg": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:6931692c890ff21d39938433c2189747815dca0c60ddc7f9bb97f199dba0b5b9"
|
||||||
|
],
|
||||||
|
"index": "pypi",
|
||||||
|
"version": "==1.4"
|
||||||
|
},
|
||||||
|
"flask": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:4efa1ae2d7c9865af48986de8aeb8504bf32c7f3d6fdc9353d34b21f4b127060",
|
||||||
|
"sha256:8a4fdd8936eba2512e9c85df320a37e694c93945b33ef33c89946a340a238557"
|
||||||
|
],
|
||||||
|
"index": "pypi",
|
||||||
|
"version": "==1.1.2"
|
||||||
|
},
|
||||||
|
"itsdangerous": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19",
|
||||||
|
"sha256:b12271b2047cb23eeb98c8b5622e2e5c5e9abd9784a153e9d8ef9cb4dd09d749"
|
||||||
|
],
|
||||||
|
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||||
|
"version": "==1.1.0"
|
||||||
|
},
|
||||||
|
"jinja2": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0",
|
||||||
|
"sha256:f0a4641d3cf955324a89c04f3d94663aa4d638abe8f733ecd3582848e1c37035"
|
||||||
|
],
|
||||||
|
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
|
||||||
|
"version": "==2.11.2"
|
||||||
|
},
|
||||||
|
"markupsafe": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473",
|
||||||
|
"sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161",
|
||||||
|
"sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235",
|
||||||
|
"sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5",
|
||||||
|
"sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42",
|
||||||
|
"sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff",
|
||||||
|
"sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b",
|
||||||
|
"sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1",
|
||||||
|
"sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e",
|
||||||
|
"sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183",
|
||||||
|
"sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66",
|
||||||
|
"sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b",
|
||||||
|
"sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1",
|
||||||
|
"sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15",
|
||||||
|
"sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1",
|
||||||
|
"sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e",
|
||||||
|
"sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b",
|
||||||
|
"sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905",
|
||||||
|
"sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735",
|
||||||
|
"sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d",
|
||||||
|
"sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e",
|
||||||
|
"sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d",
|
||||||
|
"sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c",
|
||||||
|
"sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21",
|
||||||
|
"sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2",
|
||||||
|
"sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5",
|
||||||
|
"sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b",
|
||||||
|
"sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6",
|
||||||
|
"sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f",
|
||||||
|
"sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f",
|
||||||
|
"sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2",
|
||||||
|
"sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7",
|
||||||
|
"sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be"
|
||||||
|
],
|
||||||
|
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||||
|
"version": "==1.1.1"
|
||||||
|
},
|
||||||
|
"mccabe": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42",
|
||||||
|
"sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"
|
||||||
|
],
|
||||||
|
"version": "==0.6.1"
|
||||||
|
},
|
||||||
|
"packaging": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:24e0da08660a87484d1602c30bb4902d74816b6985b93de36926f5bc95741858",
|
||||||
|
"sha256:78598185a7008a470d64526a8059de9aaa449238f280fc9eb6b13ba6c4109093"
|
||||||
|
],
|
||||||
|
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||||
|
"version": "==20.8"
|
||||||
|
},
|
||||||
|
"pipfile-requirements": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:d47591d46d8bfecf9257967992feae31fa83aff7ab6417373c7de5ea92ab849f",
|
||||||
|
"sha256:dc2ff7515ce35f8b37a500e87e7b9cd39f0f5c18eb6024543366eb6d4226869b"
|
||||||
|
],
|
||||||
|
"index": "pypi",
|
||||||
|
"version": "==0.3.0"
|
||||||
|
},
|
||||||
|
"pycodestyle": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:2295e7b2f6b5bd100585ebcb1f616591b652db8a741695b3d8f5d28bdc934367",
|
||||||
|
"sha256:c58a7d2815e0e8d7972bf1803331fb0152f867bd89adf8a01dfd55085434192e"
|
||||||
|
],
|
||||||
|
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||||
|
"version": "==2.6.0"
|
||||||
|
},
|
||||||
|
"pydocstyle": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:19b86fa8617ed916776a11cd8bc0197e5b9856d5433b777f51a3defe13075325",
|
||||||
|
"sha256:aca749e190a01726a4fb472dd4ef23b5c9da7b9205c0a7857c06533de13fd678"
|
||||||
|
],
|
||||||
|
"markers": "python_version >= '3.5'",
|
||||||
|
"version": "==5.1.1"
|
||||||
|
},
|
||||||
|
"pyflakes": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:0d94e0e05a19e57a99444b6ddcf9a6eb2e5c68d3ca1e98e90707af8152c90a92",
|
||||||
|
"sha256:35b2d75ee967ea93b55750aa9edbbf72813e06a66ba54438df2cfac9e3c27fc8"
|
||||||
|
],
|
||||||
|
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||||
|
"version": "==2.2.0"
|
||||||
|
},
|
||||||
|
"pylama": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:9bae53ef9c1a431371d6a8dca406816a60d547147b60a4934721898f553b7d8f",
|
||||||
|
"sha256:fd61c11872d6256b019ef1235be37b77c922ef37ac9797df6bd489996dddeb15"
|
||||||
|
],
|
||||||
|
"index": "pypi",
|
||||||
|
"version": "==7.7.1"
|
||||||
|
},
|
||||||
|
"pyparsing": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1",
|
||||||
|
"sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"
|
||||||
|
],
|
||||||
|
"markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||||
|
"version": "==2.4.7"
|
||||||
|
},
|
||||||
|
"pyqt5": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:29889845688a54d62820585ad5b2e0200a36b304ff3d7a555e95599f110ba4ce",
|
||||||
|
"sha256:372b08dc9321d1201e4690182697c5e7ffb2e0770e6b4a45519025134b12e4fc",
|
||||||
|
"sha256:894ca4ae767a8d6cf5903784b71f755073c78cb8c167eecf6e4ed6b3b055ac6a",
|
||||||
|
"sha256:ea24f24b7679bf393dd2e4f53fe0ce65021be18304c1ff7a226c2fc5c356d0da",
|
||||||
|
"sha256:faaecb76ec65e12673a968e7f5bc02495957e6996f0a3fa0d98895f9e4113746"
|
||||||
|
],
|
||||||
|
"index": "pypi",
|
||||||
|
"version": "==5.15.2"
|
||||||
|
},
|
||||||
|
"pyqt5-sip": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:0304ca9114b9817a270f67f421355075b78ff9fc25ac58ffd72c2601109d2194",
|
||||||
|
"sha256:0cd969be528c27bbd4755bd323dff4a79a8fdda28215364e6ce3e069cb56c2a9",
|
||||||
|
"sha256:2f35e82fd7ec1e1f6716e9154721c7594956a4f5bd4f826d8c6a6453833cc2f0",
|
||||||
|
"sha256:30e944db9abee9cc757aea16906d4198129558533eb7fadbe48c5da2bd18e0bd",
|
||||||
|
"sha256:34dcd29be47553d5f016ff86e89e24cbc5eebae92eb2f96fb32d2d7ba028c43c",
|
||||||
|
"sha256:5a011aeff89660622a6d5c3388d55a9d76932f3b82c95e82fc31abd8b1d2990d",
|
||||||
|
"sha256:6c1ebee60f1d2b3c70aff866b7933d8d8d7646011f7c32f9321ee88c290aa4f9",
|
||||||
|
"sha256:7b81382ce188d63890a0e35abe0f9bb946cabc873a31873b73583b0fc84ac115",
|
||||||
|
"sha256:832fd60a264de4134c2824d393320838f3ab648180c9c357ec58a74524d24507",
|
||||||
|
"sha256:84ba7746762bd223bed22428e8561aa267a229c28344c2d28c5d5d3f8970cffb",
|
||||||
|
"sha256:9312ec47cac4e33c11503bc1cbeeb0bdae619620472f38e2078c5a51020a930f",
|
||||||
|
"sha256:a1b8ef013086e224b8e86c93f880f776d01b59195bdfa2a8e0b23f0480678fec",
|
||||||
|
"sha256:a29e2ac399429d3b7738f73e9081e50783e61ac5d29344e0802d0dcd6056c5a2",
|
||||||
|
"sha256:b6d42250baec52a5f77de64e2951d001c5501c3a2df2179f625b241cbaec3369",
|
||||||
|
"sha256:bb5a87b66fc1445915104ee97f7a20a69decb42f52803e3b0795fa17ff88226c",
|
||||||
|
"sha256:c317ab1263e6417c498b81f5c970a9b1af7acefab1f80b4cc0f2f8e661f29fc5",
|
||||||
|
"sha256:c9800729badcb247765e4ffe2241549d02da1fa435b9db224845bc37c3e99cb0",
|
||||||
|
"sha256:c9d6d448c29dc6606bb7974696608f81f4316c8234f7c7216396ed110075e777",
|
||||||
|
"sha256:da9c9f1e65b9d09e73bd75befc82961b6b61b5a3b9d0a7c832168e1415f163c6",
|
||||||
|
"sha256:ed897c58acf4a3cdca61469daa31fe6e44c33c6c06a37c3f21fab31780b3b86a",
|
||||||
|
"sha256:f168f0a7f32b81bfeffdf003c36f25d81c97dee5eb67072a5183e761fe250f13"
|
||||||
|
],
|
||||||
|
"markers": "python_version >= '3.5'",
|
||||||
|
"version": "==12.8.1"
|
||||||
|
},
|
||||||
|
"snowballstemmer": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:209f257d7533fdb3cb73bdbd24f436239ca3b2fa67d56f6ff88e86be08cc5ef0",
|
||||||
|
"sha256:df3bac3df4c2c01363f3dd2cfa78cce2840a79b9f1c2d2de9ce8d31683992f52"
|
||||||
|
],
|
||||||
|
"version": "==2.0.0"
|
||||||
|
},
|
||||||
|
"toml": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b",
|
||||||
|
"sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"
|
||||||
|
],
|
||||||
|
"markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||||
|
"version": "==0.10.2"
|
||||||
|
},
|
||||||
|
"werkzeug": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:2de2a5db0baeae7b2d2664949077c2ac63fbd16d98da0ff71837f7d1dea3fd43",
|
||||||
|
"sha256:6c80b1e5ad3665290ea39320b91e1be1e0d5f60652b964a3070216de83d2e47c"
|
||||||
|
],
|
||||||
|
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
|
||||||
|
"version": "==1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"develop": {}
|
"develop": {}
|
||||||
}
|
}
|
||||||
|
56
find-loudness.ts
Normal file
56
find-loudness.ts
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
import { createReadStream } from "fs";
|
||||||
|
|
||||||
|
export type SwapPoint = {
|
||||||
|
position_start: number;
|
||||||
|
duration: number;
|
||||||
|
loud: boolean;
|
||||||
|
label: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default async function (
|
||||||
|
file: import("fs").PathLike,
|
||||||
|
threshold_at_point: number,
|
||||||
|
inertia_samples: number,
|
||||||
|
label: string
|
||||||
|
): Promise<SwapPoint[]> {
|
||||||
|
const stream = createReadStream(file);
|
||||||
|
let position = 0;
|
||||||
|
const results: SwapPoint[] = [];
|
||||||
|
let last_swap_position = 0;
|
||||||
|
let keep_loud_until = 0;
|
||||||
|
let was_loud_last_time = false;
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
stream.on("readable", () => {
|
||||||
|
let chunk: Buffer | null;
|
||||||
|
while ((chunk = stream.read()) !== null) {
|
||||||
|
for (let i = 0; i < chunk.byteLength; i++) {
|
||||||
|
position++;
|
||||||
|
const byte = chunk[i];
|
||||||
|
const volume = Math.abs(byte - 128);
|
||||||
|
if (position >= keep_loud_until) {
|
||||||
|
const is_loud: boolean = volume > threshold_at_point;
|
||||||
|
if (is_loud != was_loud_last_time) {
|
||||||
|
const swap_point = {
|
||||||
|
position_start: last_swap_position,
|
||||||
|
duration: position - last_swap_position,
|
||||||
|
loud: was_loud_last_time,
|
||||||
|
label,
|
||||||
|
};
|
||||||
|
results.push(swap_point);
|
||||||
|
last_swap_position = position;
|
||||||
|
was_loud_last_time = is_loud;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (volume > threshold_at_point) {
|
||||||
|
keep_loud_until = position + inertia_samples;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
stream.on("end", () => {
|
||||||
|
resolve(results);
|
||||||
|
});
|
||||||
|
|
||||||
|
stream.on("error", reject);
|
||||||
|
});
|
||||||
|
}
|
98
generate-demuxer.ts
Normal file
98
generate-demuxer.ts
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
const yargs = require('yargs');
|
||||||
|
const argv = yargs
|
||||||
|
.command('tmp_dir', 'Path to temporary dir', {
|
||||||
|
description: 'the year to check for',
|
||||||
|
alias: 'tmp',
|
||||||
|
type: 'string',
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.argv;
|
||||||
|
|
||||||
|
//console.log("The current temporary dir is: ${argv.tmp_dir}");
|
||||||
|
import findLoudness, { SwapPoint } from "./find-loudness";
|
||||||
|
|
||||||
|
const graph_density = 8000;
|
||||||
|
|
||||||
|
const threshold_at_point = 1;
|
||||||
|
|
||||||
|
const inertia_s = 0.3;
|
||||||
|
const inertia_samples = inertia_s * graph_density;
|
||||||
|
|
||||||
|
const s = (n: number) => n / graph_density;
|
||||||
|
|
||||||
|
const minutes = (units: number) => Math.floor(s(units) / 60);
|
||||||
|
|
||||||
|
const hours = (units: number) => Math.floor(units / graph_density / 60 / 60);
|
||||||
|
|
||||||
|
const formatTime = (units: number) =>
|
||||||
|
`${hours(units)}:${minutes(units)}:${Math.floor(s(units) % 60)}`;
|
||||||
|
|
||||||
|
type Mode = { left: boolean; right: boolean };
|
||||||
|
|
||||||
|
async function run() {
|
||||||
|
const [left_breaks, right_breaks] = await Promise.all([
|
||||||
|
findLoudness(argv.tmp_dir + "/leftraw",
|
||||||
|
threshold_at_point,
|
||||||
|
inertia_samples,
|
||||||
|
"left"
|
||||||
|
),
|
||||||
|
findLoudness(
|
||||||
|
argv.tmp_dir + "/rightraw",
|
||||||
|
threshold_at_point,
|
||||||
|
inertia_samples,
|
||||||
|
"right"
|
||||||
|
),
|
||||||
|
]);
|
||||||
|
|
||||||
|
const merged = [...left_breaks, ...right_breaks].sort((a, b) =>
|
||||||
|
a.position_start < b.position_start
|
||||||
|
? -1
|
||||||
|
: a.position_start > b.position_start
|
||||||
|
? 1
|
||||||
|
: 0
|
||||||
|
);
|
||||||
|
|
||||||
|
// console.log("left breaks:", left_breaks);
|
||||||
|
// console.log(`right_breaks`, right_breaks);
|
||||||
|
// console.log(`merged`, merged);
|
||||||
|
|
||||||
|
function new_mode(m: Mode, s: SwapPoint): Mode {
|
||||||
|
return { ...m, [s.label]: s.loud };
|
||||||
|
}
|
||||||
|
|
||||||
|
function mode_to_string(mode: Mode) {
|
||||||
|
if (mode.left && mode.right) {
|
||||||
|
return "both";
|
||||||
|
}
|
||||||
|
for (const side of ["left", "right"]) {
|
||||||
|
if (mode[side as keyof Mode]) {
|
||||||
|
return side;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "none";
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log("file", `${argv.tmp_dir}/pics/none.png`);
|
||||||
|
let last_point = 0;
|
||||||
|
let mode: Mode = { left: false, right: false };
|
||||||
|
let last_file;
|
||||||
|
let total = 0;
|
||||||
|
for (let i = 2; i < merged.length; i++) {
|
||||||
|
const point = merged[i];
|
||||||
|
mode = new_mode(mode, point);
|
||||||
|
const file = `${argv.tmp_dir}/pics/${mode_to_string(mode)}.png`;
|
||||||
|
const duration = (point.position_start - last_point) / graph_density;
|
||||||
|
console.log(
|
||||||
|
"duration",
|
||||||
|
(point.position_start - last_point) / graph_density
|
||||||
|
);
|
||||||
|
console.log("file", file);
|
||||||
|
last_point = point.position_start;
|
||||||
|
last_file = file;
|
||||||
|
total += duration * graph_density;
|
||||||
|
}
|
||||||
|
console.log("duration", merged[merged.length - 1].duration / graph_density);
|
||||||
|
console.log("file", last_file);
|
||||||
|
console.error(total, formatTime(total));
|
||||||
|
}
|
||||||
|
run();
|
43
generate.sh
Normal file
43
generate.sh
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
tmp_dir=$1
|
||||||
|
audio_left=$2
|
||||||
|
audio_right=$3
|
||||||
|
both_image=$4
|
||||||
|
none_image=$5
|
||||||
|
left_image=$6
|
||||||
|
right_image=$7
|
||||||
|
aresample=$8
|
||||||
|
echo "tmp_dir: $1";
|
||||||
|
echo "audio_left: $2";
|
||||||
|
echo "audio_right: $3";
|
||||||
|
echo "both_image: $4";
|
||||||
|
echo "none_image: $5";
|
||||||
|
echo "left_image: $6";
|
||||||
|
echo "right_image: $7";
|
||||||
|
|
||||||
|
echo "aresample: $8";
|
||||||
|
|
||||||
|
echo "dzielimy mp3 na dwa osobne wav"
|
||||||
|
ffmpeg -i $audio_left -map_channel 0.0.0 $tmp_dir/left.wav -map_channel 0.0.1 $tmp_dir/right.wav
|
||||||
|
|
||||||
|
echo "na dwóch wątkach generujemy surowe pliki"
|
||||||
|
ffmpeg -i $tmp_dir/left.wav -ac 1 -filter:a aresample=$aresample -map 0:a -c:a pcm_u8 -f data - > $tmp_dir/leftraw &
|
||||||
|
ffmpeg -i $tmp_dir/right.wav -ac 1 -filter:a aresample=$aresample -map 0:a -c:a pcm_u8 -f data - > $tmp_dir/rightraw &
|
||||||
|
|
||||||
|
# czekamy aż obydwa wątki się zakończą
|
||||||
|
wait;
|
||||||
|
|
||||||
|
echo "generating the demuxers...";
|
||||||
|
|
||||||
|
# generuje ścieżki do złożenia przez ffmpega:
|
||||||
|
mkdir -p ./out
|
||||||
|
ts-node generate-demuxer.ts --tmp_dir=$tmp_dir > ./out/demuxer.txt
|
||||||
|
|
||||||
|
|
||||||
|
echo "generowanie całości"
|
||||||
|
ffmpeg -y -f concat -safe 0 -i ./out/demuxer.txt -r 30 -tune stillimage -vsync vfr -pix_fmt yuv420p ./out/video.mp4
|
||||||
|
# ^ daję safe 0 aby przyjmowało bezwzględne ścieżki
|
||||||
|
|
||||||
|
|
||||||
|
echo "łączenie video z dźwiękiem:"
|
||||||
|
ffmpeg -i ./out/video.mp4 -i $audio_left -ac 1 -tune stillimage ./out/video-and-audio.mp4
|
@ -1,9 +1,12 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
|
||||||
for file in $(ls ./src/ui)
|
for file in ./src/gui/ui/*.ui
|
||||||
do
|
do
|
||||||
output_file=$(echo $file | sed -e 's/\..*$//')
|
echo "$file"
|
||||||
pipenv run python -m PyQt5.uic.pyuic -x ./src/ui/$file -o ./src/python/ui/$output_file'_ui.py'
|
[[ -e "$file" ]] || break
|
||||||
|
output_file="$(basename -s .ui "$file")"
|
||||||
|
|
||||||
|
echo "$output_file";
|
||||||
|
pipenv run python -m PyQt5.uic.pyuic -x "$file" -o ./src/python/ui/"$output_file"'_ui.py';
|
||||||
done;
|
done;
|
||||||
|
10
main.py
10
main.py
@ -0,0 +1,10 @@
|
|||||||
|
from src.python.classes.mainwindow import MainWindow
|
||||||
|
from PyQt5.QtWidgets import QApplication
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = QApplication(sys.argv)
|
||||||
|
w = MainWindow()
|
||||||
|
w.show()
|
||||||
|
sys.exit(app.exec_())
|
2528
package-lock.json
generated
Normal file
2528
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
18
package.json
Normal file
18
package.json
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"name": "vizualizer",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "ffmpeg -i odcinek1-kuba.wav -ac 1 -filter:a aresample=8000 -map 0:a -c:a pcm_s16le -f data - | hexdump",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/node": "^14.0.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"editly": "^0.3.0",
|
||||||
|
"yargs": "^16.2.0"
|
||||||
|
}
|
||||||
|
}
|
9
pylama.ini
Normal file
9
pylama.ini
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[pylama]
|
||||||
|
linters = pep8,pyflakes
|
||||||
|
format = pylint
|
||||||
|
skip = *_ui.py
|
||||||
|
#ignore = E201,E202,E231,E701
|
||||||
|
|
||||||
|
|
||||||
|
[pep8]
|
||||||
|
max_line_length = 200
|
19
requirements.txt
Normal file
19
requirements.txt
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
click==7.1.2
|
||||||
|
ffmpeg==1.4
|
||||||
|
Flask==1.1.2
|
||||||
|
itsdangerous==1.1.0
|
||||||
|
Jinja2==2.11.2
|
||||||
|
MarkupSafe==1.1.1
|
||||||
|
mccabe==0.6.1
|
||||||
|
packaging==20.8
|
||||||
|
pipfile-requirements==0.3.0
|
||||||
|
pycodestyle==2.6.0
|
||||||
|
pydocstyle==5.1.1
|
||||||
|
pyflakes==2.2.0
|
||||||
|
pylama==7.7.1
|
||||||
|
pyparsing==2.4.7
|
||||||
|
PyQt5==5.15.2
|
||||||
|
PyQt5-sip==12.8.1
|
||||||
|
snowballstemmer==2.0.0
|
||||||
|
toml==0.10.2
|
||||||
|
Werkzeug==1.0.1
|
5
run_tests.sh
Executable file
5
run_tests.sh
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
pipenv run python -m unittest discover -s ./tests/ -p 'test_*.py'
|
||||||
|
|
||||||
|
|
0
src/gui/images/__init__.py
Normal file
0
src/gui/images/__init__.py
Normal file
BIN
src/gui/images/both.png
Normal file
BIN
src/gui/images/both.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.9 MiB |
BIN
src/gui/images/left.png
Normal file
BIN
src/gui/images/left.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.9 MiB |
Before Width: | Height: | Size: 2.1 MiB After Width: | Height: | Size: 2.1 MiB |
BIN
src/gui/images/none.png
Normal file
BIN
src/gui/images/none.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.9 MiB |
BIN
src/gui/images/right.png
Normal file
BIN
src/gui/images/right.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.9 MiB |
0
src/gui/ui/__init__.py
Normal file
0
src/gui/ui/__init__.py
Normal file
710
src/gui/ui/mainwindow.ui
Normal file
710
src/gui/ui/mainwindow.ui
Normal file
@ -0,0 +1,710 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>MainWindow</class>
|
||||||
|
<widget class="QMainWindow" name="MainWindow">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>554</width>
|
||||||
|
<height>745</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>MagicPodcast</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="central_widget">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="h_layout_select_audio_1">
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="line_edit_audio_1">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>200</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string>Plik audio 1 rozmówcy</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="line_edit_name_1">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>150</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string>Imię 1 rozmówcy</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="button_audio_1">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>120</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Dodaj audio 1</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="h_layout_select_audio_2">
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="line_edit_audio_2">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>200</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string>Plik audio 2 rozmówcy</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="line_edit_name_2">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>150</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string>Imię 2 rozmówcy</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="button_audio_2">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>120</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Dodaj audio 2</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="check_box_connected_channels">
|
||||||
|
<property name="text">
|
||||||
|
<string>Zaznacz jeśli kanały rozmówców są połączone w jednym nagraniu</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="Line" name="h_line">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="w_layout_avatars_1_and_2">
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="w_layout_avatar_1">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="preview_label_avatar_1">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>150</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>300</width>
|
||||||
|
<height>150</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::Box</enum>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Podgląd - rozmówcy aktywni</string>
|
||||||
|
</property>
|
||||||
|
<property name="scaledContents">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
<property name="path" stdset="0">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="button_select_avatar_1">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>200</width>
|
||||||
|
<height>35</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>16777215</width>
|
||||||
|
<height>35</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Rozmówcy - aktywni</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="h_spacer_1">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeType">
|
||||||
|
<enum>QSizePolicy::Minimum</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>5</width>
|
||||||
|
<height>5</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="w_layout_avatar_2">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="preview_label_avatar_2">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>150</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>300</width>
|
||||||
|
<height>150</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::Box</enum>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Podgląd - rozmówcy nieaktywni</string>
|
||||||
|
</property>
|
||||||
|
<property name="scaledContents">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
<property name="path" stdset="0">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="button_select_avatar_2">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>200</width>
|
||||||
|
<height>35</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>16777215</width>
|
||||||
|
<height>35</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Rozmówcy - nieaktywni</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="v_spacer_1">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeType">
|
||||||
|
<enum>QSizePolicy::Minimum</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>5</width>
|
||||||
|
<height>5</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="w_layout_avatars_3_and_4">
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="w_layout_avatar_3">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="preview_label_avatar_3">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>150</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>300</width>
|
||||||
|
<height>150</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::Box</enum>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Podgląd - 1 rozmówca aktywny</string>
|
||||||
|
</property>
|
||||||
|
<property name="textFormat">
|
||||||
|
<enum>Qt::RichText</enum>
|
||||||
|
</property>
|
||||||
|
<property name="scaledContents">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
<property name="path" stdset="0">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="button_select_avatar_3">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>200</width>
|
||||||
|
<height>35</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>16777215</width>
|
||||||
|
<height>35</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Pierwszy rozmówca - aktywny</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="h_spacer_2">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeType">
|
||||||
|
<enum>QSizePolicy::Minimum</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>5</width>
|
||||||
|
<height>5</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="w_layout_avatar_4">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="preview_label_avatar_4">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>150</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>300</width>
|
||||||
|
<height>150</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::Box</enum>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Podgląd - 2 rozmówca aktywny</string>
|
||||||
|
</property>
|
||||||
|
<property name="scaledContents">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
<property name="path" stdset="0">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="button_select_avatar_4">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>200</width>
|
||||||
|
<height>35</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>16777215</width>
|
||||||
|
<height>35</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Drugi rozmówca - aktywny</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="Line" name="h_line_2">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="h_layout_threshold">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_threshold_description">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>200</width>
|
||||||
|
<height>25</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>250</width>
|
||||||
|
<height>50</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Poziom wykrywania głosu:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLCDNumber" name="lcd_number_of_threshold">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>30</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>200</width>
|
||||||
|
<height>50</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::Box</enum>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>QFrame::Raised</enum>
|
||||||
|
</property>
|
||||||
|
<property name="smallDecimalPoint">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="digitCount">
|
||||||
|
<number>3</number>
|
||||||
|
</property>
|
||||||
|
<property name="segmentStyle">
|
||||||
|
<enum>QLCDNumber::Filled</enum>
|
||||||
|
</property>
|
||||||
|
<property name="intValue" stdset="0">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QSlider" name="h_slider">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="Line" name="h_line_3">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="h_layout_preview_or_generate">
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="button_preview">
|
||||||
|
<property name="text">
|
||||||
|
<string>Podgląd</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="button_generate">
|
||||||
|
<property name="text">
|
||||||
|
<string>Wygeneruj podcast</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
<zorder>h_line</zorder>
|
||||||
|
<zorder>h_line_2</zorder>
|
||||||
|
<zorder>h_slider</zorder>
|
||||||
|
<zorder>h_line_3</zorder>
|
||||||
|
<zorder>v_spacer_1</zorder>
|
||||||
|
<zorder>check_box_connected_channels</zorder>
|
||||||
|
</widget>
|
||||||
|
<widget class="QMenuBar" name="menu_bar">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>554</width>
|
||||||
|
<height>32</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<widget class="QMenu" name="menu_project">
|
||||||
|
<property name="title">
|
||||||
|
<string>Projekt</string>
|
||||||
|
</property>
|
||||||
|
<addaction name="action_new"/>
|
||||||
|
<addaction name="action_open"/>
|
||||||
|
<addaction name="action_save"/>
|
||||||
|
<addaction name="action_save_as"/>
|
||||||
|
<addaction name="separator"/>
|
||||||
|
<addaction name="action_settings"/>
|
||||||
|
<addaction name="action_about"/>
|
||||||
|
<addaction name="separator"/>
|
||||||
|
<addaction name="action_exit"/>
|
||||||
|
</widget>
|
||||||
|
<addaction name="menu_project"/>
|
||||||
|
</widget>
|
||||||
|
<widget class="QStatusBar" name="status_bar"/>
|
||||||
|
<action name="action_new">
|
||||||
|
<property name="text">
|
||||||
|
<string>Nowy projekt</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Kliknij, aby utwórzyć nowy projekt</string>
|
||||||
|
</property>
|
||||||
|
<property name="shortcut">
|
||||||
|
<string>Ctrl+N</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="action_open">
|
||||||
|
<property name="text">
|
||||||
|
<string>Otwórz projekt</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Kliknij, aby otworzyć istniejący projekt</string>
|
||||||
|
</property>
|
||||||
|
<property name="shortcut">
|
||||||
|
<string>Ctrl+O</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="action_save">
|
||||||
|
<property name="text">
|
||||||
|
<string>Zapisz projekt</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Kliknij, aby zapisać aktualny projekt</string>
|
||||||
|
</property>
|
||||||
|
<property name="shortcut">
|
||||||
|
<string>Ctrl+S</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="action_save_as">
|
||||||
|
<property name="text">
|
||||||
|
<string>Zapisz projekt jako</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Kliknij, aby zapisać projekt jako</string>
|
||||||
|
</property>
|
||||||
|
<property name="shortcut">
|
||||||
|
<string>Ctrl+Shift+S</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="action_exit">
|
||||||
|
<property name="text">
|
||||||
|
<string>Zamknij program</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Kliknij, aby zakończyć działanie programu</string>
|
||||||
|
</property>
|
||||||
|
<property name="shortcut">
|
||||||
|
<string>Ctrl+W</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="action_settings">
|
||||||
|
<property name="text">
|
||||||
|
<string>Ustawienia</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Kliknij, aby przejść do ustawień programu</string>
|
||||||
|
</property>
|
||||||
|
<property name="shortcut">
|
||||||
|
<string>Ctrl+U</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="action_about">
|
||||||
|
<property name="text">
|
||||||
|
<string>O programie MagicPodcast</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Kliknij, aby wyświetlić informacje dotyczące programu MagicPodcast</string>
|
||||||
|
</property>
|
||||||
|
<property name="shortcut">
|
||||||
|
<string>Ctrl+I</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>action_exit</sender>
|
||||||
|
<signal>triggered()</signal>
|
||||||
|
<receiver>MainWindow</receiver>
|
||||||
|
<slot>close()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>-1</x>
|
||||||
|
<y>-1</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>430</x>
|
||||||
|
<y>387</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
107
src/gui/ui/preview_dialog.ui
Normal file
107
src/gui/ui/preview_dialog.ui
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>dialog</class>
|
||||||
|
<widget class="QDialog" name="dialog">
|
||||||
|
<property name="windowModality">
|
||||||
|
<enum>Qt::NonModal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>782</width>
|
||||||
|
<height>356</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Dialog</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="vertical_layout">
|
||||||
|
<item>
|
||||||
|
<widget class="QGraphicsView" name="graphics_view"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="Line" name="line">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QSlider" name="range_silder">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="tickPosition">
|
||||||
|
<enum>QSlider::TicksBothSides</enum>
|
||||||
|
</property>
|
||||||
|
<property name="tickInterval">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="Line" name="line_2">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontal_layout_2">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Początek fragmentu</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="line_edit"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>Koniec fragemntu</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="line_edit_2"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontal_layout_3">
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="push_button">
|
||||||
|
<property name="text">
|
||||||
|
<string>start</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="push_button_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>stop</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="push_button_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>zakończ</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
0
src/python/__init__.py
Normal file
0
src/python/__init__.py
Normal file
0
src/python/classes/__init__.py
Normal file
0
src/python/classes/__init__.py
Normal file
@ -1,9 +1,177 @@
|
|||||||
from pyqt5 import *
|
from PyQt5.QtGui import QPixmap
|
||||||
from src.python.ui import Ui_MainWindow
|
from PyQt5.QtWidgets import QMainWindow, QLabel,\
|
||||||
|
QFileDialog, QDialog, QDialogButtonBox, QVBoxLayout, QCheckBox
|
||||||
class MainWindow(Ui_MainWindow):
|
from PyQt5.QtCore import Qt
|
||||||
|
from src.python.ui.mainwindow_ui import Ui_MainWindow
|
||||||
def init(self):
|
import tempfile
|
||||||
super()
|
import subprocess
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
|
||||||
|
|
||||||
|
class MainWindow(QMainWindow, Ui_MainWindow):
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
super(MainWindow, self).__init__(parent=parent)
|
||||||
|
self.setupUi(self)
|
||||||
|
self.setup_logic()
|
||||||
|
|
||||||
|
self.setup_detail()
|
||||||
|
self.aresample = 8000
|
||||||
|
self.test_data()
|
||||||
|
|
||||||
|
def setup_logic(self):
|
||||||
|
self.button_audio_1.clicked.connect(lambda: self.open_audio_import(audio_number=1))
|
||||||
|
self.button_audio_2.clicked.connect(lambda: self.open_audio_import(audio_number=2))
|
||||||
|
|
||||||
|
self.check_box_connected_channels.stateChanged.connect(self.channels_connected)
|
||||||
|
|
||||||
|
self.button_select_avatar_1.clicked.connect(lambda: self.open_image_import(image_number=1))
|
||||||
|
self.button_select_avatar_2.clicked.connect(lambda: self.open_image_import(image_number=2))
|
||||||
|
self.button_select_avatar_3.clicked.connect(lambda: self.open_image_import(image_number=3))
|
||||||
|
self.button_select_avatar_4.clicked.connect(lambda: self.open_image_import(image_number=4))
|
||||||
|
|
||||||
|
self.button_generate.clicked.connect(self.generate_video_podcast)
|
||||||
|
|
||||||
|
self.check_box_connected_channels.setChecked(True)
|
||||||
|
|
||||||
|
def setup_detail(self):
|
||||||
|
self.line_edit_name_1.setDisabled(True)
|
||||||
|
self.line_edit_name_2.setDisabled(True)
|
||||||
|
|
||||||
|
def create_custom_dialog(self, title: str, msg: str):
|
||||||
|
dialog = QDialog()
|
||||||
|
dialog.setWindowTitle(title)
|
||||||
|
label = QLabel()
|
||||||
|
label.setText(msg)
|
||||||
|
label.setObjectName('message_box')
|
||||||
|
buttons = QDialogButtonBox.Ok
|
||||||
|
button_box = QDialogButtonBox(buttons)
|
||||||
|
button_box.accepted.connect(dialog.accept)
|
||||||
|
layout = QVBoxLayout()
|
||||||
|
layout.addWidget(label)
|
||||||
|
layout.addWidget(button_box)
|
||||||
|
dialog.setLayout(layout)
|
||||||
|
return dialog
|
||||||
|
|
||||||
|
def test_data(self):
|
||||||
|
self.line_edit_audio_1.setText('./src/sounds/oba_kanały.mp3')
|
||||||
|
self.preview_label_avatar_1.setProperty('path', './src/gui/images/both.png')
|
||||||
|
self.preview_label_avatar_2.setProperty('path', './src/gui/images/none.png')
|
||||||
|
self.preview_label_avatar_3.setProperty('path', './src/gui/images/left.png')
|
||||||
|
self.preview_label_avatar_4.setProperty('path', './src/gui/images/right.png')
|
||||||
|
|
||||||
|
def open_image_import(self, image_number: int):
|
||||||
|
dialog = QFileDialog()
|
||||||
|
dialog.setOption(dialog.DontUseNativeDialog, True)
|
||||||
|
dialog.setFileMode(QFileDialog.ExistingFile)
|
||||||
|
file_formats = "All Files (*);;JPG (*.jpg);;PNG (*.png)"
|
||||||
|
file, _ = dialog.getOpenFileName(self, "QFileDialog.getOpenFileName()", "", file_formats, options=dialog.options())
|
||||||
|
if not file:
|
||||||
|
msg = "[!] Nie wybrano żadnego pliku."
|
||||||
|
dialog = self.create_custom_dialog(title='Ostrzeżenie', msg=msg)
|
||||||
|
dialog.exec_()
|
||||||
|
|
||||||
|
if file and not file.lower().endswith('.jpg') and not file.lower().endswith('.png'):
|
||||||
|
msg = F"[!] Plik {file} nie jest plikiem jpg/png."
|
||||||
|
dialog = self.create_custom_dialog(title='Błąd', msg=msg)
|
||||||
|
dialog.exec_()
|
||||||
|
|
||||||
|
else:
|
||||||
|
if file:
|
||||||
|
pixmap = QPixmap(file)
|
||||||
|
|
||||||
|
scaled_pixmap = pixmap.scaled(pixmap.size(), Qt.KeepAspectRatio)
|
||||||
|
|
||||||
|
if image_number == 1:
|
||||||
|
self.preview_label_avatar_1.setProperty('path', file)
|
||||||
|
self.preview_label_avatar_1.setPixmap(scaled_pixmap)
|
||||||
|
|
||||||
|
elif image_number == 2:
|
||||||
|
self.preview_label_avatar_2.setProperty('path', file)
|
||||||
|
self.preview_label_avatar_2.setPixmap(scaled_pixmap)
|
||||||
|
|
||||||
|
elif image_number == 3:
|
||||||
|
self.preview_label_avatar_3.setProperty('path', file)
|
||||||
|
self.preview_label_avatar_3.setPixmap(scaled_pixmap)
|
||||||
|
|
||||||
|
elif image_number == 4:
|
||||||
|
self.preview_label_avatar_4.setProperty('path', file)
|
||||||
|
self.preview_label_avatar_4.setPixmap(scaled_pixmap)
|
||||||
|
|
||||||
|
print(F"[*] Zaimportowano garfikę {image_number} z pliku: '{file}'.")
|
||||||
|
print(F"[*] Rodzielczość grafiki: {pixmap.width()}x{pixmap.height()}")
|
||||||
|
|
||||||
|
def open_audio_import(self, audio_number: int):
|
||||||
|
dialog = QFileDialog()
|
||||||
|
dialog.setOption(dialog.DontUseNativeDialog, True)
|
||||||
|
dialog.setFileMode(QFileDialog.ExistingFile)
|
||||||
|
file_formats = "All Files (*);;mp3 (*.mp3);;wav (*.wav)"
|
||||||
|
file, _ = dialog.getOpenFileName(self, "QFileDialog.getOpenFileName()", "", file_formats, options=dialog.options())
|
||||||
|
if not file:
|
||||||
|
msg = "[!] Nie wybrano żadnego pliku."
|
||||||
|
dialog = self.create_custom_dialog(title='Ostrzeżenie', msg=msg)
|
||||||
|
dialog.exec_()
|
||||||
|
|
||||||
|
elif not file.lower().endswith('.mp3') and not file.lower().endswith('.wav'):
|
||||||
|
msg = F"[!] Plik {file} nie jest plikiem mp3/wav."
|
||||||
|
dialog = self.create_custom_dialog(title='Błąd', msg=msg)
|
||||||
|
dialog.exec_()
|
||||||
|
|
||||||
|
else:
|
||||||
|
if audio_number == 1:
|
||||||
|
self.line_edit_audio_1.setText(file)
|
||||||
|
|
||||||
|
elif audio_number == 2:
|
||||||
|
self.line_edit_audio_2.setText(file)
|
||||||
|
|
||||||
|
print(F"[*] Zaimportowano ścieżkę {audio_number} pliku: '{file}'.")
|
||||||
|
|
||||||
|
def channels_connected(self, checked):
|
||||||
|
print(checked)
|
||||||
|
if checked:
|
||||||
|
self.button_audio_2.setDisabled(True)
|
||||||
|
self.line_edit_audio_2.setDisabled(True)
|
||||||
|
self.line_edit_audio_1.setPlaceholderText("Plik audio rozmówców")
|
||||||
|
|
||||||
|
else:
|
||||||
|
self.button_audio_2.setDisabled(False)
|
||||||
|
self.line_edit_audio_2.setDisabled(False)
|
||||||
|
self.line_edit_audio_1.setPlaceholderText("Plik audio 1 rozmówcy")
|
||||||
|
|
||||||
|
def generate_video_podcast(self):
|
||||||
|
# TODO: Change to pure python
|
||||||
|
"""Generate podcast based on values from UI."""
|
||||||
|
audio_1 = self.line_edit_audio_1.text()
|
||||||
|
audio_2 = self.line_edit_audio_2.text()
|
||||||
|
|
||||||
|
both_image = self.preview_label_avatar_1.property('path')
|
||||||
|
none_image = self.preview_label_avatar_2.property('path')
|
||||||
|
left_image = self.preview_label_avatar_3.property('path')
|
||||||
|
right_image = self.preview_label_avatar_4.property('path')
|
||||||
|
|
||||||
|
with tempfile.TemporaryDirectory() as tmp_dir_name:
|
||||||
|
print('[*] Created temporary directory', tmp_dir_name)
|
||||||
|
pics_dir = tmp_dir_name + "/pics/"
|
||||||
|
|
||||||
|
print(f'[*] Created pics directory in {tmp_dir_name}')
|
||||||
|
os.mkdir(pics_dir)
|
||||||
|
print(f'[*] Copy images to {pics_dir}')
|
||||||
|
shutil.copy(both_image, pics_dir + "both.png")
|
||||||
|
shutil.copy(none_image, pics_dir + "none.png")
|
||||||
|
shutil.copy(left_image, pics_dir + "left.png")
|
||||||
|
shutil.copy(right_image, pics_dir + "right.png")
|
||||||
|
|
||||||
|
print(f'[*] Images in {pics_dir}: {os.listdir(pics_dir)}')
|
||||||
|
echo_temp_dir_name = subprocess.check_output(["echo", tmp_dir_name]).decode('utf-8')
|
||||||
|
|
||||||
|
ech = subprocess.check_output(["bash", "./generate.sh",
|
||||||
|
tmp_dir_name,
|
||||||
|
audio_1, audio_2,
|
||||||
|
both_image, none_image,
|
||||||
|
left_image, right_image,
|
||||||
|
str(self.aresample)]).decode('utf-8')
|
||||||
|
|
||||||
|
print(echo_temp_dir_name)
|
||||||
|
print(ech)
|
||||||
|
|
||||||
|
pass
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
# Form implementation generated from reading ui file './src/ui/mainwindow.ui'
|
# Form implementation generated from reading ui file './src/gui/ui/mainwindow.ui'
|
||||||
#
|
#
|
||||||
# Created by: PyQt5 UI code generator 5.15.2
|
# Created by: PyQt5 UI code generator 5.15.2
|
||||||
#
|
#
|
||||||
@ -14,77 +14,200 @@ from PyQt5 import QtCore, QtGui, QtWidgets
|
|||||||
class Ui_MainWindow(object):
|
class Ui_MainWindow(object):
|
||||||
def setupUi(self, MainWindow):
|
def setupUi(self, MainWindow):
|
||||||
MainWindow.setObjectName("MainWindow")
|
MainWindow.setObjectName("MainWindow")
|
||||||
MainWindow.resize(861, 775)
|
MainWindow.resize(554, 745)
|
||||||
self.central_widget = QtWidgets.QWidget(MainWindow)
|
self.central_widget = QtWidgets.QWidget(MainWindow)
|
||||||
self.central_widget.setMinimumSize(QtCore.QSize(700, 540))
|
self.central_widget.setMinimumSize(QtCore.QSize(0, 0))
|
||||||
self.central_widget.setObjectName("central_widget")
|
self.central_widget.setObjectName("central_widget")
|
||||||
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.central_widget)
|
self.verticalLayout = QtWidgets.QVBoxLayout(self.central_widget)
|
||||||
self.verticalLayout_2.setSizeConstraint(QtWidgets.QLayout.SetDefaultConstraint)
|
self.verticalLayout.setObjectName("verticalLayout")
|
||||||
self.verticalLayout_2.setObjectName("verticalLayout_2")
|
self.h_layout_select_audio_1 = QtWidgets.QHBoxLayout()
|
||||||
self.h_layout_select_audio1 = QtWidgets.QHBoxLayout()
|
self.h_layout_select_audio_1.setObjectName("h_layout_select_audio_1")
|
||||||
self.h_layout_select_audio1.setObjectName("h_layout_select_audio1")
|
self.line_edit_audio_1 = QtWidgets.QLineEdit(self.central_widget)
|
||||||
self.line_edit_audio1 = QtWidgets.QLineEdit(self.central_widget)
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
|
||||||
self.line_edit_audio1.setText("")
|
sizePolicy.setHorizontalStretch(0)
|
||||||
self.line_edit_audio1.setObjectName("line_edit_audio1")
|
sizePolicy.setVerticalStretch(0)
|
||||||
self.h_layout_select_audio1.addWidget(self.line_edit_audio1)
|
sizePolicy.setHeightForWidth(self.line_edit_audio_1.sizePolicy().hasHeightForWidth())
|
||||||
self.line_edit_name1 = QtWidgets.QLineEdit(self.central_widget)
|
self.line_edit_audio_1.setSizePolicy(sizePolicy)
|
||||||
self.line_edit_name1.setText("")
|
self.line_edit_audio_1.setMinimumSize(QtCore.QSize(200, 0))
|
||||||
self.line_edit_name1.setObjectName("line_edit_name1")
|
self.line_edit_audio_1.setText("")
|
||||||
self.h_layout_select_audio1.addWidget(self.line_edit_name1)
|
self.line_edit_audio_1.setObjectName("line_edit_audio_1")
|
||||||
self.push_button_audio1 = QtWidgets.QPushButton(self.central_widget)
|
self.h_layout_select_audio_1.addWidget(self.line_edit_audio_1)
|
||||||
self.push_button_audio1.setObjectName("push_button_audio1")
|
self.line_edit_name_1 = QtWidgets.QLineEdit(self.central_widget)
|
||||||
self.h_layout_select_audio1.addWidget(self.push_button_audio1)
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
|
||||||
self.verticalLayout_2.addLayout(self.h_layout_select_audio1)
|
sizePolicy.setHorizontalStretch(0)
|
||||||
self.h_layout_select_audio2 = QtWidgets.QHBoxLayout()
|
sizePolicy.setVerticalStretch(0)
|
||||||
self.h_layout_select_audio2.setObjectName("h_layout_select_audio2")
|
sizePolicy.setHeightForWidth(self.line_edit_name_1.sizePolicy().hasHeightForWidth())
|
||||||
self.line_edit_audio2 = QtWidgets.QLineEdit(self.central_widget)
|
self.line_edit_name_1.setSizePolicy(sizePolicy)
|
||||||
self.line_edit_audio2.setText("")
|
self.line_edit_name_1.setMinimumSize(QtCore.QSize(150, 0))
|
||||||
self.line_edit_audio2.setObjectName("line_edit_audio2")
|
self.line_edit_name_1.setText("")
|
||||||
self.h_layout_select_audio2.addWidget(self.line_edit_audio2)
|
self.line_edit_name_1.setObjectName("line_edit_name_1")
|
||||||
self.line_edit_name2 = QtWidgets.QLineEdit(self.central_widget)
|
self.h_layout_select_audio_1.addWidget(self.line_edit_name_1)
|
||||||
self.line_edit_name2.setText("")
|
self.button_audio_1 = QtWidgets.QPushButton(self.central_widget)
|
||||||
self.line_edit_name2.setObjectName("line_edit_name2")
|
self.button_audio_1.setMinimumSize(QtCore.QSize(120, 0))
|
||||||
self.h_layout_select_audio2.addWidget(self.line_edit_name2)
|
self.button_audio_1.setObjectName("button_audio_1")
|
||||||
self.push_button_audio2 = QtWidgets.QPushButton(self.central_widget)
|
self.h_layout_select_audio_1.addWidget(self.button_audio_1)
|
||||||
self.push_button_audio2.setObjectName("push_button_audio2")
|
self.verticalLayout.addLayout(self.h_layout_select_audio_1)
|
||||||
self.h_layout_select_audio2.addWidget(self.push_button_audio2)
|
self.h_layout_select_audio_2 = QtWidgets.QHBoxLayout()
|
||||||
self.verticalLayout_2.addLayout(self.h_layout_select_audio2)
|
self.h_layout_select_audio_2.setObjectName("h_layout_select_audio_2")
|
||||||
self.h_line3 = QtWidgets.QFrame(self.central_widget)
|
self.line_edit_audio_2 = QtWidgets.QLineEdit(self.central_widget)
|
||||||
self.h_line3.setFrameShape(QtWidgets.QFrame.HLine)
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
|
||||||
self.h_line3.setFrameShadow(QtWidgets.QFrame.Sunken)
|
sizePolicy.setHorizontalStretch(0)
|
||||||
self.h_line3.setObjectName("h_line3")
|
sizePolicy.setVerticalStretch(0)
|
||||||
self.verticalLayout_2.addWidget(self.h_line3)
|
sizePolicy.setHeightForWidth(self.line_edit_audio_2.sizePolicy().hasHeightForWidth())
|
||||||
self.v_layout_avatars = QtWidgets.QVBoxLayout()
|
self.line_edit_audio_2.setSizePolicy(sizePolicy)
|
||||||
self.v_layout_avatars.setObjectName("v_layout_avatars")
|
self.line_edit_audio_2.setMinimumSize(QtCore.QSize(200, 0))
|
||||||
self.h_layout_avatars_preview = QtWidgets.QHBoxLayout()
|
self.line_edit_audio_2.setText("")
|
||||||
self.h_layout_avatars_preview.setObjectName("h_layout_avatars_preview")
|
self.line_edit_audio_2.setObjectName("line_edit_audio_2")
|
||||||
self.label_avatar_1 = QtWidgets.QLabel(self.central_widget)
|
self.h_layout_select_audio_2.addWidget(self.line_edit_audio_2)
|
||||||
self.label_avatar_1.setMinimumSize(QtCore.QSize(100, 100))
|
self.line_edit_name_2 = QtWidgets.QLineEdit(self.central_widget)
|
||||||
self.label_avatar_1.setAlignment(QtCore.Qt.AlignCenter)
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
|
||||||
self.label_avatar_1.setObjectName("label_avatar_1")
|
sizePolicy.setHorizontalStretch(0)
|
||||||
self.h_layout_avatars_preview.addWidget(self.label_avatar_1)
|
sizePolicy.setVerticalStretch(0)
|
||||||
self.label_avatar_2 = QtWidgets.QLabel(self.central_widget)
|
sizePolicy.setHeightForWidth(self.line_edit_name_2.sizePolicy().hasHeightForWidth())
|
||||||
self.label_avatar_2.setMinimumSize(QtCore.QSize(100, 100))
|
self.line_edit_name_2.setSizePolicy(sizePolicy)
|
||||||
self.label_avatar_2.setAlignment(QtCore.Qt.AlignCenter)
|
self.line_edit_name_2.setMinimumSize(QtCore.QSize(150, 0))
|
||||||
self.label_avatar_2.setObjectName("label_avatar_2")
|
self.line_edit_name_2.setText("")
|
||||||
self.h_layout_avatars_preview.addWidget(self.label_avatar_2)
|
self.line_edit_name_2.setObjectName("line_edit_name_2")
|
||||||
self.v_layout_avatars.addLayout(self.h_layout_avatars_preview)
|
self.h_layout_select_audio_2.addWidget(self.line_edit_name_2)
|
||||||
self.h_layout_avatars_buttons = QtWidgets.QHBoxLayout()
|
self.button_audio_2 = QtWidgets.QPushButton(self.central_widget)
|
||||||
self.h_layout_avatars_buttons.setObjectName("h_layout_avatars_buttons")
|
self.button_audio_2.setMinimumSize(QtCore.QSize(120, 0))
|
||||||
self.push_button_select_avatar1 = QtWidgets.QPushButton(self.central_widget)
|
self.button_audio_2.setObjectName("button_audio_2")
|
||||||
self.push_button_select_avatar1.setObjectName("push_button_select_avatar1")
|
self.h_layout_select_audio_2.addWidget(self.button_audio_2)
|
||||||
self.h_layout_avatars_buttons.addWidget(self.push_button_select_avatar1)
|
self.verticalLayout.addLayout(self.h_layout_select_audio_2)
|
||||||
self.push_button_select_avatar2 = QtWidgets.QPushButton(self.central_widget)
|
self.check_box_connected_channels = QtWidgets.QCheckBox(self.central_widget)
|
||||||
self.push_button_select_avatar2.setMinimumSize(QtCore.QSize(0, 0))
|
self.check_box_connected_channels.setObjectName("check_box_connected_channels")
|
||||||
self.push_button_select_avatar2.setObjectName("push_button_select_avatar2")
|
self.verticalLayout.addWidget(self.check_box_connected_channels)
|
||||||
self.h_layout_avatars_buttons.addWidget(self.push_button_select_avatar2)
|
self.h_line = QtWidgets.QFrame(self.central_widget)
|
||||||
self.v_layout_avatars.addLayout(self.h_layout_avatars_buttons)
|
self.h_line.setFrameShape(QtWidgets.QFrame.HLine)
|
||||||
self.verticalLayout_2.addLayout(self.v_layout_avatars)
|
self.h_line.setFrameShadow(QtWidgets.QFrame.Sunken)
|
||||||
self.h_line2 = QtWidgets.QFrame(self.central_widget)
|
self.h_line.setObjectName("h_line")
|
||||||
self.h_line2.setFrameShape(QtWidgets.QFrame.HLine)
|
self.verticalLayout.addWidget(self.h_line)
|
||||||
self.h_line2.setFrameShadow(QtWidgets.QFrame.Sunken)
|
self.w_layout_avatars_1_and_2 = QtWidgets.QHBoxLayout()
|
||||||
self.h_line2.setObjectName("h_line2")
|
self.w_layout_avatars_1_and_2.setObjectName("w_layout_avatars_1_and_2")
|
||||||
self.verticalLayout_2.addWidget(self.h_line2)
|
self.w_layout_avatar_1 = QtWidgets.QVBoxLayout()
|
||||||
|
self.w_layout_avatar_1.setObjectName("w_layout_avatar_1")
|
||||||
|
self.preview_label_avatar_1 = QtWidgets.QLabel(self.central_widget)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.preview_label_avatar_1.sizePolicy().hasHeightForWidth())
|
||||||
|
self.preview_label_avatar_1.setSizePolicy(sizePolicy)
|
||||||
|
self.preview_label_avatar_1.setMinimumSize(QtCore.QSize(0, 150))
|
||||||
|
self.preview_label_avatar_1.setMaximumSize(QtCore.QSize(300, 150))
|
||||||
|
self.preview_label_avatar_1.setFrameShape(QtWidgets.QFrame.Box)
|
||||||
|
self.preview_label_avatar_1.setScaledContents(True)
|
||||||
|
self.preview_label_avatar_1.setAlignment(QtCore.Qt.AlignCenter)
|
||||||
|
self.preview_label_avatar_1.setProperty("path", "")
|
||||||
|
self.preview_label_avatar_1.setObjectName("preview_label_avatar_1")
|
||||||
|
self.w_layout_avatar_1.addWidget(self.preview_label_avatar_1)
|
||||||
|
self.button_select_avatar_1 = QtWidgets.QPushButton(self.central_widget)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.button_select_avatar_1.sizePolicy().hasHeightForWidth())
|
||||||
|
self.button_select_avatar_1.setSizePolicy(sizePolicy)
|
||||||
|
self.button_select_avatar_1.setMinimumSize(QtCore.QSize(200, 35))
|
||||||
|
self.button_select_avatar_1.setMaximumSize(QtCore.QSize(16777215, 35))
|
||||||
|
self.button_select_avatar_1.setObjectName("button_select_avatar_1")
|
||||||
|
self.w_layout_avatar_1.addWidget(self.button_select_avatar_1)
|
||||||
|
self.w_layout_avatars_1_and_2.addLayout(self.w_layout_avatar_1)
|
||||||
|
spacerItem = QtWidgets.QSpacerItem(5, 5, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
|
||||||
|
self.w_layout_avatars_1_and_2.addItem(spacerItem)
|
||||||
|
self.w_layout_avatar_2 = QtWidgets.QVBoxLayout()
|
||||||
|
self.w_layout_avatar_2.setObjectName("w_layout_avatar_2")
|
||||||
|
self.preview_label_avatar_2 = QtWidgets.QLabel(self.central_widget)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.preview_label_avatar_2.sizePolicy().hasHeightForWidth())
|
||||||
|
self.preview_label_avatar_2.setSizePolicy(sizePolicy)
|
||||||
|
self.preview_label_avatar_2.setMinimumSize(QtCore.QSize(0, 150))
|
||||||
|
self.preview_label_avatar_2.setMaximumSize(QtCore.QSize(300, 150))
|
||||||
|
self.preview_label_avatar_2.setFrameShape(QtWidgets.QFrame.Box)
|
||||||
|
self.preview_label_avatar_2.setScaledContents(True)
|
||||||
|
self.preview_label_avatar_2.setAlignment(QtCore.Qt.AlignCenter)
|
||||||
|
self.preview_label_avatar_2.setProperty("path", "")
|
||||||
|
self.preview_label_avatar_2.setObjectName("preview_label_avatar_2")
|
||||||
|
self.w_layout_avatar_2.addWidget(self.preview_label_avatar_2)
|
||||||
|
self.button_select_avatar_2 = QtWidgets.QPushButton(self.central_widget)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.button_select_avatar_2.sizePolicy().hasHeightForWidth())
|
||||||
|
self.button_select_avatar_2.setSizePolicy(sizePolicy)
|
||||||
|
self.button_select_avatar_2.setMinimumSize(QtCore.QSize(200, 35))
|
||||||
|
self.button_select_avatar_2.setMaximumSize(QtCore.QSize(16777215, 35))
|
||||||
|
self.button_select_avatar_2.setObjectName("button_select_avatar_2")
|
||||||
|
self.w_layout_avatar_2.addWidget(self.button_select_avatar_2)
|
||||||
|
self.w_layout_avatars_1_and_2.addLayout(self.w_layout_avatar_2)
|
||||||
|
self.verticalLayout.addLayout(self.w_layout_avatars_1_and_2)
|
||||||
|
spacerItem1 = QtWidgets.QSpacerItem(5, 5, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
|
||||||
|
self.verticalLayout.addItem(spacerItem1)
|
||||||
|
self.w_layout_avatars_3_and_4 = QtWidgets.QHBoxLayout()
|
||||||
|
self.w_layout_avatars_3_and_4.setObjectName("w_layout_avatars_3_and_4")
|
||||||
|
self.w_layout_avatar_3 = QtWidgets.QVBoxLayout()
|
||||||
|
self.w_layout_avatar_3.setObjectName("w_layout_avatar_3")
|
||||||
|
self.preview_label_avatar_3 = QtWidgets.QLabel(self.central_widget)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.preview_label_avatar_3.sizePolicy().hasHeightForWidth())
|
||||||
|
self.preview_label_avatar_3.setSizePolicy(sizePolicy)
|
||||||
|
self.preview_label_avatar_3.setMinimumSize(QtCore.QSize(0, 150))
|
||||||
|
self.preview_label_avatar_3.setMaximumSize(QtCore.QSize(300, 150))
|
||||||
|
self.preview_label_avatar_3.setFrameShape(QtWidgets.QFrame.Box)
|
||||||
|
self.preview_label_avatar_3.setTextFormat(QtCore.Qt.RichText)
|
||||||
|
self.preview_label_avatar_3.setScaledContents(True)
|
||||||
|
self.preview_label_avatar_3.setAlignment(QtCore.Qt.AlignCenter)
|
||||||
|
self.preview_label_avatar_3.setProperty("path", "")
|
||||||
|
self.preview_label_avatar_3.setObjectName("preview_label_avatar_3")
|
||||||
|
self.w_layout_avatar_3.addWidget(self.preview_label_avatar_3)
|
||||||
|
self.button_select_avatar_3 = QtWidgets.QPushButton(self.central_widget)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.button_select_avatar_3.sizePolicy().hasHeightForWidth())
|
||||||
|
self.button_select_avatar_3.setSizePolicy(sizePolicy)
|
||||||
|
self.button_select_avatar_3.setMinimumSize(QtCore.QSize(200, 35))
|
||||||
|
self.button_select_avatar_3.setMaximumSize(QtCore.QSize(16777215, 35))
|
||||||
|
self.button_select_avatar_3.setObjectName("button_select_avatar_3")
|
||||||
|
self.w_layout_avatar_3.addWidget(self.button_select_avatar_3)
|
||||||
|
self.w_layout_avatars_3_and_4.addLayout(self.w_layout_avatar_3)
|
||||||
|
spacerItem2 = QtWidgets.QSpacerItem(5, 5, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
|
||||||
|
self.w_layout_avatars_3_and_4.addItem(spacerItem2)
|
||||||
|
self.w_layout_avatar_4 = QtWidgets.QVBoxLayout()
|
||||||
|
self.w_layout_avatar_4.setObjectName("w_layout_avatar_4")
|
||||||
|
self.preview_label_avatar_4 = QtWidgets.QLabel(self.central_widget)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.preview_label_avatar_4.sizePolicy().hasHeightForWidth())
|
||||||
|
self.preview_label_avatar_4.setSizePolicy(sizePolicy)
|
||||||
|
self.preview_label_avatar_4.setMinimumSize(QtCore.QSize(0, 150))
|
||||||
|
self.preview_label_avatar_4.setMaximumSize(QtCore.QSize(300, 150))
|
||||||
|
self.preview_label_avatar_4.setFrameShape(QtWidgets.QFrame.Box)
|
||||||
|
self.preview_label_avatar_4.setScaledContents(True)
|
||||||
|
self.preview_label_avatar_4.setAlignment(QtCore.Qt.AlignCenter)
|
||||||
|
self.preview_label_avatar_4.setProperty("path", "")
|
||||||
|
self.preview_label_avatar_4.setObjectName("preview_label_avatar_4")
|
||||||
|
self.w_layout_avatar_4.addWidget(self.preview_label_avatar_4)
|
||||||
|
self.button_select_avatar_4 = QtWidgets.QPushButton(self.central_widget)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.button_select_avatar_4.sizePolicy().hasHeightForWidth())
|
||||||
|
self.button_select_avatar_4.setSizePolicy(sizePolicy)
|
||||||
|
self.button_select_avatar_4.setMinimumSize(QtCore.QSize(200, 35))
|
||||||
|
self.button_select_avatar_4.setMaximumSize(QtCore.QSize(16777215, 35))
|
||||||
|
self.button_select_avatar_4.setObjectName("button_select_avatar_4")
|
||||||
|
self.w_layout_avatar_4.addWidget(self.button_select_avatar_4)
|
||||||
|
self.w_layout_avatars_3_and_4.addLayout(self.w_layout_avatar_4)
|
||||||
|
self.verticalLayout.addLayout(self.w_layout_avatars_3_and_4)
|
||||||
|
self.h_line_2 = QtWidgets.QFrame(self.central_widget)
|
||||||
|
self.h_line_2.setFrameShape(QtWidgets.QFrame.HLine)
|
||||||
|
self.h_line_2.setFrameShadow(QtWidgets.QFrame.Sunken)
|
||||||
|
self.h_line_2.setObjectName("h_line_2")
|
||||||
|
self.verticalLayout.addWidget(self.h_line_2)
|
||||||
self.h_layout_threshold = QtWidgets.QHBoxLayout()
|
self.h_layout_threshold = QtWidgets.QHBoxLayout()
|
||||||
self.h_layout_threshold.setObjectName("h_layout_threshold")
|
self.h_layout_threshold.setObjectName("h_layout_threshold")
|
||||||
self.label_threshold_description = QtWidgets.QLabel(self.central_widget)
|
self.label_threshold_description = QtWidgets.QLabel(self.central_widget)
|
||||||
@ -93,7 +216,7 @@ class Ui_MainWindow(object):
|
|||||||
self.label_threshold_description.setObjectName("label_threshold_description")
|
self.label_threshold_description.setObjectName("label_threshold_description")
|
||||||
self.h_layout_threshold.addWidget(self.label_threshold_description)
|
self.h_layout_threshold.addWidget(self.label_threshold_description)
|
||||||
self.lcd_number_of_threshold = QtWidgets.QLCDNumber(self.central_widget)
|
self.lcd_number_of_threshold = QtWidgets.QLCDNumber(self.central_widget)
|
||||||
self.lcd_number_of_threshold.setMinimumSize(QtCore.QSize(100, 50))
|
self.lcd_number_of_threshold.setMinimumSize(QtCore.QSize(0, 30))
|
||||||
self.lcd_number_of_threshold.setMaximumSize(QtCore.QSize(200, 50))
|
self.lcd_number_of_threshold.setMaximumSize(QtCore.QSize(200, 50))
|
||||||
self.lcd_number_of_threshold.setFrameShape(QtWidgets.QFrame.Box)
|
self.lcd_number_of_threshold.setFrameShape(QtWidgets.QFrame.Box)
|
||||||
self.lcd_number_of_threshold.setFrameShadow(QtWidgets.QFrame.Raised)
|
self.lcd_number_of_threshold.setFrameShadow(QtWidgets.QFrame.Raised)
|
||||||
@ -103,32 +226,33 @@ class Ui_MainWindow(object):
|
|||||||
self.lcd_number_of_threshold.setProperty("intValue", 0)
|
self.lcd_number_of_threshold.setProperty("intValue", 0)
|
||||||
self.lcd_number_of_threshold.setObjectName("lcd_number_of_threshold")
|
self.lcd_number_of_threshold.setObjectName("lcd_number_of_threshold")
|
||||||
self.h_layout_threshold.addWidget(self.lcd_number_of_threshold)
|
self.h_layout_threshold.addWidget(self.lcd_number_of_threshold)
|
||||||
self.verticalLayout_2.addLayout(self.h_layout_threshold)
|
self.verticalLayout.addLayout(self.h_layout_threshold)
|
||||||
self.h_slider = QtWidgets.QSlider(self.central_widget)
|
self.h_slider = QtWidgets.QSlider(self.central_widget)
|
||||||
self.h_slider.setOrientation(QtCore.Qt.Horizontal)
|
self.h_slider.setOrientation(QtCore.Qt.Horizontal)
|
||||||
self.h_slider.setObjectName("h_slider")
|
self.h_slider.setObjectName("h_slider")
|
||||||
self.verticalLayout_2.addWidget(self.h_slider)
|
self.verticalLayout.addWidget(self.h_slider)
|
||||||
self.h_line = QtWidgets.QFrame(self.central_widget)
|
self.h_line_3 = QtWidgets.QFrame(self.central_widget)
|
||||||
self.h_line.setFrameShape(QtWidgets.QFrame.HLine)
|
self.h_line_3.setFrameShape(QtWidgets.QFrame.HLine)
|
||||||
self.h_line.setFrameShadow(QtWidgets.QFrame.Sunken)
|
self.h_line_3.setFrameShadow(QtWidgets.QFrame.Sunken)
|
||||||
self.h_line.setObjectName("h_line")
|
self.h_line_3.setObjectName("h_line_3")
|
||||||
self.verticalLayout_2.addWidget(self.h_line)
|
self.verticalLayout.addWidget(self.h_line_3)
|
||||||
self.h_layout_preview_or_generate = QtWidgets.QHBoxLayout()
|
self.h_layout_preview_or_generate = QtWidgets.QHBoxLayout()
|
||||||
self.h_layout_preview_or_generate.setObjectName("h_layout_preview_or_generate")
|
self.h_layout_preview_or_generate.setObjectName("h_layout_preview_or_generate")
|
||||||
self.push_button_preview = QtWidgets.QPushButton(self.central_widget)
|
self.button_preview = QtWidgets.QPushButton(self.central_widget)
|
||||||
self.push_button_preview.setObjectName("push_button_preview")
|
self.button_preview.setObjectName("button_preview")
|
||||||
self.h_layout_preview_or_generate.addWidget(self.push_button_preview)
|
self.h_layout_preview_or_generate.addWidget(self.button_preview)
|
||||||
self.push_button_generate = QtWidgets.QPushButton(self.central_widget)
|
self.button_generate = QtWidgets.QPushButton(self.central_widget)
|
||||||
self.push_button_generate.setObjectName("push_button_generate")
|
self.button_generate.setObjectName("button_generate")
|
||||||
self.h_layout_preview_or_generate.addWidget(self.push_button_generate)
|
self.h_layout_preview_or_generate.addWidget(self.button_generate)
|
||||||
self.verticalLayout_2.addLayout(self.h_layout_preview_or_generate)
|
self.verticalLayout.addLayout(self.h_layout_preview_or_generate)
|
||||||
self.h_line2.raise_()
|
|
||||||
self.h_line.raise_()
|
self.h_line.raise_()
|
||||||
self.h_line3.raise_()
|
self.h_line_2.raise_()
|
||||||
self.h_slider.raise_()
|
self.h_slider.raise_()
|
||||||
|
self.h_line_3.raise_()
|
||||||
|
self.check_box_connected_channels.raise_()
|
||||||
MainWindow.setCentralWidget(self.central_widget)
|
MainWindow.setCentralWidget(self.central_widget)
|
||||||
self.menu_bar = QtWidgets.QMenuBar(MainWindow)
|
self.menu_bar = QtWidgets.QMenuBar(MainWindow)
|
||||||
self.menu_bar.setGeometry(QtCore.QRect(0, 0, 861, 32))
|
self.menu_bar.setGeometry(QtCore.QRect(0, 0, 554, 32))
|
||||||
self.menu_bar.setObjectName("menu_bar")
|
self.menu_bar.setObjectName("menu_bar")
|
||||||
self.menu_project = QtWidgets.QMenu(self.menu_bar)
|
self.menu_project = QtWidgets.QMenu(self.menu_bar)
|
||||||
self.menu_project.setObjectName("menu_project")
|
self.menu_project.setObjectName("menu_project")
|
||||||
@ -168,19 +292,24 @@ class Ui_MainWindow(object):
|
|||||||
def retranslateUi(self, MainWindow):
|
def retranslateUi(self, MainWindow):
|
||||||
_translate = QtCore.QCoreApplication.translate
|
_translate = QtCore.QCoreApplication.translate
|
||||||
MainWindow.setWindowTitle(_translate("MainWindow", "MagicPodcast"))
|
MainWindow.setWindowTitle(_translate("MainWindow", "MagicPodcast"))
|
||||||
self.line_edit_audio1.setPlaceholderText(_translate("MainWindow", "Plik audio pierwszego rozmówcy"))
|
self.line_edit_audio_1.setPlaceholderText(_translate("MainWindow", "Plik audio 1 rozmówcy"))
|
||||||
self.line_edit_name1.setPlaceholderText(_translate("MainWindow", "Imię pierwszego rozmówcy"))
|
self.line_edit_name_1.setPlaceholderText(_translate("MainWindow", "Imię 1 rozmówcy"))
|
||||||
self.push_button_audio1.setText(_translate("MainWindow", "Dodaj audio 1"))
|
self.button_audio_1.setText(_translate("MainWindow", "Dodaj audio 1"))
|
||||||
self.line_edit_audio2.setPlaceholderText(_translate("MainWindow", "Plik audio drugiego rozmówcy"))
|
self.line_edit_audio_2.setPlaceholderText(_translate("MainWindow", "Plik audio 2 rozmówcy"))
|
||||||
self.line_edit_name2.setPlaceholderText(_translate("MainWindow", "Imię drugieo rozmówcy"))
|
self.line_edit_name_2.setPlaceholderText(_translate("MainWindow", "Imię 2 rozmówcy"))
|
||||||
self.push_button_audio2.setText(_translate("MainWindow", "Dodaj audio 2"))
|
self.button_audio_2.setText(_translate("MainWindow", "Dodaj audio 2"))
|
||||||
self.label_avatar_1.setText(_translate("MainWindow", "TextLabel"))
|
self.check_box_connected_channels.setText(_translate("MainWindow", "Zaznacz jeśli kanały rozmówców są połączone w jednym nagraniu"))
|
||||||
self.label_avatar_2.setText(_translate("MainWindow", "TextLabel"))
|
self.preview_label_avatar_1.setText(_translate("MainWindow", "Podgląd - rozmówcy aktywni"))
|
||||||
self.push_button_select_avatar1.setText(_translate("MainWindow", "Wybierz grafikę dla pierwszego rozmówcy"))
|
self.button_select_avatar_1.setText(_translate("MainWindow", "Rozmówcy - aktywni"))
|
||||||
self.push_button_select_avatar2.setText(_translate("MainWindow", "Wybierz grafikę dla drugiego rozmówcy"))
|
self.preview_label_avatar_2.setText(_translate("MainWindow", "Podgląd - rozmówcy nieaktywni"))
|
||||||
|
self.button_select_avatar_2.setText(_translate("MainWindow", "Rozmówcy - nieaktywni"))
|
||||||
|
self.preview_label_avatar_3.setText(_translate("MainWindow", "Podgląd - 1 rozmówca aktywny"))
|
||||||
|
self.button_select_avatar_3.setText(_translate("MainWindow", "Pierwszy rozmówca - aktywny"))
|
||||||
|
self.preview_label_avatar_4.setText(_translate("MainWindow", "Podgląd - 2 rozmówca aktywny"))
|
||||||
|
self.button_select_avatar_4.setText(_translate("MainWindow", "Drugi rozmówca - aktywny"))
|
||||||
self.label_threshold_description.setText(_translate("MainWindow", "Poziom wykrywania głosu:"))
|
self.label_threshold_description.setText(_translate("MainWindow", "Poziom wykrywania głosu:"))
|
||||||
self.push_button_preview.setText(_translate("MainWindow", "Podgląd"))
|
self.button_preview.setText(_translate("MainWindow", "Podgląd"))
|
||||||
self.push_button_generate.setText(_translate("MainWindow", "Wygeneruj podcast"))
|
self.button_generate.setText(_translate("MainWindow", "Wygeneruj podcast"))
|
||||||
self.menu_project.setTitle(_translate("MainWindow", "Projekt"))
|
self.menu_project.setTitle(_translate("MainWindow", "Projekt"))
|
||||||
self.action_new.setText(_translate("MainWindow", "Nowy projekt"))
|
self.action_new.setText(_translate("MainWindow", "Nowy projekt"))
|
||||||
self.action_new.setToolTip(_translate("MainWindow", "Kliknij, aby utwórzyć nowy projekt"))
|
self.action_new.setToolTip(_translate("MainWindow", "Kliknij, aby utwórzyć nowy projekt"))
|
||||||
|
91
src/python/ui/preview_dialog_ui.py
Normal file
91
src/python/ui/preview_dialog_ui.py
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# Form implementation generated from reading ui file './src/gui/ui/preview_dialog.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt5 UI code generator 5.15.2
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_dialog(object):
|
||||||
|
def setupUi(self, dialog):
|
||||||
|
dialog.setObjectName("dialog")
|
||||||
|
dialog.setWindowModality(QtCore.Qt.NonModal)
|
||||||
|
dialog.resize(782, 356)
|
||||||
|
self.verticalLayout = QtWidgets.QVBoxLayout(dialog)
|
||||||
|
self.verticalLayout.setObjectName("verticalLayout")
|
||||||
|
self.vertical_layout = QtWidgets.QVBoxLayout()
|
||||||
|
self.vertical_layout.setObjectName("vertical_layout")
|
||||||
|
self.graphics_view = QtWidgets.QGraphicsView(dialog)
|
||||||
|
self.graphics_view.setObjectName("graphics_view")
|
||||||
|
self.vertical_layout.addWidget(self.graphics_view)
|
||||||
|
self.line = QtWidgets.QFrame(dialog)
|
||||||
|
self.line.setFrameShape(QtWidgets.QFrame.HLine)
|
||||||
|
self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
|
||||||
|
self.line.setObjectName("line")
|
||||||
|
self.vertical_layout.addWidget(self.line)
|
||||||
|
self.range_silder = QtWidgets.QSlider(dialog)
|
||||||
|
self.range_silder.setOrientation(QtCore.Qt.Horizontal)
|
||||||
|
self.range_silder.setTickPosition(QtWidgets.QSlider.TicksBothSides)
|
||||||
|
self.range_silder.setTickInterval(1)
|
||||||
|
self.range_silder.setObjectName("range_silder")
|
||||||
|
self.vertical_layout.addWidget(self.range_silder)
|
||||||
|
self.line_2 = QtWidgets.QFrame(dialog)
|
||||||
|
self.line_2.setFrameShape(QtWidgets.QFrame.HLine)
|
||||||
|
self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken)
|
||||||
|
self.line_2.setObjectName("line_2")
|
||||||
|
self.vertical_layout.addWidget(self.line_2)
|
||||||
|
self.horizontal_layout_2 = QtWidgets.QHBoxLayout()
|
||||||
|
self.horizontal_layout_2.setObjectName("horizontal_layout_2")
|
||||||
|
self.label = QtWidgets.QLabel(dialog)
|
||||||
|
self.label.setObjectName("label")
|
||||||
|
self.horizontal_layout_2.addWidget(self.label)
|
||||||
|
self.line_edit = QtWidgets.QLineEdit(dialog)
|
||||||
|
self.line_edit.setObjectName("line_edit")
|
||||||
|
self.horizontal_layout_2.addWidget(self.line_edit)
|
||||||
|
self.label_2 = QtWidgets.QLabel(dialog)
|
||||||
|
self.label_2.setObjectName("label_2")
|
||||||
|
self.horizontal_layout_2.addWidget(self.label_2)
|
||||||
|
self.line_edit_2 = QtWidgets.QLineEdit(dialog)
|
||||||
|
self.line_edit_2.setObjectName("line_edit_2")
|
||||||
|
self.horizontal_layout_2.addWidget(self.line_edit_2)
|
||||||
|
self.vertical_layout.addLayout(self.horizontal_layout_2)
|
||||||
|
self.horizontal_layout_3 = QtWidgets.QHBoxLayout()
|
||||||
|
self.horizontal_layout_3.setObjectName("horizontal_layout_3")
|
||||||
|
self.push_button = QtWidgets.QPushButton(dialog)
|
||||||
|
self.push_button.setObjectName("push_button")
|
||||||
|
self.horizontal_layout_3.addWidget(self.push_button)
|
||||||
|
self.push_button_2 = QtWidgets.QPushButton(dialog)
|
||||||
|
self.push_button_2.setObjectName("push_button_2")
|
||||||
|
self.horizontal_layout_3.addWidget(self.push_button_2)
|
||||||
|
self.push_button_3 = QtWidgets.QPushButton(dialog)
|
||||||
|
self.push_button_3.setObjectName("push_button_3")
|
||||||
|
self.horizontal_layout_3.addWidget(self.push_button_3)
|
||||||
|
self.vertical_layout.addLayout(self.horizontal_layout_3)
|
||||||
|
self.verticalLayout.addLayout(self.vertical_layout)
|
||||||
|
|
||||||
|
self.retranslateUi(dialog)
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(dialog)
|
||||||
|
|
||||||
|
def retranslateUi(self, dialog):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
dialog.setWindowTitle(_translate("dialog", "Dialog"))
|
||||||
|
self.label.setText(_translate("dialog", "Początek fragmentu"))
|
||||||
|
self.label_2.setText(_translate("dialog", "Koniec fragemntu"))
|
||||||
|
self.push_button.setText(_translate("dialog", "start"))
|
||||||
|
self.push_button_2.setText(_translate("dialog", "stop"))
|
||||||
|
self.push_button_3.setText(_translate("dialog", "zakończ"))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import sys
|
||||||
|
app = QtWidgets.QApplication(sys.argv)
|
||||||
|
dialog = QtWidgets.QDialog()
|
||||||
|
ui = Ui_dialog()
|
||||||
|
ui.setupUi(dialog)
|
||||||
|
dialog.show()
|
||||||
|
sys.exit(app.exec_())
|
@ -1,386 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<ui version="4.0">
|
|
||||||
<class>MainWindow</class>
|
|
||||||
<widget class="QMainWindow" name="MainWindow">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>861</width>
|
|
||||||
<height>775</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="windowTitle">
|
|
||||||
<string>MagicPodcast</string>
|
|
||||||
</property>
|
|
||||||
<widget class="QWidget" name="central_widget">
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>700</width>
|
|
||||||
<height>540</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
|
||||||
<property name="sizeConstraint">
|
|
||||||
<enum>QLayout::SetDefaultConstraint</enum>
|
|
||||||
</property>
|
|
||||||
<item>
|
|
||||||
<layout class="QHBoxLayout" name="h_layout_select_audio1">
|
|
||||||
<item>
|
|
||||||
<widget class="QLineEdit" name="line_edit_audio1">
|
|
||||||
<property name="text">
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
<property name="placeholderText">
|
|
||||||
<string>Plik audio pierwszego rozmówcy</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLineEdit" name="line_edit_name1">
|
|
||||||
<property name="text">
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
<property name="placeholderText">
|
|
||||||
<string>Imię pierwszego rozmówcy</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QPushButton" name="push_button_audio1">
|
|
||||||
<property name="text">
|
|
||||||
<string>Dodaj audio 1</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<layout class="QHBoxLayout" name="h_layout_select_audio2">
|
|
||||||
<item>
|
|
||||||
<widget class="QLineEdit" name="line_edit_audio2">
|
|
||||||
<property name="text">
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
<property name="placeholderText">
|
|
||||||
<string>Plik audio drugiego rozmówcy</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLineEdit" name="line_edit_name2">
|
|
||||||
<property name="text">
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
<property name="placeholderText">
|
|
||||||
<string>Imię drugieo rozmówcy</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QPushButton" name="push_button_audio2">
|
|
||||||
<property name="text">
|
|
||||||
<string>Dodaj audio 2</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="Line" name="h_line3">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<layout class="QVBoxLayout" name="v_layout_avatars">
|
|
||||||
<item>
|
|
||||||
<layout class="QHBoxLayout" name="h_layout_avatars_preview">
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="label_avatar_1">
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>100</width>
|
|
||||||
<height>100</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>TextLabel</string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignCenter</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="label_avatar_2">
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>100</width>
|
|
||||||
<height>100</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>TextLabel</string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignCenter</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<layout class="QHBoxLayout" name="h_layout_avatars_buttons">
|
|
||||||
<item>
|
|
||||||
<widget class="QPushButton" name="push_button_select_avatar1">
|
|
||||||
<property name="text">
|
|
||||||
<string>Wybierz grafikę dla pierwszego rozmówcy</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QPushButton" name="push_button_select_avatar2">
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>0</width>
|
|
||||||
<height>0</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Wybierz grafikę dla drugiego rozmówcy</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="Line" name="h_line2">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<layout class="QHBoxLayout" name="h_layout_threshold">
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="label_threshold_description">
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>200</width>
|
|
||||||
<height>25</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="maximumSize">
|
|
||||||
<size>
|
|
||||||
<width>250</width>
|
|
||||||
<height>50</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Poziom wykrywania głosu:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLCDNumber" name="lcd_number_of_threshold">
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>100</width>
|
|
||||||
<height>50</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="maximumSize">
|
|
||||||
<size>
|
|
||||||
<width>200</width>
|
|
||||||
<height>50</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="frameShape">
|
|
||||||
<enum>QFrame::Box</enum>
|
|
||||||
</property>
|
|
||||||
<property name="frameShadow">
|
|
||||||
<enum>QFrame::Raised</enum>
|
|
||||||
</property>
|
|
||||||
<property name="smallDecimalPoint">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
<property name="digitCount">
|
|
||||||
<number>3</number>
|
|
||||||
</property>
|
|
||||||
<property name="segmentStyle">
|
|
||||||
<enum>QLCDNumber::Filled</enum>
|
|
||||||
</property>
|
|
||||||
<property name="intValue" stdset="0">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QSlider" name="h_slider">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="Line" name="h_line">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<layout class="QHBoxLayout" name="h_layout_preview_or_generate">
|
|
||||||
<item>
|
|
||||||
<widget class="QPushButton" name="push_button_preview">
|
|
||||||
<property name="text">
|
|
||||||
<string>Podgląd</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QPushButton" name="push_button_generate">
|
|
||||||
<property name="text">
|
|
||||||
<string>Wygeneruj podcast</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
<zorder>h_line2</zorder>
|
|
||||||
<zorder>h_line</zorder>
|
|
||||||
<zorder>h_line3</zorder>
|
|
||||||
<zorder>h_slider</zorder>
|
|
||||||
<zorder>verticalLayoutWidget</zorder>
|
|
||||||
</widget>
|
|
||||||
<widget class="QMenuBar" name="menu_bar">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>861</width>
|
|
||||||
<height>32</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<widget class="QMenu" name="menu_project">
|
|
||||||
<property name="title">
|
|
||||||
<string>Projekt</string>
|
|
||||||
</property>
|
|
||||||
<addaction name="action_new"/>
|
|
||||||
<addaction name="action_open"/>
|
|
||||||
<addaction name="action_save"/>
|
|
||||||
<addaction name="action_save_as"/>
|
|
||||||
<addaction name="separator"/>
|
|
||||||
<addaction name="action_settings"/>
|
|
||||||
<addaction name="action_about"/>
|
|
||||||
<addaction name="separator"/>
|
|
||||||
<addaction name="action_exit"/>
|
|
||||||
</widget>
|
|
||||||
<addaction name="menu_project"/>
|
|
||||||
</widget>
|
|
||||||
<widget class="QStatusBar" name="status_bar"/>
|
|
||||||
<action name="action_new">
|
|
||||||
<property name="text">
|
|
||||||
<string>Nowy projekt</string>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Kliknij, aby utwórzyć nowy projekt</string>
|
|
||||||
</property>
|
|
||||||
<property name="shortcut">
|
|
||||||
<string>Ctrl+N</string>
|
|
||||||
</property>
|
|
||||||
</action>
|
|
||||||
<action name="action_open">
|
|
||||||
<property name="text">
|
|
||||||
<string>Otwórz projekt</string>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Kliknij, aby otworzyć istniejący projekt</string>
|
|
||||||
</property>
|
|
||||||
<property name="shortcut">
|
|
||||||
<string>Ctrl+O</string>
|
|
||||||
</property>
|
|
||||||
</action>
|
|
||||||
<action name="action_save">
|
|
||||||
<property name="text">
|
|
||||||
<string>Zapisz projekt</string>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Kliknij, aby zapisać aktualny projekt</string>
|
|
||||||
</property>
|
|
||||||
<property name="shortcut">
|
|
||||||
<string>Ctrl+S</string>
|
|
||||||
</property>
|
|
||||||
</action>
|
|
||||||
<action name="action_save_as">
|
|
||||||
<property name="text">
|
|
||||||
<string>Zapisz projekt jako</string>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Kliknij, aby zapisać projekt jako</string>
|
|
||||||
</property>
|
|
||||||
<property name="shortcut">
|
|
||||||
<string>Ctrl+Shift+S</string>
|
|
||||||
</property>
|
|
||||||
</action>
|
|
||||||
<action name="action_exit">
|
|
||||||
<property name="text">
|
|
||||||
<string>Zamknij program</string>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Kliknij, aby zakończyć działanie programu</string>
|
|
||||||
</property>
|
|
||||||
<property name="shortcut">
|
|
||||||
<string>Ctrl+W</string>
|
|
||||||
</property>
|
|
||||||
</action>
|
|
||||||
<action name="action_settings">
|
|
||||||
<property name="text">
|
|
||||||
<string>Ustawienia</string>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Kliknij, aby przejść do ustawień programu</string>
|
|
||||||
</property>
|
|
||||||
<property name="shortcut">
|
|
||||||
<string>Ctrl+U</string>
|
|
||||||
</property>
|
|
||||||
</action>
|
|
||||||
<action name="action_about">
|
|
||||||
<property name="text">
|
|
||||||
<string>O programie MagicPodcast</string>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Kliknij, aby wyświetlić informacje dotyczące programu MagicPodcast</string>
|
|
||||||
</property>
|
|
||||||
<property name="shortcut">
|
|
||||||
<string>Ctrl+I</string>
|
|
||||||
</property>
|
|
||||||
</action>
|
|
||||||
</widget>
|
|
||||||
<resources/>
|
|
||||||
<connections>
|
|
||||||
<connection>
|
|
||||||
<sender>action_exit</sender>
|
|
||||||
<signal>triggered()</signal>
|
|
||||||
<receiver>MainWindow</receiver>
|
|
||||||
<slot>close()</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>-1</x>
|
|
||||||
<y>-1</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>430</x>
|
|
||||||
<y>387</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
</connections>
|
|
||||||
</ui>
|
|
0
tests/__init__.py
Normal file
0
tests/__init__.py
Normal file
0
tests/gui_tests/__init__.py
Normal file
0
tests/gui_tests/__init__.py
Normal file
32
tests/gui_tests/test_mainwindow_ui.py
Normal file
32
tests/gui_tests/test_mainwindow_ui.py
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
from src.python.ui.mainwindow_ui import Ui_MainWindow
|
||||||
|
from src.python.classes.mainwindow import MainWindow
|
||||||
|
import unittest
|
||||||
|
from PyQt5.QtWidgets import QApplication, QDialog, QLabel
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
class Test_Ui_MainWindow(unittest.TestCase):
|
||||||
|
app = QApplication(sys.argv)
|
||||||
|
|
||||||
|
def setUp(self) -> None:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def tearDown(self) -> None:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def test_create_mainwindow(self):
|
||||||
|
ui_mainwindow = Ui_MainWindow()
|
||||||
|
self.assertIsInstance(ui_mainwindow, Ui_MainWindow)
|
||||||
|
|
||||||
|
def test_create_dialog(self):
|
||||||
|
mainwindow = MainWindow()
|
||||||
|
title = "test create dialog"
|
||||||
|
msg = "test msg"
|
||||||
|
dialog: QDialog = mainwindow.create_custom_dialog(title=title, msg=msg)
|
||||||
|
self.assertIsInstance(dialog, QDialog)
|
||||||
|
self.assertEqual(dialog.windowTitle(), title)
|
||||||
|
self.assertEqual(dialog.findChild(QLabel, name='message_box').text(), msg)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
0
tests/logic_tests/__init__.py
Normal file
0
tests/logic_tests/__init__.py
Normal file
9
tests/logic_tests/test_mainwindow.py
Normal file
9
tests/logic_tests/test_mainwindow.py
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
from unittest.mock import Mock
|
||||||
|
|
||||||
|
|
||||||
|
class TestMockMainwindown(Mock):
|
||||||
|
def __init__(self, module_name=''):
|
||||||
|
self.module_name = 'Test'
|
||||||
|
|
||||||
|
def test_nothing(self):
|
||||||
|
print(self.module_name)
|
14
tsconfig.json
Normal file
14
tsconfig.json
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"moduleResolution": "node",
|
||||||
|
"noImplicitAny": true,
|
||||||
|
"noImplicitThis": true,
|
||||||
|
"sourceMap": true,
|
||||||
|
"module": "commonjs",
|
||||||
|
"target": "es6",
|
||||||
|
"allowJs": false,
|
||||||
|
"strictNullChecks": true,
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"outDir": "build"
|
||||||
|
}
|
||||||
|
}
|
26
window.ts
Normal file
26
window.ts
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
export default class Window {
|
||||||
|
length: number;
|
||||||
|
buffer: number[] = [];
|
||||||
|
constructor(length: number) {
|
||||||
|
this.length = length;
|
||||||
|
}
|
||||||
|
|
||||||
|
push(element: number) {
|
||||||
|
if (this.buffer.length == this.length) {
|
||||||
|
this.buffer.shift();
|
||||||
|
}
|
||||||
|
this.buffer.push(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
sum() {
|
||||||
|
return this.buffer.reduce((a, b) => a + b, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
clear() {
|
||||||
|
this.buffer = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
isFull() {
|
||||||
|
return this.buffer.length == this.length;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user