mp3 tag

14/09/2009 - 16:52 por fredy | Informe spam
buenos dias.
quiero saber con vba que campos puedo obtener de un archivo binario mp3 tag.
la idea es listar los datos de mis mp3 y editarlos en una tabla de excel
para luego editar el archivo binario..

muchas gracias

coloco un ejemplo de como extraigo los datos, pero necesito saber el listado
total de campos que puedo obtener ya que aqui solo figuran unos cuantos
campos.. (siete)

Option Explicit


'Udt con la info del Tag

Type T_Tag_Mp3
Header As String * 3
SongTitle As String * 30
Artist As String * 30
Album As String * 30
Year As String * 4
Comment As String * 30
Genre As Byte
End Type

Public Function Extraer_Tag_Mp3(Path_MP3 As String) As T_Tag_Mp3

On Error GoTo errSub

Dim archivo As Long

If Dir(Path_MP3) = "" Then Exit Function

archivo = FreeFile
'Abrimos el archivo Mp3 en modo binario de lectura
Open Path_MP3 For Binary Access Read As archivo
'Leemos la posición y almacenamos los datos en la función
Get archivo, LOF(1) - 127, Extraer_Tag_Mp3

'Cerramos el Archivo
Close archivo

Exit Function

'Error

errSub:

Close archivo
MsgBox Err.Description, vbCritical, " Ocurrió un error al leer el MP3 "
End Function

Preguntas similare

Leer las respuestas

#6 fredy
23/10/2009 - 00:26 | Informe spam
Hector
el error me sale al definir los parametros de la funcion:
SetID3TagDirect(RUTAMP3, Cells(4, 11), Cells(4, 10), Cells(4, 18), "nada
nadita", "2500", Cells(4, 13))

sale en rojo y un mensaje que dice, "error de compilacion se esperaba:="

eso me sale en la rutina:
Sub cambiar()
Dim RUTA, ARCHIVO, RUTAMP3, EDITAR
RUTA = Cells(1, 1)
ARCHIVO = Cells(4, 1)
RUTAMP3 = RUTA & "/" & ARCHIVO

SetID3Tagdirect(RUTAMP3, Cells(4, 11), Cells(4, 10), Cells(4, 18), "nada nadita", "2500", Cells(4, 13))
End Sub



ni siquiera alcanza allegar a la funcion... una pregunta seria... estoy
utilizando mal la funcion, o ingresando mal los parametros?

muchas gracias

"Héctor Miguel" wrote:

hola, fredy !

lo unico que veo como posible causa de errores (que no comentas cuales son exactamente los que obtienes)
es que defines un tipo personalizado con un nombre que luego cambias en el codigo (por lo que no existe el que usas)

lo defines aqui:
> Public Type ID3Tag

pero lo llamas de la siguiente forma:
> Tag.Header = "TAG"
> Tag.Artist = Artist_30
> Tag.SongTitle = SongTitle_30
> Tag.Album = Album_30
> Tag.Comment = Comment_30
> Tag.Year = Year_4
> Tag.Genre = Genre_B255

entonces... o se llama ID3Tag o se llama Tag (???)

saludos,
hector.

__ OP __
> ... la idea es editar el archivo binario... ya que en la tabla de excel hice los cambios que deseaba
> .. pero como hago esto... estuve navegand un rato y encontr esta funcion.. pero no se como utilizarla...
> intente de la siguiente manera pero no funcionO...=)
>
> Sub cambiar()
> Dim RUTA, ARCHIVO, RUTAMP3, EDITAR
> RUTA = Cells(1, 1)
> ARCHIVO = Cells(4, 1)
> RUTAMP3 = RUTA & "/" & ARCHIVO
>
> SetID3Tagdirect(RUTAMP3, Cells(4, 11), Cells(4, 10), Cells(4, 18), "nada nadita", "2500", Cells(4, 13))
> End Sub
>
> la funcion es esta:
>
> Public Type ID3Tag
> Header As String * 3
> SongTitle As String * 30
> Artist As String * 30
> Album As String * 30
> Year As String * 4
> Comment As String * 30
> Genre As Byte
> End Type
>
> Public Function SetID3TagDirect(ByVal FileName As String, _
> ByVal Artist_30 As String, ByVal SongTitle_30 As String, _
> ByVal Album_30 As String, ByVal Comment_30 As String, _
> ByVal Year_4 As String, ByVal Genre_B255 As Byte) As Boolean
> Dim Tag As ID3Tag
> On Error GoTo SetID3TagDirectError
> Dim FileNum As Long
> If Dir(FileName) = "" Then
> SetID3TagDirect = False
> Exit Function
> End If
> Tag.Header = "TAG"
> Tag.Artist = Artist_30
> Tag.SongTitle = SongTitle_30
> Tag.Album = Album_30
> Tag.Comment = Comment_30
> Tag.Year = Year_4
> Tag.Genre = Genre_B255
> FileNum = FreeFile
> Open FileName For Binary As FileNum
> Put FileNum, LOF(1) - 127, Tag
> Close FileNum
> SetID3TagDirect = True
> Exit Function
> SetID3TagDirectError:
> Close FileNum
> SetID3TagDirect = False
> End Function


.

Respuesta Responder a este mensaje
#7 Héctor Miguel
23/10/2009 - 01:18 | Informe spam
hola, fredy ! (ahora que lo mencionas...) suceden las dos eventualidades

__ 1 __
el error me sale al definir los parametros de la funcion:
SetID3TagDirect(RUTAMP3, Cells(4, 11), Cells(4, 10), Cells(4, 18), "nada nadita", "2500", Cells(4, 13))
sale en rojo y un mensaje que dice, "error de compilacion se esperaba:=" (...)


__ 2 __
ni siquiera alcanza allegar a la funcion... una pregunta seria... estoy utilizando mal la funcion, o ingresando mal los parametros?



1) al hacer llamadas a una funcion de vba, necesitas que sean asignadas a algun objeto o variable (p.e.)
en lugar de llamarla asi:
SetID3TagDirect(RUTAMP3, Cells(4, 11), Cells(4, 10), Cells(4, 18), "nada nadita", "2500", Cells(4, 13))
prueba con alguna/s de la/s siguiente formas:

op1: Tmp = SetID3TagDirect(RUTAMP3, Cells(4, 11), Cells(4, 10), Cells(4, 18), "nada nadita", "2500", Cells(4, 13))
op2: Call SetID3TagDirect(RUTAMP3, Cells(4, 11), Cells(4, 10), Cells(4, 18), "nada nadita", "2500", Cells(4, 13))
op3: SetID3TagDirect RUTAMP3, Cells(4, 11), Cells(4, 10), Cells(4, 18), "nada nadita", "2500", Cells(4, 13)

2) de todas formas, comprueba/corrige/... cual es el nombre "correcto" del tipo de datos definido por el usuario:

lo defines aqui:
Public Type ID3Tag



pero lo llamas de la siguiente forma:
Tag.Header = "TAG"
Tag.Artist = Artist_30
Tag.SongTitle = SongTitle_30
Tag.Album = Album_30
Tag.Comment = Comment_30
Tag.Year = Year_4
Tag.Genre = Genre_B255



entonces... o se llama ID3Tag o se llama Tag (???)

saludos,
hector.
Respuesta Responder a este mensaje
#8 fredy
23/10/2009 - 04:51 | Informe spam
Hola Hector...

ya realice los cambios que sugeriste.. y ya pasa sin errores pero no veo los
resultados de la edicion de atributos.. no veo que cambien..

este es el codigo como quedo:
'XXXXXXXXXXXXXXXXXXXXXX
Option Explicit

Public Type Tag 'ID3Tag
Header As String * 3
SongTitle As String * 30
Artist As String * 30
Album As String * 30
Year As String * 4
Comment As String * 30
Genre As String
End Type
Public Function SetTagDirect(ByVal FileName As String, _
ByVal Artist_30 As String, ByVal SongTitle_30 As String, _
ByVal Album_30 As String, ByVal Comment_30 As String, _
ByVal Year_4 As String, ByVal Genre_B255 As String) As Boolean
Dim Tag As Tag

On Error GoTo SetTagDirectError

Dim FileNum As Long

If Dir(FileName) = "" Then
SetTagDirect = False
Exit Function
End If

Tag.Header = "TAG"
Tag.Artist = Artist_30
Tag.SongTitle = SongTitle_30
Tag.Album = Album_30
Tag.Comment = Comment_30
Tag.Year = Year_4
Tag.Genre = Genre_B255

FileNum = FreeFile

Open FileName For Binary As FileNum
Put FileNum, LOF(1) - 150, Tag
Close FileNum

SetTagDirect = True

Exit Function

SetTagDirectError:
Close FileNum
SetTagDirect = False
End Function


Sub cambiar()
Dim RUTA, ARCHIVO, RUTAMP3, EDITAR
RUTA = Cells(1, 1)
ARCHIVO = Cells(4, 1)
RUTAMP3 = RUTA & "\" & ARCHIVO
Call SetID3TagDirect(RUTAMP3, Cells(4, 11), Cells(4, 10), Cells(4, 18),
"nada nadita", "2500", "vallenatero")
End Sub

'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

ahora que sera?
muchas gracias

"Héctor Miguel" wrote:

hola, fredy ! (ahora que lo mencionas...) suceden las dos eventualidades

__ 1 __
> el error me sale al definir los parametros de la funcion:
> SetID3TagDirect(RUTAMP3, Cells(4, 11), Cells(4, 10), Cells(4, 18), "nada nadita", "2500", Cells(4, 13))
> sale en rojo y un mensaje que dice, "error de compilacion se esperaba:=" (...)
__ 2 __
> ni siquiera alcanza allegar a la funcion... una pregunta seria... estoy utilizando mal la funcion, o ingresando mal los parametros?

1) al hacer llamadas a una funcion de vba, necesitas que sean asignadas a algun objeto o variable (p.e.)
en lugar de llamarla asi:
SetID3TagDirect(RUTAMP3, Cells(4, 11), Cells(4, 10), Cells(4, 18), "nada nadita", "2500", Cells(4, 13))
prueba con alguna/s de la/s siguiente formas:

op1: Tmp = SetID3TagDirect(RUTAMP3, Cells(4, 11), Cells(4, 10), Cells(4, 18), "nada nadita", "2500", Cells(4, 13))
op2: Call SetID3TagDirect(RUTAMP3, Cells(4, 11), Cells(4, 10), Cells(4, 18), "nada nadita", "2500", Cells(4, 13))
op3: SetID3TagDirect RUTAMP3, Cells(4, 11), Cells(4, 10), Cells(4, 18), "nada nadita", "2500", Cells(4, 13)

2) de todas formas, comprueba/corrige/... cual es el nombre "correcto" del tipo de datos definido por el usuario:

lo defines aqui:
> Public Type ID3Tag

pero lo llamas de la siguiente forma:
> Tag.Header = "TAG"
> Tag.Artist = Artist_30
> Tag.SongTitle = SongTitle_30
> Tag.Album = Album_30
> Tag.Comment = Comment_30
> Tag.Year = Year_4
> Tag.Genre = Genre_B255

entonces... o se llama ID3Tag o se llama Tag (???)

saludos,
hector.


.

Respuesta Responder a este mensaje
#9 Héctor Miguel
23/10/2009 - 05:55 | Informe spam
hola, fredy !

ya realice los cambios que sugeriste y ya pasa sin errores pero no veo los resultados de la edicion de atributos, no veo que cambien...



en el codigo que expusiste originalmente (el que encontraste navegando por la red) contenia una instruccion "especifica"...
Put FileNum, LOF(1) - 127, Tag



que en el codigo (modificado) que expones en esta consulta, lo cambiaste a...
Put FileNum, LOF(1) - 150, Tag



PERO... la instruccion original "busca" en el archivo un "largo" exacto de 128 bytes (- 127)
que abriendo archivos a nivel I/O (entrada/salida de dispositivos) es como "borrar" el final del archivo y escribirle un "nuevo final"

saludos,
hector.

__ resto de OP __
este es el codigo como quedo:
Public Type Tag 'ID3Tag
Header As String * 3
SongTitle As String * 30
Artist As String * 30
Album As String * 30
Year As String * 4
Comment As String * 30
Genre As String
End Type
Public Function SetTagDirect(ByVal FileName As String, _
ByVal Artist_30 As String, ByVal SongTitle_30 As String, _
ByVal Album_30 As String, ByVal Comment_30 As String, _
ByVal Year_4 As String, ByVal Genre_B255 As String) As Boolean
Dim Tag As Tag

On Error GoTo SetTagDirectError
Dim FileNum As Long
If Dir(FileName) = "" Then
SetTagDirect = False
Exit Function
End If
Tag.Header = "TAG"
Tag.Artist = Artist_30
Tag.SongTitle = SongTitle_30
Tag.Album = Album_30
Tag.Comment = Comment_30
Tag.Year = Year_4
Tag.Genre = Genre_B255
FileNum = FreeFile
Open FileName For Binary As FileNum
Put FileNum, LOF(1) - 150, Tag
Close FileNum
SetTagDirect = True
Exit Function
SetTagDirectError:
Close FileNum
SetTagDirect = False
End Function

Sub cambiar()
Dim RUTA, ARCHIVO, RUTAMP3, EDITAR
RUTA = Cells(1, 1)
ARCHIVO = Cells(4, 1)
RUTAMP3 = RUTA & "\" & ARCHIVO
Call SetID3TagDirect(RUTAMP3, Cells(4, 11), Cells(4, 10), Cells(4, 18), "nada nadita", "2500", "vallenatero")
End Sub

ahora que sera?
Respuesta Responder a este mensaje
#10 Héctor Miguel
23/10/2009 - 06:03 | Informe spam
hola (de nuevo), fredy ! (informacion de complemento -por si las dudas-)

creo que existe otra (posible) incongruencia en los codigos...

cuando se abre el archivo (I/O binario) se le nombra...
Dim FileNum As Long



y se establece su referencia como...
Open FileName For Binary As FileNum



PERO... cuando se (re)escribe el nuevo final, se utiliza...
Put FileNum, LOF(1) - 127, Tag



cabria la posibilidad de que el archivo abierto (I/O) con el indice 1 -> LOF(1)
se cruzara con otros archivos abiertos por cualquier otra aplicacion (temporalmente ?) en el sistema (???)

prueba tambien cambiando a la referencia especifica del archivo instanciado...
Put FileNum, LOF(FileName) - 127, Tag



saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida