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
27 virtual const char *mime() = 0;
28
29 AudioInfo audioInfo() override { return info; };
30
32 void setAudioInfo(AudioInfo from) override {
33 TRACED();
34 if (info != from) {
35 info = from;
37 }
38 }
40 virtual void setOutput(AudioStream &out_stream) {
41 Print *p_print = &out_stream;
43 addNotifyAudioChange(out_stream);
44 }
45
47 virtual void setOutput(AudioOutput &out_stream) {
48 Print *p_print = &out_stream;
50 addNotifyAudioChange(out_stream);
51 }
52
54 virtual void setOutput(Print &out_stream) override { p_print = &out_stream; }
55
57 virtual bool isResultPCM() { return true; }
58 virtual bool begin(AudioInfo info) override {
60 return begin();
61 }
62 bool begin() override { return true; }
63 void end() override {}
64
66 int id;
67
69 return p_print;
70 }
71
73 virtual bool setCodecConfig(const uint8_t* data, size_t len){
74 LOGE("not implemented");
75 return false;
76 }
77
78 protected:
79 Print *p_print = nullptr;
81};
82
91 bool isResultPCM() override { return true; }
92};
93
94
101class AudioEncoder : public AudioWriter, public MimeSource {
102 public:
103 AudioEncoder() = default;
104 virtual ~AudioEncoder() = default;
105 AudioEncoder(AudioEncoder const &) = delete;
108 virtual const char *mime() = 0;
110 void setAudioInfo(AudioInfo from) override { info = from; }
111 AudioInfo audioInfo() override { return info; }
113 virtual void setOutput(Print &out_stream) override { (void)out_stream; }
115 virtual uint32_t frameDurationUs() { return 0;};
117 virtual uint16_t samplesPerFrame() { return 0;};
118
119 protected:
121};
122
125 public:
126 virtual void setBlockSize(int blockSize) = 0;
134};
135
138 public:
139 virtual int blockSize() = 0;
140};
141
150class CodecNOP : public AudioDecoder, public AudioEncoder {
151 public:
152 static CodecNOP *instance() {
153 static CodecNOP self;
154 return &self;
155 }
156
157 virtual bool begin() { return true; }
158 virtual void end() {}
159 virtual void setOutput(Print &out_stream) {}
161 virtual void setAudioInfo(AudioInfo info) {}
162
165 return info;
166 }
167 virtual operator bool() { return false; }
168 virtual int readStream(Stream &in) { return 0; };
169
170 // just output silence
171 virtual size_t write(const uint8_t *data, size_t len) {
172 memset((void *)data, 0, len);
173 return len;
174 }
175
176 virtual const char *mime() { return nullptr; }
177};
178
179} // 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:124
virtual void setBlockSize(int blockSize)=0
virtual AudioFormat wavFormat()
Definition AudioCodecsBase.h:133
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:57
AudioInfo info
Definition AudioCodecsBase.h:80
Print * getOutput()
Definition AudioCodecsBase.h:68
virtual bool begin(AudioInfo info) override
Definition AudioCodecsBase.h:58
void setAudioInfo(AudioInfo from) override
for most decoders this is not needed
Definition AudioCodecsBase.h:32
void end() override
Definition AudioCodecsBase.h:63
int id
custom id to be used by application
Definition AudioCodecsBase.h:66
virtual void setOutput(AudioStream &out_stream)
Defines where the decoded result is written to.
Definition AudioCodecsBase.h:40
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:73
AudioDecoder(AudioDecoder const &)=delete
virtual ~AudioDecoder()=default
bool begin() override
Definition AudioCodecsBase.h:62
virtual void setOutput(Print &out_stream) override
Defines where the decoded result is written to.
Definition AudioCodecsBase.h:54
Print * p_print
Definition AudioCodecsBase.h:79
virtual void setOutput(AudioOutput &out_stream)
Defines where the decoded result is written to.
Definition AudioCodecsBase.h:47
virtual const char * mime()=0
Provides the mime type of the data that is expected by this decoder.
AudioInfo audioInfo() override
provides the actual input AudioInfo
Definition AudioCodecsBase.h:29
Extended AudioEncoder interface to support block size configuration.
Definition AudioCodecsBase.h:137
Encoding of PCM data.
Definition AudioCodecsBase.h:101
AudioInfo info
Definition AudioCodecsBase.h:120
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:110
virtual uint16_t samplesPerFrame()
Optional rtsp function: provide samples per the frame.
Definition AudioCodecsBase.h:117
AudioEncoder(AudioEncoder const &)=delete
virtual void setOutput(Print &out_stream) override
Default output assignment (encoders may override to store Print reference)
Definition AudioCodecsBase.h:113
virtual uint32_t frameDurationUs()
Optional rtsp function: provide the frame duration in microseconds.
Definition AudioCodecsBase.h:115
virtual const char * mime()=0
Provides the mime type of the encoded result.
AudioInfo audioInfo() override
provides the actual input AudioInfo
Definition AudioCodecsBase.h:111
Supports the subscription to audio change notifications.
Definition AudioTypes.h:147
void notifyAudioChange(AudioInfo info)
Definition AudioTypes.h:175
virtual void addNotifyAudioChange(AudioInfoSupport &bi)
Adds target to be notified about audio changes.
Definition AudioTypes.h:150
Supports changes to the sampling rate, bits and channels.
Definition AudioTypes.h:132
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:206
Dummy no implmentation Codec. This is used so that we can initialize some pointers to decoders and en...
Definition AudioCodecsBase.h:150
virtual void setOutput(Print &out_stream)
Defines where the decoded result is written to.
Definition AudioCodecsBase.h:159
virtual bool begin()
Definition AudioCodecsBase.h:157
virtual void addNotifyAudioChange(AudioInfoSupport &bi)
Adds target to be notified about audio changes.
Definition AudioCodecsBase.h:160
virtual const char * mime()
Provides the mime type of the data that is expected by this decoder.
Definition AudioCodecsBase.h:176
virtual void setAudioInfo(AudioInfo info)
for most decoders this is not needed
Definition AudioCodecsBase.h:161
virtual size_t write(const uint8_t *data, size_t len)
Definition AudioCodecsBase.h:171
static CodecNOP * instance()
Definition AudioCodecsBase.h:152
virtual int readStream(Stream &in)
Definition AudioCodecsBase.h:168
virtual AudioInfo audioInfo()
provides the actual input AudioInfo
Definition AudioCodecsBase.h:163
virtual void end()
Definition AudioCodecsBase.h:158
Parent class for all container formats.
Definition AudioCodecsBase.h:90
Abstract interface for classes that can provide MIME type information.
Definition AudioTypes.h:547
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