elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [BATCH] Randomizar listas m3u
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [BATCH] Randomizar listas m3u  (Leído 8,528 veces)
morgothic

Desconectado Desconectado

Mensajes: 6


Ver Perfil
[BATCH] Randomizar listas m3u
« en: 14 Octubre 2012, 17:16 pm »

Hola! Es la primera vez que escribo en el foro, así que saludos a tod@s!

Os pido ayuda a vosotros dado que no tengo idea de programación :$

Os expongo brevemente el caso. Desde hace tiempo juego a Guild Wars 2 y en éste la música llega a ser bastante repetitiva. Existe la opción de crear hasta 8 listas de reproducción diferentes, cada una para una situación (Ambiente, batalla, noche, etc). Hasta ahí todo bien, lo que ocurre es que el juego no te randomiza las listas, simplemente las reproduce una y otra vez desde el principio cada vez que accedes al juego.

Tras mucho investigar, hacer pruebas y tal, la única opción que se me ocurrió fue añadir algún código al .m3u que randomizara directamente los temas sin necesidad de marcar "Shuffle" en los reproductores, pero me ha sido imposible lograrlo, quizá no da esa opción el m3u...

Consultando por el foro ví un post de EleKtro H@cker en el cual comentaba algo sobre Randomizar lineas en un txt:

Código
  1. @Echo OFF
  2. Setlocal enabledelayedexpansion
  3.  
  4. Set Carpeta=%~n0
  5.  
  6. Echo #EXTM3U>"%Temp%\Lista Winamp.tmp"
  7. For /F "Tokens=*" %%$ in ('Dir /B /S "%CARPETA%" ^| Findstr /R ".aif .flac .m4a .mid .mp3 .ogg .wav .wma"') do (Echo  !Random!!Random!!Random!;%%$>>"%Temp%\Lista Winamp.tmp")
  8.  
  9. Echo #EXTM3U>"%Temp%\Lista Winamp.m3u"
  10. For /F "Tokens=2* Delims=;" %%a in ('Type "%Temp%\Lista Winamp.tmp" ^| Sort ') do (Echo  %%a>>"%Temp%\Lista Winamp.m3u")
  11. Start /B C:"\Program Files (x86)\Winamp\winamp.exe" "%Temp%\Lista Winamp.m3u"
  12.  

Aún no estoy seguro si debería investigar por este camino, si me podría funcionar... ¿Creéis que es posible hacer algun ejecutable para arrancarlo antes del juego y que modifique las listas rápida y facilmente?

Gracias a todos y disculpad mi ignorancia.


« Última modificación: 14 Octubre 2012, 18:07 pm por EleKtro H@cker » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.821



Ver Perfil
Re: Randomizar listas m3u
« Respuesta #1 en: 14 Octubre 2012, 18:07 pm »

Hola de nuevo xD

Hombre, ese código lo que hace es listar todos los archivos de música de un directorio, y añadirlos en un m3u (randomizando los archivos en las lineas), y creo que lo que tú quieres es desorganizar las lineas que ya contiene un archivo m3u, así que habría que hacerle algún pequeño retoque:

CORREGIDO:
Código:
@Echo OFF
Title Randomizador de listas de reproduccion M3U (by Elektro H@cker^)
 
PUSHD "C:\CARPETA DE LAS LISTAS"
 
Echo [ Procesando listas... ] | MORE
FOR /R %%@ IN (*.M3U) DO (
Echo [+] %%~nx@
Echo #EXTM3U>"%Temp%\%%~n@.tmp"
Echo #EXTM3U>"%Temp%\%%~n@.m3u"
FOR /F "TOKENS=*" %%# IN ('TYPE "%%@" ^| FINDSTR /V /I "#EXTM3U #EXTINF"') DO (
CALL ECHO %%Random%%%%Random%%%%Random%%;%%#>>"%Temp%\%%~n@.tmp")
For /F "Tokens=2* Delims=;" %%a in ('Type "%Temp%\%%~n@.tmp" ^| Sort') do (Echo %%a>>"%Temp%\%%~n@.m3u")
(Move /Y "%Temp%\%%~n@.m3u" "%%@" >NUL && (Echo OK!) || (Echo ERROR... & Pause)) | MORE
)

REM Con este comando ejecutas el juego directamente...
REM Start /B /D "C:\Carpeta del Guild Wars 2\" "guildwars2.exe"
 
PAUSE&EXIT



EDITO: No necesitas convertirlo a EXE ni nada, ejecuta el bat y el bat ya se encarga de ejecutar luego el juego. puedes crear un acceso directo del bat al escritorio para ponerle un icono bonito como el del guild wars...

Saludos


« Última modificación: 14 Octubre 2012, 18:39 pm por EleKtro H@cker » En línea

morgothic

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: [BATCH] Randomizar listas m3u
« Respuesta #2 en: 14 Octubre 2012, 18:38 pm »

Hola! He editado el código para ponerle las rutas a carpetas y tal:

Código:
@Echo OFF
Title Randomizador de listas de reproduccion M3U (by Elektro H@cker^)
 
PUSHD "C:\Guild Wars 2\Music"
 
Echo [ Procesando listas... ] | MORE
FOR /R %%@ IN (*.M3U) DO (
Echo [+] %%~nx@
Echo #EXTM3U>"%Temp%\%%~n@.tmp"
Echo #EXTM3U>"%Temp%\%%~n@.m3u"
FOR /F "TOKENS=*" %%# IN ('TYPE "%%@" ^| FINDSTR /V /I "#EXTM3U #EXTINF"') DO (
CALL ECHO %%Random%%%%Random%%%%Random%%!!%%#>>"%Temp%\%%~n@.tmp")
For /F "Tokens=2* Delims=;" %%a in ('Type "%Temp%\%%~n@.tmp" ^| Sort') do (Echo %%a>>"%Temp%\%%~n@.m3u")
(Move /Y "%Temp%\%%~n@.m3u" "%%@" >NUL && (Echo OK!) || (Echo ERROR... & Pause)) | MORE
)

REM Con este comando ejecutas el juego directamente...
REM Start /B /D "C:\Guild Wars 2\" "Gw2.exe"
 
PAUSE&EXIT

Al ejecutarlo me borra el contenido de todas las listas, me las devuelve vacías. Esto es lo que vería en una lista normal en el bloc de notas:

Código:
#EXTM3U
#EXTINF:141,Two Steps From Hell (310 985-1 - From The Abyss
C:\Guild Wars 2\Music\MainMenu\1-06 From The Abyss.mp3
#EXTINF:156,Two Steps From Hell (310 985-1 - Born Of Ash
C:\Guild Wars 2\Music\MainMenu\1-13 Born Of Ash.mp3
#EXTINF:208,Midnight Syndicate - Living Walls
C:\Guild Wars 2\Music\MainMenu\22 - Living Walls.mp3

Y al ejecutar el .bat, tan sólo me devuelve una sóla linea con #EXTM3U

La música la tengo en carpetas ordenadas y todas las listas a parte en una única carpeta, te lo digo como info, pero no creo que tenga nada que ver. Qué me puede estar fallando?

Gracias! Aaag! Casi está!! jajaja (llevo 3 días buscando una solución para esto y ahora siento que está a punto! muy muy agradecido EleKtro H@cker)
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.821



Ver Perfil
Re: [BATCH] Randomizar listas m3u
« Respuesta #3 en: 14 Octubre 2012, 18:42 pm »

Hola,

Al pegar el código en el foro con la etiqueta de BATCH me ha insertado dos caracteres de exclamación !!
Código
  1. %%Random%%!!%%#
Es un error del plugin del foro, ya lo he puesto sin etiquetas, ahora puedes copiarlo que funciona bien.

saludos
En línea

morgothic

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: [BATCH] Randomizar listas m3u
« Respuesta #4 en: 14 Octubre 2012, 18:55 pm »

BRAVO!!!!!!!! 1k gracias! Funciona a la perfección! Las listas cambian perfectamente, pero no ejecuta el gw2.exe. Cuando lo ejecuto, me indica que no encuentra la ruta o algo así:

El nombre de archivo, directorio o etiqueta del volumen no es válido

Y la ruta que pongo está correcta, es la del juego:

Código:
REM Start /B /D "C:\Guild Wars 2\" "Gw2.exe"
??????

Bueno, de todas maneras, ya me has ayudado infinitamente, buscaré algo de info del comando REM he intentaré hacerlo yo.

Muchas gracias por todo y nada, empezaré a tocar un poco de python y ruby a ver que tal ;)
En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: [BATCH] Randomizar listas m3u
« Respuesta #5 en: 14 Octubre 2012, 18:57 pm »

REM se utiliza para comentar código, debes de quitarlo si quieres que se ejecute el start :P

Saludos
En línea

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
morgothic

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: [BATCH] Randomizar listas m3u
« Respuesta #6 en: 14 Octubre 2012, 19:01 pm »

XDD ok ................  :¬¬ (i'm so nooooob)
En línea

morgothic

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: [BATCH] Randomizar listas m3u
« Respuesta #7 en: 14 Octubre 2012, 20:25 pm »

Una cosa más...

No reparé en una cosa!

Con respecto al randomizador: Rula correctamente en cuanto al winamp, media player, etc respecta, pero el juego no lee esos m3u. Me explico:

Así se ve en el bloc de notas antes de ejecutar el bat:
Código:
#EXTM3U
#EXTINF:0,1-02 Super Strength 2.mp3
MainMenu\1-02 Super Strength 2.mp3

#EXTINF:0,1-06 From The Abyss.mp3
MainMenu\1-06 From The Abyss.mp3

#EXTINF:0,1-11 The Summoning orc.mp3
MainMenu\1-11 The Summoning orc.mp3

#EXTINF:0,1-13 Born Of Ash.mp3
MainMenu.... etc etc etc

Y así tras ejecutarlo:
Código:
#EXTM3U
MainMenu\1-13 Born Of Ash.mp3
MainMenu\12 Fill My Heart (No Choir).mp3
MainMenu\1-02 Super Strength 2.mp3
MainMenu\1-11 The Su... etc etc etc

¿Cómo puedo conseguir que el ejecutable me escriba también los #EXTINF? Sería algo así como "#EXTINF:0," donde el 0 representa la longitud de la pista en segundos (0 = toda la pista) y el nombre de la pista
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.821



Ver Perfil
Re: [BATCH] Randomizar listas m3u
« Respuesta #8 en: 14 Octubre 2012, 22:10 pm »

Entonces prueba así:

Código:
@Echo OFF
Title Randomizador de listas de reproduccion M3U (by Elektro H@cker^)

Echo [ Procesando listas... ] | MORE
FOR /R %%@ IN (*.M3U) DO (
Echo [+] %%~nx@
Echo #EXTM3U|MORE>"%Temp%\%%~n@.tmp"
Echo #EXTM3U|MORE>"%Temp%\%%~n@.m3u"
FOR /F "TOKENS=*" %%# IN ('TYPE "%%@" ^| FINDSTR /V /I "#EXTM3U MAINMENU"') DO (
CALL ECHO %%Random%%%%Random%%%%Random%%;%%#>>"%Temp%\%%~n@.tmp")
For /F "Tokens=2* Delims=;" %%a in ('Type "%Temp%\%%~n@.tmp" ^| Sort') do (
Echo %%a>>"%Temp%\%%~n@.m3u"
For /F "Tokens=2* Delims=," %%A in ('echo %%a') do (Echo MainMenu\%%A|MORE>>"%Temp%\%%~n@.m3u"))
(Move /Y "%Temp%\%%~n@.m3u" "%%@" >NUL && (Echo OK!) || (Echo ERROR... & Pause)) | MORE
)
Start /B /D "C:\Guild Wars 2\" "Gw2.exe"
PAUSE&EXIT


output:
Código:
#EXTM3U

#EXTINF:0,1-13 Born Of Ash.mp3
MainMenu\1-13 Born Of Ash.mp3

#EXTINF:0,1-02 Super Strength 2.mp3
MainMenu\1-02 Super Strength 2.mp3

#EXTINF:0,1-11 The Summoning orc.mp3
MainMenu\1-11 The Summoning orc.mp3

#EXTINF:0,1-06 From The Abyss.mp3
MainMenu\1-06 From The Abyss.mp3
En línea

morgothic

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: [BATCH] Randomizar listas m3u
« Respuesta #9 en: 15 Octubre 2012, 13:40 pm »

Buenos días a todos!

Para finalizar con este post, pudiendo darlo por resuelto anotaré aquí todo el código fuente. La idea de que con esa última formula que anotó EleKtro H@cker una de las playlist quedase perfecta me llevó a copiarla y cambiar el nombre también para las otras carpetas. Quizá haya una manera mas sencilla de programarlo todo, pero esta sin duda funciona a la perfección.

Código:
@Echo OFF
color 0c
Title Randomizador de listas de reproduccion M3U (by Elektro H@cker^)

PUSHD "C:\Guild Wars 2\Music"

Echo [ Procesando listas... ] | MORE
FOR /D %%@ IN (MAINMENU.M3U) DO (
Echo [+] %%~nx@
Echo #EXTM3U|MORE>"%Temp%\%%~n@.tmp"
Echo #EXTM3U|MORE>"%Temp%\%%~n@.m3u"
FOR /F "TOKENS=*" %%# IN ('TYPE "%%@" ^| FINDSTR /V /I "#EXTM3U MAINMENU"') DO (
CALL ECHO %%Random%%%%Random%%%%Random%%;%%#>>"%Temp%\%%~n@.tmp")
For /F "Tokens=2* Delims=;" %%a in ('Type "%Temp%\%%~n@.tmp" ^| Sort') do (
Echo %%a>>"%Temp%\%%~n@.m3u"
For /F "Tokens=2* Delims=," %%A in ('echo %%a') do (Echo MainMenu\%%A|MORE>>"%Temp%\%%~n@.m3u"))
(Move /Y "%Temp%\%%~n@.m3u" "%%@" >NUL && (Echo OK!) || (Echo ERROR... & Pause)) | MORE
)
FOR /D %%@ IN (AMBIENT.M3U) DO (
Echo [+] %%~nx@
Echo #EXTM3U|MORE>"%Temp%\%%~n@.tmp"
Echo #EXTM3U|MORE>"%Temp%\%%~n@.m3u"
FOR /F "TOKENS=*" %%# IN ('TYPE "%%@" ^| FINDSTR /V /I "#EXTM3U AMBIENT"') DO (
CALL ECHO %%Random%%%%Random%%%%Random%%;%%#>>"%Temp%\%%~n@.tmp")
For /F "Tokens=2* Delims=;" %%a in ('Type "%Temp%\%%~n@.tmp" ^| Sort') do (
Echo %%a>>"%Temp%\%%~n@.m3u"
For /F "Tokens=2* Delims=," %%A in ('echo %%a') do (Echo Ambient\%%A|MORE>>"%Temp%\%%~n@.m3u"))
(Move /Y "%Temp%\%%~n@.m3u" "%%@" >NUL && (Echo OK!) || (Echo ERROR... & Pause)) | MORE
)
FOR /D %%@ IN (BATTLE.M3U) DO (
Echo [+] %%~nx@
Echo #EXTM3U|MORE>"%Temp%\%%~n@.tmp"
Echo #EXTM3U|MORE>"%Temp%\%%~n@.m3u"
FOR /F "TOKENS=*" %%# IN ('TYPE "%%@" ^| FINDSTR /V /I "#EXTM3U BATTLE"') DO (
CALL ECHO %%Random%%%%Random%%%%Random%%;%%#>>"%Temp%\%%~n@.tmp")
For /F "Tokens=2* Delims=;" %%a in ('Type "%Temp%\%%~n@.tmp" ^| Sort') do (
Echo %%a>>"%Temp%\%%~n@.m3u"
For /F "Tokens=2* Delims=," %%A in ('echo %%a') do (Echo BATTLE\%%A|MORE>>"%Temp%\%%~n@.m3u"))
(Move /Y "%Temp%\%%~n@.m3u" "%%@" >NUL && (Echo OK!) || (Echo ERROR... & Pause)) | MORE
)
FOR /D %%@ IN (BOSSBATTLE.M3U) DO (
Echo [+] %%~nx@
Echo #EXTM3U|MORE>"%Temp%\%%~n@.tmp"
Echo #EXTM3U|MORE>"%Temp%\%%~n@.m3u"
FOR /F "TOKENS=*" %%# IN ('TYPE "%%@" ^| FINDSTR /V /I "#EXTM3U BOSSBATTLE"') DO (
CALL ECHO %%Random%%%%Random%%%%Random%%;%%#>>"%Temp%\%%~n@.tmp")
For /F "Tokens=2* Delims=;" %%a in ('Type "%Temp%\%%~n@.tmp" ^| Sort') do (
Echo %%a>>"%Temp%\%%~n@.m3u"
For /F "Tokens=2* Delims=," %%A in ('echo %%a') do (Echo BOSSBATTLE\%%A|MORE>>"%Temp%\%%~n@.m3u"))
(Move /Y "%Temp%\%%~n@.m3u" "%%@" >NUL && (Echo OK!) || (Echo ERROR... & Pause)) | MORE
)
FOR /D %%@ IN (CITY.M3U) DO (
Echo [+] %%~nx@
Echo #EXTM3U|MORE>"%Temp%\%%~n@.tmp"
Echo #EXTM3U|MORE>"%Temp%\%%~n@.m3u"
FOR /F "TOKENS=*" %%# IN ('TYPE "%%@" ^| FINDSTR /V /I "#EXTM3U CITY"') DO (
CALL ECHO %%Random%%%%Random%%%%Random%%;%%#>>"%Temp%\%%~n@.tmp")
For /F "Tokens=2* Delims=;" %%a in ('Type "%Temp%\%%~n@.tmp" ^| Sort') do (
Echo %%a>>"%Temp%\%%~n@.m3u"
For /F "Tokens=2* Delims=," %%A in ('echo %%a') do (Echo CITY\%%A|MORE>>"%Temp%\%%~n@.m3u"))
(Move /Y "%Temp%\%%~n@.m3u" "%%@" >NUL && (Echo OK!) || (Echo ERROR... & Pause)) | MORE
)
FOR /D %%@ IN (CRAFTING.M3U) DO (
Echo [+] %%~nx@
Echo #EXTM3U|MORE>"%Temp%\%%~n@.tmp"
Echo #EXTM3U|MORE>"%Temp%\%%~n@.m3u"
FOR /F "TOKENS=*" %%# IN ('TYPE "%%@" ^| FINDSTR /V /I "#EXTM3U CRAFTING"') DO (
CALL ECHO %%Random%%%%Random%%%%Random%%;%%#>>"%Temp%\%%~n@.tmp")
For /F "Tokens=2* Delims=;" %%a in ('Type "%Temp%\%%~n@.tmp" ^| Sort') do (
Echo %%a>>"%Temp%\%%~n@.m3u"
For /F "Tokens=2* Delims=," %%A in ('echo %%a') do (Echo CRAFTING\%%A|MORE>>"%Temp%\%%~n@.m3u"))
(Move /Y "%Temp%\%%~n@.m3u" "%%@" >NUL && (Echo OK!) || (Echo ERROR... & Pause)) | MORE
)
FOR /D %%@ IN (NIGHTTIME.M3U) DO (
Echo [+] %%~nx@
Echo #EXTM3U|MORE>"%Temp%\%%~n@.tmp"
Echo #EXTM3U|MORE>"%Temp%\%%~n@.m3u"
FOR /F "TOKENS=*" %%# IN ('TYPE "%%@" ^| FINDSTR /V /I "#EXTM3U NIGHTTIME"') DO (
CALL ECHO %%Random%%%%Random%%%%Random%%;%%#>>"%Temp%\%%~n@.tmp")
For /F "Tokens=2* Delims=;" %%a in ('Type "%Temp%\%%~n@.tmp" ^| Sort') do (
Echo %%a>>"%Temp%\%%~n@.m3u"
For /F "Tokens=2* Delims=," %%A in ('echo %%a') do (Echo NIGHTTIME\%%A|MORE>>"%Temp%\%%~n@.m3u"))
(Move /Y "%Temp%\%%~n@.m3u" "%%@" >NUL && (Echo OK!) || (Echo ERROR... & Pause)) | MORE
)
FOR /D %%@ IN (UNDERWATER.M3U) DO (
Echo [+] %%~nx@
Echo #EXTM3U|MORE>"%Temp%\%%~n@.tmp"
Echo #EXTM3U|MORE>"%Temp%\%%~n@.m3u"
FOR /F "TOKENS=*" %%# IN ('TYPE "%%@" ^| FINDSTR /V /I "#EXTM3U UNDERWATER"') DO (
CALL ECHO %%Random%%%%Random%%%%Random%%;%%#>>"%Temp%\%%~n@.tmp")
For /F "Tokens=2* Delims=;" %%a in ('Type "%Temp%\%%~n@.tmp" ^| Sort') do (
Echo %%a>>"%Temp%\%%~n@.m3u"
For /F "Tokens=2* Delims=," %%A in ('echo %%a') do (Echo UNDERWATER\%%A|MORE>>"%Temp%\%%~n@.m3u"))
(Move /Y "%Temp%\%%~n@.m3u" "%%@" >NUL && (Echo OK!) || (Echo ERROR... & Pause)) | MORE
)

call "C:\Guild Wars 2\Gw2.exe"

exit

Un poco largo todo, no? Pero funciona perfectamente. De nuevo gracias a todos por ayudarme y un saludo!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines