1 : <?php
2 :
3 : /**
4 : * \Midi\Emit\Track
5 : *
6 : * @package Midi
7 : * @subpackage Emit
8 : * @copyright © 2009 Tommy Montgomery <http://phpmidiparser.com/>
9 : * @since 1.0
10 : */
11 :
12 : namespace Midi\Emit;
13 :
14 : use \Midi\Util\Util;
15 : use \Midi\Delta;
16 : use \Midi\TrackHeader;
17 : use \Midi\Event;
18 :
19 : /**
20 : * Represents a MIDI track
21 : *
22 : * @package Midi
23 : * @subpackage Emit
24 : * @since 1.0
25 : */
26 1 : class Track {
27 :
28 : /**
29 : * @var array
30 : */
31 : private $chunks;
32 :
33 : /**
34 : * Constructor
35 : *
36 : * @since 1.0
37 : */
38 : public function __construct() {
39 6 : $this->chunks = array();
40 6 : }
41 :
42 : /**
43 : * Appends an event to the track data
44 : *
45 : * @since 1.0
46 : *
47 : * @param Event $event
48 : * @param Delta $delta The delta to wait before firing the event; if not given
49 : * a delta of zero is assumed
50 : * @return Track A reference to $this
51 : */
52 : public function appendEvent(Event $event, Delta $delta = null) {
53 2 : if ($delta === null) {
54 1 : $delta = new Delta(0);
55 1 : }
56 :
57 2 : array_push($this->chunks, $delta, $event);
58 2 : return $this;
59 : }
60 :
61 : /**
62 : * Gets the track data
63 : *
64 : * @since 1.0
65 : * @uses Chunk::getLength()
66 : * @uses Chunk::toBinary()
67 : * @uses createTrackHeader()
68 : * @uses TrackHeader::toBinary()
69 : *
70 : * @return binary
71 : */
72 : public function getData() {
73 1 : $data = '';
74 1 : $size = 0;
75 1 : foreach ($this->chunks as $chunk) {
76 1 : $size += $chunk->getLength();
77 1 : $data .= $chunk->toBinary();
78 1 : }
79 :
80 1 : return $this->createTrackHeader($size)->toBinary() . $data;
81 : }
82 :
83 : /**
84 : * Creates a track header chunk
85 : *
86 : * @since 1.0
87 : *
88 : * @param int $size The length of the track in bytes
89 : * @return TrackHeader
90 : */
91 : public function createTrackHeader($size) {
92 1 : return new TrackHeader($size);
93 : }
94 :
95 : }
96 :
|