--- /dev/null
+% Copyright David Rowe 2012
+% This program is distributed under the terms of the GNU General Public License
+% Version 2
+%
+% codec2_demo.m
+
+% Designed as an educational tool to explain the operation of Codec 2
+% for conference and user group presentations on a projector. An
+% alternative to static overhead slides.
+%
+% Derived from codec2-dev/octave/plamp.m
+%
+% usage:
+% octave:1> plamp("../src/hts2a",40)
+%
+% Then press:
+% c - to cycle through the wavform being displayed on the figure
+% n - next frame
+% b - back one frame
+%
+% tip: hold down n or b to animate the display
+%
+% The text files used as input are generated using c2sim:
+%
+% /codec2-dev/src$ c2sim ../raw/hts2a.raw --dump hts2a
+%
+% The Codec 2 README explains how to build c2sim with dump files
+% enabled.
+
+function codec2_demo(samname, f)
+
+ sn_name = strcat(samname,"_sn.txt");
+ Sn = load(sn_name);
+
+ sw_name = strcat(samname,"_sw.txt");
+ Sw = load(sw_name);
+
+ model_name = strcat(samname,"_model.txt");
+ model = load(model_name);
+
+ figure(1);
+
+ k = ' ';
+ wf = "Sn";
+ do
+
+ if strcmp(wf,"Sn")
+ clf;
+ s = [ Sn(2*f-1,:) Sn(2*f,:) ];
+ plot(s);
+ axis([1 length(s) -20000 20000]);
+ end
+
+ if (strcmp(wf,"Sw"))
+ clf;
+ plot((0:255)*4000/256, Sw(f,:),";Sw;");
+ end
+
+ if strcmp(wf,"SwAm")
+ Wo = model(f,1);
+ L = model(f,2);
+ Am = model(f,3:(L+2));
+ plot((0:255)*4000/256, Sw(f,:),";Sw;");
+ hold on;
+ plot((1:L)*Wo*4000/pi, 20*log10(Am),"+;Am;r");
+ axis([1 4000 -10 80]);
+ hold off;
+ end
+
+ if strcmp(wf,"Am")
+ Wo = model(f,1);
+ L = model(f,2);
+ Am = model(f,3:(L+2));
+ plot((1:L)*Wo*4000/pi, 20*log10(Am),"+;Am;r");
+ axis([1 4000 -10 80]);
+ end
+
+ % interactive menu
+
+ printf("\rframe: %d menu: n-next b-back w-cycle window q-quit", f);
+ fflush(stdout);
+ k = kbhit();
+ if (k == 'n')
+ f = f + 1;
+ end
+ if (k == 'b')
+ f = f - 1;
+ end
+ if (k == 'w')
+ if strcmp(wf,"Sn")
+ next_wf = "Sw";
+ end
+ if strcmp(wf,"Sw")
+ next_wf = "SwAm";
+ end
+ if strcmp(wf,"SwAm")
+ next_wf = "Am";
+ end
+ if strcmp(wf,"Am")
+ next_wf = "Sn";
+ end
+ wf = next_wf;
+ end
+
+ until (k == 'q')
+ printf("\n");
+
+endfunction