]> git.mxchange.org Git - flightgear.git/blobdiff - src/Sound/beacon.cxx
Merge branch 'next' of D:\Git_New\flightgear into next
[flightgear.git] / src / Sound / beacon.cxx
index ddc8750b0f828e60b17a6a068f916e71e5fbe444..f722891892b7012bf3a230e8bcef0476fbba0a0b 100644 (file)
 //
 // 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 <stdlib.h>
+#include <cstring>
+
 #include "beacon.hxx"
 
+#include <simgear/structure/exception.hxx>
 
 // constructor
-FGBeacon::FGBeacon() :
-    inner(NULL),
-    middle(NULL),
-    outer(NULL)
+FGBeacon::FGBeacon()
 {
 }
 
 // destructor
 FGBeacon::~FGBeacon() {
-    delete inner;
-    delete middle;
-    delete outer;
 }
 
 
 // allocate and initialize sound samples
 bool FGBeacon::init() {
-    int i;
-    int len;
     unsigned char *ptr;
+    size_t i, len;
 
-    unsigned char inner_buf[ INNER_SIZE ] ;
-    unsigned char middle_buf[ MIDDLE_SIZE ] ;
-    unsigned char outer_buf[ OUTER_SIZE ] ;
+    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 );
@@ -56,50 +53,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;
 }