digraph {
rankdir=LR;
node [shape=plaintext];
subgraph cluster__wav {
label="Wav";
graph[style=dotted];
wav__seq [label=<
pos | size | type | id |
0 | ... | Riff::Chunk | chunk |
>];
wav__inst__subchunks [label=<
pos | size | type | id |
0 | ... | ChunkType | subchunks |
repeat to end of stream |
>];
wav__inst__parent_chunk_data [label=<
pos | size | type | id |
0 | ... | Riff::ParentChunkData | parent_chunk_data |
>];
wav__inst__is_form_type_wave [label=<
id | value |
is_form_type_wave | ((is_riff_chunk) && (form_type == :fourcc_wave)) |
>];
wav__inst__is_riff_chunk [label=<
id | value |
is_riff_chunk | chunk_id == :fourcc_riff |
>];
wav__inst__chunk_id [label=<
id | value |
chunk_id | Kaitai::Struct::Stream::resolve_enum(FOURCC, chunk.id) |
>];
wav__inst__form_type [label=<
id | value |
form_type | Kaitai::Struct::Stream::resolve_enum(FOURCC, parent_chunk_data.form_type) |
>];
subgraph cluster__sample_type {
label="Wav::SampleType";
graph[style=dotted];
sample_type__seq [label=<
pos | size | type | id |
0 | 2 | u2le | sample |
>];
}
subgraph cluster__format_chunk_type {
label="Wav::FormatChunkType";
graph[style=dotted];
format_chunk_type__seq [label=<
pos | size | type | id |
0 | 2 | u2le→WFormatTagType | w_format_tag |
2 | 2 | u2le | n_channels |
4 | 4 | u4le | n_samples_per_sec |
8 | 4 | u4le | n_avg_bytes_per_sec |
12 | 2 | u2le | n_block_align |
14 | 2 | u2le | w_bits_per_sample |
16 | 2 | u2le | cb_size |
18 | 2 | u2le | w_valid_bits_per_sample |
20 | 20 | ChannelMaskAndSubformatType | channel_mask_and_subformat |
>];
format_chunk_type__inst__is_extensible [label=<
id | value |
is_extensible | w_format_tag == :w_format_tag_type_extensible |
>];
format_chunk_type__inst__is_basic_pcm [label=<
id | value |
is_basic_pcm | w_format_tag == :w_format_tag_type_pcm |
>];
format_chunk_type__inst__is_basic_float [label=<
id | value |
is_basic_float | w_format_tag == :w_format_tag_type_ieee_float |
>];
format_chunk_type__inst__is_cb_size_meaningful [label=<
id | value |
is_cb_size_meaningful | ((!(is_basic_pcm)) && (cb_size != 0)) |
>];
}
subgraph cluster__pmx_chunk_type {
label="Wav::PmxChunkType";
graph[style=dotted];
pmx_chunk_type__seq [label=<
pos | size | type | id |
0 | ⇲ | str(UTF-8) | data |
>];
}
subgraph cluster__fact_chunk_type {
label="Wav::FactChunkType";
graph[style=dotted];
fact_chunk_type__seq [label=<
pos | size | type | id |
0 | 4 | u4le | num_samples_per_channel |
>];
}
subgraph cluster__guid_type {
label="Wav::GuidType";
graph[style=dotted];
guid_type__seq [label=<
pos | size | type | id |
0 | 4 | u4le | data1 |
4 | 2 | u2le | data2 |
6 | 2 | u2le | data3 |
8 | 4 | u4be | data4 |
12 | 4 | u4be | data4a |
>];
}
subgraph cluster__ixml_chunk_type {
label="Wav::IxmlChunkType";
graph[style=dotted];
ixml_chunk_type__seq [label=<
pos | size | type | id |
0 | ⇲ | str(UTF-8) | data |
>];
}
subgraph cluster__info_chunk_type {
label="Wav::InfoChunkType";
graph[style=dotted];
info_chunk_type__seq [label=<
pos | size | type | id |
0 | ... | Riff::Chunk | chunk |
>];
info_chunk_type__inst__chunk_data [label=<
pos | size | type | id |
0 | ... | str(ASCII) | chunk_data |
>];
}
subgraph cluster__cue_point_type {
label="Wav::CuePointType";
graph[style=dotted];
cue_point_type__seq [label=<
pos | size | type | id |
0 | 4 | u4le | dw_name |
4 | 4 | u4le | dw_position |
8 | 4 | u4le | fcc_chunk |
12 | 4 | u4le | dw_chunk_start |
16 | 4 | u4le | dw_block_start |
20 | 4 | u4le | dw_sample_offset |
>];
}
subgraph cluster__data_chunk_type {
label="Wav::DataChunkType";
graph[style=dotted];
data_chunk_type__seq [label=<>];
}
subgraph cluster__samples_type {
label="Wav::SamplesType";
graph[style=dotted];
samples_type__seq [label=<
pos | size | type | id |
0 | 4 | u4le | samples |
>];
}
subgraph cluster__channel_mask_and_subformat_type {
label="Wav::ChannelMaskAndSubformatType";
graph[style=dotted];
channel_mask_and_subformat_type__seq [label=<
pos | size | type | id |
0 | 4 | ChannelMaskType | dw_channel_mask |
4 | 16 | GuidType | subformat |
>];
}
subgraph cluster__cue_chunk_type {
label="Wav::CueChunkType";
graph[style=dotted];
cue_chunk_type__seq [label=<
pos | size | type | id |
0 | 4 | u4le | dw_cue_points |
4 | 24 | CuePointType | cue_points |
repeat dw_cue_points times |
>];
}
subgraph cluster__list_chunk_type {
label="Wav::ListChunkType";
graph[style=dotted];
list_chunk_type__seq [label=<
pos | size | type | id |
0 | ... | Riff::ParentChunkData | parent_chunk_data |
>];
list_chunk_type__inst__form_type [label=<
id | value |
form_type | Kaitai::Struct::Stream::resolve_enum(Wav::FOURCC, parent_chunk_data.form_type) |
>];
list_chunk_type__inst__subchunks [label=<
pos | size | type | id |
0 | ... | switch (form_type) | subchunks |
repeat to end of stream |
>];
list_chunk_type__inst__subchunks_subchunks_switch [label=<
case | type |
:fourcc_info | InfoChunkType |
>];
}
subgraph cluster__channel_mask_type {
label="Wav::ChannelMaskType";
graph[style=dotted];
channel_mask_type__seq [label=<
pos | size | type | id |
0 | 1b | BitsType1(BigBitEndian) | front_right_of_center |
0:1 | 1b | BitsType1(BigBitEndian) | front_left_of_center |
0:2 | 1b | BitsType1(BigBitEndian) | back_right |
0:3 | 1b | BitsType1(BigBitEndian) | back_left |
0:4 | 1b | BitsType1(BigBitEndian) | low_frequency |
0:5 | 1b | BitsType1(BigBitEndian) | front_center |
0:6 | 1b | BitsType1(BigBitEndian) | front_right |
0:7 | 1b | BitsType1(BigBitEndian) | front_left |
1 | 1b | BitsType1(BigBitEndian) | top_center |
1:1 | 1b | BitsType1(BigBitEndian) | side_right |
1:2 | 1b | BitsType1(BigBitEndian) | side_left |
1:3 | 1b | BitsType1(BigBitEndian) | back_center |
1:4 | 1b | BitsType1(BigBitEndian) | top_back_left |
1:5 | 1b | BitsType1(BigBitEndian) | top_front_right |
1:6 | 1b | BitsType1(BigBitEndian) | top_front_center |
1:7 | 1b | BitsType1(BigBitEndian) | top_front_left |
2 | 6b | b6 | unused1 |
2:6 | 1b | BitsType1(BigBitEndian) | top_back_right |
2:7 | 1b | BitsType1(BigBitEndian) | top_back_center |
3 | 1 | b8 | unused2 |
>];
}
subgraph cluster__afsp_chunk_type {
label="Wav::AfspChunkType";
graph[style=dotted];
afsp_chunk_type__seq [label=<
pos | size | type | id |
0 | 4 | | magic |
4 | ... | str(ASCII) | info_records |
repeat to end of stream |
>];
}
subgraph cluster__axml_chunk_type {
label="Wav::AxmlChunkType";
graph[style=dotted];
axml_chunk_type__seq [label=<
pos | size | type | id |
0 | ⇲ | str(UTF-8) | data |
>];
}
subgraph cluster__chunk_type {
label="Wav::ChunkType";
graph[style=dotted];
chunk_type__seq [label=<
pos | size | type | id |
0 | ... | Riff::Chunk | chunk |
>];
chunk_type__inst__chunk_id [label=<
id | value |
chunk_id | Kaitai::Struct::Stream::resolve_enum(Wav::FOURCC, chunk.id) |
>];
chunk_type__inst__chunk_data [label=<
pos | size | type | id |
0 | ... | switch (chunk_id) | chunk_data |
>];
chunk_type__inst__chunk_data_chunk_data_switch [label=<
case | type |
:fourcc_fact | FactChunkType |
:fourcc_list | ListChunkType |
:fourcc_fmt | FormatChunkType |
:fourcc_afsp | AfspChunkType |
:fourcc_bext | BextChunkType |
:fourcc_cue | CueChunkType |
:fourcc_ixml | IxmlChunkType |
:fourcc_pmx | PmxChunkType |
:fourcc_axml | AxmlChunkType |
:fourcc_data | DataChunkType |
>];
}
subgraph cluster__bext_chunk_type {
label="Wav::BextChunkType";
graph[style=dotted];
bext_chunk_type__seq [label=<
pos | size | type | id |
0 | 256 | str(ASCII) | description |
256 | 32 | str(ASCII) | originator |
288 | 32 | str(ASCII) | originator_reference |
320 | 10 | str(ASCII) | origination_date |
330 | 8 | str(ASCII) | origination_time |
338 | 4 | u4le | time_reference_low |
342 | 4 | u4le | time_reference_high |
346 | 2 | u2le | version |
348 | 64 | | umid |
412 | 2 | u2le | loudness_value |
414 | 2 | u2le | loudness_range |
416 | 2 | u2le | max_true_peak_level |
418 | 2 | u2le | max_momentary_loudness |
420 | 2 | u2le | max_short_term_loudness |
>];
}
}
wav__seq:chunk_type -> chunk__seq [style=bold];
wav__inst__subchunks:subchunks_type -> chunk_type__seq [style=bold];
wav__inst__parent_chunk_data:parent_chunk_data_type -> parent_chunk_data__seq [style=bold];
wav__inst__is_riff_chunk:is_riff_chunk_type -> wav__inst__is_form_type_wave [color="#404040"];
wav__inst__form_type:form_type_type -> wav__inst__is_form_type_wave [color="#404040"];
wav__inst__chunk_id:chunk_id_type -> wav__inst__is_riff_chunk [color="#404040"];
chunk__seq:id_type -> wav__inst__chunk_id [color="#404040"];
parent_chunk_data__seq:form_type_type -> wav__inst__form_type [color="#404040"];
format_chunk_type__seq:channel_mask_and_subformat_type -> channel_mask_and_subformat_type__seq [style=bold];
format_chunk_type__seq:w_format_tag_type -> format_chunk_type__inst__is_extensible [color="#404040"];
format_chunk_type__seq:w_format_tag_type -> format_chunk_type__inst__is_basic_pcm [color="#404040"];
format_chunk_type__seq:w_format_tag_type -> format_chunk_type__inst__is_basic_float [color="#404040"];
format_chunk_type__inst__is_basic_pcm:is_basic_pcm_type -> format_chunk_type__inst__is_cb_size_meaningful [color="#404040"];
format_chunk_type__seq:cb_size_type -> format_chunk_type__inst__is_cb_size_meaningful [color="#404040"];
info_chunk_type__seq:chunk_type -> chunk__seq [style=bold];
channel_mask_and_subformat_type__seq:dw_channel_mask_type -> channel_mask_type__seq [style=bold];
channel_mask_and_subformat_type__seq:subformat_type -> guid_type__seq [style=bold];
cue_chunk_type__seq:cue_points_type -> cue_point_type__seq [style=bold];
cue_chunk_type__seq:dw_cue_points_type -> cue_chunk_type__seq:cue_points__repeat [color="#404040"];
list_chunk_type__seq:parent_chunk_data_type -> parent_chunk_data__seq [style=bold];
parent_chunk_data__seq:form_type_type -> list_chunk_type__inst__form_type [color="#404040"];
list_chunk_type__inst__subchunks:subchunks_type -> list_chunk_type__inst__subchunks_subchunks_switch [style=bold];
list_chunk_type__inst__subchunks_subchunks_switch:case0 -> info_chunk_type__seq [style=bold];
list_chunk_type__inst__form_type:form_type_type -> list_chunk_type__inst__subchunks:subchunks_type [color="#404040"];
chunk_type__seq:chunk_type -> chunk__seq [style=bold];
chunk__seq:id_type -> chunk_type__inst__chunk_id [color="#404040"];
chunk_type__inst__chunk_data:chunk_data_type -> chunk_type__inst__chunk_data_chunk_data_switch [style=bold];
chunk_type__inst__chunk_data_chunk_data_switch:case0 -> fact_chunk_type__seq [style=bold];
chunk_type__inst__chunk_data_chunk_data_switch:case1 -> list_chunk_type__seq [style=bold];
chunk_type__inst__chunk_data_chunk_data_switch:case2 -> format_chunk_type__seq [style=bold];
chunk_type__inst__chunk_data_chunk_data_switch:case3 -> afsp_chunk_type__seq [style=bold];
chunk_type__inst__chunk_data_chunk_data_switch:case4 -> bext_chunk_type__seq [style=bold];
chunk_type__inst__chunk_data_chunk_data_switch:case5 -> cue_chunk_type__seq [style=bold];
chunk_type__inst__chunk_data_chunk_data_switch:case6 -> ixml_chunk_type__seq [style=bold];
chunk_type__inst__chunk_data_chunk_data_switch:case7 -> pmx_chunk_type__seq [style=bold];
chunk_type__inst__chunk_data_chunk_data_switch:case8 -> axml_chunk_type__seq [style=bold];
chunk_type__inst__chunk_data_chunk_data_switch:case9 -> data_chunk_type__seq [style=bold];
chunk_type__inst__chunk_id:chunk_id_type -> chunk_type__inst__chunk_data:chunk_data_type [color="#404040"];
}