From e5b25668c03f9e39ce733023e18fd9adbaa75c26 Mon Sep 17 00:00:00 2001 From: Fred Gleason Date: Fri, 29 Apr 2016 17:15:20 -0400 Subject: [PATCH] 2016-04-29 Fred Gleason * Added a pointer offset argument to the 'RDWaveFile::createWave()' method in 'lib/rdwavefile.cpp' and 'lib/rdwavefile.h'. --- ChangeLog | 3 +++ lib/rdaudioconvert.cpp | 6 +++--- lib/rdimport_audio.cpp | 2 +- lib/rdwavefile.cpp | 22 ++++++++++++---------- lib/rdwavefile.h | 5 +++-- 5 files changed, 22 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index e7d7c17c..ab07fb1c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -15113,3 +15113,6 @@ 2016-04-29 Fred Gleason * Fixed a regression in 'rdlibrary/audio_cart.cpp' that caused marker data to be deleted when exporting a cut. +2016-04-29 Fred Gleason + * Added a pointer offset argument to the 'RDWaveFile::createWave()' + method in 'lib/rdwavefile.cpp' and 'lib/rdwavefile.h'. diff --git a/lib/rdaudioconvert.cpp b/lib/rdaudioconvert.cpp index 6678c2a7..6e75a820 100644 --- a/lib/rdaudioconvert.cpp +++ b/lib/rdaudioconvert.cpp @@ -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) { diff --git a/lib/rdimport_audio.cpp b/lib/rdimport_audio.cpp index 67d0766a..4dc85cef 100644 --- a/lib/rdimport_audio.cpp +++ b/lib/rdimport_audio.cpp @@ -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); diff --git a/lib/rdwavefile.cpp b/lib/rdwavefile.cpp index 4429bc76..8ef33dbf 100644 --- a/lib/rdwavefile.cpp +++ b/lib/rdwavefile.cpp @@ -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;isegueEndPos()>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++; } } diff --git a/lib/rdwavefile.h b/lib/rdwavefile.h index 2f516cca..3fddacf4 100644 --- a/lib/rdwavefile.h +++ b/lib/rdwavefile.h @@ -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;