| #!/usr/bin/perl -w |
| |
| # launch a gst-launch pipeline to display a visualisation of the |
| # input audio. |
| # make use of default input srcs. |
| # visualisation plugin is specified on command line. |
| |
| ### packages |
| |
| use File::Basename; |
| |
| |
| my (%pipes, %cfg); |
| |
| sub read_config |
| { |
| my $config_file = `echo -n ~`."/.gst"; |
| if (-e $config_file) |
| { |
| open CONFIG, $config_file; |
| while (<CONFIG>) |
| { |
| chomp; |
| s/#.*//; |
| s/\s+$//; |
| next unless length; |
| my ($var, $value) = split (/\s*=\s*/, $_, 2); |
| $cfg{$var} = $value; |
| } |
| if (!($cfg{AUDIOSRC})) |
| { |
| print "Please add an AUDIOSRC to $config_file !\n"; |
| } |
| if (!($cfg{VIDEOSINK})) |
| { |
| print "Please add a VIDEOSINK to $config_file !\n"; |
| } |
| } |
| else |
| { |
| print "No configuration file $config_file found. You might want to create one.\n"; |
| } |
| if (!defined $cfg{AUDIOSRC}) { $cfg{AUDIOSRC} = "osssrc"; } |
| if (!defined $cfg{VIDEOSINK}) { $cfg{VIDEOSINK} = "xvimagesink"; } |
| if (!defined $cfg{CVS_PATH}) { $cfg{CVS_PATH} = `echo -n ~`."/gst/cvs"; } |
| } |
| |
| sub visualise(@) |
| { |
| my $vis = $cfg{VISUALIZER}; |
| $vis = shift() if ($#_ != -1); |
| $vis = "goom" unless $vis; |
| |
| my $pipe; |
| $pipe = $vis unless $pipe = $pipes{$vis}; |
| |
| $command = "gst-launch-@GST_MAJORMINOR@ $cfg{AUDIOSRC} ! $pipe ! { queue ! ffmpegcolorspace ! $cfg{VIDEOSINK} }"; |
| print "Running $command\n"; |
| system ("PATH=\$PATH:".$cfg{CVS_PATH}."/gstreamer/tools $command"); |
| } |
| |
| ### main |
| |
| read_config (); |
| |
| %pipes = ( |
| "goom", "goom", |
| "chart", "audioconvert ! chart", |
| "synaesthesia", "synaesthesia", |
| "monoscope", "audioconvert ! monoscope" |
| ); |
| |
| if ($#ARGV > 0) { |
| print STDERR "Usage: gst-visualise [visualiser]\n"; |
| exit 1; |
| } |
| |
| visualise(@ARGV); |
| |