X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fevoral%2Fsrc%2FSMFReader.cpp;h=8697b89785d8c194c6fdf8d3b23cc62598d36448;hb=f97da74cf7d3c2d3ae580473fa4639b0b259bf5b;hp=8da6f95c85636e9ab9edd05179b45081ef2b8908;hpb=9a30bb2aecabcdd16568e6548dd1aeade8effa48;p=ardour.git diff --git a/libs/evoral/src/SMFReader.cpp b/libs/evoral/src/SMFReader.cpp index 8da6f95c85..8697b89785 100644 --- a/libs/evoral/src/SMFReader.cpp +++ b/libs/evoral/src/SMFReader.cpp @@ -1,16 +1,16 @@ /* This file is part of Evoral. - * Copyright(C) 2008 Dave Robillard + * Copyright(C) 2008 David Robillard * Copyright(C) 2000-2008 Paul Davis - * + * * Evoral is free software; you can redistribute it and/or modify it under the * terms of the GNU General Public License as published by the Free Software * Foundation; either version 2 of the License, or(at your option) any later * version. - * + * * Evoral is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for details. - * + * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA @@ -22,8 +22,8 @@ #include #include -#include -#include +#include "evoral/midi_util.h" +#include "evoral/SMFReader.hpp" using namespace std; @@ -71,7 +71,7 @@ SMFReader::open(const string& filename) throw (logic_error, UnsupportedTime) _fd = NULL; return false; } - + // Read type (bytes 8..9) fseek(_fd, 8, SEEK_SET); uint16_t type_be = 0; @@ -87,20 +87,20 @@ SMFReader::open(const string& filename) throw (logic_error, UnsupportedTime) uint16_t ppqn_be = 0; fread(&ppqn_be, 2, 1, _fd); _ppqn = GUINT16_FROM_BE(ppqn_be); - + // TODO: Absolute (SMPTE seconds) time support if ((_ppqn & 0x8000) != 0) throw UnsupportedTime(); seek_to_track(1); - + return true; } else { return false; } } - + /** Seek to the start of a given track, starting from 1. * Returns true if specified track was found. */ @@ -148,7 +148,7 @@ SMFReader::seek_to_track(unsigned track) throw (std::logic_error) } } - + /** Read an event from the current position in file. * * File position MUST be at the beginning of a delta time, or this will die very messily. @@ -200,7 +200,7 @@ SMFReader::read_event(size_t buf_len, fseek(_fd, -1, SEEK_CUR); } else { last_status = status; - *ev_size = midi_event_size(status) + 1; + *ev_size = midi_event_size(status); last_size = *ev_size; } @@ -234,14 +234,14 @@ SMFReader::read_event(size_t buf_len, // Read event, return size if (ferror(_fd)) throw CorruptFile(); - + fread(buf+1, 1, *ev_size - 1, _fd); - + if ((buf[0] & 0xF0) == 0x90 && buf[2] == 0) { buf[0] = (0x80 | (buf[0] & 0x0F)); buf[2] = 0x40; } - + return *ev_size; } }