arduino-audio-tools
Loading...
Searching...
No Matches
CodecILBC.h
Go to the documentation of this file.
1
11#pragma once
12
14#include "iLBC.h"
15
16
17namespace audio_tools {
18
27class ILBCDecoder : public AudioDecoder {
28 public:
29 ILBCDecoder(EnumLBCFrameSize frameSize = ms30, bool useEnhancer = true) {
30 info.sample_rate = 8000;
31 info.channels = 1;
33 frame_size = frameSize;
35 }
36
38 end();
39 }
40
41 virtual bool begin() {
42 TRACEI();
43 if (p_print==nullptr){
44 LOGE("Output not defined");
45 return false;
46 }
47
48 if (p_ilbc==nullptr){
50 }
51
52 // setup buffer
53 decoded_buffer.resize(p_ilbc->getSamples());
54 encoded_buffer.resize(p_ilbc->getEncodedBytes());
55
56 // update audio information
58 return true;
59 }
60
61 virtual void end() {
62 TRACEI();
63 delete p_ilbc;
64 p_ilbc = nullptr;
65 }
66
68
69 operator bool() { return p_ilbc != nullptr; }
70
71 virtual size_t write(const uint8_t *data, size_t len) {
72 if (p_ilbc==nullptr) return 0;
73 LOGI("write: %d", len);
74 int samples = len / sizeof(int16_t);
75 int16_t *p_samples = (int16_t *)data;
76 for (int j=0;j<samples;j++){
81 if (p_print!=nullptr){
83 delay(2);
84 }
86 }
87 }
88 return len;
89 }
90
91 protected:
92 Print *p_print = nullptr;
93 iLBCDecode *p_ilbc = nullptr;
99
100};
101
110class ILBCEncoder : public AudioEncoder {
111 public:
113 info.sample_rate = 8000;
114 info.channels = 1;
116 frame_size = frameSize;
117 }
118
120 end();
121 }
122
123 bool begin() {
124 TRACEI();
125 if (p_print==nullptr){
126 LOGE("Output not defined");
127 return false;
128 }
129 if (info.bits_per_sample!=16){
130 LOGE("bits_per_sample must be 16: %d",info.bits_per_sample);
131 return false;
132 }
133 if (info.sample_rate!=8000){
134 LOGW("The sample rate should be 8000: %d", info.sample_rate);
135 }
136 if (info.channels!=1){
137 LOGW("channels should be 1: %d", info.channels);
138 }
139 if (p_ilbc==nullptr){
141 }
142 decoded_buffer.resize(p_ilbc->getSamples());
143 encoded_buffer.resize(p_ilbc->getEncodedBytes());
145 return true;
146 }
147
148 virtual void end() {
149 TRACEI();
150 if (p_ilbc != nullptr) {
151 delete p_ilbc;
152 p_ilbc = nullptr;
153 }
154 }
155
156 virtual const char *mime() { return "audio/ilbc"; }
157
159
160 operator bool() { return p_ilbc != nullptr; }
161
162 virtual size_t write(const uint8_t *data, size_t len) {
163 if (p_ilbc==nullptr) return 0;
164 LOGI("write: %d", len);
165
166 int samples = len / sizeof(int16_t);
167 int16_t *p_samples = (int16_t *)data;
168
169 for (int j=0;j<samples;j++){
174 if (p_print!=nullptr){
176 }
178 }
179 }
180 return len;
181 }
182
183 protected:
184 Print *p_print = nullptr;
185 iLBCEncode *p_ilbc = nullptr;
190};
191
192} // namespace audio_tools
#define LOGW(...)
Definition AudioLoggerIDF.h:29
#define TRACEI()
Definition AudioLoggerIDF.h:32
#define LOGI(...)
Definition AudioLoggerIDF.h:28
#define LOGE(...)
Definition AudioLoggerIDF.h:30
Decoding of encoded audio into PCM data.
Definition AudioCodecsBase.h:18
AudioInfo info
Definition AudioCodecsBase.h:76
Encoding of PCM data.
Definition AudioCodecsBase.h:97
AudioInfo info
Definition AudioCodecsBase.h:116
void notifyAudioChange(AudioInfo info)
Definition AudioTypes.h:178
Decoder for iLBC. Depends on https://github.com/pschatzmann/libilbc.
Definition CodecILBC.h:27
Vector< int16_t > decoded_buffer
Definition CodecILBC.h:94
virtual void setOutput(Print &out_stream)
Defines where the decoded result is written to.
Definition CodecILBC.h:67
virtual bool begin()
Definition CodecILBC.h:41
virtual size_t write(const uint8_t *data, size_t len)
Definition CodecILBC.h:71
ILBCDecoder(EnumLBCFrameSize frameSize=ms30, bool useEnhancer=true)
Definition CodecILBC.h:29
EnumLBCFrameSize frame_size
Definition CodecILBC.h:97
Vector< uint8_t > encoded_buffer
Definition CodecILBC.h:95
Print * p_print
Definition CodecILBC.h:92
iLBCDecode * p_ilbc
Definition CodecILBC.h:93
~ILBCDecoder()
Definition CodecILBC.h:37
virtual void end()
Definition CodecILBC.h:61
int16_t encoded_buffer_pos
Definition CodecILBC.h:96
bool use_enhancer
Definition CodecILBC.h:98
Encoder for iLBC - Depends on https://github.com/pschatzmann/libopenilbc.
Definition CodecILBC.h:110
Vector< float > decoded_buffer
Definition CodecILBC.h:186
virtual void setOutput(Print &out_stream)
Default output assignment (encoders may override to store Print reference)
Definition CodecILBC.h:158
iLBCEncode * p_ilbc
Definition CodecILBC.h:185
bool begin()
Definition CodecILBC.h:123
virtual const char * mime()
Provides the mime type of the encoded result.
Definition CodecILBC.h:156
virtual size_t write(const uint8_t *data, size_t len)
Definition CodecILBC.h:162
ILBCEncoder(EnumLBCFrameSize frameSize=ms30)
Definition CodecILBC.h:112
int16_t decoded_buffer_pos
Definition CodecILBC.h:188
~ILBCEncoder()
Definition CodecILBC.h:119
EnumLBCFrameSize frame_size
Definition CodecILBC.h:189
Vector< uint8_t > encoded_buffer
Definition CodecILBC.h:187
Print * p_print
Definition CodecILBC.h:184
virtual void end()
Definition CodecILBC.h:148
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
int size()
Definition Vector.h:178
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition AudioCodecsBase.h:10
void delay(unsigned long ms)
Definition Time.h:23
size_t writeData(Print *p_out, T *data, int samples, int maxSamples=512)
Definition AudioTypes.h:512
sample_rate_t sample_rate
Sample Rate: e.g 44100.
Definition AudioTypes.h:57
uint16_t channels
Number of channels: 2=stereo, 1=mono.
Definition AudioTypes.h:59
uint8_t bits_per_sample
Number of bits per sample (int16_t = 16 bits)
Definition AudioTypes.h:61