34 cfg.sample_rate = info.sample_rate;
35 cfg.channels = info.channels;
36 cfg.bits_per_sample = info.bits_per_sample;
42 using audio_tools::AudioEncoder::begin;
52 if (!
cfg.isValid())
return false;
53 if (
cfg.bits_per_sample != 16) {
54 LOGE(
"MorseEncoder: bits_per_sample must be 16, not %d",
55 (
int)
cfg.bits_per_sample);
58 if (
cfg.channels < 1) {
59 LOGE(
"MorseEncoder: invalid number of channels: %d", (
int)
cfg.channels);
65 double w = 2.0 * M_PI *
cfg.frequency /
cfg.sample_rate;
80 size_t write(
const uint8_t* data,
size_t len)
override {
82 for (
size_t j = 0; j < len; j++) {
84 if (code ==
nullptr) {
99 for (
size_t j = 0; j < silence_samples; j++)
samples.write(0.0f);
109 for (
size_t j = 0; j < nsamples; j++)
samples.write(0.0f);
147 for (
const char* c = code; *c; c++) {
153 float len = *c ==
'.' ? t.
dot
171 size_t n = stop - start;
172 size_t ramp =
cfg.ramp_ms *
cfg.sample_rate / 1000;
173 if (2 * ramp > n) ramp = n / 2;
176 for (
size_t j = 0; j < n; j++) {
178 if (j < ramp) gain = 0.5f - 0.5f * cosf((
float)M_PI * j / ramp);
179 if (n - j <= ramp) gain = 0.5f - 0.5f * cosf((
float)M_PI * (n - j) / ramp);
185 float mag = sqrtf(
re *
re +
im *
im);
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
static const Timing & timing(MorseAlphabet alphabet)
Definition Morse.h:153
static const char * encode(MorseAlphabet alphabet, char ch)
Definition Morse.h:161
MorseConfig & config()
The configuration which was provided in begin().
Definition MorseEncoder.h:121
double unit_samples
Definition MorseEncoder.h:131
bool word_pending
Definition MorseEncoder.h:130
float step_im
Definition MorseEncoder.h:134
void setAudioInfo(audio_tools::AudioInfo info) override
Defines the sample rate and number of channels of the generated audio.
Definition MorseEncoder.h:33
bool writeIdle(size_t nsamples) override
Sends silence for the indicated number of samples.
Definition MorseEncoder.h:107
float re
Definition MorseEncoder.h:134
size_t write(const uint8_t *data, size_t len) override
Sends the characters.
Definition MorseEncoder.h:80
bool isTransmitting() override
true between the first character and endTransmission()
Definition MorseEncoder.h:115
MorseEncoder(Print &out)
Definition MorseEncoder.h:22
double position
Definition MorseEncoder.h:132
bool transmitting
Definition MorseEncoder.h:129
audio_tools::AudioInfo audioInfo() override
Definition MorseEncoder.h:40
bool begin() override
Definition MorseEncoder.h:50
MorseConfig defaultConfig()
Provides a default configuration: International Morse code, 20 wpm.
Definition MorseEncoder.h:25
void tone(float units)
Tone with raised cosine ramps.
Definition MorseEncoder.h:168
SampleOutput samples
Definition MorseEncoder.h:127
float step_re
Definition MorseEncoder.h:134
bool endTransmission(size_t silence_samples=0) override
Definition MorseEncoder.h:97
void end() override
Definition MorseEncoder.h:74
uint32_t sample_count
Definition MorseEncoder.h:135
uint64_t written
Definition MorseEncoder.h:133
MorseConfig cfg
Definition MorseEncoder.h:126
float symbolRate() override
Units per second.
Definition MorseEncoder.h:118
void silence(float units)
Definition MorseEncoder.h:162
bool is_active
Definition MorseEncoder.h:128
void sendCode(const char *code)
Definition MorseEncoder.h:137
float im
Definition MorseEncoder.h:134
void setOutput(Print &out) override
Definition MorseEncoder.h:27
bool begin(MorseConfig config)
Starts the processing with the indicated configuration.
Definition MorseEncoder.h:45
Writes float samples (-1.0 to 1.0) as 16 bit PCM with the requested number of channels and volume to ...
Definition ModemBase.h:118
TinyModem: software audio modems and packets with error correction.
Definition AX25.h:11
Lengths in units.
Definition Morse.h:146
float extra_long_dash
Definition Morse.h:147
float dot
Definition Morse.h:147
float letter_gap
Definition Morse.h:148
float element_gap
Definition Morse.h:148
float dash
Definition Morse.h:147
float inner_gap
Definition Morse.h:148
float long_dash
Definition Morse.h:147
float word_gap
Definition Morse.h:148
Configuration of the Morse code modem (MorseEncoder, MorseDecoder): a tone which is switched on and o...
Definition Morse.h:31