12inline unsigned grayEncode(
unsigned value) {
return value ^ (value >> 1); }
16 unsigned value = gray;
17 for (
unsigned shift = gray >> 1; shift != 0; shift >>= 1) value ^= shift;
47 cfg.sample_rate = info.sample_rate;
48 cfg.channels = info.channels;
49 cfg.bits_per_sample = info.bits_per_sample;
55 using audio_tools::AudioEncoder::begin;
65 if (!
cfg.isValid())
return false;
66 if (
cfg.bits_per_sample != 16) {
67 LOGE(
"MFSKEncoder: bits_per_sample must be 16, not %d",
68 (
int)
cfg.bits_per_sample);
71 if (
cfg.channels < 1) {
72 LOGE(
"MFSKEncoder: invalid number of channels: %d", (
int)
cfg.channels);
89 size_t write(
const uint8_t* data,
size_t len)
override {
91 for (
size_t j = 0; j < len; j++) {
111 if (silence_samples)
tones.tone(0, silence_samples);
144 for (
int j = 0; j <
cfg.preamble_symbols; j++)
165 tones.tone(tone < 0 ? 0.0f :
cfg.toneFrequency(tone), stop - start);
float symbolRate() override
Symbols per second.
Definition MFSKEncoder.h:120
int bit_count
Definition MFSKEncoder.h:136
MFSKConfig cfg
Definition MFSKEncoder.h:129
static constexpr int TRAILER_SYMBOLS
Definition MFSKEncoder.h:128
size_t write(const uint8_t *data, size_t len) override
Modulates the bytes.
Definition MFSKEncoder.h:89
audio_tools::AudioInfo audioInfo() override
Definition MFSKEncoder.h:53
uint32_t bit_buffer
Definition MFSKEncoder.h:135
MFSKEncoder(Print &out)
Definition MFSKEncoder.h:36
uint32_t symbol_index
Definition MFSKEncoder.h:134
bool transmitting
Definition MFSKEncoder.h:131
void startTransmission()
Definition MFSKEncoder.h:138
bool isTransmitting() override
true between the first byte and endTransmission()
Definition MFSKEncoder.h:117
bool is_active
Definition MFSKEncoder.h:130
void writeSymbol(int tone)
Definition MFSKEncoder.h:161
MFSKConfig & config()
The configuration which was provided in begin().
Definition MFSKEncoder.h:123
bool begin() override
Definition MFSKEncoder.h:63
double samples_per_symbol
Definition MFSKEncoder.h:133
MFSKConfig defaultConfig()
Provides a default configuration: mfsk16.
Definition MFSKEncoder.h:39
void end() override
Definition MFSKEncoder.h:83
int bits_per_symbol
Definition MFSKEncoder.h:132
void writeBits()
Writes the next bits_per_symbol bits from the bit buffer.
Definition MFSKEncoder.h:151
bool begin(MFSKConfig config)
Starts the processing with the indicated configuration.
Definition MFSKEncoder.h:58
void setAudioInfo(audio_tools::AudioInfo info) override
Defines the sample rate and number of channels of the generated audio.
Definition MFSKEncoder.h:46
bool endTransmission(size_t silence_samples=0) override
Definition MFSKEncoder.h:102
Common API of the modulators (FSKEncoder, MFSKEncoder): the written data is converted to 16 bit PCM a...
Definition ModemBase.h:286
void setOutput(Print &out) override
Definition ModemBase.h:288
ToneOutput tones
Definition ModemBase.h:334
TinyModem: software audio modems and packets with error correction.
Definition AX25.h:11
unsigned grayEncode(unsigned value)
Gray code of a value: neighbouring tones differ in a single bit.
Definition MFSKEncoder.h:12
unsigned grayDecode(unsigned gray)
Inverse of grayEncode().
Definition MFSKEncoder.h:15
Configuration of the multi-tone FSK modem (MFSKEncoder, MFSKDecoder). Each symbol is one of tones ton...
Definition MFSKConfig.h:23
bool setMode(const char *mode)
Definition MFSKConfig.h:53