arduino-audio-tools
Loading...
Searching...
No Matches
AudioCodecsBase.h
1#pragma once
2
3#include "AudioToolsConfig.h"
4#include "AudioLogger.h"
5#include "AudioTools/CoreAudio/AudioBasic/Collections/Vector.h"
6#include "AudioTools/CoreAudio/AudioTypes.h"
7#include "AudioTools/CoreAudio/BaseStream.h"
8#include "AudioTools/CoreAudio/AudioOutput.h"
9
10namespace audio_tools {
11
19 public:
20 AudioDecoder() = default;
21 virtual ~AudioDecoder() = default;
22 AudioDecoder(AudioDecoder const &) = delete;
23 AudioDecoder &operator=(AudioDecoder const &) = delete;
24
25 AudioInfo audioInfo() override { return info; };
26
28 void setAudioInfo(AudioInfo from) override {
29 TRACED();
30 if (info != from) {
31 info = from;
32 notifyAudioChange(from);
33 }
34 }
36 virtual void setOutput(AudioStream &out_stream) {
37 Print *p_print = &out_stream;
38 setOutput(*p_print);
39 addNotifyAudioChange(out_stream);
40 }
41
43 virtual void setOutput(AudioOutput &out_stream) {
44 Print *p_print = &out_stream;
45 setOutput(*p_print);
46 addNotifyAudioChange(out_stream);
47 }
48
50 virtual void setOutput(Print &out_stream) override { p_print = &out_stream; }
51
53 virtual bool isResultPCM() { return true; }
54 virtual bool begin(AudioInfo info) override {
55 setAudioInfo(info);
56 return begin();
57 }
58 bool begin() override { return true; }
59 void end() override {}
60
62 int id;
63
64 Print* getOutput(){
65 return p_print;
66 }
67
69 virtual bool setCodecConfig(const uint8_t* data, size_t len){
70 LOGE("not implemented");
71 return false;
72 }
73
74 protected:
75 Print *p_print = nullptr;
76 AudioInfo info;
77};
78
87 bool isResultPCM() override { return true; }
88};
89
90
97class AudioEncoder : public AudioWriter {
98 public:
99 AudioEncoder() = default;
100 virtual ~AudioEncoder() = default;
101 AudioEncoder(AudioEncoder const &) = delete;
102 AudioEncoder &operator=(AudioEncoder const &) = delete;
104 virtual const char *mime() = 0;
106 void setAudioInfo(AudioInfo from) override { info = from; }
107 AudioInfo audioInfo() override { return info; }
109 virtual void setOutput(Print &out_stream) override { (void)out_stream; }
111 virtual uint32_t frameDurationUs() { return 0;};
113 virtual uint16_t samplesPerFrame() { return 0;};
114
115 protected:
116 AudioInfo info;
117};
118
120 public:
121 virtual void setBlockSize(int blockSize) = 0;
122};
123
125 public:
126 virtual int blockSize() = 0;
127};
128
137class CodecNOP : public AudioDecoder, public AudioEncoder {
138 public:
139 static CodecNOP *instance() {
140 static CodecNOP self;
141 return &self;
142 }
143
144 virtual bool begin() { return true; }
145 virtual void end() {}
146 virtual void setOutput(Print &out_stream) {}
148 virtual void setAudioInfo(AudioInfo info) {}
149
151 AudioInfo info;
152 return info;
153 }
154 virtual operator bool() { return false; }
155 virtual int readStream(Stream &in) { return 0; };
156
157 // just output silence
158 virtual size_t write(const uint8_t *data, size_t len) {
159 memset((void *)data, 0, len);
160 return len;
161 }
162
163 virtual const char *mime() { return nullptr; }
164};
165
166} // namespace audio_tools
Definition AudioCodecsBase.h:119
Decoding of encoded audio into PCM data.
Definition AudioCodecsBase.h:18
virtual bool isResultPCM()
Returns true to indicate that the decoding result is PCM data.
Definition AudioCodecsBase.h:53
void setAudioInfo(AudioInfo from) override
for most decoders this is not needed
Definition AudioCodecsBase.h:28
int id
custom id to be used by application
Definition AudioCodecsBase.h:62
virtual void setOutput(AudioStream &out_stream)
Defines where the decoded result is written to.
Definition AudioCodecsBase.h:36
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:69
virtual void setOutput(Print &out_stream) override
Defines where the decoded result is written to.
Definition AudioCodecsBase.h:50
virtual void setOutput(AudioOutput &out_stream)
Defines where the decoded result is written to.
Definition AudioCodecsBase.h:43
AudioInfo audioInfo() override
provides the actual input AudioInfo
Definition AudioCodecsBase.h:25
Definition AudioCodecsBase.h:124
Encoding of PCM data.
Definition AudioCodecsBase.h:97
void setAudioInfo(AudioInfo from) override
Defines the sample rate, number of channels and bits per sample.
Definition AudioCodecsBase.h:106
virtual uint16_t samplesPerFrame()
Optioinal rtsp function: provide samples per the frame.
Definition AudioCodecsBase.h:113
virtual void setOutput(Print &out_stream) override
Default output assignment (encoders may override to store Print reference)
Definition AudioCodecsBase.h:109
virtual uint32_t frameDurationUs()
Optioinal rtsp function: provide the frame duration in microseconds.
Definition AudioCodecsBase.h:111
virtual const char * mime()=0
Provides the mime type of the encoded result.
AudioInfo audioInfo() override
provides the actual input AudioInfo
Definition AudioCodecsBase.h:107
Supports the subscription to audio change notifications.
Definition AudioTypes.h:148
virtual void addNotifyAudioChange(AudioInfoSupport &bi)
Adds target to be notified about audio changes.
Definition AudioTypes.h:151
Supports changes to the sampling rate, bits and channels.
Definition AudioTypes.h:133
Abstract Audio Ouptut class.
Definition AudioOutput.h:22
Base class for all Audio Streams. It support the boolean operator to test if the object is ready with...
Definition BaseStream.h:122
E.g. used by Encoders and Decoders.
Definition AudioTypes.h:207
Dummy no implmentation Codec. This is used so that we can initialize some pointers to decoders and en...
Definition AudioCodecsBase.h:137
virtual void setOutput(Print &out_stream)
Defines where the decoded result is written to.
Definition AudioCodecsBase.h:146
virtual void addNotifyAudioChange(AudioInfoSupport &bi)
Adds target to be notified about audio changes.
Definition AudioCodecsBase.h:147
virtual const char * mime()
Provides the mime type of the encoded result.
Definition AudioCodecsBase.h:163
virtual void setAudioInfo(AudioInfo info)
for most decoders this is not needed
Definition AudioCodecsBase.h:148
virtual AudioInfo audioInfo()
provides the actual input AudioInfo
Definition AudioCodecsBase.h:150
Parent class for all container formats.
Definition AudioCodecsBase.h:86
Definition NoArduino.h:62
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition AudioCodecsBase.h:10
Basic Audio information which drives e.g. I2S.
Definition AudioTypes.h:53