tmp
[blender.git] / extern / audaspace / include / fx / VolumeReader.h
1 /*******************************************************************************
2 * Copyright 2015-2016 Juan Francisco Crespo Gal├ín
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 VolumeReader.h
21 * @ingroup fx
22 * The VolumeReader class.
23 */
24
25 #include "IReader.h"
26 #include "ISound.h"
27 #include "VolumeStorage.h"
28
29 #include <memory>
30
31 AUD_NAMESPACE_BEGIN
32
33 /**
34 * This class represents a reader for a sound that has its own shared volume
35 */
36 class AUD_API VolumeReader : public IReader
37 {
38 private:
39         /**
40         * The current reader.
41         */
42         std::shared_ptr<IReader> m_reader;
43
44         /**
45         * A sound from which to get the reader.
46         */
47         std::shared_ptr<VolumeStorage> m_volumeStorage;
48
49
50         // delete copy constructor and operator=
51         VolumeReader(const VolumeReader&) = delete;
52         VolumeReader& operator=(const VolumeReader&) = delete;
53
54 public:
55         /**
56         * Creates a new volume reader.
57         * \param reader A reader of the sound to be assigned to this reader.
58         * \param volumeStorage A shared pointer to a VolumeStorage object.
59         */
60         VolumeReader(std::shared_ptr<IReader> reader, std::shared_ptr<VolumeStorage> volumeStorage);
61
62         virtual bool isSeekable() const;
63         virtual void seek(int position);
64         virtual int getLength() const;
65         virtual int getPosition() const;
66         virtual Specs getSpecs() const;
67         virtual void read(int& length, bool& eos, sample_t* buffer);
68 };
69
70 AUD_NAMESPACE_END