annotate src/paranormal/wave.c @ 194:5e8cf0611af3 trunk

[svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform) - update rush preset (DON'T use lines here.)
author nenolod
date Fri, 03 Nov 2006 03:10:26 -0800
parents 4b48e6e9b3cb
children 0c5e3d562d99
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
1 #ifdef HAVE_CONFIG_H
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
2 # include <config.h>
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
3 #endif
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
4
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
5 #include <math.h>
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
6
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
7 #include "paranormal.h"
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
8 #include "actuators.h"
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
9 #include "pn_utils.h"
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
10
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
11 /* **************** wave_horizontal **************** */
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
12 struct pn_actuator_option_desc wave_horizontal_opts[] =
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
13 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
14 {"channels", "Which sound channels to use: negative = channel 1, \npositive = channel 2, "
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
15 "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
16 {"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
17 {"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
18 { NULL }
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
19 };
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
20
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
21 static void
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
22 wave_horizontal_exec_dots (const struct pn_actuator_option *opts,
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
23 gpointer data)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
24 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
25 int i;
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
26 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
27 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
28
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
29 for (i=0; i<pn_image_data->width; i++) {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
30
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
31 /*single channel, centered horz.*/
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
32 if ( opts[0].val.ival ) {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
33 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
34 - CAP (pn_sound_data->pcm_data[channel]
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
35 [i*512/pn_image_data->width]>>8,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
36 (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
37 = value;
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
38 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
39
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
40 /*both channels, at 1/4 and 3/4 of the screen*/
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
41 else {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
42 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
43 CAP( (pn_sound_data->pcm_data[0]
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
44 [i*512/pn_image_data->width]>>9),
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
45 (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
46 = value;
149
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 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
49 CAP( (pn_sound_data->pcm_data[1]
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
50 [i*512/pn_image_data->width]>>9),
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
51 (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
52 = value;
149
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 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
55 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
56
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
57 void
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
58 wave_horizontal_exec_lines (const struct pn_actuator_option *opts,
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
59 gpointer data)
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
60 {
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
61 int channel = ( opts[0].val.ival < 0 ) ? 0 : 1;
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
62 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
63 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
64 int *x2_pos, *y2_pos; /* dynamic tables which store the positions for the line */
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
65 int i, step;
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
66
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
67 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
68 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
69 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
70 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
71
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
72 step = round((gfloat)pn_image_data->width / 256.0);
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
73
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
74 /* calculate the line. */
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
75 for (i = 0; i < 256; i++)
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
76 {
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
77 if (opts[0].val.ival != 0)
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
78 {
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
79 x_pos[i] = i * step;
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
80 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
81 CAP (pn_sound_data->pcm_data[channel][i * 2]>>8,
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
82 (pn_image_data->height>>1)-1);
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 else
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
85 {
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
86 x_pos[i] = i * step;
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
87 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
88 CAP (pn_sound_data->pcm_data[0][i * 2]>>9,
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
89 (pn_image_data->height>>2)-1);
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 x2_pos[i] = i * step;
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
92 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
93 CAP (pn_sound_data->pcm_data[1][i * 2]>>9,
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
94 (pn_image_data->height>>2)-1);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
95
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
96 }
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
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
99 /* draw the line. */
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
100 for (i = 1; i < 256; i++)
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
101 {
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
102 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
103
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
104 if ( opts[0].val.ival == 0 )
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
105 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
106 }
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 g_free(x_pos);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
109 g_free(y_pos);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
110 g_free(x2_pos);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
111 g_free(y2_pos);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
112 }
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
113
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
114 static void
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
115 wave_horizontal_exec (const struct pn_actuator_option *opts,
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
116 gpointer data)
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
117 {
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
118 if (opts[2].val.bval == TRUE)
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
119 wave_horizontal_exec_lines(opts, data);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
120 else
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
121 wave_horizontal_exec_dots(opts, data);
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
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
124 struct pn_actuator_desc builtin_wave_horizontal =
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
125 {
155
adf9f4b26039 [svn] - user-friendly names (UI side unimplemented still)
nenolod
parents: 149
diff changeset
126 "wave_horizontal", "Horizontal Waveform",
adf9f4b26039 [svn] - user-friendly names (UI side unimplemented still)
nenolod
parents: 149
diff changeset
127 "Draws one or two waveforms horizontally across "
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
128 "the drawing surface",
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
129 0, wave_horizontal_opts,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
130 NULL, NULL, wave_horizontal_exec
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
131 };
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
132
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
133 /* **************** wave_vertical **************** */
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
134 struct pn_actuator_option_desc wave_vertical_opts[] =
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
135 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
136 {"channels", "Which sound channels to use: negative = channel 1, \npositive = channel 2, "
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
137 "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
138 {"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
139 {"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
140 { NULL }
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
141 };
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
142
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
143 static void
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
144 wave_vertical_exec_dots (const struct pn_actuator_option *opts,
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
145 gpointer data)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
146 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
147 int i;
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
148 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
149 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
150
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
151 for (i=0; i<pn_image_data->height; i++) {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
152 if ( opts[0].val.ival ) {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
153 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
154 - CAP (pn_sound_data->pcm_data[channel]
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
155 [i*512/pn_image_data->height]>>8,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
156 (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
157 = value;
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
158 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
159 else {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
160 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
161 - CAP (pn_sound_data->pcm_data[0]
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
162 [i*512/pn_image_data->height]>>9,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
163 (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
164 = value;
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
165 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
166 -CAP (pn_sound_data->pcm_data[1]
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
167 [i*512/pn_image_data->height]>>9,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
168 (pn_image_data->width>>2)-1), i)]
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
169
183
37b53a5a9aa4 [svn] - allow waves to be drawn with a custom value instead of just 255
nenolod
parents: 155
diff changeset
170 = value;
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
171 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
172 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
173 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
174
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
175 static void
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
176 wave_vertical_exec_lines (const struct pn_actuator_option *opts,
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
177 gpointer data)
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
178 {
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
179 int channel = ( opts[0].val.ival < 0 ) ? 0 : 1;
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
180 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
181 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
182 int *x2_pos, *y2_pos; /* dynamic tables which store the positions for the line */
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
183 int i, step;
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
184
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
185 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
186 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
187 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
188 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
189
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
190 step = round((gfloat)pn_image_data->height / 128.0);
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
191
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
192 /* calculate the line. */
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
193 for (i = 0; i < 128; i++)
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
194 {
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
195 if (opts[0].val.ival != 0)
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
196 {
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
197 x_pos[i] = (pn_image_data->width>>1) -
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
198 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
199 [i*4]>>8,
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
200 (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
201 y_pos[i] = i * step;
193
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 else
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
204 {
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
205 x_pos[i] = (pn_image_data->width>>2)
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
206 - 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
207 [i*4]>>9,
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
208 (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
209 y_pos[i] = i * step;
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
210
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
211 x2_pos[i] = 3*(pn_image_data->width>>2)
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
212 - 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
213 [i*4]>>9,
193
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
214 (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
215 y2_pos[i] = i * step;
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 }
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
218
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
219 /* draw the line. */
194
5e8cf0611af3 [svn] - faster line calculation algorithm (only calculates 256 or 128 points of the waveform)
nenolod
parents: 193
diff changeset
220 for (i = 1; i < 128; i++)
193
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 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
223
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
224 if ( opts[0].val.ival == 0 )
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
225 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
226 }
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 g_free(x_pos);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
229 g_free(y_pos);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
230 g_free(x2_pos);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
231 g_free(y2_pos);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
232 }
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
233
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
234 static void
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
235 wave_vertical_exec (const struct pn_actuator_option *opts,
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
236 gpointer data)
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
237 {
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
238 if (opts[2].val.bval == TRUE)
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
239 wave_vertical_exec_lines(opts, data);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
240 else
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
241 wave_vertical_exec_dots(opts, data);
4b48e6e9b3cb [svn] - rewrite line drawing algorithm for speed
nenolod
parents: 188
diff changeset
242 }
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
243
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
244 struct pn_actuator_desc builtin_wave_vertical =
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
245 {
155
adf9f4b26039 [svn] - user-friendly names (UI side unimplemented still)
nenolod
parents: 149
diff changeset
246 "wave_vertical", "Vertical Waveform",
adf9f4b26039 [svn] - user-friendly names (UI side unimplemented still)
nenolod
parents: 149
diff changeset
247 "Draws one or two waveforms vertically across "
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
248 "the drawing surface",
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
249 0, wave_vertical_opts,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
250 NULL, NULL, wave_vertical_exec
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
251 };
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
252
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
253 /* FIXME: allow for only 1 channel for wave_normalize & wave_smooth */
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
254 /* **************** wave_normalize **************** */
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
255 static struct pn_actuator_option_desc wave_normalize_opts[] =
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
256 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
257 { "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
258 "normalized; if negative, hfrac is used", OPT_TYPE_INT, { ival: -1 } },
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
259 { "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
260 "waveform will be normalized; if negative, vfrac is used",
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
261 OPT_TYPE_FLOAT, { fval: -1 } },
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
262 { "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
263 "waveform will be normalized",
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
264 OPT_TYPE_FLOAT, { fval: .125 } },
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
265 { "channels", "Which sound channel(s) to normalize: negative = channel 1,\n"
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
266 "\tpositive = channel 2, 0 = both channels.",
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
267 OPT_TYPE_INT, { ival: 0 } },
188
0d826917c56f [svn] - 64-bit safety (pass 1 of 2)
nenolod
parents: 183
diff changeset
268 { NULL }
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
269 };
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
270
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
271 static void
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
272 wave_normalize_exec (const struct pn_actuator_option *opts,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
273 gpointer data)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
274 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
275 int i, j, max=0;
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
276 float denom;
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 for (j=0; j<2; j++)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
279 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
280 if ( !(opts[3].val.ival) || (opts[3].val.ival < 0 && j == 0) ||
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
281 (opts[3].val.ival > 0 && j == 1) ) {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
282
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
283 for (i=0; i<512; i++)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
284 if (abs(pn_sound_data->pcm_data[j][i]) > max)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
285 max = abs(pn_sound_data->pcm_data[j][i]);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
286
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
287 if (opts[0].val.ival > 0)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
288 denom = max/(opts[0].val.ival<<8);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
289 else if (opts[1].val.fval > 0)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
290 denom = max/(opts[1].val.fval * (pn_image_data->width<<8));
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
291 else
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
292 denom = max/(opts[2].val.fval * (pn_image_data->height<<8));
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
293
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
294 if (denom > 0)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
295 for (i=0; i<512; i++)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
296 pn_sound_data->pcm_data[j][i]
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
297 /= denom;
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
298 }
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 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
301
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
302 struct pn_actuator_desc builtin_wave_normalize =
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
303 {
155
adf9f4b26039 [svn] - user-friendly names (UI side unimplemented still)
nenolod
parents: 149
diff changeset
304 "wave_normalize", "Normalize Waveform Data",
adf9f4b26039 [svn] - user-friendly names (UI side unimplemented still)
nenolod
parents: 149
diff changeset
305 "Normalizes the waveform data used by the wave_* actuators",
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
306 0, wave_normalize_opts,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
307 NULL, NULL, wave_normalize_exec
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
308 };
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
309
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
310 /* **************** wave_smooth **************** */
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
311 struct pn_actuator_option_desc wave_smooth_opts[] =
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
312 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
313 { "channels", "Which sound channel(s) to smooth: negative = channel 1, \n"
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
314 "\tpositive = channel 2, 0 = both channels.",
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
315 OPT_TYPE_INT, { ival: 0 } },
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
316 {0}
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
317 };
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 static void
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
320 wave_smooth_exec (const struct pn_actuator_option *opts,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
321 gpointer data)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
322 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
323 int i, j, k;
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
324 gint16 tmp[512];
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 for (j=0; j<2; j++)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
327 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
328 if ( !(opts[0].val.ival) || (opts[0].val.ival < 0 && j == 0) ||
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
329 (opts[0].val.ival > 0 && j == 1) ) {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
330
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
331 for (i=4; i<508; i++)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
332 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
333 k = (pn_sound_data->pcm_data[j][i]<<3)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
334 + (pn_sound_data->pcm_data[j][i+1]<<2)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
335 + (pn_sound_data->pcm_data[j][i-1]<<2)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
336 + (pn_sound_data->pcm_data[j][i+2]<<2)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
337 + (pn_sound_data->pcm_data[j][i-2]<<2)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
338 + (pn_sound_data->pcm_data[j][i+3]<<1)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
339 + (pn_sound_data->pcm_data[j][i-3]<<1)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
340 + (pn_sound_data->pcm_data[j][i+4]<<1)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
341 + (pn_sound_data->pcm_data[j][i-4]<<1);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
342 tmp[i] = k >> 5;
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 memcpy (pn_sound_data->pcm_data[j]+4, tmp, sizeof (gint16) * 504);
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
345 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
346 }
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
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
349 struct pn_actuator_desc builtin_wave_smooth =
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
350 {
155
adf9f4b26039 [svn] - user-friendly names (UI side unimplemented still)
nenolod
parents: 149
diff changeset
351 "wave_smooth", "Smooth Waveform Data",
adf9f4b26039 [svn] - user-friendly names (UI side unimplemented still)
nenolod
parents: 149
diff changeset
352 "Smooth out the waveform data used by the wave_* actuators",
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
353 0, wave_smooth_opts,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
354 NULL, NULL, wave_smooth_exec
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
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
357 /* **************** wave_radial **************** */
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
358 static struct pn_actuator_option_desc wave_radial_opts[] =
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
359 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
360 { "base_radius", " ",
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
361 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
362 {"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
363 /* {"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
364 { NULL }
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
365 };
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
366
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
367 static void
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
368 wave_radial_exec (const struct pn_actuator_option *opts,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
369 gpointer data)
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 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
372 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
373
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
374 for(i=0; i<360; i++)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
375 {
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
376 x = (pn_image_data->width>>1)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
377 + (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
378 * cos_val[i];
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
379 y = (pn_image_data->height>>1)
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
380 + (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
381 * sin_val[i];
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
382
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
383 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
384 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
385 = value;
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
386 }
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
387 };
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
388
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
389 struct pn_actuator_desc builtin_wave_radial =
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
390 {
155
adf9f4b26039 [svn] - user-friendly names (UI side unimplemented still)
nenolod
parents: 149
diff changeset
391 "wave_radial", "Radial Waveform",
adf9f4b26039 [svn] - user-friendly names (UI side unimplemented still)
nenolod
parents: 149
diff changeset
392 "Draws a single waveform varying"
149
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
393 " radially from the center of the image",
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
394 0, wave_radial_opts,
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
395 NULL, NULL, wave_radial_exec
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
396 };
fd9c0a5871ac [svn] - new and IMPROVED paranormal visualization studio
nenolod
parents:
diff changeset
397
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