⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sof_06.cc

📁 这是一个从音频信号里提取特征参量的程序
💻 CC
字号:
// file: $isip/class/io/Sof/sof_06.cc// version: $Id: sof_06.cc,v 1.4 2001/04/20 19:11:20 duncan Exp $//// isip include files//#include "Sof.h"// method: find//// arguments://  long name: (input) class name//  long tag: (input) class tag//// return: an long value containing the position of the object in the index//// find an object in the index, making this the current object//boolean Sof::find(long name_a, long tag_a) {    // make sure we are not in partial write mode  //  if (partial_write_d || partial_read_d) {    return Error::handle(name(), L"find", ERR_PARTIAL, __FILE__, __LINE__);  }  // find the object in the index  //  if (!index_d.find(name_a, tag_a)) {    return false;  }  // position us at the beginning of the object's data  //  if (!seekData()) {    return Error::handle(name(), L"find", Error::SEEK, __FILE__, __LINE__);  }  // exit gracefully  //  return true;}// method: first//// arguments://  const SysString& name: (input) object name//// return: long value indicating tag//// this method finds the first object of the specified name//long Sof::first(const SysString& name_a) {    // make sure we are not in partial write mode  //  if (partial_write_d) {    return Error::handle(name(), L"first", ERR_PARTIAL, __FILE__, __LINE__);  }    // find the index for the name  //  long index = table_d.getIndex(name_a);  if (index == SofSymbolTable::NO_SYMB) {    return SofList::NO_TAG;  }  // return the first tag for this name in the list  //  return index_d.first(index);}// method: last//// arguments://  const SysString& name: (input) object name//// return: long value indicating tag//// this method finds the last object of the specified name//long Sof::last(const SysString& name_a) {    // make sure we are not in partial write mode  //  if (partial_write_d) {    return Error::handle(name(), L"last", ERR_PARTIAL, __FILE__, __LINE__);  }    // find the index for the name  //  long index = table_d.getIndex(name_a);  if (index == SofSymbolTable::NO_SYMB) {    return SofList::NO_TAG;  }  // return the last tag for this name in the list  //  return index_d.last(index);}// method: seek//// arguments://  long offset: (input) byte offset//  File::SEEK mode: (input) code for starting position//// return: a boolean value indicating status//// seek to the specified location within the current object//boolean Sof::seek(long offset_a, File::SEEK mode_a) {    // make sure the current object pointer is set  //  if (cur_data_d < 0) {    return Error::handle(name(), L"seek", SofList::ERR, __FILE__, __LINE__);  }  long seek_pos = 0;  // figure out the end of this object  //  long obj_end = cur_data_d + index_d.getSize();  if (obj_end < cur_data_d) {    obj_end = -1;  }  // branch on modes  //  if (mode_a == File::POS) {    seek_pos = cur_data_d + offset_a;  }  else if (mode_a == File::POS_PLUS_CUR) {    seek_pos = ftell() + offset_a;  }  else if (mode_a == File::POS_PLUS_END) {        // if size is unspecified, only restrict lower bound    //    if (obj_end < 0) {      // if you try to seek before the start of the object's data,      // restrict to the beginning of object's data      //      if ((ftell() + offset_a) > cur_data_d) {	return fseek(offset_a, File::POS_PLUS_CUR);      }      else {	return fseek(cur_data_d, File::POS);      }    }    // size is specified, normal behavior    //    else {      seek_pos = obj_end + offset_a;    }  }  // invalid seek mode  //  else {    return Error::handle(name(), L"seek", Error::ARG, __FILE__, __LINE__);  }  // restrict range  //  if (seek_pos > obj_end) {    seek_pos = obj_end;  }  else if (seek_pos < cur_data_d) {    seek_pos = cur_data_d;  }  // the actual system call  //  return fseek(seek_pos, File::POS);}// method: tell//// arguments: none//// return: long offset//// find the position within the current object//long Sof::tell() const {      // make sure current object is set  //  if (cur_data_d < 0) {    Error::handle(name(), L"tell", SofList::ERR, __FILE__, __LINE__);    return (long)-1;  }  long size = index_d.getSize();    // find the absolute position  //  long pos = ftell();  // subtract the range for the current object  //  pos -= cur_data_d;  // check range  //  if ((pos < 0) || ((size > 0) && (pos > size))) {    Error::handle(name(), L"tell", ERR_RANGE, __FILE__, __LINE__);    return (long)-1;  }  // return the value  //  return pos;}// method: ftell//// arguments: none//// return: long offset//// find the position in the file//long Sof::ftell() const {  // for text mode, just make the system call  //  if (isText()) {    return fp_d.tell();  }  // for binary mode, be more intelligent  //  if (cur_pos_d < 0) {    return Error::handle(name(), L"ftell", Sof::ERR, __FILE__, __LINE__);  }    return cur_pos_d;}// method: fseek//// arguments://  long offset: (input) offset in bytes//  File::SEEK whence: (input) where to seek from//// return: boolean error status//// seek to the specified location in the file//boolean Sof::fseek(long offset_a, File::SEEK whence_a) {  // make the system call  //  if (!fp_d.seek(offset_a, whence_a)) {    return Error::handle(name(), L"fseek", Error::SEEK, __FILE__, __LINE__);  }      // for text mode, that's it  //  if (file_type_d == File::TEXT) {    return true;  }  // for testing purposes, remove for efficiency later  //  if (cur_pos_d < 0) {    return Error::handle(name(), L"fseek", Error::INTERNAL_DATA, __FILE__,			 __LINE__, Error::WARNING);  }  // just set current to offset_a  //  if (whence_a == File::POS) {    cur_pos_d = offset_a;  }  // just increment current by offset_a  //  else if (whence_a == File::POS_PLUS_CUR) {    cur_pos_d += offset_a;  }  // if we search from the end of file, no telling where we end up  //  else {    cur_pos_d = fp_d.tell();  }  // exit gracefully  //  return true;}// method: seekDataText//// arguments: none//// return: a boolean value indicating status//// seek to the data of the current object in an text file//boolean Sof::seekDataText() {  // for text, first seek to the position, then skip the label and flush  //  if ((!fseek(index_d.getPosition(), File::POS)) ||      (!skipLabel())) {    return Error::handle(name(), L"seekDataText", Error::SEEK,			 __FILE__, __LINE__);  }    // set the current data pointer  //  cur_data_d = ftell();  // exit gracefully  //  return true;}// method: seekDataBinary//// arguments: none//// return: a boolean value indicating status//// seek to the data of the current object in a binary file//boolean Sof::seekDataBinary() {  // binary files are simple, just seek to position  //  if (!fseek(index_d.getPosition(), File::POS)) {    return Error::handle(name(), L"seekDataBinary", Error::SEEK,			 __FILE__, __LINE__);  }  // set the current data pointer  //  cur_data_d = ftell();    // exit gracefully  //  return true;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -