summaryrefslogtreecommitdiff
path: root/python/examples/kaitai/id3v1_1.py
diff options
context:
space:
mode:
authorXusheng <xusheng@vector35.com>2021-07-01 12:34:30 +0800
committerXusheng Li <xushengli@protonmail.com>2021-07-05 10:11:47 +0800
commit13ff200ba134b8704f37eca99c42b70dab0d17dc (patch)
tree876b3db3c53f704b31152aeaede1f2edc9d27b24 /python/examples/kaitai/id3v1_1.py
parent4039a800349dcd587833d3e27d9137e4649818f4 (diff)
Remove snippet and kaitai plugin. Note their individual links.
Diffstat (limited to 'python/examples/kaitai/id3v1_1.py')
-rw-r--r--python/examples/kaitai/id3v1_1.py217
1 files changed, 0 insertions, 217 deletions
diff --git a/python/examples/kaitai/id3v1_1.py b/python/examples/kaitai/id3v1_1.py
deleted file mode 100644
index 41b2e880..00000000
--- a/python/examples/kaitai/id3v1_1.py
+++ /dev/null
@@ -1,217 +0,0 @@
-# This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
-
-from pkg_resources import parse_version
-from .kaitaistruct import __version__ as ks_version, KaitaiStruct, KaitaiStream, BytesIO
-import collections
-from enum import Enum
-
-
-if parse_version(ks_version) < parse_version('0.7'):
- raise Exception("Incompatible Kaitai Struct Python API: 0.7 or later is required, but you have %s" % (ks_version))
-
-class Id3v11(KaitaiStruct):
- """ID3v1.1 tag is a method to store simple metadata in .mp3 files. The
- tag is appended to the end of file and spans exactly 128 bytes.
-
- This type is supposed to be used on full .mp3 files, seeking to
- proper position automatically. If you're interesting in parsing only
- the tag itself, please use `id3v1_1::id3_v1_1_tag` subtype.
-
- .. seealso::
- Source - http://id3.org/ID3v1
- """
- SEQ_FIELDS = []
- def __init__(self, _io, _parent=None, _root=None):
- self._io = _io
- self._parent = _parent
- self._root = _root if _root else self
- self._debug = collections.defaultdict(dict)
-
- def _read(self):
- pass
-
- class Id3V11Tag(KaitaiStruct):
- """ID3v1.1 tag itself, a fixed size 128 byte structure. Contains
- several metadata fields as fixed-size strings.
-
- Note that string encoding is not specified by standard, so real
- encoding used would vary a lot from one implementation to
- another. Most Windows-based applications tend to use "ANSI"
- (i.e. locale-dependent encoding, usually one byte per
- character). Some embedded applications allow selection of
- charset.
- """
-
- class GenreEnum(Enum):
- blues = 0
- classic_rock = 1
- country = 2
- dance = 3
- disco = 4
- funk = 5
- grunge = 6
- hip_hop = 7
- jazz = 8
- metal = 9
- new_age = 10
- oldies = 11
- other = 12
- pop = 13
- rnb = 14
- rap = 15
- reggae = 16
- rock = 17
- techno = 18
- industrial = 19
- alternative = 20
- ska = 21
- death_metal = 22
- pranks = 23
- soundtrack = 24
- euro_techno = 25
- ambient = 26
- trip_hop = 27
- vocal = 28
- jazz_funk = 29
- fusion = 30
- trance = 31
- classical = 32
- instrumental = 33
- acid = 34
- house = 35
- game = 36
- sound_clip = 37
- gospel = 38
- noise = 39
- alternrock = 40
- bass = 41
- soul = 42
- punk = 43
- space = 44
- meditative = 45
- instrumental_pop = 46
- instrumental_rock = 47
- ethnic = 48
- gothic = 49
- darkwave = 50
- techno_industrial = 51
- electronic = 52
- pop_folk = 53
- eurodance = 54
- dream = 55
- southern_rock = 56
- comedy = 57
- cult = 58
- gangsta = 59
- top_40 = 60
- christian_rap = 61
- pop_funk = 62
- jungle = 63
- native_american = 64
- cabaret = 65
- new_wave = 66
- psychadelic = 67
- rave = 68
- showtunes = 69
- trailer = 70
- lo_fi = 71
- tribal = 72
- acid_punk = 73
- acid_jazz = 74
- polka = 75
- retro = 76
- musical = 77
- rock_n_roll = 78
- hard_rock = 79
- folk = 80
- folk_rock = 81
- national_folk = 82
- swing = 83
- fast_fusion = 84
- bebob = 85
- latin = 86
- revival = 87
- celtic = 88
- bluegrass = 89
- avantgarde = 90
- gothic_rock = 91
- progressive_rock = 92
- psychedelic_rock = 93
- symphonic_rock = 94
- slow_rock = 95
- big_band = 96
- chorus = 97
- easy_listening = 98
- acoustic = 99
- humour = 100
- speech = 101
- chanson = 102
- opera = 103
- chamber_music = 104
- sonata = 105
- symphony = 106
- booty_bass = 107
- primus = 108
- porn_groove = 109
- satire = 110
- slow_jam = 111
- club = 112
- tango = 113
- samba = 114
- folklore = 115
- ballad = 116
- power_ballad = 117
- rhythmic_soul = 118
- freestyle = 119
- duet = 120
- punk_rock = 121
- drum_solo = 122
- a_capella = 123
- euro_house = 124
- dance_hall = 125
- SEQ_FIELDS = ["magic", "title", "artist", "album", "year", "comment", "genre"]
- def __init__(self, _io, _parent=None, _root=None):
- self._io = _io
- self._parent = _parent
- self._root = _root if _root else self
- self._debug = collections.defaultdict(dict)
-
- def _read(self):
- self._debug['magic']['start'] = self._io.pos()
- self.magic = self._io.ensure_fixed_contents(b"\x54\x41\x47")
- self._debug['magic']['end'] = self._io.pos()
- self._debug['title']['start'] = self._io.pos()
- self.title = self._io.read_bytes(30)
- self._debug['title']['end'] = self._io.pos()
- self._debug['artist']['start'] = self._io.pos()
- self.artist = self._io.read_bytes(30)
- self._debug['artist']['end'] = self._io.pos()
- self._debug['album']['start'] = self._io.pos()
- self.album = self._io.read_bytes(30)
- self._debug['album']['end'] = self._io.pos()
- self._debug['year']['start'] = self._io.pos()
- self.year = (self._io.read_bytes(4)).decode(u"ASCII")
- self._debug['year']['end'] = self._io.pos()
- self._debug['comment']['start'] = self._io.pos()
- self.comment = self._io.read_bytes(30)
- self._debug['comment']['end'] = self._io.pos()
- self._debug['genre']['start'] = self._io.pos()
- self.genre = KaitaiStream.resolve_enum(self._root.Id3V11Tag.GenreEnum, self._io.read_u1())
- self._debug['genre']['end'] = self._io.pos()
-
-
- @property
- def id3v1_tag(self):
- if hasattr(self, '_m_id3v1_tag'):
- return self._m_id3v1_tag if hasattr(self, '_m_id3v1_tag') else None
-
- _pos = self._io.pos()
- self._io.seek((self._io.size() - 128))
- self._debug['_m_id3v1_tag']['start'] = self._io.pos()
- self._m_id3v1_tag = self._root.Id3V11Tag(self._io, self, self._root)
- self._m_id3v1_tag._read()
- self._debug['_m_id3v1_tag']['end'] = self._io.pos()
- self._io.seek(_pos)
- return self._m_id3v1_tag if hasattr(self, '_m_id3v1_tag') else None
-
-