Audacity 3.2.0
ClipSegment.cpp
Go to the documentation of this file.
1/* SPDX-License-Identifier: GPL-2.0-or-later */
2/*!********************************************************************
3
4 Audacity: A Digital Audio Editor
5
6 ClipSegment.cpp
7
8 Matthieu Hodgkinson
9
10**********************************************************************/
11#include "ClipSegment.h"
12#include "ClipInterface.h"
13#include "SampleFormat.h"
15
16#include <cassert>
17
18namespace
19{
22{
24 params.timeRatio = clip.GetStretchRatio();
25 return params;
26}
27
29GetTotalNumSamplesToProduce(const ClipInterface& clip, double durationToDiscard)
30{
32 clip.GetStretchRatio() -
33 durationToDiscard * clip.GetRate() + .5 };
34}
35} // namespace
36
38 const ClipInterface& clip, double durationToDiscard,
39 PlaybackDirection direction)
40 : mTotalNumSamplesToProduce { GetTotalNumSamplesToProduce(
41 clip, durationToDiscard) }
42 , mSource { clip, durationToDiscard, direction }
43 , mStretcher { std::make_unique<StaffPadTimeAndPitch>(
44 clip.GetRate(), clip.GetWidth(), mSource,
46{
47}
48
49size_t ClipSegment::GetFloats(float *const *buffers, size_t numSamples)
50{
51 const auto numSamplesToProduce = limitSampleBufferSize(
53 mStretcher->GetSamples(buffers, numSamplesToProduce);
54 mTotalNumSamplesProduced += numSamplesToProduce;
55 return numSamplesToProduce;
56}
57
59{
61}
62
64{
65 return mSource.GetWidth();
66}
EffectDistortionSettings params
Definition: Distortion.cpp:77
PlaybackDirection
size_t limitSampleBufferSize(size_t bufferSize, sampleCount limit)
Definition: SampleCount.cpp:22
ClipTimeAndPitchSource mSource
Definition: ClipSegment.h:36
ClipSegment(const ClipInterface &, double durationToDiscard, PlaybackDirection)
Definition: ClipSegment.cpp:37
size_t GetWidth() const override
The number of channels in the segment.
Definition: ClipSegment.cpp:63
sampleCount mTotalNumSamplesProduced
Definition: ClipSegment.h:35
std::unique_ptr< TimeAndPitchInterface > mStretcher
Definition: ClipSegment.h:39
size_t GetFloats(float *const *buffers, size_t numSamples) override
Fills buffers with as many as numSamples or the number of remaining samples, whichever is smaller.
Definition: ClipSegment.cpp:49
bool Empty() const override
Whether the segment has no more samples to provide.
Definition: ClipSegment.cpp:58
const sampleCount mTotalNumSamplesToProduce
Definition: ClipSegment.h:34
virtual int GetRate() const =0
virtual double GetStretchRatio() const =0
virtual sampleCount GetVisibleSampleCount() const =0
Positions or offsets within audio files need a wide type.
Definition: SampleCount.h:19
double as_double() const
Definition: SampleCount.h:46
TimeAndPitchInterface::Parameters GetStretchingParameters(const ClipInterface &clip)
Definition: ClipSegment.cpp:21
sampleCount GetTotalNumSamplesToProduce(const ClipInterface &clip, double durationToDiscard)
Definition: ClipSegment.cpp:29
double GetRate(const Track &track)
Definition: TimeTrack.cpp:196
STL namespace.