23#include <simgear/constants.h>
27#include <simgear/sound/sample.hxx>
33static const char DI =
'1';
34static const char DIT =
'1';
35static const char DA =
'2';
36static const char DAH =
'2';
37static const char END =
'0';
112 space[
i ] = (
unsigned char) ( 0.5 * 255 ) ;
120bool FGMorse::cust_init(
const int freq ) {
133 space[
i ] = (
unsigned char) ( 0.5 * 255 ) ;
143 char *idptr = (
char *)
id.c_str();
150 unsigned char *dit_ptr, *dah_ptr;
165 for (
i = 0;
i < (int)
id.length(); ++
i ) {
166 if ( idptr[
i] >=
'A' && idptr[
i] <=
'Z' ) {
167 int c = (int)(idptr[
i] -
'A');
168 for ( j = 0; j < 4 &&
alphabet[c][j] !=
END; ++j ) {
176 }
else if ( idptr[
i] >=
'0' && idptr[
i] <=
'9' ) {
177 int c = (int)(idptr[
i] -
'0');
178 for ( j = 0; j < 5; ++j) {
194 auto buffer = std::unique_ptr<
unsigned char,
decltype(free)*>{
195 reinterpret_cast<unsigned char*
>( malloc( length ) ),
200 unsigned char *buf_ptr = buffer.get();
202 for (
i = 0;
i < (int)
id.length(); ++
i ) {
203 if ( idptr[
i] >=
'A' && idptr[
i] <=
'Z' ) {
204 int c = (int)(idptr[
i] -
'A');
205 for ( j = 0; j < 4 &&
alphabet[c][j] !=
END; ++j ) {
207 memcpy( buf_ptr, dit_ptr,
DIT_SIZE );
210 memcpy( buf_ptr, dah_ptr,
DAH_SIZE );
216 }
else if ( idptr[
i] >=
'0' && idptr[
i] <=
'9' ) {
217 int c = (int)(idptr[
i] -
'0');
218 for ( j = 0; j < 5; ++j ) {
220 memcpy( buf_ptr, dit_ptr,
DIT_SIZE );
223 memcpy( buf_ptr, dah_ptr,
DAH_SIZE );
239 SGSoundSample *sample =
new SGSoundSample( std::move(buffer), length,
242 sample->set_reference_dist( 10.0 );
243 sample->set_max_dist( 20.0 );
248FGMorse * FGMorse::_instance = NULL;
252 if( _instance == NULL ) {
static const int LO_FREQUENCY
SGSoundSample * make_ident(const std::string &id, const int freq=LO_FREQUENCY)
static const int BYTES_PER_SECOND
static const int SPACE_SIZE
static const int COUNT_SIZE
static const int DAH_SIZE
static const int TRANSITION_BYTES
static const int DIT_SIZE
static const int HI_FREQUENCY
static FGMorse * instance()
static void make_tone(unsigned char *buf, int freq, int len, int total_len, int trans_len)
Make a tone of specified freq and total_len with trans_len ramp in and out and only the first len byt...
static const char numerals[10][5]
static const char alphabet[26][4]