arduino-audio-tools
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | List of all members
AudioLoRaConfig Struct Reference

Configuration for AudioLoRa. More...

#include <AudioLoRa.h>

Inheritance diagram for AudioLoRaConfig:
AudioInfo

Public Member Functions

virtual void clear ()
 
void copyFrom (AudioInfo info)
 Same as set.
 
bool equals (AudioInfo alt)
 Returns true if alt values are the same like the current values.
 
bool equalsExSampleRate (AudioInfo alt)
 Checks if only the sample rate is different.
 
virtual void logInfo (const char *source="")
 
 operator bool ()
 Returns true if all components are defined (no component is 0)
 
bool operator!= (AudioInfo alt)
 Returns true if alt values are the different from the current values.
 
bool operator== (AudioInfo alt)
 Returns true if alt values are the same like the current values.
 
void set (AudioInfo info)
 Copies the values from info.
 
void setAudioInfo (AudioInfo info)
 Same as set.
 

Public Attributes

uint8_t bits_per_sample = DEFAULT_BITS_PER_SAMPLE
 Number of bits per sample (int16_t = 16 bits)
 
uint16_t channels = DEFAULT_CHANNELS
 Number of channels: 2=stereo, 1=mono.
 
int frequency = 868E6
 
int max_size = 200
 
int pin_dio0 = 14
 
int pin_rst = 12
 
int pin_ss = 8
 
bool process_audio_info = true
 
sample_rate_t sample_rate = DEFAULT_SAMPLE_RATE
 Sample Rate: e.g 44100.
 
int signal_bandwidth
 
int32_t spi_speed = 8E6
 
int spreading_factor = 6
 
int sync_word = 0xF3
 
int tx_power = 20
 

Detailed Description

Configuration for AudioLoRa.

LoRa is a long-range, low-power radio technology designed for occasional telemetry (a few bytes every so often), not for continuous audio. LoRa's PHY settings trade range/robustness for throughput: spreading_factor ranges from 6 (fastest, shortest range) to 12 (slowest, longest range), and signal_bandwidth from 7.8 kHz (slowest, longest range) to 500 kHz (fastest, shortest range). The defaults below (spreading_factor = 6, signal_bandwidth = 500 kHz) pick LoRa's fastest, shortest-range end of that scale, since audio needs throughput far more than a typical LoRa telemetry use case does. If you want LoRa's usual long range/robustness instead and don't care about audio, override these back towards 12 / 7.8 kHz – but expect only tens of bits per second at that end, which cannot carry audio at all.

Even at these fast defaults, usable throughput is still only on the order of tens of kbps – nowhere near typical PCM bitrates (8 kHz/8-bit mono alone is 64 kbps) – so audio only becomes practical once reduced to a very low sample rate, 8-bit and/or mono, and ideally compressed before it reaches this stream. Treat this as a fit for short clips or intermittent bursts, not a continuous/live stream; several regions additionally impose legal duty-cycle limits on the ISM bands LoRa uses (e.g. roughly 1% airtime in the EU 868 MHz band) that a sustained stream would likely violate.

Codec recommendation: encode speech with Codec2 (Codec2Encoder / Codec2Decoder in AudioTools/AudioCodecs/CodecCodec2.h) before writing to this stream, and decode it back out after reading. Codec2 was designed for exactly this situation – squeezing intelligible speech over narrowband radio links (it's the codec behind ham radio digital voice modes like FreeDV) – and offers modes from 3200 bit/s down to as low as 450 bit/s. At its 700 bit/s mode, a single ~200 byte LoRa packet carries over 2 seconds of speech, compared to a fraction of a second of raw 8-bit PCM; that's the difference between this being usable for short voice messages and not being usable at all. See the full codec list at https://github.com/pschatzmann/arduino-audio-tools/wiki/Encoding-and-Decoding-of-Audio for alternatives if Codec2 doesn't fit your case (e.g. GSM 06.10 at ~13 kbps if you have more throughput headroom and want wider codec compatibility with other systems).

Heltec LoRa 32 pins (as used by pin_ss/pin_rst/pin_dio0 below): NSS: 8, SCK: 9, MOSI: 10, MISO: 11, RST: 12, BUSY: 13, DIO1: 14

Author
Phil Schatzmann

Member Function Documentation

◆ clear()

virtual void clear ( )
inlinevirtualinherited

◆ copyFrom()

void copyFrom ( AudioInfo  info)
inlineinherited

Same as set.

◆ equals()

bool equals ( AudioInfo  alt)
inlineinherited

Returns true if alt values are the same like the current values.

◆ equalsExSampleRate()

bool equalsExSampleRate ( AudioInfo  alt)
inlineinherited

Checks if only the sample rate is different.

◆ logInfo()

virtual void logInfo ( const char *  source = "")
inlinevirtualinherited

◆ operator bool()

operator bool ( )
inlineinherited

Returns true if all components are defined (no component is 0)

◆ operator!=()

bool operator!= ( AudioInfo  alt)
inlineinherited

Returns true if alt values are the different from the current values.

◆ operator==()

bool operator== ( AudioInfo  alt)
inlineinherited

Returns true if alt values are the same like the current values.

◆ set()

void set ( AudioInfo  info)
inlineinherited

Copies the values from info.

◆ setAudioInfo()

void setAudioInfo ( AudioInfo  info)
inlineinherited

Same as set.

Member Data Documentation

◆ bits_per_sample

uint8_t bits_per_sample = DEFAULT_BITS_PER_SAMPLE
inherited

Number of bits per sample (int16_t = 16 bits)

◆ channels

uint16_t channels = DEFAULT_CHANNELS
inherited

Number of channels: 2=stereo, 1=mono.

◆ frequency

int frequency = 868E6

◆ max_size

int max_size = 200

◆ pin_dio0

int pin_dio0 = 14

◆ pin_rst

int pin_rst = 12

◆ pin_ss

int pin_ss = 8

◆ process_audio_info

bool process_audio_info = true

Send/expect a leading AudioInfo header packet (see AudioLoRa's class doc for how this is used and its single-point-of-failure caveat).

◆ sample_rate

sample_rate_t sample_rate = DEFAULT_SAMPLE_RATE
inherited

Sample Rate: e.g 44100.

◆ signal_bandwidth

int signal_bandwidth
Initial value:
=
500E3

◆ spi_speed

int32_t spi_speed = 8E6

◆ spreading_factor

int spreading_factor = 6

◆ sync_word

int sync_word = 0xF3

◆ tx_power

int tx_power = 20

The documentation for this struct was generated from the following file: