]> git.mxchange.org Git - flightgear.git/blob - src/Main/morse.cxx
Added beginnings of a morse code sound clip manager.
[flightgear.git] / src / Main / morse.cxx
1 // morse.cxx -- Morse code generation class
2 //
3 // Written by Curtis Olson, started March 2001.
4 //
5 // Copyright (C) 2001  Curtis L. Olson - curt@flightgear.org
6 //
7 // This program is free software; you can redistribute it and/or
8 // modify it under the terms of the GNU General Public License as
9 // published by the Free Software Foundation; either version 2 of the
10 // License, or (at your option) any later version.
11 //
12 // This program is distributed in the hope that it will be useful, but
13 // WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 // General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with this program; if not, write to the Free Software
19 // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 //
21 // $Id$
22
23
24 #include "morse.hxx"
25
26
27 // constructor
28 FGMorse::FGMorse() {
29 }
30
31 // destructor
32 FGMorse::~FGMorse() {
33 }
34
35
36 // allocate and initialize sound samples
37 bool FGMorse::init() {
38     int i, j;
39
40     // Make DIT
41     unsigned char dit[ DIT_SIZE ] ;
42     for ( i = 0; i < TRANSITION_BYTES; ++i ) {
43         float level = ( sin( (double) i * 2.0 * M_PI / (8000.0 / FREQUENCY)) )
44             * ((double)i / TRANSITION_BYTES) / 2.0 + 0.5;
45
46         /* Convert to unsigned byte */
47         dit[ i ] = (unsigned char) ( level * 255.0 ) ;
48     }
49
50     for ( i = TRANSITION_BYTES;
51           i < DIT_SIZE - TRANSITION_BYTES - COUNT_SIZE; ++i ) {
52         float level = ( sin( (double) i * 2.0 * M_PI / (8000.0 / FREQUENCY) ) )
53             / 2.0 + 0.5;
54
55         /* Convert to unsigned byte */
56         dit[ i ] = (unsigned char) ( level * 255.0 ) ;
57     }
58     j = TRANSITION_BYTES;
59     for ( i = DIT_SIZE - TRANSITION_BYTES - COUNT_SIZE;
60           i < DIT_SIZE - COUNT_SIZE;
61           ++i ) {
62         float level = ( sin( (double) i * 2.0 * M_PI / (8000.0 / FREQUENCY) ) )
63             * ((double)j / TRANSITION_BYTES) / 2.0 + 0.5;
64         --j;
65
66         /* Convert to unsigned byte */
67         dit[ i ] = (unsigned char) ( level * 255.0 ) ;
68     }
69     for ( i = DIT_SIZE - COUNT_SIZE; i < DIT_SIZE; ++i ) {
70         dit[ i ] = (unsigned char) ( 0.5 * 255.0 ) ;
71     }
72
73     // Make DAH
74     unsigned char dah[ DAH_SIZE ] ;
75     for ( i = 0; i < TRANSITION_BYTES; ++i ) {
76         float level = ( sin( (double) i * 2.0 * M_PI / (8000.0 / FREQUENCY) ) )
77             * ((double)i / TRANSITION_BYTES) / 2.0 + 0.5;
78
79         /* Convert to unsigned byte */
80         dah[ i ] = (unsigned char) ( level * 255.0 ) ;
81     }
82
83     for ( i = TRANSITION_BYTES;
84           i < DAH_SIZE - TRANSITION_BYTES - COUNT_SIZE;
85           ++i ) {
86         float level = ( sin( (double) i * 2.0 * M_PI / (8000.0 / FREQUENCY) ) )
87             / 2.0 + 0.5;
88
89         /* Convert to unsigned byte */
90         dah[ i ] = (unsigned char) ( level * 255.0 ) ;
91     }
92     j = TRANSITION_BYTES;
93     for ( int i = DAH_SIZE - TRANSITION_BYTES - COUNT_SIZE;
94           i < DAH_SIZE - COUNT_SIZE;
95           ++i ) {
96         float level = ( sin( (double) i * 2.0 * M_PI / (8000.0 / FREQUENCY) ) )
97             * ((double)j / TRANSITION_BYTES) / 2.0 + 0.5;
98         --j;
99
100         /* Convert to unsigned byte */
101         dah[ i ] = (unsigned char) ( level * 255.0 ) ;
102     }
103     for ( int i = DAH_SIZE - COUNT_SIZE; i < DAH_SIZE; ++i ) {
104         dah[ i ] = (unsigned char) ( 0.5 * 255.0 ) ;
105     }
106
107     // Make SPACE
108     for ( int i = 0; i < SPACE_SIZE; ++i ) {
109         space[ i ] = (unsigned char) ( 0.5 * 255 ) ;
110     }
111
112     return true;
113 }