arduino-audio-tools
CodecFloat.h
1 #pragma once
2 
3 #include "AudioCodecs/AudioEncoded.h"
4 
5 
6 namespace audio_tools {
7 
15 class DecoderFloat : public AudioDecoder {
16  public:
22  DecoderFloat(Print &out_stream, bool active=true){
23  TRACED();
24  p_print = &out_stream;
25  }
26 
34  DecoderFloat(Print &out_stream, AudioInfoSupport &bi){
35  TRACED();
36  p_print = &out_stream;
38  }
39 
41  void setOutput(Print &out_stream) override {
42  p_print = &out_stream;
43  }
44 
46  virtual size_t write(const void *data, size_t in_size) override {
47  if (p_print==nullptr) return 0;
48  int samples = in_size/sizeof(float);
49  buffer.resize(samples);
50  float* p_float = (float*) data;
51  for (int j=0;j<samples;j++){
52  buffer[j] = p_float[j]*32767;
53  }
54  return p_print->write((uint8_t*)buffer.data(), samples*sizeof(int16_t));
55  }
56 
57  virtual operator bool() override {
58  return p_print!=nullptr;;
59  }
60 
61  protected:
62  Print *p_print=nullptr;
63  Vector<int16_t> buffer;
64 
65 };
66 
75 class EncoderFloat : public AudioEncoder {
76  public:
77  // Empty Constructor - the output stream must be provided with begin()
78  EncoderFloat(){
79  }
80 
81  // Constructor providing the output stream
82  EncoderFloat(Print &out){
83  p_print = &out;
84  }
85 
87  void setOutput(Print &out_stream) override {
88  p_print = &out_stream;
89  }
90 
92  const char* mime() override{
93  return mime_pcm;
94  }
95 
97  virtual bool begin() override{
98  is_open = true;
99  return true;
100  }
101 
103  bool begin(Print &out) {
104  p_print = &out;
105  return begin();
106  }
107 
109  void end() override {
110  is_open = false;
111  }
112 
114  virtual size_t write(const void *in_ptr, size_t in_size) override {
115  if (p_print==nullptr) return 0;
116  int16_t *pt16 = (int16_t*)in_ptr;
117  size_t samples = in_size / sizeof(int16_t);
118  buffer.resize(samples);
119  for (size_t j=0;j<samples;j++){
120  buffer[j] = static_cast<float>(pt16[j]) / 32768.0;
121  }
122  return p_print->write((uint8_t*)buffer.data(), samples*sizeof(float));
123  }
124 
125  operator bool() override {
126  return is_open;
127  }
128 
129  bool isOpen(){
130  return is_open;
131  }
132 
133  protected:
134  Print* p_print=nullptr;;
135  volatile bool is_open;
136  Vector<float> buffer;
137 
138 
139 };
140 
141 }
Docoding of encoded audio into PCM data.
Definition: AudioEncoded.h:18
Encoding of PCM data.
Definition: AudioEncoded.h:88
virtual void addNotifyAudioChange(AudioInfoSupport &bi)
Adds target to be notified about audio changes.
Definition: AudioTypes.h:158
Supports changes to the sampling rate, bits and channels.
Definition: AudioTypes.h:136
DecoderFloat - Converts Stream of floats into 2 byte integers.
Definition: CodecFloat.h:15
void setOutput(Print &out_stream) override
Defines the output Stream.
Definition: CodecFloat.h:41
DecoderFloat(Print &out_stream, AudioInfoSupport &bi)
Construct a new DecoderFloat object.
Definition: CodecFloat.h:34
DecoderFloat(Print &out_stream, bool active=true)
Construct a new DecoderFloat object.
Definition: CodecFloat.h:22
virtual size_t write(const void *data, size_t in_size) override
Converts data from float to int16_t.
Definition: CodecFloat.h:46
EncoderFloats - Encodes 16 bit PCM data stream to floats data.
Definition: CodecFloat.h:75
void setOutput(Print &out_stream) override
Defines the output Stream.
Definition: CodecFloat.h:87
virtual size_t write(const void *in_ptr, size_t in_size) override
Converts data from int16_t to float.
Definition: CodecFloat.h:114
virtual bool begin() override
starts the processing using the actual RAWAudioInfo
Definition: CodecFloat.h:97
const char * mime() override
Provides "audio/pcm".
Definition: CodecFloat.h:92
void end() override
stops the processing
Definition: CodecFloat.h:109
bool begin(Print &out)
starts the processing
Definition: CodecFloat.h:103
Definition: NoArduino.h:58
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition: AnalogAudio.h:10
static const char * mime_pcm
Mime type for PCM.
Definition: AudioTypes.h:488