almacenar salida de un programa en una variable Vbscript ??

Iniciado por kapo.damy, 27 Septiembre 2011, 05:58 AM

0 Miembros y 1 Visitante están viendo este tema.

kapo.damy

hola  a todo el foro   :rolleyes:  estoy armando un script vbs  en donde lee un archivo (sus datos mediante un programita), lo calcula, y lo convierte(con otro programita). pero me he clavado justo en el inico :(.

estoy necesitando guardar la salida de un programa ms-dos en una variable, el programa me tira estos datos:

decoding bgm_stg230_fct.aax
sample rate 48000 Hz
channels: 2
loop start: 1941380 samples (40.4454 seconds)
loop end: 8974667 samples (186.9722 seconds)
stream total samples: 8974667 (186.9722 seconds)
encoding: CRI ADX 4-bit ADPCM
layout: AAX blocked, 18-byte interleaved
metadata from: CRI AAX header
samples to play: 16007954 (333.4990 seconds)


ya habia realizado antes un script batch donde realiza esta accion con el comando for, aca una muestra:

for /f "skip=1 tokens=*" %%i in ('stream_info.exe -m %1') do (
set "freq=%%i"
goto stopbucle

:stopbucle
set conversor=ffmpeg
set recodificador=adxencd

mi script batch leia 3 lineas que arrojaba el programa y las almacenaba en variables. mi problema en batch fue que para poder filtrar y calcular (con decimales :¬¬), me vi obligado a usar demasiadas veces el comando call. por lo que se me hace un lio tremendo :(
es por eso que decidi armarlo en vbscript (deberia ser menos engorroso).
y aun no he encotrado la forma de almacenar las tres lineas vitales para el Vbscript, es mas creo que no se puede :(.
desde ya espero que me puedan ayudar

Novlucker

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Leminy

Lo Que Dice NovLucker Es Cierto, Aunque... Sin Ir En Tu Contra NovLucker, Es Que También Puedes: Direcciónes la Salida A Una Archivo Y Leas Las Lineas De Ese Archivo En Busca De Un String Constante("Para Saber Que Esa Es La Linea Indicada"), Y Para Cada Linea Que Corresponda, Meterla En Un "Array"... Si Quieres Un "Code Example" Deberas Indicarme Que Es Lo Que Buscas Exactamente... Suerte ;D

kapo.damy

Cita de: Novlucker en 28 Septiembre 2011, 04:08 AM
Método Exec
http://foro.elhacker.net/scripting/tutorial_vbscript-t229032.0.html

Saludos


muchisimas gracias novlucker, no tenia idea que habia una version mas completa del tutorial (yo tenia un pdf >:().

Cita de: Leminy en 28 Septiembre 2011, 07:42 AM
Lo Que Dice NovLucker Es Cierto, Aunque... Sin Ir En Tu Contra NovLucker, Es Que También Puedes: Direcciónes la Salida A Una Archivo Y Leas Las Lineas De Ese Archivo En Busca De Un String Constante("Para Saber Que Esa Es La Linea Indicada"), Y Para Cada Linea Que Corresponda, Meterla En Un "Array"... Si Quieres Un "Code Example" Deberas Indicarme Que Es Lo Que Buscas Exactamente... Suerte ;D


bien , es una buena idea usar un array Leminy. si entendi bien cada linea del programa se almacenara en cada matriz de la variable (array). y que bueco exactamete, almacenar en una variable (o como decis vos en un array) las lineas que da el programa.


rem rutina de obtencion de datos [freq] [loop inicio] [loop final]
rem la linea 2 corresponde a la frequencia
rem %1 parametro que contiene la ruta del archivo
for /f "skip=1 tokens=*" %%i in ('test.exe -m %1') do (
set "freq=%%i"
goto a
)

:a
rem la linea 4 corresponde al loop de inicio
for /f "skip=3 tokens=*" %%i in ('test.exe -m %1') do (
set "inicio=%%i"
goto b
)

:b
rem lectura y obtencion de la linea 5, loop de final
for /f "skip=4 tokens=*" %%i in ('test.exe -m %1') do (
set "final=%%i"
goto c
)

:c
set freq=%freq:~12%
set freq=%freq:~-8,5%
set freq=%freq:~-5,2%

set inicio=%inicio:~12%
call :iniciofilt %inicio%

:iniciofilt
set "inicio=%1"

set final=%final:~10%
call :finalfilt %final%
:finalfilt
set "final=%1"

echo info_reader ha leido freq:%freq% inicio:%inicio% final:%final%
call :calcuradora_con_decimales_nax.bat
if errorlevel==1 (msg * "error al leer la info del archivo o llamar a subrutina"&exit)

ahora que me di cuenta que se puede realizar dicha accion, puedo hacer otra pregunta, es posible cambiar o agregar la ruta de los programas. como por ejemplo en batch con la variable %path%. si no se puede no renieguen :-\.

Novlucker

Código (vb) [Seleccionar]
set objshell = createobject("wscript.shell")
msgbox objshell.expandenvironmentstrings("%path%")


Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

kapo.damy

NOVLUCKER YO PRECISAMENTE BUSCABA OBTENER EL DIRECTORIO ACTUAL.......


TERMINE EL SCRIPT !!!!!!!! ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)
Y ES 99.999% FUNCIONAL

ACA SE LOS DEJO EL SCRIPT + LOS ARCHIVOS NECESARIOS PARA SU FUNCIONAMIENTO.....
LES DOY LAS GRACIAS AL FORO Y A LOS 2 MODERADORES POR SU ATENCION  :D
desde ya muchisimas gracias

Código:

'VGMstream2ADXenc ver 2.4 rev 257 Hecho por Kapodamy!
' Uso VGMstream2ADXenc.vbs -e [ARCHIVO] -f [FREQUENCIA DE CONVERSION] -s [CARPETA DE SALIDA] -mono

' -e [ARCHIVO] archivo a convertir; debe ser soportado por el vgmstream y NO PUEDE
' TENER MAS DE 2 CANALES. en caso de que tuviera mas de 2 canales. la conversion
' sera reducida a 2 canales. si esta presente el parametro "-mono" la reduccion sera a un unico canal.

' -f [FRECUENCIA DE CONVERSION] especifica la frequencia de conversion de los ADX en hertz.SIN COMILLAS ;)
' si no se especifica la frequencia de salida sera igual a la de entrada.

' -s [CARPETA DE SALIDA] especifica la carpeta en donde se almacenaran los ADX, en lo posible SIN CONTENER ESPACIOS.
' SE RECOMIENDA NO ESPECIFICAR SUBCARPETAS como por ejemplo "archivos_adx\wii_rips\ost", de lo contrario usar "COMILLAS"
' el parametro es directamente pasado al ADXenc. ESTE PARAMETRO ES OPCIONAL

' -mono especifica que la salida ADX no es en stereo sino en mono. NOTA:PUEDE CAUSAR ERRORES EN LOS LOOP's DE LOS ADX's

'Ejemplos de uso
' VGMstream2ADXenc.vbs -e bgm_stage01.strm -f 32000 -s archivos_adx      convertira el archivo bgm_stage01.strm a bgm_stage01.adx dentro de la carpeta archivos_adx con una frequencia de 32000hz.
' VGMstream2ADXenc.vbs -e bgm_stage01.strm -s "my_adxs\ost\rips"         convertira el archivo bgm_stage01.strm a bgm_stage01.adx dentro de la carpeta my_adxs\ost\rips.
' VGMstream2ADXenc.vbs -e bgm_stage01.strm -mono                         convertira el archivo bgm_stage01.strm a bgm_stage01.adx pero en mono sin cambiar la frequencia.
'
'agradecimientos a novlucker y al foro el hacker
'----------------------------------------------------------INICIO DEL SCRIPT-----------------------------------------------------------------------------------------------------------------------

dim detect
dim loop_total
dim exist_lps
dim contc
dim no_loop_index
dim hz_index
dim freq_index
dim samplei_index
dim samplef_index
dim samplefd_index
dim sampleid
dim estado
dim freq_real
dim inicio
dim final
dim loop_inicio_dec
dim loop_final_dec
dim no_loop
dim loop_inicio_real
dim loop_inicio
dim dec_corr_i_index
dim canales_index
dim canales_index_d
dim r
dim i
dim argumento_mono
dim argumento_adx_dir
dim argumento_archivo
dim archivo_nombre_index
dim loop_iniciodec
dim loop_finaldec
dim dec_corr_i
dim loop_final
dim vgmstream
dim ffmpeg
dim adxencd
dim argumentos_index

Set objfso = createobject("scripting.filesystemobject")
Set objshell = createobject("wscript.shell")
'----------------rutina de seleccion de argumentos------------------
'                           0     1      2             3               4          5           6
' Uso VGMstream2ADXenc.vbs -e [ARCHIVO] -f [FREQUENCIA DE CONVERSION] -s [CARPETA DE SALIDA] -mono


If WScript.Arguments.count < 2 Then ' rutina de deteccion de parametros
msgbox "Uso VGMstream2ADXenc.vbs -e [ARCHIVO] -f [FREQUENCIA DE CONVERSION] -s [CARPETA DE SALIDA] -mono"&chr(13)&"el parametro minimo es: -e [ARCHIVO]"&chr(13)&"los demas parametros son opcionales",32,"VGMstream2ADXenc - uso incorrecto"
WScript.Quit
else
argumentos_index=WScript.Arguments.count-1
End If
'seleccion de parametros
for i=0 to argumentos_index
select case WScript.Arguments(i)
case "-e"
  r=i+1
  archivo=WScript.Arguments(r)
  if archivo="" then
  msgbox "error en -e. archivo no especificado",16,"VGMstream2ADXenc"
  wscript.quit
  end if

  case "-f"
   r=i+1
   argumento_freq=1
   freq_conv=WScript.Arguments(r)
   if freq_conv="" then
   msgbox "error en -f. frequencia no especificada",16,"VGMstream2ADXenc"
   wscript.quit
   end if

case "-s"
  r=i+1
  argumento_adx_dir=1
  adx_dir_out=" "&WScript.Arguments(r)
  if adx_dir_out="" then
  msgbox "error en -s. carpeta de salida no especificada",16,"VGMstream2ADXenc"
  wscript.quit
  end if

case "-mono"
  argumento_mono=1

end select
next



rem codigos de prueva
'archivo="bgm_boss_shipboss.aax"
'archivo="bgm_stg230_fct.aax"
'FREQ_CONV=32000
'argumento_freq=1

rem rutina de deteccion de errores en parametros
if archivo="" then
msgbox "Error, archivo no especificado"&chr(13)&"parametro minimo: "&WScript.Scriptname&" -e [ARCHIVO]",16,"VGMstream2ADXenc"
wscript.quit
end if





if not argumento_adx_dir=1 then adx_dir_out=""

'-----------sub-rutina obtencion del nombre del archivo
Set archivo_n = objfso.getfile(archivo)
archivo_nombre=archivo_n.name

for i=255 to 0 step -1
detect=mid(archivo_nombre,i,1)
if detect="." then
archivo_nombre_index=i-1
i=0
end if
next
archivo_nombre=mid(archivo_nombre,1,archivo_nombre_index)
'----------fin de sub-rutina con archivo_nombre
archivo_conv=archivo_nombre&".wav"
archivo_tmp=archivo_nombre&"_tmp"&".wav"
'--------------fin de rutina de seleccion de argumentos con: archivo archivo_tmp archivo_conv
' freq_conv adx_dir_out argumento_mono
'msgbox archivo&"    "&archivo_nombre&"     "&archivo_conv&"    "&archivo_tmp

directorio_actual = left(WScript.ScriptFullName,(Len(WScript.ScriptFullName))-(len(WScript.ScriptName)))
vgmstream=chr(34)&directorio_actual&"test.exe"&chr(34)' ruta del vgmstream
ffmpeg=chr(34)&directorio_actual&"ffmpeg.exe"&chr(34)' ruta del ffmpeg
adxencd=chr(34)&directorio_actual&"adxencd.exe"&chr(34)' ruta del adxencd
Set info_reader=objshell.exec(vgmstream&" -m "&archivo)' LECTURA DE DATOS DEL ARCHIVO

estado = info_reader.stdout.readline

if estado="" then
msgbox "error al abrir el archivo,al parecer no es un stream valido",16,"VGMstream2ADXenc"
wscript.quit
end if

freq_real = info_reader.stdout.readline
canales_index=info_reader.stdout.readline
inicio = info_reader.stdout.readline
final = info_reader.stdout.readline


'---------------rutina de frequencia real
for contc=1 to 24
detect=Mid(freq_real,contc,3)
if detect=" Hz" then
hz_index=contc
end if
next

freq_index=hz_index-12
freq_real=Mid(freq_real,13,freq_index)
'---------------fin de rutina con freq_real

'--------------rutina definidora de frequencias y canales de salida
canales_index_d=mid(canales_index,11,255)
if canales_index_d=>2 then canales=""
if argumento_mono="1" then canales=" -ac 1"

if argumento_freq=1 then
freq_ffmpeg=" -ar "&freq_conv
else
freq_ffmpeg=" -ar "&freq_real
end if

detect=Mid(inicio,8,5)
if detect="total" then
call rutina_no_loop
else
exist_lps=1
end if


'---------------rutina de loop inical real
for contc=12 to 60
detect=Mid(inicio,contc,8)
if detect=" samples" then
samplei_index=contc
end if
next
sampleid_index=samplei_index-12
loop_inicio_real=Mid(inicio,13,sampleid_index)
'---------------fin de rutina con loop_inicio_real

'---------------rutina de loop final real
for contc=12 to 60
detect=Mid(final,contc,8)
if detect=" samples" then
samplef_index=contc
end if
next

samplefd_index=samplef_index-10
loop_final_real=Mid(final,10,samplefd_index)
'----------------fin de rutina con loop_final_real

'msgbox "se han obtenido los siguientes valores reales"&chr(13)&"loop inicial:"&loop_inicio_real&chr(13)&"loop final:"&loop_final_real&chr(13)&"frequencia:"&freq_real&chr(13)&"canales:"&canales_index_d


'rutina calculadora v1.2
if argumento_freq=1 then
call calculadora
else
loop_inicio=loop_inicio_real
loop_final=loop_final_real
end if

private sub calculadora()
loop_iniciodec = ( ( FREQ_CONV * loop_inicio_real ) / freq_real )

loop_finaldec = ( ( FREQ_CONV * loop_final_real ) / freq_real )

  rem Sub-rutina quita decimales
 
  rem -----rutina quita-decimales de loop_iniciodec
   for contc=1 to 20
   detect=Mid(loop_iniciodec,contc,1)
   if detect="," then
   dec_corr_i=contc
   end if
   next
   if not dec_corr_i="" then
   dec_corr_i_index=dec_corr_i-1
   loop_inicio=Mid(loop_iniciodec,1,dec_corr_i_index) + 1
   else
   loop_inicio=loop_iniciodec
   end if
  '-----fin de rutina con loop_inicio

  rem -----rutina quita-decimales de loop_finaldec
   for contc=1 to 30
   detect=Mid(loop_finaldec,contc,1)
   if detect="," then
   dec_corr_i=contc
   end if
   next
   if not dec_corr_i="" then
   dec_corr_i_index=dec_corr_i-1
   loop_final=Mid(loop_finaldec,1,dec_corr_i_index) + 1
   else
   loop_final=loop_finaldec
   end if
  '-----fin de rutina con loop_final

'wscript.echo "la calculadora ha calculado "&loop_iniciodec&" "&loop_finaldec
'msgbox "se ha calculado sin decimales"& Chr(13) &loop_inicio& Chr(13) &loop_final,vbinformation
END SUB

' rutinas de convercion finales !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Objshell.run (vgmstream&" -o "&archivo_tmp&" -l 3 -f 0 "&archivo), 1, true
'wscript.sleep 16000
Objshell.run (ffmpeg&" -y -i "&archivo_tmp&freq_ffmpeg&canales&" "&archivo_conv), 1,true
Objfso.deletefile archivo_tmp
'wscript.sleep 16000
Objshell.run (adxencd&" "&archivo_conv&adx_dir_out&" -lps"&loop_inicio&" -lpe"&loop_final), 1, true
Objfso.deletefile archivo_conv

WScript.quit


private sub rutina_no_loop()
'----------------rutina sin loop----------
Objshell.exec (vgmstream&" -o "&archivo_tmp&" -l 3 -f 0 "&archivo)

Objshell.run (ffmpeg&" -y -i "&archivo_tmp&freq_ffmpeg&canales&" "&archivo_conv), true
'Objfso.deletefile archivo_tmp

Objshell.run (adxencd&" "&archivo_conv&adx_dir_out), true
'Objfso.deletefile archivo_conv
wscript.quit
end sub

aqui los archivos
vgmstream http://hcs64.com/files/vgmstream/vgmstream-r967-test.zip
adxencd http://www.mediafire.com/?8jyit2n5uzj

kapo.damy

bien  he corregido varios errores y la considero la revision final 302
aca el enlace con los archivos
http://www.megaupload.com/?d=WXFA2B1J

arreglos:
indice de corrimiento de decimales
existencia de el archivo final
se cambio ffmpeg por sound exchanger (sox) que es mas flexible
dialogos mejorados
deteccion de frecuencia invalidas (solo numericas)

SI NO VAN A COMENTAR LE PIDO AL MODERADOR QUE ME CIERRE EL TEMA.

yyy el codeee

' VGMstream2ADXenc ver 2.4 rev 302 By por Kapodamy!
' Uso VGMstream2ADXenc.vbs -e [ARCHIVO] -f [FREQUENCIA DE CONVERSION] -s [CARPETA DE SALIDA] -mono

' Convierte los archivos de audio Stream, soportados por el VGMstream al formato ADX de manera automatizada. ideal para ADX con 32khz (menor peso)
' agradecimientos a novlucker, al foro el hacker y al equipo del proyecto SOund eXchange.

' Parametros:
' -e [ARCHIVO] archivo a convertir; debe ser soportado por el vgmstream y NO PUEDE
'              TENER MAS DE 2 CANALES. en caso de que tuviera mas de 2 canales. la conversion
'              sera reducida a 2 canales. si esta presente el parametro "-mono" la reduccion sera a un unico canal.

' -f [FRECUENCIA DE CONVERSION] especifica la frequencia de conversion de los ADX en hertz.
'                               si no se especifica la frequencia de salida sera igual a la de entrada.

' -s [CARPETA DE SALIDA] especifica la carpeta en donde se almacenaran los ADX, en lo posible SIN ESPACIOS.
'                        SE RECOMIENDA NO ESPECIFICAR SUBCARPETAS como por ejemplo "archivos_adx\wii_rips\ost".
'                        de lo contrario usar "COMILLAS". (ESTE PARAMETRO ES OPCIONAL)

' -mono especifica que la salida ADX mono (un canal) y no stereo (dos canales).
'       NOTA:PUEDE CAUSAR ERRORES EN LOS LOOP's DE LOS ADX's. (ESTE PARAMETRO ES OPCIONAL)

'Ejemplos de uso
' VGMstream2ADXenc.vbs -e bgm_stage01.strm -f 32000 -s archivos_adx      convertira el archivo bgm_stage01.strm a bgm_stage01.adx dentro de la carpeta my_adxs\ost\rips con una frequencia de 32000hz.
' VGMstream2ADXenc.vbs -e bgm_stage01.strm -s "my_adxs\ost\rips"         convertira el archivo bgm_stage01.strm a bgm_stage01.adx dentro de la carpeta my_adxs\ost\rips.
' VGMstream2ADXenc.vbs -e bgm_stage01.strm -mono                         convertira el archivo bgm_stage01.strm a bgm_stage01.adx pero en mono.
' VGMstream2ADXenc.vbs -e bgm_stage01.strm                               convertira el archivo bgm_stage01.strm a bgm_stage01.adx sin modificar nada.
'----------------------------------------------------------INICIO DEL SCRIPT--------------------------------------------------------------------------------------------------------------------------

dim detect
dim loop_total
dim exist_lps
dim contc
dim no_loop_index
dim hz_index
dim freq_index
dim samplei_index
dim samplef_index
dim samplefd_index
dim sampleid
dim estado
dim freq_real
dim inicio
dim final
dim loop_inicio_dec
dim loop_final_dec
dim no_loop
dim loop_inicio_real
dim loop_inicio
dim dec_corr_i_index
dim dec_corr_f_index
dim canales_index
dim canales_index_d
dim r
dim i
dim argumento_mono
dim argumento_adx_dir
dim argumento_archivo
dim archivo_nombre_index
dim loop_iniciodec
dim loop_finaldec
dim dec_corr_i
dim dec_corr_f
dim loop_final
dim vgmstream
dim ffmpeg
dim sox
dim adxencd
dim argumentos_index
dim loop_detect
dim frequencia
dim adx_quest
Set objfso = createobject("scripting.filesystemobject")
Set objshell = createobject("wscript.shell")
'----------------rutina de seleccion de argumentos------------------
'                           0     1      2             3               4          5           6
' Uso VGMstream2ADXenc.vbs -e [ARCHIVO] -f [FREQUENCIA DE CONVERSION] -s [CARPETA DE SALIDA] -mono

exist_lps=0 'se predefine como bandera sin loop_inicio y loop_final
argumento_freq=0 'se predefine como bandera freq_real

If WScript.Arguments.count < 2 Then ' rutina de deteccion de parametros
msgbox "Uso VGMstream2ADXenc.vbs -e [ARCHIVO] -f [FREQUENCIA DE CONVERSION] -s [CARPETA DE SALIDA] -mono"&chr(13)&"el parametro minimo es: -e [ARCHIVO]"&chr(13)&"los demas parametros son opcionales",32,"VGMstream2ADXenc - uso incorrecto"
WScript.Quit
else
argumentos_index=WScript.Arguments.count-1
End If
'seleccion de parametros
for i=0 to argumentos_index
select case WScript.Arguments(i)
case "-e"
  r=i+1
  archivo=WScript.Arguments(r)
  if archivo="" then
  msgbox "error en -e. archivo no especificado",16,"VGMstream2ADXenc"
  wscript.quit
  end if

case "-f"
   r=i+1
   argumento_freq=1
   freq_conv=WScript.Arguments(r)
   if freq_conv="" then
   msgbox "error en -f. frequencia no especificada",16,"VGMstream2ADXenc"
   wscript.quit
   end if
case "-s"
  r=i+1
  argumento_adx_dir=1
  adx_dir_out=" "&WScript.Arguments(r)
  if adx_dir_out="" then
  msgbox "error en -s. carpeta de salida no especificada",16,"VGMstream2ADXenc"
  wscript.quit
  objshell.run("cmd /c md "&chr(34)&WScript.Arguments(r)&chr(34)), 0, true
  end if

case "-mono"
  argumento_mono=1
 
end select
next

if isnumeric(freq_conv)="False" then msgbox "error la frequencia especificada "&chr(34)&freq_conv&chr(34)&" no es un numero",16,"VGMstream2ADXenc"


rem rutina de deteccion de errores en parametros
if archivo="" then
msgbox "Error, archivo no especificado"&chr(13)&"parametro minimo: "&WScript.Scriptname&" -e [ARCHIVO]",16,"VGMstream2ADXenc"
wscript.quit
end if


if not argumento_adx_dir=1 then adx_dir_out=""


'-----------sub-rutina obtencion del nombre del archivo
Set archivo_n = objfso.getfile(archivo)

archivo_nombre=archivo_n.name

for i=255 to 0 step -1
detect=mid(archivo_nombre,i,1)
if detect="." then
archivo_nombre_index=i-1
i=0
end if
next
archivo_nombre=mid(archivo_nombre,1,archivo_nombre_index)
'----------fin de sub-rutina con archivo_nombre
archivo_conv=archivo_nombre&".wav"
archivo_tmp=archivo_nombre&"_tmp"&".wav"

' comprobacion de la existencia de un archivo adx con el mismo nombre que el resultado de la conversion
if objfso.FileExists(archivo_nombre&".adx")="True" then
adx_quest = inputbox("El Siguiente Archivo:"&chr(13)&archivo_nombre&".adx"&chr(13)&"Ya existe, ingrese un nuevo nombre o pulse OK"&chr(13)&"para sobrescribir.","VGMstream2ADXenc",archivo_nombre&".adx")
if not adx_quest="" then archivo_nombre=adx_quest
call re_sub_rutina_nombre
end if

private sub re_sub_rutina_nombre()
for i=255 to 0 step -1
detect=mid(archivo_nombre,i,1)
if detect="." then
archivo_nombre_index=i-1
i=0
end if
next
archivo_conv=mid(archivo_nombre,1,archivo_nombre_index)&".wav"
end sub


'--------------fin de rutina de seleccion de argumentos con: archivo archivo_tmp archivo_conv
' freq_conv adx_dir_out argumento_mono
'msgbox archivo&"    "&archivo_nombre&"     "&archivo_conv&"    "&archivo_tmp

directorio_actual = left(WScript.ScriptFullName,(Len(WScript.ScriptFullName))-(len(WScript.ScriptName)))
vgmstream=chr(34)&directorio_actual&"test.exe"&chr(34)' ruta del vgmstream (la aplicacion se llama test.exe)
adxencd=chr(34)&directorio_actual&"adxencd.exe"&chr(34)' ruta del adxencd
sox=chr(34)&"sox.exe"&chr(34)' ruta del SOund eXchange
Set info_reader=objshell.exec(vgmstream&" -m "&archivo)' LECTURA DE DATOS DEL ARCHIVO

estado = info_reader.stdout.readline

if estado="" then
msgbox "error al abrir el archivo,al parecer no es un stream valido",16,"VGMstream2ADXenc"
wscript.quit
end if

freq_real = info_reader.stdout.readline
canales_index=info_reader.stdout.readline
inicio = info_reader.stdout.readline
final = info_reader.stdout.readline


'---------------rutina de frequencia real
for contc=1 to 24
detect=Mid(freq_real,contc,3)
if detect=" Hz" then
hz_index=contc
end if
next

freq_index=hz_index-12
freq_real=Mid(freq_real,13,freq_index)
'---------------fin de rutina con freq_real

'--------------rutina definidora de frequencias y canales de salida
canales_index_d=mid(canales_index,11,255)
loop_detect=Mid(inicio,8,5)

if loop_detect="total" then
exist_lps=0
else
exist_lps=1
end if

select case argumento_freq
case 0
  frequencia=freq_real
case 1
  frequencia=freq_conv
end select
'------------fin de rutina con exist_lps y canales_index_d


'------------rutinas de obtencion de loop inicio real y loop final real
if exist_lps=1 then
'---------------rutina de loop inical real
for contc=12 to 60
detect=Mid(inicio,contc,8)
if detect=" samples" then
samplei_index=contc
end if
next
sampleid_index=samplei_index-12
loop_inicio_real=Mid(inicio,13,sampleid_index)
'---------------fin de rutina con loop_inicio_real

'---------------rutina de loop final real
for contc=12 to 60
detect=Mid(final,contc,8)
if detect=" samples" then
samplef_index=contc
end if
next

samplefd_index=samplef_index-11
loop_final_real=Mid(final,11,samplefd_index)
'----------------fin de rutina con loop_final_real
rem msgbox "se han obtenido los siguientes valores reales"&chr(13)&"loop inicial:"&loop_inicio_real&chr(13)&"loop final:"&loop_final_real&chr(13)&"frequencia:"&freq_real&chr(13)&"canales:"&canales_index_d
END IF
'-----------fin de rutina con loop_inicio_real y loop_final_real



'------------rutina calculadora v1.2
if argumento_freq=exist_lps then
call calculadora
else
loop_inicio=loop_inicio_real
loop_final=loop_final_real
end if

private sub calculadora()
loop_iniciodec = ( ( FREQ_CONV * loop_inicio_real ) / freq_real )

loop_finaldec = ( ( FREQ_CONV * loop_final_real ) / freq_real )

  rem Sub-rutina quita decimales
 
  rem -----rutina quita-decimales de loop_iniciodec
   for contc=1 to 255
   detect=Mid(loop_iniciodec,contc,1)
   if detect="," then
   dec_corr_i=contc
   end if
   next
   if not dec_corr_i="" then
   dec_corr_i_index=dec_corr_i-1
   loop_inicio=Mid(loop_iniciodec,1,dec_corr_i_index) + 1
   else
   loop_inicio=loop_iniciodec
   end if
   '-----fin de rutina con loop_inicio
  rem -----rutina quita-decimales de loop_finaldec
   for contc=1 to 255
   detect=Mid(loop_finaldec,contc,1)
   if detect="," then
   dec_corr_f=contc
   end if
   next
   if not dec_corr_f="" then
   dec_corr_f_index=dec_corr_f-1
   loop_final=Mid(loop_finaldec,1,dec_corr_f_index) + 1
   else
   loop_final=loop_finaldec
   end if
  '-----fin de rutina con loop_final
 
  'wscript.echo "la calculadora ha calculado "&loop_iniciodec&" "&loop_finaldec
rem msgbox "se ha calculado sin decimales"& Chr(13) &loop_inicio& Chr(13) &loop_final,vbinformation
END SUB



' RUTINAS DE CONVERSION FINALES !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Objshell.run (vgmstream&" -o "&archivo_tmp&" -l 3 -f 0 "&archivo), 1, true

if canales_index_d>2 then WScript.echo "ADVERTENCIA:el "&archivo&" posee "&canales_index_d&" canales, para evitar una conversion indeseada verifique el stream"

select case argumento_freq
case 0
  if argumento_mono=1 then
  Objshell.run (sox&" --show-progress -v3 -c"&canales_index_d&" "&archivo_tmp&" -c1 -r"&frequencia&" "&archivo_conv), 1, true
  end if
  objfso.GetFile(archivo_tmp).Name=archivo_conv
 
case 1
  if argumento_mono=1 then
  Objshell.run (sox&" --show-progress -v3 -c"&canales_index_d&" "&archivo_tmp&" -c1 -r"&frequencia&" "&archivo_conv), 1, true
  else
  Objshell.run (sox&" --show-progress -v3 -c"&canales_index_d&" "&archivo_tmp&" -c2 -r"&frequencia&" "&archivo_conv), 1, true
  end if
  end select

Objfso.deletefile archivo_tmp

select case exist_lps
case 0
    Objshell.run (adxencd&" "&archivo_conv&adx_dir_out), 1, true

case 1
  Objshell.run (adxencd&" "&archivo_conv&adx_dir_out&" -lps"&loop_inicio&" -lpe"&loop_final), 1, true
end select
Objfso.deletefile archivo_conv

WScript.quit