mirror of
				https://github.com/smartfrigde/armcord.git
				synced 2024-08-14 23:56:58 +00:00 
			
		
		
		
	[wip] linux audio screenshare
This commit is contained in:
		
							parent
							
								
									bed9e02059
								
							
						
					
					
						commit
						1a1c549f6c
					
				
					 4 changed files with 290 additions and 22 deletions
				
			
		
							
								
								
									
										160
									
								
								pnpm-lock.yaml
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										160
									
								
								pnpm-lock.yaml
									
										
									
										generated
									
									
									
								
							|  | @ -16,6 +16,9 @@ dependencies: | |||
|   extract-zip: | ||||
|     specifier: ^2.0.1 | ||||
|     version: 2.0.1 | ||||
|   node-pipewire: | ||||
|     specifier: ^1.0.14 | ||||
|     version: 1.0.14 | ||||
|   v8-compile-cache: | ||||
|     specifier: ^2.3.0 | ||||
|     version: 2.3.0 | ||||
|  | @ -209,6 +212,24 @@ packages: | |||
|       - supports-color | ||||
|     dev: true | ||||
| 
 | ||||
|   /@mapbox/node-pre-gyp@1.0.10: | ||||
|     resolution: {integrity: sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==} | ||||
|     hasBin: true | ||||
|     dependencies: | ||||
|       detect-libc: 2.0.1 | ||||
|       https-proxy-agent: 5.0.1 | ||||
|       make-dir: 3.1.0 | ||||
|       node-fetch: 2.6.7 | ||||
|       nopt: 5.0.0 | ||||
|       npmlog: 5.0.1 | ||||
|       rimraf: 3.0.2 | ||||
|       semver: 7.3.8 | ||||
|       tar: 6.1.12 | ||||
|     transitivePeerDependencies: | ||||
|       - encoding | ||||
|       - supports-color | ||||
|     dev: false | ||||
| 
 | ||||
|   /@nodelib/fs.scandir@2.1.5: | ||||
|     resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} | ||||
|     engines: {node: '>= 8'} | ||||
|  | @ -486,6 +507,10 @@ packages: | |||
|       eslint-visitor-keys: 3.4.1 | ||||
|     dev: true | ||||
| 
 | ||||
|   /abbrev@1.1.1: | ||||
|     resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /acorn-jsx@5.3.2(acorn@8.8.2): | ||||
|     resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} | ||||
|     peerDependencies: | ||||
|  | @ -507,7 +532,6 @@ packages: | |||
|       debug: 4.3.4 | ||||
|     transitivePeerDependencies: | ||||
|       - supports-color | ||||
|     dev: true | ||||
| 
 | ||||
|   /ajv-keywords@3.5.2(ajv@6.12.6): | ||||
|     resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} | ||||
|  | @ -586,6 +610,18 @@ packages: | |||
|       - supports-color | ||||
|     dev: true | ||||
| 
 | ||||
|   /aproba@2.0.0: | ||||
|     resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /are-we-there-yet@2.0.0: | ||||
|     resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} | ||||
|     engines: {node: '>=10'} | ||||
|     dependencies: | ||||
|       delegates: 1.0.0 | ||||
|       readable-stream: 3.6.2 | ||||
|     dev: false | ||||
| 
 | ||||
|   /argparse@2.0.1: | ||||
|     resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} | ||||
|     dev: true | ||||
|  | @ -645,7 +681,6 @@ packages: | |||
| 
 | ||||
|   /balanced-match@1.0.2: | ||||
|     resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /base64-js@1.5.1: | ||||
|     resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} | ||||
|  | @ -671,7 +706,6 @@ packages: | |||
|     dependencies: | ||||
|       balanced-match: 1.0.2 | ||||
|       concat-map: 0.0.1 | ||||
|     dev: true | ||||
| 
 | ||||
|   /brace-expansion@2.0.1: | ||||
|     resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} | ||||
|  | @ -829,7 +863,6 @@ packages: | |||
|   /chownr@2.0.0: | ||||
|     resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} | ||||
|     engines: {node: '>=10'} | ||||
|     dev: true | ||||
| 
 | ||||
|   /chromium-pickle-js@0.2.0: | ||||
|     resolution: {integrity: sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==} | ||||
|  | @ -888,6 +921,11 @@ packages: | |||
|   /color-name@1.1.4: | ||||
|     resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} | ||||
| 
 | ||||
|   /color-support@1.1.3: | ||||
|     resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} | ||||
|     hasBin: true | ||||
|     dev: false | ||||
| 
 | ||||
|   /colors@1.0.3: | ||||
|     resolution: {integrity: sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=} | ||||
|     engines: {node: '>=0.1.90'} | ||||
|  | @ -919,7 +957,10 @@ packages: | |||
| 
 | ||||
|   /concat-map@0.0.1: | ||||
|     resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} | ||||
|     dev: true | ||||
| 
 | ||||
|   /console-control-strings@1.1.0: | ||||
|     resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /copyfiles@2.4.1: | ||||
|     resolution: {integrity: sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==} | ||||
|  | @ -1036,6 +1077,15 @@ packages: | |||
|     engines: {node: '>=0.4.0'} | ||||
|     dev: true | ||||
| 
 | ||||
|   /delegates@1.0.0: | ||||
|     resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /detect-libc@2.0.1: | ||||
|     resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==} | ||||
|     engines: {node: '>=8'} | ||||
|     dev: false | ||||
| 
 | ||||
|   /detect-node@2.1.0: | ||||
|     resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} | ||||
|     optional: true | ||||
|  | @ -1555,15 +1605,28 @@ packages: | |||
|     engines: {node: '>= 8'} | ||||
|     dependencies: | ||||
|       minipass: 3.3.4 | ||||
|     dev: true | ||||
| 
 | ||||
|   /fs.realpath@1.0.0: | ||||
|     resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /function-bind@1.1.1: | ||||
|     resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} | ||||
| 
 | ||||
|   /gauge@3.0.2: | ||||
|     resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} | ||||
|     engines: {node: '>=10'} | ||||
|     dependencies: | ||||
|       aproba: 2.0.0 | ||||
|       color-support: 1.1.3 | ||||
|       console-control-strings: 1.1.0 | ||||
|       has-unicode: 2.0.1 | ||||
|       object-assign: 4.1.1 | ||||
|       signal-exit: 3.0.7 | ||||
|       string-width: 4.2.3 | ||||
|       strip-ansi: 6.0.1 | ||||
|       wide-align: 1.1.5 | ||||
|     dev: false | ||||
| 
 | ||||
|   /get-caller-file@2.0.5: | ||||
|     resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} | ||||
|     engines: {node: 6.* || 8.* || >= 10.*} | ||||
|  | @ -1611,7 +1674,6 @@ packages: | |||
|       minimatch: 3.1.2 | ||||
|       once: 1.4.0 | ||||
|       path-is-absolute: 1.0.1 | ||||
|     dev: true | ||||
| 
 | ||||
|   /global-agent@3.0.0: | ||||
|     resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} | ||||
|  | @ -1705,6 +1767,10 @@ packages: | |||
|     engines: {node: '>= 0.4'} | ||||
|     optional: true | ||||
| 
 | ||||
|   /has-unicode@2.0.1: | ||||
|     resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /has@1.0.3: | ||||
|     resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} | ||||
|     engines: {node: '>= 0.4.0'} | ||||
|  | @ -1747,7 +1813,6 @@ packages: | |||
|       debug: 4.3.4 | ||||
|     transitivePeerDependencies: | ||||
|       - supports-color | ||||
|     dev: true | ||||
| 
 | ||||
|   /iconv-corefoundation@1.1.7: | ||||
|     resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==} | ||||
|  | @ -1801,11 +1866,9 @@ packages: | |||
|     dependencies: | ||||
|       once: 1.4.0 | ||||
|       wrappy: 1.0.2 | ||||
|     dev: true | ||||
| 
 | ||||
|   /inherits@2.0.4: | ||||
|     resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /is-arrayish@0.2.1: | ||||
|     resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} | ||||
|  | @ -1999,6 +2062,13 @@ packages: | |||
|     dependencies: | ||||
|       yallist: 4.0.0 | ||||
| 
 | ||||
|   /make-dir@3.1.0: | ||||
|     resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} | ||||
|     engines: {node: '>=8'} | ||||
|     dependencies: | ||||
|       semver: 6.3.0 | ||||
|     dev: false | ||||
| 
 | ||||
|   /map-obj@1.0.1: | ||||
|     resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} | ||||
|     engines: {node: '>=0.10.0'} | ||||
|  | @ -2087,7 +2157,6 @@ packages: | |||
|     resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} | ||||
|     dependencies: | ||||
|       brace-expansion: 1.1.11 | ||||
|     dev: true | ||||
| 
 | ||||
|   /minimatch@5.1.0: | ||||
|     resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==} | ||||
|  | @ -2114,7 +2183,6 @@ packages: | |||
|     engines: {node: '>=8'} | ||||
|     dependencies: | ||||
|       yallist: 4.0.0 | ||||
|     dev: true | ||||
| 
 | ||||
|   /minizlib@2.1.2: | ||||
|     resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} | ||||
|  | @ -2122,13 +2190,11 @@ packages: | |||
|     dependencies: | ||||
|       minipass: 3.3.4 | ||||
|       yallist: 4.0.0 | ||||
|     dev: true | ||||
| 
 | ||||
|   /mkdirp@1.0.4: | ||||
|     resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} | ||||
|     engines: {node: '>=10'} | ||||
|     hasBin: true | ||||
|     dev: true | ||||
| 
 | ||||
|   /modify-filename@1.1.0: | ||||
|     resolution: {integrity: sha512-EickqnKq3kVVaZisYuCxhtKbZjInCuwgwZWyAmRIp1NTMhri7r3380/uqwrUHfaDiPzLVTuoNy4whX66bxPVog==} | ||||
|  | @ -2168,6 +2234,18 @@ packages: | |||
|       whatwg-url: 5.0.0 | ||||
|     dev: false | ||||
| 
 | ||||
|   /node-pipewire@1.0.14: | ||||
|     resolution: {integrity: sha512-6zGlLcmPNXzqIeQpe9hPXK/NiVVh4ihrqqq4mTt4sLV6YpLGzS6POPOIxoxDdofW6gsic4pTe8EPsoRJrWyLQg==} | ||||
|     requiresBuild: true | ||||
|     dependencies: | ||||
|       '@mapbox/node-pre-gyp': 1.0.10 | ||||
|       cargo-cp-artifact: 0.1.7 | ||||
|       typescript: 4.9.3 | ||||
|     transitivePeerDependencies: | ||||
|       - encoding | ||||
|       - supports-color | ||||
|     dev: false | ||||
| 
 | ||||
|   /noms@0.0.0: | ||||
|     resolution: {integrity: sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==} | ||||
|     dependencies: | ||||
|  | @ -2175,6 +2253,14 @@ packages: | |||
|       readable-stream: 1.0.34 | ||||
|     dev: true | ||||
| 
 | ||||
|   /nopt@5.0.0: | ||||
|     resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} | ||||
|     engines: {node: '>=6'} | ||||
|     hasBin: true | ||||
|     dependencies: | ||||
|       abbrev: 1.1.1 | ||||
|     dev: false | ||||
| 
 | ||||
|   /normalize-package-data@3.0.3: | ||||
|     resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} | ||||
|     engines: {node: '>=10'} | ||||
|  | @ -2189,6 +2275,20 @@ packages: | |||
|     resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} | ||||
|     engines: {node: '>=10'} | ||||
| 
 | ||||
|   /npmlog@5.0.1: | ||||
|     resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} | ||||
|     dependencies: | ||||
|       are-we-there-yet: 2.0.0 | ||||
|       console-control-strings: 1.1.0 | ||||
|       gauge: 3.0.2 | ||||
|       set-blocking: 2.0.0 | ||||
|     dev: false | ||||
| 
 | ||||
|   /object-assign@4.1.1: | ||||
|     resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} | ||||
|     engines: {node: '>=0.10.0'} | ||||
|     dev: false | ||||
| 
 | ||||
|   /object-keys@1.1.1: | ||||
|     resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} | ||||
|     engines: {node: '>= 0.4'} | ||||
|  | @ -2253,7 +2353,6 @@ packages: | |||
|   /path-is-absolute@1.0.1: | ||||
|     resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} | ||||
|     engines: {node: '>=0.10.0'} | ||||
|     dev: true | ||||
| 
 | ||||
|   /path-key@3.1.1: | ||||
|     resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} | ||||
|  | @ -2389,6 +2488,15 @@ packages: | |||
|       util-deprecate: 1.0.2 | ||||
|     dev: true | ||||
| 
 | ||||
|   /readable-stream@3.6.2: | ||||
|     resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} | ||||
|     engines: {node: '>= 6'} | ||||
|     dependencies: | ||||
|       inherits: 2.0.4 | ||||
|       string_decoder: 1.1.1 | ||||
|       util-deprecate: 1.0.2 | ||||
|     dev: false | ||||
| 
 | ||||
|   /redent@4.0.0: | ||||
|     resolution: {integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==} | ||||
|     engines: {node: '>=12'} | ||||
|  | @ -2439,7 +2547,6 @@ packages: | |||
|     hasBin: true | ||||
|     dependencies: | ||||
|       glob: 7.2.3 | ||||
|     dev: true | ||||
| 
 | ||||
|   /roarr@2.15.4: | ||||
|     resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} | ||||
|  | @ -2461,7 +2568,6 @@ packages: | |||
| 
 | ||||
|   /safe-buffer@5.1.2: | ||||
|     resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /safer-buffer@2.1.2: | ||||
|     resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} | ||||
|  | @ -2504,6 +2610,10 @@ packages: | |||
|       type-fest: 0.13.1 | ||||
|     optional: true | ||||
| 
 | ||||
|   /set-blocking@2.0.0: | ||||
|     resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /shebang-command@2.0.0: | ||||
|     resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} | ||||
|     engines: {node: '>=8'} | ||||
|  | @ -2516,6 +2626,10 @@ packages: | |||
|     engines: {node: '>=8'} | ||||
|     dev: true | ||||
| 
 | ||||
|   /signal-exit@3.0.7: | ||||
|     resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /simple-update-notifier@1.0.7: | ||||
|     resolution: {integrity: sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==} | ||||
|     engines: {node: '>=8.10.0'} | ||||
|  | @ -2616,7 +2730,6 @@ packages: | |||
|     resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} | ||||
|     dependencies: | ||||
|       safe-buffer: 5.1.2 | ||||
|     dev: true | ||||
| 
 | ||||
|   /strip-ansi@6.0.1: | ||||
|     resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} | ||||
|  | @ -2673,7 +2786,6 @@ packages: | |||
|       minizlib: 2.1.2 | ||||
|       mkdirp: 1.0.4 | ||||
|       yallist: 4.0.0 | ||||
|     dev: true | ||||
| 
 | ||||
|   /temp-file@3.4.0: | ||||
|     resolution: {integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==} | ||||
|  | @ -2768,7 +2880,6 @@ packages: | |||
|     resolution: {integrity: sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==} | ||||
|     engines: {node: '>=4.2.0'} | ||||
|     hasBin: true | ||||
|     dev: true | ||||
| 
 | ||||
|   /universalify@0.1.2: | ||||
|     resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} | ||||
|  | @ -2805,7 +2916,6 @@ packages: | |||
| 
 | ||||
|   /util-deprecate@1.0.2: | ||||
|     resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /v8-compile-cache@2.3.0: | ||||
|     resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} | ||||
|  | @ -2848,6 +2958,12 @@ packages: | |||
|       isexe: 2.0.0 | ||||
|     dev: true | ||||
| 
 | ||||
|   /wide-align@1.1.5: | ||||
|     resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} | ||||
|     dependencies: | ||||
|       string-width: 4.2.3 | ||||
|     dev: false | ||||
| 
 | ||||
|   /word-wrap@1.2.3: | ||||
|     resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} | ||||
|     engines: {node: '>=0.10.0'} | ||||
|  |  | |||
							
								
								
									
										65
									
								
								src/content/js/patchAudio.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								src/content/js/patchAudio.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,65 @@ | |||
| navigator.mediaDevices.getDisplayMedia = getDisplayMedia; | ||||
| // ==UserScript==
 | ||||
| // @name         Screenshare with Audio
 | ||||
| // @namespace    https://github.com/edisionnano
 | ||||
| // @version      0.4
 | ||||
| // @updateURL https://openuserjs.org/meta/samantas5855/Screenshare_with_Audio.meta.js
 | ||||
| // @description  Screenshare with Audio on Discord
 | ||||
| // @author       Guest271314 and Samantas5855
 | ||||
| // @match        https://*.discord.com/*
 | ||||
| // @icon         https://www.google.com/s2/favicons?domain=discord.com
 | ||||
| // @grant        none
 | ||||
| // @license      MIT
 | ||||
| // ==/UserScript==
 | ||||
| 
 | ||||
| /* jshint esversion: 8 */ | ||||
| 
 | ||||
| navigator.mediaDevices.chromiumGetDisplayMedia = navigator.mediaDevices.getDisplayMedia; | ||||
| 
 | ||||
| const getAudioDevice = async (nameOfAudioDevice) => { | ||||
|     await navigator.mediaDevices.getUserMedia({ | ||||
|         audio: true | ||||
|     }); | ||||
|     await new Promise((r) => setTimeout(r, 1000)); | ||||
|     let devices = await navigator.mediaDevices.enumerateDevices(); | ||||
|     let audioDevice = devices.find(({label}) => label === nameOfAudioDevice); | ||||
|     return audioDevice; | ||||
| }; | ||||
| 
 | ||||
| const getDisplayMedia = async () => { | ||||
|     var id; | ||||
|     try { | ||||
|         let myDiscordAudioSink = await getAudioDevice("screenshareAudio"); | ||||
|         id = myDiscordAudioSink.deviceId; | ||||
|     } catch (error) { | ||||
|         id = "default"; | ||||
|     } | ||||
|     let captureSystemAudioStream = await navigator.mediaDevices.getUserMedia({ | ||||
|         audio: { | ||||
|             // We add our audio constraints here, to get a list of supported constraints use navigator.mediaDevices.getSupportedConstraints();
 | ||||
|             // We must capture a microphone, we use default since its the only deviceId that is the same for every Chromium user
 | ||||
|             deviceId: { | ||||
|                 exact: id | ||||
|             }, | ||||
|             // We want auto gain control, noise cancellation and noise suppression disabled so that our stream won't sound bad
 | ||||
|             autoGainControl: false, | ||||
|             echoCancellation: false, | ||||
|             noiseSuppression: false | ||||
|             // By default Chromium sets channel count for audio devices to 1, we want it to be stereo in case we find a way for Discord to accept stereo screenshare too
 | ||||
|             //channelCount: 2,
 | ||||
|             // You can set more audio constraints here, bellow are some examples
 | ||||
|             //latency: 0,
 | ||||
|             //sampleRate: 48000,
 | ||||
|             //sampleSize: 16,
 | ||||
|             //volume: 1.0
 | ||||
|         } | ||||
|     }); | ||||
|     let [track] = captureSystemAudioStream.getAudioTracks(); | ||||
|     const gdm = await navigator.mediaDevices.chromiumGetDisplayMedia({ | ||||
|         video: true, | ||||
|         audio: true | ||||
|     }); | ||||
|     gdm.addTrack(track); | ||||
|     return gdm; | ||||
| }; | ||||
| navigator.mediaDevices.getDisplayMedia = getDisplayMedia; | ||||
							
								
								
									
										79
									
								
								src/screenshare/audio.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								src/screenshare/audio.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,79 @@ | |||
| import {spawn} from "child_process"; | ||||
| import fs from "fs"; | ||||
| import {app} from "electron"; | ||||
| import path from "path"; | ||||
| 
 | ||||
| // quick and dirty way for audio screenshare on Linux
 | ||||
| // please PR a better non-shell solution that isn't a dependency mess
 | ||||
| //src https://github.com/edisionnano/Screenshare-with-audio-on-Discord-with-Linux
 | ||||
| interface SinkInput { | ||||
|     id: string; | ||||
|     properties: Record<string, string>; | ||||
| } | ||||
| 
 | ||||
| const parseSinkInputs = (input: string): SinkInput[] => { | ||||
|     const regex = /Sink Input #(\d+)\n([\s\S]+?)(?=\nSink Input #|\n{2,}|$)/g; | ||||
|     const result: SinkInput[] = []; | ||||
|     let match; | ||||
| 
 | ||||
|     while ((match = regex.exec(input))) { | ||||
|         const sinkInput: SinkInput = { | ||||
|             id: match[1], | ||||
|             properties: {} | ||||
|         }; | ||||
| 
 | ||||
|         const propertiesRegex = /(\w+)\s*=\s*"([^"]*)"/g; | ||||
|         let propertiesMatch; | ||||
| 
 | ||||
|         while ((propertiesMatch = propertiesRegex.exec(match[2]))) { | ||||
|             sinkInput.properties[propertiesMatch[1]] = propertiesMatch[2]; | ||||
|         } | ||||
| 
 | ||||
|         result.push(sinkInput); | ||||
|     } | ||||
| 
 | ||||
|     return result; | ||||
| }; | ||||
| 
 | ||||
| export function createVirtualDevice(sinkInput: number) { | ||||
|     var script = ` | ||||
|     SINK_NAME=armcord | ||||
|     export LC_ALL=C | ||||
|     DEFAULT_OUTPUT=$(pactl info|sed -n -e 's/^.*Default Sink: //p') | ||||
|     pactl load-module module-null-sink sink_name=$SINK_NAME | ||||
|     pactl move-sink-input ${sinkInput} $SINK_NAME | ||||
|     pactl load-module module-loopback source=$SINK_NAME.monitor sink=$DEFAULT_OUTPUT | ||||
|     if pactl info|grep -w "PipeWire">/dev/null; then | ||||
|         nohup pw-loopback --capture-props='node.target='$SINK_NAME --playback-props='media.class=Audio/Source node.name=virtmic node.description="virtmic"' >/dev/null & | ||||
|     else | ||||
|         pactl load-module module-remap-source master=$SINK_NAME.monitor source_name=virtmic source_properties=device.description=virtmic | ||||
|     fi`;
 | ||||
|     let scriptPath = path.join(app.getPath("temp"), "/", "script.sh"); | ||||
|     spawn("chmod +x " + scriptPath); | ||||
|     fs.writeFileSync(scriptPath, script, "utf-8"); | ||||
|     const exec = spawn(scriptPath); | ||||
| } | ||||
| 
 | ||||
| export function isAudioSupported(): boolean { | ||||
|     const pactl = spawn("pactl"); | ||||
| 
 | ||||
|     pactl.on("close", (code) => { | ||||
|         if (code == 0) { | ||||
|             return true; | ||||
|         } | ||||
|     }); | ||||
|     return false; | ||||
| } | ||||
| export function getSinks() { | ||||
|     const pactl = spawn("pactl list sink-inputs"); | ||||
| 
 | ||||
|     pactl.stderr.on("data", (data) => { | ||||
|         console.log(data); | ||||
|         return parseSinkInputs(data); | ||||
|     }); | ||||
|     pactl.on("close", (code) => { | ||||
|         if (code !== 0) { | ||||
|             throw Error("Couldn't get list of available apps for audio stream"); | ||||
|         } | ||||
|     }); | ||||
| } | ||||
|  | @ -1,10 +1,18 @@ | |||
| import {BrowserWindow, desktopCapturer, ipcMain, session} from "electron"; | ||||
| import path from "path"; | ||||
| import {iconPath} from "../main"; | ||||
| import {getSinks, isAudioSupported} from "./audio"; | ||||
| let capturerWindow: BrowserWindow; | ||||
| function registerCustomHandler(): void { | ||||
|     session.defaultSession.setDisplayMediaRequestHandler(async (request, callback) => { | ||||
|         console.log(request); | ||||
|         if (process.platform == "linux") { | ||||
|             let isAudio = isAudioSupported(); | ||||
|             if (isAudio) { | ||||
|                 console.log("audio supported"); | ||||
|                 getSinks(); | ||||
|             } | ||||
|         } | ||||
|         const sources = await desktopCapturer.getSources({ | ||||
|             types: ["screen", "window"] | ||||
|         }); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue