http://dieseyer.de • all rights reserved • © 2011 v11.4

'v4.2*****************************************************
' File: wav-to-mp3.VBS
' Autor: dieseyer@gmx.de
' dieseyer.de
'
' Sucht im Zielverz. nach WAV-Dateien und wandelt diese
' mit LAME (http://www.mp3dev.org) in MP3-Dateien um,
' wenn es noch keine MP3-Datei mit selbigen Namen gibt.
' Anschließend werden die MP3's zur Kontrolle angepielt,
' zu denen WAV's existieren. Nach dem Schließen des MP3-
' Players wird gefragt, ob die WAV-Datei gleichen Namens
' gelöscht werden soll.
' Die MP3-Tag's werden richtig gesetzt, wenn die Verzeich-
' nisse den Namen des Interpreten haben - die WAV-Dateien
' tragen in ihrem Namen den Song-Titel.
'*********************************************************

Option Explicit

Dim Song, Interpret
Dim Text, Text1, Text2, index, Txt(), i, i1, i2, newpath
Dim fso, fo, fi, FileOut
Dim LameExe, LameParam, ZielVerz, Ziel, Quelle, WSHShell

Set WSHShell = WScript.CreateObject("WScript.Shell")
Set fso = WScript.CreateObject("Scripting.FileSystemObject")

Text = ""

LameExe = "C:\#DasDing\lame.exe"
ZielVerz = "C:\#DasDing"
ZielVerz = fso.GetFolder(".")
LameExe = ZielVerz & "\lame.exe"

If not fso.FileExists(LameExe) Then
MsgBox LameExe & " existiert nicht!", , WScript.ScriptName
WScript.Quit
End If

If not fso.FolderExists(ZielVerz) Then
MsgBox ZielVerz & " - Verzeichnis existiert nicht!", , WScript.ScriptName
WScript.Quit
End If

RecFolder 1, Zielverz ' Hole Ordnerauflistung mit "Sub RecFolder"

For i = LBound(Txt) to UBound(Txt) ' Hole Ergebnis aus Txt(i) = Ordnerauflistung
Text = Text & Txt(i)
Next

Text1 = Split(Text, vbCRLF) ' Array Text in Zeilen aufteilen

mp3Erstellen
' wavDelete

WScript.Quit


' Autor: (c) Günter Born
'*********************************************************
Sub RecFolder (idx, path)

' Rekursive Ordnerbearbeitung (hole Unterordner)
Dim oFolders, oSubFolder, oFolder

' Hole Folders-Auflistung
Set oFolders = fso.GetFolder(path)
Set oSubFolder = oFolders.SubFolders
Redim Preserve Txt(idx) ' redim String-Array
For Each oFolder in oSubFolder ' alle Ordner
Txt(idx) = Txt(idx) & path & "\" & oFolder.name & vbCRLF
' Unterordner rekursiv suchen
Call RecFolder (idx+1, path & "\" & oFolder.name)
Next

Set oFolders = Nothing ' Variable freigeben
Set oSubFolder = Nothing
End Sub


Sub wavDelete
' wenn .wav-Datei und .mp3-Datei mit gleichem Namen existiert,
' wird die .mp3-Datei zur Kontrolle abgespielt und vorgeschlagen,
' die .wav-Datei zu löschen
'*********************************************************
i2 = 0
Text = ""

Text2 = "Im Folgenden wird jede mp3-Datei abgespielt, zu der eine wav-Datei" & vbCRLF
Text2 = Text2 & "mit gleichem Namen existiert. Nach dem Schließen des Players wird " & vbCRLF
Text2 = Text2 & "gefragt, ob die entsprechende wav-Datei gelöscht werden soll"
MsgBox Text2, , WScript.ScriptName

For i = LBound(Text1) to UBound(Text1) ' Hole Ergebnis aus Text1(i)
' For i = 1 to Ubound(Text1) -1
Set fo = fso.GetFolder(Text1(i))
Set fi = fo.Files ' Datei-Auflistung holen

For Each i1 In fi ' hole alle Dateien
if Ucase(Right(i1.name,4)) = ".WAV" then ' hole nur WAV - Dateien
Quelle = Text1(i) & "\" & i1.Name
Ziel = Mid(Quelle, 1, Len(Quelle) -4) & ".mp3"

if fso.FileExists(Quelle) AND fso.FileExists(Ziel) then ' wenn es zu einer .wav-datei
' eine .mp3-Datei gibt
i2 = i2+1
WSHShell.Run """" & Ziel & """", , True

Text2 = "Abgespielt wurde" & vbTab & vbTab & Ziel & vbCRLF & vbCRLF
Text2 = Text2 & "Soll " & vbTab & vbTab & Quelle & vbCRLF & vbCRLF
Text2 = Text2 & "gelöscht werden? "
Text2 = MsgBox (Text2, 4 + 256, WScript.ScriptName)

If Text2 = vbYes then ' wurde Yes gedrückt,
fso.DeleteFile(Quelle), True ' wird diese gelöscht
' WScript.Sleep 500 ' 500 Millisekunden warten
if fso.FileExists(Quelle) then MsgBox "ACHTUNG!" & vbCRLF & vbCRLF & Quelle & " konnte nicht gelöscht werden!"
if fso.FileExists(Quelle) then Text = Text & "(" & i2 & ") ungelöscht: " & vbTab & "..." & Mid(Quelle,Len(ZielVerz)+1) & vbCRLF
if not fso.FileExists(Quelle) then Text = Text & "(" & i2 & ") gelöscht: " & vbTab & "..." & Mid(Quelle,Len(ZielVerz)+1) & vbCRLF
Else
Text = Text & "(" & i2 & ") ungelöscht: " & vbTab & "..." & Mid(Quelle,Len(ZielVerz)+1) & vbCRLF
End If

End If
End If
Next
Set fo = Nothing ' Datei schließen
Next

If i2 = 0 then MsgBox "In " & newpath & "\... wurden keine mp3-Dateien gefunden, von denen es auch eine wav-Datei gibt.", , WScript.ScriptName
If i2 > 0 then MsgBox "Ordner " & newpath & "\..." & vbCRLF & vbCRLF & Text, vbOkonly + vbInformation, WScript.ScriptName

End Sub


Sub mp3Erstellen
' zu jeder .wav-Dateien eine .mp3-Dateien erstellen
'*********************************************************
i2 = 0
Text = ""

For i = LBound(Text1) to UBound(Text1)-1 ' Hole Ergebnis aus Text1(i)
' For i = 1 to Ubound(Text1) -1 ' zeilenweise (aus Text1)
Set fo = fso.GetFolder(Text1(i)) ' für jedes Verzeichnis
Set fi = fo.Files ' Datei-Listung holen

For Each i1 In fi ' hole alle Dateien aus Datei-Liste
if Ucase(Right(i1.name, 4)) = ".WAV" then ' hole nur WAV - Dateien
Quelle = Text1(i) & "\" & i1.Name
Song = Mid(i1.name, 1, Len(i1.name) -4)
Interpret = Mid(Text1(i), Len(ZielVerz) + 2)
Ziel = ZielVerz & "\" & Interpret & "\" & Song & ".mp3"
Ziel = Mid(Quelle, 1, Len(Quelle) -4) & ".mp3"
if fso.FileExists(Ziel) then ' wenn es zu einer .wav-datei eine
if fso.GetFile(Ziel).Size = 0 then ' 0 Byte große .mp3-Datei gibt
fso.DeleteFile(Ziel), True ' wird diese gelöscht
WSHShell.Popup "0 Byte große Datei " & Ziel & " wurde gelöscht", 3, WScript.ScriptName
End If
End If

if not fso.FileExists(Ziel) then ' wenn es von der .WAV- noch keine .mp3-Datei gibt

if not fso.GetFile(Quelle).Size/5 < fso.GetDrive(Left(Quelle,3)).AvailableSpace then
MsgBox "Auf " & ZielVerz & " steht nicht genügend Platz zur Verfügung!", , WScript.ScriptName
Exit Sub ' wenn weniger als 20% der Größe der Quelle-Datei auf
End If ' dem Ziellaufwerk frei ist - Abbruch

LameParam = " """ & Quelle & """ """ & Ziel & """ -b 128 "
LameParam = " """ & Quelle & """ """ & Ziel & """ -b 96 "
LameParam = LameParam & " --tt """ & Song & """ --ta """ & Interpret & """"

' MsgBox LameExe & LameParam
WSHShell.Run LameExe & LameParam , , True

i2 = i2+1
Text = Text & "(" & i2 & ") " & vbTab & "..." & Mid(Ziel,Len(ZielVerz)+1) & vbCRLF
End If
End If
Next
Set fo = Nothing ' Datei schließen
Next

If i2 = 0 then MsgBox "In " & newpath & "\... wurden keine wav-Dateien zum Wandeln in mp3 gefunden.", , WScript.ScriptName
If i2 > 0 then MsgBox "Folgende Dateien wurden in " & ZielVerz & "\... erstellt " & vbCRLF & Text, vbOkonly + vbInformation, WScript.ScriptName

End Sub

http://dieseyer.de • all rights reserved • © 2011 v11.4