summaryrefslogtreecommitdiff
path: root/blog/post/2016-04-09.html
blob: 6d3c468b458f4dcf6aa1409313e63338ca2947fb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
<!DOCTYPE html><html><head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="theme-color" content="#000000">
<title>Chrisoft::Blog(r#"The MIDI File Format Specification and MIDI Implementation in QMidiPlayer")</title>
<meta name="description" content="«The MIDI File Format Specification and MIDI Implementation in QMidiPlayer» de spelunca ursae">
<meta name="author" content="Chris Xiong">
<script type="text/javascript" src="/panel.js"></script>
<script type="text/javascript" src="/themer.js"></script>
<script type="text/javascript" src="/blog/footnoter.js"></script>
<script type="text/javascript" src="/blog/aes-js.js"></script>
<script type="text/javascript" src="/blog/scrypt.js"></script>
<script type="text/javascript" src="/blog/sha256.js"></script>
<script type="text/javascript" src="/blog/decryptor.js"></script>
<link rel="stylesheet" type="text/css" href="/common.css">
<link rel="stylesheet" type="text/css" href="/panel.css">
<link rel="stylesheet" type="text/css" href="/theme0a.css" id="theme0a">
<link rel="stylesheet" type="text/css" href="/theme0b.css" id="theme0b">
<link rel="stylesheet" type="text/css" href="/theme1a.css" id="theme1a">
<link rel="stylesheet" type="text/css" href="/theme1b.css" id="theme1b">
<link rel="stylesheet" type="text/css" href="/theme2a.css" id="theme2a">
<link rel="stylesheet" type="text/css" href="/theme2b.css" id="theme2b">
<link rel="stylesheet" type="text/css" href="/theme3a.css" id="theme3a">
<link rel="stylesheet" type="text/css" href="/theme3b.css" id="theme3b">
<link rel="stylesheet" type="text/css" href="/blog/blogext.css">
<script>
function ol()
{
	window.onresize=function()
	{
		if(window.innerWidth<768)
		setupevents();
		else unsetevents();
	}
	window.onresize();
	loadTheme();
	_decryptonload();
}
</script>
<style>
article h2,article h3{border-bottom:1px solid #c0c0c0;overflow:hidden;}
</style><style scoped="">
ul{list-style-type:none;}
</style></head>
<body onload="ol()" style="overflow-x:hidden;">
	<div id="panel" class="TText">
		<ul id="panellist">
			<li><a href="/"><h1>Chrisoft</h1></a></li>
			<li><a href="/blog"><h2>Blog</h2></a></li>
			<li><a href="#"><h3 id="title">The MIDI File Format Specification and MIDI Implementation in QMidiPlayer</h3></a></li>
			<li><span>Tags</span>
			<ul id="tagslist">
			<li><a href="/blog/list/devel/">devel</a></li><li><a href="/blog/list/qmidiplayer/">qmidiplayer</a></li><li><a href="/blog/list/midi/">midi</a></li></ul>
			</li>
			<li id="tocouter">
				<span>Table of Contents</span>
				<ul id="tocroot">
				<li><a class="toctarg" href="#tocanch0">Abstract</a></li><li><a class="toctarg" href="#tocanch1"></a></li></ul>
			</li>
			<li style="margin-left:-0.5em"><a id="prevp" href="2016-03-26.html">Prev post</a></li>
			<li style="margin-left:-0.5em"><a id="nextp" href="2016-05-12.html">Next post</a></li>
		</ul>
	</div>
	<div id="content">
		<h2 id="titleh" class="TText" style="font-wight:normal;">The MIDI File Format Specification and MIDI Implementation in QMidiPlayer</h2>
		<div id="datetags" class="TText" style="margin-bottom:1em;">2016-04-09<br>#devel #qmidiplayer #midi</div>
		<hr><div id="article" class="TText">
<article>


<h2 id="tocanch0" class="tvis">Abstract</h2>
<p>
This article is intended to be a reliable MIDI file format and implementation reference.
It takes QMidiPlayer as an example to illustrate how a basic software-based MIDI implementation works.
For the Chinese version, please visit &lt;Chinese version link here&gt;.
</p>

<div style="padding:7px;border:1px solid #aaa;display:table;">
<div style="text-align:center;">
<b>Contents</b> [<a href="#" onclick="var e=document.getElementById(&quot;toc&quot;);if(e.style.display==&quot;block&quot;){e.style.display=&quot;none&quot;;this.innerHTML=&quot;show&quot;;}else {e.style.display=&quot;block&quot;;this.innerHTML=&quot;hide&quot;;}">hide</a>]
</div>

<ul style="font-size:0.9em;display:block;" id="toc">
	<li>1 Data Representations
		<ul>
			<li>1.1 Binary values</li>
			<li>1.2 Variable length values</li>
		</ul>
	</li>
	<li>2 Chunks
		<ul>
			<li>2.1 Header chunk</li>
			<li>2.2 Track chunks</li>
		</ul>
	</li>
	<li>3 Events
		<ul>
			<li>3.1 MIDI events
				<ul>
					<li>3.1.1 Running status</li>
				</ul>
			</li>
			<li>3.2 Meta events</li>
			<li>3.3 SysEx events</li>
		</ul>
	</li>
	<li>4 Common MIDI Implementations
		<ul>
			<li>4.1 Pre-GM</li>
			<li>4.2 GM</li>
			<li>4.3 GS</li>
			<li>4.4 XG</li>
			<li>4.5 GM2</li>
		</ul>
	</li>
	<li>5 Implementation details in QMidiPlayer</li>
	<li>6 Appendix
		<ul>
			<li>6.1 List of known SysEx's</li>
			<li>6.2 Instrument list</li>
			<li>6.3 MIDI Effects</li>
		</ul>
	</li>
	<li>7 References</li>
</ul>
</div>

<h2 id="tocanch1" class="tvis"></h2>
<article>
</article></article></div><br><hr>
		<div class="TText" id="notediv" style="font-size:80%;"></div>
		<div id="insanch" style="height:3em;"></div>
		<div id="footer" style="">
		<div id="pagesw" class="TText" style="width:100%;height:0.5em;"></div>
			<div style="text-align:center;" class="TText">
				Proudly powered by SSBS <reduced style="font-size:70%;">(the static stupid blogging system)</reduced> 2.5
				<br>
				Content licensed under CC BY-SA 4.0. <span id="purgep" style="display:none;font-size:70%;">This page has passphrase(s) stored. Click <a href="javascript:_purgep()">here</a> to purge.</span>
			</div>
		</div>
		<div id="cmdbuf" class="TText" style="transition:500ms;padding:1em;font-size:2em;color:white;position:absolute;background-color:rgba(0,0,0,0.6);left:50%;top:50%;transform:translate(-50%,-50%);pointer-events:none;opacity:0;">
		</div>
	</div>
	<div id="decryptui" style="display:none;opacity:0;color:white;z-index:1000;position:fixed;left:0;top:0;width:100%;height:100%;background-color:rgba(0,0,0,0.4);transition:opacity 0.5s;">
		<div id="decryptdlg" class="TText" style="padding:10px 20px;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);background-color:rgba(0,0,0,0.6);">
			<div id="keyhint" style="margin-bottom:8px;"></div>
			<div style="margin-bottom:8px;">Key: <input id="keyinp" type="text" style="color:#fff;"></div>
			<div style="height:2.25em;">
			<button id="btndecrypt" onclick="decryptor(decid,document.getElementById('keyinp').value);" style="position:absolute;left:20px;">Decrypt</button>
			<button onclick="hidedecryptui();" style="position:absolute;right:20px;">Cancel</button>
			</div>
		
	</div>


</div></body></html>