1

Question: How do I get the pulseaudio command play from the Termux app to emit sound over the phone speakers (without rooting the phone or using a proot installation in Termux)?

Specifics: I have a Samsung Galaxy S21-U running Android 14 and Termux 0.118.1 (retrieved from F-Droid on 2024.08.22) with TigerVNC 1.10.1-41. TigerVNC and associated required packages retrieved via apt in termux, and I followed these steps to bring up an xfce4 desktop environment.

I cannot find working instructions, but I did find the following:

  1. The following solutions successfully played MP3 files over USB-C speakers:
  2. The VNC subset of this answer does not work for me
    • A virtual pulseaudio sink auto_null.monitor exists.
    • The commands play and mpg123 seem to attach to this sink.
    • With the above inputs attached, the sink auto_null.monitor switches state from SUSPENDED to RUNNING.
    • With audio playing, the xfce4 volume control panel shows the volume fluctuating.
    • No sound is emitted over either the phone or USB-C speakers.

Related questions and forum threads

This reddit thread contains some links.

  • There is a comment which others say does not work. For me, specifically, the error from those commands is User-configured server at 127.0.0.1, refusing to start/autospawn. I gather this is connected to the existing configuration set to achieve [1] and [2] above, but am not sure about the safe/correct steps to redress it.
  • There is a link to LinuxDroidMaster's Termux-Desktops github. The approach I'm using is consistant with what they call a termux native desktop. I couldn't find mention of sound beyond a passing pkg install pulseaudio line, but let me know if there's more there.
  • There is a link to these instructions, which seem to assume the proot installation approach has been followed. It seems to download a .sh file, but its content appears to be binary and I do not know how to extract it into a human-readable form to understand what it is doing.

This reddit user is strugging with a chroot termux setup

  • Their posted solution may contain important clues even though I am not using a chroot setup. I get the same User-configured server at 127.0.0.1, refusing to start/autospawn error when I enter their commands, but presumably I need to go back and undo something in the setup for failed solutions [1] and [2]] to tidy things up.

Another reddit thread

  • The only reply suggests using termux-media-player play from the termux-api package. This produces no sound for me, from either the phon or USBC speaker, when run from either the termux terminal or the xfce4 VNC session.

Pursuing the User-configured server at 127.0.0.1, refusing to start/autospawn error,

  • I ran apt remove pulseaudio --purge, noted the packages this would remove in the console output of said command, and then reinstalled all these packages along with pulseaudio.
  • This cleared user edits to configuration files in ~/../usr/etc/pulse/. I browsed for other suspicious *rc* and *profile* file names that might contain leftover configuration and found none.
  • I opened a fresh shell to clean out any export VARNAM=FOO cruft.
  • pulseaudio --start runs.
  • I typed pulseaudio -k and export PULSE_SERVER=127.0.0.1
  • Now pulseaudio --start prints the (presumably desired) refusing to start/autospawn error.
  • I returned to termux and ran pactl load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1 auth-anonymous=1
  • At this point, /u/allanrps reported

    You should now be able to return to the chroot environment and play audio. The clients will connect to the pulse server running in termux and you will have sound!

    But, no sound is heard (although pulseaudio controls register audio being sent).

Edit 1 on 2024.08.23: Is Termux 0.118.1 supposed to be able to output audio on its own?

Are these hypotheses true?:

  • Even when given permissions to play audio, the Termux app does not have access to the phone's speakers (unless perhaps on rooted devices with chroot?). It can only natively export sound over USB-C audio devices?
  • Most of the tutorials for the VNC desktop environments use pulseaudio, and the instructions above are not for routing pulseaudio output to external USB-C speakers.
  • The commands play-audio and mpv do something else to access USB-C speakers via termux (bypassing pulseaudio), which is why they work?
  • There is probably a way to get apps talking to pulseaudio in the xfce4 session to play to USB-C speakers as well, but exact methods are not documented?
  • In principle there is no reason a pulseaudio server with access to the phone speakers could not be incorporated into the termux app. Indeed, I imagine there may be forks or newer versions that do this. But, it is not (AFAICT) implemented in the F-Droid version? Or it is there and I can't get it to work?
  • For playback through phone speakers using termux on a non-rooted device, one needs a third Android app to serve a network pulseaudio sink, and connect termux to this as if it were a remote machine. I need to ensure that the pulseaudio client settings in termux are set correctly to match the pulseaudio server app started on Android. I will attempt this with PulseAudio Rtp Receiver version 1.0.6?

That said, even some of the older content I'm finding on the internet suggests that Termux can route pulseaudio output to the phone speakers on its own. I just can't find any tutorials that work. The information from forum posts are usually from people half-way through attempting a proot or chroot installation of a more expansive Linux distribution under Termux. I want to interface play in Termux with the host Android Linux as lightly a possible.

1 Answer 1

2

I couldn't get this working in Termux alone—despite rumors of support. But, a third app to receive a pulseaudio network stream did work.

Configure a RTP receiver app

Sticking to prebuilt FOSS solutions, here are settings that work with the app PulseAudio Rtp Receiver v1.0.6, downloaded from F-Droid on 2024.08.23. Open the PulseAudio Rtp Receiver app graphical user interface and enter these settings:

IP:               127.0.0.1
Port:             4712
MTU:              1500
Max Latency (ms): 100
Channel Count:    2
Channel Mask:     0
SampleRate:       48000
framesPerBurst:   192

Then press the Play button at the bottom of the app user interface and switch back to Termux.

Configure pulseaudio in Termux

Start with a fresh installation of pulseaudio.

apt install pulseaudio

OR, if you've messed with the pulseaudio configuration, wipe the slate clean with

apt remove pulseaudio
rm -rf /data/data/com.termux/files/usr/etc/pulse
apt install pulseaudio

Add the following lines to /data/data/com.termux/files/usr/etc/pulse/default.pa:

load-module module-null-sink sink_name=rtp format=s16be channels=2 rate=48000 sink_properties="device.description='RTP Multicast Sink'"

load-module module-rtp-send source=rtp.monitor destination_ip=127.0.0.1 port=4712 loop=1

Test it with these shell commands:

pulseaudio -k
pulseaudio --start
play -n -c1 synth whitenoise gain -50

After these changes, the phone speakers were available (via the RTP stream) in the xfce4 VNC session. Volume control was exposed and e.g. Youtube sound playback from firefox worked.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .