Roc Toolkit internal modules
Roc Toolkit: real-time audio streaming
resampler_writer.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2018 Roc Streaming authors
3 *
4 * This Source Code Form is subject to the terms of the Mozilla Public
5 * License, v. 2.0. If a copy of the MPL was not distributed with this
6 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
7 */
8
9//! @file roc_audio/resampler_writer.h
10//! @brief Resampler.
11
12#ifndef ROC_AUDIO_RESAMPLER_WRITER_H_
13#define ROC_AUDIO_RESAMPLER_WRITER_H_
14
15#include "roc_audio/frame.h"
18#include "roc_audio/sample.h"
20#include "roc_core/array.h"
23#include "roc_core/slice.h"
24#include "roc_core/stddefs.h"
25#include "roc_packet/units.h"
26
27namespace roc {
28namespace audio {
29
30//! Resampler element for writing pipeline.
32public:
33 //! Initialize.
35 IResampler& resampler,
36 core::BufferFactory<sample_t>& buffer_factory,
37 const SampleSpec& in_sample_spec,
38 const SampleSpec& out_sample_spec);
39
40 //! Check if object is successfully constructed.
41 bool is_valid() const;
42
43 //! Set new resample factor.
44 bool set_scaling(float multiplier);
45
46 //! Read audio frame.
47 virtual void write(Frame&);
48
49private:
50 size_t push_input_(Frame& in_frame, size_t in_pos);
51 core::nanoseconds_t capture_ts_(Frame& in_frame, size_t in_pos);
52
53 IResampler& resampler_;
54 IFrameWriter& writer_;
55
56 const audio::SampleSpec in_sample_spec_;
57 const audio::SampleSpec out_sample_spec_;
58
59 core::Slice<sample_t> input_buf_;
60 core::Slice<sample_t> output_buf_;
61
62 size_t input_buf_pos_;
63 size_t output_buf_pos_;
64
65 float scaling_;
66 bool valid_;
67};
68
69} // namespace audio
70} // namespace roc
71
72#endif // ROC_AUDIO_RESAMPLER_WRITER_H_
Dynamic array.
Buffer factory.
Audio frame.
Definition: frame.h:25
Frame writer interface.
Definition: iframe_writer.h:22
Audio writer interface.
Definition: iresampler.h:24
Resampler element for writing pipeline.
virtual void write(Frame &)
Read audio frame.
bool set_scaling(float multiplier)
Set new resample factor.
bool is_valid() const
Check if object is successfully constructed.
ResamplerWriter(IFrameWriter &writer, IResampler &resampler, core::BufferFactory< sample_t > &buffer_factory, const SampleSpec &in_sample_spec, const SampleSpec &out_sample_spec)
Initialize.
Sample specification. Describes sample rate and channels.
Definition: sample_spec.h:26
Buffer factory. Allows to instantiate fixed-size buffers.
Base class for non-copyable objects.
Definition: noncopyable.h:23
Audio frame.
Frame writer interface.
Audio resampler interface.
int64_t nanoseconds_t
Nanoseconds.
Definition: time.h:58
Root namespace.
Non-copyable object.
Audio sample.
Sample specifications.
Slice.
Commonly used types and functions.
Various units used in packets.