Hello,
I've made such patch to decode termites hammering into morse.
It uses the process described by andy, and datastructure for storing
characters, it could also now be done with [text]
I've made a version where [env] testes if there is sound amplitude or not,
and compare with templates stored into datastructure.
Attached is that version that should work with mjlib/morse and latest
pd-vanilla.
Best,
patco
Le 15/06/2016 à 15:34, Andy Farnell a écrit :
Yes did that once, but I lost it years ago (the
patch I mean)
IIRC its not that hard.
Use a [timer] and onset/tone detector,
and an array that looks up the next state.
You need a way to navigate a tree - a state machine
with 26 terminal nodes (36 if you want numbers)
and there are four symbols to transition states,
dot, dah, short space and long gap (between letters)
The array is a 4-tree collapsed into a "Turing tape"
so you use the symbol to select the offset (jump)
to the next state (table index) based on the last
symbol. A long gap always resets the index to 0.
cheers,
andy
On Tue, Jun 14, 2016 at 11:41:20AM -0400, me.grimm wrote:
Hello,
Has anyone made a patch/abstraction to "decode" or translate morse code to
text? I see text->morse but not the other way around....
thanks!
m
_______________________________________________
[email protected] mailing list
UNSUBSCRIBE and account-management ->
https://lists.puredata.info/listinfo/pd-list
_______________________________________________
[email protected] mailing list
UNSUBSCRIBE and account-management ->
https://lists.puredata.info/listinfo/pd-list
#N struct morse float x float y symbol letter float bin-num array content
morse-content;
#N struct morse-content float bin;
#N canvas 532 327 861 386 10;
#X obj 330 219 snd2morse~;
#X obj 330 368 print;
#N canvas 31 102 862 508 morse 0;
#X obj 274 213 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 296 213 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 319 213 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 87 119 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 106 117 metro 100;
#X obj 137 454 *~;
#X obj 62 267 osc~ 440;
#X obj 65 239 hsl 128 22 10 6000 0 0 empty empty frequency 9 9 1 10
-262144 -1 -1 1900 1;
#X obj 183 414 line~;
#X obj 197 330 delay 50;
#X obj 197 310 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X floatatom 286 332 5 0 0 0 - - -, f 5;
#X floatatom 7 268 5 0 0 0 - - -, f 5;
#X msg 62 211 906.1;
#X obj 62 184 loadbang;
#X obj 382 329 delay 50;
#X obj 382 309 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X floatatom 468 330 5 0 0 0 - - -, f 5;
#X msg 157 370 1 1;
#X msg 197 370 0 1;
#X msg 342 369 1 1;
#X msg 384 369 0 1;
#X obj 683 155 hsl 128 15 10 1000 0 0 empty empty empty -2 -6 0 8 -262144
-1 -1 513 1;
#X text 714 129 speed;
#X floatatom 681 185 5 0 0 0 - - -, f 5;
#X obj 643 276 s dot;
#X obj 735 276 s dash;
#X obj 191 91 r dot;
#X obj 272 304 r dot;
#X obj 457 302 r dash;
#X obj 735 224 * 3;
#X text 230 273 dot;
#X text 387 277 dash;
#X text 11 4 convert text to Morse Code;
#X text 223 36 On UNIX and MacOS X systems \, its case-sensitive \,
on Windows \, its not.;
#X obj 248 113 inlet;
#X obj 137 476 outlet~;
#X text 53 526 patch from mjilb help file;
#X obj 680 64 r morse-speed;
#X obj 274 183 mjlib/morse;
#X obj 58 67 r morse-metro;
#X obj 82 93 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1
;
#X connect 0 0 10 0;
#X connect 1 0 16 0;
#X connect 4 0 3 0;
#X connect 4 0 39 0;
#X connect 5 0 36 0;
#X connect 6 0 5 0;
#X connect 7 0 6 0;
#X connect 7 0 12 0;
#X connect 8 0 5 1;
#X connect 9 0 19 0;
#X connect 10 0 9 0;
#X connect 10 0 18 0;
#X connect 13 0 7 0;
#X connect 14 0 13 0;
#X connect 15 0 21 0;
#X connect 16 0 15 0;
#X connect 16 0 20 0;
#X connect 18 0 8 0;
#X connect 19 0 8 0;
#X connect 20 0 8 0;
#X connect 21 0 8 0;
#X connect 22 0 24 0;
#X connect 24 0 25 0;
#X connect 24 0 30 0;
#X connect 27 0 4 1;
#X connect 28 0 9 1;
#X connect 28 0 11 0;
#X connect 29 0 15 1;
#X connect 29 0 17 0;
#X connect 30 0 26 0;
#X connect 35 0 39 0;
#X connect 38 0 22 0;
#X connect 39 0 0 0;
#X connect 39 1 1 0;
#X connect 39 2 2 0;
#X connect 40 0 41 0;
#X connect 41 0 4 0;
#X restore 163 142 pd morse;
#X obj 161 296 dac~;
#X obj 162 246 *~;
#X obj 190 221 hsl 128 22 0.01 1 1 0 empty morse-volume volume 9 9
1 10 -262144 -1 -1 3030 0;
#X obj 363 347 print space;
#X obj 11 81 loadbang;
#X text 9 14 patko2013-2016;
#X msg 262 56 msg this is a test message;
#X msg 248 27 msg 1 2 3 4 8;
#X msg 11 109 \; init 0 \; morse-speed 50 \; pd dsp 1 \; morse-volume
0.03 \; morse-metro 1 \;;
#X msg 161 29 msg s o;
#X obj 164 92 t a b, f 21;
#X obj 410 268 list fromsymbol;
#X msg 532 265 32;
#X obj 400 307 list;
#X obj 600 271 t l;
#X obj 479 333 list tosymbol;
#X obj 482 356 print message;
#X obj 514 298 list prepend;
#X connect 0 0 1 0;
#X connect 0 0 14 0;
#X connect 0 1 6 0;
#X connect 0 1 15 0;
#X connect 0 2 16 0;
#X connect 2 0 4 0;
#X connect 2 0 0 0;
#X connect 4 0 3 0;
#X connect 4 0 3 1;
#X connect 5 0 4 1;
#X connect 7 0 11 0;
#X connect 9 0 13 0;
#X connect 10 0 13 0;
#X connect 12 0 13 0;
#X connect 13 0 2 0;
#X connect 13 1 17 0;
#X connect 14 0 20 0;
#X connect 15 0 20 0;
#X connect 16 0 18 0;
#X connect 17 0 20 1;
#X connect 18 0 19 0;
#X connect 20 0 17 0;
#X connect 20 0 16 1;
#N struct morse float x float y symbol letter float bin-num array content
morse-content;
#N struct morse-content float bin;
#N canvas 1119 147 567 488 10;
#N canvas 102 108 498 306 datastructure 0;
#X obj 248 138 list-compare;
#N canvas 952 323 513 507 GET-BINARY 0;
#X obj 266 74 pointer;
#X msg 234 47 next;
#X obj 234 28 until;
#X obj 255 -1 t b b;
#X obj 145 200 until;
#X obj 144 222 f;
#X obj 179 245 + 1;
#X obj 266 94 trigger pointer bang pointer;
#X obj 301 336 t l;
#X obj 122 371 list;
#X obj 255 -20 inlet;
#X obj 124 410 outlet;
#X msg 289 203 0;
#X obj 155 295 element morse content;
#X obj 386 393 outlet;
#X obj 231 356 list prepend;
#X obj 117 170 t b a;
#X obj 155 315 get morse-content bin;
#X obj 143 133 getsize morse content;
#X msg 287 43 traverse pd-morse-data;
#X connect 0 0 7 0;
#X connect 0 1 2 1;
#X connect 1 0 0 0;
#X connect 2 0 1 0;
#X connect 3 0 2 0;
#X connect 3 1 19 0;
#X connect 4 0 5 0;
#X connect 5 0 6 0;
#X connect 5 0 13 0;
#X connect 6 0 5 1;
#X connect 7 0 18 0;
#X connect 7 1 8 0;
#X connect 7 1 12 0;
#X connect 7 2 13 1;
#X connect 7 2 14 0;
#X connect 8 0 15 1;
#X connect 9 0 11 0;
#X connect 10 0 3 0;
#X connect 12 0 5 1;
#X connect 13 0 17 0;
#X connect 15 0 8 0;
#X connect 15 0 9 1;
#X connect 16 0 9 0;
#X connect 16 1 4 0;
#X connect 17 0 15 0;
#X connect 18 0 16 0;
#X connect 19 0 0 0;
#X restore 247 100 pd GET-BINARY;
#X obj 330 67 t b a;
#X obj 298 200 pointer;
#X obj 260 174 sel 1;
#X obj 298 222 get morse letter;
#X obj 299 247 outlet;
#X obj 329 26 inlet;
#X connect 0 0 4 0;
#X connect 1 0 0 0;
#X connect 1 1 3 1;
#X connect 2 0 1 0;
#X connect 2 1 0 1;
#X connect 3 0 5 0;
#X connect 4 0 3 0;
#X connect 5 0 6 0;
#X connect 7 0 2 0;
#X restore 65 387 pd datastructure;
#X obj 84 257 list prepend;
#N canvas 1149 566 450 441 computeTime 0;
#X obj 152 -129 timer;
#X msg 270 56 link;
#X msg 331 57 space;
#X obj 100 203 outlet;
#X obj 153 -175 inlet;
#X obj 79 -114 bng 15 50 10 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X msg 50 69 0;
#X msg 139 67 1;
#X floatatom 229 -133 5 0 0 0 - - -, f 5;
#X obj 149 -108 list prepend;
#X obj 153 -154 t b b a;
#X obj 149 -84 list trim;
#X obj 149 -62 route 1 0;
#X obj 77 -10 moses 100;
#X obj 271 4 moses 400;
#X obj 179 -39 moses 60;
#X obj 331 30 moses 1000;
#X connect 0 0 9 0;
#X connect 1 0 3 0;
#X connect 2 0 3 0;
#X connect 4 0 10 0;
#X connect 6 0 3 0;
#X connect 7 0 3 0;
#X connect 9 0 11 0;
#X connect 10 0 0 0;
#X connect 10 0 5 0;
#X connect 10 1 0 1;
#X connect 10 2 9 1;
#X connect 11 0 12 0;
#X connect 12 0 13 0;
#X connect 12 1 15 0;
#X connect 13 0 6 0;
#X connect 13 1 7 0;
#X connect 14 0 1 0;
#X connect 14 1 16 0;
#X connect 15 1 14 0;
#X connect 16 0 2 0;
#X restore 115 119 pd computeTime;
#X obj 115 143 route float link space;
#X obj 153 233 t l;
#X obj 66 322 list;
#X msg 374 124 stop;
#X obj 364 99 t b b;
#X text 333 79 pour sortir le dernier caractère;
#X obj 334 154 del 2000;
#X obj 64 187 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X obj 85 187 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X obj 121 185 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
#X obj 65 459 outlet lettre;
#X obj 237 393 outlet espace;
#X obj 421 98 r init;
#X obj 15 186 r init;
#X obj 113 58 inlet~;
#N canvas 1190 492 450 300 datastruct 0;
#N canvas 396 493 450 402 morse-data 0;
#X scalar morse 0 0 A 2 \; 0 \; 1 \; \;;
#X scalar morse 0 45 B 4 \; 1 \; 0 \; 0 \; 0 \; \;;
#X scalar morse 1 91 C 4 \; 1 \; 0 \; 1 \; 0 \; \;;
#X scalar morse 1 137 D 3 \; 1 \; 0 \; 0 \; \;;
#X scalar morse 1 182 E 1 \; 0 \; \;;
#X scalar morse 1 227 F 4 \; 0 \; 0 \; 1 \; 0 \; \;;
#X scalar morse 2 273 G 4 \; 1 \; 1 \; 0 \; \;;
#X scalar morse 2 319 H 4 \; 0 \; 0 \; 0 \; 0 \; \;;
#X scalar morse 46 1 I 2 \; 0 \; 0 \; \;;
#X scalar morse 46 46 J 4 \; 0 \; 1 \; 1 \; 1 \; \;;
#X scalar morse 47 92 K 3 \; 1 \; 0 \; 1 \; \;;
#X scalar morse 47 138 L 4 \; 0 \; 1 \; 0 \; 0 \; \;;
#X scalar morse 47 183 M 2 \; 1 \; 1 \; \;;
#X scalar morse 47 228 N 2 \; 1 \; 0 \; \;;
#X scalar morse 48 274 O 3 \; 1 \; 1 \; 1 \; \;;
#X scalar morse 48 320 P 4 \; 0 \; 1 \; 1 \; 0 \; \;;
#X scalar morse 92 1 Q 4 \; 1 \; 1 \; 0 \; 1 \; \;;
#X scalar morse 92 46 R 3 \; 0 \; 1 \; 0 \; \;;
#X scalar morse 93 92 S 3 \; 0 \; 0 \; 0 \; \;;
#X scalar morse 93 138 T 1 \; 1 \; \;;
#X scalar morse 93 183 U 3 \; 0 \; 0 \; 1 \; \;;
#X scalar morse 93 228 V 4 \; 0 \; 0 \; 0 \; 1 \; \;;
#X scalar morse 94 274 W 3 \; 0 \; 1 \; 1 \; \;;
#X scalar morse 94 320 X 4 \; 1 \; 0 \; 0 \; 1 \; \;;
#X scalar morse 139 2 Y 4 \; 1 \; 0 \; 1 \; 1 \; \;;
#X scalar morse 139 47 Z 4 \; 1 \; 1 \; 0 \; 0 \; \;;
#X scalar morse 140 93 .0. 5 \; 1 \; 1 \; 1 \; 1 \; 1 \; \;;
#X scalar morse 140 139 .1. 5 \; 0 \; 1 \; 1 \; 1 \; 1 \; \;;
#X scalar morse 140 184 .2. 5 \; 0 \; 0 \; 1 \; 1 \; 1 \; \;;
#X scalar morse 140 229 .3. 5 \; 0 \; 0 \; 0 \; 1 \; 1 \; \;;
#X scalar morse 141 275 .4. 5 \; 0 \; 0 \; 0 \; 0 \; 1 \; \;;
#X scalar morse 141 321 .5. 5 \; 0 \; 0 \; 0 \; 0 \; 0 \; \;;
#X scalar morse 187 3 .6. 5 \; 1 \; 0 \; 0 \; 0 \; 0 \; \;;
#X scalar morse 187 48 .7. 5 \; 1 \; 1 \; 0 \; 0 \; 0 \; \;;
#X scalar morse 188 94 .8. 5 \; 1 \; 1 \; 1 \; 0 \; 0 \; \;;
#X scalar morse 188 138 .9. 5 \; 1 \; 1 \; 1 \; 1 \; 0 \; \;;
#X restore 35 17 pd morse-data;
#N canvas 1216 78 450 300 morse 0;
#X obj 106 76 filledpolygon 900 0 1 0 0 40 0 40 40 0 40;
#X obj 105 97 drawsymbol letter 5 2 0;
#X obj 105 125 plot content 500 0 2 15 7;
#X obj 89 19 struct morse float x float y symbol letter float bin-num
array content morse-content;
#X restore 34 37 pd morse;
#N canvas 1210 372 450 300 morse-content 0;
#X obj 54 64 drawnumber bin 0 0 0;
#X obj 49 27 struct morse-content float bin;
#X restore 35 60 pd morse-content;
#X obj 249 53 \$0;
#X obj 251 33 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X msg 69 94 0 0;
#X msg 35 168 symbol A;
#X obj 245 102 pointer;
#X obj 112 136 append morse x y;
#X msg 250 76 traverse pd-\$1morse-data \, bang;
#X obj 38 203 set -symbol morse letter;
#X connect 3 0 9 0;
#X connect 4 0 3 0;
#X connect 5 0 8 0;
#X connect 6 0 10 0;
#X connect 7 0 8 2;
#X connect 8 0 10 1;
#X connect 9 0 7 0;
#X restore 112 35 pd datastruct;
#N canvas 1021 174 450 315 threshold 0;
#X obj 42 7 inlet~;
#X obj 47 108 outlet;
#X obj 42 39 env~;
#X obj 43 85 change;
#X obj 42 61 < 0.5;
#X connect 0 0 2 0;
#X connect 2 0 4 0;
#X connect 3 0 1 0;
#X connect 4 0 3 0;
#X restore 114 83 pd threshold;
#X obj 362 394 outlet end;
#X connect 0 0 13 0;
#X connect 1 0 4 0;
#X connect 1 0 5 1;
#X connect 2 0 3 0;
#X connect 3 0 1 0;
#X connect 3 0 10 0;
#X connect 3 1 5 0;
#X connect 3 1 4 0;
#X connect 3 1 11 0;
#X connect 3 2 12 0;
#X connect 3 2 4 0;
#X connect 3 2 5 0;
#X connect 3 2 14 0;
#X connect 4 0 1 1;
#X connect 5 0 0 0;
#X connect 6 0 9 0;
#X connect 7 0 9 0;
#X connect 7 1 6 0;
#X connect 9 0 4 0;
#X connect 9 0 5 0;
#X connect 9 0 20 0;
#X connect 15 0 6 0;
#X connect 16 0 4 0;
#X connect 16 0 5 1;
#X connect 17 0 19 0;
#X connect 19 0 2 0;
#X connect 19 0 7 0;
_______________________________________________
[email protected] mailing list
UNSUBSCRIBE and account-management ->
https://lists.puredata.info/listinfo/pd-list