Audacity 3.2.0
AudioIOSequences.h
Go to the documentation of this file.
1/**********************************************************************
2
3 Audacity: A Digital Audio Editor
4
5 AudioIOSequences.h
6
7 Paul Licameli
8
9 @brief interfaces for playable and recordable sample channel groups
10
11**********************************************************************/
12#ifndef __AUDACITY_AUDIO_IO_SEQUENCES__
13#define __AUDACITY_AUDIO_IO_SEQUENCES__
14
15#include "WideSampleSequence.h"
16class ChannelGroup;
17
22struct MIXER_API PlayableSequence
23 // TODO wide wave tracks -- remove virtual
24 : virtual WideSampleSequence
25{
27
29 virtual const ChannelGroup *FindChannelGroup() const = 0;
30
32 virtual bool GetSolo() const = 0;
33
35 virtual bool GetMute() const = 0;
36};
37
39 std::vector<std::shared_ptr<const PlayableSequence>>;
40
45struct MIXER_API RecordableSequence {
47 virtual sampleFormat GetSampleFormat() const = 0;
48 virtual double GetRate() const = 0;
49
51
54 virtual size_t NChannels() const = 0;
55
61 virtual bool Append(
63 size_t len,
64 unsigned int stride,
65 sampleFormat effectiveFormat,
71 size_t iChannel = 0
72 ) = 0;
73
75 size_t len, size_t iChannel = 0)
76 {
77 return Append(buffer, format, len, 1, widestSampleFormat, iChannel);
78 }
79
80 virtual bool IsLeader() const = 0;
81
83
86 virtual void Flush() = 0;
87
91 virtual void InsertSilence(double t, double len) = 0;
92};
93
94using RecordableSequences = std::vector<std::shared_ptr<RecordableSequence>>;
95
97class MIXER_API OtherPlayableSequence
98{
99public:
101};
102
103#endif
std::vector< std::shared_ptr< RecordableSequence > > RecordableSequences
std::vector< std::shared_ptr< const PlayableSequence > > ConstPlayableSequences
sampleFormat
The ordering of these values with operator < agrees with the order of increasing bit width.
Definition: SampleFormat.h:30
const char * constSamplePtr
Definition: SampleFormat.h:58
Append(Adapt< My >([](My &table) { return(WaveChannelSubViews::numFactories() > 1) ? std::make_unique< Entry >("MultiView", Entry::CheckItem, OnMultiViewID, XXO("&Multi-view"), POPUP_MENU_FN(OnMultiView), table, [](PopupMenuHandler &handler, wxMenu &menu, int id){ auto &table=static_cast< WaveTrackMenuTable & >(handler);auto &track=table.FindWaveTrack();const auto &view=WaveChannelView::Get(track);menu.Check(id, view.GetMultiView());}) :nullptr;}))
This is defined just to enable dynamic_cast on it.
virtual ~OtherPlayableSequence()
virtual const ChannelGroup * FindChannelGroup() const =0
Find associated ChannelGroup if any.
virtual bool GetSolo() const =0
May vary asynchronously.
virtual bool GetMute() const =0
May vary asynchronously.
~PlayableSequence() override
virtual size_t NChannels() const =0
A constant property.
virtual ~RecordableSequence()
virtual double GetRate() const =0
virtual void InsertSilence(double t, double len)=0
virtual bool IsLeader() const =0
virtual void Flush()=0
Flush of related leader must be called after last Append.
virtual sampleFormat GetSampleFormat() const =0
bool Append(constSamplePtr buffer, sampleFormat format, size_t len, size_t iChannel=0)
virtual bool Append(constSamplePtr buffer, sampleFormat format, size_t len, unsigned int stride, sampleFormat effectiveFormat, size_t iChannel=0)=0
Append the sample data to the track. You must call Flush() after the last Append.