From a23b21908e4d0fab277a9f6f7d5a3b5a69746740 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Mon, 2 Apr 2007 00:26:21 +0000 Subject: List appending. Make SMFReader abort gracefully on non-SMF files. git-svn-id: http://svn.drobilla.net/lad/raul@389 a436a847-0d15-0410-975c-d299462d15a1 --- src/SMFReader.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'src/SMFReader.cpp') diff --git a/src/SMFReader.cpp b/src/SMFReader.cpp index 56232cf..a267e48 100644 --- a/src/SMFReader.cpp +++ b/src/SMFReader.cpp @@ -96,6 +96,19 @@ SMFReader::open(const string& filename) _fd = fopen(filename.c_str(), "r+"); if (_fd) { + // Read type (bytes 8..9) + fseek(_fd, 0, SEEK_SET); + char mthd[5]; + mthd[4] = '\0'; + fread(mthd, 1, 4, _fd); + if (strcmp(mthd, "MThd")) { + cerr << "File is not an SMF file, aborting." << endl; + fclose(_fd); + _fd = NULL; + return false; + } + + // Read type (bytes 8..9) fseek(_fd, 8, SEEK_SET); uint16_t type_be = 0; @@ -153,7 +166,7 @@ SMFReader::seek_to_track(unsigned track) if (!strcmp(id, "MTrk")) { ++track_pos; - std::cerr << "Found track " << track_pos << endl; + //std::cerr << "Found track " << track_pos << endl; } else { std::cerr << "Unknown chunk ID " << id << endl; } -- cgit v1.2.1