dotfiles/dotfiles/bin/record.sh

59 lines
1.7 KiB
Bash
Executable File

#!/bin/bash
# Credit: This code is based on answers provided by Waschtl and KrisWebDev
# https://askubuntu.com/questions/60837/record-a-programs-output-with-pulseaudio
cleanup(){
if [ -z "$module_id" ]
then
exit 3
fi
# Revert the input sink back to it's original value
pactl move-sink-input $index $curr_sink
# Unload the module I've previously loaded
pactl unload-module $module_id
exit 0
}
# Call cleanup function when user press ctrl+c
trap "cleanup" SIGINT SIGTERM
if ! default_output=$(pacmd list-sinks | grep -A1 "* index" | grep -oP "<\K[^ >]+")
then
echo "Can't seem to find proper output sink, are you using pulseaudio?"
exit 1
fi
pacmd list-sink-inputs|grep -E '(index|application.name)'
while read -p "Choose recording index: " index
do
if [ "$index" = "exit" ]
then
exit 0
fi
curr_sink=$(pacmd list-sink-inputs|grep -EA 8 "index: $index\b"|grep sink|sed -E 's/.*sink:\s*([0-9]+)\s*.*/\1/')
if echo "$curr_sink"|grep -qE '^[0-9]+$'
then
break
fi
echo 'Invalid index, type exit to quit'
echo '-------------------------------'
pacmd list-sink-inputs|grep -E '(index|application.name)'
done
if [ -f "temp.mp3" ]
then
read -p "temp.mp3 file already exist, replace (y/n)? " ans
if [ "$ans" != "y" ]
then
exit 1
fi
fi
module_id=$(pactl load-module module-combine-sink sink_name=record-n-play slaves=$default_output sink_properties=device.description="Record-and-Play")
pactl move-sink-input $index record-n-play
parec --format=s16le -d record-n-play.monitor | lame -r -q 9 --cbr -b 320 - "temp.mp3"
# export my variables so that cleanup function can access them
export index,curr_sink,module_id
cleanup