diff --git a/aports/device/fp6-device-tweaks/APKBUILD b/aports/device/fp6-device-tweaks/APKBUILD index 305b9ab..6ba018a 100644 --- a/aports/device/fp6-device-tweaks/APKBUILD +++ b/aports/device/fp6-device-tweaks/APKBUILD @@ -11,12 +11,16 @@ # libssc crash on unconfigured SSC maintainer="Jorijn van der Graaf " pkgname=fp6-device-tweaks -pkgver=2 +pkgver=3 pkgrel=0 pkgdesc="Fairphone 6 device-critical system configuration" url="https://forgejo.catcrafts.net/Catcrafts/fp6-img" arch="noarch" license="MIT" +# apk-native ban: with this meta installed, the resolver routes Plasma +# Mobile's audio through real PulseAudio, which claims the card and runs +# wireplumber in a video-only profile - no sinks, ever +depends="!postmarketos-base-ui-audio-backend-pulseaudio" options="!check" source=" inv-icm42600.conf diff --git a/aports/device/soc-fairphone-fp6-audio/50-echo-cancel.conf b/aports/device/soc-fairphone-fp6-audio/50-echo-cancel.conf new file mode 100644 index 0000000..54aa453 --- /dev/null +++ b/aports/device/soc-fairphone-fp6-audio/50-echo-cancel.conf @@ -0,0 +1,30 @@ +# Acoustic echo cancellation for VoLTE speakerphone calls (journal/ims.md s43). +# Creates a virtual pair: ec_sink (play here; forwarded to the speakers and +# used as the AEC reference) and ec_source (mic with the speaker signal +# subtracted, WebRTC AEC). capture/playback are pinned to the hardware nodes +# so making ec_* the defaults cannot loop the module into itself. +context.modules = [ + { name = libpipewire-module-echo-cancel + args = { + library.name = aec/libspa-aec-webrtc + source.props = { + node.name = "ec_source" + node.description = "Echo-cancelled microphone" + } + sink.props = { + node.name = "ec_sink" + node.description = "Echo-cancelled speakers" + } + capture.props = { + node.name = "ec_capture" + target.object = "alsa_input.platform-sound.capture.1.0" + node.passive = true + } + playback.props = { + node.name = "ec_playback" + target.object = "alsa_output.platform-sound.playback.0.0" + node.passive = true + } + } + } +] diff --git a/aports/device/soc-fairphone-fp6-audio/51-fp6-ucm.conf b/aports/device/soc-fairphone-fp6-audio/51-fp6-ucm.conf new file mode 100644 index 0000000..77ab270 --- /dev/null +++ b/aports/device/soc-fairphone-fp6-audio/51-fp6-ucm.conf @@ -0,0 +1,11 @@ +monitor.alsa.rules = [ + { + matches = [ { device.name = "alsa_card.platform-sound" } ] + actions = { + update-props = { + api.alsa.use-acp = false + api.alsa.soft-mixer = false + } + } + } +] diff --git a/aports/device/soc-fairphone-fp6-audio/APKBUILD b/aports/device/soc-fairphone-fp6-audio/APKBUILD index bd71838..9ccde2f 100644 --- a/aports/device/soc-fairphone-fp6-audio/APKBUILD +++ b/aports/device/soc-fairphone-fp6-audio/APKBUILD @@ -5,7 +5,7 @@ # The tplg/UCM target filenames contain spaces, hence the safe source names. maintainer="Jorijn van der Graaf " pkgname=soc-fairphone-fp6-audio -pkgver=1 +pkgver=2 pkgrel=0 pkgdesc="Fairphone 6 audio topology, amp firmware and UCM profile" url="https://forgejo.catcrafts.net/Catcrafts/audioreach-topology" @@ -17,6 +17,8 @@ source=" aw88261_acf.bin ucm-milos-fp6.conf HiFi.conf + 51-fp6-ucm.conf + 50-echo-cancel.conf " package() { @@ -28,6 +30,12 @@ package() { "$pkgdir/usr/share/alsa/ucm2/conf.d/milos/Fairphone (Gen. 6).conf" install -Dm644 "$srcdir"/HiFi.conf \ "$pkgdir"/usr/share/alsa/ucm2/Fairphone/fp6/HiFi.conf + # wireplumber: no ACP/soft-mixer for the UCM-driven card + install -Dm644 "$srcdir"/51-fp6-ucm.conf \ + "$pkgdir"/etc/wireplumber/wireplumber.conf.d/51-fp6-ucm.conf + # AEC pair (ec_sink/ec_source) for VoLTE speakerphone calls + install -Dm644 "$srcdir"/50-echo-cancel.conf \ + "$pkgdir"/etc/pipewire/pipewire.conf.d/50-echo-cancel.conf } sha512sums=" @@ -35,4 +43,6 @@ sha512sums=" a84b0595ae71b0bb594034a9f5fd77b984c9086cd917f32524c4b5172bc72a426e5d188d18dbccdb587f66d60fa15cad441fffcd48a3a1ce66335199b61e0350 aw88261_acf.bin 3bb268f9fcb8d1c0b42741b67da42b6361bab259e7211d9930919995ebe7dcf67826e6d4f00ff5e4fe5b52067fe90d00212158c3b4879d1bee481e87f0623206 ucm-milos-fp6.conf 2a189c3141fedc43f8eb19f4df1e43487223d524e27da3f948556d224cca1f493f6815ada191953fb79a19d5c5abadb21de7b3ece7b74b0929338c216e21e84a HiFi.conf +28a301e7eed738408660c1a303771a6cd1bc2bdd493bac95602f17c9b2cb56a0b9c0001b8002a99b0b1bd3dc1d2ee3f6696a8b629b86818d64605c643d2eec29 51-fp6-ucm.conf +ec63fa5363738a43c9eee4b1be70201e2d2076ec817031fda087e61d781e81dc67351be44faf8b056a2939875a139cd909f7c311115bb1150e17ad4493846606 50-echo-cancel.conf " diff --git a/build.sh b/build.sh index 7aa73b5..46e16de 100755 --- a/build.sh +++ b/build.sh @@ -151,7 +151,7 @@ aports = $WORK/pmaports device = fairphone-fp6 ui = plasma-mobile systemd = always -extra_packages = soc-fairphone-fp6-audio,callaudioshim,imsd,fp6-device-tweaks +extra_packages = soc-fairphone-fp6-audio,callaudioshim,imsd,fp6-device-tweaks,postmarketos-base-ui-audio-backend-pipewire,pipewire-pulse,pipewire-echo-cancel EOF pmbootstrap checksum linux-postmarketos-qcom-milos