Move more modern C++ idioms and use std::unique_ptr for moving data ownership around
This commit is contained in:
parent
d4b1e42b83
commit
a27dfe1feb
3 changed files with 31 additions and 16 deletions
|
@ -123,7 +123,11 @@ SGSoundSample * FLITEVoiceSynthesizer::synthesize(const std::string & text, doub
|
|||
ALsizei rate, count;
|
||||
if ( FALSE == Flite_HTS_Engine_synthesize_samples_mono16(_engine, text.c_str(), &data, &count, &rate)) return NULL;
|
||||
|
||||
return new SGSoundSample(&data,
|
||||
auto buf = std::unique_ptr<unsigned char, decltype(free)*>{
|
||||
reinterpret_cast<unsigned char*>( data ),
|
||||
free
|
||||
};
|
||||
return new SGSoundSample(buf,
|
||||
count * sizeof(short),
|
||||
rate,
|
||||
SG_SAMPLE_MONO16);
|
||||
|
|
|
@ -43,24 +43,32 @@ bool FGBeacon::init() {
|
|||
unsigned char *ptr;
|
||||
size_t i, len;
|
||||
|
||||
const unsigned char* inner_buf = (const unsigned char*)malloc( INNER_SIZE );
|
||||
const unsigned char* middle_buf = (const unsigned char*)malloc(MIDDLE_SIZE);
|
||||
const unsigned char* outer_buf = (const unsigned char*)malloc( OUTER_SIZE );
|
||||
auto inner_buf = std::unique_ptr<unsigned char, decltype(free)*>{
|
||||
reinterpret_cast<unsigned char*>( malloc( INNER_SIZE ) ),
|
||||
free
|
||||
};
|
||||
auto middle_buf = std::unique_ptr<unsigned char, decltype(free)*>{
|
||||
reinterpret_cast<unsigned char*>( malloc( MIDDLE_SIZE ) ),
|
||||
free
|
||||
};
|
||||
auto outer_buf = std::unique_ptr<unsigned char, decltype(free)*>{
|
||||
reinterpret_cast<unsigned char*>( malloc( OUTER_SIZE ) ),
|
||||
free
|
||||
};
|
||||
|
||||
// Make inner marker beacon sound
|
||||
len= (int)(INNER_DIT_LEN / 2.0 );
|
||||
unsigned char inner_dit[INNER_DIT_LEN];
|
||||
make_tone( inner_dit, INNER_FREQ, len, INNER_DIT_LEN,
|
||||
TRANSITION_BYTES );
|
||||
make_tone( inner_dit, INNER_FREQ, len, INNER_DIT_LEN, TRANSITION_BYTES );
|
||||
|
||||
ptr = (unsigned char*)inner_buf;
|
||||
ptr = inner_buf.get();
|
||||
for ( i = 0; i < 6; ++i ) {
|
||||
memcpy( ptr, inner_dit, INNER_DIT_LEN );
|
||||
ptr += INNER_DIT_LEN;
|
||||
}
|
||||
|
||||
try {
|
||||
inner = new SGSoundSample( &inner_buf, INNER_SIZE, BYTES_PER_SECOND );
|
||||
inner = new SGSoundSample( inner_buf, INNER_SIZE, BYTES_PER_SECOND );
|
||||
inner->set_reference_dist( 10.0 );
|
||||
inner->set_max_dist( 20.0 );
|
||||
|
||||
|
@ -75,12 +83,12 @@ bool FGBeacon::init() {
|
|||
make_tone( middle_dah, MIDDLE_FREQ, len, MIDDLE_DAH_LEN,
|
||||
TRANSITION_BYTES );
|
||||
|
||||
ptr = (unsigned char*)middle_buf;
|
||||
ptr = (unsigned char*)middle_buf.get();
|
||||
memcpy( ptr, middle_dit, MIDDLE_DIT_LEN );
|
||||
ptr += MIDDLE_DIT_LEN;
|
||||
memcpy( ptr, middle_dah, MIDDLE_DAH_LEN );
|
||||
|
||||
middle = new SGSoundSample( &middle_buf, MIDDLE_SIZE, BYTES_PER_SECOND);
|
||||
middle = new SGSoundSample( middle_buf, MIDDLE_SIZE, BYTES_PER_SECOND);
|
||||
middle->set_reference_dist( 10.0 );
|
||||
middle->set_max_dist( 20.0 );
|
||||
|
||||
|
@ -90,12 +98,12 @@ bool FGBeacon::init() {
|
|||
make_tone( outer_dah, OUTER_FREQ, len, OUTER_DAH_LEN,
|
||||
TRANSITION_BYTES );
|
||||
|
||||
ptr = (unsigned char*)outer_buf;
|
||||
ptr = (unsigned char*)outer_buf.get();
|
||||
memcpy( ptr, outer_dah, OUTER_DAH_LEN );
|
||||
ptr += OUTER_DAH_LEN;
|
||||
memcpy( ptr, outer_dah, OUTER_DAH_LEN );
|
||||
|
||||
outer = new SGSoundSample( &outer_buf, OUTER_SIZE, BYTES_PER_SECOND );
|
||||
outer = new SGSoundSample( outer_buf, OUTER_SIZE, BYTES_PER_SECOND );
|
||||
outer->set_reference_dist( 10.0 );
|
||||
outer->set_max_dist( 20.0 );
|
||||
} catch ( sg_io_exception &e ) {
|
||||
|
|
|
@ -190,10 +190,13 @@ SGSoundSample *FGMorse::make_ident( const std::string& id, const int freq ) {
|
|||
length += 2 * SPACE_SIZE;
|
||||
|
||||
// 2. Allocate space for the message
|
||||
const unsigned char* buffer = (const unsigned char *)malloc(length);
|
||||
auto buffer = std::unique_ptr<unsigned char, decltype(free)*>{
|
||||
reinterpret_cast<unsigned char*>( malloc( length ) ),
|
||||
free
|
||||
};
|
||||
|
||||
// 3. Assemble the message;
|
||||
unsigned char *buf_ptr = (unsigned char*)buffer;
|
||||
unsigned char *buf_ptr = buffer.get();
|
||||
|
||||
for ( i = 0; i < (int)id.length(); ++i ) {
|
||||
if ( idptr[i] >= 'A' && idptr[i] <= 'Z' ) {
|
||||
|
@ -232,7 +235,7 @@ SGSoundSample *FGMorse::make_ident( const std::string& id, const int freq ) {
|
|||
buf_ptr += SPACE_SIZE;
|
||||
|
||||
// 4. create the simple sound and return
|
||||
SGSoundSample *sample = new SGSoundSample( &buffer, length,
|
||||
SGSoundSample *sample = new SGSoundSample( buffer, length,
|
||||
BYTES_PER_SECOND );
|
||||
|
||||
sample->set_reference_dist( 10.0 );
|
||||
|
|
Loading…
Reference in a new issue