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   // Stops any previous playback if it's still not completed and
     46   // starts new playback. Volume level will be set according to
     47   // current settings and won't be changed during playback. Returns
     48   // true iff new playback was successfully started.
     49   bool Play();
     50 
     51   // Stops current playback.
     52   void Stop();
     53 
     54   const WavAudioHandler& wav_audio_handler() const { return wav_audio_; }
     55 
     56  private:
     57   friend class AudioStreamHandlerTest;
     58   friend class SoundsManagerTest;
     59 
     60   class AudioStreamContainer;
     61 
     62   static void SetObserverForTesting(TestObserver* observer);
     63   static void SetAudioSourceForTesting(
     64       AudioOutputStream::AudioSourceCallback* source);
     65 
     66   WavAudioHandler wav_audio_;
     67   scoped_ptr<AudioStreamContainer> stream_;
     68 
     69   bool initialized_;
     70 
     71   DISALLOW_COPY_AND_ASSIGN(AudioStreamHandler);
     72 };
     73 
     74 }  // namespace media
     75 
     76 #endif  // MEDIA_AUDIO_SOUNDS_AUDIO_STREAM_HANDLER_H_
     77