Edit 16.7.2026: New packages where Pipewire has replaced Pulseaudio
Machine-Speaker2-deb-package-with-script.zip
Machine-Speaker2-rpm-with-source.rpm
machine-speaker-plus-for-freebsd-2026.zip
A new version for FreeBSD which has recording option included. It sounds funny, but works somehow. Unfortunately Pipewire recording does not work yet in FreeBSD.
Machine speaker which need packages espeak, yad and sox to be installed. Not so good than Gespeaker but working with every systems.
espeak-ng version MACHINESPEAKER-NG.zip
Machinespeaker deb and rpm packages MACHINESPEAKER-deb-and-rpm-packages.zip
RPM-packages with dependecies, made using RPMCreator
Code:
#!/bin/sh
#
# RJP 21.9.2025 machine speaker 2
# simple version from machinespeaker
# New version with pipewire audio recording
# default speed should +- 100 words per minute
# packages yad, mpv, yt-dlp, espeak, pipewire and wireplumber are required
315=$({
echo '#!/bin/bash
pw-record -P "'{ stream.capture.sink=true }'" /tmp/ms-audio.flac
'
} > /tmp/record-ms-audio)
316=$({
echo '#!/bin/bash
time=$(date "+%F-%H-%M-%S")
pkill pw-record && ffmpeg -i /tmp/ms-audio.flac -ab 320k MACHINE-SPEAKER-audio-$time.mp3 &
'
} > /tmp/stop-recording)
chmod +x /tmp/record-ms-audio
chmod +x /tmp/stop-recording
echo "
50
55
60
65
70
75
80
85
90
95
100
105
110
115
120
125
130
135
140
145
150
155
160
165
170
175
180
185
190
195
200
" > /tmp/options.txt
SPEAK="$(yad --center --entry --width=700 --height=100 --button=OK:0 --text-align=center --title="Write or paste here" --
text="WRITE OR PASTE TEXT INTO BOX" --entry --entry-label=BOX --entry-text="")"
echo "$SPEAK" > /tmp/input.txt
choose=$(cat /tmp/options.txt | \
yad --list --title="select words per minute speed" --text="select words per minute speed" --button=OK:0 --center --radiolist \
--width=500 --height=2000 \
--height=300 \
--column=Select \
--column=words
)
cat "$choose" 2> /tmp/tone.txt
cat /tmp/tone.txt | awk '{print $2}' > /tmp/tone2.txt
cat /tmp/tone2.txt | sed 's/^.//' > /tmp/tone3.txt
sed -i 's/TRUE|//g' /tmp/tone3.txt
tr -dc '0-9' < /tmp/tone3.txt > /tmp/tone4.txt
locale=$(
yad --list --title="select locale" --text="select locale" --button=OK:0 --center --radiolist \
--width=250 --height=500 \
--column=fi \
--column=en \
true fi false af false an false bg false bn false bs false ca false cs false cy false da false de false el false en false en-gb false en-sc false en-uk false en-uk-rp false en-uk-wmids false en-us false en-wi false eo false es false es-la false et false eu false fa false fa false fa-pin false fr-be false fr-fr false ga false grc false gu false hi false hr false hu false hy false hy-west false ia false id false is false it false jbo false ka false kn false ku false la false lfn false lt false lv false mk false ml false ms false ne false nl false no false pa false pl false pt-br false pt-pt false ro false ru false sk false sq false sr false sv false sw false ta false te false tr false vi false vi-hue false vi-sgn false zh false zh-yue
)
cat "$locale" 2> /tmp/locale.txt
cat /tmp/locale.txt | awk '{print $2}' > /tmp/locale2.txt
cat /tmp/locale2.txt | sed 's/^.//' > /tmp/locale3.txt
sed -i 's/TRUE|//g' /tmp/locale3.txt
sed -i 's/.$//' /tmp/locale3.txt
sed -i 's/.$//' /tmp/locale3.txt
sed -i 's/.$//' /tmp/locale3.txt
gender=$(
yad --list --title="select gender" --text="select gender" --button=OK:0 --center --radiolist \
--width=300 --height=200 \
--column="man is m5" \
--column="woman is f5"\
true m5 false f5
)
cat "$gender" 2> /tmp/gender.txt
cat /tmp/gender.txt | awk '{print $2}' > /tmp/gender2.txt
cat /tmp/gender2.txt | sed 's/^.//' > /tmp/gender3.txt
sed -i 's/TRUE|//g' /tmp/gender3.txt
sed -i 's/.$//' /tmp/gender3.txt
sed -i 's/.$//' /tmp/gender3.txt
sed -i 's/.$//' /tmp/gender3.txt
yad --form --center --columns=2 --rows=3 --width=500 --height=150 --title="MACHINE SPEAKER 2" --text="MACHINE SPEAKER 2" \
\
--field="Speak text":fbtn "sh -c 'cat /tmp/input.txt | espeak -v $(cat /tmp/locale3.txt)+$(cat /tmp/gender3.txt) -s $(cat /tmp/tone4.txt) ; exec sh' & " \
--field="Stop speaking":fbtn "sh -c 'killall espeak; exec sh' & " \
--field="Record monitor audio with Pipewire":fbtn "/tmp/./record-ms-audio " \
--field="Stop recording audio":fbtn "/tmp/./stop-recording " \
--button=Exit:1
cd /tmp && rm gender3.txt locale3.txt tone3.txt gender.txt locale.txt tone.txt input.txt gender2.txt locale2.txt options.txt tone2.txt tone4.txt record-ms-audio stop-recording
Machinespeak-ng in Rocky Linux
Machinespeaker in antiX Linux



