Compare commits

...

4 Commits

Author SHA1 Message Date
Derek 9937951e69 Minor cleanup 2022-04-30 03:01:29 -04:00
Derek 0321899058 [Plugins/AudioAlert] Tweak resample logic
Attempt to playback alert at native rate even if driver claims its 
unsupported (some, like PulseAudio, reject them all but will resample 
for you)
2022-04-30 03:01:29 -04:00
Derek f51595af62 [Core] Plugin Webserver + asyncio event loop 2022-04-30 03:01:29 -04:00
Derek f06d16ba1f [Misskey] Fix unchanged usernames appearing blank 2022-04-30 03:01:29 -04:00
7 changed files with 343 additions and 166 deletions

View File

@ -25,6 +25,8 @@ python-rtmidi = "*"
soxr = "*" soxr = "*"
librosa = "*" librosa = "*"
pytsmod = "*" pytsmod = "*"
quart = "*"
aioscheduler = "*"
[requires] [requires]
python_version = "3.10" python_version = "3.10"

373
Pipfile.lock generated
View File

@ -1,7 +1,7 @@
{ {
"_meta": { "_meta": {
"hash": { "hash": {
"sha256": "5830f653bbb51868aa66091cc44edaed6ec116ac22b1a8dd6aea1d9035c6a71e" "sha256": "2ff995d9cbd0633a189fd41ec26c1f0431fe0029babbe0a4faa2a9e2f5b3eb66"
}, },
"pipfile-spec": 6, "pipfile-spec": 6,
"requires": { "requires": {
@ -16,6 +16,22 @@
] ]
}, },
"default": { "default": {
"aiofiles": {
"hashes": [
"sha256:7a973fc22b29e9962d0897805ace5856e6a566ab1f0c8e5c91ff6c866519c937",
"sha256:8334f23235248a3b2e83b2c3a78a22674f39969b96397126cc93664d9a901e59"
],
"markers": "python_version >= '3.6' and python_version < '4.0'",
"version": "==0.8.0"
},
"aioscheduler": {
"hashes": [
"sha256:8aaeb7bc01df82136fca38e77f4fc75a503c1d78d23917e15ee8c540e3e4bc23",
"sha256:9fb189c77252baf469f1b2f74dc8321f8516bc3a0428b4160314c0df22ebee06"
],
"index": "pypi",
"version": "==1.4.2"
},
"appdirs": { "appdirs": {
"hashes": [ "hashes": [
"sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41", "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41",
@ -38,6 +54,12 @@
"index": "pypi", "index": "pypi",
"version": "==1.19.1" "version": "==1.19.1"
}, },
"blinker": {
"hashes": [
"sha256:471aee25f3992bd325afa3772f1063dbdbbca947a041b8b89466dc00d606f8b6"
],
"version": "==1.4"
},
"certifi": { "certifi": {
"hashes": [ "hashes": [
"sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872", "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872",
@ -110,11 +132,11 @@
}, },
"click": { "click": {
"hashes": [ "hashes": [
"sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e", "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e",
"sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72" "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"
], ],
"index": "pypi", "index": "pypi",
"version": "==8.1.2" "version": "==8.1.3"
}, },
"dateparser": { "dateparser": {
"hashes": [ "hashes": [
@ -138,6 +160,30 @@
], ],
"version": "==0.6.2" "version": "==0.6.2"
}, },
"h11": {
"hashes": [
"sha256:70813c1135087a248a4d38cc0e1a0181ffab2188141a93eaf567940c3957ff06",
"sha256:8ddd78563b633ca55346c8cd41ec0af27d3c79931828beffb46ce70a379e7442"
],
"markers": "python_version >= '3.6'",
"version": "==0.13.0"
},
"h2": {
"hashes": [
"sha256:03a46bcf682256c95b5fd9e9a99c1323584c3eec6440d379b9903d709476bc6d",
"sha256:a83aca08fbe7aacb79fec788c9c0bac936343560ed9ec18b82a13a12c28d2abb"
],
"markers": "python_full_version >= '3.6.1'",
"version": "==4.1.0"
},
"hpack": {
"hashes": [
"sha256:84a076fad3dc9a9f8063ccb8041ef100867b1878b25ef0ee63847a5d53818a6c",
"sha256:fc41de0c63e687ebffde81187a948221294896f6bdc0ae2312708df339430095"
],
"markers": "python_full_version >= '3.6.1'",
"version": "==4.0.0"
},
"humanize": { "humanize": {
"hashes": [ "hashes": [
"sha256:8d86333b8557dacffd4dce1dbe09c81c189e2caf7bb17a970b2212f0f58f10f2", "sha256:8d86333b8557dacffd4dce1dbe09c81c189e2caf7bb17a970b2212f0f58f10f2",
@ -146,6 +192,22 @@
"markers": "python_version >= '3.7'", "markers": "python_version >= '3.7'",
"version": "==4.0.0" "version": "==4.0.0"
}, },
"hypercorn": {
"hashes": [
"sha256:6307be5cbdf6ba411967d4661202dc4f79bd511b5d318bc4eed88b09418427f8",
"sha256:ca18f91ab3fa823cbe9e949738f9f2cc07027cd647c80d8f93e4b1a2a175f112"
],
"markers": "python_version >= '3.7'",
"version": "==0.13.2"
},
"hyperframe": {
"hashes": [
"sha256:0ec6bafd80d8ad2195c4f03aacba3a8265e57bc4cff261e802bf39970ed02a15",
"sha256:ae510046231dc8e9ecb1a6586f63d2347bf4c8905914aa84ba585ae85f28a914"
],
"markers": "python_full_version >= '3.6.1'",
"version": "==6.0.1"
},
"idna": { "idna": {
"hashes": [ "hashes": [
"sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff", "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff",
@ -154,6 +216,22 @@
"markers": "python_version >= '3.0'", "markers": "python_version >= '3.0'",
"version": "==3.3" "version": "==3.3"
}, },
"itsdangerous": {
"hashes": [
"sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44",
"sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a"
],
"markers": "python_version >= '3.7'",
"version": "==2.1.2"
},
"jinja2": {
"hashes": [
"sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852",
"sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"
],
"markers": "python_version >= '3.7'",
"version": "==3.1.2"
},
"joblib": { "joblib": {
"hashes": [ "hashes": [
"sha256:4158fcecd13733f8be669be0683b96ebdbbd38d23559f54dca7205aea1bf1e35", "sha256:4158fcecd13733f8be669be0683b96ebdbbd38d23559f54dca7205aea1bf1e35",
@ -209,6 +287,52 @@
"markers": "python_version < '3.11' and python_version >= '3.7'", "markers": "python_version < '3.11' and python_version >= '3.7'",
"version": "==0.38.0" "version": "==0.38.0"
}, },
"markupsafe": {
"hashes": [
"sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003",
"sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88",
"sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5",
"sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7",
"sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a",
"sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603",
"sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1",
"sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135",
"sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247",
"sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6",
"sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601",
"sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77",
"sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02",
"sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e",
"sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63",
"sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f",
"sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980",
"sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b",
"sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812",
"sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff",
"sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96",
"sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1",
"sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925",
"sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a",
"sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6",
"sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e",
"sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f",
"sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4",
"sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f",
"sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3",
"sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c",
"sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a",
"sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417",
"sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a",
"sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a",
"sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37",
"sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452",
"sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933",
"sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a",
"sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"
],
"markers": "python_version >= '3.7'",
"version": "==2.1.1"
},
"maya": { "maya": {
"hashes": [ "hashes": [
"sha256:7f53e06d5a123613dce7c270cbc647643a6942590dba7a19ec36194d0338c3f4", "sha256:7f53e06d5a123613dce7c270cbc647643a6942590dba7a19ec36194d0338c3f4",
@ -227,11 +351,11 @@
}, },
"miniirc": { "miniirc": {
"hashes": [ "hashes": [
"sha256:1bfb35b05185518ca6ca12bc073492d317ea2492f6ef309743e44389d2d0695e", "sha256:4959ceaab18961f21047de97a6eda591accc731feebfdd5c5365d9b7d5767815",
"sha256:56db61fcd557dec633c1a88bf2606d4aa9c7e1ee16d11c9ffdbcc308fb4d24ab" "sha256:e2133fc59a3c8d40c576e0fa3a283db7b52cfcd0b1fcd60901346945aac45aa4"
], ],
"index": "pypi", "index": "pypi",
"version": "==1.8.1" "version": "==1.8.2"
}, },
"multipledispatch": { "multipledispatch": {
"hashes": [ "hashes": [
@ -283,39 +407,40 @@
}, },
"numpy": { "numpy": {
"hashes": [ "hashes": [
"sha256:00c9fa73a6989895b8815d98300a20ac993c49ac36c8277e8ffeaa3631c0dbbb", "sha256:1dbe1c91269f880e364526649a52eff93ac30035507ae980d2fed33aaee633ac",
"sha256:025b497014bc33fc23897859350f284323f32a2fff7654697f5a5fc2a19e9939", "sha256:357768c2e4451ac241465157a3e929b265dfac85d9214074985b1786244f2ef3",
"sha256:08de8472d9f7571f9d51b27b75e827f5296295fa78817032e84464be8bb905bc", "sha256:3820724272f9913b597ccd13a467cc492a0da6b05df26ea09e78b171a0bb9da6",
"sha256:1964db2d4a00348b7a60ee9d013c8cb0c566644a589eaa80995126eac3b99ced", "sha256:4391bd07606be175aafd267ef9bea87cf1b8210c787666ce82073b05f202add1",
"sha256:2a9add27d7fc0fdb572abc3b2486eb3b1395da71e0254c5552b2aad2a18b5441", "sha256:4aa48afdce4660b0076a00d80afa54e8a97cd49f457d68a4342d188a09451c1a",
"sha256:2d8adfca843bc46ac199a4645233f13abf2011a0b2f4affc5c37cd552626f27b", "sha256:58459d3bad03343ac4b1b42ed14d571b8743dc80ccbf27444f266729df1d6f5b",
"sha256:301e408a052fdcda5cdcf03021ebafc3c6ea093021bf9d1aa47c54d48bdad166", "sha256:5c3c8def4230e1b959671eb959083661b4a0d2e9af93ee339c7dada6759a9470",
"sha256:311283acf880cfcc20369201bd75da907909afc4666966c7895cbed6f9d2c640", "sha256:5f30427731561ce75d7048ac254dbe47a2ba576229250fb60f0fb74db96501a1",
"sha256:341dddcfe3b7b6427a28a27baa59af5ad51baa59bfec3264f1ab287aa3b30b13", "sha256:643843bcc1c50526b3a71cd2ee561cf0d8773f062c8cbaf9ffac9fdf573f83ab",
"sha256:3a5098df115340fb17fc93867317a947e1dcd978c3888c5ddb118366095851f8", "sha256:67c261d6c0a9981820c3a149d255a76918278a6b03b6a036800359aba1256d46",
"sha256:3c978544be9e04ed12016dd295a74283773149b48f507d69b36f91aa90a643e5", "sha256:67f21981ba2f9d7ba9ade60c9e8cbaa8cf8e9ae51673934480e45cf55e953673",
"sha256:3d893b0871322eaa2f8c7072cdb552d8e2b27645b7875a70833c31e9274d4611", "sha256:6aaf96c7f8cebc220cdfc03f1d5a31952f027dda050e5a703a0d1c396075e3e7",
"sha256:4fe6a006557b87b352c04596a6e3f12a57d6e5f401d804947bd3188e6b0e0e76", "sha256:7c4068a8c44014b2d55f3c3f574c376b2494ca9cc73d2f1bd692382b6dffe3db",
"sha256:507c05c7a37b3683eb08a3ff993bd1ee1e6c752f77c2f275260533b265ecdb6c", "sha256:7c7e5fa88d9ff656e067876e4736379cc962d185d5cd808014a8a928d529ef4e",
"sha256:58ca1d7c8aef6e996112d0ce873ac9dfa1eaf4a1196b4ff7ff73880a09923ba7", "sha256:7f5ae4f304257569ef3b948810816bc87c9146e8c446053539947eedeaa32786",
"sha256:61bada43d494515d5b122f4532af226fdb5ee08fe5b5918b111279843dc6836a", "sha256:82691fda7c3f77c90e62da69ae60b5ac08e87e775b09813559f8901a88266552",
"sha256:69a5a8d71c308d7ef33ef72371c2388a90e3495dbb7993430e674006f94797d5", "sha256:8737609c3bbdd48e380d463134a35ffad3b22dc56295eff6f79fd85bd0eeeb25",
"sha256:6a5928bc6241264dce5ed509e66f33676fc97f464e7a919edc672fb5532221ee", "sha256:9f411b2c3f3d76bba0865b35a425157c5dcf54937f82bbeb3d3c180789dd66a6",
"sha256:7b9d6b14fc9a4864b08d1ba57d732b248f0e482c7b2ff55c313137e3ed4d8449", "sha256:a6be4cb0ef3b8c9250c19cc122267263093eee7edd4e3fa75395dfda8c17a8e2",
"sha256:a7c4b701ca418cd39e28ec3b496e6388fe06de83f5f0cb74794fa31cfa384c02", "sha256:bcb238c9c96c00d3085b264e5c1a1207672577b93fa666c3b14a45240b14123a",
"sha256:a7e8f6216f180f3fd4efb73de5d1eaefb5f5a1ee5b645c67333033e39440e63a", "sha256:bf2ec4b75d0e9356edea834d1de42b31fe11f726a81dfb2c2112bc1eaa508fcf",
"sha256:b545ebadaa2b878c8630e5bcdb97fc4096e779f335fc0f943547c1c91540c815", "sha256:d136337ae3cc69aa5e447e78d8e1514be8c3ec9b54264e680cf0b4bd9011574f",
"sha256:c293d3c0321996cd8ffe84215ffe5d269fd9d1d12c6f4ffe2b597a7c30d3e593", "sha256:d4bf4d43077db55589ffc9009c0ba0a94fa4908b9586d6ccce2e0b164c86303c",
"sha256:c5562bcc1a9b61960fc8950ade44d00e3de28f891af0acc96307c73613d18f6e", "sha256:d6a96eef20f639e6a97d23e57dd0c1b1069a7b4fd7027482a4c5c451cd7732f4",
"sha256:ca9c23848292c6fe0a19d212790e62f398fd9609aaa838859be8459bfbe558aa", "sha256:d9caa9d5e682102453d96a0ee10c7241b72859b01a941a397fd965f23b3e016b",
"sha256:cc1b30205d138d1005adb52087ff45708febbef0e420386f58664f984ef56954", "sha256:dd1c8f6bd65d07d3810b90d02eba7997e32abbdf1277a481d698969e921a3be0",
"sha256:dbce7adeb66b895c6aaa1fad796aaefc299ced597f6fbd9ceddb0dd735245354", "sha256:e31f0bb5928b793169b87e3d1e070f2342b22d5245c755e2b81caa29756246c3",
"sha256:dc4b2fb01f1b4ddbe2453468ea0719f4dbb1f5caa712c8b21bb3dd1480cd30d9", "sha256:ecb55251139706669fdec2ff073c98ef8e9a84473e51e716211b41aa0f18e656",
"sha256:eed2afaa97ec33b4411995be12f8bdb95c87984eaa28d76cf628970c8a2d689a", "sha256:ee5ec40fdd06d62fe5d4084bef4fd50fd4bb6bfd2bf519365f569dc470163ab0",
"sha256:fc7a7d7b0ed72589fd8b8486b9b42a564f10b8762be8bd4d9df94b807af4a089" "sha256:f17e562de9edf691a42ddb1eb4a5541c20dd3f9e65b09ded2beb0799c0cf29bb",
"sha256:fdffbfb6832cd0b300995a2b08b8f6fa9f6e856d562800fea9182316d99c4e8e"
], ],
"index": "pypi", "index": "pypi",
"version": "==1.21.5" "version": "==1.21.6"
}, },
"owoify-py": { "owoify-py": {
"hashes": [ "hashes": [
@ -368,6 +493,14 @@
"markers": "python_version >= '3.6'", "markers": "python_version >= '3.6'",
"version": "==1.6.0" "version": "==1.6.0"
}, },
"priority": {
"hashes": [
"sha256:6f8eefce5f3ad59baf2c080a664037bb4725cd0a790d53d59ab4059288faf6aa",
"sha256:c965d54f1b8d0d0b19479db3924c7c36cf672dbf2aec92d43fbdaf4492ba18c0"
],
"markers": "python_full_version >= '3.6.1'",
"version": "==2.0.0"
},
"pyaudio": { "pyaudio": {
"git": "https://git.skeh.site/skeh/pyaudio.git", "git": "https://git.skeh.site/skeh/pyaudio.git",
"ref": "f749f2187e232217f8ac112a1226b3af11f008e3" "ref": "f749f2187e232217f8ac112a1226b3af11f008e3"
@ -381,11 +514,11 @@
}, },
"pyparsing": { "pyparsing": {
"hashes": [ "hashes": [
"sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea", "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954",
"sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484" "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"
], ],
"markers": "python_version >= '3.6'", "markers": "python_full_version >= '3.6.8'",
"version": "==3.0.7" "version": "==3.0.8"
}, },
"python-dateutil": { "python-dateutil": {
"hashes": [ "hashes": [
@ -445,6 +578,14 @@
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==2020.1" "version": "==2020.1"
}, },
"quart": {
"hashes": [
"sha256:2cf213d8b83fa701a83e3b3125e9102a937cefd1e97e9583f22ee2fa79139640",
"sha256:69480e7384935feff1f50293a8cb70c5d31f568af94ed792d043bb368b50bd50"
],
"index": "pypi",
"version": "==0.17.0"
},
"regex": { "regex": {
"hashes": [ "hashes": [
"sha256:0008650041531d0eadecc96a73d37c2dc4821cf51b0766e374cb4f1ddc4e1c14", "sha256:0008650041531d0eadecc96a73d37c2dc4821cf51b0766e374cb4f1ddc4e1c14",
@ -718,7 +859,7 @@
"sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14", "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14",
"sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e" "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"
], ],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4.0'",
"version": "==1.26.9" "version": "==1.26.9"
}, },
"watchdog": { "watchdog": {
@ -760,57 +901,73 @@
}, },
"websockets": { "websockets": {
"hashes": [ "hashes": [
"sha256:038afef2a05893578d10dadbdbb5f112bd115c46347e1efe99f6a356ff062138", "sha256:07cdc0a5b2549bcfbadb585ad8471ebdc7bdf91e32e34ae3889001c1c106a6af",
"sha256:05f6e9757017270e7a92a2975e2ae88a9a582ffc4629086fd6039aa80e99cd86", "sha256:210aad7fdd381c52e58777560860c7e6110b6174488ef1d4b681c08b68bf7f8c",
"sha256:0b66421f9f13d4df60cd48ab977ed2c2b6c9147ae1a33caf5a9f46294422fda1", "sha256:28dd20b938a57c3124028680dc1600c197294da5db4292c76a0b48efb3ed7f76",
"sha256:0cd02f36d37e503aca88ab23cc0a1a0e92a263d37acf6331521eb38040dcf77b", "sha256:2f94fa3ae454a63ea3a19f73b95deeebc9f02ba2d5617ca16f0bbdae375cda47",
"sha256:0f73cb2526d6da268e86977b2c4b58f2195994e53070fe567d5487c6436047e6", "sha256:31564a67c3e4005f27815634343df688b25705cccb22bc1db621c781ddc64c69",
"sha256:117383d0a17a0dda349f7a8790763dde75c1508ff8e4d6e8328b898b7df48397", "sha256:347974105bbd4ea068106ec65e8e8ebd86f28c19e529d115d89bd8cc5cda3079",
"sha256:1c1f3b18c8162e3b09761d0c6a0305fd642934202541cc511ef972cb9463261e", "sha256:379e03422178436af4f3abe0aa8f401aa77ae2487843738542a75faf44a31f0c",
"sha256:1c9031e90ebfc486e9cdad532b94004ade3aa39a31d3c46c105bb0b579cd2490", "sha256:3eda1cb7e9da1b22588cefff09f0951771d6ee9fa8dbe66f5ae04cc5f26b2b55",
"sha256:2349fa81b6b959484bb2bda556ccb9eb70ba68987646a0f8a537a1a18319fb03", "sha256:51695d3b199cd03098ae5b42833006a0f43dc5418d3102972addc593a783bc02",
"sha256:24b879ba7db12bb525d4e58089fcbe6a3df3ce4666523183654170e86d372cbe", "sha256:54c000abeaff6d8771a4e2cef40900919908ea7b6b6a30eae72752607c6db559",
"sha256:2aa9b91347ecd0412683f28aabe27f6bad502d89bd363b76e0a3508b1596402e", "sha256:5b936bf552e4f6357f5727579072ff1e1324717902127ffe60c92d29b67b7be3",
"sha256:56d48eebe9e39ce0d68701bce3b21df923aa05dcc00f9fd8300de1df31a7c07c", "sha256:6075fd24df23133c1b078e08a9b04a3bc40b31a8def4ee0b9f2c8865acce913e",
"sha256:5a38a0175ae82e4a8c4bac29fc01b9ee26d7d5a614e5ee11e7813c68a7d938ce", "sha256:661f641b44ed315556a2fa630239adfd77bd1b11cb0b9d96ed8ad90b0b1e4978",
"sha256:5b04270b5613f245ec84bb2c6a482a9d009aefad37c0575f6cda8499125d5d5c", "sha256:6ea6b300a6bdd782e49922d690e11c3669828fe36fc2471408c58b93b5535a98",
"sha256:6193bbc1ee63aadeb9a4d81de0e19477401d150d506aee772d8380943f118186", "sha256:6ed1d6f791eabfd9808afea1e068f5e59418e55721db8b7f3bfc39dc831c42ae",
"sha256:669e54228a4d9457abafed27cbf0e2b9f401445c4dfefc12bf8e4db9751703b8", "sha256:7934e055fd5cd9dee60f11d16c8d79c4567315824bacb1246d0208a47eca9755",
"sha256:6a009eb551c46fd79737791c0c833fc0e5b56bcd1c3057498b262d660b92e9cd", "sha256:7ab36e17af592eec5747c68ef2722a74c1a4a70f3772bc661079baf4ae30e40d",
"sha256:71a4491cfe7a9f18ee57d41163cb6a8a3fa591e0f0564ca8b0ed86b2a30cced4", "sha256:7f6d96fdb0975044fdd7953b35d003b03f9e2bcf85f2d2cf86285ece53e9f991",
"sha256:7b38a5c9112e3dbbe45540f7b60c5204f49b3cb501b40950d6ab34cd202ab1d0", "sha256:83e5ca0d5b743cde3d29fda74ccab37bdd0911f25bd4cdf09ff8b51b7b4f2fa1",
"sha256:7bb9d8a6beca478c7e9bdde0159bd810cc1006ad6a7cb460533bae39da692ca2", "sha256:85506b3328a9e083cc0a0fb3ba27e33c8db78341b3eb12eb72e8afd166c36680",
"sha256:82bc33db6d8309dc27a3bee11f7da2288ad925fcbabc2a4bb78f7e9c56249baf", "sha256:8af75085b4bc0b5c40c4a3c0e113fa95e84c60f4ed6786cbb675aeb1ee128247",
"sha256:8351c3c86b08156337b0e4ece0e3c5ec3e01fcd14e8950996832a23c99416098", "sha256:8b1359aba0ff810d5830d5ab8e2c4a02bebf98a60aa0124fb29aa78cfdb8031f",
"sha256:8beac786a388bb99a66c3be4ab0fb38273c0e3bc17f612a4e0a47c4fc8b9c045", "sha256:8fbd7d77f8aba46d43245e86dd91a8970eac4fb74c473f8e30e9c07581f852b2",
"sha256:97950c7c844ec6f8d292440953ae18b99e3a6a09885e09d20d5e7ecd9b914cf8", "sha256:907e8247480f287aa9bbc9391bd6de23c906d48af54c8c421df84655eef66af7",
"sha256:98f57b3120f8331cd7440dbe0e776474f5e3632fdaa474af1f6b754955a47d71", "sha256:93d5ea0b5da8d66d868b32c614d2b52d14304444e39e13a59566d4acb8d6e2e4",
"sha256:9ca2ca05a4c29179f06cf6727b45dba5d228da62623ec9df4184413d8aae6cb9", "sha256:97bc9d41e69a7521a358f9b8e44871f6cdeb42af31815c17aed36372d4eec667",
"sha256:a03a25d95cc7400bd4d61a63460b5d85a7761c12075ee2f51de1ffe73aa593d3", "sha256:994cdb1942a7a4c2e10098d9162948c9e7b235df755de91ca33f6e0481366fdb",
"sha256:a10c0c1ee02164246f90053273a42d72a3b2452a7e7486fdae781138cf7fbe2d", "sha256:a141de3d5a92188234afa61653ed0bbd2dde46ad47b15c3042ffb89548e77094",
"sha256:a72b92f96e5e540d5dda99ee3346e199ade8df63152fa3c737260da1730c411f", "sha256:a1e15b230c3613e8ea82c9fc6941b2093e8eb939dd794c02754d33980ba81e36",
"sha256:ac081aa0307f263d63c5ff0727935c736c8dad51ddf2dc9f5d0c4759842aefaa", "sha256:aad5e300ab32036eb3fdc350ad30877210e2f51bceaca83fb7fef4d2b6c72b79",
"sha256:b22bdc795e62e71118b63e14a08bacfa4f262fd2877de7e5b950f5ac16b0348f", "sha256:b529fdfa881b69fe563dbd98acce84f3e5a67df13de415e143ef053ff006d500",
"sha256:b4059e2ccbe6587b6dc9a01db5fc49ead9a884faa4076eea96c5ec62cb32f42a", "sha256:b9c77f0d1436ea4b4dc089ed8335fa141e6a251a92f75f675056dac4ab47a71e",
"sha256:b7fe45ae43ac814beb8ca09d6995b56800676f2cfa8e23f42839dc69bba34a42", "sha256:bb621ec2dbbbe8df78a27dbd9dd7919f9b7d32a73fafcb4d9252fc4637343582",
"sha256:bef03a51f9657fb03d8da6ccd233fe96e04101a852f0ffd35f5b725b28221ff3", "sha256:c7250848ce69559756ad0086a37b82c986cd33c2d344ab87fea596c5ac6d9442",
"sha256:bffc65442dd35c473ca9790a3fa3ba06396102a950794f536783f4b8060af8dd", "sha256:c8d1d14aa0f600b5be363077b621b1b4d1eb3fbf90af83f9281cda668e6ff7fd",
"sha256:c21a67ab9a94bd53e10bba21912556027fea944648a09e6508415ad14e37c325", "sha256:d1655a6fc7aecd333b079d00fb3c8132d18988e47f19740c69303bf02e9883c6",
"sha256:c67d9cacb3f6537ca21e9b224d4fd08481538e43bcac08b3d93181b0816def39", "sha256:d6353ba89cfc657a3f5beabb3b69be226adbb5c6c7a66398e17809b0ce3c4731",
"sha256:c6e56606842bb24e16e36ae7eb308d866b4249cf0be8f63b212f287eeb76b124", "sha256:da4377904a3379f0c1b75a965fff23b28315bcd516d27f99a803720dfebd94d4",
"sha256:cb316b87cbe3c0791c2ad92a5a36bf6adc87c457654335810b25048c1daa6fd5", "sha256:e49ea4c1a9543d2bd8a747ff24411509c29e4bdcde05b5b0895e2120cb1a761d",
"sha256:cef40a1b183dcf39d23b392e9dd1d9b07ab9c46aadf294fff1350fb79146e72b", "sha256:e4e08305bfd76ba8edab08dcc6496f40674f44eb9d5e23153efa0a35750337e8",
"sha256:cf931c33db9c87c53d009856045dd524e4a378445693382a920fa1e0eb77c36c", "sha256:e6fa05a680e35d0fcc1470cb070b10e6fe247af54768f488ed93542e71339d6f",
"sha256:d4d110a84b63c5cfdd22485acc97b8b919aefeecd6300c0c9d551e055b9a88ea", "sha256:e7e6f2d6fd48422071cc8a6f8542016f350b79cc782752de531577d35e9bd677",
"sha256:d5396710f86a306cf52f87fd8ea594a0e894ba0cc5a36059eaca3a477dc332aa", "sha256:e904c0381c014b914136c492c8fa711ca4cced4e9b3d110e5e7d436d0fc289e8",
"sha256:f09f46b1ff6d09b01c7816c50bd1903cf7d02ebbdb63726132717c2fcda835d5", "sha256:ec2b0ab7edc8cd4b0eb428b38ed89079bdc20c6bdb5f889d353011038caac2f9",
"sha256:f14bd10e170abc01682a9f8b28b16e6f20acf6175945ef38db6ffe31b0c72c3f", "sha256:ef5ce841e102278c1c2e98f043db99d6755b1c58bde475516aef3a008ed7f28e",
"sha256:f5c335dc0e7dc271ef36df3f439868b3c790775f345338c2f61a562f1074187b", "sha256:f351c7d7d92f67c0609329ab2735eee0426a03022771b00102816a72715bb00b",
"sha256:f8296b8408ec6853b26771599990721a26403e62b9de7e50ac0a056772ac0b5e", "sha256:fab7c640815812ed5f10fbee7abbf58788d602046b7bb3af9b1ac753a6d5e916",
"sha256:fa35c5d1830d0fb7b810324e9eeab9aa92e8f273f11fdbdc0741dcded6d72b9f" "sha256:fc06cc8073c8e87072138ba1e431300e2d408f054b27047d047b549455066ff4"
], ],
"index": "pypi", "index": "pypi",
"version": "==10.2" "version": "==10.3"
},
"werkzeug": {
"hashes": [
"sha256:1ce08e8093ed67d638d63879fd1ba3735817f7a80de3674d293f5984f25fb6e6",
"sha256:72a4b735692dd3135217911cbeaa1be5fa3f62bffb8745c5215420a03dc55255"
],
"markers": "python_version >= '3.7'",
"version": "==2.1.2"
},
"wsproto": {
"hashes": [
"sha256:2218cb57952d90b9fca325c0dcfb08c3bda93e8fd8070b0a17f048e2e47a521b",
"sha256:a2e56bfd5c7cd83c1369d83b5feccd6d37798b74872866e62616e0ecf111bda8"
],
"markers": "python_version >= '3.7'",
"version": "==1.1.0"
} }
}, },
"develop": { "develop": {
@ -927,11 +1084,11 @@
}, },
"platformdirs": { "platformdirs": {
"hashes": [ "hashes": [
"sha256:7535e70dfa32e84d4b34996ea99c5e432fa29a708d0f4e394bbcb2a8faa4f16d", "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788",
"sha256:bcae7cab893c2d310a711b70b24efb93334febe65f8de776ee320b517471e227" "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"
], ],
"markers": "python_version >= '3.7'", "markers": "python_version >= '3.7'",
"version": "==2.5.1" "version": "==2.5.2"
}, },
"plette": { "plette": {
"extras": [ "extras": [
@ -946,11 +1103,11 @@
}, },
"pyparsing": { "pyparsing": {
"hashes": [ "hashes": [
"sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea", "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954",
"sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484" "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"
], ],
"markers": "python_version >= '3.6'", "markers": "python_full_version >= '3.6.8'",
"version": "==3.0.7" "version": "==3.0.8"
}, },
"python-dateutil": { "python-dateutil": {
"hashes": [ "hashes": [
@ -970,11 +1127,11 @@
}, },
"requirementslib": { "requirementslib": {
"hashes": [ "hashes": [
"sha256:7986c9797df08e68f6dfbb6c6e948b1e108363ef70da82cb21fe219a965b2859", "sha256:c17a9bf51155d4428e3f031d5555bff2d3b896e5037a3f876c1494329332d23c",
"sha256:b7d62aaa5177b85ba3cfa0ef6d0ebdf405787dd0660f38b2b6401f7c32e6529c" "sha256:cab88c78e74e24853fa079e7612b819f28ac80e539216a4f2a2303b62515f31c"
], ],
"markers": "python_version >= '3.6'", "markers": "python_version >= '3.7'",
"version": "==1.6.1" "version": "==1.6.4"
}, },
"six": { "six": {
"hashes": [ "hashes": [
@ -1002,18 +1159,18 @@
}, },
"tomlkit": { "tomlkit": {
"hashes": [ "hashes": [
"sha256:3c517894eadef53e9072d343d37e4427b8f0b6200a70b7c9a19b2ebd1f53b951", "sha256:30d54c0b914e595f3d10a87888599eab5321a2a69abc773bbefff51599b72db6",
"sha256:3eba517439dcb2f84cf39f4f85fd2c3398309823a3c75ac3e73003638daf7915" "sha256:905cf92c2111ef80d355708f47ac24ad1b6fc2adc5107455940088c9bbecaedb"
], ],
"markers": "python_version >= '3.6' and python_version < '4.0'", "markers": "python_version >= '3.6' and python_version < '4'",
"version": "==0.10.1" "version": "==0.10.2"
}, },
"urllib3": { "urllib3": {
"hashes": [ "hashes": [
"sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14", "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14",
"sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e" "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"
], ],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4.0'",
"version": "==1.26.9" "version": "==1.26.9"
}, },
"vistir": { "vistir": {

View File

@ -29,7 +29,7 @@ class MisskeyProcess(ChatProcess):
self.state = STATES.CONNECTING self.state = STATES.CONNECTING
def normalize_event(self, event): def normalize_event(self, event):
user_name = event['user']['name'] user_name = event['user']['name'] or event['user']['username']
user_id = event['user']['id'] user_id = event['user']['id']
text = event.get('text', '') text = event.get('text', '')
attachments = [(file['type'], file['url']) for file in event.get('files', [])] attachments = [(file['type'], file['url']) for file in event.get('files', [])]

View File

@ -1,13 +1,16 @@
import importlib import importlib
from multiprocessing import Process, Lock from multiprocessing import Process, Lock
from multiprocessing.connection import wait from multiprocessing.connection import wait
import asyncio
import time import time
from datetime import datetime, timedelta
from traceback import format_exception from traceback import format_exception
from queue import Queue, Empty
import logging import logging
import os import os
import kdl import kdl
from aioscheduler import TimedScheduler
from quart import Quart
from ovtk_audiencekit.core import WebsocketServerProcess from ovtk_audiencekit.core import WebsocketServerProcess
from ovtk_audiencekit.core.Config import kdl_parse_config, kdl_reserved from ovtk_audiencekit.core.Config import kdl_parse_config, kdl_reserved
@ -55,32 +58,34 @@ class MainProcess(Process):
return module_name, instance_name return module_name, instance_name
def handle_event(self, event): async def handle_events(self):
logger.info(event) while True:
event = await self.event_queue.get()
logger.info(event)
if isinstance(event, Event): if isinstance(event, Event):
for plugin_name, plugin in list(self.plugins.items()): for plugin_name, plugin in list(self.plugins.items()):
try: try:
event = plugin.on_bus_event(event) event = plugin.on_bus_event(event)
logger.debug(f'Event after {plugin_name} - {event}') logger.debug(f'Event after {plugin_name} - {event}')
except PluginError as e: except PluginError as e:
logger.critical(f'Failure when processing {e.source} ({e}) - disabling...') logger.critical(f'Failure when processing {e.source} ({e}) - disabling...')
logger.debug(''.join(format_exception(None, e, e.__traceback__))) logger.debug(''.join(format_exception(None, e, e.__traceback__)))
self.plugins[e.source].__del__() self.plugins[e.source].__del__()
del self.plugins[e.source] del self.plugins[e.source]
except Exception as e: except Exception as e:
logger.critical(f'Failure when processing {plugin_name} ({e}) - disabling...') logger.critical(f'Failure when processing {plugin_name} ({e}) - disabling...')
logger.debug(''.join(format_exception(None, e, e.__traceback__))) logger.debug(''.join(format_exception(None, e, e.__traceback__)))
self.plugins[plugin_name].__del__() self.plugins[plugin_name].__del__()
del self.plugins[plugin_name] del self.plugins[plugin_name]
if event is None: if event is None:
break break
else: else:
self.server_process.message_pipe.send(event)
elif isinstance(event, Delete):
self.server_process.message_pipe.send(event) self.server_process.message_pipe.send(event)
elif isinstance(event, Delete): else:
self.server_process.message_pipe.send(event) logger.error(f'Unknown data in event loop - {event}')
else:
logger.error(f'Unknown data in event loop - {event}')
def setup(self): def setup(self):
config = kdl.Document(list(parse_kdl_deep(self.config_path))) config = kdl.Document(list(parse_kdl_deep(self.config_path)))
@ -116,9 +121,9 @@ class MainProcess(Process):
process.start() process.start()
# Load plugins # Load plugins
self.plugin_generated_events = Queue() self.event_queue = asyncio.Queue()
## Builtins ## Builtins
self.plugins = {node_name: builtins.__dict__[node_name](self.chat_processes, self.plugin_generated_events, node_name) for node_name in builtins.__all__} self.plugins = {node_name: builtins.__dict__[node_name](self.chat_processes, self.event_queue, node_name) for node_name in builtins.__all__}
## Dynamic ## Dynamic
for node in config.getAll('plugin'): for node in config.getAll('plugin'):
module_name, plugin_name = self.get_external_module_names(node, self.plugins) module_name, plugin_name = self.get_external_module_names(node, self.plugins)
@ -126,12 +131,16 @@ class MainProcess(Process):
try: try:
plugin_module = importlib.import_module(f'.{module_name}', package='ovtk_audiencekit.plugins') plugin_module = importlib.import_module(f'.{module_name}', package='ovtk_audiencekit.plugins')
plugin = plugin_module.Plugin(self.chat_processes, self.plugin_generated_events, plugin = plugin_module.Plugin(self.chat_processes, self.event_queue, plugin_name,
plugin_name, **node.props, **secrets_for_mod, _children=node.nodes) **node.props, **secrets_for_mod, _children=node.nodes)
self.plugins[plugin_name] = plugin self.plugins[plugin_name] = plugin
except Exception as e: except Exception as e:
raise ValueError(f'Failed to initalize {module_name} plugin "{plugin_name}" - {e}') raise ValueError(f'Failed to initalize {module_name} plugin "{plugin_name}" - {e}')
# Register UI with webserver
for (plugin_name, plugin) in self.plugins.items():
self.webserver.register_blueprint(plugin.blueprint, url_prefix=f'/{plugin_name}')
# Run plugin definitions # Run plugin definitions
for node in config.nodes: for node in config.nodes:
if node.name in kdl_reserved: if node.name in kdl_reserved:
@ -147,39 +156,40 @@ class MainProcess(Process):
self.pipes = [process.event_pipe for process in self.chat_processes.values()] self.pipes = [process.event_pipe for process in self.chat_processes.values()]
self.pipes.append(self.server_process.message_pipe) self.pipes.append(self.server_process.message_pipe)
async def tick_plugins(self):
for plugin in self.plugins.values():
plugin.tick(0.5)
self._skehdule.schedule(self.tick_plugins(), datetime.utcnow() + timedelta(seconds=0.5))
def run(self): def run(self):
# Start websocket server # Start websocket server
self.server_process = WebsocketServerProcess(self.port, self.bind) self.server_process = WebsocketServerProcess(self.port, self.bind)
self.server_process.start() self.server_process.start()
self.webserver = Quart(__name__)
try: try:
# Do initial setup # Do initial setup
self.setup() self.setup()
self._skehdule = TimedScheduler()
# HACK: what the fuck. there has got to be a better way to write that
async def start_scheduler():
self._skehdule.start()
asyncio.get_event_loop().create_task(start_scheduler())
# Event loop asyncio.get_event_loop().create_task(self.tick_plugins())
last_tick = time.time() asyncio.get_event_loop().create_task(self.handle_events())
while True: asyncio.get_event_loop().create_task(self.webserver.run_task())
ready_pipes = wait(self.pipes, timeout=0.5)
dt = time.time() - last_tick event_ready = asyncio.Event()
for plugin in self.plugins.values(): def get_event(pipe):
plugin.tick(dt) event = pipe.recv()
last_tick = time.time() self.event_queue.put_nowait(event)
for pipe in self.pipes:
# REVIEW: This does not work on windows!!!!
asyncio.get_event_loop().add_reader(pipe.fileno(), lambda pipe=pipe: get_event(pipe))
for ready_pipe in ready_pipes: asyncio.get_event_loop().run_forever()
event = ready_pipe.recv()
self.handle_event(event)
while not self.plugin_generated_events.empty():
try:
event = self.plugin_generated_events.get_nowait()
self.handle_event(event)
except Empty:
break
if self.reload_event.is_set():
self.reload_event.clear()
logger.info('Reloading...')
self.setup()
except KeyboardInterrupt: except KeyboardInterrupt:
pass pass
except Exception as e: except Exception as e:

View File

@ -1,6 +1,7 @@
import soundfile import soundfile
import os import os
import sys import sys
import logging
import numpy as np import numpy as np
import pyaudio as pya import pyaudio as pya
@ -22,6 +23,8 @@ pyaudio = pya.PyAudio()
os.dup2(old_stderr, 2) os.dup2(old_stderr, 2)
os.close(old_stderr) os.close(old_stderr)
logger = logging.getLogger(__name__)
def check_rate(index, channels, rate): def check_rate(index, channels, rate):
try: try:
@ -43,7 +46,10 @@ class Clip:
target_samplerate = native_rate target_samplerate = native_rate
if not check_rate(output_index, channels, native_rate): if not check_rate(output_index, channels, native_rate):
target_samplerate = next((rate for rate in alt_rates if check_rate(output_index, channels, rate))) try:
target_samplerate = next((rate for rate in alt_rates if check_rate(output_index, channels, rate)))
except StopIteration:
logger.warn('Target audio device does not claim to support any sample rates! Attempting playback at native rate')
if native_rate != target_samplerate: if native_rate != target_samplerate:
self._raw = librosa.resample(self._raw, native_rate, target_samplerate, fix=True, scale=True) self._raw = librosa.resample(self._raw, native_rate, target_samplerate, fix=True, scale=True)
@ -118,11 +124,12 @@ class AudioAlert(PluginBase):
self._output_index = Clip.find_output_index(output) self._output_index = Clip.find_output_index(output)
def run(self, path, **kwargs): def run(self, path, speed=1, **kwargs):
if sound := self.sounds.get(path): if sound := self.sounds.get(path):
sound.play() sound.play()
else: else:
self.sounds[path] = Clip(path, self.sounds[path] = Clip(path,
self._output_index, self._output_index,
buffer_length=self._buffer_length, buffer_length=self._buffer_length,
cutoff_prevent_length=self._cutoff_prevent_length) cutoff_prevent_length=self._cutoff_prevent_length,
speed=speed)

View File

@ -117,6 +117,5 @@ class PhraseCounterPlugin(PluginBase):
if self.persist and os.path.exists(self._cache): if self.persist and os.path.exists(self._cache):
with open(self._cache, 'r') as f: with open(self._cache, 'r') as f:
counts = json.load(f) counts = json.load(f)
print(counts)
if saved_counts := counts.get(counter.output): if saved_counts := counts.get(counter.output):
counter.counts = {**counter.counts, **saved_counts} counter.counts = {**counter.counts, **saved_counts}

View File

@ -5,6 +5,7 @@ from operator import getitem
import logging import logging
import kdl import kdl
from quart import Blueprint
from ovtk_audiencekit.core.Config import kdl_parse_config from ovtk_audiencekit.core.Config import kdl_parse_config
@ -29,6 +30,7 @@ class PluginBase(ABC):
self.logger = logging.getLogger(f'plugin.{self._name}') self.logger = logging.getLogger(f'plugin.{self._name}')
self.plugins[name] = self self.plugins[name] = self
self.blueprint = Blueprint(self._name, __name__)
if _children: if _children:
raise ValueError('Module does not accept children') raise ValueError('Module does not accept children')
@ -84,7 +86,7 @@ class PluginBase(ABC):
Send an event to the event bus Send an event to the event bus
WARNING: This will cause the event to be processed by other plugins - be careful not to cause an infinite loop! WARNING: This will cause the event to be processed by other plugins - be careful not to cause an infinite loop!
""" """
self._event_queue.put(event) self._event_queue.put_nowait(event)
def _run(self, *args, **kwargs): def _run(self, *args, **kwargs):
try: try: