FLAC Agent Build: Difference between revisions
(→Log) |
(fLaC example link added) |
||
(80 intermediate revisions by the same user not shown) | |||
Line 11: | Line 11: | ||
|EditDate=2024-08-06 | |EditDate=2024-08-06 | ||
|Prime Category=Information Services | |Prime Category=Information Services | ||
|WebRef=https://developer.nvidia.com/cuda-toolkit \ https://xiph.org/flac/ \ https://ftp.osuosl.org/pub/xiph/releases/flac/ | |WebRef=https://developer.nvidia.com/cuda-toolkit \ https://xiph.org/flac/ \ https://ftp.osuosl.org/pub/xiph/releases/flac/ \ https://www.rfc-editor.org/rfc/rfc9639.html#name-examples | ||
}} | }} | ||
I want to build an agent that will read flac music files and identify patterns in them. Once it has the patterns identified I want to see if can draw images in line with the evolving songs and long term improvise based on optimum patterns. Very long term may play sounds that draw a message the machine wants to tell us. | I want to build an agent that will read flac music files and identify patterns in them. Once it has the patterns identified I want to see if can draw images in line with the evolving songs and long term improvise based on optimum patterns. Very long term may play sounds that draw a message the machine wants to tell us. | ||
==Log== | ==Log== | ||
-- [[User:Johnny|Johnny]] ([[User talk:Johnny|talk]]) 01:43, 8 December 2024 (UTC) Figured out how to dump memory. Export to /tmp | |||
--[[User:Johnny|Johnny]] ([[User talk:Johnny|talk]]) 17:41, 21 November 2024 (UTC) Printed off stream_decoder.c from FLAC xiph code and tracing through documenting reads from file. So far seems they do way more 8 bit and less reads than I'll need. See below for sequence of reads. | |||
—[[User:Johnny|Johnny]] ([[User talk:Johnny|talk]]) 20:53, 14 November 2024 (UTC) 2 break throughs today. Found shorten a program from Tony Robinson at Cambridge that is the compression logic behind flac and it’s in C. [[File:Robinson tr156.ps]] | —[[User:Johnny|Johnny]] ([[User talk:Johnny|talk]]) 20:53, 14 November 2024 (UTC) 2 break throughs today. Found shorten a program from Tony Robinson at Cambridge that is the compression logic behind flac and it’s in C. [[File:Robinson tr156.ps]] | ||
Line 97: | Line 100: | ||
0000:23C0 | 40 12 67 E4 60 3E 4B CB E3 AD 01 86 B8 6B 7B 62 | @.gä`>KËã...¸k{b | 0000:23C0 | 40 12 67 E4 60 3E 4B CB E3 AD 01 86 B8 6B 7B 62 | @.gä`>KËã...¸k{b | ||
</nowiki> | </nowiki> | ||
===[https://xiph.org/flac/documentation_format_overview.html Flac overview] | ===Trace of reads=== | ||
Acronyms: | |||
SDC = Stream_Decoder.c | |||
BitR - Bitreader.c | |||
====Metadata Reads==== | |||
{| class="wikitable" style="margin:auto" | |||
|+ Streaminfo Metadata Block 0 | |||
|- | |||
! Line Number !! Code Package !! Module !! Value !! Opertion Description | |||
|- | |||
| 1339 || SDC || Find Metadata || '''fLaC''' </br> '''0x_664C6143''' || Verifying 8 bits at a time that file starts with fLAc. | |||
|- | |||
| 1394 || SDC || Read Metadata || '''0b_0''' || Read 1 bit to determine last metadata block.. | |||
|- | |||
| 1398 || SDC || Read Metadata || '''0b_0000000''' || Read 7 bits. Metadata Type 0 Streaminfo | |||
|- | |||
| 1401 || SDC || Read Metadata || '''0x_000022''' || Read 24 bits indicating length 34. | |||
|- | |||
| 1578 || SDC || Read StreamInfo|| '''0x664C614300000022''' || Read 34 bytes 0x_22 into Streaminfo structure | |||
# '''0x1000''' 4096 Minimum Blocksize 16 bits | |||
# '''0x1000''' 4096 Maximum Blocksize 16 bits | |||
# '''0x000159''' 345 Minimum Framesize 24 bits | |||
# '''0x001D88''' 7560 Maximum Framesize 24 bits | |||
# '''0x2EE00''' 192000 Samplerate 20 bits | |||
# '''0b001''' 1 Channels 3 bits + 1 = 2 Channels | |||
# '''0b10111''' 23 5 bits Bits per sample = 23 + 1 | |||
# '''0x004BE30D0''' 79.573,200 36 bits number of samples | |||
# '''mdsum''' 16 Bytes (8*16 bits) | |||
# ''skip rest of block length(34) - used bits(272)/8 = 0 | |||
|} | |||
{| class="wikitable" style="margin:auto" | |||
|+ SeekTable Metadata Block 1 <br/>Metadata Reads Looking for Last | |||
|- | |||
! Line Number !! Code Package !! Module !! Value !! Operation Description | |||
|- | |||
| 1040 || SDC || Decode till End Meta ||case FLAC__STREAM_DECODER_READ_METADATA || Read all Metadata Blocks | |||
|- | |||
| 1394 || SDC || Read Metadata || '''0b_0''' || Read 1 bit to determine last metadata block. | |||
|- | |||
| 1398 || SDC || Read Metadata || '''0b_0000011''' || Read 7 bits. Metadata Type 3 FLAC__METADATA_TYPE_SEEKTABLE | |||
|- | |||
| 1401 || SDC || Read Metadata || '''0x_0002F4''' || Read 24 bits indicating length 756. | |||
|Will determine later if we need seektable information | |||
|} | |||
{| class="wikitable" style="margin:auto" | |||
|+ Metadata Block 2 | |||
|- | |||
! Line Number !! Code Package !! Module !! Value !! Operation Description | |||
|- | |||
| 1040 || SDC || Decode till End Meta ||case FLAC__STREAM_DECODER_READ_METADATA || Read all Metadata Blocks | |||
|- | |||
| 1394 || SDC || Read Metadata || '''0b_0''' || Read 1 bit to determine last metadata block. | |||
|- | |||
| 1398 || SDC || Read Metadata || '''0b_0000100''' || Read 7 bits. Metadata Type 4 FLAC__METADATA_TYPE_VORBIS_COMMENT | |||
|- | |||
| 1401 || SDC || Read Metadata || '''0x_000028''' || Read 24 bits indicating length 40. | |||
|- | |||
| 1478 || SDC || Read Metadata || '''4''' || Type 4 case FLAC__METADATA_TYPE_VORBIS_COMMENT | |||
|} | |||
{| class="wikitable" style="margin:auto" | |||
|+ Metadata Block 2 | |||
|- | |||
! Line Number !! Code Package !! Module !! Value !! Operation Description | |||
|- | |||
| 1040 || SDC || Decode till End Meta ||case FLAC__STREAM_DECODER_READ_METADATA || Read all Metadata Blocks | |||
|- | |||
| 1394 || SDC || Read Metadata || '''0b_1''' || Read 1 bit to determine last metadata block last=true. | |||
|- | |||
| 1398 || SDC || Read Metadata || '''0b_0000001''' || Read 7 bits. Metadata Type 1 FLAC__METADATA_TYPE_PADDING: | |||
|- | |||
| 1401 || SDC || Read Metadata || '''0x002000''' || Read 24 bits indicating length 8192. | |||
|- | |||
| 1453 || SDC || Read Metadata || '''skip_it=true''' || Type 1 FLAC__METADATA_TYPE_PADDING: skip to 2352 | |||
|} | |||
====Data Reads==== | |||
=====Sync Frame===== | |||
{| class="wikitable" style="margin:auto" | |||
|+ 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 | |||
|- | |||
| 1989 || SDC || frame_sync_ || '''0xFFF8''' || Read 7 bits. Metadata Type 0 Streaminfo | |||
|- | |||
| 418 || BRC || FLAC__bitreader_read_raw_uint32 || '''0xFFF8''' || Read 8 bits at a time validating each byte. | |||
|- | |||
| 2009 || SDC || frame_sync_ || '''0b1111 1111''' || FF start right at end of metadata padding. 2532 | |||
|- | |||
| 2020 || SDC || frame_sync_ || '''0b1111 10''' || Right shift F8 to 0x_7c | |||
|} | |||
=====Read Frame Header Metadata===== | |||
Starting at 0x_2354 FF80 C38C | |||
* 0b_1111 1111 10 Frame Header ''sync''' | |||
* 0b_0 mandatory 0 value ''Validation'' | |||
* 0b_0 0 = fixed blocking strategy '''Fixed Blocks or Not''' | |||
* 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''' | |||
* 0b1000 8 left/side stereo: channel 0 is the left channel, channel 1 is the side(difference) channel ( 2423 SDC read frame header) '''Channel Handling''' | |||
* 0b110 = C 24 bits per sample ''bps'' | |||
* 0b_0 Mandatory 0. ''Validation'' | |||
{| class="wikitable" style="margin:auto" | |||
|+ Read Warmup <br/>Iterate Predictor Order | |||
|- | |||
! Line Number !! Code Package !! Module !! Value !! Operation Description | |||
|- | |||
| 3700 || SDC ||file_tell_callback_ ||0x4000 || Absolute position 16,384 | |||
|- | |||
| 889 || SDC || FLAC__stream_decoder_get_decode_position || '''0_x2354''' || Start of Frame after frame header at 9044 in. | |||
|- | |||
| 1075 || SDC || stream decoder process || '''case FLAC__STREAM_DECODER_READ_FRAME:''' || Read Frame | |||
|- | |||
| 2041 || SDC || read_frame || '''0x_0002F4''' || Read frame to decode. | |||
|- | |||
| 350 || BRC || FLAC__bitreader_reset_read_crc16 || '''reset crc''' || FLAC__bitreader_reset_read_crc16 | |||
|- | |||
| 2277 || SDC || read_frame_header_ || '''0x_FFF8C38C''' || Frame header breakdown | |||
* 0b_1111 1111 10 Frame Header | |||
* 0b_0 mandatory 0 value | |||
* 0b_0 0 = fixed blocking strategy | |||
* 0b_1100 0x_C 12-8 = 4 so 2 to the 4th power = 16 time 256 = 4096 samples. ( 2358 SDC read frame header) | |||
* 0b_0011 0x3 3 sample rate 192,000 ( 2379 SDC read frame header) | |||
* 0b1000 8 left/side stereo: channel 0 is the left channel, channel 1 is the side(difference) channel ( 2423 SDC read frame header) | |||
* 0b110 = C 24 bits per sample | |||
* 0b_0 Mandatory 0. | |||
|- | |||
| 2358 || SDC || read_frame_header_ || '''0b1100''' || 4 bits frame.header.blocksize = 256 << (x-8) 4096 256 * 2<sup>4</sup> . | |||
|- | |||
| 2379 || SDC || read_frame_header_ || '''0b0011''' || 4 bits map 3 to 192000 frame.header.sample_rate = 192000 | |||
|- | |||
| 2423 || SDC || read_frame_header_ || '''0b1000''' || 4 Bits map to left side channel frame.header.channel_assignment = FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE; | |||
|- | |||
| 2364 || SDC || read_frame_header_ || '''0b110''' || 3 bits map to 24 bps frame.header.bits_per_sample = 24 | |||
|- | |||
|} | |||
=====Position Past Optional Frame Headers===== | |||
{| class="wikitable" style="margin:auto" | |||
|+ Frame Header 2 | |||
|- | |||
! Line Number !! Code Package !! Module !! Value !! Operation Description | |||
|- | |||
| 2499 || SDC || read_frame_header_ ||FIxed Block size || UTF8 -> BRC | |||
|- | |||
| 928 || BRC || FLAC__bitreader_read_utf8_uint32|| '''0b_0000''' || Read 4 bits to determine optional data.<br/> 934 Call 32 uint read for 8 bits | |||
|- | |||
| 934 || BRC || FLAC__bitreader_read_raw_uint32 || '''0x_00''' || Read full byte even though only 4 bits requested | |||
|- | |||
| 2509 || SDC || read_frame_header|| '''0x00''' || Frame 0 | |||
|- | |||
| 2554 || SDC || read_frame_header || '''0x_F0''' || Read next 8 bits | |||
|} | |||
=====Warmup===== | |||
One entry for each predictor order so in this case 8 entries from 2359 to 2371 | |||
* 0xffffffffffff8981 | |||
* 0xffffffffffff8e74 | |||
* 0xffffffffffff92e9 | |||
* 0xffffffffffff9546 | |||
* 0xffffffffffff91df | |||
* 0xffffffffffff8ea2 | |||
* 0xffffffffffff8661 | |||
* 0xffffffffffff7b71 | |||
{| class="wikitable" style="margin:auto" | |||
|+ Warmup | |||
|- | |||
! Line Number !! Code Package !! Module !! Value !! Operation Description | |||
|- | |||
| 2554 || SDC || read_frame_header || '''0x_F0''' || Read next 8 bits -> uint 32 | |||
|- | |||
| 934 || BRC || FLAC__bitreader_read_raw_uint32 || '''0x_F0''' || Read next byte. | |||
|- | |||
| 2556 || SDC || read_frame_header|| '''0xF0''' || crc8 = 0x_F) 240 | |||
|- | |||
| 2072 || SDC || read_frame || '''0x_F0''' || Read Left Side Set 2 Channels | |||
|- | |||
| 2600 || SDC || read_subframe || '''0x_78''' || read uint 8 bits then 24 bit sequences | |||
|- | |||
| 2666 || SDC || read_subframe || '''0x_78''' || Set predictor_order ((78>>1)&31)+1 = 8 | |||
|- | |||
| 2806 || SDC || read_subframe_lpc || '''0x_F0''' || 24 bits 1 for each predictor order | |||
|- | |||
| 2823 || SDC || read_subframe_lpc|| '''0xff8981''' || predictor order = 8 so 8 64 bit warm-ups loaded starting at 2359 stopping 2371. | |||
* 0xffffffffffff8981 | |||
* 0xffffffffffff8e74 | |||
* 0xffffffffffff92e9 | |||
* 0xffffffffffff9546 | |||
* 0xffffffffffff91df | |||
* 0xffffffffffff8ea2 | |||
* 0xffffffffffff8661 | |||
* 0xffffffffffff7b71 | |||
|} | |||
=====qlp_coeff===== | |||
File Data | |||
word = 0x71e69de55c518b82 start 2370 | |||
bits read in previous routine 0x71 Start at 2371 0xE6 9DE5 5C51 8B82 | |||
bits 0b1110 01101 001 1101 1110 0101 010 1110 0010 1000 1 0101 1100 0101 0001 1000 1011 1000 0010 | |||
1 D E 5 2 E 2 8 | |||
{| class="wikitable" style="margin:auto" | |||
|+ qlp_coeff[0-7] | |||
|- | |||
! Line Number !! Code Package !! Module !! Value !! Operation Description | |||
|- | |||
| 2834 || SDC || read_subframe_lpc || '''0b_1110''' || Read 4 bits qlp_coeff_precision = u32+1 = 15 | |||
|- | |||
| 2844 || SDC || read_subframe_lpc || '''0b_01101''' || read 5 bits quantization_level = i32 = 13 | |||
|- | |||
| 2850 || SDC || read_subframe_lpc || '''0x_1DE5''' || read 15 bits based on pre4cision determined above qlp_coeff[u] = | |||
* 0x_1DE5 7,653 | |||
* 0x_2E28 11,816 | |||
* 0xffffe2e0 -7,456 | |||
* 0xffffcff4 -12,300 | |||
* 0xc17 3,095 | |||
* 0x2117 8,471 | |||
* 0x172 370 | |||
* 0xfffff26e -3,474 | |||
|} | |||
9 bits Next word consumed. | |||
=====SDC to Rice Reader===== | |||
File Data 2381.b_a ''x37.b0'' '''0b000 0001.x44''' | |||
word = 0x370144fd4fd17f19 | |||
bits read in previous routine b0011 0111 0 0x37.b0 | |||
starting bits 0b000 0001 the 0x44FD 4FD1 7F19 | |||
little endian memory dump of in storage buffer | |||
'''19 7F D1 4F 19 7F D1 4F 19 7F D1 4F FD 44 01 37''' 56 26 0A 25 B2 EE F6 7F 9D 10 5D 79 62 33 5B 9F B4 0E 65 24 15 7A 35 13 '''370144FD4FD17F19''' at 2380 in test.flac. | |||
File | |||
3701 44FD 4FD1 4FD1 7F19 ''7FF6 EEB2 250A 2656'' '''''does not line up with contiguous memory location. Only 64 bit word valid in memory (if reversed)''''' | |||
loc '''2380''' in file | |||
word | |||
0x370144fd4fd17f19 | |||
{| class="wikitable" style="margin:auto" | |||
|+ Frame Header 2 | |||
|- | |||
! Line Number !! Code Package !! Module !! Value !! Operation Description | |||
|- | |||
| 2854 || SDC || read_subframe_lpc || '''0b_00''' || Read 2 bits 0 location 2381.b01 0b00. '''Entropy coding method 0''' | |||
|- | |||
| 2863 || SDC || read_residual_partitioned_rice_ || '''0b_0000''' || GoTo FLAC__format_entropy_coding_method_partitioned_rice_contents_ensure_size | |||
|- | |||
| 2868 || SDC || read_subframe_lpc || '''0b_0000''' || 2381.b003 0b0000 read 4 bits subframe->'''entropy_coding_method.data.partitioned_rice.order''' = u32 = 0 | |||
|- | |||
| '''Location 2382.b3 0''' | |||
|- | |||
| 2881 || SDC || read_subframe_lpc || '''0''' || GoTo read_residual_partitioned_rice_ | |||
|- | |||
| 2950 || SDC || read_residual_partitioned_rice_ || '''0x_F0''' || 24 bits 1 for each predictor order | |||
|- | |||
| 2956 || SDC || read_residual_partitioned_rice_ || NA || partition_samples = decoder->private_->frame.header.blocksize >> partition_order = 4096 | |||
|- | |||
| 590 || format.c || FLAC__format_entropy_coding_method_partitioned_rice_contents_ensure_size || '''0''' || GoTo read_residual_partitioned_rice_ | |||
|- | |||
| 2950 || SDC || read_residual_partitioned_rice_ || '''0x_F0''' || Reserve required memory | |||
|- | |||
| 2972 || SDC || read_residual_partitioned_rice_ || '''0b1010''' || Read 4 bits 2381.b0004 0b1010 partitioned_rice_contents->parameters[partition] = '''rice_parameter''' = 10 0b1010 0xA | |||
|- | |||
| 2975 || SDC || read_residual_partitioned_rice_ || NA || partition_samples - predictor_order 4096 - 8 = 4088 | |||
|- | |||
| 2976 || SDC || bitreader_read_rice_signed_block.c || NDA || Hard inline brah to bitreader_rice_signed Straight through thread | |||
|- | |||
|} | |||
=====Next Edit===== | |||
File Data 2384.b_3 ''x.b0 0100'' '''0b000 0001.x44''' | |||
consumed_words = 0x70 112 | |||
consumed_bits = 0x13 19 | |||
word = 0x370144fd4fd17f19 | |||
bits read in previous routine b0011 0111 0 0x37.b0 | |||
starting bits 0b000 0001 the 0x44FD 4FD1 7F19 | |||
little endian memory dump of in storage buffer | |||
'''19 7F D1 4F 19 7F D1 4F 19 7F D1 4F FD 44 01 37''' 56 26 0A 25 B2 EE F6 7F 9D 10 5D 79 62 33 5B 9F B4 0E 65 24 15 7A 35 13 '''370144FD4FD17F19''' at 2380 in test.flac. | |||
File | |||
3701 44FD 4FD1 4FD1 7F19 ''7FF6 EEB2 250A 2656'' '''''does not line up with contiguous memory location. Only 64 bit word valid in memory (if reversed)''''' | |||
loc '''2380''' in file | |||
word | |||
0x370144fd4fd17f19 | |||
| 1 || bitread_rice_signed || NA || Entry one pass through not loops. | |||
|- | |||
| 47 || bitread_rice_signed || ''no loops'' ||'''0x370144fd4fd17f19''' || br->buffer[cwords] << br->consumed_bits(19) = | |||
# 0x_3701 44FD 4FD1 4FD1 7F19 | |||
# 0b_11 0111 0000 0001 0100 0100 1111 1101 0100 1111 1101 0001 0111 1111 0001 1001 | |||
# 0b_10 0111 1110 1010 0111 1110 1000 1011 1111 1000 1100 1000 0000 0000 0000 0000 | |||
# 0x_27EA7E8BF8C80000 0x27ea7e8bf8c80000 | |||
# 2,876,250,451,668,893,696 | |||
|- | |||
|} | |||
==[https://xiph.org/flac/documentation_format_overview.html Flac overview]== | |||
# Metadata Block Header | # Metadata Block Header | ||
## <1> Last-metadata-block flag: '1' if this block is the last metadata block before the audio blocks, '0' otherwise. | ## <1> Last-metadata-block flag: '1' if this block is the last metadata block before the audio blocks, '0' otherwise. | ||
Line 124: | Line 423: | ||
## FLAC specifies a minimum block size of 16 and a maximum block size of 65535, meaning the bit patterns corresponding to the numbers 0-15 in the minimum blocksize and maximum blocksize fields are invalid. | ## FLAC specifies a minimum block size of 16 and a maximum block size of 65535, meaning the bit patterns corresponding to the numbers 0-15 in the minimum blocksize and maximum blocksize fields are invalid. | ||
# [https://xiph.org/flac/format.html#metadata_block_streaminfo Flac format] | # [https://xiph.org/flac/format.html#metadata_block_streaminfo Flac format] | ||
===Decompose test.flac=== | |||
# '''0-4 "fLaC" ID Bytes''' | # '''0-4 "fLaC" ID Bytes''' | ||
====0 Metadata Block Streaminfo (Mandatory) 0==== | |||
{|class="wikitable" style="margin:auto" | {|class="wikitable" style="margin:auto" | ||
|+ Metadata Block Header Streaminfo 0 | |+ Metadata Block Header Streaminfo 0 | ||
Line 164: | Line 463: | ||
|} | |} | ||
====1 Metadata Block SeekTable 2A==== | |||
{|class="wikitable" style="margin:auto" | {|class="wikitable" style="margin:auto" | ||
|+ SeekTable 2A The number of seek points is implied by the metadata header 'length' field, i.e. equal to length / 18. | |+ SeekTable 2A The number of seek points is implied by the metadata header 'length' field, i.e. equal to length / 18. | ||
Line 222: | Line 521: | ||
|} | |} | ||
====2 Metadata Block Vorbis 322==== | |||
{|class="wikitable" style="margin:auto" | {|class="wikitable" style="margin:auto" | ||
|+ Metadata Block Header 2 (Voorbis) 322 | |+ Metadata Block Header 2 (Voorbis) 322 | ||
Line 236: | Line 535: | ||
'''Block Data not Pertinent at this time | '''Block Data not Pertinent at this time | ||
====3 Metadata Block Padding 34E ==== | |||
{|class="wikitable" style="margin:auto" | {|class="wikitable" style="margin:auto" | ||
|+ Metadata Block Header 34E (Padding) | |+ Metadata Block Header 34E (Padding) | ||
Line 250: | Line 549: | ||
Block Data not pertinent | Block Data not pertinent | ||
====0 Stream Frame Header 2352==== | |||
[https://xiph.org/flac/format.html#architecture Flac Architecture] | [https://xiph.org/flac/format.html#architecture Flac Architecture] | ||
Line 330: | Line 629: | ||
|} | |} | ||
====Warm up Frames?==== | |||
'''FF 89 81 FF 8E 74 FF 92 E9 FF 91 DF FF 95 46 FF 8E A2 FF 86 61 FF 7B 71 E6 9D E5''' | '''FF 89 81 FF 8E 74 FF 92 E9 FF 91 DF FF 95 46 FF 8E A2 FF 86 61 FF 7B 71 E6 9D E5''' | ||
====0 Stream Frame Sub-Header 2352==== | |||
'''FF 7B 71 E6 9D E5''' | '''FF 7B 71 E6 9D E5''' | ||
{|class="wikitable" style="margin:auto" | {|class="wikitable" style="margin:auto" |
Latest revision as of 05:26, 21 December 2024
EditDate | 2024-08-06 |
---|
Related Threads: FLAC Agent
I am building a self-learning FLAC Agent and this will track the trials and tribulations of the build here.
I decided to loose my agent against flac files on the NVDIA GPU I have so closed on using C/C++ and CUDA.
Got linker to work. created a.out in Debug directory
Corrected the linker so it's now debuggable and gdb allows me to see assembler code so I'm finally talking directly to the machine again.
Brings me back.Web References https://developer.nvidia.com/cuda-toolkit, https://xiph.org/flac/, https://ftp.osuosl.org/pub/xiph/releases/flac/, https://www.rfc-editor.org/rfc/rfc9639.html#name-examples
I want to build an agent that will read flac music files and identify patterns in them. Once it has the patterns identified I want to see if can draw images in line with the evolving songs and long term improvise based on optimum patterns. Very long term may play sounds that draw a message the machine wants to tell us.
Log
-- Johnny (talk) 01:43, 8 December 2024 (UTC) Figured out how to dump memory. Export to /tmp --Johnny (talk) 17:41, 21 November 2024 (UTC) Printed off stream_decoder.c from FLAC xiph code and tracing through documenting reads from file. So far seems they do way more 8 bit and less reads than I'll need. See below for sequence of reads.
—Johnny (talk) 20:53, 14 November 2024 (UTC) 2 break throughs today. Found shorten a program from Tony Robinson at Cambridge that is the compression logic behind flac and it’s in C. File:Robinson tr156.ps
—Johnny (talk) 15:43, 14 November 2024 (UTC) Well I think I figured it out, going to check this afternoon. In the export session I was sending both mono tracks to the left and right stereo channels so naturally they were identical. Garbage in garbage out. Going to try splitting them. Top voice to right channel and bottom guitar to the left hand of God.
—Johnny (talk) 12:58, 14 November 2024 (UTC) Tan into core problem last night. Channel/Track 0===1. Need to determine where in file creation scheme this is happening.
--Johnny (talk) 11:02, 29 October 2024 (UTC) Reading the flac file and starting to breakdown metadata. Expect to lift and streamline decoding code. Just found out we can create our own metadata bloc and hope to store successive passes of agent there.
--Johnny (talk) 20:51, 6 August 2024 (UTC) Got linker to work.
--Johnny (talk) 19:14, 6 August 2024 (UTC) First had to get a working version of Eclipse that ran on the version of Ubuntu I had. This required updating Eclipse to include the development version so I am currently running Eclipse version=4.32.0 and Ubuntu Oracular Oriole (development branch) which was the only version I found that allowed my instruction debug due to comaptibility issues after Ubuntu updated to Wayland from X11.
Once I had a working development environment I install [ttps://ftp.osuosl.org/pub/xiph/releases/flac/ libFLAC] Unfortunately I've been unable to get a clean link in the development environment so I'm now trying Configure C project with cmake in eclipse manual method to assemble and successfully compile decoder.
Analyze flac stream
The math behind it all File:Robinson tr156.ps.
0000:0000 | 66 4C 61 43 00 00 00 22 10 00 10 00 00 01 59 00 | fLaC..."......Y. 0000:0010 | 1D 88 2E E0 03 70 04 BE 30 D0 4F CA 4A C4 B1 96 | ...à.p.¾0ÐOÊJı. 0000:0020 | E4 DE 2B A3 C8 66 BD 20 A4 31 03 00 02 F4 00 00 | äÞ+£Èf½ ¤1...ô.. 0000:0030 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 00 | ................ 0000:0040 | 00 00 00 00 00 1D 40 00 00 00 00 00 00 2C 42 C9 | ......@......,BÉ 0000:0050 | 10 00 00 00 00 00 00 3A 90 00 00 00 00 00 00 5A | .......:.......Z 0000:0060 | B2 A9 10 00 00 00 00 00 00 57 E0 00 00 00 00 00 | ²©.......Wà..... 0000:0070 | 00 89 59 38 10 00 00 00 00 00 00 75 30 00 00 00 | ..Y8.......u0... 0000:0080 | 00 00 00 B8 D2 F6 10 00 00 00 00 00 00 92 70 00 | ...¸Òö........p. 0000:0090 | 00 00 00 00 00 E7 CB 21 10 00 00 00 00 00 00 AF | .....çË!.......¯ 0000:00A0 | C0 00 00 00 00 00 01 17 62 29 10 00 00 00 00 00 | À.......b)...... 0000:00B0 | 00 CD 10 00 00 00 00 00 01 46 C7 46 10 00 00 00 | .Í.......FÇF.... 0000:00C0 | 00 00 00 EA 60 00 00 00 00 00 01 76 C5 7E 10 00 | ...ê`......vÅ~.. 0000:00D0 | 00 00 00 00 01 07 A0 00 00 00 00 00 01 A6 43 11 | ...... ......¦C. 0000:00E0 | 10 00 00 00 00 00 01 24 F0 00 00 00 00 00 01 D6 | .......$ð......Ö 0000:00F0 | 3E CE 10 00 00 00 00 00 01 42 40 00 00 00 00 00 | >Î.......B@..... 0000:0100 | 02 06 0E DF 10 00 00 00 00 00 01 5F 90 00 00 00 | ...ß......._.... 0000:0110 | 00 00 02 35 51 2A 10 00 00 00 00 00 01 7C D0 00 | ...5Q*.......|Ð. 0000:0120 | 00 00 00 00 02 64 C4 5D 10 00 00 00 00 00 01 9A | .....dÄ]........ 0000:0130 | 20 00 00 00 00 00 02 94 36 7C 10 00 00 00 00 00 | .......6|...... 0000:0140 | 01 B7 70 00 00 00 00 00 02 C3 E5 15 10 00 00 00 | .·p......Ãå..... 0000:0150 | 00 00 01 D4 C0 00 00 00 00 00 02 F3 EE 56 10 00 | ...ÔÀ......óîV.. 0000:0160 | 00 00 00 00 01 F2 00 00 00 00 00 00 03 23 B2 77 | .....ò.......#²w 0000:0170 | 10 00 00 00 00 00 02 0F 50 00 00 00 00 00 03 53 | ........P......S 0000:0180 | 78 02 10 00 00 00 00 00 02 2C A0 00 00 00 00 00 | x........, ..... 0000:0190 | 03 83 A9 4D 10 00 00 00 00 00 02 49 F0 00 00 00 | ..©M.......Ið... 0000:01A0 | 00 00 03 B2 CA 1E 10 00 00 00 00 00 02 67 30 00 | ...²Ê........g0. 0000:01B0 | 00 00 00 00 03 E2 21 59 10 00 00 00 00 00 02 84 | .....â!Y........ 0000:01C0 | 80 00 00 00 00 00 04 11 6A 20 10 00 00 00 00 00 | ........j ...... 0000:01D0 | 02 A1 D0 00 00 00 00 00 04 40 99 8E 10 00 00 00 | .¡Ð......@...... 0000:01E0 | 00 00 02 BF 20 00 00 00 00 00 04 70 26 72 10 00 | ...¿ ......p&r.. 0000:01F0 | 00 00 00 00 02 DC 60 00 00 00 00 00 04 9F AC 04 | .....Ü`.......¬. 0000:0200 | 10 00 00 00 00 00 02 F9 B0 00 00 00 00 00 04 CF | .......ù°......Ï 0000:0210 | 68 DE 10 00 00 00 00 00 03 17 00 00 00 00 00 00 | hÞ.............. 0000:0220 | 04 FF BB 39 10 00 00 00 00 00 03 34 50 00 00 00 | .ÿ»9.......4P... 0000:0230 | 00 00 05 30 0F 68 10 00 00 00 00 00 03 51 90 00 | ...0.h.......Q.. 0000:0240 | 00 00 00 00 05 5F BE 20 10 00 00 00 00 00 03 6E | ....._¾ .......n 0000:0250 | E0 00 00 00 00 00 05 8F 2A F4 10 00 00 00 00 00 | à.......*ô...... 0000:0260 | 03 8C 30 00 00 00 00 00 05 BE CE 03 10 00 00 00 | ..0......¾Î..... 0000:0270 | 00 00 03 A9 80 00 00 00 00 00 05 EE 42 EF 10 00 | ...©.......îBï.. 0000:0280 | 00 00 00 00 03 C6 C0 00 00 00 00 00 06 1E 70 80 | .....ÆÀ.......p. 0000:0290 | 10 00 00 00 00 00 03 E4 10 00 00 00 00 00 06 4E | .......ä.......N 0000:02A0 | 24 95 10 00 00 00 00 00 04 01 60 00 00 00 00 00 | $.........`..... 0000:02B0 | 06 7E 2E 0E 10 00 00 00 00 00 04 1E B0 00 00 00 | .~..........°... 0000:02C0 | 00 00 06 AE 5B CB 10 00 00 00 00 00 04 3B F0 00 | ...®[Ë.......;ð. 0000:02D0 | 00 00 00 00 06 DD 86 77 10 00 00 00 00 00 04 59 | .....Ý.w.......Y 0000:02E0 | 40 00 00 00 00 00 07 0D D9 09 10 00 00 00 00 00 | @.......Ù....... 0000:02F0 | 04 76 90 00 00 00 00 00 07 3D 1D 71 10 00 00 00 | .v.......=.q.... 0000:0300 | 00 00 04 93 E0 00 00 00 00 00 07 6C 91 E0 10 00 | ....à......l.à.. 0000:0310 | 00 00 00 00 04 B1 20 00 00 00 00 00 07 9A A0 3A | .....± ....... : 0000:0320 | 10 00 04 00 00 28 20 00 00 00 72 65 66 65 72 65 | .....( ...refere 0000:0330 | 6E 63 65 20 6C 69 62 46 4C 41 43 20 31 2E 34 2E | nce libFLAC 1.4. 0000:0340 | 33 20 32 30 32 33 30 36 32 33 00 00 00 00 81 00 | 3 20230623...... 0000:0350 | 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ............... 0000:0360 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................ ... 0000:2350 | 00 00 FF F8 C3 8C 00 F0 4E FF 89 81 FF 8E 74 FF | ..ÿøÃ..ðNÿ..ÿ.tÿ 0000:2360 | 92 E9 FF 95 46 FF 91 DF FF 8E A2 FF 86 61 FF 7B | .éÿ.Fÿ.ßÿ.¢ÿ.aÿ{ 0000:2370 | 71 E6 9D E5 5C 51 8B 82 7F A0 C1 74 22 E0 5C B9 | qæ.å\Q... Át"à\¹ 0000:2380 | 37 01 44 FD 4F D1 7F 19 7F F6 EE B2 25 0A 26 56 | 7.DýOÑ...öî²%.&V 0000:2390 | 9F 5B 33 62 79 5D 10 9D 13 35 7A 15 24 65 0E B4 | .[3by]...5z.$e.´ 0000:23A0 | 2A 4B E2 CB CE E3 CE 5F 29 4C 5D 64 19 3A 10 10 | *KâËÎãÎ_)L]d.:.. 0000:23B0 | 59 1D D1 05 A1 08 D6 D0 48 55 8A 5E 6A 7B A4 C2 | Y.Ñ.¡.ÖÐHU.^j{¤Â 0000:23C0 | 40 12 67 E4 60 3E 4B CB E3 AD 01 86 B8 6B 7B 62 | @.gä`>KËã...¸k{b
Trace of reads
Acronyms:
SDC = Stream_Decoder.c BitR - Bitreader.c
Metadata Reads
Line Number | Code Package | Module | Value | Opertion Description |
---|---|---|---|---|
1339 | SDC | Find Metadata | fLaC 0x_664C6143 |
Verifying 8 bits at a time that file starts with fLAc. |
1394 | SDC | Read Metadata | 0b_0 | Read 1 bit to determine last metadata block.. |
1398 | SDC | Read Metadata | 0b_0000000 | Read 7 bits. Metadata Type 0 Streaminfo |
1401 | SDC | Read Metadata | 0x_000022 | Read 24 bits indicating length 34. |
1578 | SDC | Read StreamInfo | 0x664C614300000022 | Read 34 bytes 0x_22 into Streaminfo structure
|
Line Number | Code Package | Module | Value | Operation Description | |
---|---|---|---|---|---|
1040 | SDC | Decode till End Meta | case FLAC__STREAM_DECODER_READ_METADATA | Read all Metadata Blocks | |
1394 | SDC | Read Metadata | 0b_0 | Read 1 bit to determine last metadata block. | |
1398 | SDC | Read Metadata | 0b_0000011 | Read 7 bits. Metadata Type 3 FLAC__METADATA_TYPE_SEEKTABLE | |
1401 | SDC | Read Metadata | 0x_0002F4 | Read 24 bits indicating length 756. | Will determine later if we need seektable information |
Line Number | Code Package | Module | Value | Operation Description |
---|---|---|---|---|
1040 | SDC | Decode till End Meta | case FLAC__STREAM_DECODER_READ_METADATA | Read all Metadata Blocks |
1394 | SDC | Read Metadata | 0b_0 | Read 1 bit to determine last metadata block. |
1398 | SDC | Read Metadata | 0b_0000100 | Read 7 bits. Metadata Type 4 FLAC__METADATA_TYPE_VORBIS_COMMENT |
1401 | SDC | Read Metadata | 0x_000028 | Read 24 bits indicating length 40. |
1478 | SDC | Read Metadata | 4 | Type 4 case FLAC__METADATA_TYPE_VORBIS_COMMENT |
Line Number | Code Package | Module | Value | Operation Description |
---|---|---|---|---|
1040 | SDC | Decode till End Meta | case FLAC__STREAM_DECODER_READ_METADATA | Read all Metadata Blocks |
1394 | SDC | Read Metadata | 0b_1 | Read 1 bit to determine last metadata block last=true. |
1398 | SDC | Read Metadata | 0b_0000001 | Read 7 bits. Metadata Type 1 FLAC__METADATA_TYPE_PADDING: |
1401 | SDC | Read Metadata | 0x002000 | Read 24 bits indicating length 8192. |
1453 | SDC | Read Metadata | skip_it=true | Type 1 FLAC__METADATA_TYPE_PADDING: skip to 2352 |
Data Reads
Sync Frame
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 |
1989 | SDC | frame_sync_ | 0xFFF8 | Read 7 bits. Metadata Type 0 Streaminfo |
418 | BRC | FLAC__bitreader_read_raw_uint32 | 0xFFF8 | Read 8 bits at a time validating each byte. |
2009 | SDC | frame_sync_ | 0b1111 1111 | FF start right at end of metadata padding. 2532 |
2020 | SDC | frame_sync_ | 0b1111 10 | Right shift F8 to 0x_7c |
Read Frame Header Metadata
Starting at 0x_2354 FF80 C38C
- 0b_1111 1111 10 Frame Header sync'
- 0b_0 mandatory 0 value Validation
- 0b_0 0 = fixed blocking strategy Fixed Blocks or Not
- 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'
- 0b1000 8 left/side stereo: channel 0 is the left channel, channel 1 is the side(difference) channel ( 2423 SDC read frame header) Channel Handling
- 0b110 = C 24 bits per sample bps
- 0b_0 Mandatory 0. Validation
Line Number | Code Package | Module | Value | Operation Description |
---|---|---|---|---|
3700 | SDC | file_tell_callback_ | 0x4000 | Absolute position 16,384 |
889 | SDC | FLAC__stream_decoder_get_decode_position | 0_x2354 | Start of Frame after frame header at 9044 in. |
1075 | SDC | stream decoder process | case FLAC__STREAM_DECODER_READ_FRAME: | Read Frame |
2041 | SDC | read_frame | 0x_0002F4 | Read frame to decode. |
350 | BRC | FLAC__bitreader_reset_read_crc16 | reset crc | FLAC__bitreader_reset_read_crc16 |
2277 | SDC | read_frame_header_ | 0x_FFF8C38C | Frame header breakdown
|
2358 | SDC | read_frame_header_ | 0b1100 | 4 bits frame.header.blocksize = 256 << (x-8) 4096 256 * 24 . |
2379 | SDC | read_frame_header_ | 0b0011 | 4 bits map 3 to 192000 frame.header.sample_rate = 192000 |
2423 | SDC | read_frame_header_ | 0b1000 | 4 Bits map to left side channel frame.header.channel_assignment = FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE; |
2364 | SDC | read_frame_header_ | 0b110 | 3 bits map to 24 bps frame.header.bits_per_sample = 24 |
Position Past Optional Frame Headers
Line Number | Code Package | Module | Value | Operation Description |
---|---|---|---|---|
2499 | SDC | read_frame_header_ | FIxed Block size | UTF8 -> BRC |
928 | BRC | FLAC__bitreader_read_utf8_uint32 | 0b_0000 | Read 4 bits to determine optional data. 934 Call 32 uint read for 8 bits |
934 | BRC | FLAC__bitreader_read_raw_uint32 | 0x_00 | Read full byte even though only 4 bits requested |
2509 | SDC | read_frame_header | 0x00 | Frame 0 |
2554 | SDC | read_frame_header | 0x_F0 | Read next 8 bits |
Warmup
One entry for each predictor order so in this case 8 entries from 2359 to 2371
- 0xffffffffffff8981
- 0xffffffffffff8e74
- 0xffffffffffff92e9
- 0xffffffffffff9546
- 0xffffffffffff91df
- 0xffffffffffff8ea2
- 0xffffffffffff8661
- 0xffffffffffff7b71
Line Number | Code Package | Module | Value | Operation Description |
---|---|---|---|---|
2554 | SDC | read_frame_header | 0x_F0 | Read next 8 bits -> uint 32 |
934 | BRC | FLAC__bitreader_read_raw_uint32 | 0x_F0 | Read next byte. |
2556 | SDC | read_frame_header | 0xF0 | crc8 = 0x_F) 240 |
2072 | SDC | read_frame | 0x_F0 | Read Left Side Set 2 Channels |
2600 | SDC | read_subframe | 0x_78 | read uint 8 bits then 24 bit sequences |
2666 | SDC | read_subframe | 0x_78 | Set predictor_order ((78>>1)&31)+1 = 8 |
2806 | SDC | read_subframe_lpc | 0x_F0 | 24 bits 1 for each predictor order |
2823 | SDC | read_subframe_lpc | 0xff8981 | predictor order = 8 so 8 64 bit warm-ups loaded starting at 2359 stopping 2371.
|
qlp_coeff
File Data
word = 0x71e69de55c518b82 start 2370 bits read in previous routine 0x71 Start at 2371 0xE6 9DE5 5C51 8B82 bits 0b1110 01101 001 1101 1110 0101 010 1110 0010 1000 1 0101 1100 0101 0001 1000 1011 1000 0010 1 D E 5 2 E 2 8
Line Number | Code Package | Module | Value | Operation Description |
---|---|---|---|---|
2834 | SDC | read_subframe_lpc | 0b_1110 | Read 4 bits qlp_coeff_precision = u32+1 = 15 |
2844 | SDC | read_subframe_lpc | 0b_01101 | read 5 bits quantization_level = i32 = 13 |
2850 | SDC | read_subframe_lpc | 0x_1DE5 | read 15 bits based on pre4cision determined above qlp_coeff[u] =
|
9 bits Next word consumed.
SDC to Rice Reader
File Data 2381.b_a x37.b0 0b000 0001.x44
word = 0x370144fd4fd17f19 bits read in previous routine b0011 0111 0 0x37.b0 starting bits 0b000 0001 the 0x44FD 4FD1 7F19
little endian memory dump of in storage buffer
19 7F D1 4F 19 7F D1 4F 19 7F D1 4F FD 44 01 37 56 26 0A 25 B2 EE F6 7F 9D 10 5D 79 62 33 5B 9F B4 0E 65 24 15 7A 35 13 370144FD4FD17F19 at 2380 in test.flac.
File
3701 44FD 4FD1 4FD1 7F19 7FF6 EEB2 250A 2656 does not line up with contiguous memory location. Only 64 bit word valid in memory (if reversed) loc 2380 in file
word
0x370144fd4fd17f19
Line Number | Code Package | Module | Value | Operation Description |
---|---|---|---|---|
2854 | SDC | read_subframe_lpc | 0b_00 | Read 2 bits 0 location 2381.b01 0b00. Entropy coding method 0 |
2863 | SDC | read_residual_partitioned_rice_ | 0b_0000 | GoTo FLAC__format_entropy_coding_method_partitioned_rice_contents_ensure_size |
2868 | SDC | read_subframe_lpc | 0b_0000 | 2381.b003 0b0000 read 4 bits subframe->entropy_coding_method.data.partitioned_rice.order = u32 = 0 |
Location 2382.b3 0 | ||||
2881 | SDC | read_subframe_lpc | 0 | GoTo read_residual_partitioned_rice_ |
2950 | SDC | read_residual_partitioned_rice_ | 0x_F0 | 24 bits 1 for each predictor order |
2956 | SDC | read_residual_partitioned_rice_ | NA | partition_samples = decoder->private_->frame.header.blocksize >> partition_order = 4096 |
590 | format.c | FLAC__format_entropy_coding_method_partitioned_rice_contents_ensure_size | 0 | GoTo read_residual_partitioned_rice_ |
2950 | SDC | read_residual_partitioned_rice_ | 0x_F0 | Reserve required memory |
2972 | SDC | read_residual_partitioned_rice_ | 0b1010 | Read 4 bits 2381.b0004 0b1010 partitioned_rice_contents->parameters[partition] = rice_parameter = 10 0b1010 0xA |
2975 | SDC | read_residual_partitioned_rice_ | NA | partition_samples - predictor_order 4096 - 8 = 4088 |
2976 | SDC | bitreader_read_rice_signed_block.c | NDA | Hard inline brah to bitreader_rice_signed Straight through thread |
Next Edit
File Data 2384.b_3 x.b0 0100 0b000 0001.x44
consumed_words = 0x70 112 consumed_bits = 0x13 19 word = 0x370144fd4fd17f19 bits read in previous routine b0011 0111 0 0x37.b0 starting bits 0b000 0001 the 0x44FD 4FD1 7F19
little endian memory dump of in storage buffer
19 7F D1 4F 19 7F D1 4F 19 7F D1 4F FD 44 01 37 56 26 0A 25 B2 EE F6 7F 9D 10 5D 79 62 33 5B 9F B4 0E 65 24 15 7A 35 13 370144FD4FD17F19 at 2380 in test.flac.
File
3701 44FD 4FD1 4FD1 7F19 7FF6 EEB2 250A 2656 does not line up with contiguous memory location. Only 64 bit word valid in memory (if reversed) loc 2380 in file
word
0x370144fd4fd17f19
| 1 || bitread_rice_signed || NA || Entry one pass through not loops. |- | 47 || bitread_rice_signed || no loops ||0x370144fd4fd17f19 || br->buffer[cwords] << br->consumed_bits(19) =
- 0x_3701 44FD 4FD1 4FD1 7F19
- 0b_11 0111 0000 0001 0100 0100 1111 1101 0100 1111 1101 0001 0111 1111 0001 1001
- 0b_10 0111 1110 1010 0111 1110 1000 1011 1111 1000 1100 1000 0000 0000 0000 0000
- 0x_27EA7E8BF8C80000 0x27ea7e8bf8c80000
- 2,876,250,451,668,893,696
|- |}
Flac overview
- Metadata Block Header
- <1> Last-metadata-block flag: '1' if this block is the last metadata block before the audio blocks, '0' otherwise.
- <7> BLOCK_TYPE
- 0 : STREAMINFO
- 1 : PADDING
- 2 : APPLICATION
- 3 : SEEKTABLE
- 4 : VORBIS_COMMENT
- 5 : CUESHEET
- 6 : PICTURE
- 7-126 : reserved
- 127 : invalid, to avoid confusion with a frame sync code
- <24> Length (in bytes) of metadata to follow (does not include the size of the METADATA_BLOCK_HEADER)
- Streaminfo Mandatory Metadata Block
- <16> The minimum block size (in samples) used in the stream.
- <16> The maximum block size (in samples) used in the stream. (Minimum blocksize == maximum blocksize) implies a fixed-blocksize stream.
- <24> The minimum frame size (in bytes) used in the stream. May be 0 to imply the value is not known.
- <24> The maximum frame size (in bytes) used in the stream. May be 0 to imply the value is not known.
- <20> Sample rate in Hz. Though 20 bits are available, the maximum sample rate is limited by the structure of frame headers to 655350Hz. Also, a value of 0 is invalid.
- <3> (number of channels)-1. FLAC supports from 1 to 8 channels
- <5> (bits per sample)-1. FLAC supports from 4 to 32 bits per sample.
- <36> Total samples in stream. 'Samples' means inter-channel sample, i.e. one second of 44.1Khz audio will have 44100 samples regardless of the number of channels. A value of zero here means the number of total samples is unknown.
- <128> MD5 signature of the unencoded audio data. This allows the decoder to determine if an error exists in the audio data even when the error does not result in an invalid bitstream.
- NOTES
- FLAC specifies a minimum block size of 16 and a maximum block size of 65535, meaning the bit patterns corresponding to the numbers 0-15 in the minimum blocksize and maximum blocksize fields are invalid.
- Flac format
Decompose test.flac
- 0-4 "fLaC" ID Bytes
0 Metadata Block Streaminfo (Mandatory) 0
Value | Hex | Description | Number Bits |
---|---|---|---|
fLAc | 664C 6143 | fLAc Streaminfo Identity tag | 4 bytes |
0 | "0(b)" | Not last Metadata Block | 1 Bit |
0 | "0000000(b)" | Streaminfo Block type | 7 Bits |
34 | "000022" | Metadata Block length hex 22 | 24 Bits |
Value | Hex | Description | Number Bits |
---|---|---|---|
4,096 | "1000" | The minimum block size (in samples) used in the stream. | 16 Bits |
4,096 | "1000" | The maximum block size (in samples) used in the stream. | 16 Bits |
345 | "000159" | The minimum frame size (in bytes) used in the stream. May be 0 to imply the value is not known. | 24 Bits |
7,560 | "001D88" | The minimum frame size (in bytes) used in the stream. May be 0 to imply the value is not known. | 24 Bits |
192,000 | "2EE00" | Sample rate in Hz. Though 20 bits are available, the maximum sample rate is limited by the structure of frame headers to 655350Hz. Also, a value of 0 is invalid. | 20 Bits |
2 | "001(b)" | (number of channels)-1. FLAC supports from 1 to 8 channels | 3 Bits |
24 | "10111(b)" | (bits per sample)-1. FLAC supports from 4 to 32 bits per sample. | 5 Bits |
79573200 | "004BE30D0" | Total samples in stream. 'Samples' means inter-channel sample, i.e. one second of 44.1Khz audio will have 44100 samples regardless of the number of channels. A value of zero here means the number of total samples is unknown. | 36 Bits |
NA | "4FCA4AC4B196E4DE2BA3C866BD20A431" | MD5 signature of the unencoded audio data. This allows the decoder to determine if an error exists in the audio data even when the error does not result in an invalid bitstream. | 128 Bits |
1 Metadata Block SeekTable 2A
Value | Hex | Description | Number Bits |
---|---|---|---|
0 | "0" | Not last Metadata Block | 1 Bit |
3 | "0000011(b)" | SeekTable Block type | 7 Bits |
756 | "0002F4" | Number of seek points 42 | 24 Bits |
Value | Hex | Description | Number Bits |
---|---|---|---|
0 Seek point | |||
0 | "0000000000000000" | 0 Seek Point Sample number of first sample in the target frame. | 64 Bits |
0 | "0000000000000000" | Offset (in bytes) from the first byte of the first frame header to the first byte of the target frame's header. | 64 Bits |
4,096 | "1000" | Number of samples in the target frame. | 16 Bits |
1 Seek Point | |||
1916928 | "00000000001D4000" | 1 Seek Point Sample number of first sample in the target frame. | 64 Bits |
2900681 | "00000000002C42C9" | Offset (in bytes) from the first byte of the first frame header to the first byte of the target frame's header. | 64 Bits |
4,096 | "1000" | Number of samples in the target frame. | 16 Bits |
2 Seek Point | |||
3837952 | "00000000003A9000" | 2 Seek Point Sample number of first sample in the target frame. | 64 Bits |
5943977 | "00000000005AB2A9" | Offset (in bytes) from the first byte of the first frame header to the first byte of the target frame's header. | 64 Bits |
0 | "1000" | Number of samples in the target frame. | 16 Bits |
3 Seek Point | |||
5758976 | "000000000057E000" | 3 Seek Point Sample number of first sample in the target frame. | 64 Bits |
9001272 | "0000000000895938" | Offset (in bytes) from the first byte of the first frame header to the first byte of the target frame's header. | 64 Bits |
4,096 | "1000" | Number of samples in the target frame. | 16 Bits |
...Last Seek Point | |||
78716928 | "0000000004B12000" | Last Seek Point Sample number of first sample in the target frame. | 64 Bits |
127574074 | "00000000079AA03A" | Offset (in bytes) from the first byte of the first frame header to the first byte of the target frame's header. | 64 Bits |
4,096 | "1000" | Number of samples in the target frame. | 16 Bits |
2 Metadata Block Vorbis 322
Value | Hex | Description | Number Bits |
---|---|---|---|
0 | "0(b)" | Not last Metadata Block | 1 Bit |
4 | "0000100(b)" | Voorbis Block type | 7 Bits |
40 | "000028" | Metadata Block length | 24 Bits |
Block Data not Pertinent at this time
3 Metadata Block Padding 34E
Value | Hex | Description | Number Bits |
---|---|---|---|
1 | "1" | Is last Metadata Block | 1 Bit |
1 | "0000001(b)" | Padding Block type | 7 Bits |
8192 | "002000" | Metadata Block length | 24 Bits |
Block Data not pertinent
0 Stream Frame Header 2352
FF F8 C3 8C 00 F0 4E FF 89 81 FF 8E 74 FF 92 E9 FF 95 46 FF 91 DF FF 8E A2 FF 86 61 FF 7B 71 E6 9D E5
Value | Hex | Description | Number Bits |
---|---|---|---|
FFF8 1111 1111 1111 10(b) | FFF8 | Sync code '11111111111110' | 14 bits |
0 | "0(b)" | Reserved: [1] Mandatory Value 0 | 1 Bit |
0 | "0(b)" | Blocking strategy:
|
1 Bit |
C 1100 | "1100(b)" | Block size in inter-channel samples:
|
4 Bits |
3 0011 | "0011(b)" | Sample rate:
|
4 Bits |
8 1000 | "1000(b)" | Channel assignment
|
4 Bits |
C 110 | "110(b)" | Sample size in bits:
|
3 Bits |
0 | "0(b)" | Reserved: [1] Mandatory Value 0 | 1 Bit |
F0 | "11110000(b)" | CRC-8 (polynomial = x^8 + x^2 + x^1 + x^0, initialized with 0) of everything before the crc, including the sync code | 8 Bit |
4EFF | "0100111011111111(b)" | CRC-16 (polynomial = x^16 + x^15 + x^2 + x^0, initialized with 0) of everything before the crc, back to and including the frame header sync code | 16 Bit |
Warm up Frames?
FF 89 81 FF 8E 74 FF 92 E9 FF 91 DF FF 95 46 FF 8E A2 FF 86 61 FF 7B 71 E6 9D E5
0 Stream Frame Sub-Header 2352
FF 7B 71 E6 9D E5
Value | Hex | Description | Number Bits |
---|---|---|---|
FFF8 1111 1111 1111 10(b) | FFF8 | Sync code '11111111111110' | 14 bits |
0 | "0(b)" | Zero bit padding, to prevent sync-fooling string of 1s | 1 Bit |
0 | "0(b)" | Subframe type:
000000 : SUBFRAME_CONSTANT 000001 : SUBFRAME_VERBATIM 00001x : reserved 0001xx : reserved 001xxx : if(xxx <= 4) SUBFRAME_FIXED, xxx=order ; else reserved 01xxxx : reserved 1xxxxx : SUBFRAME_LPC, xxxxx=order-1 |
6 Bit |
C 1100 | "1100(b)" | Block size in inter-channel samples:
|
4 Bits |
3 0011 | "0011(b)" | Sample rate:
|
4 Bits |
8 1000 | "1000(b)" | Channel assignment
|
4 Bits |
C 110 | "110(b)" | Sample size in bits:
|
3 Bits |
0 | "0(b)" | Reserved: [1] Mandatory Value 0 | 1 Bit |
00 | "00000000(b)" | CRC-8 (polynomial = x^8 + x^2 + x^1 + x^0, initialized with 0) of everything before the crc, including the sync code | 8 Bit |
F04E | "1111000001001110(b)" | CRC-16 (polynomial = x^16 + x^15 + x^2 + x^0, initialized with 0) of everything before the crc, back to and including the frame header sync code | 16 Bit |
Manual Configure FLAC in Eclipse
- cmake project in Eclipse manual confiure. Johnny (talk) 19:16, 6 August 2024 (UTC)
- Follow full directions and do CMake first to populate directories.
- When updating make command include -C ${ConfigName} om behavior page.
- Debugging now.