Mp3Playlister - singleList

create ONE single m3u playlist for ALL mp3 files

The generated playlist is saved in the scanned folder and uses absolute paths

File Name : Mp3Playlister_singleList.vbs
Requirement : mp3 files
Author : la boost
Submitted : 22/04/2002
Category : Other
'*********************************************************************************
'script		: Mp3Playlister_singleList.vbs
'description: recursive m3u playlist generator :
'				create ONE single playlist for ALL mp3 files 
'				found in the selected path, the generated playlist 
'				is saved in the scanned folder and uses absolute paths
'usage		: create a shortcut to this file in the "SendTo" folder or drag-drop folder on it
'date			: 13.04.2002
'version		: 1.1
'author		: [email protected]
[email protected]*****************

'***********************************
'BEGIN
'***********************************
Option Explicit
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso, WshShell, cptTot, objArgs, arrFiles(), sExtToGet
Dim driveLetter, pathToScan, fold, nTime, sAppName
Set fso = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")
sAppName = "Mp3Playlister - Recursive playlist generator"

'-- lowercase file extension to search for
sExtToGet = "mp3"		

Set objArgs = WScript.Arguments
if ( objArgs.Count = 0 ) then
	WshShell.Popup "You must specify a directory. ", 5, sAppName, 48
	WScript.Quit
end if
pathToScan = objArgs(0)
nTime = Timer

'-- start scanning
Call startScanning()

'-- clean
Set fso = nothing
Set WshShell = nothing					
'***********************************
'END
'***********************************


'***********************************
'FUNCTIONS:
'***********************************

Sub startScanning()
	Dim i, cpt, playlistPath
	cptTot = 0 
	If fso.FolderExists(pathToScan) Then
		ReDim arrFiles(0)
		Set fold = fso.Getfolder(pathToScan)
		playlistPath = fold.path &"\"& fold.Name & ".m3u"
		'-- recurse folder
		Call DoIt(fold)		
	Else
	 	WshShell.Popup "Folder """& pathToScan &""" does not exist. ", 5, sAppName, 48
	 	Wscript.quit
	End If	
		
	'-- save playlist if more than 0 entry in it
	If (UBound(arrFiles) > 0) Then
		Call Quicksort(arrFiles,0,cptTot-1)
		Call createAndSavePlaylist(arrFiles, playlistPath)		
	End If		
		
	WshShell.Popup "Finished. "  & chr(13) & chr(13) & cptTot & _
					" files have been playlisted in " & _
					pathToScan & Chr(13) & Chr(13) & showTime(nTime) _
					, 0, sAppName, 64	
End Sub 
'*********************************************************************************

Sub AddFiles(fold)
'-- process all mp3 files in the fold folder
	Dim strExt, mpFiles, strName, foldName, foldPath, f
	
	foldPath = fold.Path
	Set mpfiles = fold.Files
	
	For each f in mpfiles
		strName = f.Name
		strExt = LCase(fso.GetExtensionName(strName))
		If strExt = sExtToGet Then
			arrFiles(cptTot) = foldPath &"\"& UCase(Left(strName, 1)) & Mid(strName,2,Len(strName))
			ReDim Preserve arrFiles(UBound(arrFiles)+1)
			cptTot = cptTot + 1	'-- global counter for processed files
		End If
	Next

End Sub
'*********************************************************************************
   
Sub createAndSavePlaylist(arrFiles, playlistPath)
	Dim txt, txtFile
	
	'-- create m3u file (ASCII)
	If Not fso.FileExists(playlistPath) Then
		Set txtFile = fso.CreateTextFile(playlistPath,true,false)	'ASCII !!
	End If
	Set txtFile = fso.GetFile(playlistPath)
	Set txt = txtFile.OpenAsTextStream(ForWriting, 0)	'ForWriting	, 0 for ASCII (-1 for Unicode)
	'-- write m3u entries
	txt.write Join(arrFiles,vbCrLf)
	txt.close
	Set txtFile = nothing
End Sub
'*********************************************************************************
   
Sub DoIt(fold)
'-- recursive scan
	Dim sfold, sfoo
   Call AddFiles(fold)			'process files in current folder
	Set sfold = fold.subfolders 
	for each sfoo in sfold 		'process files in subfolders
		Call DoIt(sfoo)
	Next
End Sub  
'*********************************************************************************

Function showTime(nTime)
	showTime = "Elapsed time : " & Round((Timer - nTime),2) &" seconds"
End Function
'*********************************************************************************

Sub QuickSort(vec,loBound,hiBound)
  Dim pivot,loSwap,hiSwap,temp

  '== This procedure is adapted from the algorithm given in:
  '==    Data Abstractions & Structures using C++ by
  '==    Mark Headington and David Riley, pg. 586
  '== Quicksort is the fastest array sorting routine for
  '== unordered arrays.  Its big O is  n log n

  '== Two items to sort
  if hiBound - loBound = 1 then
    if vec(loBound) > vec(hiBound) then
      temp=vec(loBound)
      vec(loBound) = vec(hiBound)
      vec(hiBound) = temp
    End If
  End If

  '== Three or more items to sort
  pivot = vec(int((loBound + hiBound) / 2))
  vec(int((loBound + hiBound) / 2)) = vec(loBound)
  vec(loBound) = pivot
  loSwap = loBound + 1
  hiSwap = hiBound
  
  do
    '== Find the right loSwap
    while loSwap < hiSwap and vec(loSwap) <= pivot
      loSwap = loSwap + 1
    wend
    '== Find the right hiSwap
    while vec(hiSwap) > pivot
      hiSwap = hiSwap - 1
    wend
    '== Swap values if loSwap is less then hiSwap
    if loSwap < hiSwap then
      temp = vec(loSwap)
      vec(loSwap) = vec(hiSwap)
      vec(hiSwap) = temp
    End If
  loop while loSwap < hiSwap
  
  vec(loBound) = vec(hiSwap)
  vec(hiSwap) = pivot
  
  '== Recursively call function .. the beauty of Quicksort
    '== 2 or more items in first section
    if loBound < (hiSwap - 1) then Call QuickSort(vec,loBound,hiSwap-1)
    '== 2 or more items in second section
    if hiSwap + 1 < hibound then Call QuickSort(vec,hiSwap+1,hiBound)

End Sub  'QuickSort
'*********************************************************************************
Server Info
Remote Info
Compress

Batchs
BootSector
Droit
Accessoire GFA
On Now
Ecran plasma
Système d'exploitation
Son
Unités
Scripting
Multilingue
Site Web
Bruit et son
Architecture Google


4K
Color picker
TaskList
Backup files
Mini Port Scanner
Website To CHM
PixyDemo
Web password recovery
4KWebServer
Kill Popup
VBE decoder
Script Optimizer
Database Password Recovery
Class
Ini
EMail validator
Graphical Class
MP3 Info
Pinger Class
IP ranger class
SoftwareMetering
Path Validator
Time Stamper Class
LoggerCLS
HTA
Keyword Ranking
DOM Explorer
HTA-Notepad
PixyPortManager
Other
flashMessage
Kill Popup
VBE decoder (fixed)
Error Codes
Maze generator
Char counter
HTML To Word
ICQ Choose User
ScreenSaver Password decoder
Mp3Playlister - singleList
Long Filename To Short
Trace Math
Dump Hexa File
Self modifying script
Mp3Playlister - multiList
HTANoid
PixyWebServer
Python
Progress indication

©2002 Jean-Luc Antoine. All Rights Reserved. Scripts or any other material on this website may not be redistributed or put as part of ANY collection (script archives, CDs etc) without prior written permission. Permission granted to use and modify any of the scripts found on InterClasse.com