Home | History | Annotate | Download | only in sounds
      1 // Copyright 2013 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 MEDIA_AUDIO_SOUNDS_AUDIO_STREAM_HANDLER_H_
      6 #define MEDIA_AUDIO_SOUNDS_AUDIO_STREAM_HANDLER_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "base/compiler_specific.h"
     10 #include "base/strings/string_piece.h"
     11 #include "base/threading/non_thread_safe.h"
     12 #include "media/audio/audio_io.h"
     13 #include "media/audio/audio_parameters.h"
     14 #include "media/audio/sounds/wav_audio_handler.h"
     15 #include "media/base/media_export.h"
     16 
     17 namespace media {
     18 
     19 class AudioManager;
     20 
     21 // This class sends a sound to the audio manager.
     22 class MEDIA_EXPORT AudioStreamHandler : public base::NonThreadSafe {
     23  public:
     24   class TestObserver {
     25    public:
     26     virtual ~TestObserver() {}
     27 
     28     // Following methods will be called only from the audio thread.
     29 
     30     // Called when AudioOutputStreamProxy::Start() was successfully called.
     31     virtual void OnPlay() = 0;
     32 
     33     // Called when AudioOutputStreamProxy::Stop() was successfully called.
     34     virtual void OnStop(size_t cursor) = 0;
     35   };
     36 
     37   // C-tor for AudioStreamHandler. |wav_data| should be a raw
     38   // uncompressed WAVE data which will be sent to the audio manager.
     39   explicit AudioStreamHandler(const base::StringPiece& wav_data);
     40   virtual ~AudioStreamHandler();
     41 
     42   // Returns true iff AudioStreamHandler is correctly initialized;
     43   bool IsInitialized() const;
     44 
     45   // Plays sound.  Volume level will be set according to current settings
     46   // and won't be changed during playback. Returns true iff new playback
     47   // was successfully started.
     48   //
     49   // NOTE: if current playback isn't at end of stream, playback request
     50   // is dropped, but true is returned.
     51   bool Play();
     52 
     53   // Stops current playback.
     54   void Stop();
     55 
     56   const WavAudioHandler& wav_audio_handler() const { return wav_audio_; }
     57 
     58  private:
     59   friend class AudioStreamHandlerTest;
     60   friend class SoundsManagerTest;
     61 
     62   class AudioStreamContainer;
     63 
     64   static void SetObserverForTesting(TestObserver* observer);
     65   static void SetAudioSourceForTesting(
     66       AudioOutputStream::AudioSourceCallback* source);
     67 
     68   WavAudioHandler wav_audio_;
     69   scoped_ptr<AudioStreamContainer> stream_;
     70 
     71   bool initialized_;
     72 
     73   DISALLOW_COPY_AND_ASSIGN(AudioStreamHandler);
     74 };
     75 
     76 }  // namespace media
     77 
     78 #endif  // MEDIA_AUDIO_SOUNDS_AUDIO_STREAM_HANDLER_H_
     79