X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FSound%2Fbeacon.cxx;h=4505017c93da03183788ebd3b2dbbf60b44b96b4;hb=8b57675aef4930245a964816469be922e3004287;hp=24424c14a033ce8e4ad68addbaa1f96bcdfd3539;hpb=dd4d116e00ef2485191e058d29415e4a372b9195;p=flightgear.git diff --git a/src/Sound/beacon.cxx b/src/Sound/beacon.cxx index 24424c14a..4505017c9 100644 --- a/src/Sound/beacon.cxx +++ b/src/Sound/beacon.cxx @@ -2,7 +2,7 @@ // // Written by Curtis Olson, started March 2001. // -// Copyright (C) 2001 Curtis L. Olson - curt@flightgear.org +// Copyright (C) 2001 Curtis L. Olson - http://www.flightgear.org/~curt // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as @@ -16,16 +16,20 @@ // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // // $Id$ +#include + #include "beacon.hxx" +#include // constructor -FGBeacon::FGBeacon() { +FGBeacon::FGBeacon() +{ } // destructor @@ -35,9 +39,12 @@ FGBeacon::~FGBeacon() { // allocate and initialize sound samples bool FGBeacon::init() { - int i; - int len; 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 ); // Make inner marker beacon sound len= (int)(INNER_DIT_LEN / 2.0 ); @@ -45,50 +52,54 @@ bool FGBeacon::init() { make_tone( inner_dit, INNER_FREQ, len, INNER_DIT_LEN, TRANSITION_BYTES ); - ptr = inner_buf; + ptr = (unsigned char*)inner_buf; for ( i = 0; i < 6; ++i ) { memcpy( ptr, inner_dit, INNER_DIT_LEN ); ptr += INNER_DIT_LEN; } - inner = new SGSoundSample( inner_buf, INNER_SIZE, BYTES_PER_SECOND ); - inner->set_reference_dist( 10.0 ); - inner->set_max_dist( 20.0 ); - - // Make middle marker beacon sound - len= (int)(MIDDLE_DIT_LEN / 2.0 ); - unsigned char middle_dit[MIDDLE_DIT_LEN]; - make_tone( middle_dit, MIDDLE_FREQ, len, MIDDLE_DIT_LEN, - TRANSITION_BYTES ); - - len= (int)(MIDDLE_DAH_LEN * 3 / 4.0 ); - unsigned char middle_dah[MIDDLE_DAH_LEN]; - make_tone( middle_dah, MIDDLE_FREQ, len, MIDDLE_DAH_LEN, - TRANSITION_BYTES ); - - ptr = middle_buf; - 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->set_reference_dist( 10.0 ); - middle->set_max_dist( 20.0 ); - - // Make outer marker beacon sound - len= (int)(OUTER_DAH_LEN * 3.0 / 4.0 ); - unsigned char outer_dah[OUTER_DAH_LEN]; - make_tone( outer_dah, OUTER_FREQ, len, OUTER_DAH_LEN, - TRANSITION_BYTES ); - - ptr = outer_buf; - 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->set_reference_dist( 10.0 ); - outer->set_max_dist( 20.0 ); + try { + inner = new SGSoundSample( &inner_buf, INNER_SIZE, BYTES_PER_SECOND ); + inner->set_reference_dist( 10.0 ); + inner->set_max_dist( 20.0 ); + + // Make middle marker beacon sound + len= (int)(MIDDLE_DIT_LEN / 2.0 ); + unsigned char middle_dit[MIDDLE_DIT_LEN]; + make_tone( middle_dit, MIDDLE_FREQ, len, MIDDLE_DIT_LEN, + TRANSITION_BYTES ); + + len= (int)(MIDDLE_DAH_LEN * 3 / 4.0 ); + unsigned char middle_dah[MIDDLE_DAH_LEN]; + make_tone( middle_dah, MIDDLE_FREQ, len, MIDDLE_DAH_LEN, + TRANSITION_BYTES ); + + ptr = (unsigned char*)middle_buf; + 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->set_reference_dist( 10.0 ); + middle->set_max_dist( 20.0 ); + + // Make outer marker beacon sound + len= (int)(OUTER_DAH_LEN * 3.0 / 4.0 ); + unsigned char outer_dah[OUTER_DAH_LEN]; + make_tone( outer_dah, OUTER_FREQ, len, OUTER_DAH_LEN, + TRANSITION_BYTES ); + + ptr = (unsigned char*)outer_buf; + 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->set_reference_dist( 10.0 ); + outer->set_max_dist( 20.0 ); + } catch ( sg_io_exception &e ) { + SG_LOG(SG_GENERAL, SG_ALERT, e.getFormattedMessage()); + } return true; }