89 lines
1.4 KiB
C
89 lines
1.4 KiB
C
//
|
|
// Created by bruno on 13. 7. 2026.
|
|
//
|
|
|
|
#ifndef AUDIOCODER_ENCODER_H
|
|
#define AUDIOCODER_ENCODER_H
|
|
|
|
#define SAMPLE_RATE 48000
|
|
#define CLOCK_VOICE 0
|
|
#define DATA_VOICE 1
|
|
#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_PACKET,
|
|
TX_END
|
|
} TxState;
|
|
|
|
typedef struct {
|
|
|
|
unsigned int bitsPerSymbol;
|
|
unsigned int toneCount;
|
|
|
|
unsigned int byteIndex;
|
|
unsigned int bitIndex;
|
|
uint8_t buffer[1024 * 1024 * 8];
|
|
unsigned int bufferSize;
|
|
|
|
uint8_t packet[MAX_PACKET];
|
|
uint32_t packetSize;
|
|
uint32_t packetIndex;
|
|
|
|
|
|
uint16_t startFreq;
|
|
uint16_t endFreq;
|
|
uint16_t dataSpacing;
|
|
|
|
|
|
uint16_t clock0;
|
|
uint16_t clock1;
|
|
|
|
bool clockState;
|
|
|
|
|
|
uint32_t symbolSamples;
|
|
uint32_t samplesRemaining;
|
|
uint32_t sampleRate; // actual device sample rate
|
|
|
|
|
|
TxState state;
|
|
uint32_t preambleSymbols;
|
|
uint32_t syncIndex;
|
|
|
|
bool transmitting;
|
|
|
|
|
|
} Encoder;
|
|
|
|
|
|
typedef struct AudioData {
|
|
SynthVoice synthVoices[2];
|
|
Encoder *encoder;
|
|
} AudioData;
|
|
|
|
extern Encoder encoder;
|
|
extern AudioData encodedAudioData;
|
|
extern SDL_AudioDeviceID dev;
|
|
|
|
void startEncoder(Encoder *enc);
|
|
|
|
void stopEncoder(Encoder *enc);
|
|
|
|
void initAudioEncoder();
|
|
|
|
extern const uint8_t syncSymbols[8];
|
|
|
|
#endif //AUDIOCODER_ENCODER_H
|