Home » Blog
date 17.Aug.2014

■ My CD ripper mangled the audio stereo channel — Help!

As a child of an older generation I had a sizable music collection on retro CDs and records which I slowly converted to a lightweight MP3 trim. Every now and then I would discover a particular music album whose stereo resolution was destroyed after ripping it to MP3. You know, one of the channels would sound like as if it played from the room next door, very low level and utterly ruining the sound experience. A quick investigation showed that the MP3 tracks in question were ripped with a low 128 kbps bitrate which wasn't enough to preserve the stereo sound (more on that later but now let's assume that this low bitrate was the cause).

So that's today's puzzle, how do we quickly find all the music albums (folders) that have low bitrates so we can re-rip them with better sampling and sound quality? The other day we were looking for music folders without CD cover art and we sorted that problem using a windows script in visual basic. So let's modify that script to find and report folders whose MP3 files have low bitrates (below 128 kbps).

(We could use xplorer² to search for low bitrates without scripts but it would be tricky to extract the folder names from the search results)

The script recursively enters folders looking for audio files, then it checks the System.Audio.EncodingBitrate property to get the bitrate. If it is below 128000 (note this number is in base units, not kbps) we store the folder name in a file called REPORT.TXT and proceed. The VBS file can be downloaded from here.

REM scan music folders and print those with low bitrate
Set oFSO = CreateObject("Scripting.FileSystemObject")
set oFile = oFSO.CreateTextFile("report.txt", True)
Set oSHApp = WScript.CreateObject("Shell.Application")

' examine all folders starting from where we are located
Set oShell = WScript.CreateObject("WScript.Shell")
call listdir(oShell.CurrentDirectory) 
oShell.Run "report.txt"

REM ---------
Sub listDir(what)
Set oDir = oFSO.GetFolder(what)
' keep the shell folder in parallel for extended properties
Set oFolder = oSHApp.Namespace(what)

bHasLowBit = false

For Each f in oDir.Files
	strType = lcase(f.Type)
	if Instr(strType, "audio") > 0 OR Instr(strType, "sound") > 0 then 
		set i = oFolder.ParseName(f.Name)
		' avoid 800a01ca error, see http://support.microsoft.com/kb/195180/en-gb
		tmp = clng(i.ExtendedProperty("System.Audio.EncodingBitrate"))

		' check its bitrate if its <= 128 kbps
		if tmp <= 128000 then
			bHasLowBit = true
			exit for
		end if
	end if

if bHasLowBit then 
' we must rip this folder again 
end if

' recursively enter subfolders
For Each f in oDir.subfolders
   call listdir(what & "\" & f.name)
end sub

The notable difference from the old versions of this script is that instead of using WSH own Scripting.FileSystemObject.Folder object we keep in parallel the "low level" Shell.Application.Folder object which allows extracting extended properties like the bitrate.

PS. Coming back to the stereo problem, it wasn't just my stinginess and drive for lower size MP3 files that caused the sound glitch. The old audio disc in question was badly encoded in the first place so it sounded rubbish on any computer CDROM drive (it was ok in normal CD players). Increasing the ripping bitrate didn't have any effect restoring the sound quality. The solution was to extract the tracks in mono instead of stereo mode.

Post a comment on this topic »

Share |

©2002-2014 ZABKAT, all rights reserved | Privacy policy | Sitemap