summaryrefslogblamecommitdiff
path: root/blog/post/2016-04-09.html
blob: 9cda65bc7508cab92176ee287b7cf145fff2650b (plain) (tree)
1
2
3
4
5
6
7
                           




                                                                   
                                                         

























                                                                        
                    

                         
         




                                                                       























                                                                                                                                                                                 
 











                                                                                                                                                                                                                                                                                  
 









































































                                                                                                                                                                                                                                                
<!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</title>
<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>