arduino-audio-tools
Loading...
Searching...
No Matches
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
64 for (auto &stream : streams) {
65 stream.addNotifyAudioChange(bi);
66 }
67 }
68
69 size_t write(const uint8_t *data, size_t len) override {
70 if (streams.size() == 0) return 0;
71 return streams[0].write(data, len);
72 }
73
74 operator bool() { return is_active; }
75
76 bool begin() {
77 is_active = true;
78 for (auto &stream : streams) {
79 stream.begin();
80 }
81 return true;
82 }
83
84 void end() override {
85 is_active = false;
86 for (auto &stream : streams) {
87 stream.end();
88 }
89 };
90
92 const char *mime() { return nullptr; }
93
94 protected:
96 bool is_active = false;
97};
98
99} // 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:97
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
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 addNotifyAudioChange(AudioInfoSupport &bi) override
Adds target to be notified about audio changes.
Definition CodecChain.h:63
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:92
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:270
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