annotate src/paranormal/wave.c @ 1894:01cd330758e0

Remove version identifier.
author William Pitcock <nenolod@atheme.org>
date Wed, 26 Sep 2007 12:22:54 -0500
parents 3b034150d31e
children 56bb18dd3fdd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1892
3b034150d31e Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents: 304
diff changeset
1 /*
3b034150d31e Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents: 304
diff changeset
2 * paranormal: iterated pipeline-driven visualization plugin
3b034150d31e Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents: 304
diff changeset
3 * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
3b034150d31e Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents: 304
diff changeset
4 * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
3b034150d31e Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents: 304
diff changeset
5 *
3b034150d31e Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents: 304
diff changeset
6 * This program is free software; you can redistribute it and/or modify
3b034150d31e Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents: 304
diff changeset
7 * it under the terms of the GNU General Public License as published by
3b034150d31e Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents: 304
diff changeset
8 * the Free Software Foundation; under version 2 of the License.
3b034150d31e Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents: 304
diff changeset
9 *
3b034150d31e Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents: 304
diff changeset
10 * This program is distributed in the hope that it will be useful,
3b034150d31e Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents: 304
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
3b034150d31e Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents: 304
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3b034150d31e Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents: 304
diff changeset
13 * GNU General Public License for more details.
3b034150d31e Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents: 304
diff changeset
14 *
3b034150d31e Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents: 304
diff changeset
15 * You should have received a copy of the GNU General Public License
3b034150d31e Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents: 304
diff changeset
16 * along with this program; if not, write to the Free Software
3b034150d31e Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents: 304
diff changeset
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
3b034150d31e Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents: 304
diff changeset
18 */
3b034150d31e Add GPL2 boilerplate text.
William Pitcock <nenolod@atheme.org>
parents: 304
diff changeset
19
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
20 #ifdef HAVE_CONFIG_H
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
21 # include <config.h>
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
22 #endif
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
23
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
24 #include <math.h>
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
25
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
26 #include "paranormal.h"
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
27 #include "actuators.h"
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
28 #include "pn_utils.h"
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
29
203
0c5e3d562d99 [svn] - include drawing.h
nenolod
parents: 194
diff changeset
30 #include "drawing.h"
0c5e3d562d99 [svn] - include drawing.h
nenolod
parents: 194
diff changeset
31
283
6b3773478f9e [svn] - some base code for Scope, not yet enabled.
nenolod
parents: 269
diff changeset
32 #include "libcalc/calc.h"
6b3773478f9e [svn] - some base code for Scope, not yet enabled.
nenolod
parents: 269
diff changeset
33
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
34 /* **************** wave_horizontal **************** */
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
35 struct pn_actuator_option_desc wave_horizontal_opts[] =
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
36 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
37 {"channels", "Which sound channels to use: negative = channel 1, \npositive = channel 2, "
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
38 "zero = both (two wave-forms.)", OPT_TYPE_INT, {ival: -1} },
183
37b53a5a9aa4 [svn] - allow waves to be drawn with a custom value instead of just 255
nenolod
parents: 155
diff changeset
39 {"value", "The colour value to use.", OPT_TYPE_INT, {ival: 255} },
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
40 {"lines", "Use lines instead of dots.", OPT_TYPE_BOOLEAN, {bval: TRUE} },
188
0d826917c56f [svn] - 64-bit safety (pass 1 of 2)
nenolod
parents: 183
diff changeset
41 { NULL }
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
42 };
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
43
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
44 static void
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
45 wave_horizontal_exec_dots (const struct pn_actuator_option *opts,
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
46 gpointer data)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
47 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
48 int i;
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
49 int channel = ( opts[0].val.ival < 0 ) ? 0 : 1;
183
37b53a5a9aa4 [svn] - allow waves to be drawn with a custom value instead of just 255
nenolod
parents: 155
diff changeset
50 guchar value = (opts[1].val.ival < 0 || opts[1].val.ival > 255) ? 255 : opts[1].val.ival;
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
51
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
52 for (i=0; i<pn_image_data->width; i++) {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
53
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
54 /*single channel, centered horz.*/
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
55 if ( opts[0].val.ival ) {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
56 pn_image_data->surface[0][PN_IMG_INDEX (i, (pn_image_data->height>>1)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
57 - CAP (pn_sound_data->pcm_data[channel]
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
58 [i*512/pn_image_data->width]>>8,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
59 (pn_image_data->height>>1)-1))]
183
37b53a5a9aa4 [svn] - allow waves to be drawn with a custom value instead of just 255
nenolod
parents: 155
diff changeset
60 = value;
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
61 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
62
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
63 /*both channels, at 1/4 and 3/4 of the screen*/
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
64 else {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
65 pn_image_data->surface[0][PN_IMG_INDEX( i, (pn_image_data->height>>2) -
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
66 CAP( (pn_sound_data->pcm_data[0]
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
67 [i*512/pn_image_data->width]>>9),
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
68 (pn_image_data->height>>2)-1))]
183
37b53a5a9aa4 [svn] - allow waves to be drawn with a custom value instead of just 255
nenolod
parents: 155
diff changeset
69 = value;
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
70
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
71 pn_image_data->surface[0][PN_IMG_INDEX( i, 3*(pn_image_data->height>>2) -
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
72 CAP( (pn_sound_data->pcm_data[1]
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
73 [i*512/pn_image_data->width]>>9),
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
74 (pn_image_data->height>>2)-1))]
183
37b53a5a9aa4 [svn] - allow waves to be drawn with a custom value instead of just 255
nenolod
parents: 155
diff changeset
75 = value;
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
76 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
77 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
78 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
79
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
80 void
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
81 wave_horizontal_exec_lines (const struct pn_actuator_option *opts,
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
82 gpointer data)
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
83 {
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
84 int channel = ( opts[0].val.ival < 0 ) ? 0 : 1;
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
85 guchar value = (opts[1].val.ival < 0 || opts[1].val.ival > 255) ? 255 : opts[1].val.ival;
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
86 int *x_pos, *y_pos; /* dynamic tables which store the positions for the line */
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
87 int *x2_pos, *y2_pos; /* dynamic tables which store the positions for the line */
269
69f309c8bd71 [svn] - properly calculate points
nenolod
parents: 238
diff changeset
88 int i;
69f309c8bd71 [svn] - properly calculate points
nenolod
parents: 238
diff changeset
89 float step;
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
90
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
91 x_pos = g_new0(int, 257);
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
92 y_pos = g_new0(int, 257);
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
93 x2_pos = g_new0(int, 257);
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
94 y2_pos = g_new0(int, 257);
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
95
269
69f309c8bd71 [svn] - properly calculate points
nenolod
parents: 238
diff changeset
96 step = pn_image_data->width / 256.;
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
97
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
98 /* calculate the line. */
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
99 for (i = 0; i < 256; i++)
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
100 {
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
101 if (opts[0].val.ival != 0)
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
102 {
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
103 x_pos[i] = i * step;
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
104 y_pos[i] = (pn_image_data->height>>1) -
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
105 CAP (pn_sound_data->pcm_data[channel][i * 2]>>8,
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
106 (pn_image_data->height>>1)-1);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
107 }
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
108 else
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
109 {
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
110 x_pos[i] = i * step;
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
111 y_pos[i] = (pn_image_data->height>>2) -
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
112 CAP (pn_sound_data->pcm_data[0][i * 2]>>9,
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
113 (pn_image_data->height>>2)-1);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
114
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
115 x2_pos[i] = i * step;
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
116 y2_pos[i] = 3*(pn_image_data->height>>2) -
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
117 CAP (pn_sound_data->pcm_data[1][i * 2]>>9,
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
118 (pn_image_data->height>>2)-1);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
119
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
120 }
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
121 }
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
122
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
123 /* draw the line. */
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
124 for (i = 1; i < 256; i++)
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
125 {
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
126 pn_draw_line(x_pos[i - 1], y_pos[i - 1], x_pos[i], y_pos[i], value);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
127
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
128 if ( opts[0].val.ival == 0 )
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
129 pn_draw_line(x2_pos[i - 1], y2_pos[i - 1], x2_pos[i], y2_pos[i], value);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
130 }
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
131
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
132 g_free(x_pos);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
133 g_free(y_pos);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
134 g_free(x2_pos);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
135 g_free(y2_pos);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
136 }
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
137
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
138 static void
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
139 wave_horizontal_exec (const struct pn_actuator_option *opts,
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
140 gpointer data)
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
141 {
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
142 if (opts[2].val.bval == TRUE)
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
143 wave_horizontal_exec_lines(opts, data);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
144 else
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
145 wave_horizontal_exec_dots(opts, data);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
146 }
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
147
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
148 struct pn_actuator_desc builtin_wave_horizontal =
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
149 {
155
adf9f4b26039 [svn] - user-friendly names (UI side unimplemented still)
nenolod
parents: 149
diff changeset
150 "wave_horizontal", "Horizontal Waveform",
adf9f4b26039 [svn] - user-friendly names (UI side unimplemented still)
nenolod
parents: 149
diff changeset
151 "Draws one or two waveforms horizontally across "
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
152 "the drawing surface",
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
153 0, wave_horizontal_opts,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
154 NULL, NULL, wave_horizontal_exec
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
155 };
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
156
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
157 /* **************** wave_vertical **************** */
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
158 struct pn_actuator_option_desc wave_vertical_opts[] =
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
159 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
160 {"channels", "Which sound channels to use: negative = channel 1, \npositive = channel 2, "
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
161 "zero = both (two wave-forms.)", OPT_TYPE_INT, {ival: -1} },
183
37b53a5a9aa4 [svn] - allow waves to be drawn with a custom value instead of just 255
nenolod
parents: 155
diff changeset
162 {"value", "The colour value to use.", OPT_TYPE_INT, {ival: 255} },
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
163 {"lines", "Use lines instead of dots.", OPT_TYPE_BOOLEAN, {bval: TRUE} },
188
0d826917c56f [svn] - 64-bit safety (pass 1 of 2)
nenolod
parents: 183
diff changeset
164 { NULL }
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
165 };
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
166
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
167 static void
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
168 wave_vertical_exec_dots (const struct pn_actuator_option *opts,
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
169 gpointer data)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
170 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
171 int i;
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
172 int channel = ( opts[0].val.ival < 0 ) ? 0 : 1;
183
37b53a5a9aa4 [svn] - allow waves to be drawn with a custom value instead of just 255
nenolod
parents: 155
diff changeset
173 guchar value = (opts[1].val.ival < 0 || opts[1].val.ival > 255) ? 255 : opts[1].val.ival;
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
174
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
175 for (i=0; i<pn_image_data->height; i++) {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
176 if ( opts[0].val.ival ) {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
177 pn_image_data->surface[0][PN_IMG_INDEX ((pn_image_data->width>>1)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
178 - CAP (pn_sound_data->pcm_data[channel]
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
179 [i*512/pn_image_data->height]>>8,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
180 (pn_image_data->width>>1)-1), i)]
183
37b53a5a9aa4 [svn] - allow waves to be drawn with a custom value instead of just 255
nenolod
parents: 155
diff changeset
181 = value;
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
182 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
183 else {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
184 pn_image_data->surface[0][PN_IMG_INDEX ((pn_image_data->width>>2)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
185 - CAP (pn_sound_data->pcm_data[0]
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
186 [i*512/pn_image_data->height]>>9,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
187 (pn_image_data->width>>2)-1), i)]
183
37b53a5a9aa4 [svn] - allow waves to be drawn with a custom value instead of just 255
nenolod
parents: 155
diff changeset
188 = value;
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
189 pn_image_data->surface[0][PN_IMG_INDEX ((3*pn_image_data->width>>2)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
190 -CAP (pn_sound_data->pcm_data[1]
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
191 [i*512/pn_image_data->height]>>9,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
192 (pn_image_data->width>>2)-1), i)]
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
193
183
37b53a5a9aa4 [svn] - allow waves to be drawn with a custom value instead of just 255
nenolod
parents: 155
diff changeset
194 = value;
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
195 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
196 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
197 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
198
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
199 static void
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
200 wave_vertical_exec_lines (const struct pn_actuator_option *opts,
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
201 gpointer data)
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
202 {
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
203 int channel = ( opts[0].val.ival < 0 ) ? 0 : 1;
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
204 guchar value = (opts[1].val.ival < 0 || opts[1].val.ival > 255) ? 255 : opts[1].val.ival;
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
205 int *x_pos, *y_pos; /* dynamic tables which store the positions for the line */
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
206 int *x2_pos, *y2_pos; /* dynamic tables which store the positions for the line */
269
69f309c8bd71 [svn] - properly calculate points
nenolod
parents: 238
diff changeset
207 int i;
69f309c8bd71 [svn] - properly calculate points
nenolod
parents: 238
diff changeset
208 float step;
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
209
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
210 x_pos = g_new0(int, 129);
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
211 y_pos = g_new0(int, 129);
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
212 x2_pos = g_new0(int, 129);
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
213 y2_pos = g_new0(int, 129);
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
214
269
69f309c8bd71 [svn] - properly calculate points
nenolod
parents: 238
diff changeset
215 step = pn_image_data->height / 128.;
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
216
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
217 /* calculate the line. */
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
218 for (i = 0; i < 128; i++)
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
219 {
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
220 if (opts[0].val.ival != 0)
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
221 {
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
222 x_pos[i] = (pn_image_data->width>>1) -
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
223 CAP (pn_sound_data->pcm_data[channel]
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
224 [i*4]>>8,
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
225 (pn_image_data->width>>1)-1);
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
226 y_pos[i] = i * step;
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
227 }
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
228 else
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
229 {
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
230 x_pos[i] = (pn_image_data->width>>2)
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
231 - CAP (pn_sound_data->pcm_data[0]
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
232 [i*4]>>9,
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
233 (pn_image_data->width>>2)-1);
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
234 y_pos[i] = i * step;
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
235
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
236 x2_pos[i] = 3*(pn_image_data->width>>2)
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
237 - CAP (pn_sound_data->pcm_data[1]
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
238 [i*4]>>9,
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
239 (pn_image_data->width>>2)-1);
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
240 y2_pos[i] = i * step;
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
241 }
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
242 }
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
243
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
244 /* draw the line. */
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
245 for (i = 1; i < 128; i++)
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
246 {
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
247 pn_draw_line(x_pos[i - 1], y_pos[i - 1], x_pos[i], y_pos[i], value);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
248
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
249 if ( opts[0].val.ival == 0 )
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
250 pn_draw_line(x2_pos[i - 1], y2_pos[i - 1], x2_pos[i], y2_pos[i], value);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
251 }
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
252
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
253 g_free(x_pos);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
254 g_free(y_pos);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
255 g_free(x2_pos);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
256 g_free(y2_pos);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
257 }
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
258
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
259 static void
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
260 wave_vertical_exec (const struct pn_actuator_option *opts,
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
261 gpointer data)
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
262 {
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
263 if (opts[2].val.bval == TRUE)
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
264 wave_vertical_exec_lines(opts, data);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
265 else
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
266 wave_vertical_exec_dots(opts, data);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
267 }
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
268
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
269 struct pn_actuator_desc builtin_wave_vertical =
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
270 {
155
adf9f4b26039 [svn] - user-friendly names (UI side unimplemented still)
nenolod
parents: 149
diff changeset
271 "wave_vertical", "Vertical Waveform",
adf9f4b26039 [svn] - user-friendly names (UI side unimplemented still)
nenolod
parents: 149
diff changeset
272 "Draws one or two waveforms vertically across "
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
273 "the drawing surface",
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
274 0, wave_vertical_opts,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
275 NULL, NULL, wave_vertical_exec
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
276 };
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
277
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
278 /* FIXME: allow for only 1 channel for wave_normalize & wave_smooth */
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
279 /* **************** wave_normalize **************** */
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
280 static struct pn_actuator_option_desc wave_normalize_opts[] =
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
281 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
282 { "height", "If positive, the height, in pixels, to which the waveform will be "
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
283 "normalized; if negative, hfrac is used", OPT_TYPE_INT, { ival: -1 } },
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
284 { "hfrac", "If positive, the fraction of the horizontal image size to which the "
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
285 "waveform will be normalized; if negative, vfrac is used",
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
286 OPT_TYPE_FLOAT, { fval: -1 } },
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
287 { "vfrac", "If positive, the fraction of the vertical image size to which the "
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
288 "waveform will be normalized",
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
289 OPT_TYPE_FLOAT, { fval: .125 } },
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
290 { "channels", "Which sound channel(s) to normalize: negative = channel 1,\n"
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
291 "\tpositive = channel 2, 0 = both channels.",
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
292 OPT_TYPE_INT, { ival: 0 } },
188
0d826917c56f [svn] - 64-bit safety (pass 1 of 2)
nenolod
parents: 183
diff changeset
293 { NULL }
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
294 };
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
295
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
296 static void
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
297 wave_normalize_exec (const struct pn_actuator_option *opts,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
298 gpointer data)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
299 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
300 int i, j, max=0;
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
301 float denom;
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
302
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
303 for (j=0; j<2; j++)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
304 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
305 if ( !(opts[3].val.ival) || (opts[3].val.ival < 0 && j == 0) ||
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
306 (opts[3].val.ival > 0 && j == 1) ) {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
307
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
308 for (i=0; i<512; i++)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
309 if (abs(pn_sound_data->pcm_data[j][i]) > max)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
310 max = abs(pn_sound_data->pcm_data[j][i]);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
311
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
312 if (opts[0].val.ival > 0)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
313 denom = max/(opts[0].val.ival<<8);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
314 else if (opts[1].val.fval > 0)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
315 denom = max/(opts[1].val.fval * (pn_image_data->width<<8));
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
316 else
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
317 denom = max/(opts[2].val.fval * (pn_image_data->height<<8));
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
318
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
319 if (denom > 0)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
320 for (i=0; i<512; i++)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
321 pn_sound_data->pcm_data[j][i]
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
322 /= denom;
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
323 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
324 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
325 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
326
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
327 struct pn_actuator_desc builtin_wave_normalize =
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
328 {
155
adf9f4b26039 [svn] - user-friendly names (UI side unimplemented still)
nenolod
parents: 149
diff changeset
329 "wave_normalize", "Normalize Waveform Data",
adf9f4b26039 [svn] - user-friendly names (UI side unimplemented still)
nenolod
parents: 149
diff changeset
330 "Normalizes the waveform data used by the wave_* actuators",
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
331 0, wave_normalize_opts,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
332 NULL, NULL, wave_normalize_exec
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
333 };
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
334
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
335 /* **************** wave_smooth **************** */
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
336 struct pn_actuator_option_desc wave_smooth_opts[] =
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
337 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
338 { "channels", "Which sound channel(s) to smooth: negative = channel 1, \n"
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
339 "\tpositive = channel 2, 0 = both channels.",
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
340 OPT_TYPE_INT, { ival: 0 } },
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
341 {0}
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
342 };
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
343
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
344 static void
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
345 wave_smooth_exec (const struct pn_actuator_option *opts,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
346 gpointer data)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
347 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
348 int i, j, k;
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
349 gint16 tmp[512];
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
350
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
351 for (j=0; j<2; j++)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
352 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
353 if ( !(opts[0].val.ival) || (opts[0].val.ival < 0 && j == 0) ||
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
354 (opts[0].val.ival > 0 && j == 1) ) {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
355
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
356 for (i=4; i<508; i++)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
357 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
358 k = (pn_sound_data->pcm_data[j][i]<<3)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
359 + (pn_sound_data->pcm_data[j][i+1]<<2)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
360 + (pn_sound_data->pcm_data[j][i-1]<<2)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
361 + (pn_sound_data->pcm_data[j][i+2]<<2)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
362 + (pn_sound_data->pcm_data[j][i-2]<<2)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
363 + (pn_sound_data->pcm_data[j][i+3]<<1)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
364 + (pn_sound_data->pcm_data[j][i-3]<<1)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
365 + (pn_sound_data->pcm_data[j][i+4]<<1)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
366 + (pn_sound_data->pcm_data[j][i-4]<<1);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
367 tmp[i] = k >> 5;
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
368 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
369 memcpy (pn_sound_data->pcm_data[j]+4, tmp, sizeof (gint16) * 504);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
370 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
371 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
372 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
373
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
374 struct pn_actuator_desc builtin_wave_smooth =
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
375 {
155
adf9f4b26039 [svn] - user-friendly names (UI side unimplemented still)
nenolod
parents: 149
diff changeset
376 "wave_smooth", "Smooth Waveform Data",
adf9f4b26039 [svn] - user-friendly names (UI side unimplemented still)
nenolod
parents: 149
diff changeset
377 "Smooth out the waveform data used by the wave_* actuators",
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
378 0, wave_smooth_opts,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
379 NULL, NULL, wave_smooth_exec
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
380 };
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
381
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
382 /* **************** wave_radial **************** */
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
383 static struct pn_actuator_option_desc wave_radial_opts[] =
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
384 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
385 { "base_radius", " ",
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
386 OPT_TYPE_FLOAT, { fval: 0 } },
183
37b53a5a9aa4 [svn] - allow waves to be drawn with a custom value instead of just 255
nenolod
parents: 155
diff changeset
387 {"value", "The colour value to use.", OPT_TYPE_INT, {ival: 255} },
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
388 /* {"lines", "Use lines instead of dots.", OPT_TYPE_BOOLEAN, {bval: TRUE} }, */
188
0d826917c56f [svn] - 64-bit safety (pass 1 of 2)
nenolod
parents: 183
diff changeset
389 { NULL }
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
390 };
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
391
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
392 static void
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
393 wave_radial_exec (const struct pn_actuator_option *opts,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
394 gpointer data)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
395 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
396 int i, x, y;
183
37b53a5a9aa4 [svn] - allow waves to be drawn with a custom value instead of just 255
nenolod
parents: 155
diff changeset
397 guchar value = (opts[1].val.ival < 0 || opts[1].val.ival > 255) ? 255 : opts[1].val.ival;
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
398
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
399 for(i=0; i<360; i++)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
400 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
401 x = (pn_image_data->width>>1)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
402 + (opts[0].val.fval + (pn_sound_data->pcm_data[0][(int)(i*(512.0/360.0))]>>8))
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
403 * cos_val[i];
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
404 y = (pn_image_data->height>>1)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
405 + (opts[0].val.fval + (pn_sound_data->pcm_data[0][(int)(i*(512.0/360.0))]>>8))
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
406 * sin_val[i];
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
407
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
408 pn_image_data->surface[0][PN_IMG_INDEX (CAPHILO(x,pn_image_data->width,0),
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
409 CAPHILO(y,pn_image_data->height,0))]
183
37b53a5a9aa4 [svn] - allow waves to be drawn with a custom value instead of just 255
nenolod
parents: 155
diff changeset
410 = value;
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
411 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
412 };
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
413
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
414 struct pn_actuator_desc builtin_wave_radial =
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
415 {
155
adf9f4b26039 [svn] - user-friendly names (UI side unimplemented still)
nenolod
parents: 149
diff changeset
416 "wave_radial", "Radial Waveform",
adf9f4b26039 [svn] - user-friendly names (UI side unimplemented still)
nenolod
parents: 149
diff changeset
417 "Draws a single waveform varying"
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
418 " radially from the center of the image",
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
419 0, wave_radial_opts,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
420 NULL, NULL, wave_radial_exec
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
421 };
292
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
422
283
6b3773478f9e [svn] - some base code for Scope, not yet enabled.
nenolod
parents: 269
diff changeset
423 /* **************** wave_scope **************** */
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
424
283
6b3773478f9e [svn] - some base code for Scope, not yet enabled.
nenolod
parents: 269
diff changeset
425 static struct pn_actuator_option_desc wave_scope_opts[] =
6b3773478f9e [svn] - some base code for Scope, not yet enabled.
nenolod
parents: 269
diff changeset
426 {
297
44ad758c2d98 [svn] - better default values for Scope.
nenolod
parents: 292
diff changeset
427 {"init_script", "Initialization script.", OPT_TYPE_STRING, {sval: "n = 800; t = -0.05;"} },
44ad758c2d98 [svn] - better default values for Scope.
nenolod
parents: 292
diff changeset
428 {"frame_script", "Script to run at the beginning of each frame.", OPT_TYPE_STRING, {sval: "t = t + 0.05;"} },
44ad758c2d98 [svn] - better default values for Scope.
nenolod
parents: 292
diff changeset
429 {"sample_script", "Script to run for each sample.", OPT_TYPE_STRING, {sval: "d = index + value; r = t + index * 3.141952924 * 4; x = cos(r) * d; y = sin(r) * d;"} },
283
6b3773478f9e [svn] - some base code for Scope, not yet enabled.
nenolod
parents: 269
diff changeset
430 {"lines", "Use lines instead of dots.", OPT_TYPE_BOOLEAN, {bval: TRUE} },
6b3773478f9e [svn] - some base code for Scope, not yet enabled.
nenolod
parents: 269
diff changeset
431 { NULL }
6b3773478f9e [svn] - some base code for Scope, not yet enabled.
nenolod
parents: 269
diff changeset
432 };
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
433
283
6b3773478f9e [svn] - some base code for Scope, not yet enabled.
nenolod
parents: 269
diff changeset
434 struct pn_scope_data
6b3773478f9e [svn] - some base code for Scope, not yet enabled.
nenolod
parents: 269
diff changeset
435 {
6b3773478f9e [svn] - some base code for Scope, not yet enabled.
nenolod
parents: 269
diff changeset
436 expression_t *expr_on_init, *expr_on_frame, *expr_on_sample;
6b3773478f9e [svn] - some base code for Scope, not yet enabled.
nenolod
parents: 269
diff changeset
437 symbol_dict_t *dict;
292
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
438 gboolean reset;
283
6b3773478f9e [svn] - some base code for Scope, not yet enabled.
nenolod
parents: 269
diff changeset
439 };
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
440
292
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
441 static void
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
442 wave_scope_init(gpointer *data)
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
443 {
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
444 *data = g_new0(struct pn_scope_data, 1);
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
445
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
446 /* the expressions will need to be compiled, so prepare for that */
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
447 ((struct pn_scope_data *)*data)->reset = TRUE;
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
448 }
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
449
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
450 static void
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
451 wave_scope_cleanup(gpointer op_data)
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
452 {
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
453 struct pn_scope_data *data = (struct pn_scope_data *) op_data;
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
454
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
455 g_return_if_fail(data != NULL);
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
456
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
457 if (data->expr_on_init)
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
458 expr_free(data->expr_on_init);
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
459
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
460 if (data->expr_on_frame)
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
461 expr_free(data->expr_on_frame);
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
462
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
463 if (data->expr_on_sample)
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
464 expr_free(data->expr_on_sample);
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
465
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
466 if (data->dict)
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
467 dict_free(data->dict);
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
468
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
469 if (data)
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
470 g_free(data);
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
471 }
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
472
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
473 static void
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
474 wave_scope_exec(const struct pn_actuator_option *opts,
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
475 gpointer op_data)
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
476 {
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
477 struct pn_scope_data *data = (struct pn_scope_data *) op_data;
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
478 gint i;
304
3d0b7ca9c8eb [svn] - add pn_draw_dot() and convert some functions to use that instead of redundant checks all over the code.
nenolod
parents: 297
diff changeset
479 gdouble *xf, *yf, *index, *value, *points;
292
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
480
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
481 if (data->reset)
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
482 {
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
483 if (data->dict)
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
484 dict_free(data->dict);
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
485
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
486 data->dict = dict_new();
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
487
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
488 if (opts[0].val.sval != NULL)
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
489 data->expr_on_init = expr_compile_string(opts[0].val.sval, data->dict);
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
490
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
491 if (opts[1].val.sval != NULL)
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
492 data->expr_on_frame = expr_compile_string(opts[1].val.sval,
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
493 data->dict);
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
494
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
495 if (opts[2].val.sval != NULL)
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
496 data->expr_on_sample = expr_compile_string(opts[2].val.sval,
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
497 data->dict);
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
498
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
499 if (data->expr_on_init != NULL)
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
500 expr_execute(data->expr_on_init, data->dict);
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
501
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
502 data->reset = FALSE;
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
503 }
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
504
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
505 xf = dict_variable(data->dict, "x");
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
506 yf = dict_variable(data->dict, "y");
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
507 index = dict_variable(data->dict, "index");
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
508 value = dict_variable(data->dict, "value");
304
3d0b7ca9c8eb [svn] - add pn_draw_dot() and convert some functions to use that instead of redundant checks all over the code.
nenolod
parents: 297
diff changeset
509 points = dict_variable(data->dict, "points");
292
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
510
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
511 if (data->expr_on_frame != NULL)
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
512 expr_execute(data->expr_on_frame, data->dict);
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
513
304
3d0b7ca9c8eb [svn] - add pn_draw_dot() and convert some functions to use that instead of redundant checks all over the code.
nenolod
parents: 297
diff changeset
514 if (*points > 513 || *points == 0)
3d0b7ca9c8eb [svn] - add pn_draw_dot() and convert some functions to use that instead of redundant checks all over the code.
nenolod
parents: 297
diff changeset
515 *points = 513;
3d0b7ca9c8eb [svn] - add pn_draw_dot() and convert some functions to use that instead of redundant checks all over the code.
nenolod
parents: 297
diff changeset
516
292
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
517 if (data->expr_on_sample != NULL)
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
518 {
304
3d0b7ca9c8eb [svn] - add pn_draw_dot() and convert some functions to use that instead of redundant checks all over the code.
nenolod
parents: 297
diff changeset
519 for (i = 0; i < *points; i++)
292
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
520 {
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
521 gint x, y;
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
522 static gint oldx, oldy;
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
523
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
524 *value = 1.0 * pn_sound_data->pcm_data[0][i & 511] / 32768.0;
304
3d0b7ca9c8eb [svn] - add pn_draw_dot() and convert some functions to use that instead of redundant checks all over the code.
nenolod
parents: 297
diff changeset
525 *index = i / (*points - 1);
292
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
526
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
527 expr_execute(data->expr_on_sample, data->dict);
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
528
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
529 x = (gint)(((*xf + 1.0) * (pn_image_data->width - 1) / 2) + 0.5);
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
530 y = (gint)(((*yf + 1.0) * (pn_image_data->height - 1) / 2) + 0.5);
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
531
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
532 if (i != 0)
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
533 pn_draw_line(oldx, oldy, x, y, 255);
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
534
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
535 oldx = x;
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
536 oldy = y;
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
537 }
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
538 }
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
539 }
4fc6f8d2c000 [svn] - Scope implementation, not yet hooked up.
nenolod
parents: 283
diff changeset
540
283
6b3773478f9e [svn] - some base code for Scope, not yet enabled.
nenolod
parents: 269
diff changeset
541 struct pn_actuator_desc builtin_wave_scope =
6b3773478f9e [svn] - some base code for Scope, not yet enabled.
nenolod
parents: 269
diff changeset
542 {
6b3773478f9e [svn] - some base code for Scope, not yet enabled.
nenolod
parents: 269
diff changeset
543 "wave_scope", "Scope",
6b3773478f9e [svn] - some base code for Scope, not yet enabled.
nenolod
parents: 269
diff changeset
544 "A programmable scope.",
6b3773478f9e [svn] - some base code for Scope, not yet enabled.
nenolod
parents: 269
diff changeset
545 0, wave_scope_opts,
6b3773478f9e [svn] - some base code for Scope, not yet enabled.
nenolod
parents: 269
diff changeset
546 wave_scope_init, wave_scope_cleanup, wave_scope_exec
6b3773478f9e [svn] - some base code for Scope, not yet enabled.
nenolod
parents: 269
diff changeset
547 };