// Copyright 2016 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Module Overview: Starboard Speech Synthesis API
//
// A basic text-to-speech API intended to be used for audio accessibilty.
//
// Implementations of this API should audibly play back text to assist
// users in non-visual navigation of the application.
//
// Note that these functions do not have to be thread-safe. They must
// only be called from a single application thread.

#ifndef STARBOARD_SPEECH_SYNTHESIS_H_
#define STARBOARD_SPEECH_SYNTHESIS_H_

#include "starboard/configuration.h"
#include "starboard/export.h"
#include "starboard/types.h"

#if SB_HAS(SPEECH_SYNTHESIS) && SB_VERSION(3)

#ifdef __cplusplus
extern "C" {
#endif

#if SB_API_VERSION < 4
// DEPRECATED IN API VERSION 4
// Must be called before any other function in this module,
// or subsequent calls are allowed to fail silently.
//
// |lang| should be a BCP 47 language string, eg "en-US".
// Return true if language is supported, false if not.
SB_EXPORT bool SbSpeechSynthesisSetLanguage(const char* lang);
#endif

// Enqueues |text|, a UTF-8 string, to be spoken.
// Returns immediately.
//
// Spoken language for the text should be the same as the locale returned
// by SbSystemGetLocaleId().
//
// If audio from previous SbSpeechSynthesisSpeak() invocations is still
// processing, the current speaking should continue and this new
// text should be queued to play when the previous utterances are complete.
SB_EXPORT void SbSpeechSynthesisSpeak(const char* text);

// Cancels all speaking and queued speech synthesis audio. Must
// return immediately.
SB_EXPORT void SbSpeechSynthesisCancel();

#ifdef __cplusplus
}  // extern "C"
#endif

#endif  // SB_HAS(SPEECH_SYNTHESIS) && SB_VERSION(3)

#endif  // STARBOARD_SPEECH_SYNTHESIS_H_
