iTunes User Sues Apple Over Lock-In
GregChant writes "It seems like Apple can also be at the receiving end of a lawsuit, too: Californian Thomas Slattery filed suit against Apple because 'Apple has turned an open and interactive standard into an artifice that prevents consumers from using the portable hard drive digital music player of their choice'. With over 200 million songs sold, and Apple controlling over 80% of the hard drive digital audio player market, is this just a case of someone just trying to cash in on Apple's success? Or is this genuinely an issue of buyer lock-in and monopolistic practices?"
It's not illegal until they start bundling features people want and expect as a convience
No. It is not illegal until a company leverages their monopoly to prevent others from fairly competing. If your monopoly is fairly maintained because you have the best product and consumers simply prefer to purchase your product, then all is fair and no laws have been broken.
Visit Jonesblog and say hello.
This script is readily available on the internet. This is part of the hymn project, which is LEGAL. I DID NOT write this script!
.m4p files onto this script, and out comes mp3 with all your personal credentials deleted. You can play this anywhere, and share at will without worry.
Just download hymn.exe, faad.exe, lame.exe in the same folder as this VB script. Name it something.vbs. Drag your iTunes
'coded by man on street
Set oFs = CreateObject ("Scripting.FileSystemObject")
Set oShell = WScript.CreateObject("WScript.Shell")
Set id3Options = CreateObject("Scripting.Dictionary")
binDir = oFs.GetFile(WScript.ScriptFullName).ParentFolder & "\"
workingDir = binDir & "working\"
decodedDir = binDir & "decoded\"
id3Options.Add "title", "--tt"
id3Options.Add "artist", "--ta"
id3Options.Add "album", "--tl"
id3Options.Add "date", "--ty"
id3Options.Add "track", "--tn"
id3Options.Add "genre", "--tg"
makeDirectory(workingDir)
makeDirectory(decoded Dir)
For Each arg in WScript.Arguments
walkArguments(arg)
Next
removeDirectory(workingDir)
Sub convertFile(fileName)
Set protectedFile = oFs.GetFile(fileName)
albumName = protectedFile.ParentFolder.Name
albumDir = decodedDir & albumName & "\"
makeDirectory(albumDir)
protectedFile.Copy(workingDir)
trackName = oFs.GetBaseName(protectedFile)
return1 = oShell.Run(quote(binDir & "hymn") & " " & quote(workingDir & trackName & ".m4p"), 1, TRUE)
return2 = oShell.Run(quote(binDir & "faad") & " " & quote(workingDir & trackName & ".m4a"), 1, TRUE)
Set LaunchedApp = oShell.Exec(quote(binDir & "faad") & " -i " & quote(workingDir & trackName & ".m4a"))
tagInfo = LaunchedApp.StdErr.ReadAll
For Each tag in id3Options.Keys
tagSwitches = tagSwitches & " " & id3Options.Item(tag) & " " & quote(getTag(tag, tagInfo))
Next
rem return3 = oShell.Run(quote(binDir & "lame") & tagSwitches & " " & quote(workingDir & trackName & ".wav") & " " & quote(albumDir & trackName & ".mp3"), 1, TRUE)
return3 = oShell.Run(quote(binDir & "lame") & " --ignore-tag-errors " & tagSwitches & " " & quote(workingDir & trackName & ".wav") & " " & quote(albumDir & trackName & ".mp3"), 1, TRUE)
End Sub
Sub walkArguments(arg)
If oFs.FolderExists(arg) Then
Set thisDir = oFs.GetFolder(arg)
Set subDirs = thisDir.SubFolders
Set theseFiles = thisDir.Files
If subDirs.Count > 0 Then
For Each dirName in subDirs
walkArguments(dirName)
Next
End If
For Each fileName in theseFiles
walkArguments(fileName)
Next
ElseIf oFs.FileExists(arg) Then
If oFs.GetExtensionName(arg) = "m4p" Then
convertFile(arg)
End If
End If
End Sub
Sub makeDirectory(dirName)
If Not oFs.FolderExists(dirName) Then
oFs.CreateFolder(dirName)
End If
End Sub
Sub removeDirectory(dirName)
If oFs.FolderExists(dirName) Then
oFs.GetFolder(dirName).Delete
End If
End Sub
Function quote(myString)
quote = Chr(34) & myString & Chr(34)
End Function
Function getTag(frameName, tagString)
Set oRegEx = New RegExp
oRegEx.Pattern = frameName & ".+\n"
frameNameAndValue = oRegEx.Execute(tagString).Item(0).Value
frameValue = Mid(frameNameAndValue, InStr(frameNameAndValue, ":") + 2)
getTag = Left(frameValue, Len(frameValue) - 2) 'Strip CR/LF
End Function