Skip to main content

Audio Service: Audio Recording and Playback Service

audio_service is a long-running C++ service that provides recording, playback, and volume control capabilities. The Go Agent's device voice pipeline and the audio_volume tool call this service through a Unix domain socket.

Default Parameters

ParameterDefault Value
Socket/run/audio_service/audio_service.sock
Log/var/log/audio_service/audio_service.log
Binary/oem/usr/bin/audio_service
Volume state file/userdata/audio_service/playback_volume

Command-line Parameters

audio_service [--socket PATH] [--volume-state PATH]
ParameterDescription
--socket PATHUnix domain socket path for service communication
--volume-state PATHFile path for persisting playback volume across restarts; default /userdata/audio_service/playback_volume

When run directly during development, it also defaults to /run/audio_service/audio_service.sock, which can be overridden via a parameter or environment variable:

AUDIO_SERVICE_SOCKET=/tmp/audio_service.sock ./build/bin/audio_service
./build/bin/audio_service --socket /tmp/audio_service.sock

Startup

/etc/init.d/S53audio_service start
/etc/init.d/S53audio_service status
/etc/init.d/S53audio_service restart

CLI

audio_service_cli [--socket PATH] <command>

Commands:
health
record-stream [--seconds N]
play-stream [--rate N] [--ch N] [--bits N]
get-volume
set-volume --volume N

Examples:

./build/bin/audio_service_cli --socket /run/audio_service/audio_service.sock health
./build/bin/audio_service_cli --socket /run/audio_service/audio_service.sock get-volume
./build/bin/audio_service_cli --socket /run/audio_service/audio_service.sock set-volume --volume 80

Recording:

./build/bin/audio_service_cli --socket /run/audio_service/audio_service.sock record-stream --seconds 3 > /tmp/record.pcm

Playback:

cat /tmp/record.pcm | ./build/bin/audio_service_cli --socket /run/audio_service/audio_service.sock play-stream --rate 16000 --ch 1 --bits 16

Agent Configuration

[audio]
socket = "/run/audio_service/audio_service.sock"
sample_rate = 16000
channels = 1
bit_width = 16

In voice mode, the Agent uses the audio service to:

  1. Start a recording session;
  2. Read PCM chunks;
  3. Detect speech boundaries with RKNN Silero VAD;
  4. Start a playback session and write PCM when playback is needed.

Volume

audio_service exposes a logical volume of 0..100. The underlying device maximum volume can be initialized with:

scripts/setup_audio_volume.sh

See Volume Initialization and Adjustment for details.