defmodule Say do @moduledoc """ Lets the System say a text via text-to-speech. config :say, func: &IO.inspect/1 config :say, exec: "say" config :say, exec: "say", ssh_args: ~w(-p 2222 localhost) """ @doc """ Lets the system say the given text. ## Examples iex> Say.say("hello") """ def say(text) do do_say(text, Application.get_env(:say, :func), Application.get_env(:say, :exec), Application.get_env(:say, :ssh_args) ) end defp do_say(text, func, exec, ssh_args) when func != nil and exec == nil and ssh_args == nil do func.("say via func: " <> text) end defp do_say(text, func, exec, ssh_args) when func == nil and exec != nil and ssh_args == nil do System.cmd(exec, text) end defp do_say(text, func, exec, ssh_args) when func == nil and exec != nil and ssh_args != nil do System.cmd("ssh", ssh_args ++ [exec] ++ [text]) end end