VISUAL_C_LINKAGE int lv_gforce_render (VisPluginData *plugin, VisVideo *video, VisAudio *audio) { GForcePrivate *priv = (GForcePrivate *) visual_object_get_private (VISUAL_OBJECT (plugin)); VisBuffer pcmbuf; VisBuffer freqbuf; int i; long time; float gSoundBuf[SND_BUF_SIZE]; float gFFTBuf[FFT_BUF_SIZE]; visual_buffer_set_data_pair (&pcmbuf, gSoundBuf, sizeof (gSoundBuf)); visual_audio_get_sample_mixed_simple (audio, &pcmbuf, 2, VISUAL_AUDIO_CHANNEL_LEFT, VISUAL_AUDIO_CHANNEL_RIGHT); visual_buffer_set_data_pair (&freqbuf, gFFTBuf, sizeof (gFFTBuf)); visual_audio_get_spectrum_for_sample_multiplied (&freqbuf, &pcmbuf, TRUE, 3.0); // Increase volume for (i = 0; i < SND_BUF_SIZE; i++) gSoundBuf[i] *= 32768; // Set the video buffer priv->gGF->SetOutVideoBuffer ((unsigned char *) visual_video_get_pixels (video)); time = EgOSUtils::CurTimeMS (); priv->gGF->RecordSample (time, gSoundBuf, .000043, NUMSAMPLES, gFFTBuf, 1, FFT_BUF_SIZE); return 0; }
static void act_bumpscope_render (VisPluginData *plugin, VisVideo *video, VisAudio *audio) { BumpscopePrivate *priv = visual_plugin_get_private (plugin); priv->video = video; visual_audio_get_sample_mixed_simple (audio, priv->pcmbuf, 2, VISUAL_AUDIO_CHANNEL_LEFT, VISUAL_AUDIO_CHANNEL_RIGHT); __bumpscope_render_pcm (priv, visual_buffer_get_data (priv->pcmbuf)); visual_mem_copy (visual_video_get_pixels (video), priv->rgb_buf2, visual_video_get_size (video)); priv->colorupdate++; /* Let's not overload the color selector */ if (priv->colorupdate > 1) priv->colorupdate = 0; if (priv->colorchanged == TRUE && priv->colorupdate == 0) { /* I couldn't hold myself */ visual_param_set_value_color ( visual_param_list_get ( visual_plugin_get_params (plugin), "color"), &priv->color); } }
static int act_jakdaw_render (VisPluginData *plugin, VisVideo *video, VisAudio *audio) { JakdawPrivate *priv = visual_object_get_private (VISUAL_OBJECT (plugin)); uint32_t *vscr = visual_video_get_pixels (video); visual_audio_get_sample_mixed_simple (audio, priv->pcmbuf, 2, VISUAL_AUDIO_CHANNEL_LEFT, VISUAL_AUDIO_CHANNEL_RIGHT); visual_audio_get_spectrum_for_sample (priv->freqbuf, priv->pcmbuf, TRUE); _jakdaw_feedback_render (priv, vscr); _jakdaw_plotter_draw (priv, visual_buffer_get_data (priv->pcmbuf), visual_buffer_get_data (priv->freqbuf), vscr); return 0; }
static int lv_flower_render (VisPluginData *plugin, VisVideo *video, VisAudio *audio) { FlowerPrivate *priv = visual_object_get_private (VISUAL_OBJECT (plugin)); VisBuffer *pcmbuf; VisBuffer *freqbuf; float pcm[512]; float freqnorm[256]; float temp_bars[NOTCH_BANDS]; float f; int b; int i; pcmbuf = visual_buffer_new (); freqbuf = visual_buffer_new (); visual_buffer_set_data_pair (pcmbuf, pcm, sizeof (pcm)); visual_buffer_set_data_pair (freqbuf, freqnorm, sizeof (freqnorm)); visual_audio_get_sample_mixed_simple (audio, pcmbuf, 2, VISUAL_AUDIO_CHANNEL_LEFT, VISUAL_AUDIO_CHANNEL_RIGHT); visual_audio_get_spectrum_for_sample (freqbuf, pcmbuf, TRUE); /* Activate the effect change timer */ if (!visual_timer_is_active (priv->t)) visual_timer_start (priv->t); /* At 15 secs, do with new settings, reset timer */ if (visual_timer_is_past2 (priv->t, 15, 0)) { priv->flower.tension_new = (-visual_random_context_float (priv->rcxt)) * 12.0; priv->flower.continuity_new = (visual_random_context_float (priv->rcxt) - 0.5) * 32.0; visual_timer_start (priv->t); } /* Activate global timer */ if (!visual_timer_is_active (priv->flower.timer)) visual_timer_start (priv->flower.timer); for (b=0; b<priv->nof_bands; b++) temp_bars[b]=0.0; for (i=0; i<256; i++) { for (b=0; b<priv->nof_bands; b++) { f=process_notch (priv->notch[b], freqnorm[i] * 15); if (fabs(f)>temp_bars[b]) temp_bars[b]=fabs(f); } } /* Not part of the if !!! */ { #define HEIGHT 1.0 #define D 0.45 #define TAU 0.25 #define DIF 5.0 float lk=2.0; float l0=2.0; float scale = HEIGHT / ( log((1 - D) / D) * 2 ); float x00 = D*D*1.0/(2 * D - 1); float y00 = -log(-x00) * scale; float y; int i; for (i=0; i<priv->nof_bands; i++) { y=temp_bars[i * 8]; y=y*(i*lk+l0); y = ( log(y - x00) * scale + y00 ); /* Logarithmic amplitude */ y = ( (DIF-2.0)*y + (i==0 ? 0 : temp_bars[i - 1]) + (i==31 ? 0 : temp_bars[i + 1])) / DIF; y=((1.0-TAU)*priv->flower.audio_bars[i]+TAU*y) * 1.00; priv->flower.audio_bars[i]=y; } } priv->flower.roty += (priv->flower.audio_bars[15]) * 0.6; priv->flower.rotx += (priv->flower.audio_bars[1]) * 0.7; priv->flower.posz = +1; render_flower_effect (&priv->flower); visual_buffer_free (pcmbuf); visual_buffer_free (freqbuf); return 0; }
static int nebulus_sound (NebulusPrivate *priv, VisAudio *audio) { int i, c, y, tmp; GLfloat val, energy = 0; int xscale[] = { 0, 1, 2, 3, 5, 7, 10, 14, 20, 28, 40, 54, 74, 101, 137, 187, 255 }; float *fbuf; VisBuffer *buf; float freq[256]; visual_audio_get_sample_mixed_simple (audio, priv->pcmbuf, 2, VISUAL_AUDIO_CHANNEL_LEFT, VISUAL_AUDIO_CHANNEL_RIGHT); buf = visual_buffer_new_wrap_data (freq, sizeof (freq)); visual_audio_get_spectrum_for_sample (buf, priv->pcmbuf, FALSE); visual_buffer_free (buf); fbuf = visual_buffer_get_data (priv->pcmbuf); for (i = 0; i < 1024; i++) { pcm_data[i] = fbuf[i] * 32767; // FIXME pull the 32767 as a constant from somewhere, also in goom2.c } for(y = 15; y > 0; y--) { for(i = 0; i < 16; i++) heights[y][i] = heights[y - 1][i]; } for(i = 0; i < NUM_BANDS; i++) { for(c = xscale[i], y = 0; c < xscale[i + 1]; c++) { if(freq[c] > y) y = freq[c]; } loudness += (y / (xscale[i + 1] - xscale[i] + 1)) * (abs (i - NUM_BANDS / 2) + NUM_BANDS / 2) * (4 + i); y >>= 7; if(y > 0) val = (log(y) * scale); else val = 0; heights[0][i] = val; } loudness /= (NUM_BANDS * 4); beat = nebulus_detect_beat (loudness); too_long++; if (!point_general->freeze) { if (too_long > 1000) { too_long = 0; point_general->effect = nebulus_random_effect(); point_general->changement = TRUE; } if (beat) { if (beat_compteur > point_general->beat - 1) { point_general->effect = nebulus_random_effect(); point_general->changement = TRUE; beat_compteur = 0; too_long = 0; } beat_compteur += beat; } } for (i = 0; i < 256; i++) { tmp = freq[i] * 0.0625; energy += tmp * tmp; } energy = energy / 65536 / 256 * 256; energy += 6.0f; energy *= 1.2f; if (energy > 10) energy = 10; point_general->energy = energy; return 0; }