I have seen that there are at least two other GUIs posted in this forum that do the same thing. But they do not support all the options available and the stations were difficult to edit. I hope I have overcome these limitations.
Give it a try, I have stored more then 1 GB of excellent music in less then 2 hours.
Be aware that the automatic splitting of tracks doesn't work with all stations. Just try several, you'll quickly find a station of your taste that streamripper is capable to split. Or play with the splitpoint adjustments yourself. In these cases see README file in the streamripper directory.
ScriptName = StreamRipper v0.1 ; 2005-03-30 ; OS=WinXP, AHK=1.0.30.04, Author=toralf ; ; What it does: ; It's a GUI for StreamRipper. StreamRipper itself rips shoutcast or icecast radio streams to mp3 files ; ; What you have to do: ; - get streamripper from sourceforge.org (current version 1.61.5) ; - place this script in the same directory ; - download playlists from shoutcast to disc ; - drop the playlist on the GUI ; - start to record the streams as mp3 files to your disc from within the GUI ; ; Known limitations: ; - your firewall has to allow TCP traffic for streamripper and your player ; - your player has to start automatically when a playlist (*.PLS) is executed ; - streamripper continues to rip even when you close the GUI, you have to kill ; the processes manually. If you keep the GUI open, you can kill the processes ; from within the GUI. ; ; Functionality: ; - all options of streamripper 1.61.5 are supported: ; - drag&drop of playlists ; - GUI supports start and stop of ripping and listening to streams ; - multiple streams can be ripped ; - GUI remembers last position and settings between sessions ; - list of stations can be edit ; - GUI can be set transparent and without border ; ; Suggestions are appreciated #singleinstance force Gosub, ReadIniFromFile GoSub, SeparateStringToStationArray Gosub, BuildStreamRipperGUI Gosub, BuildStreamRipperGUIOptions Gosub, FillStationsInList Return ;############# End of autoexec section #################################### ;############# GUI 1 - Main window ######################################## BuildStreamRipperGUI: Gui, 1:+ToolWindow +AlwaysOnTop Gui, 1:Add, Text, , Status Stationname URL Gui, 1:Add, ListBox, xm Section w260 r8 vLstStations gLstStations HScroll VScroll AltSubmit, Gui, 1:Add, Button, ys vBtnRecord gBtnRecord Disabled, Record Gui, 1:Add, Button, vBtnStop gBtnStop Disabled, Stop Gui, 1:Add, Button, vBtnListen gBtnListen Disabled, Listen Gui, 1:Add, Button, gBtnOptions, Options Gui, 1:Show, %PosX_Gui% %PosY_Gui% ,%ScriptName% return GuiClose: Gui, 2:Cancel GoSub, ConcateStationsToString ;store current position and settings Gosub, WriteIniToFile ExitApp return LstStations: ButtonStatus := True GoSub, ChangeButtonStatus return ChangeButtonStatus: GuiControl, 1: -Disabled%ButtonStatus%, BtnRecord GuiControl, 1: -Disabled%ButtonStatus%, BtnListen GuiControl, 1: -Disabled%ButtonStatus%, BtnStop GuiControl, 2: -Disabled%ButtonStatus%, BtnEdit GuiControl, 2: -Disabled%ButtonStatus%, BtnMoveUp GuiControl, 2: -Disabled%ButtonStatus%, BtnMoveDown GuiControl, 2: -Disabled%ButtonStatus%, BtnDelete return BtnRecord: Gui, 1:Submit, NoHide StationArray[%LstStations%][1] := "rec"A_Space Gosub, FillStationsInList GuiControl, 1:Choose,LstStations,%LstStations% URL := StationArray[%LstStations%][3] Exec = %A_ScriptDir%\streamripper.exe %URL% If Destination is not space Exec = %Exec% -d "%Destination%" If (not ChkCreateDirForEachStream) Exec = %Exec% -s If (ChkRelay and EdtRelayPort <> "" ) { Exec = %Exec% -r %EdtRelayPort% If RadNumOfConnections = 1 Exec = %Exec% If (RadNumOfConnections = 2 and EdtNumOfConnections <> "" ) Exec = %Exec% -R %EdtNumOfConnections% If RadNumOfConnections = 3 Exec = %Exec% -R 0 If (not ChkScanForFreePort) Exec = %Exec% -z } If ( UseProxy and EdtProxyURL <> "" ) Exec = %Exec% -p %EdtProxyURL% If ( ChkRipToSingleFile and EdtRipFileName <> "" ) Exec = %Exec% -a "%EdtRipFileName%" If (not ChkCreateIndiTracks) Exec = %Exec% -A If ChkOverwriteTracksInComplete Exec = %Exec% -o If (not ChkOverwriteTracksInIncomplete) Exec = %Exec% -t If ChkTrunkCompTracks Exec = %Exec% -T If (not ChkAutoReconnect) Exec = %Exec% -c If (ChkStopTime and EdtStopTime <> "" ) Exec = %Exec% -l %EdtStopTime% If (ChkStopSize and EdtStopSize <> "" ) Exec = %Exec% -M %EdtStopSize% If ChkAddSequenceNumber Exec = %Exec% -q If (ChkAddPrefix and EdtPrefix <> "" ) Exec = %Exec% -P "%EdtPrefix%" If (not ChkAddID3V1) Exec = %Exec% -i If ( ChkDiffAgent and EdtDiffAgent <> "" ) Exec = %Exec% -u "%EdtDiffAgent%" If ( ChkCustomParseRules and EdtCustomParseRules <> "" ) Exec = %Exec% -w "%EdtCustomParseRules%" If ( ChkSkipTracks and EdtSkipTracks <> "" ) Exec = %Exec% -k %EdtSkipTracks% If ( ChkRestartTimeout and EdtRestartTimeout <> "" ) Exec = %Exec% -m %EdtRestartTimeout% If ChkSaveDebugLog Exec = %Exec% --debug If ChkOnlyErrorMessages Exec = %Exec% --quiet If ChkCustomSpltPt { If EdtSpltPtTimeMute is not space Exec = %Exec% --xs_silence_length=%EdtSpltPtTimeMute% If ( EdtSpltPtTimeBfCenter <> "" and EdtSpltPtTimeAftChange <> "" ) Exec = %Exec% --xs_search_window=%EdtSpltPtTimeBfCenter%:%EdtSpltPtTimeAftChange% If EdtSpltPtTimeOffset is not space Exec = %Exec% --xs_offset=%EdtSpltPtTimeOffset% If ( EdtSpltPtTimePadBefore <> "" and EdtSpltPtTimePadAfter <> "" ) Exec = %Exec% --xs_padding=%EdtSpltPtTimePadBefore%:%EdtSpltPtTimePadAfter% } Run, %Exec%, %Destination%, Hide, PID StationArray[%LstStations%][4] = %PID% return BtnListen: Gui, 1:Submit, NoHide TempPLS=%A_ScriptDir%\TempStreamRipperListen.PLS FileDelete %TempPLS% IfNotExist, %TempPLS% { Title := StationArray[%LstStations%][2] URL := StationArray[%LstStations%][3] FileAppend, [playlist]`r`nNumberofentries=1`r`nFile1=%URL%`r`nTitle1=%Title%`r`nLength1=-1`r`nVersion=2`r`n, %TempPLS% Run, %TempPLS%, , , PID ;StationArray[%LstStations%][4] = %PID% } return BtnStop: Gui, 1:Submit, NoHide StationArray[%LstStations%][1] := A_Space Gosub, FillStationsInList GuiControl, 1:Choose,LstStations,%LstStations% PID := StationArray[%LstStations%][4] If PID is not space Process, Close, %PID% return ;############# GUI 2 - Options Window ##################################### BtnOptions: WinGetPos, PosX, PosY, SizeW, SizeH, %ScriptName% PosY += SizeH Gui, 2:Show, x%PosX% y%PosY%, Options - %ScriptName% return BuildStreamRipperGUIOptions: Gui, 2:+ToolWindow +AlwaysOnTop +Owner1 Gui, 2:Add, Text, ym+5,Stations: Gui, 2:Add, Button, ym Section gBtnImport, Import Gui, 2:Add, Button, ym vBtnEdit gBtnEdit Disabled, Edit Gui, 2:Add, Button, ym vBtnMoveUp gBtnMoveUp Disabled, Up Gui, 2:Add, Button, ym vBtnMoveDown gBtnMoveDown Disabled, Down Gui, 2:Add, Button, ym vBtnDelete gBtnDelete Disabled, Delete Gui, 2:Add, Button, xs Section gBtnShoutCast, www.shoutcast Gui, 2:Add, Button, ys gBtnIceCast, www.icecast Gui, 2:Add, Tab, xm w360 r14.5 Section, Ripping|Connections|Misc|Splitpoint|Appearance Gui, 2:Tab, Ripping Gui, 2:Add, Text, xs+10 ys+30, Destination Gui, 2:Add, Edit, xs+10 ys+50 w300 r2 vDestination ReadOnly, %Destination% Gui, 2:Add, Button, xs+320 ys+50 gBtnBrowseDestination, ... Gui, 2:Add, Checkbox, xs+10 ys+100 vChkCreateDirForEachStream Checked%ChkCreateDirForEachStream%, Create a directory for each stream Gui, 2:Add, Checkbox, vChkRipToSingleFile Checked%ChkRipToSingleFile%, Rip to single file Gui, 2:Add, Edit, xs+110 ys+117 w200 r1 vEdtRipFileName, %EdtRipFileName% Gui, 2:Add, Checkbox, xs+10 ys+140 vChkCreateIndiTracks Checked%ChkCreateIndiTracks%, Create individual tracks Gui, 2:Add, Checkbox, xs+10 ys+160 vChkOverwriteTracksInComplete Checked%ChkOverwriteTracksInComplete%, Overwrite tracks in complete directory Gui, 2:Add, Checkbox, xs+10 ys+180 vChkOverwriteTracksInIncomplete Checked%ChkOverwriteTracksInIncomplete%, Overwrite tracks in incomplete directory Gui, 2:Add, Checkbox, xs+10 ys+200 vChkTrunkCompTracks Checked%ChkTrunkCompTracks%, Truncate completed tracks in incomplete directory Gui, 2:Add, Checkbox, xs+10 ys+220 vChkAddID3V1 Checked%ChkAddID3V1%, Add ID3V1 Tags to output file Gui, 2:Add, Checkbox, xs+10 ys+240 vChkAddSequenceNumber Checked%ChkAddSequenceNumber%, Add sequence number to output filenames Gui, 2:Add, Checkbox, xs+10 ys+260 vChkAddPrefix Checked%ChkAddPrefix%, Add prefix to each ripped file Gui, 2:Add, Edit, xs+170 ys+257 w70 r1 vEdtPrefix, %EdtPrefix% Gui, 2:Add, Checkbox, xs+10 ys+280 vChkSkipTracks Checked%ChkSkipTracks%, Skip over Gui, 2:Add, Edit, xs+79 ys+277 w20 r1 Number Limit2 vEdtSkipTracks, %EdtSkipTracks% Gui, 2:Add, Text, xs+103 ys+280 ,tracks before starting to rip Gui, 2:Tab, Connections Gui, 2:Add, Checkbox, xs+10 ys+30 vChkAutoReconnect Checked%ChkAutoReconnect%, Auto-reconnect Gui, 2:Add, Checkbox, xs+10 ys+50 vChkDiffAgent Checked%ChkDiffAgent%, Use a different UserAgent Gui, 2:Add, Edit, xs+160 ys+47 w120 r1 vEdtDiffAgent, %EdtDiffAgent% Gui, 2:Add, Checkbox, xs+10 ys+70 vChkRestartTimeout Checked%ChkRestartTimeout%, Timeout to restart connection Gui, 2:Add, Edit, xs+180 ys+67 w50 r1 Number vEdtRestartTimeout, %EdtRestartTimeout% Gui, 2:Add, Checkbox, xs+10 ys+90 vChkRelay Checked%ChkRelay%, Enable relay on port (default 8000): Gui, 2:Add, Edit, xs+200 ys+87 w40 r1 Number Limit5 vEdtRelayPort, %EdtRelayPort% Gui, 2:Add, Checkbox, xs+10 ys+110 vChkScanForFreePort Checked%ChkScanForFreePort%, Scan for free port if port isn't available Gui, 2:Add, GroupBox, xs+10 ys+130 w270 r3, Simultaneous connections to relay server Gui, 2:Add, Radio, xs+30 ys+150 vRadNumOfConnections checked, one connection Gui, 2:Add, Radio, , Connections: Gui, 2:Add, Radio, , Limited only by processor and network speed Gui, 2:Add, Edit, xs+110 ys+167 w20 r1 Number Limit2 vEdtNumOfConnections, %EdtNumOfConnections% Gui, 2:Tab, Misc Gui, 2:Add, Checkbox, xs+10 ys+30 vUseProxy Checked%UseProxy%, Use Proxy Server Gui, 2:Add, Edit, xs+120 ys+27 w200 r1 vEdtProxyURL, %EdtProxyURL% Gui, 2:Add, Checkbox, xs+10 ys+50 vChkSaveDebugLog Checked%ChkSaveDebugLog%, Save debugging log Gui, 2:Add, Checkbox, xs+10 ys+70 vChkOnlyErrorMessages Checked%ChkOnlyErrorMessages%, Write only error messages to console Gui, 2:Add, Checkbox, xs+10 ys+90 vChkStopTime Checked%ChkStopTime%, Stop after Gui, 2:Add, Edit, xs+80 ys+87 w60 r1 Number vEdtStopTime, %EdtStopTime% Gui, 2:Add, Text, xs+143 ys+90 ,seconds Gui, 2:Add, Checkbox, xs+10 ys+110 vChkStopSize Checked%ChkStopSize%, Stop after Gui, 2:Add, Edit, xs+80 ys+107 w60 r1 Number vEdtStopSize, %EdtStopSize% Gui, 2:Add, Text, xs+143 ys+110 ,megabytes Gui, 2:Add, Checkbox, xs+10 ys+130 vChkCustomParseRules Checked%ChkCustomParseRules%, Use customized parsing rules Gui, 2:Add, Edit, xs+10 ys+147 w250 r1 vEdtCustomParseRules, %EdtCustomParseRules% Gui, 2:Add, Button, xs+270 ys+147 gBtnCustomParseRules, ... Gui, 2:Tab, Splitpoint Gui, 2:Add, Checkbox, xs+10 ys+30 vChkCustomSpltPt gChkCustomSpltPt Checked%ChkCustomSpltPt%, Customize Splitpoint (leave fields blank to skip some options) NotChkCustomSpltPt := not ChkCustomSpltPt Gui, 2:Add, Text, xs+10 ys+50, Volume must be less than xsd_min_volume for msec Gui, 2:Add, Edit, xs+230 ys+47 w50 r1 Number vEdtSpltPtTimeMute Disabled%NotChkCustomSpltPt%, %EdtSpltPtTimeMute% Gui, 2:Add, Text, xs+10 ys+70, Search msec for silence before nominal center Gui, 2:Add, Edit, xs+50 ys+67 w50 r1 Number vEdtSpltPtTimeBfCenter Disabled%NotChkCustomSpltPt%, %EdtSpltPtTimeBfCenter% Gui, 2:Add, Text, xs+10 ys+90, Search msec for silence after nominal track change position Gui, 2:Add, Edit, xs+50 ys+87 w50 r1 Number vEdtSpltPtTimeAftChange Disabled%NotChkCustomSpltPt%, %EdtSpltPtTimeAftChange% Gui, 2:Add, Edit, xs+10 ys+107 w50 r1 Number vEdtSpltPtTimeOffset Disabled%NotChkCustomSpltPt%, %EdtSpltPtTimeOffset% Gui, 2:Add, Text, xs+65 ys+110, msec offset from center of silence window Gui, 2:Add, Edit, xs+10 ys+127 w50 r1 Number vEdtSpltPtTimePadBefore Disabled%NotChkCustomSpltPt%, %EdtSpltPtTimePadBefore% Gui, 2:Add, Text, xs+65 ys+130, msec to pad before splitpoint Gui, 2:Add, Edit, xs+10 ys+147 w50 r1 Number vEdtSpltPtTimePadAfter Disabled%NotChkCustomSpltPt%, %EdtSpltPtTimePadAfter% Gui, 2:Add, Text, xs+65 ys+150, msec to pad after splitpoint Gui, 2:Tab, Appearance Gui, 2:Add, Checkbox, xs+10 ys+30 vChkNoBorder gChkNoBorder Checked%ChkNoBorder%, Remove border of window Gui, 2:Add, Checkbox, xs+10 ys+50 vChkTransparent gChkTransparent Checked%ChkTransparent%, Show window transparent Gui, 2:Add, Slider, xs+10 ys+70 w255 Range0-255 ToolTipBottom Center vSldTransparent gSldTransparent, %SldTransparent% Gui, 2:Tab Gui, 2:Add, Button, xm Section gBtnApply, Apply Gui, 2:Add, Button, ys gBtnCancel, Cancel return BtnImport: FileSelectFile, SelectedFiles,M3,, Select Playlist with stations, Playlists (*.pls) If SelectedFiles is not space { Loop, parse, SelectedFiles, `n { if A_Index = 1 PathSelectedFiles = %A_LoopField% else { SelectedFile = %PathSelectedFiles%\%A_LoopField% Gosub, AddStationsToList } } Gosub, FillStationsInList } return 2GuiDropFiles: GuiDropFiles: Loop, parse, A_GuiControlEvent, `n { SelectedFile = %A_LoopField% Gosub, AddStationsToList } Gosub, FillStationsInList return AddStationsToList: SearchForTitle := False FoundStation := False Loop, Read, %SelectedFile% { Line = %A_LoopReadLine% StringLeft, First4Char, Line, 4 StringMid, 5thChar, Line, 5, 1 If SearchForTitle { StringGetPos, Position, Line, ), L1 Position += 2 StringTrimLeft, Station, Line, %Position% Station = %Station% SearchForTitle := False FoundStation := True } else If (First4Char = "File") { StringTrimLeft, URL, Line, 6 StationID = %5thChar% SearchForTitle := True } If FoundStation { NumberOfStations ++ StationArray[%NumberOfStations%][1] := A_Space StationArray[%NumberOfStations%][2] = %StationID%) %Station% StationArray[%NumberOfStations%][3] = %URL% StationArray[%NumberOfStations%][4] := A_Space FoundStation := False } } return BtnMoveUp: Gui, 1:Submit, NoHide If LstStations > 1 { NewPosition := LstStations - 1 GoSub, ChangeStationsPosition Gosub, FillStationsInList GuiControl, 1:Choose,LstStations,%NewPosition% } return BtnMoveDown: Gui, 1:Submit, NoHide If (LstStations < NumberOfStations) { NewPosition := LstStations + 1 GoSub, ChangeStationsPosition Gosub, FillStationsInList GuiControl, 1:Choose,LstStations,%NewPosition% } return ChangeStationsPosition: TempStatus := StationArray[%NewPosition%][1] TempTitle := StationArray[%NewPosition%][2] TempURL := StationArray[%NewPosition%][3] TempPID := StationArray[%NewPosition%][4] StationArray[%NewPosition%][1] := StationArray[%LstStations%][1] StationArray[%NewPosition%][2] := StationArray[%LstStations%][2] StationArray[%NewPosition%][3] := StationArray[%LstStations%][3] StationArray[%NewPosition%][4] := StationArray[%LstStations%][4] StationArray[%LstStations%][1] = %TempStatus% StationArray[%LstStations%][2] = %TempTitle% StationArray[%LstStations%][3] = %TempURL% StationArray[%LstStations%][4] = %TempPID% return BtnDelete: Gui, 1:Submit, NoHide Count := NumberOfStations - LstStations + 1 Loop %Count% { Pos := A_Index + LstStations - 1 PosPlus := Pos + 1 StationArray[%Pos%][1] := StationArray[%PosPlus%][1] StationArray[%Pos%][2] := StationArray[%PosPlus%][2] StationArray[%Pos%][3] := StationArray[%PosPlus%][3] StationArray[%Pos%][4] := StationArray[%PosPlus%][4] } NumberOfStations -- Gosub, FillStationsInList ButtonStatus := False GoSub, ChangeButtonStatus return FillStationsInList: ListOfStations = Loop, %NumberOfStations% { Status := StationArray[%A_Index%][1] Title := StationArray[%A_Index%][2] URL := StationArray[%A_Index%][3] ListOfStations = %ListOfStations%|%Status%%Title% -->%A_TAB%%URL% } If NumberOfStations = 0 ListOfStations = | GuiControl, 1: , LstStations, %ListOfStations% return BtnShoutCast: Run, www.shoutcast.com return BtnIceCast: Run, www.icecast.org return BtnBrowseDestination: FileSelectFolder, SelectedFolder,, 3, Select Folder to store stream If SelectedFolder is not space GuiControl, ,Destination,%SelectedFolder% return BtnCustomParseRules: FileSelectFile, SelectedFile,3,, Select parse file, If SelectedFile is not space GuiControl, ,EdtCustomParseRules,%SelectedFile% return ChkCustomSpltPt: Gui, Submit, NoHide GuiControl, -Disabled%ChkCustomSpltPt%, EdtSpltPtTimeMute GuiControl, -Disabled%ChkCustomSpltPt%, EdtSpltPtTimeBfCenter GuiControl, -Disabled%ChkCustomSpltPt%, EdtSpltPtTimeAftChange GuiControl, -Disabled%ChkCustomSpltPt%, EdtSpltPtTimeOffset GuiControl, -Disabled%ChkCustomSpltPt%, EdtSpltPtTimePadBefore GuiControl, -Disabled%ChkCustomSpltPt%, EdtSpltPtTimePadAfter return ChkNoBorder: Gui, 2:Submit, NoHide If ChkNoBorder Gui, 1:-Caption else Gui, 1:+Caption Gui, 1:Show, AutoSize return ChkTransparent: Gui, 2:Submit, NoHide SldTransparent: If ChkTransparent { WinSet, Transparent, %SldTransparent%,%ScriptName%, ,Options } else WinSet, Transparent, off,%ScriptName%, ,Options return BtnApply: Gui, 2:Submit return 2GuiClose: BtnCancel: Gui, 2:Cancel return ;############# GUI 3 - Edit window ######################################## BtnEdit: Gui, 1:Submit, NoHide Title := StationArray[%LstStations%][2] URL := StationArray[%LstStations%][3] GoSub, BuildStreamRipperGUIEdit return BuildStreamRipperGUIEdit: Gui, 1:+Disabled Gui, 2:+Disabled Gui, 3:+ToolWindow +AlwaysOnTop +Owner1 Gui, 3:Add, Text, ,Title: Gui, 3:Add, Edit, ym-3 r1 w300 vTitle,%Title% Gui, 3:Add, Text, xm Section ,URL: Gui, 3:Add, Edit, ys-3 r1 w300 vURL,%URL% Gui, 3:Add, Button, xm Section gBtnApplyEdit, Apply Gui, 3:Add, Button, ys gBtnCancelEdit, Cancel WinGetPos, PosX, PosY, SizeW, SizeH, %ScriptName% Gui, 3:Show, x%PosX% y%PosY%,Edit - %ScriptName% return BtnApplyEdit: Gui, 3:Submit StationArray[%LstStations%][2] = %Title% StationArray[%LstStations%][3] = %URL% Gosub, FillStationsInList GuiControl, 1:Choose,LstStations,%LstStations% GoSub, BtnCancelEdit return 3GuiClose: BtnCancelEdit: Gui, 3:Destroy Gui, 1:-Disabled Gui, 2:-Disabled return ;############# Store and retrieve settings ################################ ReadIniFromFile: IniRead, PosX_Gui, %ScriptName%.ini, General, PosX_Gui, IniRead, PosY_Gui, %ScriptName%.ini, General, PosY_Gui, IniRead, ListOfStationTitles, %ScriptName%.ini, General, ListOfStationTitles, %A_Space% IniRead, ListOfStationURLs, %ScriptName%.ini, General, ListOfStationURLs, %A_Space% IniRead, Destination, %ScriptName%.ini, Ripping, Destination, C:\ IniRead, ChkCreateDirForEachStream, %ScriptName%.ini, Ripping, ChkCreateDirForEachStream, 1 IniRead, ChkRipToSingleFile, %ScriptName%.ini, Ripping, ChkRipToSingleFile, 0 IniRead, EdtRipFileName, %ScriptName%.ini, Ripping, EdtRipFileName, Stream IniRead, ChkCreateIndiTracks, %ScriptName%.ini, Ripping, ChkCreateIndiTracks, 1 IniRead, ChkOverwriteTracksInComplete, %ScriptName%.ini, Ripping, ChkOverwriteTracksInComplete, 0 IniRead, ChkOverwriteTracksInIncomplete, %ScriptName%.ini, Ripping, ChkOverwriteTracksInIncomplete, 1 IniRead, ChkTrunkCompTracks, %ScriptName%.ini, Ripping, ChkTrunkCompTracks, 0 IniRead, ChkAddID3V1, %ScriptName%.ini, Ripping, ChkAddID3V1, 1 IniRead, ChkAddSequenceNumber, %ScriptName%.ini, Ripping, ChkAddSequenceNumber, 0 IniRead, ChkAddPrefix, %ScriptName%.ini, Ripping, ChkAddPrefix, 0 IniRead, EdtPrefix, %ScriptName%.ini, Ripping, EdtPrefix, stream_ IniRead, ChkSkipTracks, %ScriptName%.ini, Ripping, ChkSkipTracks, 0 IniRead, EdtSkipTracks, %ScriptName%.ini, Ripping, EdtSkipTracks, 2 IniRead, RadNumOfConnections, %ScriptName%.ini, Connections, RadNumOfConnections, 1 IniRead, EdtNumOfConnections, %ScriptName%.ini, Connections, EdtNumOfConnections, 5 IniRead, ChkAutoReconnect, %ScriptName%.ini, Connections, ChkAutoReconnect, 1 IniRead, ChkDiffAgent, %ScriptName%.ini, Connections, ChkDiffAgent, 0 IniRead, EdtDiffAgent, %ScriptName%.ini, Connections, EdtDiffAgent, Streamripper/1.x IniRead, ChkRestartTimeout, %ScriptName%.ini, Connections, ChkRestartTimeout, 0 IniRead, EdtRestartTimeout, %ScriptName%.ini, Connections, EdtRestartTimeout, 1000 IniRead, ChkRelay, %ScriptName%.ini, Connections, ChkRelay, 0 IniRead, EdtRelayPort, %ScriptName%.ini, Connections, EdtRelayPort, 8000 IniRead, ChkScanForFreePort, %ScriptName%.ini, Connections, ChkScanForFreePort, 1 IniRead, UseProxy, %ScriptName%.ini, Misc, UseProxy, 0 IniRead, EdtProxyURL, %ScriptName%.ini, Misc, EdtProxyURL, %A_Space% IniRead, ChkSaveDebugLog, %ScriptName%.ini, Misc, ChkSaveDebugLog, 0 IniRead, ChkOnlyErrorMessages, %ScriptName%.ini, Misc, ChkOnlyErrorMessages, 0 IniRead, ChkStopTime, %ScriptName%.ini, Misc, ChkStopTime, 0 IniRead, EdtStopTime, %ScriptName%.ini, Misc, EdtStopTime, 3600 IniRead, ChkStopSize, %ScriptName%.ini, Misc, ChkStopSize, 0 IniRead, EdtStopSize, %ScriptName%.ini, Misc, EdtStopSize, 4700 IniRead, ChkCustomParseRules, %ScriptName%.ini, Misc, ChkCustomParseRules, 0 IniRead, EdtCustomParseRules, %ScriptName%.ini, Misc, EdtCustomParseRules, %A_Space% IniRead, ChkCustomSpltPt, %ScriptName%.ini, Splitpoint, ChkCustomSpltPt, 0 IniRead, EdtSpltPtTimeMute, %ScriptName%.ini, Splitpoint, EdtSpltPtTimeMute, %A_Space% IniRead, EdtSpltPtTimeBfCenter, %ScriptName%.ini, Splitpoint, EdtSpltPtTimeBfCenter, %A_Space% IniRead, EdtSpltPtTimeAftChange, %ScriptName%.ini, Splitpoint, EdtSpltPtTimeAftChange, %A_Space% IniRead, EdtSpltPtTimeOffset, %ScriptName%.ini, Splitpoint, EdtSpltPtTimeOffset, %A_Space% IniRead, EdtSpltPtTimePadBefore, %ScriptName%.ini, Splitpoint, EdtSpltPtTimePadBefore, %A_Space% IniRead, EdtSpltPtTimePadAfter, %ScriptName%.ini, Splitpoint, EdtSpltPtTimePadAfter, %A_Space% IniRead, ChkNoBorder, %ScriptName%.ini, Appearance, ChkNoBorder, 0 IniRead, ChkTransparent, %ScriptName%.ini, Appearance, ChkTransparent, 0 IniRead, SldTransparent, %ScriptName%.ini, Appearance, SldTransparent, 100 return SeparateStringToStationArray: StringSplit,Array,ListOfStationTitles,| Loop, %Array0% { StationArray[%A_Index%][1] := A_Space StationArray[%A_Index%][2] := Array%A_Index% StationArray[%A_Index%][4] := A_Space } StringSplit,Array,ListOfStationURLs,| Loop, %Array0% StationArray[%A_Index%][3] := Array%A_Index% NumberOfStations = %Array0% return ConcateStationsToString: ListOfStationTitles = ListOfStationURLs = Loop, %NumberOfStations% { Title := StationArray[%A_Index%][2] URL := StationArray[%A_Index%][3] ListOfStationTitles = %ListOfStationTitles%|%Title% ListOfStationURLs = %ListOfStationURLs%|%URL% } StringTrimLeft,ListOfStationTitles,ListOfStationTitles,1 StringTrimLeft,ListOfStationURLs,ListOfStationURLs,1 return WriteIniToFile: WinGetPos, PosX, PosY, SizeW, SizeH, %ScriptName% Gui, 1:Submit IniWrite, x%PosX%, %ScriptName%.ini, General, PosX_Gui IniWrite, y%PosY%, %ScriptName%.ini, General, PosY_Gui IniWrite, %ListOfStationTitles%, %ScriptName%.ini, General, ListOfStationTitles IniWrite, %ListOfStationURLs%, %ScriptName%.ini, General, ListOfStationURLs IniWrite, %Destination%, %ScriptName%.ini, Ripping, Destination IniWrite, %ChkCreateDirForEachStream%, %ScriptName%.ini, Ripping, ChkCreateDirForEachStream IniWrite, %ChkRipToSingleFile%, %ScriptName%.ini, Ripping, ChkRipToSingleFile IniWrite, %EdtRipFileName%, %ScriptName%.ini, Ripping, EdtRipFileName IniWrite, %ChkCreateIndiTracks%, %ScriptName%.ini, Ripping, ChkCreateIndiTracks IniWrite, %ChkOverwriteTracksInComplete%, %ScriptName%.ini, Ripping, ChkOverwriteTracksInComplete IniWrite, %ChkOverwriteTracksInIncomplete%, %ScriptName%.ini, Ripping, ChkOverwriteTracksInIncomplete IniWrite, %ChkTrunkCompTracks%, %ScriptName%.ini, Ripping, ChkTrunkCompTracks IniWrite, %ChkAddID3V1%, %ScriptName%.ini, Ripping, ChkAddID3V1 IniWrite, %ChkAddSequenceNumber%, %ScriptName%.ini, Ripping, ChkAddSequenceNumber IniWrite, %ChkAddPrefix%, %ScriptName%.ini, Ripping, ChkAddPrefix IniWrite, %EdtPrefix%, %ScriptName%.ini, Ripping, EdtPrefix IniWrite, %ChkSkipTracks%, %ScriptName%.ini, Ripping, ChkSkipTracks IniWrite, %EdtSkipTracks%, %ScriptName%.ini, Ripping, EdtSkipTracks IniWrite, %RadNumOfConnections%, %ScriptName%.ini, Connections, RadNumOfConnections IniWrite, %EdtNumOfConnections%, %ScriptName%.ini, Connections, EdtNumOfConnections IniWrite, %ChkAutoReconnect%, %ScriptName%.ini, Connections, ChkAutoReconnect IniWrite, %ChkDiffAgent%, %ScriptName%.ini, Connections, ChkDiffAgent IniWrite, %EdtDiffAgent%, %ScriptName%.ini, Connections, EdtDiffAgent IniWrite, %ChkRestartTimeout%, %ScriptName%.ini, Connections, ChkRestartTimeout IniWrite, %EdtRestartTimeout%, %ScriptName%.ini, Connections, EdtRestartTimeout IniWrite, %ChkRelay%, %ScriptName%.ini, Connections, ChkRelay IniWrite, %EdtRelayPort%, %ScriptName%.ini, Connections, EdtRelayPort IniWrite, %ChkScanForFreePort%, %ScriptName%.ini, Connections, ChkScanForFreePort IniWrite, %UseProxy%, %ScriptName%.ini, Misc, UseProxy IniWrite, %EdtProxyURL%, %ScriptName%.ini, Misc, EdtProxyURL IniWrite, %ChkSaveDebugLog%, %ScriptName%.ini, Misc, ChkSaveDebugLog IniWrite, %ChkOnlyErrorMessages%, %ScriptName%.ini, Misc, ChkOnlyErrorMessages IniWrite, %ChkStopTime%, %ScriptName%.ini, Misc, ChkStopTime IniWrite, %EdtStopTime%, %ScriptName%.ini, Misc, EdtStopTime IniWrite, %ChkStopSize%, %ScriptName%.ini, Misc, ChkStopSize IniWrite, %EdtStopSize%, %ScriptName%.ini, Misc, EdtStopSize IniWrite, %ChkCustomParseRules%, %ScriptName%.ini, Misc, ChkCustomParseRules IniWrite, %EdtCustomParseRules%, %ScriptName%.ini, Misc, EdtCustomParseRules IniWrite, %ChkCustomSpltPt%, %ScriptName%.ini, Splitpoint, ChkCustomSpltPt IniWrite, %EdtSpltPtTimeMute%, %ScriptName%.ini, Splitpoint, EdtSpltPtTimeMute IniWrite, %EdtSpltPtTimeBfCenter%, %ScriptName%.ini, Splitpoint, EdtSpltPtTimeBfCenter IniWrite, %EdtSpltPtTimeAftChange%, %ScriptName%.ini, Splitpoint, EdtSpltPtTimeAftChange IniWrite, %EdtSpltPtTimeOffset%, %ScriptName%.ini, Splitpoint, EdtSpltPtTimeOffset IniWrite, %EdtSpltPtTimePadBefore%, %ScriptName%.ini, Splitpoint, EdtSpltPtTimePadBefore IniWrite, %EdtSpltPtTimePadAfter%, %ScriptName%.ini, Splitpoint, EdtSpltPtTimePadAfter IniWrite, %ChkNoBorder%, %ScriptName%.ini, Appearance, ChkNoBorder IniWrite, %ChkTransparent%, %ScriptName%.ini, Appearance, ChkTransparent IniWrite, %SldTransparent%, %ScriptName%.ini, Appearance, SldTransparent return ;############# End of File #################################################