1
0
Fork 0

Play the full 4x VOR and 1x DME morse ident sequence at 30 second intervals.

When you tune into a station start at a "random" point in the sequence.
Sped up the words per minute to 13 to which means one sequence per about 4 secs.
This means we get through the whole sequence in about 20 seconds leaving 10
seconds of silence.
This commit is contained in:
curt 2001-03-09 23:35:21 +00:00
parent 55e881b83d
commit 6e91c958e3
3 changed files with 108 additions and 15 deletions

View file

@ -21,6 +21,8 @@
// $Id$
#include <simgear/math/sg_random.h>
#include <Aircraft/aircraft.hxx>
#include <Main/bfi.hxx>
#include <Navaids/ilslist.hxx>
@ -29,6 +31,10 @@
#include "radiostack.hxx"
static int nav1_play_count = 0;
static time_t nav1_last_time = 0;
/**
* Boy, this is ugly! Make the VOR range vary by altitude difference.
*/
@ -257,16 +263,34 @@ FGRadioStack::update()
// play station ident via audio system if on + ident,
// otherwise turn it off
if ( nav1_on_btn && nav1_ident_btn ) {
if ( ! globals->get_soundmgr()->is_playing( "nav1-ident" ) ) {
globals->get_soundmgr()->play_once( "nav1-ident" );
if ( nav1_last_time <
globals->get_time_params()->get_cur_time() - 30 ) {
nav1_last_time = globals->get_time_params()->get_cur_time();
nav1_play_count = 0;
}
if ( nav1_play_count < 4 ) {
// play VOR ident
if ( !globals->get_soundmgr()->is_playing("nav1-vor-ident") ) {
globals->get_soundmgr()->play_once( "nav1-vor-ident" );
++nav1_play_count;
}
} else if ( nav1_play_count < 5 ) {
// play DME ident
if ( !globals->get_soundmgr()->is_playing("nav1-vor-ident") &&
!globals->get_soundmgr()->is_playing("nav1-dme-ident") ) {
globals->get_soundmgr()->play_once( "nav1-dme-ident" );
++nav1_play_count;
}
}
} else {
globals->get_soundmgr()->stop( "nav1-ident" );
globals->get_soundmgr()->stop( "nav1-vor-ident" );
globals->get_soundmgr()->stop( "nav1-dme-ident" );
}
} else {
nav1_inrange = false;
nav1_dme_dist = 0.0;
globals->get_soundmgr()->stop( "nav1-ident" );
globals->get_soundmgr()->stop( "nav1-vor-ident" );
globals->get_soundmgr()->stop( "nav1-dme-ident" );
// cout << "not picking up vor. :-(" << endl;
}
@ -385,12 +409,28 @@ void FGRadioStack::search()
nav1_dme_y = ils.get_dme_y();
nav1_dme_z = ils.get_dme_z();
if ( globals->get_soundmgr()->exists( "nav1-ident" ) ) {
globals->get_soundmgr()->remove( "nav1-ident" );
if ( globals->get_soundmgr()->exists( "nav1-vor-ident" ) ) {
globals->get_soundmgr()->remove( "nav1-vor-ident" );
}
FGSimpleSound *sound = morse.make_ident( nav1_ident );
FGSimpleSound *sound;
sound = morse.make_ident( nav1_ident, LO_FREQUENCY );
sound->set_volume( 0.3 );
globals->get_soundmgr()->add( sound, "nav1-ident" );
globals->get_soundmgr()->add( sound, "nav1-vor-ident" );
if ( globals->get_soundmgr()->exists( "nav1-dme-ident" ) ) {
globals->get_soundmgr()->remove( "nav1-dme-ident" );
}
sound = morse.make_ident( nav1_ident, HI_FREQUENCY );
sound->set_volume( 0.3 );
globals->get_soundmgr()->add( sound, "nav1-dme-ident" );
int offset = (int)(sg_random() * 30.0);
nav1_play_count = offset / 4;
nav1_last_time = globals->get_time_params()->get_cur_time() -
offset;
cout << "offset = " << offset << " play_count = " << nav1_play_count
<< " nav1_last_time = " << nav1_last_time << " current time = "
<< globals->get_time_params()->get_cur_time() << endl;
// cout << "Found an ils station in range" << endl;
// cout << " id = " << ils.get_locident() << endl;
@ -415,12 +455,28 @@ void FGRadioStack::search()
nav1_y = nav1_dme_y = nav.get_y();
nav1_z = nav1_dme_z = nav.get_z();
if ( globals->get_soundmgr()->exists( "nav1-ident" ) ) {
globals->get_soundmgr()->remove( "nav1-ident" );
if ( globals->get_soundmgr()->exists( "nav1-vor-ident" ) ) {
globals->get_soundmgr()->remove( "nav1-vor-ident" );
}
FGSimpleSound *sound = morse.make_ident( nav1_ident );
FGSimpleSound *sound;
sound = morse.make_ident( nav1_ident, LO_FREQUENCY );
sound->set_volume( 0.3 );
globals->get_soundmgr()->add( sound, "nav1-ident" );
globals->get_soundmgr()->add( sound, "nav1-vor-ident" );
if ( globals->get_soundmgr()->exists( "nav1-dme-ident" ) ) {
globals->get_soundmgr()->remove( "nav1-dme-ident" );
}
sound = morse.make_ident( nav1_ident, HI_FREQUENCY );
sound->set_volume( 0.3 );
globals->get_soundmgr()->add( sound, "nav1-dme-ident" );
int offset = (int)(sg_random() * 30.0);
nav1_play_count = offset / 4;
nav1_last_time = globals->get_time_params()->get_cur_time() -
offset;
cout << "offset = " << offset << " play_count = " << nav1_play_count
<< " nav1_last_time = " << nav1_last_time << " current time = "
<< globals->get_time_params()->get_cur_time() << endl;
// cout << "Found a vor station in range" << endl;
// cout << " id = " << nav.get_ident() << endl;
@ -430,7 +486,8 @@ void FGRadioStack::search()
nav1_ident = "";
nav1_radial = 0;
nav1_dme_dist = 0;
globals->get_soundmgr()->remove( "nav1-ident" );
globals->get_soundmgr()->remove( "nav1-vor-ident" );
globals->get_soundmgr()->remove( "nav1-dme-ident" );
// cout << "not picking up vor1. :-(" << endl;
}

View file

@ -174,6 +174,42 @@ bool FGMorse::init() {
lo_dah[ i ] = (unsigned char) ( 0.5 * 255.0 ) ;
}
// Make High DAH
for ( i = 0; i < TRANSITION_BYTES; ++i ) {
float level = ( sin( (double) i * 2.0 * M_PI
/ (8000.0 / HI_FREQUENCY) ) )
* ((double)i / TRANSITION_BYTES) / 2.0 + 0.5;
/* Convert to unsigned byte */
hi_dah[ i ] = (unsigned char) ( level * 255.0 ) ;
}
for ( i = TRANSITION_BYTES;
i < DAH_SIZE - TRANSITION_BYTES - COUNT_SIZE;
++i ) {
float level = ( sin( (double) i * 2.0 * M_PI
/ (8000.0 / HI_FREQUENCY) ) )
/ 2.0 + 0.5;
/* Convert to unsigned byte */
hi_dah[ i ] = (unsigned char) ( level * 255.0 ) ;
}
j = TRANSITION_BYTES;
for ( int i = DAH_SIZE - TRANSITION_BYTES - COUNT_SIZE;
i < DAH_SIZE - COUNT_SIZE;
++i ) {
float level = ( sin( (double) i * 2.0 * M_PI
/ (8000.0 / HI_FREQUENCY) ) )
* ((double)j / TRANSITION_BYTES) / 2.0 + 0.5;
--j;
/* Convert to unsigned byte */
hi_dah[ i ] = (unsigned char) ( level * 255.0 ) ;
}
for ( int i = DAH_SIZE - COUNT_SIZE; i < DAH_SIZE; ++i ) {
hi_dah[ i ] = (unsigned char) ( 0.5 * 255.0 ) ;
}
// Make SPACE
for ( int i = 0; i < SPACE_SIZE; ++i ) {
space[ i ] = (unsigned char) ( 0.5 * 255 ) ;

View file

@ -90,8 +90,8 @@ static const char DAH = '2';
static const char end = '0';
static const int BYTES_PER_SECOND = 8000;
static const int BEAT_LENGTH = 240; // milleseconds (5 wpm)
// static const int BEAT_LENGTH = 92; // milleseconds (13 wpm)
// static const int BEAT_LENGTH = 240; // milleseconds (5 wpm)
static const int BEAT_LENGTH = 92; // milleseconds (13 wpm)
static const int TRANSITION_BYTES = (int)(0.005 * BYTES_PER_SECOND);
static const int COUNT_SIZE = BYTES_PER_SECOND * BEAT_LENGTH / 1000;
static const int DIT_SIZE = 2 * COUNT_SIZE; // 2 counts