├── .github └── workflows │ └── ci.yml ├── .gitignore ├── LICENSE ├── README.md ├── src ├── ape.zig ├── audiometa.zig ├── buffered_stream_source.zig ├── case_fold.zig ├── collate.zig ├── constrained_stream.zig ├── fields.zig ├── flac.zig ├── id3v1.zig ├── id3v2.zig ├── id3v2_data.zig ├── latin1.zig ├── main.zig ├── metadata.zig ├── mp4.zig ├── ogg.zig ├── synchsafe.zig ├── unsynch.zig ├── util.zig ├── vorbis.zig └── windows1251.zig ├── test ├── audiometa.dict ├── data │ ├── ape.mp3 │ ├── ape_and_id3.mp3 │ ├── flac.flac │ ├── flac_multiple_dates.flac │ ├── id3v1.mp3 │ ├── id3v1_empty.mp3 │ ├── id3v1_latin1_chars.mp3 │ ├── id3v2.2.mp3 │ ├── id3v2.3.mp3 │ ├── id3v2.3_malformed_txxx.mp3 │ ├── id3v2.3_text_frame_with_zero_size.mp3 │ ├── id3v2.3_unsynch_tag.mp3 │ ├── id3v2.3_unsynch_tag_edge_case.mp3 │ ├── id3v2.3_user_defined_fields.mp3 │ ├── id3v2.3_utf16_be.mp3 │ ├── id3v2.3_utf16_mismatched_boms.mp3 │ ├── id3v2.3_with_id3v2.2_frame_ids.mp3 │ ├── id3v2.3_zero_size_frame.mp3 │ ├── id3v2.4_appended.mp3 │ ├── id3v2.4_extended_header_crc.mp3 │ ├── id3v2.4_footer.mp3 │ ├── id3v2.4_malformed_txxx.mp3 │ ├── id3v2.4_non_synchsafe_frame_size.mp3 │ ├── id3v2.4_non_synchsafe_frame_size_bytes.mp3 │ ├── id3v2.4_non_synchsafe_frame_size_eof.mp3 │ ├── id3v2.4_non_synchsafe_frame_size_padding.mp3 │ ├── id3v2.4_synchsafe_frame_size_eof.mp3 │ ├── id3v2.4_synchsafe_frame_size_padding.mp3 │ ├── id3v2.4_text_frame_with_multiple_terminated_values.mp3 │ ├── id3v2.4_unsynch_text_frames.mp3 │ ├── id3v2.4_utf16_single_u8_delimeter.mp3 │ ├── m4a_with_----.m4a │ ├── mp4_with_multiple_moovs.mp4 │ ├── test.mp4 │ ├── vorbis.ogg │ └── vorbis_comment_spanning_pages.ogg ├── fuzz-collation.zig ├── fuzz-oom.zig ├── fuzz.zig ├── parse_tests.zig ├── test_against_ffprobe.zig └── test_against_taglib.zig └── tools ├── extract_tag.zig ├── gen_case_fold.zig └── synchsafe.zig /.github/workflows/ci.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/.github/workflows/ci.yml -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/.gitignore -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/LICENSE -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/README.md -------------------------------------------------------------------------------- /src/ape.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/src/ape.zig -------------------------------------------------------------------------------- /src/audiometa.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/src/audiometa.zig -------------------------------------------------------------------------------- /src/buffered_stream_source.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/src/buffered_stream_source.zig -------------------------------------------------------------------------------- /src/case_fold.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/src/case_fold.zig -------------------------------------------------------------------------------- /src/collate.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/src/collate.zig -------------------------------------------------------------------------------- /src/constrained_stream.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/src/constrained_stream.zig -------------------------------------------------------------------------------- /src/fields.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/src/fields.zig -------------------------------------------------------------------------------- /src/flac.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/src/flac.zig -------------------------------------------------------------------------------- /src/id3v1.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/src/id3v1.zig -------------------------------------------------------------------------------- /src/id3v2.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/src/id3v2.zig -------------------------------------------------------------------------------- /src/id3v2_data.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/src/id3v2_data.zig -------------------------------------------------------------------------------- /src/latin1.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/src/latin1.zig -------------------------------------------------------------------------------- /src/main.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/src/main.zig -------------------------------------------------------------------------------- /src/metadata.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/src/metadata.zig -------------------------------------------------------------------------------- /src/mp4.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/src/mp4.zig -------------------------------------------------------------------------------- /src/ogg.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/src/ogg.zig -------------------------------------------------------------------------------- /src/synchsafe.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/src/synchsafe.zig -------------------------------------------------------------------------------- /src/unsynch.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/src/unsynch.zig -------------------------------------------------------------------------------- /src/util.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/src/util.zig -------------------------------------------------------------------------------- /src/vorbis.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/src/vorbis.zig -------------------------------------------------------------------------------- /src/windows1251.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/src/windows1251.zig -------------------------------------------------------------------------------- /test/audiometa.dict: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/audiometa.dict -------------------------------------------------------------------------------- /test/data/ape.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/ape.mp3 -------------------------------------------------------------------------------- /test/data/ape_and_id3.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/ape_and_id3.mp3 -------------------------------------------------------------------------------- /test/data/flac.flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/flac.flac -------------------------------------------------------------------------------- /test/data/flac_multiple_dates.flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/flac_multiple_dates.flac -------------------------------------------------------------------------------- /test/data/id3v1.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/id3v1.mp3 -------------------------------------------------------------------------------- /test/data/id3v1_empty.mp3: -------------------------------------------------------------------------------- 1 | qtgH -------------------------------------------------------------------------------- /test/data/id3v1_latin1_chars.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/id3v1_latin1_chars.mp3 -------------------------------------------------------------------------------- /test/data/id3v2.2.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/id3v2.2.mp3 -------------------------------------------------------------------------------- /test/data/id3v2.3.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/id3v2.3.mp3 -------------------------------------------------------------------------------- /test/data/id3v2.3_malformed_txxx.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/id3v2.3_malformed_txxx.mp3 -------------------------------------------------------------------------------- /test/data/id3v2.3_text_frame_with_zero_size.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/id3v2.3_text_frame_with_zero_size.mp3 -------------------------------------------------------------------------------- /test/data/id3v2.3_unsynch_tag.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/id3v2.3_unsynch_tag.mp3 -------------------------------------------------------------------------------- /test/data/id3v2.3_unsynch_tag_edge_case.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/id3v2.3_unsynch_tag_edge_case.mp3 -------------------------------------------------------------------------------- /test/data/id3v2.3_user_defined_fields.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/id3v2.3_user_defined_fields.mp3 -------------------------------------------------------------------------------- /test/data/id3v2.3_utf16_be.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/id3v2.3_utf16_be.mp3 -------------------------------------------------------------------------------- /test/data/id3v2.3_utf16_mismatched_boms.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/id3v2.3_utf16_mismatched_boms.mp3 -------------------------------------------------------------------------------- /test/data/id3v2.3_with_id3v2.2_frame_ids.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/id3v2.3_with_id3v2.2_frame_ids.mp3 -------------------------------------------------------------------------------- /test/data/id3v2.3_zero_size_frame.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/id3v2.3_zero_size_frame.mp3 -------------------------------------------------------------------------------- /test/data/id3v2.4_appended.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/id3v2.4_appended.mp3 -------------------------------------------------------------------------------- /test/data/id3v2.4_extended_header_crc.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/id3v2.4_extended_header_crc.mp3 -------------------------------------------------------------------------------- /test/data/id3v2.4_footer.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/id3v2.4_footer.mp3 -------------------------------------------------------------------------------- /test/data/id3v2.4_malformed_txxx.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/id3v2.4_malformed_txxx.mp3 -------------------------------------------------------------------------------- /test/data/id3v2.4_non_synchsafe_frame_size.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/id3v2.4_non_synchsafe_frame_size.mp3 -------------------------------------------------------------------------------- /test/data/id3v2.4_non_synchsafe_frame_size_bytes.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/id3v2.4_non_synchsafe_frame_size_bytes.mp3 -------------------------------------------------------------------------------- /test/data/id3v2.4_non_synchsafe_frame_size_eof.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/id3v2.4_non_synchsafe_frame_size_eof.mp3 -------------------------------------------------------------------------------- /test/data/id3v2.4_non_synchsafe_frame_size_padding.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/id3v2.4_non_synchsafe_frame_size_padding.mp3 -------------------------------------------------------------------------------- /test/data/id3v2.4_synchsafe_frame_size_eof.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/id3v2.4_synchsafe_frame_size_eof.mp3 -------------------------------------------------------------------------------- /test/data/id3v2.4_synchsafe_frame_size_padding.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/id3v2.4_synchsafe_frame_size_padding.mp3 -------------------------------------------------------------------------------- /test/data/id3v2.4_text_frame_with_multiple_terminated_values.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/id3v2.4_text_frame_with_multiple_terminated_values.mp3 -------------------------------------------------------------------------------- /test/data/id3v2.4_unsynch_text_frames.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/id3v2.4_unsynch_text_frames.mp3 -------------------------------------------------------------------------------- /test/data/id3v2.4_utf16_single_u8_delimeter.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/id3v2.4_utf16_single_u8_delimeter.mp3 -------------------------------------------------------------------------------- /test/data/m4a_with_----.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/m4a_with_----.m4a -------------------------------------------------------------------------------- /test/data/mp4_with_multiple_moovs.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/mp4_with_multiple_moovs.mp4 -------------------------------------------------------------------------------- /test/data/test.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/test.mp4 -------------------------------------------------------------------------------- /test/data/vorbis.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/vorbis.ogg -------------------------------------------------------------------------------- /test/data/vorbis_comment_spanning_pages.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/data/vorbis_comment_spanning_pages.ogg -------------------------------------------------------------------------------- /test/fuzz-collation.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/fuzz-collation.zig -------------------------------------------------------------------------------- /test/fuzz-oom.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/fuzz-oom.zig -------------------------------------------------------------------------------- /test/fuzz.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/fuzz.zig -------------------------------------------------------------------------------- /test/parse_tests.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/parse_tests.zig -------------------------------------------------------------------------------- /test/test_against_ffprobe.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/test_against_ffprobe.zig -------------------------------------------------------------------------------- /test/test_against_taglib.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/test/test_against_taglib.zig -------------------------------------------------------------------------------- /tools/extract_tag.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/tools/extract_tag.zig -------------------------------------------------------------------------------- /tools/gen_case_fold.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/tools/gen_case_fold.zig -------------------------------------------------------------------------------- /tools/synchsafe.zig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squeek502/audiometa/HEAD/tools/synchsafe.zig --------------------------------------------------------------------------------