Files
audiocodec/encoder.h
2026-07-14 00:26:01 +02:00

92 lines
1.5 KiB
C

//
// Created by bruno on 13. 7. 2026.
//
#ifndef AUDIOCODER_ENCODER_H
#define AUDIOCODER_ENCODER_H
#define SAMPLE_RATE 48000
#define MAX_BITS 16
#define CLOCK_VOICE MAX_BITS
#define MAX_PACKET 223
#include <SDL_audio.h>
#include <stdint.h>
typedef struct SynthVoice {
uint32_t phase;
uint32_t phaseStep;
uint16_t frequency;
uint8_t volume;
} SynthVoice;
typedef enum {
TX_IDLE,
TX_PREAMBLE,
TX_SYNC,
TX_DATA,
TX_END
} TxState;
typedef struct {
unsigned int bitCount;
unsigned int byteIndex;
unsigned int bitIndex;
uint8_t buffer[1024 * 1024 * 8];
unsigned int bufferSize;
uint16_t startFreq;
uint16_t endFreq;
uint16_t dataSpacing;
uint16_t clock0;
uint16_t clock1;
bool clockState;
uint32_t symbolSamples;
uint32_t samplesRemaining;
TxState state;
uint32_t preambleSymbols;
uint32_t syncIndex;
bool transmitting;
} Encoder;
typedef struct AudioData {
SynthVoice synthVoices[MAX_BITS + 1];
Encoder *encoder;
} AudioData;
extern Encoder encoder;
extern AudioData encodedAudioData;
extern SDL_AudioDeviceID dev;
// Internal audio bus for loopback - simple ring buffer
#define INTERNAL_BUFFER_SIZE 262144
extern float internalBusSamples[INTERNAL_BUFFER_SIZE];
extern volatile uint32_t internalBusWrite;
extern volatile uint32_t internalBusRead;
void startEncoder(Encoder *enc);
void stopEncoder(Encoder *enc);
void initAudioEncoder();
extern const uint8_t syncBytes[4];
#endif //AUDIOCODER_ENCODER_H