Jump to content

Batch Conversion MD SP audio to PC HD as WAV or MP3 via Optical Connection

Rate this topic


KCT

Recommended Posts

Hi All,

I figured I share what I have done, perhaps it helps someone who wanted to do the same thing. So I recently decided

to save my old recordings to a large hard drive with as little as possible loss. I wanted to save the Audio Content

as WAV file to prevent additional content loss. Later I would still have the option to convert to MP3 or other format if needed.

So I went on e-bay and bought for little money a MDS-JE510 for that purpose since I have a larger task to complete ( some 200 MD's) and

would not want to tie up my living room setup with this effort. What I wanted was to have a fully automated conversion

process in which I only have to insert a new MD once in a while. For this setup I used the following devices.:

A SONY Laptop Penti II with Windows 98

a ROLAND digital Interface EDIROL

a Behringer SCR2000 Digital Interface with SCMS 'handler' (optional)

a Behringer SNR2000 Analog Noise Reduction (optional)

a SONY MDS-JE510

EasyTitle

and for Software I used Sound Forge 6.0 and for the automation part some scripting software from Acrasoft

called Gound Control. Microsoft Excel came in handy as well for some pre-formating the data files.

Below you can find the script I wrote to run this process. I did not really care much for clean programming, so please excuse that.

Also note, depending on the computer speed some delays may vary. I chose 50ms key delay and 15ms execution delay

in the System Settings Menu of Ground Control.

I was also working with plain text files, which contain play time and artist - title information.

The playtime data file (playtime.txt) has the format: MD#, Track#, Playtime in seconds

0,1,322

0,2,349

0,3,738

0,4,413

0,5,210

0,6,355

0,7,400

0,8,444

0,9,405

1,1,32

1,2,131

1,3,175

1,4,175

1,5,193

1,6,113

1,7,287

1,8,255

1,9,135

1,10,141

1,11,217

1,12,212

1,13,96

1,14,165

while the Artist data files (MDxx.txt) are as follow:

MiniDisc # 3 - Groove Zone Volume 4

1) Janet Jackson & Luther Vandross - Best things in life are free (Extended)

2) Alexander O`Neal - Criticize (Single)

3) Atlantic Starr - Where M.... (Single)

4) Midnight Star - One Life to live (Single)

.

.

.

Cheers

KCT

// Input MD Number and then find out how many Tracks are on this MD

// ************************************************************************

InputBox("Enter Minidisc Number",%MD_Num)

PutVar(%FileName,"C:\md_DOS\ok\")

AddString(%fileName,%md_num)

AddString(%filename,".txt")

// ************************************************************************

InputBox("Enter Track Number to start with",%ST)

// readlines out of MDxx.txt into variable %B, and display total_lines in %A

PutVar(%a,0)

OpenFile(1,%filename)

:Loop

If(ReadLine(1,%B),DoNothing(),Goto(":Exit1"))

Increment(%a)

Goto(":Loop")

:Exit1

CloseFile(1)

// subtract 1st line from line count

Subtract(%a,1,%a)

// ************************************************************************

// Run Sound Forge

RunProgram("C:\Program Files\Sonic Foundry\Sound Forge 6.0\forge60.exe",Normal)

// ************************************************************************

Delay(2000)

// Run Terminal

RunProgram("C:\WINDOWS\Desktop\HyperTerminal\Computer2Computer.ht",Normal)

// ************************************************************************

// Find Play Time of first Track

GetStringLength(%MD_Num,%MD_num_length)

OpenFile(2,"C:\md_DOS\ok\PlayTime.txt")

:Loop3

If(ReadLine(2,%c),DoNothing(),Goto(":Exit3"))

Left(%c,%MD_num_length,%MD_play_time)

If(Equals(%MD_num,%MD_play_time),GoTo(":Exit3"))

Goto(":Loop3")

:Exit3

Subtract(%ST,1,%Trk_num)

Repeat(ReadLine(2,%c),%Trk_num)

GetStringLength(%c,%len)

Subtract(%len,%MD_num_length,%len)

Subtract(%len,3,%len)

If(MoreThan(%len,"3"),Subtract(%len,1,%len))

Right(%c,%len,%Play_time)

// ************************************************************************

// open MD file again and skip first line

// readlines out of MDxx.txt into variable %Audio_File_Name, and Track Number in %Trk_num

OpenFile(1,%filename)

If(ReadLine(1,%MD_label),DoNothing(),Goto(":Exit2"))

Repeat(ReadLine(1,%MD_label),%Trk_num)

:Loop2

If(ReadLine(1,%Audio_file_name),DoNothing(),Goto(":Exit2"))

Increment(%trk_num)

// Here goes the meat of setting up the MD player and controlling Sound Forge

// prepare Recording

GoSub(":Setup_MD")

GoSub(":Setup_SF")

GoSub(":Record")

// set Timer with Track Time

TimeoutMessageBox("... please wait ...",%Play_time,Information)

Delay(250)

MinimizeWindow("MD_Copy_2_HD.gc - GroundControl")

Delay(250)

ActivateWindow("Sonic Foundry Sound Forge 6.0 - [sound 1 *]")

// Save as Wave File

GoSub(":Save_Wave")

// Get Play Time for next track

GoSub(":get_play_Time")

// Loop until last track on MD

GoTo(":Loop2")

:Exit2

GoTo(":End")

// Subroutines, Goto End before running into these

// ************************************************************************

:Setup_SF

ActivateWindow("Sonic Foundry Sound Forge 6.0")

Delay(2000)

// MD prepare PC Recording

SendKeys("^r")

// PC Recording start, sendkey r after ^r was send

// PC Recording stop, sendkey spacebar

Return()

// ************************************************************************

:Setup_MD

// MD prepare Play Track

ActivateWindow("Computer2Computer - HyperTerminal")

Delay(250)

// Send Command - MD Program

SendKeys("[:079f")

Delay(250)

// Send Command - MD Track depending on trk_num

If(Equals(%trk_num,1),SendKeys("[:0780"))

If(Equals(%trk_num,2),SendKeys("[:0781"))

If(Equals(%trk_num,3),SendKeys("[:0782"))

If(Equals(%trk_num,4),SendKeys("[:0783"))

If(Equals(%trk_num,5),SendKeys("[:0784"))

If(Equals(%trk_num,6),SendKeys("[:0785"))

If(Equals(%trk_num,7),SendKeys("[:0786"))

If(Equals(%trk_num,8),SendKeys("[:0787"))

If(Equals(%trk_num,9),SendKeys("[:0788"))

If(Equals(%trk_num,10),SendKeys("[:0789"))

If(Equals(%trk_num,11),SendKeys("[:07c0"))

If(Equals(%trk_num,12),SendKeys("[:07c1"))

If(Equals(%trk_num,13),SendKeys("[:07c2"))

If(Equals(%trk_num,14),SendKeys("[:07c3"))

If(Equals(%trk_num,15),SendKeys("[:07c4"))

If(Equals(%trk_num,16),SendKeys("[:07c5"))

If(Equals(%trk_num,17),SendKeys("[:07c6"))

If(Equals(%trk_num,18),SendKeys("[:07c7"))

If(Equals(%trk_num,19),SendKeys("[:07c8"))

If(Equals(%trk_num,20),SendKeys("[:07c9"))

If(Equals(%trk_num,21),SendKeys("[:07ca"))

If(Equals(%trk_num,22),SendKeys("[:07cb"))

If(Equals(%trk_num,23),SendKeys("[:07cc"))

If(Equals(%trk_num,24),SendKeys("[:07cd"))

If(Equals(%trk_num,25),SendKeys("[:07ce"))

If(MoreThan(%trk_num,"25"),MessageBox("Track more than 25 !!!!"))

// Send Command - MD Pause

Delay(250)

SendKeys("[:07a9")

MinimizeWindow("Computer2Computer - HyperTerminal")

ActivateWindow("Sonic Foundry Sound Forge 6.0 - [sound 1 *]")

Return()

// ************************************************************************

:get_play_Time

If(ReadLine(2,%c),DoNothing(),Goto(":RTN"))

Left(%c,%MD_num_length,%MD_play_time)

GetStringLength(%c,%len)

Subtract(%len,%MD_num_length,%len)

Subtract(%len,3,%len)

If(MoreThan(%len,"3"),Subtract(%len,1,%len))

Right(%c,%len,%Play_time)

:RTN

Return()

// ************************************************************************

:Save_Wave

ActivateWindow("Sonic Foundry Sound Forge 6.0 - [sound 1 *]")

Delay(700)

// stop recording

SendKeys("r")

Delay(5000)

SendKeys("(%{F4})")

// save as wav

Delay(100)

SendKeys("(%f)")

Delay(1500)

SendKeys("a")

Delay(500)

SendKeys("MD_")

Delay(500)

SendKeys(%MD_Num)

Delay(500)

SendKeys("_Trk_")

Delay(500)

SendKeys(%Audio_file_name)

Delay(500)

SendKeys(".wav")

Delay(500)

SendKeys("(%s)")

Delay(500)

// wait for save as wav to complete

ActivateWindow("MD_Copy_2_HD.gc - GroundControl")

// calculate best time for waiting while saving file (depending on computer HD speed may vary)

Multiply(%play_time,170,%ANS)

Multiply(%play_time,100,%pl_tmp)

Subtract(%ANS,%pl_tmp,%ANS)

Divide(%ANS,100,%ANS)

TimeoutMessageBox("File been saved, please wait ...",%ANS,Information)

// close SF

SendKeys("(%F)")

Delay(500)

SendKeys("c")

Delay(500)

SendKeys("(%{F4})")

// wait for 2 s

Delay(2000)

// reset MD player

ActivateWindow("Computer2Computer - HyperTerminal")

Delay(100)

SendKeys("[:079d")

Delay(500)

MinimizeWindow("Computer2Computer - HyperTerminal")

// Run Sound Forge again

RunProgram("C:\Program Files\Sonic Foundry\Sound Forge 6.0\forge60.exe",Normal)

Delay(2000)

Return()

// ************************************************************************

:Record

ActivateWindow("Sonic Foundry Sound Forge 6.0")

// record

Delay(500)

SendKeys(" ")

// play MD

ActivateWindow("Computer2Computer - HyperTerminal")

Delay(100)

SendKeys("[:07aa")

MinimizeWindow("Computer2Computer - HyperTerminal")

Return()

// ************************************************************************

// Close open Files

:End

CloseFile(1)

CloseFile(2)

// ************************************************************************

// Terminate Application

ActivateWindow("Sonic Foundry Sound Forge 6.0")

Delay(500)

SendKeys("(%{F4})")

Delay(500)

ActivateWindow("Computer2Computer - HyperTerminal")

Delay(500)

SendKeys("(%{F4})")

Delay(500)

SendKeys("y")

// ************************************************************************

// Copy Files

:DOS

Delay(5000)

ActivateWindow("Exploring - My Documents")

Delay(500)

SendKeys("^a")

Delay(500)

SendKeys("^x")

Delay(500)

SendKeys("{TAB}")

Delay(500)

SendKeys("h:")

Delay(500)

SendKeys("~")

Delay(500)

SendKeys("{TAB}")

Delay(1500)

SendKeys("{TAB}")

Delay(500)

SendKeys("{DOWN}")

Delay(1500)

SendKeys("(%F)")

Delay(2000)

SendKeys("n")

Delay(2000)

SendKeys("f")

Delay(2000)

SendKeys("MD_")

Delay(500)

SendKeys(%MD_num)

Delay(500)

SendKeys("~")

Delay(2000)

SendKeys("~")

Delay(500)

SendKeys("^v")

:finish

Edited by KCT
Link to comment
Share on other sites

Can you explain to a non-programmer what this does?

Apparently you're reading titles and song lengths, going from the optical out of the deck through the SCMS stripper and noise reduction into the computer, and using the scripts to time each recording.

So it's still a realtime recording.

You could also do this, though with analog instead of optical output, with a NetMD unit by using Hi-MD Renderer's NetMD Recorder function, similar to the old WinNetMD: it controls the unit through SonicStage, plays back each track and records it as a separate track from the headphone jack. For all I know the programming is similar.

Unless someone has all these gadgets lying around, why not just get an RH1 and upload?

Edited by A440
Link to comment
Share on other sites

A440,

the script controls the Sound Forge Recording software and the MD Deck via the IR Titler.

First the script ask for MD number and which track to start with, then runs SF and Hyperterminal,

then the script programs the MD player to play the first track only.

The recording is timed and stopped accordingly, then the script gets the Track info and

saves the WAV file with this information as file name. Then repeats this process until

all tracks are recorded.

Yes, I am routing the optical through the SCR2000 to get rid of the SCMS which is optional and

needed for the consumer ROLAND EDIROL interface only.

If you have a good soundcard that has optical in and ignores SCMS that would do the job to.

Otherwise going through analog ports would work too.

The noise reduction unit is optional and analog only. For that the script need no changes.

Just plug into different input and select different source within SF. Sure you can use other

MD units but they must have IR control capability. Eventually the script may need to be

changed depending on the IR codes used for a perticular MD unit.

I have not looked into Hi-MD or NetMD Recorder option as I do not own such MD units and

probably would require to run SONY software which I don't like.

Yes, it is realtime recording, but I am not in a hurry. It will be a winter project for

me to complete my entire collection.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...