35 lines
1.2 KiB
INI
35 lines
1.2 KiB
INI
|
|
[Unit]
|
|||
|
|
Description=ESP32 Serial Audio to PulseAudio
|
|||
|
|
After=pulseaudio.service
|
|||
|
|
Requires=pulseaudio.service
|
|||
|
|
# Tie service start to the device node so it won’t launch until udev creates it
|
|||
|
|
Requires=dev-ttyESP32_A.device
|
|||
|
|
After=dev-ttyESP32_A.device
|
|||
|
|
|
|||
|
|
[Service]
|
|||
|
|
# Ensure PulseAudio runtime dir is set so pactl can connect
|
|||
|
|
Environment=XDG_RUNTIME_DIR=/run/user/%U
|
|||
|
|
Environment=LANG=en_US.UTF-8
|
|||
|
|
WorkingDirectory=/home/littlesophia/serial_audio_catcher
|
|||
|
|
|
|||
|
|
# Wait until PulseAudio socket and serial device exist
|
|||
|
|
ExecStartPre=/bin/sh -c 'until [ -S "$XDG_RUNTIME_DIR/pulse/native" ] && [ -e /dev/ttyESP32_A ]; do sleep 2; done'
|
|||
|
|
|
|||
|
|
# Create the null sink before starting the pipeline
|
|||
|
|
ExecStartPre=/usr/bin/pactl unload-module module-null-sink
|
|||
|
|
ExecStartPre=/usr/bin/pactl load-module module-null-sink sink_name=esp32 rate=16000 channels=2 format=s16le
|
|||
|
|
|
|||
|
|
# Run the pipeline through a shell so the pipe is interpreted correctly
|
|||
|
|
ExecStart=/bin/sh -c '/home/littlesophia/serial_audio_catcher/serial_to_stdout /dev/ttyESP32_A | /usr/bin/pacat --raw --rate=16000 --channels=2 --format=s16le --device=esp32'
|
|||
|
|
|
|||
|
|
# Restart automatically if it crashes or exits
|
|||
|
|
Restart=always
|
|||
|
|
RestartSec=5
|
|||
|
|
|
|||
|
|
# Log output to journal
|
|||
|
|
StandardOutput=journal
|
|||
|
|
StandardError=journal
|
|||
|
|
|
|||
|
|
[Install]
|
|||
|
|
WantedBy=default.target
|