arduino-audio-tools
All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends Modules Pages
CodecFloat.h
1#pragma once
2
3#include "AudioTools/AudioCodecs/AudioCodecsBase.h"
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 void setOutput(Print &out_stream) override {
44 p_print = &out_stream;
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;
65 Vector<int16_t> buffer;
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 {
89 p_print = &out_stream;
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;
137 Vector<float> buffer;
138
139
140};
141
142}
Decoding of encoded audio into PCM data.
Definition AudioCodecsBase.h:18
Encoding of PCM data.
Definition AudioCodecsBase.h:90
virtual void addNotifyAudioChange(AudioInfoSupport &bi)
Adds target to be notified about audio changes.
Definition AudioTypes.h:151
Supports changes to the sampling rate, bits and channels.
Definition AudioTypes.h:133
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
DecoderFloat(Print &out_stream, bool active=true)
Construct a new DecoderFloat object.
Definition CodecFloat.h:24
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
EncoderFloat(Print &out)
Constructor providing the output stream.
Definition CodecFloat.h:83
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
Definition NoArduino.h:62
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:513