Beispiel #1
0
//--------------------------------------------------------------------------
void VeAudioSampleData::ParseWave(VeBinaryIStream& kInput)
{
	VeWaveFileHeader kHeader;
	VE_ASSERT_EQ(kInput.Read(&kHeader, 12), 12);
	VE_ASSERT((!VeStrnicmp(kHeader.m_ac8Riff, "RIFF", 4)) && (!VeStrnicmp(kHeader.m_ac8Wave, "WAVE", 4)));
	VeRiffChunk kChunk;
	while(kInput.Read(&kChunk, 8) == 8)
	{
		if(!VeStrnicmp(kChunk.m_ac8ChunkName, "fmt ", 4))
		{
			VeWaveFormat kFormat;
			VE_ASSERT_EQ(kInput.Read(&kFormat, kChunk.m_u32ChunkSize), VeInt32(kChunk.m_u32ChunkSize));
			VE_ASSERT(kFormat.m_u16FormatTag == 1);
			m_u32ChannelNum = kFormat.m_u16Channels;
			m_u32SampleRate = kFormat.m_u32SamplesPerSec;
			m_u32BitsPerSample = kFormat.m_u16BitsPerSample;
		}
		else if(!VeStrnicmp(kChunk.m_ac8ChunkName, "data", 4))
		{
			m_spData = VE_NEW VeBlob(kChunk.m_u32ChunkSize);
			VE_ASSERT_EQ(kInput.Read(*m_spData, kChunk.m_u32ChunkSize), VeInt32(kChunk.m_u32ChunkSize));
		}
		else
		{
			kInput.Skip(kChunk.m_u32ChunkSize);
		}
		if (kChunk.m_u32ChunkSize & 1)
		{
			kInput.Skip(1);
		}
	}
}
Beispiel #2
0
//--------------------------------------------------------------------------
static void VePngRead(png_structp pkPngPtr, png_bytep pbyData, png_size_t stLength)
{
	VeBinaryIStream& kStream = *(VeBinaryIStream*)png_get_io_ptr(pkPngPtr);
	VE_ASSERT_EQ(kStream.Read(pbyData, VeInt32(stLength)), VeInt32(stLength));
}