// 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

// Sets a language for speech synthesis.
//
// 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);

// Enqueues |text|, a UTF-8 string, to be spoken the currently
// selected language. Returns immediately.
//
// 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_
