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();
26 p_print = &out_stream;
27 }
28
37 TRACED();
38 p_print = &out_stream;
40 }
41
43 const char* mime() override {
44 return mime_pcm;
45 }
46
48 void setOutput(Print &out_stream) override {
49 p_print = &out_stream;
50 }
51
53 virtual size_t write(const uint8_t *data, size_t len) override {
54 if (p_print==nullptr) return 0;
55 int samples = len/sizeof(float);
56 buffer.resize(samples);
57 float* p_float = (float*) data;
58 for (int j=0;j<samples;j++){
59 buffer[j] = p_float[j]*32767;
60 }
61 return p_print->write((uint8_t*)buffer.data(), samples*sizeof(int16_t)) * 2;
62 }
63
64 virtual operator bool() override {
65 return p_print!=nullptr;;
66 }
67
68 protected:
69 Print *p_print=nullptr;
71
72};
73
82class EncoderFloat : public AudioEncoder {
83 public:
85 EncoderFloat() = default;
86
89 p_print = &out;
90 }
91
93 void setOutput(Print &out_stream) override {
94 p_print = &out_stream;
95 }
96
98 const char* mime() override{
99 return mime_pcm;
100 }
101
103 virtual bool begin() override{
104 is_open = true;
105 return true;
106 }
107
109 bool begin(Print &out) {
110 p_print = &out;
111 return begin();
112 }
113
115 void end() override {
116 is_open = false;
117 }
118
120 virtual size_t write(const uint8_t *data, size_t len) override {
121 if (p_print==nullptr) return 0;
122 int16_t *pt16 = (int16_t*)data;
123 size_t samples = len / sizeof(int16_t);
124 buffer.resize(samples);
125 for (size_t j=0;j<samples;j++){
126 buffer[j] = static_cast<float>(pt16[j]) / 32768.0;
127 }
128 return p_print->write((uint8_t*)buffer.data(), samples*sizeof(float));
129 }
130
131 operator bool() override {
132 return is_open;
133 }
134
135 bool isOpen(){
136 return is_open;
137 }
138
139 protected:
140 Print* p_print=nullptr;;
141 volatile bool is_open;
143
144
145};
146
147}
#define TRACED()
Definition AudioLoggerIDF.h:31
Definition Arduino.h:56
virtual size_t write(const uint8_t *data, size_t len)
Definition Arduino.h:120
Decoding of encoded audio into PCM data.
Definition AudioCodecsBase.h:19
Encoding of PCM data.
Definition AudioCodecsBase.h:101
virtual void addNotifyAudioChange(AudioInfoSupport &bi)
Adds target to be notified about audio changes.
Definition AudioTypes.h:150
Supports changes to the sampling rate, bits and channels.
Definition AudioTypes.h:132
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:53
void setOutput(Print &out_stream) override
Defines the output Stream.
Definition CodecFloat.h:48
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:70
const char * mime() override
Provides "audio/pcm".
Definition CodecFloat.h:43
DecoderFloat(Print &out_stream, bool active=true)
Construct a new DecoderFloat object.
Definition CodecFloat.h:24
Print * p_print
Definition CodecFloat.h:69
EncoderFloats - Encodes 16 bit PCM data stream to floats data.
Definition CodecFloat.h:82
virtual size_t write(const uint8_t *data, size_t len) override
Converts data from int16_t to float.
Definition CodecFloat.h:120
void setOutput(Print &out_stream) override
Defines the output Stream.
Definition CodecFloat.h:93
volatile bool is_open
Definition CodecFloat.h:141
Vector< float > buffer
Definition CodecFloat.h:142
EncoderFloat(Print &out)
Constructor providing the output stream.
Definition CodecFloat.h:88
bool isOpen()
Definition CodecFloat.h:135
virtual bool begin() override
starts the processing using the actual RAWAudioInfo
Definition CodecFloat.h:103
void end() override
stops the processing
Definition CodecFloat.h:115
bool begin(Print &out)
starts the processing
Definition CodecFloat.h:109
EncoderFloat()=default
Empty Constructor.
const char * mime() override
Provides "audio/pcm".
Definition CodecFloat.h:98
Print * p_print
Definition CodecFloat.h:140
Vector implementation which provides the most important methods as defined by std::vector....
Definition Vector.h:21
bool resize(size_t 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 LMSEchoCancellationStream.h:6
static const char * mime_pcm
Mime type for PCM.
Definition AudioTypes.h:514