diff options
| author | Gary Scavone <gary@music.mcgill.ca> | 2013-10-11 15:04:06 +0200 |
|---|---|---|
| committer | Stephen Sinclair <sinclair@music.mcgill.ca> | 2013-10-11 15:04:06 +0200 |
| commit | 1f910fbc187d2f50004bb0f7e619bd39f043b5b5 (patch) | |
| tree | 8254a3a788c9cbf1e34a22f1320e865f525cfb36 /doxygen/html/playsmf_8cpp-source.html | |
| parent | eeca35408122b9fc020139a20255f3c1ad8254cd (diff) | |
Release 1.0.0 tarball1.0.0
Diffstat (limited to 'doxygen/html/playsmf_8cpp-source.html')
| -rwxr-xr-x | doxygen/html/playsmf_8cpp-source.html | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/doxygen/html/playsmf_8cpp-source.html b/doxygen/html/playsmf_8cpp-source.html new file mode 100755 index 0000000..5db53c4 --- /dev/null +++ b/doxygen/html/playsmf_8cpp-source.html @@ -0,0 +1,117 @@ +<HTML>
+<HEAD>
+<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
+<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<CENTER>
+<img src="princeton.gif"> <img src="ccrma.gif"><P>
+<a class="qindex" href="index.html">Home</a> <a class="qindex" href="information.html">Information</a> <a class="qindex" href="classes.html">Classes</a> <a class="qindex" href="download.html">Download</a> <a class="qindex" href="usage.html">Usage</a> <a class="qindex" href="maillist.html">Mail List</a> <a class="qindex" href="system.html">Requirements</a> <a class="qindex" href="links.html">Links</a> <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
+<HR>
+<!-- Generated by Doxygen 1.3-rc3 -->
+<h1>playsmf.cpp</h1><div class="fragment"><pre>00001 <span class="comment">// playsmf.cpp</span>
+00002 <span class="comment">//</span>
+00003 <span class="comment">// Simple program to test the MidiFileIn class by reading and playing</span>
+00004 <span class="comment">// a single track from a given Standard MIDI file.</span>
+00005 <span class="comment">//</span>
+00006 <span class="comment">// by Gary Scavone, 2003.</span>
+00007 <span class="comment">//</span>
+00008 <span class="comment">// compile: g++ -Wall -o playsmf playsmf.cpp RtMidi.o MidiFileIn.cpp Stk.cpp -framework CoreMIDI -framework CoreFoundation -framework CoreAudio</span>
+00009
+00010 <span class="preprocessor">#include "MidiFileIn.h"</span>
+00011 <span class="preprocessor">#include "RtMidi.h"</span>
+00012 <span class="preprocessor">#include <signal.h></span>
+00013 <span class="preprocessor">#include <unistd.h></span>
+00014
+00015 <span class="keywordtype">bool</span> done = <span class="keyword">false</span>;
+00016 <span class="keyword">static</span> <span class="keywordtype">void</span> finish(<span class="keywordtype">int</span> ignore){ done = <span class="keyword">true</span>; }
+00017
+00018 <span class="keywordtype">void</span> usage(<span class="keywordtype">void</span>) {
+00019 <span class="comment">// Error function in case of incorrect command-line</span>
+00020 <span class="comment">// argument specifications.</span>
+00021 std::cout << <span class="stringliteral">"\nusage: testmidi file track\n"</span>;
+00022 std::cout << <span class="stringliteral">" where file = a standard MIDI file,\n"</span>;
+00023 std::cout << <span class="stringliteral">" and track = the track to play (0 = 1st track).\n\n"</span>;
+00024 exit(0);
+00025 }
+00026
+00027 <span class="keywordtype">int</span> main( <span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[] )
+00028 {
+00029 <span class="keywordflow">if</span> ( argc != 3 ) usage();
+00030
+00031 <a class="code" href="classRtMidiOut.html">RtMidiOut</a> midi;
+00032
+00033 <span class="keywordflow">if</span> ( midi.<a class="code" href="classRtMidiOut.html#a5">getPortCount</a>() < 1 ) {
+00034 std::cout << <span class="stringliteral">"\nThere are no MIDI output destinations available!\n\n"</span>;
+00035 exit(0);
+00036 }
+00037
+00038 <span class="keywordflow">try</span> {
+00039 midi.<a class="code" href="classRtMidiOut.html#a3">openPort</a>();
+00040 }
+00041 <span class="keywordflow">catch</span> ( <a class="code" href="classRtError.html">RtError</a> & ) {
+00042 <span class="comment">// You might want to do something more useful here.</span>
+00043 std::cout << <span class="stringliteral">"\nAborting program!\n"</span>;
+00044 exit(0);
+00045 }
+00046
+00047 <span class="comment">// Install an interrupt handler function. Type "ctrl-c" to quit the</span>
+00048 <span class="comment">// program.</span>
+00049 (void) signal(SIGINT, finish);
+00050
+00051 <span class="keywordflow">try</span> {
+00052 <a class="code" href="classMidiFileIn.html">MidiFileIn</a> midiFile( argv[1] );
+00053
+00054 <span class="comment">// Print a little information about the file.</span>
+00055 std::cout << <span class="stringliteral">"\nThe MIDI file ("</span> << argv[1] << <span class="stringliteral">") information:\n"</span>;
+00056 std::cout << <span class="stringliteral">" - format = "</span> << midiFile.<a class="code" href="classMidiFileIn.html#a2">getFileFormat</a>() << <span class="stringliteral">"\n"</span>;
+00057 std::cout << <span class="stringliteral">" - tracks = "</span> << midiFile.<a class="code" href="classMidiFileIn.html#a3">getNumberOfTracks</a>() << <span class="stringliteral">"\n"</span>;
+00058 std::cout << <span class="stringliteral">" - seconds / ticks = "</span> << midiFile.<a class="code" href="classMidiFileIn.html#a6">getTickSeconds</a>() << <span class="stringliteral">"\n"</span>;
+00059
+00060 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> track = (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>) atoi( argv[2] );
+00061 <span class="keywordflow">if</span> ( midiFile.<a class="code" href="classMidiFileIn.html#a3">getNumberOfTracks</a>() <= track ) {
+00062 std::cout << <span class="stringliteral">"\nInvalid track number ... playing track 0.\n"</span>;
+00063 track = 0;
+00064 }
+00065
+00066 std::cout << <span class="stringliteral">"\nPress <enter> to start reading/playing.\n"</span>;
+00067 <span class="keywordtype">char</span> input;
+00068 std::cin.get(input);
+00069
+00070 std::vector<unsigned char> event;
+00071 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ticks = midiFile.<a class="code" href="classMidiFileIn.html#a8">getNextMidiEvent</a>( &event, track );
+00072 <span class="keywordflow">while</span> ( !done && event.size() ) {
+00073
+00074 <span class="comment">// Pause for the MIDI event delta time.</span>
+00075 <a class="code" href="classStk.html#d7">Stk::sleep</a>( (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>) (ticks * midiFile.<a class="code" href="classMidiFileIn.html#a6">getTickSeconds</a>() * 1000 ) );
+00076
+00077 midi.<a class="code" href="classRtMidiOut.html#a7">sendMessage</a>( &event );
+00078
+00079 <span class="comment">// Get a new event.</span>
+00080 ticks = midiFile.<a class="code" href="classMidiFileIn.html#a8">getNextMidiEvent</a>( &event, track );
+00081 }
+00082
+00083 <span class="comment">// Send a "reset" to the synthesizer.</span>
+00084 event.clear();
+00085 event.push_back( 0xff );
+00086 midi.<a class="code" href="classRtMidiOut.html#a7">sendMessage</a>( &event );
+00087 }
+00088 <span class="keywordflow">catch</span> ( <a class="code" href="classStkError.html">StkError</a> & ) {
+00089 <span class="comment">// You might want to do something more useful here.</span>
+00090 std::cout << <span class="stringliteral">"\nAborting program!\n"</span>;
+00091 midi.<a class="code" href="classRtMidiOut.html#a4">closePort</a>();
+00092 exit(0);
+00093 }
+00094
+00095 std::cout << <span class="stringliteral">"Goodbye!\n"</span>;
+00096 <span class="keywordflow">return</span> 0;
+00097 }
+</pre></div><HR>
+
+<table>
+ <tr><td><A HREF="http://www-ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
+ <tr><td>©1995-2002 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
+</table>
+
+</BODY>
+</HTML>
|
