arduino-audio-tools
Loading...
Searching...
No Matches
CodecAACFDK.h
Go to the documentation of this file.
1#pragma once
2
4#include "AACDecoderFDK.h"
5#include "AACEncoderFDK.h"
6
7
8namespace audio_tools {
9
10// audio change notification target
12
23 public:
24 AACDecoderFDK(int output_buffer_size = FDK_OUT_BUFFER_DEFAULT_SIZE){
25 TRACED();
26 dec = new aac_fdk::AACDecoderFDK(output_buffer_size);
27 }
28
29 AACDecoderFDK(Print &out_stream, int output_buffer_size = 2048){
30 TRACED();
31 dec = new aac_fdk::AACDecoderFDK(out_stream, output_buffer_size);
32 }
33
34 virtual ~AACDecoderFDK(){
35 delete dec;
36 }
37
38 const char *mime() override { return "audio/aac"; }
39
41 void setOutput(Print &out_stream) override {
42 dec->setOutput(out_stream);
43 }
44
45 bool begin() override {
46 return dec->begin(TT_MP4_ADTS, 1);
47 }
48
49 // opens the decoder
50 bool begin(TRANSPORT_TYPE transportType, UINT nrOfLayers){
51 return dec->begin(transportType, nrOfLayers);
52 }
53
61 AAC_DECODER_ERROR configure(uint8_t *conf, const uint32_t &length) {
62 return dec->configure(conf, length);
63 }
64
65 // write AAC data to be converted to PCM data
66 virtual size_t write(const uint8_t *data, size_t len) override {
67 return dec->write(data, len);
68 }
69
70 // provides detailed information about the stream
71 CStreamInfo audioInfoEx(){
72 return dec->audioInfo();
73 }
74
75 // provides common information
76 AudioInfo audioInfo() override {
77 AudioInfo result;
78 CStreamInfo i = audioInfoEx();
79 result.channels = i.numChannels;
80 result.sample_rate = i.sampleRate;
81 result.bits_per_sample = 16;
82 return result;
83 }
84
85 // release the resources
86 void end() override {
87 TRACED();
88 dec->end();
89 }
90
91 virtual operator bool() override {
92 return (bool)*dec;
93 }
94
95 aac_fdk::AACDecoderFDK *driver() {
96 return dec;
97 }
98
99 static void audioChangeCallback(CStreamInfo &info){
100 if (audioChangeFDK!=nullptr){
101 AudioInfo base;
102 base.channels = info.numChannels;
103 base.sample_rate = info.sampleRate;
104 base.bits_per_sample = 16;
105 // notify audio change
107 }
108 }
109
111 audioChangeFDK = &bi;
112 // register audio change handler
113 dec->setInfoCallback(audioChangeCallback);
114 }
115
116 protected:
117 aac_fdk::AACDecoderFDK *dec=nullptr;
118};
119
120
130
131public:
132
134 enc = new aac_fdk::AACEncoderFDK();
135 }
136
137 AACEncoderFDK(Print &out_stream){
138 enc = new aac_fdk::AACEncoderFDK();
139 enc->setOutput(out_stream);
140 }
141
143 delete enc;
144 }
145
147 void setOutput(Print &out_stream) override {
148 enc->setOutput(out_stream);
149 }
150
156 virtual void setBitrate(int bitrate){
157 enc->setBitrate(bitrate);
158 }
159
181 virtual void setAudioObjectType(int aot){
182 enc->setAudioObjectType(aot);
183 }
184
196 virtual void setAfterburner(bool afterburner){
197 enc->setAfterburner(afterburner);
198 }
199
206 virtual void setSpectralBandReplication(int eld_sbr){
207 enc->setSpectralBandReplication(eld_sbr);
208 }
209
228 virtual void setVariableBitrateMode(int vbr){
229 enc->setVariableBitrateMode(vbr);
230 }
231
237 virtual void setOutputBufferSize(int outbuf_size){
238 enc->setOutputBufferSize(outbuf_size);
239 }
240
242 void setAudioInfo(AudioInfo from) override {
243 TRACED();
245 aac_fdk::AudioInfo info;
246 info.channels = from.channels;
249 enc->setAudioInfo(info);
250 }
251
258 virtual bool begin(AudioInfo info) override {
259 TRACED();
261 }
262
271 virtual bool begin(int input_channels=2, int input_sample_rate=44100, int input_bits_per_sample=16) {
272 TRACED();
273 return enc->begin(input_channels,input_sample_rate, input_bits_per_sample);
274 }
275
276 // starts the processing
277 bool begin() override {
278 enc->begin();
279 return true;
280 }
281
282 // convert PCM data to AAC
283 size_t write(const uint8_t *data, size_t len) override {
284 LOGD("write %d bytes", (int)len);
285 return enc->write((uint8_t*)data, len);
286 }
287
288 // release resources
289 void end() override {
290 TRACED();
291 enc->end();
292 }
293
294 UINT getParameter(const AACENC_PARAM param) {
295 return enc->getParameter(param);
296 }
297
298 int setParameter(AACENC_PARAM param, uint32_t value){
299 return enc->setParameter(param, value);
300 }
301
302 aac_fdk::AACEncoderFDK *driver() {
303 return enc;
304 }
305
306 const char *mime() override {
307 return "audio/aac";
308 }
309
310 operator bool() override {
311 return (bool) *enc;
312 }
313
314
315protected:
316 aac_fdk::AACEncoderFDK *enc=nullptr;
317
318};
319
320}
321
#define TRACED()
Definition AudioLoggerIDF.h:31
#define LOGD(...)
Definition AudioLoggerIDF.h:27
Definition Arduino.h:56
Audio Decoder which decodes AAC into a PCM stream This is basically just a wrapper using https://gith...
Definition CodecAACFDK.h:22
virtual size_t write(const uint8_t *data, size_t len) override
Definition CodecAACFDK.h:66
void setOutput(Print &out_stream) override
Defines the output stream.
Definition CodecAACFDK.h:41
void addNotifyAudioChange(AudioInfoSupport &bi) override
Adds target to be notified about audio changes.
Definition CodecAACFDK.h:110
virtual ~AACDecoderFDK()
Definition CodecAACFDK.h:34
void end() override
Definition CodecAACFDK.h:86
AACDecoderFDK(int output_buffer_size=FDK_OUT_BUFFER_DEFAULT_SIZE)
Definition CodecAACFDK.h:24
static void audioChangeCallback(CStreamInfo &info)
Definition CodecAACFDK.h:99
bool begin(TRANSPORT_TYPE transportType, UINT nrOfLayers)
Definition CodecAACFDK.h:50
aac_fdk::AACDecoderFDK * dec
Definition CodecAACFDK.h:117
const char * mime() override
Provides the mime type of the data that is expected by this decoder.
Definition CodecAACFDK.h:38
aac_fdk::AACDecoderFDK * driver()
Definition CodecAACFDK.h:95
bool begin() override
Definition CodecAACFDK.h:45
AACDecoderFDK(Print &out_stream, int output_buffer_size=2048)
Definition CodecAACFDK.h:29
AAC_DECODER_ERROR configure(uint8_t *conf, const uint32_t &length)
Explicitly configure the decoder by passing a raw AudioSpecificConfig (ASC) or a StreamMuxConfig (SMC...
Definition CodecAACFDK.h:61
AudioInfo audioInfo() override
provides the actual input AudioInfo
Definition CodecAACFDK.h:76
CStreamInfo audioInfoEx()
Definition CodecAACFDK.h:71
Encodes PCM data to the AAC format and writes the result to a stream This is basically just a wrapper...
Definition CodecAACFDK.h:129
aac_fdk::AACEncoderFDK * driver()
Definition CodecAACFDK.h:302
~AACEncoderFDK()
Definition CodecAACFDK.h:142
void setOutput(Print &out_stream) override
Defines the output.
Definition CodecAACFDK.h:147
virtual void setOutputBufferSize(int outbuf_size)
Set the Output Buffer Size object.
Definition CodecAACFDK.h:237
AACEncoderFDK()
Definition CodecAACFDK.h:133
virtual void setAudioObjectType(int aot)
Audio object type. See ::AUDIO_OBJECT_TYPE in FDK_audio.h.
Definition CodecAACFDK.h:181
virtual bool begin(AudioInfo info) override
Opens the encoder
Definition CodecAACFDK.h:258
void setAudioInfo(AudioInfo from) override
Defines the Audio Info.
Definition CodecAACFDK.h:242
virtual void setAfterburner(bool afterburner)
This parameter controls the use of the afterburner feature. The afterburner is a type of analysis by ...
Definition CodecAACFDK.h:196
void end() override
Definition CodecAACFDK.h:289
aac_fdk::AACEncoderFDK * enc
Definition CodecAACFDK.h:316
size_t write(const uint8_t *data, size_t len) override
Definition CodecAACFDK.h:283
virtual void setBitrate(int bitrate)
Total encoder bitrate. This parameter is mandatory and interacts with ::AACENC_BITRATEMODE.
Definition CodecAACFDK.h:156
AACEncoderFDK(Print &out_stream)
Definition CodecAACFDK.h:137
virtual bool begin(int input_channels=2, int input_sample_rate=44100, int input_bits_per_sample=16)
Opens the encoder
Definition CodecAACFDK.h:271
const char * mime() override
Provides the mime type of the encoded result.
Definition CodecAACFDK.h:306
virtual void setVariableBitrateMode(int vbr)
Bitrate mode. Configuration can be different kind of bitrate configurations:
Definition CodecAACFDK.h:228
virtual void setSpectralBandReplication(int eld_sbr)
Configure SBR independently of the chosen Audio Object Type ::AUDIO_OBJECT_TYPE. This parameter is fo...
Definition CodecAACFDK.h:206
bool begin() override
Definition CodecAACFDK.h:277
int setParameter(AACENC_PARAM param, uint32_t value)
Definition CodecAACFDK.h:298
UINT getParameter(const AACENC_PARAM param)
Definition CodecAACFDK.h:294
Decoding of encoded audio into PCM data.
Definition AudioCodecsBase.h:19
AudioInfo info
Definition AudioCodecsBase.h:80
Encoding of PCM data.
Definition AudioCodecsBase.h:101
AudioInfo info
Definition AudioCodecsBase.h:120
void setAudioInfo(AudioInfo from) override
Defines the sample rate, number of channels and bits per sample.
Definition AudioCodecsBase.h:110
Supports changes to the sampling rate, bits and channels.
Definition AudioTypes.h:132
virtual void setAudioInfo(AudioInfo info)=0
Defines the input AudioInfo.
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition LMSEchoCancellationStream.h:6
AudioInfoSupport * audioChangeFDK
Definition CodecAACFDK.h:11
Basic Audio information which drives e.g. I2S.
Definition AudioTypes.h:51
sample_rate_t sample_rate
Sample Rate: e.g 44100.
Definition AudioTypes.h:53
uint16_t channels
Number of channels: 2=stereo, 1=mono.
Definition AudioTypes.h:55
uint8_t bits_per_sample
Number of bits per sample (int16_t = 16 bits)
Definition AudioTypes.h:57