// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

[DartPackage="mojo_services", JavaPackage="org.chromium.mojo.speech_recognizer"]
module speech_recognizer;

enum Error {
  NETWORK_TIMEOUT = 1,
  NETWORK = 2,
  AUDIO = 3,
  SERVER = 4,
  CLIENT = 5,
  SPEECH_TIMEOUT = 6,
  NO_MATCH = 7,
  RECOGNIZER_BUSY = 8,
  INSUFFICIENT_PERMISSIONS = 9
};

struct UtteranceCandidate {
  // Utterance text candidate returned by speech recognition service.
  string text;

  // Confidence score in [0,1].
  float confidence_score;
};

union ResultOrError {
  Error error_code;
  array<UtteranceCandidate> results;
};

// |SpeechRecognizerService| provides access to a speech recognition service.
// It is responsible for reading microphone input, deciding when the user is
// done speaking, and performing speech recognition on the result.
[ServiceName="speech_recognizer::SpeechRecognizerService"]
interface SpeechRecognizerService {
  // Starts listening to the user. When listening has finished or an error
  // occurs, returns |result_or_error|. Any call to Listen() made while another
  // is in progress will immediately return an error.
  Listen() => (ResultOrError result_or_error);

  // Stops the SpeechRecognizer from listening and finishes any previous call
  // to Listen() causing it to return.
  StopListening();
};
