libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
audiogen.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
13#include <promeki/namespace.h>
14#include <promeki/audiolevel.h>
15#include <promeki/audiodesc.h>
16#include <promeki/list.h>
17
18PROMEKI_NAMESPACE_BEGIN
19
43class AudioGen {
44 public:
46 enum Type {
47 Silence = 0,
48 Sine
49 };
50
52 struct Config {
53 Type type;
54 float freq;
55 AudioLevel level;
56 float phase;
57 float dutyCycle;
58 float linearGain;
59 };
60
65 AudioGen(const AudioDesc &desc);
66
81 bool generate(float *out, size_t samples);
82
88 const Config &config(size_t chan) const { return _chanConfig[chan]; }
89
95 void setConfig(size_t chan, Config val);
96
97 private:
98 AudioDesc _desc;
99 List<Config> _chanConfig;
100 size_t _sampleCount = 0;
101
102 void genSilence(size_t chan, float *data, size_t samples) const;
103 void genSine(size_t chan, float *data, size_t samples) const;
104};
105
106PROMEKI_NAMESPACE_END
107
108#endif // PROMEKI_ENABLE_PROAV