audio_stream_handler.h revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
15d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// Copyright 2013 The Chromium Authors. All rights reserved.
22d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// Use of this source code is governed by a BSD-style license that can be
32d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// found in the LICENSE file.
42d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
52d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#ifndef MEDIA_AUDIO_SOUNDS_AUDIO_STREAM_HANDLER_H_
62d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define MEDIA_AUDIO_SOUNDS_AUDIO_STREAM_HANDLER_H_
72d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
82d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include "base/basictypes.h"
92d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include "base/compiler_specific.h"
102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include "base/strings/string_piece.h"
112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include "base/threading/non_thread_safe.h"
122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include "media/audio/audio_io.h"
132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include "media/audio/audio_parameters.h"
142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include "media/audio/sounds/wav_audio_handler.h"
152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include "media/base/media_export.h"
162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesnamespace media {
182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
19class AudioManager;
20
21// This class sends a sound to the audio manager.
22class 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