// Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef MEDIA_AUDIO_AUDIO_IO_H_ #define MEDIA_AUDIO_AUDIO_IO_H_ #include <stdint.h> #include "base/time/time.h" #include "media/base/audio_bus.h" #include "media/base/audio_glitch_info.h" #include "media/base/media_export.h" // Low-level audio output support. To make sound there are 3 objects involved: // - AudioSource : produces audio samples on a pull model. Implements // the AudioSourceCallback interface. // - AudioOutputStream : uses the AudioSource to render audio on a given // channel, format and sample frequency configuration. Data from the // AudioSource is delivered in a 'pull' model. // - AudioManager : factory for the AudioOutputStream objects, manager // of the hardware resources and mixer control. // // The number and configuration of AudioOutputStream does not need to match the // physically available hardware resources. For example you can have: // // MonoPCMSource1 --> MonoPCMStream1 --> | | --> audio left channel // StereoPCMSource -> StereoPCMStream -> | mixer | // MonoPCMSource2 --> MonoPCMStream2 --> | | --> audio right channel // // This facility's objective is mix and render audio with low overhead using // the OS basic audio support, abstracting as much as possible the // idiosyncrasies of each platform. Non-goals: // - Positional, 3d audio // - Dependence on non-default libraries such as DirectX 9, 10, XAudio // - Digital signal processing or effects // - Extra features if a specific hardware is installed (EAX, X-fi) // // The primary client of this facility is audio coming from several tabs. // Specifically for this case we avoid supporting complex formats such as MP3 // or WMA. Complex format decoding should be done by the renderers. // Models an audio stream that gets rendered to the audio hardware output. // Because we support more audio streams than physically available channels // a given AudioOutputStream might or might not talk directly to hardware. // An audio stream allocates several buffers for audio data and calls // AudioSourceCallback::OnMoreData() periodically to fill these buffers, // as the data is written to the audio device. Size of each packet is determined // by |samples_per_packet| specified in AudioParameters when the stream is // created. namespace media { class MEDIA_EXPORT AudioOutputStream { … }; // Models an audio sink receiving recorded audio from the audio driver. class MEDIA_EXPORT AudioInputStream { … }; } // namespace media #endif // MEDIA_AUDIO_AUDIO_IO_H_