| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef MEDIA_AUDIO_AUDIO_IO_H_ | 5 #ifndef MEDIA_AUDIO_AUDIO_IO_H_ |
| 6 #define MEDIA_AUDIO_AUDIO_IO_H_ | 6 #define MEDIA_AUDIO_AUDIO_IO_H_ |
| 7 | 7 |
| 8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
| 9 | 9 |
| 10 // Low-level audio output support. To make sound there are 3 objects involved: | 10 // Low-level audio output support. To make sound there are 3 objects involved: |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 virtual void GetVolume(double* volume) = 0; | 100 virtual void GetVolume(double* volume) = 0; |
| 101 | 101 |
| 102 // Close the stream. This also generates AudioSourceCallback::OnClose(). | 102 // Close the stream. This also generates AudioSourceCallback::OnClose(). |
| 103 // After calling this method, the object should not be used anymore. | 103 // After calling this method, the object should not be used anymore. |
| 104 virtual void Close() = 0; | 104 virtual void Close() = 0; |
| 105 | 105 |
| 106 protected: | 106 protected: |
| 107 virtual ~AudioOutputStream() {} | 107 virtual ~AudioOutputStream() {} |
| 108 }; | 108 }; |
| 109 | 109 |
| 110 // Models an audio sink receiving recorded audio from the audio driver. |
| 111 class AudioInputStream { |
| 112 public: |
| 113 class AudioInputCallback { |
| 114 public: |
| 115 virtual ~AudioInputCallback() {} |
| 116 |
| 117 // Called by the audio recorder when a full packet of audio data is |
| 118 // available. This is called from a special audio thread and the |
| 119 // implementation should return as soon as possible. |
| 120 virtual void OnData(AudioInputStream* stream, const uint8* src, |
| 121 uint32 size) = 0; |
| 122 |
| 123 // The stream is done with this callback, the last call received by this |
| 124 // audio sink. |
| 125 virtual void OnClose(AudioInputStream* stream) = 0; |
| 126 |
| 127 // There was an error while recording audio. The audio sink cannot be |
| 128 // destroyed yet. No direct action needed by the AudioInputStream, but it |
| 129 // is a good place to stop accumulating sound data since is is likely that |
| 130 // recording will not continue. |code| is an error code that is platform |
| 131 // specific. |
| 132 virtual void OnError(AudioInputStream* stream, int code) = 0; |
| 133 }; |
| 134 |
| 135 // Open the stream and prepares it for recording. Call Start() to actually |
| 136 // begin recording. |
| 137 virtual bool Open() = 0; |
| 138 |
| 139 // Starts recording audio and generating AudioInputCallback::OnData(). |
| 140 // The input stream does not take ownership of this callback. |
| 141 virtual void Start(AudioInputCallback* callback) = 0; |
| 142 |
| 143 // Stops recording audio. Effect might not be instantaneous as there could be |
| 144 // pending audio callbacks in the queue which will be issued first before |
| 145 // recording stops. |
| 146 virtual void Stop() = 0; |
| 147 |
| 148 // Close the stream. This also generates AudioInputCallback::OnClose(). This |
| 149 // should be the last call made on this object. |
| 150 virtual void Close() = 0; |
| 151 |
| 152 protected: |
| 153 virtual ~AudioInputStream() {} |
| 154 }; |
| 155 |
| 110 // Manages all audio resources. In particular it owns the AudioOutputStream | 156 // Manages all audio resources. In particular it owns the AudioOutputStream |
| 111 // objects. Provides some convenience functions that avoid the need to provide | 157 // objects. Provides some convenience functions that avoid the need to provide |
| 112 // iterators over the existing streams. | 158 // iterators over the existing streams. |
| 113 class AudioManager { | 159 class AudioManager { |
| 114 public: | 160 public: |
| 115 enum Format { | 161 enum Format { |
| 116 AUDIO_PCM_LINEAR = 0, // PCM is 'raw' amplitude samples. | 162 AUDIO_PCM_LINEAR = 0, // PCM is 'raw' amplitude samples. |
| 117 AUDIO_PCM_LOW_LATENCY, // Linear PCM, low latency requested. | 163 AUDIO_PCM_LOW_LATENCY, // Linear PCM, low latency requested. |
| 118 AUDIO_MOCK, // Creates a dummy AudioOutputStream object. | 164 AUDIO_MOCK, // Creates a dummy AudioOutputStream object. |
| 119 AUDIO_LAST_FORMAT // Only used for validation of format. | 165 AUDIO_LAST_FORMAT // Only used for validation of format. |
| 120 }; | 166 }; |
| 121 | 167 |
| 122 // Telephone quality sample rate, mostly for speech-only audio. | 168 // Telephone quality sample rate, mostly for speech-only audio. |
| 123 static const uint32 kTelephoneSampleRate = 8000; | 169 static const uint32 kTelephoneSampleRate = 8000; |
| 124 // CD sampling rate is 44.1 KHz or conveniently 2x2x3x3x5x5x7x7. | 170 // CD sampling rate is 44.1 KHz or conveniently 2x2x3x3x5x5x7x7. |
| 125 static const uint32 kAudioCDSampleRate = 44100; | 171 static const uint32 kAudioCDSampleRate = 44100; |
| 126 // Digital Audio Tape sample rate. | 172 // Digital Audio Tape sample rate. |
| 127 static const uint32 kAudioDATSampleRate = 48000; | 173 static const uint32 kAudioDATSampleRate = 48000; |
| 128 | 174 |
| 129 // Returns true if the OS reports existence of audio devices. This does not | 175 // Returns true if the OS reports existence of audio devices. This does not |
| 130 // guarantee that the existing devices support all formats and sample rates. | 176 // guarantee that the existing devices support all formats and sample rates. |
| 131 virtual bool HasAudioOutputDevices() = 0; | 177 virtual bool HasAudioOutputDevices() = 0; |
| 132 | 178 |
| 179 // Returns true if the OS reports existence of audio recording devices. This |
| 180 // does not guarantee that the existing devices support all formats and |
| 181 // sample rates. |
| 182 virtual bool HasAudioInputDevices() = 0; |
| 183 |
| 133 // Factory for all the supported stream formats. The |channels| can be 1 to 5. | 184 // Factory for all the supported stream formats. The |channels| can be 1 to 5. |
| 134 // The |sample_rate| is in hertz and can be any value supported by the | 185 // The |sample_rate| is in hertz and can be any value supported by the |
| 135 // platform. For some future formats the |sample_rate| and |bits_per_sample| | 186 // platform. For some future formats the |sample_rate| and |bits_per_sample| |
| 136 // can take special values. | 187 // can take special values. |
| 137 // Returns NULL if the combination of the parameters is not supported, or if | 188 // Returns NULL if the combination of the parameters is not supported, or if |
| 138 // we have reached some other platform specific limit. | 189 // we have reached some other platform specific limit. |
| 139 // | 190 // |
| 140 // AUDIO_PCM_LOW_LATENCY can be passed to this method and it has two effects: | 191 // AUDIO_PCM_LOW_LATENCY can be passed to this method and it has two effects: |
| 141 // 1- Instead of triple buffered the audio will be double buffered. | 192 // 1- Instead of triple buffered the audio will be double buffered. |
| 142 // 2- A low latency driver or alternative audio subsystem will be used when | 193 // 2- A low latency driver or alternative audio subsystem will be used when |
| 143 // available. | 194 // available. |
| 144 // | 195 // |
| 145 // Do not free the returned AudioOutputStream. It is owned by AudioManager. | 196 // Do not free the returned AudioOutputStream. It is owned by AudioManager. |
| 146 virtual AudioOutputStream* MakeAudioOutputStream(Format format, int channels, | 197 virtual AudioOutputStream* MakeAudioOutputStream(Format format, int channels, |
| 147 int sample_rate, | 198 int sample_rate, |
| 148 char bits_per_sample) = 0; | 199 char bits_per_sample) = 0; |
| 149 | 200 |
| 201 // Factory to create audio recording streams. |
| 202 // |channels| can be 1 or 2. |
| 203 // |sample_rate| is in hertz and can be any value supported by the platform. |
| 204 // |bits_per_sample| can be any value supported by the platform. |
| 205 // |samples_per_packet| is in hertz as well and can be 0 to |sample_rate|, |
| 206 // with 0 suggesting that the implementation use a default value for that |
| 207 // platform. |
| 208 // Returns NULL if the combination of the parameters is not supported, or if |
| 209 // we have reached some other platform specific limit. |
| 210 // |
| 211 // Do not free the returned AudioInputStream. It is owned by AudioManager. |
| 212 // When you are done with it, call |Stop()| and |Close()| to release it. |
| 213 virtual AudioInputStream* MakeAudioInputStream(Format format, int channels, |
| 214 int sample_rate, |
| 215 char bits_per_sample, |
| 216 uint32 samples_per_packet) = 0; |
| 217 |
| 150 // Muting continues playback but effectively the volume is set to zero. | 218 // Muting continues playback but effectively the volume is set to zero. |
| 151 // Un-muting returns the volume to the previous level. | 219 // Un-muting returns the volume to the previous level. |
| 152 virtual void MuteAll() = 0; | 220 virtual void MuteAll() = 0; |
| 153 virtual void UnMuteAll() = 0; | 221 virtual void UnMuteAll() = 0; |
| 154 | 222 |
| 155 // Get AudioManager singleton. | 223 // Get AudioManager singleton. |
| 156 // TODO(cpu): Define threading requirements for interacting with AudioManager. | 224 // TODO(cpu): Define threading requirements for interacting with AudioManager. |
| 157 static AudioManager* GetAudioManager(); | 225 static AudioManager* GetAudioManager(); |
| 158 | 226 |
| 159 protected: | 227 protected: |
| 160 virtual ~AudioManager() {} | 228 virtual ~AudioManager() {} |
| 161 }; | 229 }; |
| 162 | 230 |
| 163 | 231 |
| 164 #endif // MEDIA_AUDIO_AUDIO_IO_H_ | 232 #endif // MEDIA_AUDIO_AUDIO_IO_H_ |
| OLD | NEW |