tmp
[blender.git] / extern / audaspace / include / generator / TriangleReader.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 TriangleReader.h
21  * @ingroup generator
22  * The TriangleReader class.
23  */
24
25 #include "IReader.h"
26
27 AUD_NAMESPACE_BEGIN
28
29 /**
30  * This class is used for sawtooth tone playback.
31  * The output format is in the 16 bit format and stereo, the sample rate can be
32  * specified.
33  * As the two channels both play the same the output could also be mono, but
34  * in most cases this will result in having to resample for output, so stereo
35  * sound is created directly.
36  */
37 class AUD_API TriangleReader : public IReader
38 {
39 private:
40         /**
41          * The frequency of the sine wave.
42          */
43         float m_frequency;
44
45         /**
46          * The current position in samples.
47          */
48         int m_position;
49
50         /**
51          * The value of the current sample.
52          */
53         float m_sample;
54
55         /**
56          * The sample rate for the output.
57          */
58         const SampleRate m_sampleRate;
59
60         // delete copy constructor and operator=
61         TriangleReader(const TriangleReader&) = delete;
62         TriangleReader& operator=(const TriangleReader&) = delete;
63
64 public:
65         /**
66          * Creates a new reader.
67          * \param frequency The frequency of the sine wave.
68          * \param sampleRate The output sample rate.
69          */
70         TriangleReader(float frequency, SampleRate sampleRate);
71
72         /**
73          * Sets the frequency of the wave.
74          * @param frequency The new frequency in Hertz.
75          */
76         void setFrequency(float frequency);
77
78         virtual bool isSeekable() const;
79         virtual void seek(int position);
80         virtual int getLength() const;
81         virtual int getPosition() const;
82         virtual Specs getSpecs() const;
83         virtual void read(int & length, bool &eos, sample_t* buffer);
84 };
85
86 AUD_NAMESPACE_END