arduino-audio-tools
Loading...
Searching...
No Matches
src
AudioTools
Sandbox
STT
MDFEchoCancellationStream.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
AudioTools/CoreAudio/AudioStreams.h
"
4
#include "
AudioTools/CoreAudio/Buffers.h
"
5
#include "
MDFEchoCancellation.h
"
6
7
namespace
audio_tools
{
8
20
template
<
typename
Allocator = std::allocator<u
int
8_t>>
21
class
MDFEchoCancellationStream
:
public
AudioStream
{
22
public
:
30
MDFEchoCancellationStream
(
Stream
& in,
int
filterLength
,
31
AudioFFTBase
&
fftDriver
,
32
const
Allocator
&
alloc
=
Allocator
())
33
:
p_io
(&in),
34
p_fft
(&
fftDriver
),
35
canceller
(
getFrameSize
(),
filterLength
,
fftDriver
,
alloc
) {}
36
46
MDFEchoCancellationStream
(
Stream
& in,
int
filterLength
,
47
AudioFFTBase
&
fftDriver
,
48
const
Allocator
&
alloc
=
Allocator
())
49
:
p_io
(&in),
50
p_fft
(&
fftDriver
),
51
canceller
(
getFrameSize
(),
filterLength
,
fftDriver
,
52
alloc
) {}
53
60
size_t
write
(
const
uint8_t
*
buf
,
size_t
len)
override
{
61
return
canceller
.write(
buf
, len);
62
}
63
70
size_t
readBytes
(
uint8_t
*
buf
,
size_t
len)
override
{
71
size_t
read =
p_io
->
readBytes
(
buf
, len);
72
size_t
samples = read /
sizeof
(
echo_int16_t
);
73
int
frame_size =
getFrameSize
();
74
75
if
(samples >= (
size_t
)frame_size) {
76
canceller
.capture((
const
echo_int16_t
*)
buf
, (
echo_int16_t
*)
buf
);
77
return
frame_size *
sizeof
(
echo_int16_t
);
78
}
79
return
read;
80
}
81
82
void
setAudioInfo
(
AudioInfo
info
)
override
{
83
AudioStream::setAudioInfo
(
info
);
84
canceller
.setSamplingRate(
info
.
sample_rate
);
85
canceller
.setMicChannels(
info
.
channels
);
86
canceller
.setSpeakerChannels(
info
.
channels
);
87
}
88
93
void
setFilterLen
(
int
len) {
canceller
.setFilterLen(len); }
94
99
int
getFilterLen
() {
return
canceller
.getFilterLen(); }
100
104
void
reset
() {
canceller
.reset(); }
105
110
MDFEchoCancellation<Allocator>
&
getEchoCanceller
() {
return
canceller
; }
111
112
protected
:
113
Stream
*
p_io
=
nullptr
;
114
AudioFFTBase
*
p_fft
=
nullptr
;
115
MDFEchoCancellation<Allocator>
canceller
;
116
121
int
getFrameSize
() {
122
if
(
p_fft
) {
123
return
p_fft
->
config
().
length
;
124
}
125
return
512;
// default fallback
126
}
127
};
128
129
}
// namespace audio_tools
AudioStreams.h
Buffers.h
MDFEchoCancellation.h
audio_tools::Allocator
Memory allocateator which uses malloc.
Definition
Allocator.h:23
audio_tools::AudioFFTBase
Executes FFT using audio data privded by write() and/or an inverse FFT where the samples are made ava...
Definition
AudioFFT.h:191
audio_tools::AudioFFTBase::config
AudioFFTConfig & config()
Provides the actual configuration.
Definition
AudioFFT.h:639
audio_tools::AudioStream
Base class for all Audio Streams. It support the boolean operator to test if the object is ready with...
Definition
BaseStream.h:122
audio_tools::AudioStream::info
AudioInfo info
Definition
BaseStream.h:173
audio_tools::AudioStream::setAudioInfo
virtual void setAudioInfo(AudioInfo newInfo) override
Defines the input AudioInfo.
Definition
BaseStream.h:130
audio_tools::MDFEchoCancellation
Acoustic echo canceller using MDF algorithm.
Definition
MDFEchoCancellation.h:508
audio_tools::MDFEchoCancellationStream
MDF (Multi-Delay block Frequency) echo cancellation with stream API.
Definition
MDFEchoCancellationStream.h:21
audio_tools::MDFEchoCancellationStream::getFilterLen
int getFilterLen()
Get filter length.
Definition
MDFEchoCancellationStream.h:99
audio_tools::MDFEchoCancellationStream::canceller
MDFEchoCancellation< Allocator > canceller
Definition
MDFEchoCancellationStream.h:115
audio_tools::MDFEchoCancellationStream::p_fft
AudioFFTBase * p_fft
Definition
MDFEchoCancellationStream.h:114
audio_tools::MDFEchoCancellationStream::readBytes
size_t readBytes(uint8_t *buf, size_t len) override
Read input and remove echo (using buffered playback)
Definition
MDFEchoCancellationStream.h:70
audio_tools::MDFEchoCancellationStream::getFrameSize
int getFrameSize()
Get frame size from FFT configuration.
Definition
MDFEchoCancellationStream.h:121
audio_tools::MDFEchoCancellationStream::setAudioInfo
void setAudioInfo(AudioInfo info) override
Defines the input AudioInfo.
Definition
MDFEchoCancellationStream.h:82
audio_tools::MDFEchoCancellationStream::reset
void reset()
Reset echo canceller state.
Definition
MDFEchoCancellationStream.h:104
audio_tools::MDFEchoCancellationStream::write
size_t write(const uint8_t *buf, size_t len) override
Store the output signal (sent to speaker)
Definition
MDFEchoCancellationStream.h:60
audio_tools::MDFEchoCancellationStream::MDFEchoCancellationStream
MDFEchoCancellationStream(Stream &in, int filterLength, AudioFFTBase &fftDriver, const Allocator &alloc=Allocator())
Constructor (single channel)
Definition
MDFEchoCancellationStream.h:30
audio_tools::MDFEchoCancellationStream::setFilterLen
void setFilterLen(int len)
Set filter length (number of filter blocks)
Definition
MDFEchoCancellationStream.h:93
audio_tools::MDFEchoCancellationStream::getEchoCanceller
MDFEchoCancellation< Allocator > & getEchoCanceller()
Get underlying MDF echo canceller instance.
Definition
MDFEchoCancellationStream.h:110
audio_tools::MDFEchoCancellationStream::p_io
Stream * p_io
Definition
MDFEchoCancellationStream.h:113
audio_tools::Stream
Definition
NoArduino.h:142
audio_tools::Stream::readBytes
virtual size_t readBytes(uint8_t *data, size_t len)
Definition
NoArduino.h:147
audio_tools
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition
AudioCodecsBase.h:10
audio_tools::echo_int16_t
int16_t echo_int16_t
Definition
MDFEchoCancellation.h:157
audio_tools::writeData
size_t writeData(Print *p_out, T *data, int samples, int maxSamples=512)
Definition
AudioTypes.h:512
audio_tools::AudioFFTConfig::length
int length
Definition
AudioFFT.h:50
audio_tools::AudioInfo
Basic Audio information which drives e.g. I2S.
Definition
AudioTypes.h:55
audio_tools::AudioInfo::sample_rate
sample_rate_t sample_rate
Sample Rate: e.g 44100.
Definition
AudioTypes.h:57
audio_tools::AudioInfo::channels
uint16_t channels
Number of channels: 2=stereo, 1=mono.
Definition
AudioTypes.h:59
Generated by
1.9.8