arduino-audio-tools
All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends Macros Modules Pages
CodecChain.h
1#pragma once
2#include "AudioTools/AudioCodecs/AudioCodecsBase.h"
3#include "AudioTools/AudioCodecs/AudioEncoded.h"
4
5namespace audio_tools {
6
16 public:
17 CodecChain() = default;
18 CodecChain(AudioDecoder &decoder) { addDecoder(decoder); }
19 CodecChain(AudioEncoder &encoder) { addEncoder(encoder); }
20
22 void addDecoder(AudioDecoder &decoder) {
23 EncodedAudioStream stream;
24 stream.setDecoder(&decoder);
25 streams.push_back(stream);
26 if (streams.size() > 1) {
27 streams[streams.size() - 2].setOutput(streams[streams.size() - 1]);
28 }
29 }
30
32 void addEncoder(AudioEncoder &encoder) {
33 EncodedAudioStream stream;
34 stream.setEncoder(&encoder);
35 streams.push_back(stream);
36 if (streams.size() > 1) {
37 streams[streams.size() - 2].setOutput(streams[streams.size() - 1]);
38 }
39 }
40
41 void setOutput(Print &out_stream) override {
42 p_print = &out_stream;
43 if (streams.size() > 0) streams[streams.size() - 1].setOutput(out_stream);
44 }
45
46 void setOutput(AudioStream &out_stream) override {
47 p_print = &out_stream;
48 if (streams.size() > 0) streams[streams.size() - 1].setOutput(out_stream);
49 }
50
51 void setOutput(AudioOutput &out_stream) override {
52 p_print = &out_stream;
53 if (streams.size() > 0) streams[streams.size() - 1].setOutput(out_stream);
54 }
55
56 void setAudioInfo(AudioInfo from) override {
58 for (auto &stream : streams) {
59 stream.setAudioInfo(from);
60 }
61 }
62
63 size_t write(const uint8_t *data, size_t len) override {
64 if (streams.size() == 0) return 0;
65 return streams[0].write(data, len);
66 }
67
68 operator bool() { return is_active; }
69
70 bool begin() {
71 is_active = true;
72 for (auto &stream : streams) {
73 stream.begin();
74 }
75 return true;
76 }
77
78 void end() override {
79 is_active = false;
80 for (auto &stream : streams) {
81 stream.end();
82 }
83 };
84
86 const char *mime() { return nullptr; }
87
88 protected:
90 bool is_active = false;
91};
92
93} // namespace audio_tools
Decoding of encoded audio into PCM data.
Definition AudioCodecsBase.h:18
void setAudioInfo(AudioInfo from) override
for most decoders this is not needed
Definition AudioCodecsBase.h:28
Encoding of PCM data.
Definition AudioCodecsBase.h:96
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
CodecChain - allows to chain multiple decoders and encoders together.
Definition CodecChain.h:15
void setOutput(Print &out_stream) override
Defines where the decoded result is written to.
Definition CodecChain.h:41
void setAudioInfo(AudioInfo from) override
for most decoders this is not needed
Definition CodecChain.h:56
void addEncoder(AudioEncoder &encoder)
Adds an encoder to the chain.
Definition CodecChain.h:32
const char * mime()
Returns nullptr.
Definition CodecChain.h:86
void setOutput(AudioStream &out_stream) override
Defines where the decoded result is written to.
Definition CodecChain.h:46
void setOutput(AudioOutput &out_stream) override
Defines where the decoded result is written to.
Definition CodecChain.h:51
void addDecoder(AudioDecoder &decoder)
Adds a decoder to the chain.
Definition CodecChain.h:22
A more natural Stream class to process encoded data (aac, wav, mp3...) which also supports the decodi...
Definition AudioEncoded.h:244
Definition NoArduino.h:62
Vector implementation which provides the most important methods as defined by std::vector....
Definition Vector.h:21
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