34 lines
1.1 KiB
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;
|
|
}
|