Quiet Frame Decompress: Difference between revisions

From mywiki
Jump to navigation Jump to search
Tag: Reverted
Tag: Manual revert
Line 84: Line 84:
|-
|-
|}
|}
===Warmup Values===
Below warmup channel 0 bps 24
====Warmup Channel 0 bps 24====
<nowiki>
0 i64 FLAC__int64 0 0x0
1 i64 FLAC__int64 -14 0xfffffffffffffff2
2 i64 FLAC__int64 28 0x1c
3 i64 FLAC__int64 -2 0xfffffffffffffffe
4 i64 FLAC__int64 12 0xc
5 i64 FLAC__int64 37 0x25
6 i64 FLAC__int64 -12 0xfffffffffffffff4
7 i64 FLAC__int64 32 0x20
</nowiki>
Little Endian Memory Dump
0000000000000000
F2FFFFFFFFFFFFFF
1C00000000000000
FEFFFFFFFFFFFFFF
0C00000000000000
2500000000000000
F4FFFFFFFFFFFFFF
2000000000000000
=====Memory Dump as Dump=====
======From fLaC======
<nowiki>
00000000 00000000 F2FFFFFF FFFFFFFF 1C000000 00000000 FEFFFFFF FFFFFFFF
0C000000 00000000 25000000 00000000 F4FFFFFF FFFFFFFF 20000000 00000000
</nowiki>
=====From analAI=====
<nowiki>
00000000 00000000 F2FFFFFF FFFFFFFF 1C000000 00000000 FEFFFFFF FFFFFFFF
0C000000 00000000 25000000 00000000 F4FFFFFF FFFFFFFF 20000000 00000000
</nowiki>
====Warmup Channel  1 bps 25 predictor_order 7====
<nowiki>
0 i64 FLAC__int64 0 0x0
1 i64 FLAC__int64 13 0xd
2 i64 FLAC__int64 4 0x4
3 i64 FLAC__int64 -13 0xfffffffffffffff3
4 i64 FLAC__int64 48 0x30
5 i64 FLAC__int64 -40 0xffffffffffffffd8
6 i64 FLAC__int64 48 0x30
</nowiki>
=Edit to Here=
=Edit to Here=
==Read Subframe==
==Read Subframe==

Revision as of 19:08, 17 March 2025


EditDate 2025-03-16

Related Threads: FLAC Agent Build

Page created to understand how fLaC decompresses the 0 Quiet Frame so it can be incorporated into analAI

Key differences:

  1. Mid-side compression

Could well be the key lossless transformation mid = (left + right)/2 and side = left − right.Web References https://www.reddit.com/r/audioengineering/comments/u2t2o4/questions about the way flac works relatively/

Issues:

  1. Warmup does not appear in wave or raw file which I don't understand as I get the same warmup values in analAI as FLaC seems to produce.

Seems I may have to include additional step for mid side channel de-correlation. lossless transformation mid = (left + right)/2 and side = left − right. [1]. One sure issue with this is the side channel requires an extra bit (25 vs 24) which might explain the missed warmup values but right now I don’t think so. Either way it needs to be fixed.

Instruction trace flac for analQuiet.flac

Skip metadata not pertinent [2]

Sync Frame

FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC
Line Number Code Package Module Value Opertion Description
1047 SDC Find Metadata 0xFFF8 FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC FFF8
1071 SDC stream decoder process 0xFFF8 FLAC__stream_decoder_process_until_end_of_stream
2041 SDC read_frame Unk read_frame_(FLAC__StreamDecoder *decoder, FLAC__bool *got_a_frame, FLAC__bool do_full_decode)
350 BRC FLAC__bitreader_reset_read_crc16 Unk (FLAC__BitReader *br, FLAC__uint16 seed)
2277 SDC read_frame_header_ Unk read_frame_header_(FLAC__StreamDecoder *decoder)byte.
381 BDC FLAC__bitreader_is_consumed_byte_aligned 0 (const FLAC__BitReader *br)
2319 SDC read in the raw header as bytes so we can CRC it, and parse it on the way if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, 8))
418 BDC FLAC__bitreader_read_raw_uint32 variables below (FLAC__BitReader *br, FLAC__uint32 *val, uint32_t bits)
Read Frame Sync Fixed Header Channel Side 

Starting at 0x_1192 FFF8 C38C

& value 007F
  • 0b_1111 1111 1111 10 Frame Header sync'. 14 bits
  • 0b_0 mandatory 0 value Validation Bit 15
  • 0b_0 0 = fixed blocking strategy Fixed Blocks or Not Bit 16
  • 0b_1100 0x_C 12-8 = 4 so 2 to the 4th power = 16 time 256 = 4096 samples. ( 2358 SDC read frame header) frame blocksize
  • 0b_0011 0x3 3 sample rate 192,000 ( 2379 SDC read frame header) samplerate'
  • 0b1010 & 0b0111 = Case 2 FLAC__CHANNEL_ASSIGNMENT_MID_SIDE Channel Handling
  • 0b110 = C 24 bits per sample bps
  • 0b_0 Mandatory 0. Validation

32 bits consumed.

Variables
Variable Decimal Hex Location Flac File
Bits 8 8
br->word 0xfff8c3ac005e 1192
br->consumed_bits 32 0x20

Read Frame Header

Read Frame Header
Line Number Code Package Module Value Opertion Description
2319 SDC read_frame_header_ Variables Above (FLAC__StreamDecoder *decoder) read in the raw header as bytes so we can CRC it, and parse it on the way
420 BDC FLAC__bitreader_read_raw_uint32 0xC3
0xAC
(FLAC__BitReader *br, FLAC__uint32 *val, uint32_t bits)
2358 SDC read_frame_header_ 0xC3 frame.header.blocksize = 256 << (x-8) = 4098 =0x1000 (x = 0xC3 >> 4 = C = 12)
2379 SDC read_frame_header_ 0xC3 case 3 x &0x0F (x=0xC3) frame.header.sample_rate = 192,000
2429 SDC read_frame_header_ 0xAC case 2 frame.header.channel_assignment = FLAC__CHANNEL_ASSIGNMENT_MID_SIDE;
2467 SDC read_frame_header_ 0xAC case 6 (x = (uint32_t)(raw_header[3] & 0x0e) >> 1) frame.header.bits_per_sample = 32;

Edit to Here

Read Subframe

Read Sub Frame Header
2082 SDC read_frame NA Allocate channels +1 bit for channel 1 in MID_SIDE
2093 SDC read_frame channel 0 then 1
bps 24 then 25
if(!read_subframe_(decoder, channel, bps, do_full_decode))
2600 SDC read_subframe_ channel 0 then 1
bps 24 then 25
(FLAC__StreamDecoder *decoder, uint32_t channel, uint32_t bps, FLAC__bool do_full_decode)
2606 SDC read_subframe_ x = 78 = 0x4E (return) FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, 8)
2625 SDC read_subframe_ channel 0 then 1
bps 24 then 25
decoder->private_->frame.subframes[channel].wasted_bits = 0;
2666 SDC read_subframe_ predictor_order = 8 uint32_t predictor_order = ((x>>1)&31)+1
2672 SDC read_subframe_ channel 0 then 1
bps 24 then 25
predictor_order = 8
if(!read_subframe_lpc_(decoder, channel, bps, predictor_order, do_full_decode))
2806 SDC read_subframe_lpc channel 0 then 1
bps 24 then 25
order = 8
(FLAC__StreamDecoder *decoder, uint32_t channel, uint32_t bps, const uint32_t order, FLAC__bool do_full_decode)
2821 SDC read_subframe_lpc see warmup values below FLAC__bitreader_read_raw_int64(decoder->private_->input, &i64, bps)
Variables
Variable Decimal Hex Location Flac File
Bits 8 8
br->word 0x4e000000fffff200 1192
br->consumed_bits 0 0x20

Edit To Here

References