#!/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);