Skip to content

Commit

Permalink
Update SMPTE millisecond code.
Browse files Browse the repository at this point in the history
  • Loading branch information
craigsapp committed Apr 16, 2018
1 parent 880db73 commit ccb93a2
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 15 deletions.
4 changes: 2 additions & 2 deletions src-library/Binasc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1042,12 +1042,12 @@ int Binasc::outputStyleMidi(ostream& out, istream& input) {
input.read((char*)&byte2, 1);
if (byte1 & 0x80) {
// SMPTE divisions
tempout << "1'-" << 0xff - (ulong)byte1 + 1;
tempout << "'-" << 0xff - (ulong)byte1 + 1;
if (commentsQ) {
tempout << "\t\t\t; SMPTE frames/second";
}
tempout << endl;
tempout << "1'" << dec << (long)byte2;
tempout << "'" << dec << (long)byte2;
if (commentsQ) {
tempout << "\t\t\t; subframes per frame";
}
Expand Down
24 changes: 11 additions & 13 deletions src-library/MidiFile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -362,24 +362,22 @@ int MidiFile::read(istream& input) {
// Header parameter #3: Ticks per quarter note
shortdata = MidiFile::readLittleEndian2Bytes(input);
if (shortdata >= 0x8000) {
int framespersecond = ((!(shortdata >> 8))+1) & 0x00ff;
int resolution = shortdata & 0x00ff;
int framespersecond = 255 - ((shortdata >> 8) & 0x00ff) + 1;
int subframes = shortdata & 0x00ff;
switch (framespersecond) {
case 232: framespersecond = 24; break;
case 231: framespersecond = 25; break;
case 227: framespersecond = 29; break;
case 226: framespersecond = 30; break;
case 25: framespersecond = 25; break;
case 24: framespersecond = 24; break;
case 29: framespersecond = 29; break; // really 29.97 for color television
case 30: framespersecond = 30; break;
default:
cerr << "Warning: unknown FPS: " << framespersecond << endl;
framespersecond = 255 - framespersecond + 1;
cerr << "Setting FPS to " << framespersecond << endl;
cerr << "Using non-standard FPS: " << framespersecond << endl;
}
// actually ticks per second (except for frame=29 (drop frame)):
ticksPerQuarterNote = shortdata;
ticksPerQuarterNote = framespersecond * subframes;

cerr << "SMPTE ticks: " << ticksPerQuarterNote << " ticks/sec" << endl;
cerr << "SMPTE frames per second: " << framespersecond << endl;
cerr << "SMPTE frame resolution per frame: " << resolution << endl;
// cerr << "SMPTE ticks: " << ticksPerQuarterNote << " ticks/sec" << endl;
// cerr << "SMPTE frames per second: " << framespersecond << endl;
// cerr << "SMPTE subframes per frame: " << subframes << endl;
} else {
ticksPerQuarterNote = shortdata;
}
Expand Down

0 comments on commit ccb93a2

Please sign in to comment.