nix/modules/voip/greetings.nix

34 lines
1.1 KiB
Nix

{ lib, pkgs, cfg }:
# Transcode voicemail greeting audio files to multiple formats so Asterisk can
# play them without transcoding regardless of the channel's active codec.
# Playback() is called with the path minus extension; Asterisk finds the best.
#
# Returns:
# { shared : path | null — greeting dir for the shared mailbox
# , persons : { key : path | null } — greeting dir per person key
# }
let
mkGreetingDir = name: src:
pkgs.runCommand "greeting-${name}" {
nativeBuildInputs = [ pkgs.ffmpeg ];
} ''
mkdir -p $out
ffmpeg -i ${src} -ar 8000 -ac 1 -f mulaw $out/greeting.ulaw
ffmpeg -i ${src} -ar 8000 -ac 1 -f alaw $out/greeting.alaw
ffmpeg -i ${src} -ar 16000 -ac 1 -acodec adpcm_g722 $out/greeting.g722
'';
in {
shared =
if cfg.sharedMailbox != null && cfg.sharedMailbox.greeting != null
then mkGreetingDir "shared" cfg.sharedMailbox.greeting
else null;
persons = lib.mapAttrs (key: person:
if person.mailbox && person.mailboxGreeting != null
then mkGreetingDir key person.mailboxGreeting
else null
) cfg.persons;
}