mirror of
https://github.com/meshtastic/firmware.git
synced 2025-12-20 09:43:03 +00:00
WIP: audio module still does not work, but enabled for all regions where audio is permitted.
This commit is contained in:
@@ -7,38 +7,45 @@
|
||||
#include <Arduino.h>
|
||||
#include <driver/adc.h>
|
||||
#include <functional>
|
||||
#if defined(ARCH_ESP32) && defined(USE_SX1280)
|
||||
#if defined(ARCH_ESP32)
|
||||
#include <codec2.h>
|
||||
#include <ButterworthFilter.h>
|
||||
#include <FastAudioFIFO.h>
|
||||
#endif
|
||||
|
||||
#define ADC_BUFFER_SIZE 320 // 40ms of voice in 8KHz sampling frequency
|
||||
#define ENCODE_FRAME_SIZE 40 // 5 codec2 frames of 8 bytes each
|
||||
#define ENCODE_CODEC2_SIZE 8
|
||||
#define ENCODE_FRAME_SIZE (ENCODE_CODEC2_SIZE * 5) // 5 codec2 frames of 8 bytes each
|
||||
|
||||
class Codec2Thread : public concurrency::NotifiedWorkerThread
|
||||
{
|
||||
#if defined(ARCH_ESP32)
|
||||
struct CODEC2* codec2_state = NULL;
|
||||
int16_t output_buffer[ADC_BUFFER_SIZE] = {};
|
||||
|
||||
public:
|
||||
Codec2Thread();
|
||||
|
||||
protected:
|
||||
virtual void onNotify(uint32_t notification) override;
|
||||
#endif
|
||||
};
|
||||
|
||||
class AudioModule : public SinglePortModule, private concurrency::OSThread
|
||||
{
|
||||
#if defined(ARCH_ESP32) && defined(USE_SX1280)
|
||||
bool firstTime = 1;
|
||||
#if defined(ARCH_ESP32)
|
||||
bool firstTime = true;
|
||||
hw_timer_t* adcTimer = NULL;
|
||||
uint16_t adc_buffer[ADC_BUFFER_SIZE] = {};
|
||||
int16_t speech[ADC_BUFFER_SIZE] = {};
|
||||
int16_t output_buffer[ADC_BUFFER_SIZE] = {};
|
||||
unsigned char rx_encode_frame[ENCODE_FRAME_SIZE] = {};
|
||||
unsigned char tx_encode_frame[ENCODE_FRAME_SIZE] = {};
|
||||
int tx_encode_frame_index = 0;
|
||||
|
||||
FastAudioFIFO audio_fifo;
|
||||
uint16_t adc_buffer_index = 0;
|
||||
adc1_channel_t mic_chan = (adc1_channel_t)0;
|
||||
struct CODEC2* codec2_state = NULL;
|
||||
|
||||
enum State
|
||||
{
|
||||
standby, rx, tx
|
||||
};
|
||||
volatile State state = State::tx;
|
||||
|
||||
public:
|
||||
unsigned char rx_encode_frame[ENCODE_FRAME_SIZE] = {};
|
||||
unsigned char tx_encode_frame[ENCODE_FRAME_SIZE] = {};
|
||||
int tx_encode_frame_index = 0;
|
||||
|
||||
AudioModule();
|
||||
|
||||
/**
|
||||
@@ -49,11 +56,7 @@ class AudioModule : public SinglePortModule, private concurrency::OSThread
|
||||
protected:
|
||||
virtual int32_t runOnce() override;
|
||||
|
||||
static void handleInterrupt();
|
||||
|
||||
void onTimer();
|
||||
|
||||
void run_codec2();
|
||||
// void run_codec2();
|
||||
|
||||
virtual MeshPacket *allocReply() override;
|
||||
|
||||
@@ -65,4 +68,16 @@ class AudioModule : public SinglePortModule, private concurrency::OSThread
|
||||
};
|
||||
|
||||
extern AudioModule *audioModule;
|
||||
extern Codec2Thread *codec2Thread;
|
||||
|
||||
extern FastAudioFIFO audio_fifo;
|
||||
extern uint16_t adc_buffer[ADC_BUFFER_SIZE];
|
||||
extern uint16_t adc_buffer_index;
|
||||
extern portMUX_TYPE timerMux;
|
||||
extern int16_t speech[ADC_BUFFER_SIZE];
|
||||
enum RadioState { standby, rx, tx };
|
||||
extern volatile RadioState radio_state;
|
||||
extern adc1_channel_t mic_chan;
|
||||
|
||||
IRAM_ATTR void am_onTimer();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user