Finding the Right Sound Device
How the TranscriptOMatic should operate is, to connect to Discord voice using a dedicated Discord account for this purpose. During sessions, the Discord client (Legcord) will join the discord voice session. No microphone or speaker will be attached to the device.
This setup makes it possible to work with only a single audio source. If you want to adaptrecreate thisTranscriptOMatic concept toon a devicesystem different from a Raspberry Pi 500, you are actively using, you alsowill need to capturefind out the right devices and names on your microphoneown. inputThis —was Discordmy doesapproach, notthat playmight give you an idea where to start finding the right settings for your own voice back to you.environment:
Finding the system'System's audioAudio sinksSinks
Checking for the system's audio sinks:
pactl list short sinks
The result should look something like this:
mela@Cox:~ $ pactl list short sinks
35 auto_null PipeWire float32le 2ch 48000Hz SUSPENDED
Finding the Discord soundSound deviceDevice
After joining a Discord voice channel, checking for the Discord system sound device:
pactl list short sink-inputs
The result should be something like:
mela@Cox:~ $ pactl list short sink-inputs
184 35 183 PipeWire float32le 2ch 48000Hz
Adding a persistentPersistent sinkSink (andAnd usingUsing itsIts monitorMonitor as a stableStable audioAudio source)Source).
Create a dedicated null sink for Discord audio:
pactl load-module module-null-sink \
sink_name=discord_sink \
sink_properties=device.description=DiscordSink
After joining a Discord voice channel, the sink-input may disappear quickly if the channel is silent. To immediately move the active sink-input to the persistent sink:
pactl move-sink-input $(pactl list short sink-inputs | awk '{print $1}') discord_sinkThis assumes that only a single sink-input is active, which is a reasonable assumption in a minimal setup, but may not hold true on a typical desktop system.
Controlling the result:
pactl list short sinks
The result should look something like this: IDLE instead of SUSPENDED.
IDLE means the sink exists persistently but currently receives no audio data.
mela@Cox:~ $ pactl list short sinks
199 discord_sink PipeWire float32le 2ch 48000Hz IDLE
Getting the sound monitor source:
pactl list short sources
The result should look something like this:
mela@Cox:~ $ pactl list short sources
199 discord_sink.monitor PipeWire float32le 2ch 48000Hz IDLE
Changing meeting-start to Reflect Your Environment
Based on your results, change the relevant parts of meeting-start accordingly:
# 1) Ensure discord_sink exists
if ! pactl list short sinks | awk '{print $2}' | grep -qx "$DISCORD_SINK"; then
pactl load-module module-null-sink \
sink_name="$DISCORD_SINK" \
sink_properties=device.description=DiscordSink >/dev/null
fi
# 2) Try to move an active sink-input (Discord) to discord_sink
# This may be transient in silent channels → poll briefly.
moved="no"
for _ in {1..40}; do
SID="$(pactl list short sink-inputs 2>/dev/null | awk 'NF{print $1}' | head -n1 || true)"
if [[ -n "${SID:-}" ]]; then
if pactl move-sink-input "$SID" "$DISCORD_SINK" 2>/dev/null; then
moved="yes"
break
fi
fi
sleep 0.25
done