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

#1 Héctor Miguel
15/09/2009 - 01:03 | Informe spam
hola, fredy !

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...



aqui encuentras otros mecanismos y ejemplos:

Reading info from mp3 files using Shell32: -> http://tinyurl.com/mzumgb

read info mp3 file: -> http://tinyurl.com/l9r2bh

Shell32: -> http://tinyurl.com/nmvw47

si cualquier duda... comentas ?
saludos,
hector.

__ OP __
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)

'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 posicion y almacenamos los datos en la funcion
Get archivo, LOF(1) - 127, Extraer_Tag_Mp3
'Cerramos el Archivo
Close archivo
Exit Function
'Error
errSub:
Close archivo
MsgBox Err.Description, vbCritical, " Ocurrio un error al leer el MP3 "
End Function
Respuesta Responder a este mensaje
#2 Héctor Miguel
15/09/2009 - 04:49 | Informe spam
hola (de nuevo), fredy !

si le tienes "flojerilla" a leer post para tomar notas (?) prueba con una macro +/- como la siguiente:

ten lista una hoja en blanco y escribe la ruta donde se almacenan esos archivos en la celda [A1]
(p.e. c:\documents and settings\<usuario>\mis documentos\mi musica )

si no quieres condicionar el tipo (o no lo conoces con exactitud) quita el segundo If -instr- (y su End If obviamente)

saludos,
hector.

Sub Info_de_musicales()
Dim Ruta As String, Fila As Integer, Col As Byte, _
Archivo As Object, n As Byte, Tipo As String
Application.ScreenUpdating = False
Ruta = Range("a1")
Tipo = "mp3" ' "windows media"
Cells.Clear
With CreateObject("shell.application")
With .Namespace(CStr(Ruta))
Fila = 3
Col = 1
For n = 0 To 40
Cells(Fila, Col) = .GetDetailsOf(.items, n)
Fila = Fila + 1
Next
Col = 2
For Each Archivo In .items
Fila = 2
If Not Archivo.IsFolder Then
If InStr(1, .GetDetailsOf(Archivo, 2), Tipo, vbTextCompare) Then
Fila = Fila + 1
For n = 0 To 40
On Error Resume Next
Cells(Fila, Col) = .GetDetailsOf(Archivo, n)
Fila = Fila + 1
Next
Col = Col + 1
End If
End If
Next
End With
End With
Cells.EntireColumn.AutoFit
Range("a1") = Ruta
End Sub
Respuesta Responder a este mensaje
#3 fredy
22/10/2009 - 18:04 | Informe spam
muchas gracias .. Hector ..el listado que sale, era el que queria.., la idea
es editar el archivo binario (tag) , 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:

Option Explicit

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
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

muchas gracias
"Héctor Miguel" wrote:

hola (de nuevo), fredy !

si le tienes "flojerilla" a leer post para tomar notas (?) prueba con una macro +/- como la siguiente:

ten lista una hoja en blanco y escribe la ruta donde se almacenan esos archivos en la celda [A1]
(p.e. c:\documents and settings\<usuario>\mis documentos\mi musica )

si no quieres condicionar el tipo (o no lo conoces con exactitud) quita el segundo If -instr- (y su End If obviamente)

saludos,
hector.

Sub Info_de_musicales()
Dim Ruta As String, Fila As Integer, Col As Byte, _
Archivo As Object, n As Byte, Tipo As String
Application.ScreenUpdating = False
Ruta = Range("a1")
Tipo = "mp3" ' "windows media"
Cells.Clear
With CreateObject("shell.application")
With .Namespace(CStr(Ruta))
Fila = 3
Col = 1
For n = 0 To 40
Cells(Fila, Col) = .GetDetailsOf(.items, n)
Fila = Fila + 1
Next
Col = 2
For Each Archivo In .items
Fila = 2
If Not Archivo.IsFolder Then
If InStr(1, .GetDetailsOf(Archivo, 2), Tipo, vbTextCompare) Then
Fila = Fila + 1
For n = 0 To 40
On Error Resume Next
Cells(Fila, Col) = .GetDetailsOf(Archivo, n)
Fila = Fila + 1
Next
Col = Col + 1
End If
End If
Next
End With
End With
Cells.EntireColumn.AutoFit
Range("a1") = Ruta
End Sub



Respuesta Responder a este mensaje
#4 Héctor Miguel
22/10/2009 - 21:11 | Informe spam
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
#5 fredy
22/10/2009 - 23:51 | 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 Hector
"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
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida