arduino-audio-tools
Loading...
Searching...
No Matches
MDFEchoCancellationStream.h
Go to the documentation of this file.
1#pragma once
2
6
7namespace audio_tools {
8
75template <typename T = int16_t, typename SampleType = MDFFloat>
77 public:
86 MDFEchoCancellationStream(Stream& in, int filterLength,
87 AudioFFTBase& fftDriver,
89 : p_io(&in),
90 p_fft(&fftDriver),
91 canceller(filterLength, fftDriver, alloc) {}
92
103 MDFEchoCancellationStream(Stream& in, int filterLength, int nbMic,
104 int nbSpeakers, AudioFFTBase& fftDriver,
106 : p_io(&in),
107 p_fft(&fftDriver),
108 canceller(filterLength, nbMic, nbSpeakers, fftDriver, alloc) {}
109
118 size_t write(const uint8_t* buf, size_t len) override {
119 int frame_size = getFrameSize();
120 size_t samples = len / sizeof(T);
121 size_t frames = samples / (size_t)frame_size;
122 const T* data = (const T*)buf;
123 for (size_t f = 0; f < frames; f++) {
124 canceller.playback(data + f * frame_size);
125 }
126 return frames * (size_t)frame_size * sizeof(T);
127 }
128
137 size_t readBytes(uint8_t* buf, size_t len) override {
138 size_t read = p_io->readBytes(buf, len);
139 size_t samples = read / sizeof(T);
140 int frame_size = getFrameSize();
141 size_t frames = samples / (size_t)frame_size;
142 T* data = (T*)buf;
143 for (size_t f = 0; f < frames; f++) {
144 canceller.capture(data + f * frame_size, data + f * frame_size);
145 }
146 return frames * (size_t)frame_size * sizeof(T);
147 }
148
149 void setAudioInfo(AudioInfo info) override {
151 canceller.setSamplingRate(info.sample_rate);
152 canceller.setMicChannels(info.channels);
153 canceller.setSpeakerChannels(info.channels);
154 }
155
160 void setFilterLen(int len) { canceller.setFilterLength(len); }
161
166 int getFilterLen() { return canceller.getFilterLength(); }
167
171 void reset() { canceller.reset(); }
172
178
179 protected:
180 Stream* p_io = nullptr;
181 AudioFFTBase* p_fft = nullptr;
183
189 if (p_fft) {
190 return p_fft->config().length;
191 }
192 return 512; // default fallback
193 }
194};
195
196} // namespace audio_tools
Definition Arduino.h:136
virtual size_t readBytes(uint8_t *data, size_t len)
Definition Arduino.h:140
Memory allocateator which uses malloc.
Definition Allocator.h:24
Executes FFT using audio data privded by write() and/or an inverse FFT where the samples are made ava...
Definition AudioFFT.h:200
AudioFFTConfig & config()
Provides the actual configuration.
Definition AudioFFT.h:648
Base class for all Audio Streams. It support the boolean operator to test if the object is ready with...
Definition BaseStream.h:120
AudioInfo info
Definition BaseStream.h:171
virtual void setAudioInfo(AudioInfo newInfo) override
Defines the input AudioInfo.
Definition BaseStream.h:128
Acoustic echo canceller using MDF algorithm.
Definition MDFEchoCancellation.h:297
MDF (Multi-Delay block Frequency) echo cancellation with stream API.
Definition MDFEchoCancellationStream.h:76
int getFilterLen()
Get filter length.
Definition MDFEchoCancellationStream.h:166
MDFEchoCancellationStream(Stream &in, int filterLength, AudioFFTBase &fftDriver, Allocator &alloc=DefaultAllocator)
Constructor (single channel)
Definition MDFEchoCancellationStream.h:86
MDFEchoCancellation< T, SampleType > & getEchoCanceller()
Get underlying MDF echo canceller instance.
Definition MDFEchoCancellationStream.h:177
AudioFFTBase * p_fft
Definition MDFEchoCancellationStream.h:181
size_t readBytes(uint8_t *buf, size_t len) override
Read input and remove echo (using buffered playback). Buffers are processed in frame-sized chunks (se...
Definition MDFEchoCancellationStream.h:137
int getFrameSize()
Get frame size from FFT configuration.
Definition MDFEchoCancellationStream.h:188
void setAudioInfo(AudioInfo info) override
Defines the input AudioInfo.
Definition MDFEchoCancellationStream.h:149
void reset()
Reset echo canceller state.
Definition MDFEchoCancellationStream.h:171
size_t write(const uint8_t *buf, size_t len) override
Store the output signal (sent to speaker). Buffers are processed in frame-sized chunks (see getFrameS...
Definition MDFEchoCancellationStream.h:118
MDFEchoCancellationStream(Stream &in, int filterLength, int nbMic, int nbSpeakers, AudioFFTBase &fftDriver, Allocator &alloc=DefaultAllocator)
Constructor (multiple channels)
Definition MDFEchoCancellationStream.h:103
void setFilterLen(int len)
Set filter length (number of filter blocks)
Definition MDFEchoCancellationStream.h:160
Stream * p_io
Definition MDFEchoCancellationStream.h:180
MDFEchoCancellation< T, SampleType > canceller
Definition MDFEchoCancellationStream.h:182
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition LMSEchoCancellationStream.h:6
static TAllocatorExt DefaultAllocator
Definition Allocator.h:207
int length
Definition AudioFFT.h:55
Basic Audio information which drives e.g. I2S.
Definition AudioTypes.h:51
sample_rate_t sample_rate
Sample Rate: e.g 44100.
Definition AudioTypes.h:53
uint16_t channels
Number of channels: 2=stereo, 1=mono.
Definition AudioTypes.h:55