本文整理汇总了C++中IReader::setPos方法的典型用法代码示例。如果您正苦于以下问题:C++ IReader::setPos方法的具体用法?C++ IReader::setPos怎么用?C++ IReader::setPos使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IReader
的用法示例。
在下文中一共展示了IReader::setPos方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: decode
Wave AudioFormat_WAVE::decode(IReader& reader) const
{
RiffHeader riffHeader;
if (!reader.read(riffHeader))
{
return Wave();
}
if (!detail::MemEqual(riffHeader.riff, detail::RIFF_SIGN) || !detail::MemEqual(riffHeader.type, detail::WAVE_SIGN))
{
return Wave();
}
ChunkHeader chunkHeader;
for (;;)
{
if (!reader.read(chunkHeader))
{
return Wave();
}
if (detail::MemEqual(chunkHeader.chunkID, detail::FMT_CHUNK))
{
break;
}
else
{
reader.setPos(reader.getPos() + chunkHeader.chunkSize);
}
}
FormatHeader formatHeader;
if (!reader.read(formatHeader))
{
return Wave();
}
if (chunkHeader.chunkSize > sizeof(formatHeader))
{
reader.skip(chunkHeader.chunkSize - sizeof(formatHeader));
}
for (;;)
{
if (!reader.read(chunkHeader))
{
return Wave();
}
if (detail::MemEqual(chunkHeader.chunkID, detail::DATA_CHUNK))
{
break;
}
else
{
reader.setPos(reader.getPos() + chunkHeader.chunkSize);
}
}
const uint32 size_bytes = chunkHeader.chunkSize;
const size_t num_samples = size_bytes / (formatHeader.channels * (formatHeader.bitsWidth / 8));
Wave wave(num_samples, Arg::samplingRate = formatHeader.samplerate);
if (formatHeader.bitsWidth == 8 && formatHeader.channels == 1)
{
// PCM 8bit 1ch
Array<uint8> samples(num_samples);
reader.read(samples.data(), size_bytes);
for (size_t i = 0; i < num_samples; ++i)
{
wave[i].set(samples[i] / 127.5f - 1.0f);
}
}
else if (formatHeader.bitsWidth == 8 && formatHeader.channels == 2)
{
// PCM 8bit 2ch
Array<WS8bit> samples(num_samples);
reader.read(samples.data(), size_bytes);
for (uint32 i = 0; i < num_samples; ++i)
{
wave[i].set(samples[i].left / 127.5f - 1.0f, samples[i].right / 127.5f - 1.0f);
}
}
else if (formatHeader.bitsWidth == 16 && formatHeader.channels == 1)
{
// PCM 16bit 1ch
Array<int16> samples(num_samples);
reader.read(samples.data(), size_bytes);
for (uint32 i = 0; i < num_samples; ++i)
{
//.........这里部分代码省略.........