MCPcopy Create free account
hub / github.com/TorqueGameEngines/Torque3D / _readHeader

Method _readHeader

Engine/source/sfx/media/sfxWavStream.cpp:120–228  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

118}
119
120bool SFXWavStream::_readHeader()
121{
122 // We read the wav chunks to gather than header info
123 // and find the start and end position of the data chunk.
124 mDataStart = -1;
125
126 WAVFileHdr fileHdr;
127 mStream->read( 4, &fileHdr.id[0] );
128 mStream->read( &fileHdr.size );
129 mStream->read( 4, &fileHdr.type[0] );
130
131 fileHdr.size=((fileHdr.size+1)&~1)-4;
132
133 WAVChunkHdr chunkHdr;
134 mStream->read( 4, &chunkHdr.id[0] );
135 mStream->read( &chunkHdr.size );
136
137 // Unread chunk data rounded up to nearest WORD.
138 S32 chunkRemaining = chunkHdr.size + ( chunkHdr.size & 1 );
139
140 WAVFmtHdr fmtHdr;
141 WAVFmtExHdr fmtExHdr;
142 WAVSmplHdr smplHdr;
143
144 dMemset(&fmtHdr, 0, sizeof(fmtHdr));
145
146 while ((fileHdr.size!=0) && (mStream->getStatus() != Stream::EOS))
147 {
148 // WAV format header chunk.
149 if ( !dStrncmp( (const char*)chunkHdr.id, "fmt ", 4 ) )
150 {
151 mStream->read(&fmtHdr.format);
152 mStream->read(&fmtHdr.channels);
153 mStream->read(&fmtHdr.samplesPerSec);
154 mStream->read(&fmtHdr.bytesPerSec);
155 mStream->read(&fmtHdr.blockAlign);
156 mStream->read(&fmtHdr.bitsPerSample);
157
158 if ( fmtHdr.format == 0x0001 )
159 {
160 mFormat.set( fmtHdr.channels, fmtHdr.bitsPerSample * fmtHdr.channels, fmtHdr.samplesPerSec );
161 chunkRemaining -= sizeof( WAVFmtHdr );
162 }
163 else
164 {
165 mStream->read(sizeof(WAVFmtExHdr), &fmtExHdr);
166 chunkRemaining -= sizeof(WAVFmtExHdr);
167 }
168 }
169
170 // WAV data chunk
171 else if (!dStrncmp((const char*)chunkHdr.id,"data",4))
172 {
173 // TODO: Handle these other formats in a more graceful manner!
174
175 if (fmtHdr.format==0x0001)
176 {
177 mDataStart = mStream->getPosition();

Callers

nothing calls this directly

Calls 8

dStrncmpFunction · 0.85
getBytesPerSampleMethod · 0.80
dMemsetFunction · 0.50
readMethod · 0.45
getStatusMethod · 0.45
setMethod · 0.45
getPositionMethod · 0.45
setPositionMethod · 0.45

Tested by

no test coverage detected