├── .gitignore
├── src
├── pasetup
│ ├── README.md
│ └── pasetup.iss
├── pasvc
│ ├── README.md
│ ├── pasvcfw.c
│ └── pasvc.c
├── icon
│ ├── README.md
│ ├── pulseaudio-flat-simple.svg
│ ├── pulseaudio-flat.svg
│ └── pulseaudio.svg
├── pulseaudio
│ ├── README.md
│ ├── 0003-system.pa-Tweaks-for-custom-build-with-unix-sockets.patch
│ ├── 0004-build-sys-meson-Fix-building-without-GIO.patch
│ ├── 0002-system.pa-Tweaks-for-custom-build.patch
│ ├── 0001-client-conf-Enable-auto-connect-localhost-by-default.patch
│ └── mingw32-deps.sh
└── Dockerfile
├── LICENSE
├── .github
└── workflows
│ ├── build.yml
│ └── release.yml
└── README.md
/.gitignore:
--------------------------------------------------------------------------------
1 | build
2 |
--------------------------------------------------------------------------------
/src/pasetup/README.md:
--------------------------------------------------------------------------------
1 | # pasetup
2 |
3 | An [Inno Setup 6](https://jrsoftware.org/isinfo.php) installer for
4 | pulseaudio-win32.
5 |
--------------------------------------------------------------------------------
/src/pasvc/README.md:
--------------------------------------------------------------------------------
1 | # pasvc
2 |
3 | Helpers for managing the PulseAudio service and the firewall rules.
4 |
5 | Previously, this used to also wrap PulseAudio to allow it to run as a service,
6 | but I ended up integrating that into PA itself.
7 |
--------------------------------------------------------------------------------
/src/icon/README.md:
--------------------------------------------------------------------------------
1 | # icon
2 |
3 | Modified PulseAudio icon. The shadow and a few gradients have been removed, and
4 | there is also a simplified version with brighter colors, solid border, and a
5 | more visible foreground for visibility at smaller sizes.
6 |
7 | | Original | Flat | Flat (simplified) |
8 | | --- | --- | --- |
9 | |  |  |  |
10 |
--------------------------------------------------------------------------------
/src/pulseaudio/README.md:
--------------------------------------------------------------------------------
1 | # pulseaudio
2 |
3 | Files related to building PulseAudio for Windows with MinGW using Meson.
4 |
5 | This mainly consists of patches for fixing bugs or compiler warnings (which I am
6 | planning to upstream), but there a few pulseaudio-win32-specific patches for
7 | better integration (see [here](https://pgaskin.net/pulseaudio-win32#patches) for
8 | a list of patches).
9 |
10 | Also includes a script, [mingw32-deps.sh](./minw32-deps.sh), for recursively
11 | resolving and downloading MinGW DLLs which a binary depends on from the OpenSUSE
12 | MinGW 32-bit repository.
13 |
--------------------------------------------------------------------------------
/src/pulseaudio/0003-system.pa-Tweaks-for-custom-build-with-unix-sockets.patch:
--------------------------------------------------------------------------------
1 | From eec511f76538a9e254f2b166898861eb75fa7e05 Mon Sep 17 00:00:00 2001
2 | From: Patrick Gaskin
3 | Date: Thu, 22 Apr 2021 08:11:11 -0400
4 | Subject: [PATCH] system.pa: Tweaks for custom build with unix sockets
5 |
6 | Use anonymous authentication for the system socket.
7 | ---
8 | src/daemon/system.pa.in | 2 +-
9 | 1 file changed, 1 insertion(+), 1 deletion(-)
10 |
11 | diff --git a/src/daemon/system.pa.in b/src/daemon/system.pa.in
12 | index d3512005a..c55df5bb2 100755
13 | --- a/src/daemon/system.pa.in
14 | +++ b/src/daemon/system.pa.in
15 | @@ -56,7 +56,7 @@ ifelse(@HAVE_AF_UNIX@, 1, [dnl
16 | .ifexists module-esound-protocol-unix@PA_SOEXT@
17 | load-module module-esound-protocol-unix
18 | .endif
19 | -load-module module-native-protocol-unix
20 | +load-module module-native-protocol-unix auth-anonymous=1
21 | ])dnl
22 | load-module module-native-protocol-tcp auth-anonymous=1
23 |
24 | --
25 | 2.31.1
26 |
27 |
--------------------------------------------------------------------------------
/src/pulseaudio/0004-build-sys-meson-Fix-building-without-GIO.patch:
--------------------------------------------------------------------------------
1 | From 74469f4b25ad5d31be01b3c721da4a580f876de8 Mon Sep 17 00:00:00 2001
2 | From: Patrick Gaskin
3 | Date: Wed, 4 Aug 2021 04:44:23 -0400
4 | Subject: [PATCH] build-sys: meson: Fix building without GIO
5 |
6 | GIO is only needed for GSettings and GStreamer.
7 |
8 | Fixes a regression in 58052e0e04ee1b5fdb1027ebc19717e7766825ec.
9 | ---
10 | meson.build | 2 +-
11 | 1 file changed, 1 insertion(+), 1 deletion(-)
12 |
13 | diff --git a/meson.build b/meson.build
14 | index d7e468cab..dfc184679 100644
15 | --- a/meson.build
16 | +++ b/meson.build
17 | @@ -614,7 +614,7 @@ if dbus_dep.found()
18 | cdata.set('HAVE_DBUS', 1)
19 | endif
20 |
21 | -gio_dep = dependency('gio-2.0', version : '>= 2.26.0')
22 | +gio_dep = dependency('gio-2.0', version : '>= 2.26.0', required: false) # checked later on where needed by gsettings and gstreamer
23 | if get_option('gsettings').enabled()
24 | assert(gio_dep.found(), 'GSettings support needs glib I/O library (GIO)')
25 | cdata.set('HAVE_GSETTINGS', 1)
26 | --
27 | 2.31.1
28 |
29 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Patrick Gaskin
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/.github/workflows/build.yml:
--------------------------------------------------------------------------------
1 | name: Build
2 | on: [push, pull_request]
3 |
4 | jobs:
5 | build:
6 | name: Build
7 | runs-on: ubuntu-20.04
8 | steps:
9 | - name: Checkout
10 | uses: actions/checkout@v2
11 | with:
12 | fetch-depth: 0
13 | - name: Build
14 | run: |
15 | mkdir -p ./build &&
16 | docker build --tag pulseaudio-win32 --build-arg "PAW32_VERSION=$(echo "$(git describe --always --tags)" | sed -e "s/^v//g")" ./src &&
17 | docker save pulseaudio-win32 |
18 | tar -xOf - --wildcards '*/layer.tar' |
19 | tar -xvf - -C ./build
20 | - name: Upload (pasetup.exe)
21 | uses: actions/upload-artifact@v2
22 | with:
23 | name: Installer (pasetup.exe)
24 | path: build/pasetup.exe
25 | - name: Upload (pulseaudio.zip)
26 | uses: actions/upload-artifact@v2
27 | with:
28 | name: Binaries (pulseaudio.zip)
29 | path: build/pulseaudio.zip
30 | - name: Upload (pasvc.zip)
31 | uses: actions/upload-artifact@v2
32 | with:
33 | name: Binaries (pasvc.zip)
34 | path: build/pasvc.zip
35 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # pulseaudio-win32
2 |
3 | An up-to-date PulseAudio build for Windows with an installer, service, and other
4 | improvements.
5 |
6 | ### Features
7 |
8 | - Various fixes and improvements.
9 | - Standalone.
10 | - Optional installer.
11 | - Can run as a Windows Service.
12 | - Working `pactl`/`pacat`.
13 | - Working modules.
14 | - Working auto-connection to user and system instances.
15 | - Working unix sockets for both user and system instances on Windows 10.
16 | - HTML documentation.
17 | - Works on Windows 7 and later.
18 |
19 | ### Limitations
20 |
21 | - There are still some hard-coded paths which don't automatically relocate to
22 | the installation directory. This mainly affects the documentation.
23 | - Locale files aren't currently included.
24 |
25 | ### Building
26 |
27 | ```bash
28 | mkdir -p ./build &&
29 | docker build --tag pulseaudio-win32 --build-arg "PAW32_VERSION=$(echo "$(git describe --always --tags --dirty || echo unknown)" | sed -e "s/^v//g")" ./src &&
30 | docker save pulseaudio-win32 |
31 | tar -xOf - --wildcards '*/layer.tar' |
32 | tar -xvf - -C ./build
33 | ```
34 |
35 | ### Usage
36 |
37 | See the [website](https://pgaskin.net/pulseaudio-win32/#readme).
38 |
39 | ### Notes
40 |
41 | While this repository is licensed under the MIT license, the icon and build
42 | output is licensed under the LGPL like PulseAudio itself (the PulseAudio build
43 | isn't linked to GPL libraries).
44 |
--------------------------------------------------------------------------------
/src/icon/pulseaudio-flat-simple.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/.github/workflows/release.yml:
--------------------------------------------------------------------------------
1 | name: Release
2 | on:
3 | push:
4 | tags:
5 | - 'v*'
6 |
7 | jobs:
8 | release:
9 | name: Release
10 | runs-on: ubuntu-20.04
11 | steps:
12 | - name: Checkout
13 | uses: actions/checkout@v2
14 | with:
15 | fetch-depth: 0
16 | - name: Build
17 | run: |
18 | mkdir -p ./build &&
19 | docker build --tag pulseaudio-win32 --build-arg "PAW32_VERSION=$(echo "$(git describe --always --tags)" | sed -e "s/^v//g")" ./src &&
20 | docker save pulseaudio-win32 |
21 | tar -xOf - --wildcards '*/layer.tar' |
22 | tar -xvf - -C ./build
23 | - name: Release
24 | id: release
25 | uses: actions/create-release@v1
26 | env:
27 | GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
28 | with:
29 | tag_name: ${{github.ref}}
30 | release_name: ${{github.ref}}
31 | draft: true
32 | prerelease: false
33 | - name: Release (pasetup.exe)
34 | uses: actions/upload-release-asset@v1
35 | env:
36 | GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
37 | with:
38 | upload_url: ${{steps.release.outputs.upload_url}}
39 | asset_name: pasetup.exe
40 | asset_path: build/pasetup.exe
41 | asset_content_type: application/vnd.microsoft.portable-executable
42 | - name: Release (pulseaudio.zip)
43 | uses: actions/upload-release-asset@v1
44 | env:
45 | GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
46 | with:
47 | upload_url: ${{steps.release.outputs.upload_url}}
48 | asset_name: pulseaudio.zip
49 | asset_path: build/pulseaudio.zip
50 | asset_content_type: application/zip
51 |
--------------------------------------------------------------------------------
/src/pulseaudio/0002-system.pa-Tweaks-for-custom-build.patch:
--------------------------------------------------------------------------------
1 | From 784a2a9242a048f989b7db20ff527f53f008bde5 Mon Sep 17 00:00:00 2001
2 | From: Patrick Gaskin
3 | Date: Thu, 31 Dec 2020 20:43:42 -0500
4 | Subject: [PATCH] system.pa: Tweaks for custom build
5 |
6 | ---
7 | src/daemon/default.pa.in | 2 +-
8 | src/daemon/system.pa.in | 8 ++++++++
9 | 2 files changed, 9 insertions(+), 1 deletion(-)
10 |
11 | diff --git a/src/daemon/default.pa.in b/src/daemon/default.pa.in
12 | index a3ddad9ff..e5f310233 100755
13 | --- a/src/daemon/default.pa.in
14 | +++ b/src/daemon/default.pa.in
15 | @@ -45,7 +45,7 @@ ifelse(@HAVE_OSS_OUTPUT@, 1, [dnl
16 | #load-module module-oss-mmap device="/dev/dsp" sink_name=output source_name=input
17 | ])dnl
18 | ifelse(@HAVE_WAVEOUT@, 1, [dnl
19 | -load-module module-waveout sink_name=output source_name=input
20 | +load-module module-waveout sink_name=waveout source_name=wavein
21 | ])dnl
22 | #load-module module-null-sink
23 | ifelse(@HAVE_MKFIFO@, 1, [dnl
24 | diff --git a/src/daemon/system.pa.in b/src/daemon/system.pa.in
25 | index 989fcb4f3..d3512005a 100755
26 | --- a/src/daemon/system.pa.in
27 | +++ b/src/daemon/system.pa.in
28 | @@ -24,6 +24,11 @@ load-module module-device-restore
29 | load-module module-stream-restore
30 | load-module module-card-restore
31 |
32 | +### Load audio drivers statically
33 | +ifelse(@HAVE_WAVEOUT@, 1, [dnl
34 | +load-module module-waveout sink_name=waveout source_name=wavein
35 | +])dnl
36 | +
37 | ### Automatically load driver modules depending on the hardware available
38 | ifelse(@HAVE_UDEV@, 1, [dnl
39 | .ifexists module-udev-detect@PA_SOEXT@
40 | @@ -47,10 +52,13 @@ load-module module-devd-detect
41 | ])dnl
42 |
43 | ### Load several protocols
44 | +ifelse(@HAVE_AF_UNIX@, 1, [dnl
45 | .ifexists module-esound-protocol-unix@PA_SOEXT@
46 | load-module module-esound-protocol-unix
47 | .endif
48 | load-module module-native-protocol-unix
49 | +])dnl
50 | +load-module module-native-protocol-tcp auth-anonymous=1
51 |
52 | ### Automatically restore the default sink/source when changed by the user
53 | ### during runtime
54 | --
55 | 2.31.1
56 |
57 |
--------------------------------------------------------------------------------
/src/pulseaudio/0001-client-conf-Enable-auto-connect-localhost-by-default.patch:
--------------------------------------------------------------------------------
1 | From 5115f7a2be212825f056a1f619ee5762730f2b9a Mon Sep 17 00:00:00 2001
2 | From: Patrick Gaskin
3 | Date: Thu, 31 Dec 2020 06:38:28 -0500
4 | Subject: [PATCH] client-conf: Enable auto-connect-localhost by default
5 |
6 | ---
7 | man/pulse-client.conf.5.xml.in | 4 +---
8 | src/pulse/client-conf.c | 2 +-
9 | src/pulse/client.conf.in | 2 +-
10 | 3 files changed, 3 insertions(+), 5 deletions(-)
11 |
12 | diff --git a/man/pulse-client.conf.5.xml.in b/man/pulse-client.conf.5.xml.in
13 | index 5c0eff31b..0eadac228 100644
14 | --- a/man/pulse-client.conf.5.xml.in
15 | +++ b/man/pulse-client.conf.5.xml.in
16 | @@ -137,9 +137,7 @@ License along with PulseAudio; if not, see .
17 | connect to localhost via IP. Enabling this is a potential
18 | security hole since connections are only authenticated one-way
19 | and a rogue server might hence fool a client into sending it its
20 | - private (e.g. VoIP call) data. This was enabled by default on
21 | - PulseAudio version 0.9.21 and older. Defaults to
22 | - no.
23 | + private (e.g. VoIP call) data. Defaults to yes.
24 |
25 |
26 |