| // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| // |
| // Implementation of cross-engine TtsEngine code. |
| |
| #include <stdio.h> |
| #include <stdint.h> |
| #include <stdlib.h> |
| #include <string.h> |
| |
| #include <map> |
| #include <vector> |
| |
| #include "tts_engine.h" |
| |
| using std::map; |
| using std::vector; |
| |
| namespace speech_synthesis { |
| |
| int TtsEngine::GetVoiceIndex(const TtsVoice* voice_options) { |
| int count = GetVoiceCount(); |
| for (int i = 0; i < count; i++) { |
| const TtsVoice* voice = GetVoiceInfo(i); |
| if (TtsEngine::VoiceMatches(voice, voice_options)) { |
| return i; |
| } |
| } |
| return -1; |
| } |
| |
| bool TtsEngine::VoiceMatches(const TtsVoice* voice, const TtsVoice* pattern) { |
| return (pattern->name.empty() |
| || strcasecmp(voice->name.c_str(), pattern->name.c_str()) == 0) |
| && (pattern->language.empty() |
| || strcasecmp(voice->language.c_str(), |
| pattern->language.c_str()) == 0) |
| && (pattern->sample_rate == 0 |
| || voice->sample_rate == pattern->sample_rate) |
| && (pattern->quality == TTS_UNSPECIFIED_QUALITY |
| || voice->quality == pattern->quality) |
| && (pattern->region.empty() |
| || strcasecmp(voice->region.c_str(), pattern->region.c_str()) == 0) |
| && (pattern->gender == TTS_UNSPECIFIED_GENDER |
| || voice->gender == pattern->gender) |
| && (pattern->age == 0 |
| || voice->age == pattern->age); |
| } |
| |
| tts_result TtsEngine::SetVoiceByLanguage(const string& language_code) { |
| int count = GetVoiceCount(); |
| for (int i = 0; i < count; i++) { |
| if (0 == strcasecmp(GetVoiceInfo(i)->language.c_str(), |
| language_code.c_str())) { |
| return SetVoice(i); |
| } |
| } |
| return TTS_FAILURE; |
| } |
| |
| } // namespace speech_synthesis |
| |