MCPcopy Create free account
hub / github.com/DescentDevelopers/Descent3 / AudioEncode

Function AudioEncode

AudioEncode/aencode.cpp:990–1080  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

988}
989
990int32_t AudioEncode(ReadSampleFunction *read, void *data, unsigned channels, unsigned sample_rate, float volume,
991 FILE *out, int levels, int samples_per_subband, float comp_ratio) {
992 Encoder enc;
993 memset(&enc, 0, sizeof(enc));
994
995 if (!ReadSample_init(enc, read, data)) {
996 DestroyEncoder(enc);
997 return 0;
998 }
999
1000 if (!bits_init(enc.m_bits, out)) {
1001 DestroyEncoder(enc);
1002 return 0;
1003 }
1004
1005 enc.m_volume = volume;
1006 if (!SetupEncoder(enc, 0xF, std_lo_filter, std_hi_filter, levels, samples_per_subband)) {
1007 DestroyEncoder(enc);
1008 return 0;
1009 }
1010
1011 enc.m_threshold = (int32_t)(float(enc.m_samplesPerBlock) * comp_ratio * 16.0f);
1012
1013 int32_t originalPosVAR64 = ftell(out);
1014
1015 // Header
1016 enc.m_bits.WriteBits(0x97, 8);
1017 enc.m_bits.WriteBits(0x28, 8);
1018 enc.m_bits.WriteBits(0x03, 8);
1019
1020 // Version
1021 enc.m_bits.WriteBits(1, 8);
1022
1023 // Sample Count (Placeholder 32bits for now)
1024 enc.m_bits.WriteBits(0, 8);
1025 enc.m_bits.WriteBits(0, 8);
1026 enc.m_bits.WriteBits(0, 8);
1027 enc.m_bits.WriteBits(0, 8);
1028
1029 // Number of channels
1030 enc.m_bits.WriteBits(channels, 16);
1031
1032 // Sample Rate
1033 enc.m_bits.WriteBits(sample_rate, 16);
1034
1035 // Levels
1036 enc.m_bits.WriteBits(levels, 4);
1037
1038 // Samples per Sub-band (rows)
1039 enc.m_bits.WriteBits(samples_per_subband, 12);
1040
1041 enc.m_bandWriteEnabled = 0;
1042
1043 int32_t esi = enc.m_adjustedSamplesTimeNumColumns;
1044 while (esi) {
1045 EncodeSample(enc);
1046 --esi;
1047 }

Callers 1

aenc_CompressFunction · 0.85

Calls 8

ReadSample_initFunction · 0.85
DestroyEncoderFunction · 0.85
bits_initFunction · 0.85
SetupEncoderFunction · 0.85
EncodeSampleFunction · 0.85
EncodeFlushFunction · 0.85
WriteBitsMethod · 0.80
FlushMethod · 0.80

Tested by

no test coverage detected