MIPI - Physical Interface for MIDI Files
Loading...
Searching...
No Matches
Binasc.h
Go to the documentation of this file.
1//
2// Programmer: Craig Stuart Sapp <craig@ccrma.stanford.edu>
3// Creation Date: Mon Feb 16 12:26:32 PST 2015 Adapted from binasc program.
4// Last Modified: Sat Apr 21 10:52:19 PDT 2018 Removed using namespace std;
5// Filename: midifile/include/Binasc.h
6// Website: http://midifile.sapp.org
7// Syntax: C++11
8// vim: ts=3 noexpandtab
9//
10// description: Interface to convert bytes between binary and ASCII forms.
11//
12
13#ifndef _BINASC_H_INCLUDED
14#define _BINASC_H_INCLUDED
15
16#include <cstdlib>
17#include <fstream>
18#include <iostream>
19#include <string>
20
21
22namespace smf {
23
24typedef unsigned char uchar;
25typedef unsigned short ushort;
26typedef unsigned long ulong;
27
28class Binasc {
29
30 public:
31 Binasc (void);
32
33 ~Binasc ();
34
35 // functions for setting options:
36 int setLineLength (int length);
37 int getLineLength (void);
38 int setLineBytes (int length);
39 int getLineBytes (void);
40 void setComments (int state);
41 void setCommentsOn (void);
42 void setCommentsOff (void);
43 int getComments (void);
44 void setBytes (int state);
45 void setBytesOn (void);
46 void setBytesOff (void);
47 int getBytes (void);
48 void setMidi (int state);
49 void setMidiOn (void);
50 void setMidiOff (void);
51 int getMidi (void);
52
53 // functions for converting into a binary file:
54 int writeToBinary (const std::string& outfile,
55 const std::string& infile);
56 int writeToBinary (const std::string& outfile,
57 std::istream& input);
58 int writeToBinary (std::ostream& out,
59 const std::string& infile);
60 int writeToBinary (std::ostream& out,
61 std::istream& input);
62
63 // functions for converting into an ASCII file with hex bytes:
64 int readFromBinary (const std::string&
65 outfile,
66 const std::string& infile);
67 int readFromBinary (const std::string& outfile,
68 std::istream& input);
69 int readFromBinary (std::ostream& out,
70 const std::string& infile);
71 int readFromBinary (std::ostream& out,
72 std::istream& input);
73
74 // static functions for writing ordered bytes:
75 static std::ostream& writeLittleEndianUShort (std::ostream& out,
76 ushort value);
77 static std::ostream& writeBigEndianUShort (std::ostream& out,
78 ushort value);
79 static std::ostream& writeLittleEndianShort (std::ostream& out,
80 short value);
81 static std::ostream& writeBigEndianShort (std::ostream& out,
82 short value);
83 static std::ostream& writeLittleEndianULong (std::ostream& out,
84 ulong value);
85 static std::ostream& writeBigEndianULong (std::ostream& out,
86 ulong value);
87 static std::ostream& writeLittleEndianLong (std::ostream& out,
88 long value);
89 static std::ostream& writeBigEndianLong (std::ostream& out,
90 long value);
91 static std::ostream& writeLittleEndianFloat (std::ostream& out,
92 float value);
93 static std::ostream& writeBigEndianFloat (std::ostream& out,
94 float value);
95 static std::ostream& writeLittleEndianDouble (std::ostream& out,
96 double value);
97 static std::ostream& writeBigEndianDouble (std::ostream& out,
98 double value);
99
100 static std::string keyToPitchName (int key);
101
102 protected:
103 int m_bytesQ; // option for printing hex bytes in ASCII output.
104 int m_commentsQ; // option for printing comments in ASCII output.
105 int m_midiQ; // output ASCII data as parsed MIDI file.
106 int m_maxLineLength;// number of character in ASCII output on a line.
107 int m_maxLineBytes; // number of hex bytes in ASCII output on a line.
108
109 private:
110 // helper functions for reading ASCII content to conver to binary:
111 int processLine (std::ostream& out,
112 const std::string& input,
113 int lineNum);
114 int processAsciiWord (std::ostream& out,
115 const std::string& input,
116 int lineNum);
117 int processStringWord (std::ostream& out,
118 const std::string& input,
119 int lineNum);
120 int processBinaryWord (std::ostream& out,
121 const std::string& input,
122 int lineNum);
123 int processDecimalWord (std::ostream& out,
124 const std::string& input,
125 int lineNum);
126 int processHexWord (std::ostream& out,
127 const std::string& input,
128 int lineNum);
129 int processVlvWord (std::ostream& out,
130 const std::string& input,
131 int lineNum);
132 int processMidiPitchBendWord(std::ostream& out,
133 const std::string& input,
134 int lineNum);
135 int processMidiTempoWord (std::ostream& out,
136 const std::string& input,
137 int lineNum);
138
139 // helper functions for reading binary content to convert to ASCII:
140 int outputStyleAscii (std::ostream& out, std::istream& input);
141 int outputStyleBinary (std::ostream& out, std::istream& input);
142 int outputStyleBoth (std::ostream& out, std::istream& input);
143 int outputStyleMidi (std::ostream& out, std::istream& input);
144
145 // MIDI parsing helper functions:
146 int readMidiEvent (std::ostream& out, std::istream& infile,
147 int& trackbytes, int& command);
148 int getVLV (std::istream& infile, int& trackbytes);
149 int getWord (std::string& word, const std::string& input,
150 const std::string& terminators, int index);
151
152 static const char *GMinstrument[128];
153
154};
155
156} // end of namespace smf
157
158#endif /* _BINASC_H_INCLUDED */
159
160
161
Definition Binasc.h:28
int outputStyleBoth(std::ostream &out, std::istream &input)
Definition Binasc.cpp:485
void setMidi(int state)
Definition Binasc.cpp:200
int readMidiEvent(std::ostream &out, std::istream &infile, int &trackbytes, int &command)
Definition Binasc.cpp:658
static std::ostream & writeLittleEndianULong(std::ostream &out, ulong value)
Definition Binasc.cpp:1870
static const char * GMinstrument[128]
Definition Binasc.h:152
int getComments(void)
Definition Binasc.cpp:158
void setComments(int state)
Definition Binasc.cpp:136
Binasc(void)
Definition Binasc.cpp:50
int processHexWord(std::ostream &out, const std::string &input, int lineNum)
Definition Binasc.cpp:1488
int getLineBytes(void)
Definition Binasc.cpp:124
int writeToBinary(const std::string &outfile, const std::string &infile)
Definition Binasc.cpp:234
int processVlvWord(std::ostream &out, const std::string &input, int lineNum)
Definition Binasc.cpp:1675
void setBytesOff(void)
Definition Binasc.cpp:180
void setMidiOff(void)
Definition Binasc.cpp:210
int processMidiPitchBendWord(std::ostream &out, const std::string &input, int lineNum)
Definition Binasc.cpp:1767
int processAsciiWord(std::ostream &out, const std::string &input, int lineNum)
Definition Binasc.cpp:1532
int outputStyleBinary(std::ostream &out, std::istream &input)
Definition Binasc.cpp:447
int m_maxLineLength
Definition Binasc.h:106
int processStringWord(std::ostream &out, const std::string &input, int lineNum)
Definition Binasc.cpp:1518
static std::string keyToPitchName(int key)
Definition Binasc.cpp:993
int processBinaryWord(std::ostream &out, const std::string &input, int lineNum)
Definition Binasc.cpp:1567
void setCommentsOn(void)
Definition Binasc.cpp:141
static std::ostream & writeLittleEndianShort(std::ostream &out, short value)
Definition Binasc.cpp:1840
int m_bytesQ
Definition Binasc.h:103
void setMidiOn(void)
Definition Binasc.cpp:205
int m_maxLineBytes
Definition Binasc.h:107
static std::ostream & writeBigEndianUShort(std::ostream &out, ushort value)
Definition Binasc.cpp:1825
int setLineBytes(int length)
Definition Binasc.cpp:108
int outputStyleMidi(std::ostream &out, std::istream &input)
Definition Binasc.cpp:1023
static std::ostream & writeLittleEndianUShort(std::ostream &out, ushort value)
Definition Binasc.cpp:1810
int setLineLength(int length)
Definition Binasc.cpp:78
int getWord(std::string &word, const std::string &input, const std::string &terminators, int index)
Definition Binasc.cpp:596
static std::ostream & writeLittleEndianLong(std::ostream &out, long value)
Definition Binasc.cpp:1904
static std::ostream & writeBigEndianFloat(std::ostream &out, float value)
Definition Binasc.cpp:1939
int m_commentsQ
Definition Binasc.h:104
int getVLV(std::istream &infile, int &trackbytes)
Definition Binasc.cpp:635
void setCommentsOff(void)
Definition Binasc.cpp:146
static std::ostream & writeLittleEndianDouble(std::ostream &out, double value)
Definition Binasc.cpp:1994
int getBytes(void)
Definition Binasc.cpp:190
static std::ostream & writeBigEndianULong(std::ostream &out, ulong value)
Definition Binasc.cpp:1887
int getLineLength(void)
Definition Binasc.cpp:95
void setBytesOn(void)
Definition Binasc.cpp:175
int getMidi(void)
Definition Binasc.cpp:221
~Binasc()
Definition Binasc.cpp:65
int processLine(std::ostream &out, const std::string &input, int lineNum)
Definition Binasc.cpp:537
int processMidiTempoWord(std::ostream &out, const std::string &input, int lineNum)
Definition Binasc.cpp:1726
static std::ostream & writeBigEndianDouble(std::ostream &out, double value)
Definition Binasc.cpp:1973
int processDecimalWord(std::ostream &out, const std::string &input, int lineNum)
Definition Binasc.cpp:1200
static std::ostream & writeBigEndianLong(std::ostream &out, long value)
Definition Binasc.cpp:1921
int outputStyleAscii(std::ostream &out, std::istream &input)
Definition Binasc.cpp:396
int readFromBinary(const std::string &outfile, const std::string &infile)
Definition Binasc.cpp:314
static std::ostream & writeLittleEndianFloat(std::ostream &out, float value)
Definition Binasc.cpp:1956
void setBytes(int state)
Definition Binasc.cpp:170
int m_midiQ
Definition Binasc.h:105
static std::ostream & writeBigEndianShort(std::ostream &out, short value)
Definition Binasc.cpp:1855
Definition Binasc.h:22
unsigned short ushort
Definition Binasc.h:25
unsigned char uchar
Definition Binasc.h:24
unsigned long ulong
Definition Binasc.h:26