
___x_cmd_termux_say(){

    local ___X_CMD_TERMUX_SAY_MAIN_OPTS=""

    local stream=""
    local stdinmode=""

    while [ $# -gt 0 ]; do
        case "$1" in
            -r|--rate)      [ $# -ge 2 ] || N=termux M="Exepcted argument after $1"     log:ret:64;
                            ___x_cmd cmdstr ___X_CMD_TERMUX_SAY_MAIN_OPTS -r "$2";  shift 2 ;;
            -s|--stream)    [ $# -ge 2 ] || N=termux M="Exepcted argument after $1"     log:ret:64;

                            stream="$2"
                            case "$stream" in
                                a|alarm|ALARM)                      stream=ALARM ;;
                                m|music|MUSIC)                      stream=MUSIC ;;
                                n|notification|NOTIFICATION)        stream=NOTIFICATION ;;
                                r|ring|RING)                        stream=RING ;;
                                s|system|SYSTEM)                    stream=SYSTEM ;;
                                v|voice|VOICE_CALL)                 stream=VOICE_CALL ;;
                            esac
                            ___x_cmd cmdstr ___X_CMD_TERMUX_SAY_MAIN_OPTS -s "$stream";  shift 2 ;;

            -p|--pitch)     [ $# -ge 2 ] || N=termux M="Exepcted argument after $1"     log:ret:64;
                            ___x_cmd cmdstr ___X_CMD_TERMUX_SAY_MAIN_OPTS -p "$2";  shift 2 ;;
            -|--stdin)      stdinmode=1 ;;
            -h|--help)      ___x_cmd help -m termux say; return ;;
            *)              break ;;
        esac

        break
    done

    local content
    if [ -n "$stdinmode" ] || [ $# -eq 0 ]; then
        content="$(___x_cmd_cmds cat)"
    else
        local IFS=' '
        content="$*"
    fi

    eval ___x_cmd_cmds termux-tts-speak "$___X_CMD_TERMUX_SAY_MAIN_OPTS" '"$content"'
}
