EMMA Coverage Report (generated Tue Mar 14 21:50:42 EST 2006)
[all classes][org.farng.mp3.id3]

COVERAGE SUMMARY FOR SOURCE FILE [FrameBodyETCO.java]

nameclass, %method, %block, %line, %
FrameBodyETCO.java0%   (0/1)0%   (0/9)0%   (0/106)0%   (0/28)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class FrameBodyETCO0%   (0/1)0%   (0/9)0%   (0/106)0%   (0/28)
FrameBodyETCO (): void 0%   (0/1)0%   (0/3)0%   (0/2)
FrameBodyETCO (FrameBodyETCO): void 0%   (0/1)0%   (0/4)0%   (0/2)
FrameBodyETCO (RandomAccessFile): void 0%   (0/1)0%   (0/6)0%   (0/3)
FrameBodyETCO (byte, byte, int): void 0%   (0/1)0%   (0/15)0%   (0/4)
addGroup (byte, int): void 0%   (0/1)0%   (0/28)0%   (0/7)
getIdentifier (): String 0%   (0/1)0%   (0/10)0%   (0/1)
getOwner (): String 0%   (0/1)0%   (0/5)0%   (0/1)
getOwner (String): void 0%   (0/1)0%   (0/5)0%   (0/2)
setupObjectList (): void 0%   (0/1)0%   (0/30)0%   (0/6)

1package org.farng.mp3.id3;
2 
3import org.farng.mp3.InvalidTagException;
4import org.farng.mp3.object.AbstractMP3Object;
5import org.farng.mp3.object.ObjectGroupRepeated;
6import org.farng.mp3.object.ObjectNumberFixedLength;
7import org.farng.mp3.object.ObjectNumberHashMap;
8 
9import java.io.IOException;
10import java.io.RandomAccessFile;
11 
12/**
13 * <h3>4.5.&nbsp;&nbsp; Event timing codes</h3>
14 * <p/>
15 * <p>&nbsp;&nbsp; This frame allows synchronisation with key events in the audio. The<br> &nbsp;&nbsp; header is:</p>
16 * <p/>
17 * <p>&nbsp;&nbsp;&nbsp;&nbsp; &lt;Header for 'Event timing codes', ID: &quot;ETCO&quot;&gt;<br>
18 * <p/>
19 * &nbsp;&nbsp;&nbsp;&nbsp; Time stamp format&nbsp;&nbsp;&nbsp; $xx</p>
20 * <p/>
21 * <p>&nbsp;&nbsp; Where time stamp format is:</p>
22 * <p/>
23 * <p>&nbsp;&nbsp;&nbsp;&nbsp; $01&nbsp; Absolute time, 32 bit sized, using MPEG [MPEG] frames as unit<br>
24 * &nbsp;&nbsp;&nbsp;&nbsp; $02&nbsp; Absolute time, 32 bit sized, using milliseconds as unit</p>
25 * <p/>
26 * <p>&nbsp;&nbsp; Absolute time means that every stamp contains the time from the<br> &nbsp;&nbsp; beginning of the
27 * file.</p>
28 * <p/>
29 * <p>&nbsp;&nbsp; Followed by a list of key events in the following format:</p>
30 * <p/>
31 * <p>&nbsp;&nbsp;&nbsp;&nbsp; Type of event&nbsp;&nbsp; $xx<br>
32 * <p/>
33 * &nbsp;&nbsp;&nbsp;&nbsp; Time stamp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $xx (xx ...)</p>
34 * <p/>
35 * <p>&nbsp;&nbsp; The 'Time stamp' is set to zero if directly at the beginning of the<br> &nbsp;&nbsp; sound or after
36 * the previous event. All events MUST be sorted in<br> &nbsp;&nbsp; chronological order. The type of event is as
37 * follows:</p>
38 * <p/>
39 * <p>&nbsp;&nbsp;&nbsp;&nbsp; $00&nbsp; padding (has no meaning)<br> &nbsp;&nbsp;&nbsp;&nbsp; $01&nbsp; end of initial
40 * silence<br> &nbsp;&nbsp;&nbsp;&nbsp; $02&nbsp; intro start<br>
41 * <p/>
42 * &nbsp;&nbsp;&nbsp;&nbsp; $03&nbsp; main part start<br> &nbsp;&nbsp;&nbsp;&nbsp; $04&nbsp; outro start<br>
43 * &nbsp;&nbsp;&nbsp;&nbsp; $05&nbsp; outro end<br>
44 * <p/>
45 * &nbsp;&nbsp;&nbsp;&nbsp; $06&nbsp; verse start<br> &nbsp;&nbsp;&nbsp;&nbsp; $07&nbsp; refrain start<br>
46 * &nbsp;&nbsp;&nbsp;&nbsp; $08&nbsp; interlude start<br>
47 * <p/>
48 * &nbsp;&nbsp;&nbsp;&nbsp; $09&nbsp; theme start<br> &nbsp;&nbsp;&nbsp;&nbsp; $0A&nbsp; variation start<br>
49 * &nbsp;&nbsp;&nbsp;&nbsp; $0B&nbsp; key change<br>
50 * <p/>
51 * &nbsp;&nbsp;&nbsp;&nbsp; $0C&nbsp; time change<br> &nbsp;&nbsp;&nbsp;&nbsp; $0D&nbsp; momentary unwanted noise (Snap,
52 * Crackle &amp; Pop)<br> &nbsp;&nbsp;&nbsp;&nbsp; $0E&nbsp; sustained noise<br>
53 * <p/>
54 * &nbsp;&nbsp;&nbsp;&nbsp; $0F&nbsp; sustained noise end<br> &nbsp;&nbsp;&nbsp;&nbsp; $10&nbsp; intro end<br>
55 * &nbsp;&nbsp;&nbsp;&nbsp; $11&nbsp; main part end<br>
56 * <p/>
57 * &nbsp;&nbsp;&nbsp;&nbsp; $12&nbsp; verse end<br> &nbsp;&nbsp;&nbsp;&nbsp; $13&nbsp; refrain end<br>
58 * &nbsp;&nbsp;&nbsp;&nbsp; $14&nbsp; theme end<br>
59 * <p/>
60 * &nbsp;&nbsp;&nbsp;&nbsp; $15&nbsp; profanity<br> &nbsp;&nbsp;&nbsp;&nbsp; $16&nbsp; profanity end</p>
61 * <p/>
62 * <p>&nbsp;&nbsp;&nbsp;&nbsp; $17-$DF&nbsp; reserved for future use</p>
63 * <p/>
64 * <p>&nbsp;&nbsp;&nbsp;&nbsp; $E0-$EF&nbsp; not predefined synch 0-F</p>
65 * <p/>
66 * <p>&nbsp;&nbsp;&nbsp;&nbsp; $F0-$FC&nbsp; reserved for future use</p>
67 * <p/>
68 * <p>&nbsp;&nbsp;&nbsp;&nbsp; $FD&nbsp; audio end (start of silence)<br>
69 * <p/>
70 * &nbsp;&nbsp;&nbsp;&nbsp; $FE&nbsp; audio file ends<br> &nbsp;&nbsp;&nbsp;&nbsp; $FF&nbsp; one more byte of events
71 * follows (all the following bytes with<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the value $FF have
72 * the same function)</p>
73 * <p/>
74 * <p>&nbsp;&nbsp; Terminating the start events such as &quot;intro start&quot; is OPTIONAL. The<br> &nbsp;&nbsp; 'Not
75 * predefined synch's ($E0-EF) are for user events. You might want<br> &nbsp;&nbsp; to synchronise your music to
76 * something, like setting off an explosion<br> &nbsp;&nbsp; on-stage, activating a screensaver etc.</p>
77 * <p/>
78 * <p>&nbsp;&nbsp; There may only be one &quot;ETCO&quot; frame in each tag.<br> </p>
79 *
80 * @author Eric Farng
81 * @version $Revision: 1.4 $
82 */
83public class FrameBodyETCO extends AbstractID3v2FrameBody {
84 
85    /**
86     * Creates a new FrameBodyETCO object.
87     */
88    public FrameBodyETCO() {
89        super();
90    }
91 
92    /**
93     * Creates a new FrameBodyETCO object.
94     */
95    public FrameBodyETCO(final FrameBodyETCO body) {
96        super(body);
97    }
98 
99    /**
100     * Creates a new FrameBodyETCO object.
101     */
102    public FrameBodyETCO(final byte timeStampFormat, final byte event, final int timeStamp) {
103        setObject("Time Stamp Format", new Long(timeStampFormat));
104        this.addGroup(event, timeStamp);
105    }
106 
107    /**
108     * Creates a new FrameBodyETCO object.
109     */
110    public FrameBodyETCO(final RandomAccessFile file) throws IOException, InvalidTagException {
111        this.read(file);
112    }
113 
114    public String getIdentifier() {
115        return "ETCO" + ((char) 0) + getOwner();
116    }
117 
118    public String getOwner() {
119        return (String) getObject("Owner");
120    }
121 
122    public void getOwner(final String description) {
123        setObject("Owner", description);
124    }
125 
126    public void addGroup(final byte event, final int timeStamp) {
127        final ObjectGroupRepeated group = (ObjectGroupRepeated) this.getObject("Data");
128        final AbstractMP3Object ev = new ObjectNumberHashMap("Type Of Event", 1);
129        final AbstractMP3Object ts = new ObjectNumberFixedLength("Time Stamp", 4);
130        group.addObject(ev);
131        group.addObject(ts);
132        setObject("Data", group);
133    }
134 
135    protected void setupObjectList() {
136        appendToObjectList(new ObjectNumberHashMap("Time Stamp Format", 1));
137        final ObjectGroupRepeated group = new ObjectGroupRepeated("Data");
138        group.addProperty(new ObjectNumberHashMap("Type Of Event", 1));
139        group.addProperty(new ObjectNumberFixedLength("Time Stamp", 4));
140        appendToObjectList(group);
141    }
142}

[all classes][org.farng.mp3.id3]
EMMA 2.0.5312 (C) Vladimir Roubtsov