// // 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 #include 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