/* * Speech functions * * Copyright (C) 2019 Patrick McDermott * * This file is part of Timeteller. * * Timeteller is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Timeteller is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Timeteller. If not, see . */ #include "speech.h" #include #include #include #include cst_voice *register_cmu_us_slt(const char *voxdir); struct speech { cst_voice *voice; }; struct speech * speech_new(void) { struct speech *speech; speech = calloc(1, sizeof(*speech)); if (speech == NULL) { return NULL; } flite_init(); speech->voice = register_cmu_us_slt(NULL); if (speech->voice == NULL) { free(speech); return NULL; } return speech; } float speech_play_time(const struct speech *speech) { time_t t = 0; struct tm *tm; char buffer[6]; assert(speech); time(&t); if (t < (time_t) 0) { return -1; } tm = localtime(&t); if (tm == NULL) { return -1; } strftime(buffer, sizeof(buffer) / sizeof(buffer[0]), "%H:%M", tm); /* Drop leading zero, for nicer pronunciations. The IANA Time Zone * Database and GNU C Library strftime() implementations offer "%k", but * it's not in C or POSIX. */ if (buffer[0] == '0') { buffer[0] = ' '; } return flite_text_to_speech(buffer, speech->voice, "play"); } struct speech * speech_destroy(struct speech **speech_p) { struct speech *speech; assert(speech_p && *speech_p); speech = *speech_p; free(speech); return speech = NULL; }