2016-08-02 Fred Gleason <fredg@paravelsystems.com>

* Fixed a bug in 'lib/rdwavefile.cpp' that caused WAV files to
	be written with incorrect LEVL chunk data.
This commit is contained in:
Fred Gleason 2016-08-02 16:18:30 -04:00
parent 46d5ef5152
commit 1c52c13a7b
2 changed files with 7 additions and 3 deletions

View File

@ -15446,3 +15446,6 @@
payload size to be written for WAV files.
2016-08-02 Fred Gleason <fredg@paravelsystems.com>
* Added 'Start' fields to wav_chunk_test(1).
2016-08-02 Fred Gleason <fredg@paravelsystems.com>
* Fixed a bug in 'lib/rdwavefile.cpp' that caused WAV files to
be written with incorrect LEVL chunk data.

View File

@ -654,13 +654,14 @@ void RDWaveFile::closeWave(int samples)
MakeLevl();
lseek(wave_file.handle(),0,SEEK_END);
write(wave_file.handle(),"levl",4);
lsize=LEVL_CHUNK_SIZE+energy_data.size()*2;
lsize=LEVL_CHUNK_SIZE+energy_data.size()*2-8;
size_buf[0]=lsize&0xff;
size_buf[1]=(lsize>>8)&0xff;
size_buf[2]=(lsize>>16)&0xff;
size_buf[3]=(lsize>>24)&0xff;
write(wave_file.handle(),size_buf,4);
write(wave_file.handle(),levl_chunk_data,LEVL_CHUNK_SIZE-4);
write(wave_file.handle(),levl_chunk_data,LEVL_CHUNK_SIZE-8);
//write(wave_file.handle(),levl_chunk_data,LEVL_CHUNK_SIZE-4);
// Fixup the endianness
unsigned char * sbuf = new unsigned char [2 * energy_data.size()];
for (unsigned int i=0; i < energy_data.size(); i++){
@ -674,7 +675,7 @@ void RDWaveFile::closeWave(int samples)
//
// Update file size
//
cptr=lseek(wave_file.handle(),0,SEEK_END)-12;
cptr=lseek(wave_file.handle(),0,SEEK_END)-8;
size_buf[0]=cptr&0xff;
size_buf[1]=(cptr>>8)&0xff;
size_buf[2]=(cptr>>16)&0xff;