arduino-audio-tools
Loading...
Searching...
No Matches
CodecFloat.h
Go to the documentation of this file.
1#pragma once
2
4
5
6namespace audio_tools {
7
15class DecoderFloat : public AudioDecoder {
16 public:
18 DecoderFloat() = default;
24 DecoderFloat(Print &out_stream, bool active=true){
25 TRACED();
27 }
28
41
43 void setOutput(Print &out_stream) override {
45 }
46
48 virtual size_t write(const uint8_t *data, size_t len) override {
49 if (p_print==nullptr) return 0;
50 int samples = len/sizeof(float);
51 buffer.resize(samples);
52 float* p_float = (float*) data;
53 for (int j=0;j<samples;j++){
54 buffer[j] = p_float[j]*32767;
55 }
56 return p_print->write((uint8_t*)buffer.data(), samples*sizeof(int16_t)) * 2;
57 }
58
59 virtual operator bool() override {
60 return p_print!=nullptr;;
61 }
62
63 protected:
64 Print *p_print=nullptr;
66
67};
68
77class EncoderFloat : public AudioEncoder {
78 public:
80 EncoderFloat() = default;
81
84 p_print = &out;
85 }
86
88 void setOutput(Print &out_stream) override {
90 }
91
93 const char* mime() override{
94 return mime_pcm;
95 }
96
98 virtual bool begin() override{
99 is_open = true;
100 return true;
101 }
102
104 bool begin(Print &out) {
105 p_print = &out;
106 return begin();
107 }
108
110 void end() override {
111 is_open = false;
112 }
113
115 virtual size_t write(const uint8_t *data, size_t len) override {
116 if (p_print==nullptr) return 0;
117 int16_t *pt16 = (int16_t*)data;
118 size_t samples = len / sizeof(int16_t);
119 buffer.resize(samples);
120 for (size_t j=0;j<samples;j++){
121 buffer[j] = static_cast<float>(pt16[j]) / 32768.0;
122 }
123 return p_print->write((uint8_t*)buffer.data(), samples*sizeof(float));
124 }
125
126 operator bool() override {
127 return is_open;
128 }
129
130 bool isOpen(){
131 return is_open;
132 }
133
134 protected:
135 Print* p_print=nullptr;;
136 volatile bool is_open;
138
139
140};
141
142}
#define TRACED()
Definition AudioLoggerIDF.h:31
Decoding of encoded audio into PCM data.
Definition AudioCodecsBase.h:18
Encoding of PCM data.
Definition AudioCodecsBase.h:97
virtual void addNotifyAudioChange(AudioInfoSupport &bi)
Adds target to be notified about audio changes.
Definition AudioTypes.h:153
Supports changes to the sampling rate, bits and channels.
Definition AudioTypes.h:135
DecoderFloat - Converts Stream of floats into 2 byte integers.
Definition CodecFloat.h:15
virtual size_t write(const uint8_t *data, size_t len) override
Converts data from float to int16_t.
Definition CodecFloat.h:48
void setOutput(Print &out_stream) override
Defines the output Stream.
Definition CodecFloat.h:43
DecoderFloat()=default
Empty Constructor.
DecoderFloat(Print &out_stream, AudioInfoSupport &bi)
Construct a new DecoderFloat object.
Definition CodecFloat.h:36
Vector< int16_t > buffer
Definition CodecFloat.h:65
DecoderFloat(Print &out_stream, bool active=true)
Construct a new DecoderFloat object.
Definition CodecFloat.h:24
Print * p_print
Definition CodecFloat.h:64
EncoderFloats - Encodes 16 bit PCM data stream to floats data.
Definition CodecFloat.h:77
virtual size_t write(const uint8_t *data, size_t len) override
Converts data from int16_t to float.
Definition CodecFloat.h:115
void setOutput(Print &out_stream) override
Defines the output Stream.
Definition CodecFloat.h:88
volatile bool is_open
Definition CodecFloat.h:136
Vector< float > buffer
Definition CodecFloat.h:137
EncoderFloat(Print &out)
Constructor providing the output stream.
Definition CodecFloat.h:83
bool isOpen()
Definition CodecFloat.h:130
virtual bool begin() override
starts the processing using the actual RAWAudioInfo
Definition CodecFloat.h:98
void end() override
stops the processing
Definition CodecFloat.h:110
bool begin(Print &out)
starts the processing
Definition CodecFloat.h:104
EncoderFloat()=default
Empty Constructor.
const char * mime() override
Provides "audio/pcm".
Definition CodecFloat.h:93
Print * p_print
Definition CodecFloat.h:135
Definition NoArduino.h:62
virtual size_t write(const uint8_t *data, size_t len)
Definition NoArduino.h:126
Vector implementation which provides the most important methods as defined by std::vector....
Definition Vector.h:21
bool resize(int newSize, T value)
Definition Vector.h:266
T * data()
Definition Vector.h:316
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition AudioCodecsBase.h:10
static const char * mime_pcm
Mime type for PCM.
Definition AudioTypes.h:517
size_t writeData(Print *p_out, T *data, int samples, int maxSamples=512)
Definition AudioTypes.h:512