Batch files question, namely assigning values correctly

Started by
4 comments, last by BloodOrange1981 10 years, 10 months ago

Hi all.

I have a batch file where I run files listed in a text file through an audio codec. The text file is set out as follows:


BGM_Name	    file	flag	LoopStart	 Length				
title		    7001	0x01	1810432	         5921928; 
map                 7552	0x01	0073664	         4997136; 

There are many more listings in the real file. The parts I`m interested in are the loopstart and the length properties, as the audio format I`m dealing with encodes loop starts and lengths internally and these are the sample counts from the start of the file.

The codec is run at the command line as follows with command line arguments:


codec loopstart loopend input output

so loopend is obviously the LoopStart plus the Length.

The batch file I use to process all the files is as follows


for /f "tokens=1-5" %%l in (test.txt) do (
  set /a endloop1=%%p
  set /a endloop2=%%q
  set /a endloop = endloop1 + endloop2
  codec -loop %endloop1% %endloop% *input and output file names omitted for the example*
)

%%p is the value of loopStart and %%q is the length, and even though a fair few files are processed correctly and even though I`ve checked via using @echo that the values of p and q change each time the values aren`t always set to endloop1 and endloop2 so the values from the previous iteration are used and thusly the audio file is encoded incorrectly and during gameplay goes into jarring loops.

Can anyone explain why endloop1 and endloop2 sometimes don`t get assigned the correct val even if p and q are set correctly?

Thanks in advance

Advertisement

Shouldn't you be using o and p instead of p and q? The tokens would be stored in l, m, n, o, and p.

Sorry ,that was just a typo as I`ve simplified the example. However, during running as I said, I had the read values of o and p echoed to the screen and they looked fine, but they weren`t being assigned to the variables correctly...if I used the values of o and p directly their ascii value would be used and not the integer value so that solution is a no-go.

Thanks for the reply

Make sure you don't have extra spaces in this line:

set /a endloop = endloop1 + endloop2

It should be:

set /a endloop=endloop1+endloop2

Also, numeric values starting with a leading '0' will be treated as octal, so it's possible that some of your lines contain values with leading '0's and digits greater than 7, which would result in an error. I noticed your "map" line has a LoopStart value with leading '0's...

Other than that, I don't see anything wrong with your script.

Thanks Dave, I`ll try out your suggestion!

Well, I`m still having errors. I`ve changed the script and the txt file, I`m using a compact test file. The batch file is now as follows:


@echo off
@echo -------CONVERSION---------
for /f "tokens=1-5" %%l in (test.txt) do (
  @echo %%n.wav?%%ni.fco??????
  @echo %%o %%p
  set /a endloop1=%%o
  set /a endloop2=%%p
  set /a endloop=endloop1+endloop2
  @echo %endloop1% %endloop2% %endloop%
  contool -e -br 144 -loop %endloop1% %endloop% ed%%n.wav ed%%n.fco

And test.txt in its entirety is


bgmtbl BGM_Title    7552 73664   4997136	


bgmtbl BGM_GameOver 7534 22464   4014400	
bgmtbl BGM_Midtown  7101 773184  3718720
bgmtbl BGM_Cross_1  7102 112838  5827154

for some reason the endloop values use the numbers from the last line of the text file over and over! e.g


7552.wav?7552i.fco??????
73664 4997136
112838 5827154 5939992
your parametter doesn't satisfy under the condition
0<= loopstart(112838) <= loopend(5939992) < Total Sample(5118208) element=0/1

7534.wav?7534i.fco??????
22464 4014400
112838 5827154 5939992
your parametter doesn't satisfy under the condition
0<= loopstart(112838) <= loopend(5939992) < Total Sample(4125696) element=0/1

etc

It`s driving me crazy!

This topic is closed to new replies.

Advertisement