MCPcopy Create free account
hub / github.com/audeering/opensmile / writeWaveHeader

Method writeWaveHeader

src/iocore/waveSinkCut.cpp:373–411  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

371} sRiffChunkHeader;
372
373int cWaveSinkCut::writeWaveHeader()
374{
375 if (fHandle == NULL) return 0;
376
377 // use reader parameters to determine
378 // nChannels
379 // sampleRate
380 long sampleRate;
381 // TODO: detect overlap!!
382 double fss = reader_->getFrameSizeSec();
383 double ft = reader_->getLevelT();
384
385 nOvl = (long)ceil( (double)fieldSize * (1.0 - (ft/fss)) );
386
387 // get sample format from config options
388 if (forceSampleRate != 0) {
389 sampleRate = forceSampleRate;
390 } else {
391 sampleRate = (long)( 1.0 / (fss / (double)fieldSize) );
392 }
393
394 sRiffPcmWaveHeader head;
395 head.Riff = 0x46464952; // RIFF
396 head.Format = 0x45564157; // WAVE
397 head.Subchunk1ID = 0x20746D66; // fmt
398 head.Subchunk1Size = 4*4; // size of format chunk
399 head.SampleRate = sampleRate;
400 head.BitsPerSample = nBitsPerSample;
401 head.ByteRate = sampleRate * nChannels * nBytesPerSample;
402 head.AudioFormat = sampleFormat == SMILE_SF_32BIT_FLOAT ? WAVE_FORMAT_IEEE_FLOAT : WAVE_FORMAT_PCM;
403 head.NumChannels = nChannels;
404 head.BlockAlign = nChannels * nBytesPerSample;
405 head.Subchunk2ID = 0x61746164; // data
406 head.Subchunk2Size = nBlocks * nChannels * nBytesPerSample; // size of wave data chunk
407 head.FileSize = sizeof(sRiffPcmWaveHeader) + head.Subchunk2Size;
408
409 fseek(fHandle, 0, SEEK_SET);
410 return (fwrite(&head, sizeof(sRiffPcmWaveHeader), 1, fHandle) == 1 ? sizeof(sRiffPcmWaveHeader) : 0 );
411}
412
413int cWaveSinkCut::writeDataFrame(cVector *m)
414{

Callers

nothing calls this directly

Calls 2

getFrameSizeSecMethod · 0.45
getLevelTMethod · 0.45

Tested by

no test coverage detected