From d55ec084e1e3ad61992ec2144bafda7cef5f3265 Mon Sep 17 00:00:00 2001 From: kthakore Date: Sat, 1 Jan 2011 02:13:37 -0500 Subject: [PATCH] Clean up and bumped the script --- code_listings/stereograph.pl | 61 +++++++++++++++++++++-------------- dist/SDL_Manual.html | 58 +++++++++++++++++++-------------- dist/SDL_Manual.pdf | Bin 1443228 -> 1443838 bytes src/08-music_and_sound.pod | 33 +++++++++++-------- 4 files changed, 90 insertions(+), 62 deletions(-) diff --git a/code_listings/stereograph.pl b/code_listings/stereograph.pl index 8f452eb..13b6deb 100644 --- a/code_listings/stereograph.pl +++ b/code_listings/stereograph.pl @@ -18,23 +18,17 @@ use SDL::Mixer::Effects; use SDLx::App; - -my $stream_data :shared = ''; -my $stream_lock :shared = 0; - - -my $lines = 100; - my $app = SDLx::App->new( init => SDL_INIT_AUDIO | SDL_INIT_VIDEO, width => 800, height => 600, depth => 32, - title => "Sound Event Demo", + title => "Music Visualizer", eoq => 1, dt => 0.2, ); + # Initialize the Audio unless ( SDL::Mixer::open_audio( 44100, AUDIO_S16, 2, 1024 ) == 0 ) { Carp::croak "Cannot open audio: " . SDL::get_error(); @@ -44,6 +38,9 @@ my $data_dir = '.'; my @songs = glob 'data/music/*.ogg'; +my $stream_data :shared = ''; +my $stream_lock :shared = 0; + # Music Effect to pull Stream Data sub music_data { my $channel = shift; @@ -60,9 +57,20 @@ sub music_data { } sub done_music_data { } + +my $music_data_effect_id = + SDL::Mixer::Effects::register( MIX_CHANNEL_POST, "main::music_data", + "main::done_music_data", 0 ); + + # Music Playing Callbacks my $current_song = 0; + +my $lines = $ARGV[0]; + $lines = 50 unless $lines; + + my $current_music_callback = sub { my( $delta, $app ) = @_; @@ -70,29 +78,37 @@ sub music_data { if( $stream_lock == 0 ){ $app->draw_rect([ 0, 0, $app->w(), $app->h()], 0x000000FF ); + $app->draw_gfx_text([5,$app->h()-10], [255,0,0,255], "Playing Song: ".$songs[$current_song-1]); my @stream = split( ',', $stream_data ); $stream_data = ''; my @left; my @right; + + #To show the right amount of lines we choose a cut of the stream + #this is purely for asthetic reasons. my $cut = $#stream/$lines; my @x; - + + #The width of each line is calculated to use. my $l_wdt= ( $app->w() / $lines) /2; for ( my $i = 0 ; $i < $#stream ; $i += $cut ) { + # In stereo mode the stream is split between two alternating streams my $left = $stream[$i]; my $right = $stream[ $i + 1 ]; + # For each bar we calculate a Y point and a X point my $point_y = ( ( ($left) ) * $app->h()/4 / 32000 ) + ($app->h/2); my $point_y_r = ( ( ($right) ) * $app->h()/4 / 32000 )+ ($app->h/2); my $point_x = ( $i / $#stream ) * $app->w; - - SDL::GFX::Primitives::box_RGBA( $app, $point_x-$l_wdt, 300, $point_x+$l_wdt, $point_y, 40, 0, 255, 128 ); - SDL::GFX::Primitives::box_RGBA( $app, $point_x-$l_wdt, 300, $point_x+$l_wdt, $point_y_r , 255, 0, 40, 128 ); + #Using the parameters + # Surface, box coordinates and color as RGBA + SDL::GFX::Primitives::box_RGBA( $app, $point_x-$l_wdt, $app->h()/2, $point_x+$l_wdt, $point_y, 40, 0, 255, 128 ); + SDL::GFX::Primitives::box_RGBA( $app, $point_x-$l_wdt, $app->h()/2, $point_x+$l_wdt, $point_y_r , 255, 0, 40, 128 ); } @@ -102,8 +118,8 @@ sub music_data { $app->flip(); }; -my $cms_move_callback; -my $pns_move_callback; +my $cms_move_callback_id; +my $pns_move_callback_id; my $play_next_song_callback = sub { @@ -113,20 +129,20 @@ sub music_data { SDL::Mixer::Music::hook_music_finished('main::music_finished_playing'); SDL::Mixer::Music::play_music($song, 0 ); - $app->remove_move_handler( $pns_move_callback ) if defined $pns_move_callback; - $cms_move_callback = $app->add_show_handler( $current_music_callback ); + $app->remove_move_handler( $pns_move_callback_id ) if defined $pns_move_callback_id; + $cms_move_callback_id = $app->add_show_handler( $current_music_callback ); }; sub music_finished_playing { SDL::Mixer::Music::halt_music(); - $pns_move_callback = $app->add_move_handler( $play_next_song_callback ); - $app->remove_show_handler($cms_move_callback); + $pns_move_callback_id = $app->add_move_handler( $play_next_song_callback ); + $app->remove_show_handler($cms_move_callback_id); } -my $music_data_effect_id = - SDL::Mixer::Effects::register( MIX_CHANNEL_POST, "main::music_data", - "main::done_music_data", 0 ); + +$pns_move_callback_id= $app->add_move_handler( $play_next_song_callback); + $app->add_event_handler( sub { @@ -141,9 +157,6 @@ sub music_finished_playing { } ); -$pns_move_callback= $app->add_move_handler( $play_next_song_callback); - - $app->run(); SDL::Mixer::Effects::unregister( MIX_CHANNEL_POST, $music_data_effect_id ); diff --git a/dist/SDL_Manual.html b/dist/SDL_Manual.html index 5e1651a..79e8c2e 100644 --- a/dist/SDL_Manual.html +++ b/dist/SDL_Manual.html @@ -3272,6 +3272,8 @@

Music Visualizer

+

The Code and Comments

+
        use strict;
         use warnings;
 
@@ -3291,11 +3293,11 @@ 

Music Visualizer

use SDL::Mixer::Music; use SDL::Mixer::Effects; - use SDLx::App; + use SDLx::App;
- my $lines = 100; +

Start the application with audio and video support.

- my $app = SDLx::App->new( +
        my $app = SDLx::App->new(
                 init   => SDL_INIT_AUDIO | SDL_INIT_VIDEO,
                 width  => 800,
                 height => 600,
@@ -3352,7 +3354,12 @@ 

Music Visualizer

playing. We read the stream data and show it on the screen as a wave form.

-
        # Music Playing Callbacks 
+

The number of lines to show in our visualizer.

+ +
    my $lines = $ARGV[0];
+       $lines = 50 unless $lines;
+
+        # Music Playing Callbacks 
         my $current_song = 0;
 
         my $current_music_callback = sub { 
@@ -3362,6 +3369,7 @@ 

Music Visualizer

if( $stream_lock == 0 ){ $app->draw_rect([ 0, 0, $app->w(), $app->h()], 0x000000FF ); + $app->draw_gfx_text([5,$app->h()-10], [255,0,0,255], "Playing Song: ".$songs[$current_song-1]); my @stream = split( ',', $stream_data ); $stream_data = ''; @@ -3383,8 +3391,13 @@

Music Visualizer

my $point_x = ( $i / $#stream ) * $app->w; - SDL::GFX::Primitives::box_RGBA( $app, $point_x-$l_wdt, 300, $point_x+$l_wdt, $point_y, 40, 0, 255, 128 ); - SDL::GFX::Primitives::box_RGBA( $app, $point_x-$l_wdt, 300, $point_x+$l_wdt, $point_y_r , 255, 0, 40, 128 ); + SDL::GFX::Primitives::box_RGBA( $app, $point_x-$l_wdt, 300, + $point_x+$l_wdt, $point_y, + 40, 0, 255, 128 ); + + SDL::GFX::Primitives::box_RGBA( $app, $point_x-$l_wdt, 300, + $point_x+$l_wdt, $point_y_r , + 255, 0, 40, 128 ); } @@ -3393,18 +3406,17 @@

Music Visualizer

} $app->flip(); }; +When a song is finished playing we remove the show handler and hook on another callback to switch to the +next song gracefully. - my $cms_move_callback; - my $pns_move_callback;
- -

When a song is finished playing we remove the show handler and hook on -another callback to switch to the next song gracefully.

+ my $cms_move_callback_id; + my $pns_move_callback_id; -
        sub music_finished_playing { 
+        sub music_finished_playing { 
 
                 SDL::Mixer::Music::halt_music();
-                $pns_move_callback = $app->add_move_handler( $play_next_song_callback ); 
-                $app->remove_show_handler($cms_move_callback); 
+                $pns_move_callback_id = $app->add_move_handler( $play_next_song_callback ); 
+                $app->remove_show_handler($cms_move_callback_id); 
 
         }
 
@@ -3416,11 +3428,14 @@ 

Music Visualizer

SDL::Mixer::Music::hook_music_finished('main::music_finished_playing'); SDL::Mixer::Music::play_music($song, 0 ); - $app->remove_move_handler( $pns_move_callback ) if defined $pns_move_callback; - $cms_move_callback = $app->add_show_handler( $current_music_callback ); - };
+ $app->remove_move_handler( $pns_move_callback_id ) if defined $pns_move_callback_id; + $cms_move_callback_id = $app->add_show_handler( $current_music_callback ); + }; +Add the first callback to get our first song. + + $pns_move_callback_id= $app->add_move_handler( $play_next_song_callback);
-

The event handler allows you to move through the songs.

+

Add a event handler allows you to move through the songs.

        $app->add_event_handler(
         sub {
@@ -3433,12 +3448,7 @@ 

Music Visualizer

} } - );
- -

Add the first callback to get our first song, and start runing the -$app.

- -
        $pns_move_callback= $app->add_move_handler( $play_next_song_callback);
+        );
 
         $app->run();
diff --git a/dist/SDL_Manual.pdf b/dist/SDL_Manual.pdf index a56d89cc5981b0484b2be82dfd90ab72f4bc279b..c41331f61d474be9db990617280510fbe4553918 100644 GIT binary patch delta 70770 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�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 QFbeX9O`5dt{QZXgf4vRPMgRZ+ delta 71287 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 diff --git a/src/08-music_and_sound.pod b/src/08-music_and_sound.pod index 630826d..d212fb1 100644 --- a/src/08-music_and_sound.pod +++ b/src/08-music_and_sound.pod @@ -445,6 +445,7 @@ like: \caption{Simple Music Visualization} \label{fig:Visualization} +=head2 The Code and Comments use strict; use warnings; @@ -467,7 +468,7 @@ like: use SDLx::App; - my $lines = 100; +Start the application with audio and video support. my $app = SDLx::App->new( init => SDL_INIT_AUDIO | SDL_INIT_VIDEO, @@ -523,6 +524,11 @@ We hook the callback into C. The drawing callback for the C when a song is playing. We read the stream data and show it on the screen as a wave form. +The number of lines to show in our visualizer. + + my $lines = $ARGV[0]; + $lines = 50 unless $lines; + # Music Playing Callbacks my $current_song = 0; @@ -533,6 +539,7 @@ The drawing callback for the C when a song is playing. We read the st if( $stream_lock == 0 ){ $app->draw_rect([ 0, 0, $app->w(), $app->h()], 0x000000FF ); + $app->draw_gfx_text([5,$app->h()-10], [255,0,0,255], "Playing Song: ".$songs[$current_song-1]); my @stream = split( ',', $stream_data ); $stream_data = ''; @@ -569,18 +576,17 @@ The drawing callback for the C when a song is playing. We read the st } $app->flip(); }; - - my $cms_move_callback; - my $pns_move_callback; - When a song is finished playing we remove the show handler and hook on another callback to switch to the next song gracefully. + my $cms_move_callback_id; + my $pns_move_callback_id; + sub music_finished_playing { SDL::Mixer::Music::halt_music(); - $pns_move_callback = $app->add_move_handler( $play_next_song_callback ); - $app->remove_show_handler($cms_move_callback); + $pns_move_callback_id = $app->add_move_handler( $play_next_song_callback ); + $app->remove_show_handler($cms_move_callback_id); } @@ -592,11 +598,14 @@ next song gracefully. SDL::Mixer::Music::hook_music_finished('main::music_finished_playing'); SDL::Mixer::Music::play_music($song, 0 ); - $app->remove_move_handler( $pns_move_callback ) if defined $pns_move_callback; - $cms_move_callback = $app->add_show_handler( $current_music_callback ); + $app->remove_move_handler( $pns_move_callback_id ) if defined $pns_move_callback_id; + $cms_move_callback_id = $app->add_show_handler( $current_music_callback ); }; +Add the first callback to get our first song. -The event handler allows you to move through the songs. + $pns_move_callback_id= $app->add_move_handler( $play_next_song_callback); + +Add a event handler allows you to move through the songs. $app->add_event_handler( sub { @@ -611,10 +620,6 @@ The event handler allows you to move through the songs. } ); -Add the first callback to get our first song, and start runing the C<$app>. - - $pns_move_callback= $app->add_move_handler( $play_next_song_callback); - $app->run(); Gracefully stop C.