use strict;
use warnings;

# my $SOX = '/usr/local/bin/sox';        # Linux
my $SOX = 'C:\Programme\sox\sox.exe';    # Windows

# Temporaerverzeichnis angeben
my $tmp_dir = 'tmpnoise';
mkdir($tmp_dir) if(! -e $tmp_dir);

# Hilfe ausgeben, falls gewuenscht
usage() if($ARGV[0] =~ /-[h?]/);

# Dateinamen von der Kommandozeile holen
my $outfile = shift;
unless (defined $outfile)
  {
  print "Keine Ausgabedatei angegeben\n";
  usage();
  }

# Defaultwerte einstellen
my $segs = shift || 32;          # Anzahl Dateien (max. 32)
my $min_dur = shift || 0.25;     # Mindestdauer
my $max_dur = shift || 1.0;      # Maximaldauer
my $min_center = shift || 500;   # Mittenfrequenz Untergrenze
my $max_center = shift || 8000;  # Mittenfrequenz Obergrenze
my $min_bw = shift || 100;       # Bandbreite Untergrenze
my $max_bw = shift || 1000;      # Bandbreite Obergrenze

# Speicher für die Namen der erzeugten Dateien
my $filelist = '';

# Segmente erzeugen
for my $i (1..$segs)
  {
  # Zufallswerte erzeugen
	my $dur = rand($max_dur) + $min_dur;
	my $center = int(rand($max_center - $min_center)) + $min_center;
	my $bw = int(rand($max_bw - $min_bw)) + $min_bw;
	# Dateinamen erzeugen ...
	my $segfile = "$tmp_dir/temp$i.wav";
	# ... und in der Liste speichern
	$filelist .= "$segfile ";
	# Sounddatei generieren
	system("$SOX -n $segfile synth $dur noise bandpass $center $bw");
  }

# Alle Segmente zusammenmixen
system("$SOX -m $filelist $outfile");


sub usage
  {
 	print "Usage: $0 <outfile> <segs (<=32)> <min dur> <max dur> " .
	      "<min cent> <max cent> <min bw> <max bw>\n"; 
	exit;
  }