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 MEDIA_AUDIO_SIMPLE_SOURCES_H_ 6 #define MEDIA_AUDIO_SIMPLE_SOURCES_H_ 7 8 #include "base/synchronization/lock.h" 9 #include "media/audio/audio_io.h" 10 #include "media/base/seekable_buffer.h" 11 12 namespace media { 13 14 // An audio source that produces a pure sinusoidal tone. 15 class MEDIA_EXPORT SineWaveAudioSource 16 : public AudioOutputStream::AudioSourceCallback { 17 public: 18 // |channels| is the number of audio channels, |freq| is the frequency in 19 // hertz and it has to be less than half of the sampling frequency 20 // |sample_freq| or else you will get aliasing. 21 SineWaveAudioSource(int channels, double freq, double sample_freq); 22 virtual ~SineWaveAudioSource() {} 23 24 // Return up to |cap| samples of data via OnMoreData(). Use Reset() to 25 // allow more data to be served. 26 void CapSamples(int cap); 27 void Reset(); 28 29 // Implementation of AudioSourceCallback. 30 virtual int OnMoreData(AudioBus* audio_bus, 31 AudioBuffersState audio_buffers) OVERRIDE; 32 virtual int OnMoreIOData(AudioBus* source, 33 AudioBus* dest, 34 AudioBuffersState audio_buffers) OVERRIDE; 35 virtual void OnError(AudioOutputStream* stream) OVERRIDE; 36 37 // The number of OnMoreData()+OnMoreIOData() and OnError() calls respectively. 38 int callbacks() { return callbacks_; } 39 int errors() { return errors_; } 40 41 protected: 42 int channels_; 43 double f_; 44 int time_state_; 45 int cap_; 46 int callbacks_; 47 int errors_; 48 base::Lock time_lock_; 49 }; 50 51 } // namespace media 52 53 #endif // MEDIA_AUDIO_SIMPLE_SOURCES_H_ 54