1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CONTENT_BROWSER_SPEECH_GOOGLE_ONE_SHOT_REMOTE_ENGINE_H_ 6#define CONTENT_BROWSER_SPEECH_GOOGLE_ONE_SHOT_REMOTE_ENGINE_H_ 7 8#include <string> 9 10#include "base/basictypes.h" 11#include "base/memory/ref_counted.h" 12#include "base/memory/scoped_ptr.h" 13#include "content/browser/speech/audio_encoder.h" 14#include "content/browser/speech/speech_recognition_engine.h" 15#include "content/common/content_export.h" 16#include "net/url_request/url_fetcher_delegate.h" 17 18namespace net { 19class URLRequestContextGetter; 20} 21 22namespace content { 23 24// Implements a SpeechRecognitionEngine by means of remote interaction with 25// Google speech recognition webservice. 26class CONTENT_EXPORT GoogleOneShotRemoteEngine 27 : public NON_EXPORTED_BASE(SpeechRecognitionEngine), 28 public net::URLFetcherDelegate { 29 public: 30 // Duration of each audio packet. 31 static const int kAudioPacketIntervalMs; 32 // ID passed to URLFetcher::Create(). Used for testing. 33 static int url_fetcher_id_for_tests; 34 35 explicit GoogleOneShotRemoteEngine(net::URLRequestContextGetter* context); 36 virtual ~GoogleOneShotRemoteEngine(); 37 38 // SpeechRecognitionEngine methods. 39 virtual void SetConfig(const SpeechRecognitionEngineConfig& config) OVERRIDE; 40 virtual void StartRecognition() OVERRIDE; 41 virtual void EndRecognition() OVERRIDE; 42 virtual void TakeAudioChunk(const AudioChunk& data) OVERRIDE; 43 virtual void AudioChunksEnded() OVERRIDE; 44 virtual bool IsRecognitionPending() const OVERRIDE; 45 virtual int GetDesiredAudioChunkDurationMs() const OVERRIDE; 46 47 // net::URLFetcherDelegate methods. 48 virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE; 49 50 private: 51 SpeechRecognitionEngineConfig config_; 52 scoped_ptr<net::URLFetcher> url_fetcher_; 53 scoped_refptr<net::URLRequestContextGetter> url_context_; 54 scoped_ptr<AudioEncoder> encoder_; 55 56 DISALLOW_COPY_AND_ASSIGN(GoogleOneShotRemoteEngine); 57}; 58 59} // namespace content 60 61#endif // CONTENT_BROWSER_SPEECH_GOOGLE_ONE_SHOT_REMOTE_ENGINE_H_ 62