2016-04-29 Fred Gleason <fredg@paravelsystems.com>

* Added a pointer offset argument to the 'RDWaveFile::createWave()'
	method in 'lib/rdwavefile.cpp' and 'lib/rdwavefile.h'.
This commit is contained in:
Fred Gleason 2016-04-29 17:15:20 -04:00
parent f8e6fc0629
commit e5b25668c0
5 changed files with 22 additions and 16 deletions

View File

@ -15113,3 +15113,6 @@
2016-04-29 Fred Gleason <fredg@paravelsystems.com>
* Fixed a regression in 'rdlibrary/audio_cart.cpp' that caused
marker data to be deleted when exporting a cut.
2016-04-29 Fred Gleason <fredg@paravelsystems.com>
* Added a pointer offset argument to the 'RDWaveFile::createWave()'
method in 'lib/rdwavefile.cpp' and 'lib/rdwavefile.h'.

View File

@ -1604,7 +1604,7 @@ RDAudioConvert::ErrorCode RDAudioConvert::Stage3Layer2Wav(SNDFILE *src_sf,
wave->setCartChunk(conv_dst_wavedata!=NULL);
wave->setLevlChunk(true);
unlink(dstfile);
if(!wave->createWave(conv_dst_wavedata)) {
if(!wave->createWave(conv_dst_wavedata,conv_start_point)) {
return RDAudioConvert::ErrorNoDestination;
}
@ -1797,7 +1797,7 @@ RDAudioConvert::ErrorCode RDAudioConvert::Stage3Pcm16(SNDFILE *src_sf,
wave->setLevlChunk(true);
sf_buffer=new int16_t[2048*src_sf_info->channels];
unlink(dstfile);
if(!wave->createWave(conv_dst_wavedata)) {
if(!wave->createWave(conv_dst_wavedata,conv_start_point)) {
return RDAudioConvert::ErrorNoDestination;
}
while((n=sf_readf_short(src_sf,sf_buffer,2048))>0) {
@ -1840,7 +1840,7 @@ RDAudioConvert::ErrorCode RDAudioConvert::Stage3Pcm24(SNDFILE *src_sf,
sf_buffer=new int[2048*src_sf_info->channels];
pcm24=new uint8_t[2048*src_sf_info->channels*sizeof(int)];
unlink(dstfile);
if(!wave->createWave(conv_dst_wavedata)) {
if(!wave->createWave(conv_dst_wavedata,conv_start_point)) {
return RDAudioConvert::ErrorNoDestination;
}
while((n=sf_readf_int(src_sf,sf_buffer,2048))>0) {

View File

@ -556,7 +556,7 @@ void RDImportAudio::Import()
settings.setAutotrimLevel(import_autotrim_spin->value());
}
import_import_conv->setDestinationSettings(&settings);
import_import_conv->setUseMetadata(false);
import_import_conv->setUseMetadata(import_in_metadata_box->isChecked());
*import_running=true;
import_import_aborted=false;
conv_err=import_import_conv->runImport(import_user->name(),import_user->password(),&audio_conv_err);

View File

@ -172,6 +172,7 @@ RDWaveFile::RDWaveFile(QString file_name)
atx_offset=0;
scot_chunk=false;
av10_chunk=false;
ptr_offset_msecs=0;
}
@ -492,11 +493,12 @@ bool RDWaveFile::openWave(RDWaveData *data)
}
bool RDWaveFile::createWave(RDWaveData *data)
bool RDWaveFile::createWave(RDWaveData *data,unsigned ptr_offset)
{
mode_t prev_mask;
bool rc;
wave_data=data;
ptr_offset_msecs=ptr_offset;
if(wave_data!=NULL) {
cart_title=wave_data->title();
cart_artist=wave_data->artist();
@ -545,7 +547,7 @@ bool RDWaveFile::createWave(RDWaveData *data)
write(wave_file.handle(),"fact\4\0\0\0\0\0\0\0",12);
}
if(cart_chunk) {
MakeCart();
MakeCart(ptr_offset);
WriteChunk(wave_file.handle(),"cart",cart_chunk_data,
CART_CHUNK_SIZE);
}
@ -709,7 +711,7 @@ void RDWaveFile::closeWave(int samples)
// Update Cart Chunk
//
if(cart_chunk) {
MakeCart();
MakeCart(ptr_offset_msecs);
WriteChunk(wave_file.handle(),"cart",cart_chunk_data,CART_CHUNK_SIZE);
}
@ -4075,7 +4077,7 @@ bool RDWaveFile::MakeFmt()
}
bool RDWaveFile::MakeCart()
bool RDWaveFile::MakeCart(unsigned ptr_offset)
{
for(int i=0;i<CART_CHUNK_SIZE;i++) {
cart_chunk_data[i]=0;
@ -4141,33 +4143,33 @@ bool RDWaveFile::MakeCart()
(wave_data->segueEndPos()>wave_data->segueStartPos())) {
sprintf((char *)cart_chunk_data+684+timer*MAX_TIMERS,"SEGs");
WriteDword(cart_chunk_data,688+timer*MAX_TIMERS,
FrameOffset(wave_data->segueStartPos()));
FrameOffset(wave_data->segueStartPos()-ptr_offset_msecs));
timer++;
sprintf((char *)cart_chunk_data+684+timer*MAX_TIMERS,"SEGe");
WriteDword(cart_chunk_data,688+timer*MAX_TIMERS,
FrameOffset(wave_data->segueEndPos()));
FrameOffset(wave_data->segueEndPos()-ptr_offset_msecs));
timer++;
}
if((wave_data->introStartPos()>=0)&&
(wave_data->introEndPos()>wave_data->introStartPos())) {
sprintf((char *)cart_chunk_data+684+timer*MAX_TIMERS,"INTs");
WriteDword(cart_chunk_data,688+timer*MAX_TIMERS,
FrameOffset(wave_data->introStartPos()));
FrameOffset(wave_data->introStartPos()-ptr_offset_msecs));
timer++;
sprintf((char *)cart_chunk_data+684+timer*MAX_TIMERS,"INTe");
WriteDword(cart_chunk_data,688+timer*MAX_TIMERS,
FrameOffset(wave_data->introEndPos()));
FrameOffset(wave_data->introEndPos()-ptr_offset_msecs));
timer++;
}
if((wave_data->startPos()>=0)&&
(wave_data->endPos()>wave_data->startPos())) {
sprintf((char *)cart_chunk_data+684+timer*MAX_TIMERS,"AUDs");
WriteDword(cart_chunk_data,688+timer*MAX_TIMERS,
FrameOffset(wave_data->startPos()));
FrameOffset(wave_data->startPos()-ptr_offset_msecs));
timer++;
sprintf((char *)cart_chunk_data+684+timer*MAX_TIMERS,"AUDe");
WriteDword(cart_chunk_data,688+timer*MAX_TIMERS,
FrameOffset(wave_data->endPos()));
FrameOffset(wave_data->endPos()-ptr_offset_msecs));
timer++;
}
}

View File

@ -157,7 +157,7 @@ class RDWaveFile
*
* Returns true if WAV file was created successfully, otherwise false.
**/
bool createWave(RDWaveData *data=NULL);
bool createWave(RDWaveData *data=NULL,unsigned ptr_offset=0);
/**
* Open the WAV file for playback. A WAV file name must first have
@ -1050,7 +1050,7 @@ class RDWaveFile
bool GetFlacStreamInfo();
void ReadFlacMetadata();
bool MakeFmt();
bool MakeCart();
bool MakeCart(unsigned ptr_offset);
bool MakeBext();
bool MakeMext();
bool MakeLevl();
@ -1091,6 +1091,7 @@ class RDWaveFile
unsigned head_emphasis; // De-emphasis
unsigned short head_flags; // MPEG header flags
unsigned long pts; // The MPEG PTS
unsigned ptr_offset_msecs;
RDWaveFile::MpegID mpeg_id;
int mpeg_frame_size;
bool id3v1_tag;