mirror of
https://github.com/Droid-Deck/DroidDeck.git
synced 2026-11-11 19:11:08 +00:00
DirectAudio from its own release: driver set per Proton audio interface (CachyOS fix), the Steam client's own DirectAudio sink, binaries out of tree Games - Two driver sets ship from the pinned DirectAudio release (tools/directaudio/release.env = directaudio-linux-v1.1.0, sha256-checked by tools/directaudio/fetch.sh in CI and build_local.sh): linux-wine11 for Valve Proton 11 / Experimental / GE-Proton, and linux-wine11-systhread for Proton-CachyOS, whose Wine carries the system-thread mmdevapi interface. steam-compatibility picks by whether the Proton's own winepulse.so imports PsCreateSystemThread, never by the version string (both say wine-11.0; the wrong set is silence). No matching set: DirectAudio off, Proton's audio runs, logged. - Proton-CachyOS's launcher pre-sets WINE_AUDIO_DRIVER=pulse,alsa and its mmdevapi reads that before the registry (Valve's and GE's do not read it): the wrapper exports WINE_AUDIO_DRIVER=directaudio,pulse as well as writing the registry. On CachyOS this also makes DirectAudio engage on a game's first launch. - A wineserver from an earlier Steam verb can save its in-memory registry over the appended Audio value; the wrapper says so when one is live. Writing through it (wine reg add) and creating a missing prefix first (proton run wineboot) were tried on the device and withdrawn: a second Proton/Wine run inside Steam's launch sequence got launches aborted. - Tests: both sets, no set, no prefix (34 pass). Steam client audio - DirectAudio = module-directaudio-native-sink, the game driver's AAudio engine inside the PulseAudio daemon, one step from Android (adaptive buffer, two-burst floor, primed ring with fades, reopen on route change, watchdog, limiter). Default. Shared output = the previous relay route, kept. New pref clientAudioRoute; the old boolean is not read. If the native sink cannot open its stream the daemon keeps running (.nofail) and ensureClientSink loads the plain AAudio sink instead, logged to audio.log. Audio bundle stamp bumped. Out of tree - app/src/main/assets/directaudio/ is generated and ignored; tools/directaudio-relay/ and the vendored module-directaudio-sink.c + da_relay_proto.h are gone; tools/aaudio-sink keeps only module-aaudio-sink (the fallback). The release carries the relay and sink field fixes by MaxsTechReview (#338), credited there and in its AUTHORS. Device-proven on an AYANEO Pocket FIT: client sink 12 ms / 4 ms bursts, 0 underruns; FEZ on cachyos-11.0-20261005-slr on DirectAudio (took pulse before); FEZ on Proton Experimental unchanged; Curse of the Dead Gods on CachyOS from a cold prefix, DirectAudio on first launch. Co-authored-by: The412Banner <the412banner@users.noreply.github.com>
57 lines
3.2 KiB
Bash
Executable File
57 lines
3.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Fetches the DirectAudio pieces DroidDeck ships from the pinned release in tools/directaudio/release.env
|
|
# and puts them where the build reads them. Four zips, checksummed:
|
|
# directaudio-linux-wine11.zip the game driver for Valve Proton 11 / Experimental / GE-Proton
|
|
# directaudio-linux-wine11-systhread.zip the game driver for Proton-CachyOS (system-thread mmdevapi)
|
|
# directaudio-linux-relay.zip the Android-side helper (speaker + microphone for games)
|
|
# directaudio-linux-sink.zip the PulseAudio sinks; the app ships module-directaudio-native-sink
|
|
#
|
|
# tools/directaudio/fetch.sh <repo root> <dir to receive the sink modules>
|
|
#
|
|
# Driver sets -> app/src/main/assets/directaudio/<set>/ (generated, ignored by git)
|
|
# Helper -> app/src/main/jniLibs/arm64-v8a/libdirectaudiorelay.so (generated, ignored by git)
|
|
# Sink -> <sink dir>/module-directaudio-native-sink.so for the audio bundle, next to the
|
|
# module-aaudio-sink.so tools/aaudio-sink builds (the fallback).
|
|
set -euo pipefail
|
|
repo_root=$1
|
|
sink_out=$2
|
|
# shellcheck source=release.env
|
|
. "${repo_root}/tools/directaudio/release.env"
|
|
for v in DIRECTAUDIO_REPO DIRECTAUDIO_TAG DIRECTAUDIO_WINE11_SHA256 DIRECTAUDIO_SYSTHREAD_SHA256 DIRECTAUDIO_RELAY_SHA256 DIRECTAUDIO_SINK_SHA256; do
|
|
[[ -n "${!v:-}" && "${!v}" != TBD ]] || { echo "tools/directaudio/release.env: ${v} is not set" >&2; exit 1; }
|
|
done
|
|
work=$(mktemp -d)
|
|
trap 'rm -rf "${work}"' EXIT
|
|
|
|
fetch() {
|
|
local name=$1 sha=$2
|
|
curl -fsSL --retry 3 -o "${work}/${name}" \
|
|
"https://github.com/${DIRECTAUDIO_REPO}/releases/download/${DIRECTAUDIO_TAG}/${name}"
|
|
echo "${sha} ${work}/${name}" | sha256sum -c - >/dev/null || { echo "${name}: checksum mismatch" >&2; exit 1; }
|
|
}
|
|
fetch directaudio-linux-wine11.zip "${DIRECTAUDIO_WINE11_SHA256}"
|
|
fetch directaudio-linux-wine11-systhread.zip "${DIRECTAUDIO_SYSTHREAD_SHA256}"
|
|
fetch directaudio-linux-relay.zip "${DIRECTAUDIO_RELAY_SHA256}"
|
|
fetch directaudio-linux-sink.zip "${DIRECTAUDIO_SINK_SHA256}"
|
|
|
|
assets="${repo_root}/app/src/main/assets/directaudio"
|
|
rm -rf "${assets}"
|
|
for set in linux-wine11 linux-wine11-systhread; do
|
|
mkdir -p "${assets}/${set}"
|
|
unzip -q "${work}/directaudio-${set}.zip" -d "${assets}/${set}"
|
|
for f in aarch64-unix/winedirectaudio.so aarch64-windows/winedirectaudio.drv i386-windows/winedirectaudio.drv version.txt; do
|
|
test -f "${assets}/${set}/${f}" || { echo "${set}: ${f} missing from the release zip" >&2; exit 1; }
|
|
done
|
|
rm -f "${assets}/${set}/README.md"
|
|
done
|
|
# Each set says which interface it was built for; the name must not lie.
|
|
grep -q '^abi wine11$' "${assets}/linux-wine11/version.txt"
|
|
grep -q '^abi systhread$' "${assets}/linux-wine11-systhread/version.txt"
|
|
|
|
mkdir -p "${work}/relay" "${work}/sink" "${sink_out}" "${repo_root}/app/src/main/jniLibs/arm64-v8a"
|
|
unzip -q "${work}/directaudio-linux-relay.zip" -d "${work}/relay"
|
|
install -m755 "${work}/relay/libdirectaudiorelay.so" "${repo_root}/app/src/main/jniLibs/arm64-v8a/libdirectaudiorelay.so"
|
|
unzip -q "${work}/directaudio-linux-sink.zip" -d "${work}/sink"
|
|
install -m755 "${work}/sink/module-directaudio-native-sink.so" "${sink_out}/"
|
|
echo "DirectAudio ${DIRECTAUDIO_TAG}: two driver sets, the relay helper and the client sink in place"
|