tmp
[blender.git] / extern / audaspace / include / sequence / SequenceReader.h
1 /*******************************************************************************
2  * Copyright 2009-2016 Jörg Müller
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *   http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  ******************************************************************************/
16
17 #pragma once
18
19 /**
20  * @file SequenceReader.h
21  * @ingroup sequence
22  * The SequenceReader class.
23  */
24
25 #include "IReader.h"
26 #include "devices/ReadDevice.h"
27
28 AUD_NAMESPACE_BEGIN
29
30 class SequenceHandle;
31 class SequenceData;
32
33 /**
34  * This reader plays back sequenced entries.
35  */
36 class AUD_API SequenceReader : public IReader
37 {
38 private:
39         /**
40          * The current position.
41          */
42         int m_position;
43
44         /**
45          * The read device used to mix the sounds correctly.
46          */
47         ReadDevice m_device;
48
49         /**
50          * Saves the sequence the reader belongs to.
51          */
52         std::shared_ptr<SequenceData> m_sequence;
53
54         /**
55          * The list of playback handles for the entries.
56          */
57         std::list<std::shared_ptr<SequenceHandle> > m_handles;
58
59         /**
60          * Last status read from the sequence.
61          */
62         int m_status;
63
64         /**
65          * Last entry status read from the sequence.
66          */
67         int m_entry_status;
68
69         // delete copy constructor and operator=
70         SequenceReader(const SequenceReader&) = delete;
71         SequenceReader& operator=(const SequenceReader&) = delete;
72
73 public:
74         /**
75          * Creates a resampling reader.
76          * \param sequence The sequence data.
77          * \param quality Whether a high quality resample should be used for resampling.
78          */
79         SequenceReader(std::shared_ptr<SequenceData> sequence, bool quality = false);
80
81         /**
82          * Destroys the reader.
83          */
84         ~SequenceReader();
85
86         virtual bool isSeekable() const;
87         virtual void seek(int position);
88         virtual int getLength() const;
89         virtual int getPosition() const;
90         virtual Specs getSpecs() const;
91         virtual void read(int& length, bool& eos, sample_t* buffer);
92 };
93
94 AUD_NAMESPACE_END