本文整理汇总了C++中FileReader::Skip方法的典型用法代码示例。如果您正苦于以下问题:C++ FileReader::Skip方法的具体用法?C++ FileReader::Skip怎么用?C++ FileReader::Skip使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类FileReader
的用法示例。
在下文中一共展示了FileReader::Skip方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ReadUMXNameTableEntry
// Read an entry from the name table.
std::string ReadUMXNameTableEntry(FileReader &chunk, uint16 packageVersion)
{
std::string name;
if(packageVersion >= 64)
{
// String length
int32 length = ReadUMXIndex(chunk);
if(length <= 0)
{
return "";
}
name.reserve(length);
}
// Simple zero-terminated string
uint8 chr;
while((chr = chunk.ReadUint8()) != 0)
{
// Convert string to lower case
if(chr >= 'A' && chr <= 'Z')
{
chr = chr - 'A' + 'a';
}
name.append(1, static_cast<char>(chr));
}
chunk.Skip(4); // Object flags
return name;
}
示例2: ReadUMXExportTableEntry
// Read an entry from the export table.
void ReadUMXExportTableEntry(FileReader &chunk, int32 &objClass, int32 &objOffset, int32 &objSize, int32 &objName, uint16 packageVersion)
{
objClass = ReadUMXIndex(chunk); // Object class
ReadUMXIndex(chunk); // Object parent
if(packageVersion >= 60)
{
chunk.Skip(4); // Internal package / group of the object
}
objName = ReadUMXIndex(chunk); // Object name (offset into the name table)
chunk.Skip(4); // Object flags
objSize = ReadUMXIndex(chunk);
if(objSize > 0)
{
objOffset = ReadUMXIndex(chunk);
}
}
示例3: ReadFixedLineLength
bool SongMessage::ReadFixedLineLength(FileReader &file, const size_t length, const size_t lineLength, const size_t lineEndingLength)
//----------------------------------------------------------------------------------------------------------------------------------
{
FileReader::off_t readLength = std::min(static_cast<FileReader::off_t>(length), file.BytesLeft());
bool success = ReadFixedLineLength(file.GetRawData(), readLength, lineLength, lineEndingLength);
file.Skip(readLength);
return success;
}
示例4: Init
bool Init(const String& path)
{
File file;
if(!file.OpenRead(path))
return false;
FileReader stream = FileReader(file);
WavHeader riff;
stream << riff;
if(riff != "RIFF")
return false;
char riffType[4];
stream.SerializeObject(riffType);
if(strncmp(riffType, "WAVE", 4) != 0)
return false;
while(stream.Tell() < stream.GetSize())
{
WavHeader chunkHdr;
stream << chunkHdr;
if(chunkHdr == "fmt ")
{
stream << m_format;
//Logf("Sample format: %s", Logger::Info, (m_format.nFormat == 1) ? "PCM" : "Unknown");
//Logf("Channels: %d", Logger::Info, m_format.nChannels);
//Logf("Sample rate: %d", Logger::Info, m_format.nSampleRate);
//Logf("Bps: %d", Logger::Info, m_format.nBitsPerSample);
}
else if(chunkHdr == "data") // data Chunk
{
// validate header
if(m_format.nFormat != 1)
return false;
if(m_format.nChannels > 2 || m_format.nChannels == 0)
return false;
if(m_format.nBitsPerSample != 16)
return false;
// Read data
m_length = chunkHdr.nLength / sizeof(short);
m_pcm.resize(chunkHdr.nLength);
stream.Serialize(m_pcm.data(), chunkHdr.nLength);
}
else
{
stream.Skip(chunkHdr.nLength);
}
}
// Calculate the sample step if the rate is not the same as the output rate
double sampleStep = (double)m_format.nSampleRate / (double)m_audio->GetSampleRate();
m_sampleStepIncrement = (uint64)(sampleStep * (double)fp_sampleStep);
return true;
}
示例5: ReadUMXImportTableEntry
// Read an entry from the import table.
int32 ReadUMXImportTableEntry(FileReader &chunk, uint16 packageVersion)
{
ReadUMXIndex(chunk); // Class package
ReadUMXIndex(chunk); // Class name
if(packageVersion >= 60)
{
chunk.Skip(4); // Package
} else
{
ReadUMXIndex(chunk); // ??
}
return ReadUMXIndex(chunk); // Object name (offset into the name table)
}
示例6: IMAADPCMUnpack16
// Note: Only works for mono samples.
bool IMAADPCMUnpack16(int16 *target, SmpLength sampleLen, FileReader file, uint16 blockAlign)
//-------------------------------------------------------------------------------------------
{
static const int32 IMAIndexTab[8] = { -1, -1, -1, -1, 2, 4, 6, 8 };
static const int32 IMAUnpackTable[90] =
{
7, 8, 9, 10, 11, 12, 13, 14,
16, 17, 19, 21, 23, 25, 28, 31,
34, 37, 41, 45, 50, 55, 60, 66,
73, 80, 88, 97, 107, 118, 130, 143,
157, 173, 190, 209, 230, 253, 279, 307,
337, 371, 408, 449, 494, 544, 598, 658,
724, 796, 876, 963, 1060, 1166, 1282, 1411,
1552, 1707, 1878, 2066, 2272, 2499, 2749, 3024,
3327, 3660, 4026, 4428, 4871, 5358, 5894, 6484,
7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899,
15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794,
32767, 0
};
if((sampleLen < 4) || (!target) || (blockAlign < 5) || (blockAlign > file.GetLength()))
return false;
SmpLength nPos = 0;
while((nPos < sampleLen) && file.CanRead(5))
{
int32 value = file.ReadIntLE<int16>();
int32 nIndex = file.ReadIntLE<uint8>();
nIndex = Clamp(nIndex, 0, 89);
file.Skip(1);
target[nPos++] = (int16)value;
for(uint32 i = 0; (i < (blockAlign - 4u) * 2u) && (nPos < sampleLen) && file.AreBytesLeft(); i++)
{
uint8 delta;
if(i & 1)
{
delta = (file.ReadIntLE<uint8>() >> 4) & 0x0F;
} else
{
delta = file.ReadIntLE<uint8>() & 0x0F;
file.SkipBack(1);
}
int32 v = IMAUnpackTable[nIndex] >> 3;
if (delta & 1) v += IMAUnpackTable[nIndex] >> 2;
if (delta & 2) v += IMAUnpackTable[nIndex] >> 1;
if (delta & 4) v += IMAUnpackTable[nIndex];
if (delta & 8) value -= v; else value += v;
nIndex += IMAIndexTab[delta & 7];
nIndex = Clamp(nIndex, 0, 88);
target[nPos++] = static_cast<int16>(Clamp(value, -32768, 32767));
}
示例7: LoadFile
VSTPresets::ErrorCode VSTPresets::LoadFile(FileReader &file, CVstPlugin &plugin)
//------------------------------------------------------------------------------
{
const bool firstChunk = file.GetPosition() == 0;
ChunkHeader header;
if(!file.ReadConvertEndianness(header) || header.chunkMagic != cMagic)
{
return invalidFile;
}
if(header.fxID != plugin.GetUID())
{
return wrongPlugin;
}
if(header.fxMagic == fMagic || header.fxMagic == chunkPresetMagic)
{
// Program
PlugParamIndex numParams = file.ReadUint32BE();
VstPatchChunkInfo info;
info.version = 1;
info.pluginUniqueID = header.fxID;
info.pluginVersion = header.fxVersion;
info.numElements = numParams;
MemsetZero(info.future);
plugin.Dispatch(effBeginLoadProgram, 0, 0, &info, 0.0f);
plugin.Dispatch(effBeginSetProgram, 0, 0, nullptr, 0.0f);
char prgName[28];
file.ReadString<mpt::String::maybeNullTerminated>(prgName, 28);
plugin.Dispatch(effSetProgramName, 0, 0, prgName, 0.0f);
if(header.fxMagic == fMagic)
{
if(plugin.GetNumParameters() != numParams)
{
return wrongParameters;
}
for(PlugParamIndex p = 0; p < numParams; p++)
{
plugin.SetParameter(p, file.ReadFloatBE());
}
} else
{
FileReader chunk = file.ReadChunk(file.ReadUint32BE());
plugin.Dispatch(effSetChunk, 1, chunk.GetLength(), const_cast<char *>(chunk.GetRawData()), 0);
}
plugin.Dispatch(effEndSetProgram, 0, 0, nullptr, 0.0f);
} else if((header.fxMagic == bankMagic || header.fxMagic == chunkBankMagic) && firstChunk)
{
// Bank - only read if it's the first chunk in the file, not if it's a sub chunk.
uint32 numProgs = file.ReadUint32BE();
uint32 currentProgram = file.ReadUint32BE();
file.Skip(124);
VstPatchChunkInfo info;
info.version = 1;
info.pluginUniqueID = header.fxID;
info.pluginVersion = header.fxVersion;
info.numElements = numProgs;
MemsetZero(info.future);
plugin.Dispatch(effBeginLoadBank, 0, 0, &info, 0.0f);
if(header.fxMagic == bankMagic)
{
VstInt32 oldCurrentProgram = plugin.GetCurrentProgram();
for(uint32 p = 0; p < numProgs; p++)
{
plugin.Dispatch(effBeginSetProgram, 0, 0, nullptr, 0.0f);
plugin.Dispatch(effSetProgram, 0, 0, nullptr, 0.0f);
ErrorCode retVal = LoadFile(file, plugin);
if(retVal != noError)
{
return retVal;
}
plugin.Dispatch(effEndSetProgram, 0, 0, nullptr, 0.0f);
}
plugin.SetCurrentProgram(oldCurrentProgram);
} else
{
FileReader chunk = file.ReadChunk(file.ReadUint32BE());
plugin.Dispatch(effSetChunk, 0, chunk.GetLength(), const_cast<char *>(chunk.GetRawData()), 0);
}
if(header.version >= 2)
{
plugin.SetCurrentProgram(currentProgram);
}
}
return noError;
}
示例8: ReadITQ
//.........这里部分代码省略.........
minPtr = std::min(minPtr, patPos[n]);
}
}
if(fileHeader.special & ITFileHeader::embedSongMessage)
{
minPtr = std::min(minPtr, fileHeader.msgoffset);
}
// Reading IT Edit History Info
// This is only supposed to be present if bit 1 of the special flags is set.
// However, old versions of Schism and probably other trackers always set this bit
// even if they don't write the edit history count. So we have to filter this out...
// This is done by looking at the parapointers. If the history data end after
// the first parapointer, we assume that it's actually no history data.
if(fileHeader.special & ITFileHeader::embedEditHistory)
{
const uint16 nflt = file.ReadUint16LE();
if(file.CanRead(nflt * sizeof(ITHistoryStruct)) && file.GetPosition() + nflt * sizeof(ITHistoryStruct) <= minPtr)
{
m_FileHistory.reserve(nflt);
for(size_t n = 0; n < nflt; n++)
{
FileHistory mptHistory;
ITHistoryStruct itHistory;
file.ReadConvertEndianness(itHistory);
itHistory.ConvertToMPT(mptHistory);
m_FileHistory.push_back(mptHistory);
}
} else
{
// Oops, we were not supposed to read this.
file.SkipBack(2);
}
} else if(fileHeader.highlight_major == 0 && fileHeader.highlight_minor == 0 && fileHeader.cmwt == 0x0214 && fileHeader.cwtv == 0x0214 && !memcmp(fileHeader.reserved, "\0\0\0\0", 4) && (fileHeader.special & (ITFileHeader::embedEditHistory | ITFileHeader::embedPatternHighlights)) == 0)
{
// Another non-conforming application is unmo3 < v2.4.0.1, which doesn't set the special bit
// at all, but still writes the two edit history length bytes (zeroes)...
if(file.ReadUint16LE() != 0)
{
// These were not zero bytes -> We're in the wrong place!
file.SkipBack(2);
madeWithTracker = "UNMO3";
}
}
// Reading MIDI Output & Macros
if(m_SongFlags[SONG_EMBEDMIDICFG] && file.Read(m_MidiCfg))
{
m_MidiCfg.Sanitize();
}
// Ignore MIDI data. Fixes some files like denonde.it that were made with old versions of Impulse Tracker (which didn't support Zxx filters) and have Zxx effects in the patterns.
if(fileHeader.cwtv < 0x0214)
{
MemsetZero(m_MidiCfg.szMidiSFXExt);
MemsetZero(m_MidiCfg.szMidiZXXExt);
m_SongFlags.set(SONG_EMBEDMIDICFG);
}
if(file.ReadMagic("MODU"))
{
madeWithTracker = "BeRoTracker";
}