STREAMRIPPER(1)						       STREAMRIPPER(1)



NAME
       streamripper - rip shoutcast radio streams to mp3 files

SYNOPSIS
       streamripper URL [options]

DESCRIPTION
       Streamripper records shoutcast and icecast compatible streams.  It uses
       meta data within a shoutcast stream to determine the beginning and  end
       of  each song, and stores the songs on your hard disk as individual mp3
       files.  In addition, streamripper includes a relay server for listening
       to the station while you are recording.

OPTIONS
       -h     Print help and exit

       -v     Print version info and quit

       -d dir The destination directory

       Select  a  different base directory for ripping, just in case you don't
       want to dump tons of mp3's into whatever directory your at.

       -s     Don't create a directory for each stream

       Normally streamripper will make a directory with the same name  as  the
       stream to place the tracks into, this disables that.

       -D pattern
	      Use a pattern to format the output file names

       This  option  tells  streamripper  how to form the filenames.  If -D is
       used, the options -s and -P will be ignored.  If the pattern represents
       an  absolute  path, the -d option will also be ignored.	If both -D and
       -q are specified, -q will only be used to set the start count if	 a  %q
       token is included.

       By  default  the	 output files are put in a directory that has the same
       name as the stream, and files are formed from  the  artist  and	title.
       But  you	 can override this behavior and create the output files as you
       like.  The output file names are generated by substituting tokens  with
       values that depend on the stream, track, or environment.	 The following
       tokens can be used for substitution.

	   %S	     Stream
	   %A	     Artist
	   %T	     Title
	   %a	     Album
	   %D	     Date and time (per song)
	   %d	     Date and time (per execution)
	   %q	     Sequence number (automatic detection)
	   %Nq	     Sequence number (starting from number N)
	   %%	     Percent sign

	      Note: On windows you may	be  required  to  supply  an  extra  %
	      because  the  symbol  is	consumed by the shell.	Therefore, you
	      would put "%%S/%%A/%%T" instead of "%S/%A/%T".

       The extension (such as .mp3) is appended automatically.

       The tokens %D and %d differ because %D gives  a	unique	timestamp  for
       each  song,  whereas %d gives a unique timestamp each time streamripper
       is run.

       The tokens %Q and %q differ because %Q tries to figure out the  correct
       sequence	 number from the existing files, wherease %q does not.	The %q
       token takes an optional starting number.	 For example %32q means	 start
       numbering at 32.

       -r [base port]
	      Create a relay server on base port, defaults to port 8000

       Creates	a  relay server on base port. if base port is not specified it
       defaults to 8000, otherwise whatever you entered for  base  port.  Note
       that  if the -z option is not used, it will keep trying higher ports if
       the port is unavailable.

       -R num_conn
	      Maximum connections to relay stream

       In addition to creating a relay server, you can also control  how  many
       clients	are  allowed  to  simultaneously  connect.   The  default is 1
       client, but if you specify the -R option you can increase  this	number
       to  <num_conn>  clients.	 If <num_conn> is set to 0, the number of con-
       nections is limited only by your processor and network speed.   The  -R
       option has no effect if -r was not used to create a relay stream.

       -z     Don't scan for free ports if base port is not available

       Disables	 the "scan for free port" feature. Use it if your paranoid, or
       don't like ports being open.

       -p url Use HTTP proxy server at <url>

       If you are behind a proxy server, use the -p flag to specify  its  url.
       You  can	 also  use the http_proxy environment variable to specify your
       proxy server.

       -a [pattern]
	      Rip to single file

       The default mode of operation is to separate the each track into a sep-
       arate  file.   But  sometimes this is not what you want.	 Sometimes you
       want the stream recorded to a single (big) file without splitting  into
       tracks.	 The -a option does this.  If you use -a without including the
       [pattern], a timestamped filename will automatically be used.

       The pattern can be used in a manner similar to the -D flag, but	gener-
       ally only %S, %q and %d are useful.

       -A     Don't create individual tracks

       The  default  mode  of  operation is to create one file for each track.
       But sometimes you don't want these files.  For example, you might  pre-
       fer  a single file (using the -a option), or you want to use streamrip-
       per as a relay (using the -r option),  without  creating	 these	files.
       Using  the  -A option, the individual files for each track are not cre-
       ated.

       -o (always | never | larger)
	      Overwrite tracks in complete directory

       When streamripper rips tracks they are put into the  incomplete	direc-
       tory  until  they are finished.	Normally, they are then moved into the
       complete directory.  However, when the track is already there, can  use
       this  option to tell streamripper what you want to do.  There are three
       choices: always, never, and larger.  If you don't include any of the -o
       options on the command line, the "-o larger" strategy is used.

       If  you	use  the  "-o  never" option, this tells streamripper to never
       overwrite any existing file in the complete directory.

       If you use the "-o always" option, this tells  streamripper  to	always
       overwrite any existing file in the complete directory.

       If you use the "-o larger" option, this tells streamripper to overwrite
       an existing file in the complete directory if the newer file is larger.

       -t     Don't overwrite tracks in incomplete directory

       Normally streamripper writes the files in the incomplete directory, and
       then moves it to the base directory (the complete directory) when it is
       done.   If the file with the name of the track already exists in incom-
       plete, it will overwrite the old track.	When you use the -t flag, how-
       ever, this will tell streamripper to backup the existing file in incom-
       plete (appending a version number), and then create the new file.

       This is useful for streams that don't have  meta-data.	Because	 these
       streams	only have a single file, reconnects will cause overwriting the
       existing file, which is not desired.

       -T     Truncate completed tracks in incomplete directory

       When you are not overwriting files in the complete folder,  the	dupli-
       cate  files  will  normally stay in the incomplete folder.  This option
       tells streamripper to truncate the files to zero bytes  in  the	incom-
       plete folder if they are a duplicate.

       -c     Don't auto-reconnect

       Normally	 streamripper will be very aggressive and try to re-connect to
       a dropped stream.  This option disables this behavior.

       -l seconds
	      Run for a predetermined length of time, in seconds

       Usually, streamripper runs until it crashes.  Or rather, I meant to say
       that it runs until you kill it, yes, I'm sure that's what I meant.  But
       you can instead tell streamripper to run for a certain length of	 time,
       and then exit using this flag.

       -M megabytes
	      Stop ripping after this many megabytes

       Use  this  flag	to  tell  streamripper	to  rip	 a  certain  number of
       megabytes, then stop.

       -q [start]
	      Add sequence number to output filenames

       When the files are copied from incomplete to complete, the filename can
       be prepended with a sequence number (beginning with 0000).  This can be
       used to, for example, show the order that the files were	 created.   If
       desired,	 a starting count can be used with -q to begin the sequence at
       any number you like.

       -i     Don't add ID3 tags to output file

       Mp3 files have two different kinds of header information which describe
       the  contents  of  the  file:  ID3V1  and  ID3V2.  By default, both are
       included in the mp3 files generated by streamripper.  If	 you  use  the
       option, then neither are included.

       -k count
	      Skip over <count> tracks before starting to rip

       Sometimes  the  first  few tracks generated by a stream are not useful,
       because they are advertisements, the station intro, broken songs,  etc.
       Use this option and these tracks won't be saved.

       -m timeout
	      Timeout to restart connection

       Some  streams  will  "hang", which means they haven't disconnected, but
       they aren't sending any data.  When this happens, if you	 used  the  -m
       flag, streamripper will shut down the stream and reconnect after <time-
       out> seconds of inactivity.

       -u useragent
	      Use a different UserAgent than "Streamripper"

       In the http request, streamripper includes  a  string  that  identifies
       what  kind  of  program is requesting the connection.  By default it is
       the string "Streamripper/1.x".  Here you can decide to  identify	 your-
       self as a different agent if you like.

       -w parse_file
	      Use customized parsing rules

       This tells streamripper to use custom meta-data parsing rules.  Without
       this flag, streamripper will use its built-in parsing rules.

       There are two cases where you want to do this.  In the first case,  you
       are  using  a stream that changes the meta data within a song.  Usually
       this is a thank-you notice or possibly an advertisement for an upcoming
       show.   When  this  happens,  the  current track will become split into
       fragments.  To prevent this, you can tell streamripper to ignore	 meta-
       data.

       The  second  case you might want to use this is if the artist and title
       information is sent in an unusual format.  For example, they  might  be
       separated  by  a	 comma instead of a hyphen, or there might be an extra
       advertisement attached to the end of the	 meta-data  string.   In  this
       case,  you  can	tell  streamripper  how	 it should identify the title,
       artist, album and track from the metadata string using regular  expres-
       sions.

       See  the	 file parse_rules.txt, which is included in your distribution,
       for examples of the parse rules.

       -E external_command
	      Use external command to get track information

       Some streams do not send artist or title	 information  using  metadata,
       but instead send this information using other means.  For example, some
       streams update the current artist and title using html or xml.  Another
       example is icecast 1.x, which sends metadata through a UDP socket.

       Streamripper  can  get artist and title information from these kinds of
       streams using a helper application, specified using the -E option.  The
       helper  application  works by finding the title and artist, and writing
       it to stdout.  Streamripper reads the output of the helper program, and
       splits the tracks accordingly.

       To  help	 you  in  creating external commands to use with streamripper,
       please look at the example file	fetch_external_metadata.pl,  which  is
       included in your distribution.

       --debug
	      Save debugging log

       This  creates a file called "gcs.txt" that contains all sorts of debug-
       ging information.

       --quiet
	      Quiet operation

       Don't write any text to the console, except error messages

       --xs_silence_length=num
	      Set silence duration

       The volume must be less	than  xsd_min_volume  for  a  period  of  time
       greater than this.

       --xs_search_window=num:num
	      Set search window duration

       This  is	 how  long  to	search	for the silence.  1st number is # msec
       before nominal center, 2nd number is # msecs after nominal track change
       position.

       --xs_offset=num
	      Set offset from center of silence window

       --xs_padding=num:num
	      Set  amount  to pad before and after splitpoint.	The 1st number
	      is the number of msec to add to the end of each song.   The  2nd
	      number  is  the  number  of msec to add to the beginning of each
	      song.

GETTING STARTED
       The easiest way to get started is to find the URL of a stream you  want
       to  rip,	 usually I find the URL by loading it up in winamp or xmms and
       querying for the source URL (right click on the playlist) Once you have
       the URL you can begin ripping.

	 streamripper http://205.188.245.132:8038

       This  would  rip	 Monkey	 Radio (as of 1/10/2001), it places the tracks
       into two directory's one called	"Monkey	 Radio"	 and  a	 sub-directory
       "Monkey	Radio/incomplete"  the incomplete directory is for tracks that
       streamripper does not know the begging or end of. The  first  and  last
       tracks your rip for instance, would be in incomplete.

       Also you can listen to the stream by creating a relay server.

	 streamripper http://205.188.245.132:8038 -r

       When  the  program  starts  it will display what port it's relaying the
       stream on, it defaults to 8000 but you can choose another port. To lis-
       ten  to your relay server open up XMMS or Winamp and enter your machine
       name with the port as you would any other stream.

SPLITPOINT DETECTION
       Streamripper automatically splits tracks based on detection of a silent
       near the meta interval where the track changes. However, this method is
       imperfect, and sometimes the track splitting occurs is too early or too
       late.   These  options  will fine tune the track splitting capabilities
       for streams that use cross-fading, which	 causes	 streamripper's	 auto-
       matic silence detection routine to fail.

       Various --xs flags can be used to add an offset for streams that have a
       meta interval that comes too early or too late, to add extra padding to
       the  beginning  and end of each song, and to decide where the length of
       the search window and silence window.

   DEFAULT SPLITTING
       The default spitting algorithm is used when  no	silent	point  can  be
       found.	Suppose	 you  have a meta-int with track change information at
       the time "mi" (see figure below).

       If the xs_offset is positive, the track separation point "ts" is	 later
       the  "mi"  point.  If xs_offset is negative, "ts" is earlier than "mi".
       Once "ts" is determined, a user-defined "prepad" and "postpad" are used
       to  determine where the next track begins "ntb", and where the previous
       track ends "pte".  The interval between "ntb" and "pte" will be	copied
       to both songs.


	      /mi
	      |
	      |		  /ts
	      |-----------|
		xs_offset |
			  |
			  |
		/ntb	  |	    /pte
		|---------|---------|
		  prepad    postpad

   SILENCE SEPARATION
       Splitting  based on silence separation is similar to default splitting,
       only slightly more complex.  Again, suppose you have  a	meta-int  with
       track change information at the time "mi" (see figure below).

       A  search  window  "search_win" is determined by the xs_offset, pre_sw,
       and post_sw field.  The beginning of the search	window	is  at:	 mi  +
       xs_offset - pre_sw and the end of the search window is at: mi + xs_off-
       set + post_sw.

       If there is a  silent  interval	of  length  "silence_win"  within  the
       "search_win", the center of "silence_win" is selected as the track sep-
       aration point "ts".

       Once "ts" is determined, a user-defined "prepad" and "postpad" are used
       to  determine where the next track begins "ntb", and where the previous
       track ends "pte".  The interval between "ntb" and "pte" will be	copied
       to both songs.


		  /mi
		  |
		  |-----------|
		    xs_offset |
			      |
			  ts\ |
		    |-------+-|---------| *search_win
		     pre_sw |	post_sw
			    |
			|---+---| *silence_win
			    |
	      /ntb	    |	      /pte
	      |-------------|---------|
		    prepad    postpad

USAGE EXAMPLES
       Rip from a stream:

	 streamripper URL

       Rip from a stream for one hour:

	 streamripper URL -l 3600

       Rip   the   stream,   putting   the   mp3   files  into	the  directory
       /my/music/stream1:

	 streamripper URL -d /my/music/stream1 -s

       Rip the stream, creating a single  file	and  don't  create  individual
       tracks:

	 streamripper URL -a -A

       Rip from a stream and create a relay stream at port 9000:

	 streamripper URL -r 9000

       Rip  from  a stream, creating a relay stream at port 8000, and allowing
       twenty clients to connect:

	 streamripper URL -r -R 20

SPLITPOINT USAGE EXAMPLES
       Each of my songs contain about 5 seconds of the previous song.  How can
       I fix this?

	 streamripper URL --xs_offset=5000

       Each  of	 my songs contain about 5 seconds of the next song.  How can I
       fix?

	 streamripper URL --xs_offset=-5000

       Each of my songs contain between 5 and 10 seconds of the previous song,
       but  it depends on the song.  How can I include all of this zone within
       both songs, and edit them later?

	 streamripper URL --xs_offset=7500 --xs_padding=2500:2500

RESOURCES
       Please check out the following web sites.  Linked to  the  streamripper
       home page is a forum that can can be used to chat and ask questions.

       Streamripper home page:
	      http://streamripper.sourceforge.net/

       Sourceforge project page
	      http://sourceforge.net/projects/streamripper

       Shoutcast
	      http://www.shoutcast.com

       Icecast
	      http://www.icecast.org

COPYING
       Copyright  ©  2000-2002	Jon Clegg, © 2004-2005 Gregory C. Sharp.  Free
       use of this software is granted under the terms of the GNU General Pub-
       lic License (GPL).



				 05 March 2006		       STREAMRIPPER(1)
