Roc Toolkit internal modules
Roc Toolkit: real-time audio streaming
resampler_reader.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_reader.h
10 //! @brief Resampler.
11 
12 #ifndef ROC_AUDIO_RESAMPLER_READER_H_
13 #define ROC_AUDIO_RESAMPLER_READER_H_
14 
15 #include "roc_audio/frame.h"
17 #include "roc_audio/iresampler.h"
18 #include "roc_audio/sample.h"
19 #include "roc_audio/sample_spec.h"
20 #include "roc_core/array.h"
21 #include "roc_core/noncopyable.h"
22 #include "roc_core/slice.h"
23 #include "roc_core/stddefs.h"
24 #include "roc_packet/units.h"
25 
26 namespace roc {
27 namespace audio {
28 
29 //! Resampler element for reading pipeline.
31 public:
32  //! Initialize.
34  IResampler& resampler,
35  const SampleSpec& in_sample_spec,
36  const SampleSpec& out_sample_spec);
37 
38  //! Check if object is successfully constructed.
39  bool is_valid() const;
40 
41  //! Set new resample factor.
42  bool set_scaling(float multiplier);
43 
44  //! Read audio frame.
45  virtual bool read(Frame&);
46 
47 private:
48  bool push_input_();
49  core::nanoseconds_t capture_ts_(Frame& out_frame);
50 
51  IResampler& resampler_;
52  IFrameReader& reader_;
53 
54  const audio::SampleSpec in_sample_spec_;
55  const audio::SampleSpec out_sample_spec_;
56 
57  // timestamp of the last sample +1 of the last frame pushed into resampler
58  core::nanoseconds_t last_in_cts_;
59 
60  float scaling_;
61  bool valid_;
62 };
63 
64 } // namespace audio
65 } // namespace roc
66 
67 #endif // ROC_AUDIO_RESAMPLER_READER_H_
Dynamic array.
Audio frame.
Definition: frame.h:25
Frame reader interface.
Definition: iframe_reader.h:22
Audio writer interface.
Definition: iresampler.h:24
Resampler element for reading pipeline.
ResamplerReader(IFrameReader &reader, IResampler &resampler, const SampleSpec &in_sample_spec, const SampleSpec &out_sample_spec)
Initialize.
bool set_scaling(float multiplier)
Set new resample factor.
virtual bool read(Frame &)
Read audio frame.
bool is_valid() const
Check if object is successfully constructed.
Sample specification. Describes sample rate and channels.
Definition: sample_spec.h:26
Base class for non-copyable objects.
Definition: noncopyable.h:23
Audio frame.
Frame reader 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.