Files
UnrealEngine/Engine/Source/Runtime/RadAudioCodec/SDK/Include/rada_file_header.h
2025-05-18 13:04:45 +08:00

76 lines
1.8 KiB
C

// Copyright Epic Games Tools, LLC. All Rights Reserved.
#pragma once
#include <stdint.h>
#define RADA_SYNC_BYTE (0b01010101)
#define RADA_MAX_CHANNELS 32
enum class ERadASampleRate : uint8_t
{
Rate_24000,
Rate_32000,
Rate_44100,
Rate_48000,
Rate_COUNT,
};
struct RadAFileHeader
{
uint32_t tag; // RADA
// Bytes from the file necessary to completely decode the first block of audio.
uint32_t bytes_for_first_decode;
uint8_t version;
uint8_t channels;
// Bytes of rad audio stream header data, located right after RadAFileHeader.
uint16_t rada_header_bytes;
uint8_t shift_bits_for_seek_table_samples;
uint8_t bits_for_seek_table_bytes;
uint8_t bits_for_seek_table_samples;
ERadASampleRate sample_rate;
// total number of samples/frames in the file.
uint64_t frame_count;
uint64_t file_size;
uint16_t seek_table_entry_count;
// The maximum size of any block of audio, including any RadA block header. This can be
// used to allocate a buffer that can be used to decode the entire file one block at a time.
uint16_t max_block_size;
uint16_t PADDING[2];
};
struct RadASeekTableHeader
{
int64_t byte_line_slope[2];
int64_t byte_intercept;
int64_t byte_bias;
int64_t sample_line_slope[2];
int64_t sample_intercept;
int64_t sample_bias;
};
static uint32_t RadASampleRateFromEnum(ERadASampleRate InRate)
{
switch (InRate)
{
case ERadASampleRate::Rate_24000: return 24000;
case ERadASampleRate::Rate_32000: return 32000;
case ERadASampleRate::Rate_44100: return 44100;
case ERadASampleRate::Rate_48000: return 48000;
default: return 0;
}
}
// FileHeader
// SeekTableHeader, if present.
// StreamCountx[EncoderHeader], totalling rada_header_bytes
// SeekTable
// Encoded blocks