arduino-audio-tools
All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends Modules Pages
CodecL16.h
1#pragma once
2
3#include "AudioTools/AudioCodecs/AudioCodecsBase.h"
4namespace audio_tools {
5
13class DecoderL16 : public AudioDecoder {
14public:
19 DecoderL16() { TRACED(); }
20
26 DecoderL16(Print &out_stream, bool active = true) {
27 TRACED();
28 p_print = &out_stream;
29 }
30
38 DecoderL16(Print &out_stream, AudioInfoSupport &bi) {
39 TRACED();
40 setOutput(out_stream);
42 }
43
45 void setOutput(Print &out_stream) override { p_print = &out_stream; }
46
47 virtual size_t write(const uint8_t *data, size_t len) override {
48 if (p_print == nullptr)
49 return 0;
50 int16_t *data16 = (int16_t *)data;
51 for (int j = 0; j < len / 2; j++) {
52 data16[j] = ntohs(data16[j]);
53 }
54 return p_print->write((uint8_t *)data, len);
55 }
56
57 virtual operator bool() override { return p_print!=nullptr; }
58
59
60protected:
61 Print *p_print = nullptr;
62};
63
75class EncoderL16 : public AudioEncoder {
76public:
77 // Empty Constructor - the output stream must be provided with begin()
78 EncoderL16() {}
79
80 // Constructor providing the output stream
81 EncoderL16(Print &out) { p_print = &out; }
82
84 void setOutput(Print &out_stream) override { p_print = &out_stream; }
85
87 const char *mime() override { return "audio/l16"; }
88
90 virtual bool begin() override { is_open = true; return true;}
91
93 bool begin(Print &out) {
94 p_print = &out;
95 return begin();
96 }
97
99 void end() override { is_open = false; }
100
102 virtual size_t write(const uint8_t *data, size_t len) override {
103 if (p_print == nullptr)
104 return 0;
105
106 int16_t *data16 = (int16_t *)data;
107 for (int j = 0; j < len / 2; j++) {
108 data16[j] = htons(data16[j]);
109 }
110
111 return p_print->write((uint8_t *)data, len);
112 }
113
114 operator bool() override { return is_open; }
115
116 bool isOpen() { return is_open; }
117
118protected:
119 Print *p_print = nullptr;
120 bool is_open;
121};
122
123} // namespace audio_tools
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
DecoderL16 - Converts an 16 Bit Stream into 16Bits network byte order.
Definition CodecL16.h:13
void setOutput(Print &out_stream) override
Defines the output Stream.
Definition CodecL16.h:45
DecoderL16(Print &out_stream, AudioInfoSupport &bi)
Construct a new DecoderL16 object.
Definition CodecL16.h:38
DecoderL16(Print &out_stream, bool active=true)
Construct a new DecoderL16 object.
Definition CodecL16.h:26
DecoderL16()
Construct a new DecoderL16 object.
Definition CodecL16.h:19
EncoderL16s - Condenses 16 bit PCM data stream to 8 bits data. Most microcontrollers can not process ...
Definition CodecL16.h:75
virtual size_t write(const uint8_t *data, size_t len) override
Writes PCM data to be encoded as RAW.
Definition CodecL16.h:102
void setOutput(Print &out_stream) override
Defines the output Stream.
Definition CodecL16.h:84
virtual bool begin() override
starts the processing using the actual RAWAudioInfo
Definition CodecL16.h:90
void end() override
stops the processing
Definition CodecL16.h:99
bool begin(Print &out)
starts the processing
Definition CodecL16.h:93
const char * mime() override
Provides "audio/pcm".
Definition CodecL16.h:87
Definition NoArduino.h:62
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition AudioCodecsBase.h:10