source: trunk/src/testing/bin/fileServer/misc/mmpython/audio/m4ainfo.py @ 4

Revision 4, 2.3 KB checked in by ajaworski, 13 years ago (diff)

Added modified SAGE sources

Line 
1#!/usr/bin/env python
2# Based on a sample implementation posted to daap-dev mailing list by
3# Bob Ippolito <bob@redivi.com>
4#
5# Modifed by Aubin Paul <aubin@outlyer.org> for mmpython/Freevo
6#
7
8import struct
9from mmpython import mediainfo
10import mmpython
11
12#_print = mediainfo._debug
13
14class Mpeg4(mediainfo.MusicInfo):
15    def __init__(self, file):
16        self.containerTags = ('moov', 'udta', 'trak', 'mdia', 'minf', 'dinf', 'stbl',
17                              'meta', 'ilst', '----')
18        self.skipTags = {'meta':4 }
19
20        mediainfo.MusicInfo.__init__(self)
21        self.valid = 0
22        returnval = 0
23        while returnval == 0:
24            try:
25                self.readNextTag(file)
26            except ValueError:
27                returnval = 1
28        if mediainfo.DEBUG and self.valid:
29            print self.title
30            print self.artist
31            print self.album
32            print self.year
33            print self.encoder
34
35    def readNextTag(self, file):
36        length, name = self.readInt(file), self.read(4, file)
37        length -= 8
38        if length < 0 or length > 1000:
39            raise ValueError, "Oops?"
40        #print "%r" % str(name) # (%r bytes, starting at %r)" % \
41        #  (name, length, file.tell() + 8)
42        if name in self.containerTags:
43            self.read(self.skipTags.get(name, 0), file)
44            data = '[container tag]'
45        else:
46            data = self.read(length, file)
47        if name == '\xa9nam':
48            self.title = data[8:]
49            self.valid = 1
50        if name == '\xa9ART':
51            self.artist = data[8:]
52            self.valid = 1
53        if name == '\xa9alb':
54            self.album = data[8:]
55            self.valid = 1
56        if name == 'trkn':
57            # Fix this
58            self.trackno = data
59            self.valid = 1
60        if name == '\xa9day':
61            self.year = data[8:]
62            self.valid = 1
63        if name == '\xa9too':
64            self.encoder = data[8:]
65            self.valid = 1
66        return 0
67       
68    def read(self, b, file):
69        data = file.read(b)
70        if len(data) < b:
71            raise ValueError, "EOF"
72        return data
73
74    def readInt(self, file):
75        return struct.unpack('>I', self.read(4, file))[0]
76       
77mmpython.registertype( 'application/m4a', ('m4a',), mediainfo.TYPE_MUSIC, Mpeg4 )
78
Note: See TracBrowser for help on using the repository browser.