Subversion Repositories Projects

Rev

Rev 493 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
206 ligi 1
/******************************************
2
 *
3
 * Voice output for MK
4
 *                      
5
 * Author:        Marcus -LiGi- Bueschleb
6
 *
7
 *******************************************/
8
 
382 ligi 9
//public class MKStatusVoice {}
10
 
206 ligi 11
import javax.microedition.media.*;
12
import javax.microedition.media.control.*;
13
import java.util.*;
14
import java.io.*;
15
 
16
 
17
public class MKStatusVoice
18
    implements Runnable,PlayerListener
19
{
20
 
21
    DUBwiseCanvas canvas=null;
22
    Player player;
382 ligi 23
 
24
    Player up_player;
25
    Player down_player;
206 ligi 26
 
27
    public final int PLAYERSTATE_IDLE=0;
28
    public final int PLAYERSTATE_PLAYING=1;
29
    public final int PLAYERSTATE_FIN=2;
30
 
229 ligi 31
 
32
    public int volume=100;
33
    public int delay=5;
34
 
206 ligi 35
    int act_player_state=PLAYERSTATE_IDLE;
36
    VolumeControl vc;
37
 
382 ligi 38
    public MKStatusVoice(DUBwiseCanvas _canvas)
206 ligi 39
    {
40
        canvas=_canvas;
382 ligi 41
 
206 ligi 42
        new Thread( this ).start(); // fire up main Thread 
43
    }
44
 
45
    public void playerUpdate(Player player,  String event, Object data)
46
    {
47
      if(event == PlayerListener.END_OF_MEDIA) {
48
          try {
49
              defplayer();
50
          }
51
          catch(MediaException me) {      }
52
          act_player_state=PLAYERSTATE_FIN;
53
          player=null;
54
 
55
      }
56
    }
57
 
58
    void defplayer() throws MediaException {
59
      if (player != null) {
60
         if(player.getState() == Player.STARTED) {
61
            player.stop();
62
         }
63
         if(player.getState() == Player.PREFETCHED) {
64
            player.deallocate();
65
         }
66
         if(player.getState() == Player.REALIZED ||   player.getState() == Player.UNREALIZED) {
67
           player.close();
68
         }
69
      }
70
      player = null;
71
    }
72
 
73
 
382 ligi 74
    public Player init_player(String name)
206 ligi 75
    {
382 ligi 76
        Player _player=null;
206 ligi 77
        try {
78
 
79
            try {
382 ligi 80
                _player = Manager.createPlayer(getClass().getResourceAsStream(name+".mp3"), "audio/mp3");
206 ligi 81
            }
82
            catch (Exception e)  {
382 ligi 83
                _player = Manager.createPlayer(getClass().getResourceAsStream(name+".wav"), "audio/x-wav");
206 ligi 84
            }
382 ligi 85
            _player.addPlayerListener(this);
86
            _player.realize();
206 ligi 87
 
88
 
382 ligi 89
            vc = (VolumeControl) _player.getControl("VolumeControl");
90
            if(vc != null) {
91
                vc.setLevel(volume);
92
            }
93
 
94
            _player.prefetch();
95
            _player.setLoopCount(1);
96
            _player.start();   
206 ligi 97
        }
98
        catch (Exception e)  {
99
 
100
        }      
382 ligi 101
        return _player;
102
 
206 ligi 103
    }
382 ligi 104
 
105
    public void play_up()
106
    {
107
 
108
        try {
493 ligi 109
 
382 ligi 110
            if (up_player==null)
111
                up_player=init_player("up");
112
 
113
 
114
            up_player.start(); 
493 ligi 115
            act_player_state=PLAYERSTATE_PLAYING;
382 ligi 116
        }
117
        catch (Exception e)  {
118
 
119
        }      
120
    }
121
 
122
 
123
    public void play_down()
124
    {
125
        try {
126
            if (down_player==null)
127
                down_player=init_player("down");
128
            down_player.start();       
493 ligi 129
            act_player_state=PLAYERSTATE_PLAYING;
382 ligi 130
        }
131
        catch (Exception e)  {
132
 
133
        }      
134
    }
517 ligi 135
 
136
 
137
    public boolean play(String what)
382 ligi 138
    {
139
 
517 ligi 140
        // start play
382 ligi 141
        try {
142
            act_player_state=PLAYERSTATE_PLAYING;
517 ligi 143
            player=init_player(what);
382 ligi 144
            player.start();    
145
        }
146
        catch (Exception e)  {
517 ligi 147
            act_player_state=PLAYERSTATE_FIN;
382 ligi 148
        }      
517 ligi 149
 
150
        // wait for end
206 ligi 151
        while (act_player_state!=PLAYERSTATE_FIN)
152
            {
153
                try { Thread.sleep(5); }
154
                catch (Exception e)  {   }
155
            }
156
 
517 ligi 157
 
158
        return true;
206 ligi 159
    }
160
 
517 ligi 161
    // play number
162
    public void play(int what)
163
    {
164
 
165
        if (what==0)
166
            {
167
                play("0");
168
                return;
169
            }
170
 
171
        if (((what/1000)%10)!=0)
172
            {
173
                play((what/1000)%10);
174
                play("thousand");
175
                what%=1000;
176
            }
177
 
178
 
179
        if (((what/100)%10)!=0)
180
            {
181
                play((what/100)%10);
182
                play("hundred");
183
                what%=100;
184
 
185
            }
186
 
187
 
188
 
189
 
190
 
191
        if (what<20)
192
            {
193
 
194
                if (what<13)
195
                    {
196
                        if(what!=0)
197
                            play(""+what);
198
                    }
199
                else
200
                     {
201
                         switch (what%10)
202
                             {
203
                             case 3:
204
                                 play("thir");
205
                                 break;
206
                             case 5:
207
                                 play("fiv");
208
                                 break;
209
                             default:
210
                                 play (""+what%10);
211
                             }
212
                         play("teen");
213
                     }
214
            }
215
        else
216
            {
217
 
218
                switch (what/10)
219
                    {
220
 
221
                    case 2:
222
                        play("twen");
223
                        break;
224
                    case 3:
225
                        play("thir");
226
                        break;
227
                    case 5:
228
                        play("fiv");
229
                        break;
230
                    default:
231
                        play (""+what/10);
232
                    }
233
                play("ty");
234
                if ((what%10)!=0)
235
                    play (what%10);
236
            }
237
 
238
 
239
 }
240
 
241
 
242
 
243
 
206 ligi 244
    int info_from_debug_set=-1;
265 ligi 245
    int volt_timeout=0;
246
 
382 ligi 247
    public int BASE_SLEEP=10;
248
 
265 ligi 249
    public int last_alt=-1;
250
 
382 ligi 251
 
252
    public int loop_cnt;
253
    public int volts_play_cnt;
254
 
517 ligi 255
    boolean conn_told=false;
256
    boolean disconn_told=true;
257
    boolean sender_warning_told=false;
258
 
259
 
206 ligi 260
    public void run()
261
    {
517 ligi 262
 
263
 
206 ligi 264
        while(true)
265
            {
382 ligi 266
                loop_cnt++;
517 ligi 267
                if ((canvas.mk!=null)&&(canvas.settings.do_sound))
206 ligi 268
                    {
517 ligi 269
 
270
                        if ((canvas.mk.connected)&&(!canvas.mk.force_disconnect))
271
                            {
272
                        if (!conn_told)
273
                            {
274
                                if (canvas.mk.version.known)
206 ligi 275
                                    {
517 ligi 276
                                        play("connected");
277
                                        play("to");
278
                                        play("mikrokopter");
279
                                        play("version");
280
 
281
                                        play(canvas.mk.version.major);
282
                                        play("point");
283
                                        play(canvas.mk.version.minor);
284
                                        play("established");
285
                                        conn_told=true;
286
                                        disconn_told=false;
287
                                    }
288
                            }
289
                        else
290
                            {
382 ligi 291
 
517 ligi 292
 
293
                                if ((canvas.mk.SenderOkay()<1))
294
                                    {
295
                                        if (!sender_warning_told)
265 ligi 296
                                            {
517 ligi 297
                                                play("warning");
298
                                                play("rc-signal");
299
                                                play("lost");
300
                                                sender_warning_told=true;
265 ligi 301
                                            }
206 ligi 302
                                    }
517 ligi 303
                                else
304
                                    sender_warning_told=false;
265 ligi 305
 
306
 
517 ligi 307
                                if ((canvas.mk.AngleNick()>400)||(canvas.mk.AngleRoll()>400)||(canvas.mk.AngleNick()<-400)||(canvas.mk.AngleRoll()<-400))
265 ligi 308
                                    {
517 ligi 309
                                        play("tilt");
310
                                        play("warning");
311
                                    }
269 ligi 312
 
517 ligi 313
                                volt_timeout--;
265 ligi 314
 
517 ligi 315
                                if (info_from_debug_set!=canvas.mk.stats.debug_data_count)
316
                                    { // only when newdata
317
 
318
 
319
                                        if (canvas.settings.do_volts_sound&&(volt_timeout<0))
265 ligi 320
                                            {
517 ligi 321
                                                play("battery");
322
                                                play("at");
323
                                                volts_play_cnt++;
324
 
325
                                                volt_timeout=(delay*1000)/BASE_SLEEP;
326
                                                int ubatt=canvas.mk.UBatt();
327
                                                info_from_debug_set=canvas.mk.stats.debug_data_count;
328
                                                play((ubatt/10));
329
 
330
                                                if((ubatt%10)!=0)
331
                                                    {
332
                                                        play("point");
333
                                                        play((ubatt%10));
334
 
335
                                                    }
336
                                                play("volts");
337
 
338
 
339
                                                play("altitude");
340
 
341
                                                play( canvas.mk.Alt()/10);
342
                                                play("point");
343
                                                play( canvas.mk.Alt()%10);
344
                                                play("meter");
345
 
346
 
347
                                                if ((canvas.mk.stats.flying_time()!=0))
348
                                                    {
349
                                                        play("flight");
350
                                                        play("time");
351
                                                        switch (canvas.mk.stats.flying_time()/60)
352
                                                            {
353
                                                            case 0:
354
                                                            case 1:
355
                                                                play("1");
356
                                                                play("minute");
357
                                                                break;
358
                                                            default:
359
                                                                play(canvas.mk.stats.flying_time()/60);
360
                                                                play("minutes");
361
                                                            }
362
 
363
                                                        switch (canvas.mk.stats.flying_time()%60)
364
                                                            {
365
                                                            case 0:
366
                                                                //                                                          case 1:
367
                                                                //                                                              play("1");
368
                                                                break;
369
                                                            default:
370
                                                                play(canvas.mk.stats.flying_time()%60);
371
                                                                play("minutes");
372
                                                            }
373
 
374
 
375
 
376
                                                    }
265 ligi 377
                                            }
517 ligi 378
 
379
 
380
 
381
                                        if (canvas.settings.do_altimeter_sound)
265 ligi 382
                                            {
517 ligi 383
                                                if (last_alt==-1) last_alt=canvas.mk.Alt();
384
 
385
 
386
                                                if (last_alt>canvas.mk.Alt()+canvas.settings.altsteps)
387
                                                    {
388
                                                        play("down");
389
 
390
                                                        last_alt-=canvas.settings.altsteps;
391
                                                    }
392
                                                if (last_alt<canvas.mk.Alt()-canvas.settings.altsteps)
393
 
394
                                                    {
395
                                                        play("up");
396
 
397
                                                        last_alt+=canvas.settings.altsteps;
398
                                                    }
265 ligi 399
                                            }
517 ligi 400
                                        else
401
                                            last_alt=-1;
265 ligi 402
                                    }
206 ligi 403
                            }
517 ligi 404
                            }
405
                        else
406
                            {
407
                                if (!disconn_told)
408
                                    play("disconnected");
409
                                conn_told=false;
410
                                disconn_told=true;
411
 
412
                            }
206 ligi 413
                    }
414
 
265 ligi 415
                try {
382 ligi 416
                    Thread.sleep(BASE_SLEEP);
417
 
418
                    //if (delay<1)
419
                    //  Thread.sleep(1000); 
420
                    //else
421
                    //  Thread.sleep(delay*1000); 
422
 
229 ligi 423
                }
206 ligi 424
                catch (Exception e)  {   }
425
 
426
            }
427
    }
428
 
429
 
430
 
431
}
382 ligi 432