arduino-audio-tools
Loading...
Searching...
No Matches
AudioCodecsBase.h
Go to the documentation of this file.
1#pragma once
2
3#include "AudioToolsConfig.h"
4#include "AudioLogger.h"
10
11namespace audio_tools {
12
20 public:
21 AudioDecoder() = default;
22 virtual ~AudioDecoder() = default;
23 AudioDecoder(AudioDecoder const &) = delete;
25
26 AudioInfo audioInfo() override { return info; };
27
29 void setAudioInfo(AudioInfo from) override {
30 TRACED();
31 if (info != from) {
32 info = from;
34 }
35 }
37 virtual void setOutput(AudioStream &out_stream) {
38 Print *p_print = &out_stream;
40 addNotifyAudioChange(out_stream);
41 }
42
44 virtual void setOutput(AudioOutput &out_stream) {
45 Print *p_print = &out_stream;
47 addNotifyAudioChange(out_stream);
48 }
49
51 virtual void setOutput(Print &out_stream) override { p_print = &out_stream; }
52
54 virtual bool isResultPCM() { return true; }
55 virtual bool begin(AudioInfo info) override {
57 return begin();
58 }
59 bool begin() override { return true; }
60 void end() override {}
61
63 int id;
64
66 return p_print;
67 }
68
70 virtual bool setCodecConfig(const uint8_t* data, size_t len){
71 LOGE("not implemented");
72 return false;
73 }
74
75 protected:
76 Print *p_print = nullptr;
78};
79
88 bool isResultPCM() override { return true; }
89};
90
91
98class AudioEncoder : public AudioWriter, public MimeSource {
99 public:
100 AudioEncoder() = default;
101 virtual ~AudioEncoder() = default;
102 AudioEncoder(AudioEncoder const &) = delete;
105 virtual const char *mime() = 0;
107 void setAudioInfo(AudioInfo from) override { info = from; }
108 AudioInfo audioInfo() override { return info; }
110 virtual void setOutput(Print &out_stream) override { (void)out_stream; }
112 virtual uint32_t frameDurationUs() { return 0;};
114 virtual uint16_t samplesPerFrame() { return 0;};
115
116 protected:
118};
119
122 public:
123 virtual void setBlockSize(int blockSize) = 0;
131};
132
135 public:
136 virtual int blockSize() = 0;
137};
138
147class CodecNOP : public AudioDecoder, public AudioEncoder {
148 public:
149 static CodecNOP *instance() {
150 static CodecNOP self;
151 return &self;
152 }
153
154 virtual bool begin() { return true; }
155 virtual void end() {}
156 virtual void setOutput(Print &out_stream) {}
158 virtual void setAudioInfo(AudioInfo info) {}
159
162 return info;
163 }
164 virtual operator bool() { return false; }
165 virtual int readStream(Stream &in) { return 0; };
166
167 // just output silence
168 virtual size_t write(const uint8_t *data, size_t len) {
169 memset((void *)data, 0, len);
170 return len;
171 }
172
173 virtual const char *mime() { return nullptr; }
174};
175
176} // namespace audio_tools
WAV Audio Formats used by Microsoft e.g. in AVI video files.
#define TRACED()
Definition AudioLoggerIDF.h:31
#define LOGE(...)
Definition AudioLoggerIDF.h:30
Definition Arduino.h:56
Definition Arduino.h:136
Extended AudioDecoder interface to support block size configuration.
Definition AudioCodecsBase.h:121
virtual void setBlockSize(int blockSize)=0
virtual AudioFormat wavFormat()
Definition AudioCodecsBase.h:130
Decoding of encoded audio into PCM data.
Definition AudioCodecsBase.h:19
AudioDecoder & operator=(AudioDecoder const &)=delete
virtual bool isResultPCM()
Returns true to indicate that the decoding result is PCM data.
Definition AudioCodecsBase.h:54
AudioInfo info
Definition AudioCodecsBase.h:77
Print * getOutput()
Definition AudioCodecsBase.h:65
virtual bool begin(AudioInfo info) override
Definition AudioCodecsBase.h:55
void setAudioInfo(AudioInfo from) override
for most decoders this is not needed
Definition AudioCodecsBase.h:29
void end() override
Definition AudioCodecsBase.h:60
int id
custom id to be used by application
Definition AudioCodecsBase.h:63
virtual void setOutput(AudioStream &out_stream)
Defines where the decoded result is written to.
Definition AudioCodecsBase.h:37
virtual bool setCodecConfig(const uint8_t *data, size_t len)
Some decoders need e.g. a magic cookie to provide the relevant info for decoding.
Definition AudioCodecsBase.h:70
AudioDecoder(AudioDecoder const &)=delete
virtual ~AudioDecoder()=default
bool begin() override
Definition AudioCodecsBase.h:59
virtual void setOutput(Print &out_stream) override
Defines where the decoded result is written to.
Definition AudioCodecsBase.h:51
Print * p_print
Definition AudioCodecsBase.h:76
virtual void setOutput(AudioOutput &out_stream)
Defines where the decoded result is written to.
Definition AudioCodecsBase.h:44
AudioInfo audioInfo() override
provides the actual input AudioInfo
Definition AudioCodecsBase.h:26
Extended AudioEncoder interface to support block size configuration.
Definition AudioCodecsBase.h:134
Encoding of PCM data.
Definition AudioCodecsBase.h:98
AudioInfo info
Definition AudioCodecsBase.h:117
virtual ~AudioEncoder()=default
AudioEncoder & operator=(AudioEncoder const &)=delete
void setAudioInfo(AudioInfo from) override
Defines the sample rate, number of channels and bits per sample.
Definition AudioCodecsBase.h:107
virtual uint16_t samplesPerFrame()
Optional rtsp function: provide samples per the frame.
Definition AudioCodecsBase.h:114
AudioEncoder(AudioEncoder const &)=delete
virtual void setOutput(Print &out_stream) override
Default output assignment (encoders may override to store Print reference)
Definition AudioCodecsBase.h:110
virtual uint32_t frameDurationUs()
Optional rtsp function: provide the frame duration in microseconds.
Definition AudioCodecsBase.h:112
virtual const char * mime()=0
Provides the mime type of the encoded result.
AudioInfo audioInfo() override
provides the actual input AudioInfo
Definition AudioCodecsBase.h:108
Supports the subscription to audio change notifications.
Definition AudioTypes.h:146
void notifyAudioChange(AudioInfo info)
Definition AudioTypes.h:174
virtual void addNotifyAudioChange(AudioInfoSupport &bi)
Adds target to be notified about audio changes.
Definition AudioTypes.h:149
Supports changes to the sampling rate, bits and channels.
Definition AudioTypes.h:131
Abstract Audio Ouptut class.
Definition AudioOutput.h:25
Base class for all Audio Streams. It support the boolean operator to test if the object is ready with...
Definition BaseStream.h:120
E.g. used by Encoders and Decoders.
Definition AudioTypes.h:205
Dummy no implmentation Codec. This is used so that we can initialize some pointers to decoders and en...
Definition AudioCodecsBase.h:147
virtual void setOutput(Print &out_stream)
Defines where the decoded result is written to.
Definition AudioCodecsBase.h:156
virtual bool begin()
Definition AudioCodecsBase.h:154
virtual void addNotifyAudioChange(AudioInfoSupport &bi)
Adds target to be notified about audio changes.
Definition AudioCodecsBase.h:157
virtual const char * mime()
Provides the mime type of the encoded result.
Definition AudioCodecsBase.h:173
virtual void setAudioInfo(AudioInfo info)
for most decoders this is not needed
Definition AudioCodecsBase.h:158
virtual size_t write(const uint8_t *data, size_t len)
Definition AudioCodecsBase.h:168
static CodecNOP * instance()
Definition AudioCodecsBase.h:149
virtual int readStream(Stream &in)
Definition AudioCodecsBase.h:165
virtual AudioInfo audioInfo()
provides the actual input AudioInfo
Definition AudioCodecsBase.h:160
virtual void end()
Definition AudioCodecsBase.h:155
Parent class for all container formats.
Definition AudioCodecsBase.h:87
Abstract interface for classes that can provide MIME type information.
Definition AudioTypes.h:546
AudioFormat
Audio format codes used by Microsoft e.g. in avi or wav files.
Definition AudioFormat.h:21
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition LMSEchoCancellationStream.h:6
Basic Audio information which drives e.g. I2S.
Definition AudioTypes.h:51