| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROMEOS_ASH_SERVICES_RECORDING_AUDIO_CAPTURE_UTIL_H_ |
| #define CHROMEOS_ASH_SERVICES_RECORDING_AUDIO_CAPTURE_UTIL_H_ |
| |
| #include <cstdint> |
| #include <memory> |
| |
| #include "base/time/time.h" |
| |
| namespace media { |
| class AudioBus; |
| class AudioParameters; |
| } // namespace media |
| |
| namespace recording::audio_capture_util { |
| |
| // The requested audio sample rate of the audio capturer. |
| constexpr int kAudioSampleRate = 48000; |
| |
| // If any of the `AudioStream`s that are managed by the `AudioStreamMixer` has |
| // a number of frames that collectively last for a duration that is equal or |
| // exceeding the below `kMaxAudioStreamFifoDuration`, the mixer will consume and |
| // mix all the mixable frames from all the streams, even if one or more streams |
| // are completely empty. |
| constexpr base::TimeDelta kMaxAudioStreamFifoDuration = base::Seconds(2); |
| |
| // Returns the audio parameters that gets used globally by the recording |
| // service. The returned parameters specify using stereo channel, PCM low |
| // latency audio recording at the `kAudioSampleRate`, and a number of frames per |
| // buffer that is equal to `kAudioSampleRate` / 100. |
| media::AudioParameters GetAudioCaptureParameters(); |
| |
| // Returns the number of frames that collectively last for the given `duration` |
| // at the capture `kAudioSampleRate`. |
| int64_t NumberOfAudioFramesInDuration(base::TimeDelta duration); |
| |
| // Creates a stereo audio bus that has the given number of `frames`, whose |
| // values are zeros. |
| std::unique_ptr<media::AudioBus> CreateStereoZeroInitializedAudioBusForFrames( |
| int64_t frames); |
| |
| // Creates a stereo audio bus that has a number of frames that collectively last |
| // for the given `duration` at the capture `kAudioSampleRate`. |
| std::unique_ptr<media::AudioBus> CreateStereoZeroInitializedAudioBusForDuration( |
| base::TimeDelta duration); |
| |
| // Accumulates the first `length` number of audio frames in the `source` audio |
| // bus to the already existing frames in the `destination` bus starting at |
| // `destination_start_frame`. Both `source` and `destination` buses must have |
| // the same number of channels. `length` must not exceed the number of frames in |
| // `source`, and `destination_start_frame` + `length` also must be within the |
| // bounds of the `destination` bus. |
| void AccumulateBusTo(const media::AudioBus& source, |
| media::AudioBus* destination, |
| int destination_start_frame, |
| int length); |
| |
| } // namespace recording::audio_capture_util |
| |
| #endif // CHROMEOS_ASH_SERVICES_RECORDING_AUDIO_CAPTURE_UTIL_H_ |