Hallar BitRate en MP3

y programas personales para otros como tu, puede que te corrijan ;)
Responder
Pablo2m
Hacker del Foro
Mensajes: 88
Registrado: 28 May 2008, 21:16
Ubicación: Agentina

Hallar BitRate en MP3

Mensaje por Pablo2m »

Hola, si esto va en otra seccion por favor acomodenlo.

Código: Seleccionar todo

Global $parametro ;28 en el 7 , 22 en el vista y anteriores


if @OSVersion="WIN_7" then
$parametro =28
Else
$parametro=22
EndIf

Func Hallarbitrate($ruta,$nombre)
	Local $iExist, $oShellApp, $oDir, $oFile, $Bitrate
	$iExist = FileExists($ruta&'\'&$nombre)
	If $iExist = 0 Then
		SetError(1)
		Return 0
	Else
		$oShellApp = ObjCreate ("shell.application")
		$oDir = $oShellApp.NameSpace ($ruta)
		$oFile = $oDir.Parsename ($nombre)
		$Bitrate = $oDir.GetDetailsOf ($oFile, $parametro)
			If $Bitrate = "" Then
				 Return 0
			Else
				 $Bitrate=StringMid ($bitrate,2,3)
				 Return $Bitrate
			EndIf
	 EndIf
EndFunc
A mi me ha funcionado muy bien, esta basado en un codigo que anda dando vueltas por el foro en Ingles
Última edición por Pablo2m el 02 Jun 2010, 01:55, editado 1 vez en total.
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Hallar BitRate en MP3

Mensaje por Ximorro »

Mira qué listo, usando las propiedades multimedia de Windows. Lástima que los muy puñeteros lo cambien de sitio en diferentes S.O., eso complica el código.

Por cierto, fíjate que haces la llamada GetDetailsOf($oFile, 28) a piñón fijo, tienes que usar GetDetailsOf($oFile, $parametro), lo has preparado pero luego se te ha olvidado ponerlo abajo.

Muy interesante, también da la idea de cómo acceder a los demás parámetros de la lista, es cosa de ir probando. :smt024
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Hallar BitRate en MP3

Mensaje por Chefito »

Sí, yo ya había visto esto por ahí para sacar la información de los ficheros mp3 :smt002 . Está bien la idea.
También te recomiendo que pongas esto:

Código: Seleccionar todo

$Bitrate=Number(StringRight($bitrate,StringLen($bitrate)-1))
o algo parecido, ya que con stringmid puede que cojas una letra si el rate es menor de 3 dígitos (no creo que sea nunca mayor :smt005 ).

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Pablo2m
Hacker del Foro
Mensajes: 88
Registrado: 28 May 2008, 21:16
Ubicación: Agentina

Re: Hallar BitRate en MP3

Mensaje por Pablo2m »

Ximorro escribió:Mira qué listo, usando las propiedades multimedia de Windows. Lástima que los muy puñeteros lo cambien de sitio en diferentes S.O., eso complica el código.

Por cierto, fíjate que haces la llamada GetDetailsOf($oFile, 28) a piñón fijo, tienes que usar GetDetailsOf($oFile, $parametro), lo has preparado pero luego se te ha olvidado ponerlo abajo.

Muy interesante, también da la idea de cómo acceder a los demás parámetros de la lista, es cosa de ir probando. :smt024
Si, es una lastima que cambien los valores a cada version, gracias por las correccion he editado el codigo por si alguien lo usa

Chefito escribió:Sí, yo ya había visto esto por ahí para sacar la información de los ficheros mp3 :smt002 . Está bien la idea.
También te recomiendo que pongas esto:

Código: Seleccionar todo

$Bitrate=Number(StringRight($bitrate,StringLen($bitrate)-1))
o algo parecido, ya que con stringmid puede que cojas una letra si el rate es menor de 3 dígitos (no creo que sea nunca mayor :smt005 ).

Saludos.
Muy buena adicion, muchas gracias.

Esto anda en el 99% de los mp3, ahora estoy viendo como leer el encabezado de los mp3 para los casos en que este simple script no anda
Saludos
Pablo2m
Hacker del Foro
Mensajes: 88
Registrado: 28 May 2008, 21:16
Ubicación: Agentina

Re: Hallar BitRate en MP3

Mensaje por Pablo2m »

Esto puede ser util


Attribute tables

Windows XP Windows Server 2003 Windows 2000

Código: Seleccionar todo

;------------------------------------------- 
;0 Name         Name  
;1 Size         Size  
;2 Type         Type  
;3 Date Modified    Date Modified  
;4 Date Created     Attributes  
;5 Date Accessed    Comment  
;6 Attributes       Date Created  
;7 Status       Date Accessed  
;8 Owner        Owner  
;9 Author       ???  
;10 Title       Author  
;11 Subject         Title  
;12 Category        Subject  
;13 Pages       Category  
;14 Comments        Pages  
;15 Copyright       Copyright  
;16 Artist      Company Name  
;17 Album Title     Module Desription  
;18 Year        Module Version  
;19 Track Number    Product Name  
;20 Genre       Product Version  
;21 Duration        Sender Name  
;22 Bit Rate        Recipient Name  
;23 Protected       Recipient Number  
;24 Camera Model    Csid  
;25 Date Picture Taken  Tsid  
;26 Dimensions      Transmission Time  
;27 ???         Caller Id  
;28 ???         Routing  
;29 Episode Name    Audio Format  
;30 Program Description Sample Rate  
;31 Description     Audio Sample Size  
;32 Audio sample size   Channels  
;33 Audio sample rate   Play Length  
;34 Channels        Frame Count  
;35 Company     Frame Rate  
;36 Description     Video Sample Size  
;37 File Version    Video Compression  
;38 Product Name    ??? 
;39 Product Version ??? 
;40 Keywords (XP only)  ??? 
Windows Vista

Código: Seleccionar todo

;-----------------------
;  0 Name 
;  1 Size 
;  2 Type 
;  3 Date modified
;  4 Date created 
;  5 Date accessed 
;  6 Attributes         
;  7 Offline status 
;  8 Offline availability 
;  9 Perceived type 
; 10 Owner 
; 11 Kinds 
; 12 Date taken 
; 13 Artists 
; 14 Album 
; 15 Year 
; 16 Genre 
; 17 Conductors 
; 18 Tags 
; 19 Rating 
; 20 Authors 
; 21 Title 
; 22 Subject 
; 23 Categories 
; 24 Comments 
; 25 Copyright 
; 26 # 
; 27 Length 
; 28 Bit rate 
; 29 Protected 
; 30 Camera model 
; 31 Dimensions 
; 32 Camera maker 
; 33 Company 
; 34 File description 
; 35 Program name 
; 36 Duration 
; 37 Is online 
; 38 Is recurring 
; 39 Location 
; 40 Optional attendee addresses 
; 41 Optional attendees 
; 42 Organizer address 
; 43 Organizer name 
; 44 Reminder time 
; 45 Required attendee addresses 
; 46 Required attendees 
; 47 Resources 
; 48 Free/busy status 
; 49 Total size 
; 50 Account name 
; 51 Computer 
; 52 Anniversary 
; 53 Assistant's name 
; 54 Assistant's phone 
; 55 Birthday 
; 56 Business address 
; 57 Business city 
; 58 Business country/region 
; 59 Business P.O. box 
; 60 Business postal code 
; 61 Business state or province 
; 62 Business street 
; 63 Business fax 
; 64 Business home page 
; 65 Business phone 
; 66 Callback number 
; 67 Car phone 
; 68 Children 
; 69 Company main phone 
; 70 Department 
; 71 E-mail Address 
; 72 E-mail2 
; 73 E-mail3 
; 74 E-mail list 
; 75 E-mail display name 
; 76 File as 
; 77 First name 
; 78 Full name 
; 79 Gender 
; 80 Given name 
; 81 Hobbies 
; 82 Home address 
; 83 Home city 
; 84 Home country/region 
; 85 Home P.O. box 
; 86 Home postal code 
; 87 Home state or province 
; 88 Home street 
; 89 Home fax 
; 90 Home phone 
; 91 IM addresses 
; 92 Initials 
; 93 Job title 
; 94 Label 
; 95 Last name 
; 96 Mailing address 
; 97 Middle name 
; 98 Cell phone 
; 99 Nickname 
;100 Office location 
;101 Other address 
;102 Other city 
;103 Other country/region 
;104 Other P.O. box 
;105 Other postal code 
;106 Other state or province 
;107 Other street 
;108 Pager 
;109 Personal title 
;110 City 
;111 Country/region 
;112 P.O. box 
;113 Postal code 
;114 State or province 
;115 Street 
;116 Primary e-mail 
;117 Primary phone 
;118 Profession 
;119 Spouse 
;120 Suffix 
;121 TTY/TTD phone 
;122 Telex 
;123 Webpage 
;124 Status 
;125 Content type 
;126 Date acquired 
;127 Date archived 
;128 Date completed 
;129 Date imported 
;130 Client ID 
;131 Contributors 
;132 Content created 
;133 Last printed 
;134 Date last saved 
;135 Division 
;136 Document ID 
;137 Pages 
;138 Slides 
;139 Total editing time 
;140 Word count 
;141 Due date 
;142 End date 
;143 File count 
;144 Filename 
;145 File version 
;146 Flag color 
;147 Flag status 
;148 Space free 
;149 Bit depth 
;150 Horizontal resolution 
;151 Width 
;152 Vertical resolution 
;153 Height 
;154 Importance 
;155 Is attachment 
;156 Is deleted 
;157 Has flag 
;158 Is completed 
;159 Incomplete 
;160 Read status 
;161 Shared 
;162 Creator 
;163 Date 
;164 Folder name 
;165 Folder path 
;166 Folder 
;167 Participants 
;168 Path 
;169 Contact names 
;170 Entry type 
;171 Language 
;172 Date visited 
;173 Description 
;174 Link status 
;175 Link target 
;176 URL 
;177 Media created 
;178 Date released 
;179 Encoded by 
;180 Producers 
;181 Publisher 
;182 Subtitle 
;183 User web URL 
;184 Writers 
;185 Attachments 
;186 Bcc addresses 
;187 Bcc names 
;188 Cc addresses 
;189 Cc names 
;190 Conversation ID 
;191 Date received 
;192 Date sent 
;193 From addresses 
;194 From names 
;195 Has attachments 
;196 Sender address 
;197 Sender name 
;198 Store 
;199 To addresses 
;200 To do title 
;201 To names 
;202 Mileage 
;203 Album artist 
;204 Beats-per-minute 
;205 Composers 
;206 Initial key 
;207 Mood 
;208 Part of set 
;209 Period 
;210 Color 
;211 Parental rating 
;212 Parental rating reason 
;213 Space used 
;214 EXIF version 
;215 Event 
;216 Exposure bias 
;217 Exposure program 
;218 Exposure time 
;219 F-stop 
;220 Flash mode 
;221 Focal length 
;222 35mm focal length 
;223 ISO speed 
;224 Lens maker 
;225 Lens model 
;226 Light source 
;227 Max aperture 
;228 Metering mode 
;229 Orientation 
;230 Program mode 
;231 Saturation 
;232 Subject distance 
;233 White balance 
;234 Priority 
;235 Project 
;236 Channel number 
;237 Episode name 
;238 Closed captioning 
;239 Rerun 
;240 SAP 
;241 Broadcast date 
;242 Program description 
;243 Recording time 
;244 Station call sign 
;245 Station name 
;246 Auto summary 
;247 Summary 
;248 Search ranking 
;249 Sensitivity 
;250 Shared with 
;251 Product name 
;252 Product version 
;253 Source 
;254 Start date 
;255 Billing information 
;256 Complete 
;257 Task owner 
;258 Total file size 
;259 Legal trademarks 
;260 Video compression 
;261 Directors 
;262 Data rate 
;263 Frame height 
;264 Frame rate 
;265 Frame width 
;266 Total bitrate 
Windows 7

Código: Seleccionar todo

;------------------------------------------------ 
;  0 Name 
;  1 Size 
;  2 Item type 
;  3 Date modified 
;  4 Date created 
;  5 Date accessed 
;  6 Attributes 
;  7 Offline status 
;  8 Offline availability 
; 10 Owner 
; 11 Kind 
; 12 Date taken 
; 13 Contributing artists 
; 14 Album 
; 15 Year 
; 16 Genre 
; 17 Conductors 
; 18 Tags 
; 19 Rating 
; 20 Authors 
; 21 Title 
; 22 Subject 
; 23 Categories 
; 24 Comments 
; 25 Copyright 
; 26 # 
; 27 Length 
; 28 Bit rate 
; 29 Protected 
; 30 Camera model 
; 31 Dimensions 
; 32 Camera maker 
; 33 Company 
; 34 File description 
; 35 Program name 
; 36 Duration 
; 37 Is online 
; 38 Is recurring 
; 39 Location 
; 40 Optional attendee addresses 
; 41 Optional attendees 
; 42 Organizer address 
; 43 Organizer name 
; 44 Reminder time 
; 45 Required attendee addresses 
; 46 Required attendees 
; 47 Resources 
; 48 Meeting status 
; 49 Free/busy status 
; 50 Total size 
; 51 Account name 
; 52 Task status 
; 53 Computer 
; 54 Anniversary 
; 55 Assistant's name 
; 56 Assistant's phone 
; 57 Birthday 
; 58 Business address 
; 59 Business city 
; 60 Business country/region 
; 61 Business P.O. box 
; 62 Business postal code 
; 63 Business state or province 
; 64 Business street 
; 65 Business fax 
; 66 Business home page 
; 67 Business phone 
; 68 Callback number 
; 69 Car phone 
; 70 Children 
; 71 Company main phone 
; 72 Department 
; 73 E-mail address 
; 74 E-mail2 
; 75 E-mail3 
; 76 E-mail list 
; 77 E-mail display name 
; 78 File as 
; 79 First name 
; 80 Full name 
; 81 Gender 
; 82 Given name 
; 83 Hobbies 
; 84 Home address 
; 85 Home city 
; 86 Home country/region 
; 87 Home P.O. box 
; 88 Home postal code 
; 89 Home state or province 
; 90 Home street 
; 91 Home fax 
; 92 Home phone 
; 93 IM addresses 
; 94 Initials 
; 95 Job title 
; 96 Label 
; 97 Last name 
; 98 Mailing address 
; 99 Middle name 
;100 Cell phone 
;101 Nickname 
;102 Office location 
;103 Other address 
;104 Other city 
;105 Other country/region 
;106 Other P.O. box 
;107 Other postal code 
;108 Other state or province 
;109 Other street 
;110 Pager 
;111 Personal title 
;112 City 
;113 Country/region 
;114 P.O. box 
;115 Postal code 
;116 State or province 
;117 Street 
;118 Primary e-mail 
;119 Primary phone 
;120 Profession 
;121 Spouse/Partner 
;122 Suffix 
;123 TTY/TTD phone 
;124 Telex 
;125 Webpage 
;126 Content status 
;127 Content type 
;128 Date acquired 
;129 Date archived 
;130 Date completed 
;131 Device category 
;132 Connected 
;133 Discovery method 
;134 Friendly name 
;135 Local computer 
;136 Manufacturer 
;137 Model 
;138 Paired 
;139 Classification 
;140 Status 
;141 Client ID 
;142 Contributors 
;143 Content created 
;144 Last printed 
;145 Date last saved 
;146 Division 
;147 Document ID 
;148 Pages 
;149 Slides 
;150 Total editing time 
;151 Word count 
;152 Due date 
;153 End date 
;154 File count 
;155 Filename 
;156 File version 
;157 Flag color 
;158 Flag status 
;159 Space free 
;160 Bit depth 
;161 Horizontal resolution 
;162 Width 
;163 Vertical resolution 
;164 Height 
;165 Importance 
;166 Is attachment 
;167 Is deleted 
;168 Encryption status 
;169 Has flag 
;170 Is completed 
;171 Incomplete 
;172 Read status 
;173 Creators 
;174 Date 
;175 Folder name 
;176 Folder path 
;177 Folder 
;178 Participants 
;179 Path 
;180 By location 
;181 Type 
;182 Contact names 
;183 Entry type 
;184 Language 
;185 Date visited 
;186 Description 
;187 Link status 
;188 Link target 
;189 URL 
;190 Media created 
;191 Date released 
;192 Encoded by 
;193 Producers 
;194 Publisher 
;195 Subtitle 
;196 User web URL 
;197 Writers 
;198 Attachments 
;199 Bcc addresses 
;200 Bcc 
;201 Cc addresses 
;202 Cc 
;203 Conversation ID 
;204 Date received 
;205 Date sent 
;206 From addresses 
;207 From 
;208 Has attachments 
;209 Sender address 
;210 Sender name 
;211 Store 
;212 To addresses 
;213 To do title 
;214 To 
;215 Mileage 
;216 Album artist 
;217 Album ID 
;218 Beats-per-minute 
;219 Composers 
;220 Initial key 
;221 Part of a compilation 
;222 Mood 
;223 Part of set 
;224 Period 
;225 Color 
;226 Parental rating 
;227 Parental rating reason 
;228 Space used 
;229 EXIF version 
;230 Event 
;231 Exposure bias 
;232 Exposure program 
;233 Exposure time 
;234 F-stop 
;235 Flash mode 
;236 Focal length 
;237 35mm focal length 
;238 ISO speed 
;239 Lens maker 
;240 Lens model 
;241 Light source 
;242 Max aperture 
;243 Metering mode 
;244 Orientation 
;245 People 
;246 Program mode 
;247 Saturation 
;248 Subject distance 
;249 White balance 
;250 Priority 
;251 Project 
;252 Channel number 
;253 Episode name 
;254 Closed captioning 
;255 Rerun 
;256 SAP 
;257 Broadcast date 
;258 Program description 
;259 Recording time 
;260 Station call sign 
;261 Station name 
;262 Summary 
;263 Snippets 
;264 Auto summary 
;265 Search ranking 
;266 Sensitivity 
 
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Hallar BitRate en MP3

Mensaje por Chefito »

Interesante la lista de valores :smt023 .
Gracias por compartir :smt002 .

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Hallar BitRate en MP3

Mensaje por Ximorro »

¡OOOOOH SÍ! ¡Muchas gracias por las listas!

Una cosa, la extracción del bitrate no va muy bien, por ejemplo tengo uno típico que tiene 128kbps, tal como lo tienes no es que coja una letra, es que devuelve "28k", así que encima se deja un número.

Tampoco entiendo muy bien la función de Chefito, ahí quita la letra pero también pierde el dígito y da 28

Me funciona simplemente haciendo:
$Bitrate=Number($Bitrate)

Number() ignora caracteres alfanuméricos al final, mientras empiece por número lo saca bien. De lo contrario quizás toque usar expresiones regulares.

Si os estaba yendo bien... ¿quizás tienen formatos diferente? Yo uso XP (a ver si esta tarde lo pruebo en un Vista), la cadena completa que me devuelve es: "128kbps" así que vuestras soluciones que quitan el primer carácter se cargan el "1". ¿Es que ahí tenéis un espacio o algo así?
Si es un espacio usando simplemente Number() es suficiente, también lo ignora, el problema es cuando la cadena empieza por caracteres imprimibles que no son dígitos, entonces Number() da cero...
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Hallar BitRate en MP3

Mensaje por Ximorro »

Hum, aún no lo he probado en Vista pero según las listas ahí es igual que en Windows 7, así que la línea:
If @OSVersion="WIN_7" Then
habrá que ampliarla a:
If @OSVersion="WIN_7" Or @OSVersion="WIN_VISTA" Then

¿no? O eso o las tablas no están bien...
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Hallar BitRate en MP3

Mensaje por Chefito »

Ximorro escribió:Si os estaba yendo bien... ¿quizás tienen formatos diferente? Yo uso XP (a ver si esta tarde lo pruebo en un Vista), la cadena completa que me devuelve es: "128kbps" así que vuestras soluciones que quitan el primer carácter se cargan el "1". ¿Es que ahí tenéis un espacio o algo así?
Si es un espacio usando simplemente Number() es suficiente, también lo ignora, el problema es cuando la cadena empieza por caracteres imprimibles que no son dígitos, entonces Number() da cero...
Justo. Yo no lo probé en xp. Donde estaba tenía el win7 y me daba como resultado: "?128kbps", y como tu bien dices la función number me daba cero porque comenzaba por ?. Por eso la quitaba.
Habrá que ver los resultados en los diferentes SO e ir tratandolo con condiciones......o crear una función que empieze a cojer los número cuando los encuentre, y cuando encuentre un caracter no numérico se salga de la función (muy facil :smt002 ) tenga lo que tenga la cadena.

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Pablo2m
Hacker del Foro
Mensajes: 88
Registrado: 28 May 2008, 21:16
Ubicación: Agentina

Re: Hallar BitRate en MP3

Mensaje por Pablo2m »

Si abria que ampliarlas pero cuando lo hice desconocia si conservaba el valor en vista (SO que nunca use)

Ximorro escribió:Hum, aún no lo he probado en Vista pero según las listas ahí es igual que en Windows 7, así que la línea:
If @OSVersion="WIN_7" Then
habrá que ampliarla a:
If @OSVersion="WIN_7" Or @OSVersion="WIN_VISTA" Then

¿no? O eso o las tablas no están bien...
Pablo2m
Hacker del Foro
Mensajes: 88
Registrado: 28 May 2008, 21:16
Ubicación: Agentina

Re: Hallar BitRate en MP3

Mensaje por Pablo2m »

A modo de curiosidad les dejo el recorte de un codigo que adapte , su autor original es Lazycat o Cape-City. He descartado este enfoque ademas de que no entiendo muy bien su funcionamiento por su lentitud.
Un buen pantallazo de la cabecera de los archivos mp3 puede encontrarse en

http://www.codeproject.com/KB/audio-vid ... sg=2979127

Código: Seleccionar todo

Func BitrateAlternativo ($r,$n)
Local $offset = 1, $isVBR = 0 , $sBitrate = ""
$Archivo=$ruta&"\"&$nombre

If _FileReadAtOffsetHEX ($Archivo, 1, 3) = "494433" Then; ID3v2 tag found
    $offset = BitShift(Dec(_FileReadAtOffsetHEX ($Archivo, 7, 4)), 1); End of ID3v2 tag
Endif

For $ic = $offset to 2048 + $offset
    $marker = _FileReadAtOffsetHEX ($Archivo, $ic, 2)
    $marker = StringLeft($marker, 3)
    If StringInStr("FFF,FFE", $marker) Then; Assume that is frame start
        $frame = _FileReadAtOffsetHEX ($Archivo, $ic, 4)
        If _FileReadAtOffsetHEX ($Archivo, $ic+36, 4) = "58696E67" Then $isVBR = 1; Is this a right way?..
        Exitloop
    Endif
Next

If $frame = "" Then
    SetError(1); Frame not found (not mp3 data?)
    Return 
Endif

Local $head = _HexToBin($frame)
Local $nVer = _GetRBits($head, 19, 2)
Local $nLay = _GetRBits($head, 17, 2)
Local $pad = 0
;~ Local $bitrate

If _GetRBits($head, 9, 1) Then $pad = 1

If $isVBR Then
    $BRT = "-1"
Else
    Select
        Case $nVer = 3 and $nLay = 3
            Dim $Bitrate[16] = ["-1","32","64","96","128","160","192","224","256","288","320","352","384","416","448""-1"]
        Case $nVer = 3 and $nLay = 2
            Dim $Bitrate[16] = ["-1","32","48","56","64","80","96","112","128","160","192","224","256","320","384""-1"]
        Case $nVer = 3 and $nLay = 1
            Dim $Bitrate[16] = ["-1","32","40","48","56","64","80","96","112","128","160","192","224","256","320""-1"]
        Case $nVer = 2 and $nLay = 3
            Dim $Bitrate[16] = ["-1","32","48","56","64","80","96","112","128","144","160","176","192","224","256""-1"]
        Case ($nVer = 2 and $nLay = 2) or ($nVer = 2 and $nLay = 1)
            Dim $Bitrate[16] = ["-1","8","16","24","32","40","48","56","64","80","96","112","128","144","160""-1"]
    EndSelect
    $BRT = _GetData($Bitrate, _GetRBits($head, 12, 4))
	Return $BRT
EndIf

EndFunc


Func _GetRBits($str, $pos, $size)
    Local $ic, $res = 0, $bStr = StringMid($str, 33 - $pos - $size, $size)
    For $ic = 0 to $size-1
        If StringMid($bStr, $size-$ic, 1) == "1" Then $res = $res + 2^$ic
    Next
    Return ($res)
EndFunc

Func _GetData(ByRef $array, $val)
    If $val > UBound($array)-1 Then Return("Undefined")
    Return ($array[$val])
EndFunc

Func _HexToBin($str)
Local $res=""
While StringLen($str) > 0
    $val = Dec(StringLeft($str, 1))
    $str = StringTrimLeft($str, 1)
    For $i = 3 to 0 Step -1
        $pw = 2^$i
        If $val - $pw < 0 Then
            $res = $res & "0"
        Else
            $res = $res & "1"
            $val = $val - $pw
        Endif
    Next
Wend
Return ($res)
EndFunc

Func _FileReadAtOffsetHEX ($Archivo, $offset, $bytes)
    Local $tfile = FileOpen($Archivo, 0)
    Local $tstr = ""
    FileRead($tfile, $offset-1)
    For $i = $offset To $offset + $bytes - 1
        $tstr =  $tstr & Hex(Asc(FileRead($tfile, 1)), 2)
    Next
    FileClose($tfile)
    Return ($tstr)
Endfunc
Pablo2m
Hacker del Foro
Mensajes: 88
Registrado: 28 May 2008, 21:16
Ubicación: Agentina

Re: Hallar BitRate en MP3

Mensaje por Pablo2m »

Otra forma de hallarlo, muy elegante a mi gusto, la modifique en base a un UDF de nobbe

Código: Seleccionar todo

Func _media_from_WMPLAYER_OCX($ruta,$nombre)

	Local $rc , $ret

	$oPlayer = ObjCreate("WMPlayer.OCX")

	If Not IsObj($oPlayer) Then
		$oPlayer = 0
		Return -1
	EndIf

	$oPlayer.url = $ruta&"\"&$nombre
	$rc = $oPlayer.mediaCollection.add ($ruta&"\"&$nombre)

	$ret = $oPlayer.currentMedia.getItemInfobyAtom ($oPlayer.mediaCollection.getMediaAtom ("Bitrate")) ;Cambiar "Bitrate" si se desea otra propiedad

	$oPlayer.close ()
	$oPlayer.url = ""
	$oPlayer = 0

	Return $ret

EndFunc
Este codigo puede servir para hallar otras cosas, a continuacion la lista

Código: Seleccionar todo

	* AcquisitionTime Attribute
	* AlbumID Attribute
	* AlbumIDAlbumArtist Attribute
	* Author Attribute
	* AverageLevel Attribute
	* Bitrate Attribute
	* BuyNow Attribute
	* BuyTickets Attribute
	* Channels Attribute
	* Copyright Attribute
	* CurrentBitrate Attribute
	* Duration Attribute
	* FileSize Attribute
	* FileType Attribute
	* Is_Protected
	* IsVBR Attribute
	* MediaType Attribute
	* MoreInfo Attribute
	* PartOfSet Attribute
	* PeakValue Attribute
	* PlaylistIndex Attribute
	* ProviderLogoURL Attribute
	* ProviderURL Attribute
	* RecordingTime Attribute
	* RecordingTimeDay Attribute
	* RecordingTimeMonth Attribute
	* RecordingTimeYear Attribute
	* RecordingTimeYearMonth Attribute
	* RecordingTimeYearMonthDay Attribute
	* ReleaseDate Attribute
	* ReleaseDateDay Attribute
	* ReleaseDateMonth Attribute
	* ReleaseDateYear Attribute
	* ReleaseDateYearMonth Attribute
	* ReleaseDateYearMonthDay Attribute
	* RequestState Attribute
	* ShadowFilePath Attribute
	* SourceURL Attribute
	* SyncState Attribute
	* Title Attribute
	* TrackingID Attribute
	* UserCustom1 Attribute
	* UserCustom2 Attribute
	* UserEffectiveRating Attribute
	* UserLastPlayedTime Attribute
	* UserPlayCount Attribute
	* UserPlaycountAfternoon Attribute
	* UserPlaycountEvening Attribute
	* UserPlaycountMorning Attribute
	* UserPlaycountNight Attribute
	* UserPlaycountWeekday Attribute
	* UserPlaycountWeekend Attribute
	* UserRating Attribute
	* UserServiceRating Attribute
	* WM/AlbumArtist Attribute
	* WM/AlbumTitle Attribute
	* WM/Category Attribute
	* WM/Composer Attribute
	* WM/Conductor Attribute
	* WM/ContentDistributor Attribute
	* WM/ContentGroupDescription Attribute
	* WM/EncodingTime Attribute
	* WM/Genre Attribute
	* WM/GenreID Attribute
	* WM/InitialKey Attribute
	* WM/Language Attribute
	* WM/Lyrics Attribute
	* WM/MCDI Attribute
	* WM/MediaClassPrimaryID Attribute
	* WM/MediaClassSecondaryID Attribute
	* WM/Mood Attribute
	* WM/ParentalRating Attribute
	* WM/Period Attribute
	* WM/ProtectionType Attribute
	* WM/Provider Attribute
	* WM/ProviderRating Attribute
	* WM/ProviderStyle Attribute
	* WM/Publisher Attribute
	* WM/SubscriptionContentID Attribute
	* WM/SubTitle Attribute
	* WM/TrackNumber Attribute
	* WM/UniqueFileIdentifier Attribute
	* WM/WMCollectionGroupID Attribute
	* WM/WMCollectionID Attribute
	* WM/WMContentID Attribute
	* WM/Writer Attribute
	* WM/Year Attribute
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Hallar BitRate en MP3

Mensaje por Ximorro »

Muy interesante, se puede aprender mucho de los dos.
El primero supongo que es muy lento porque en cada llamada a _FileReadAtOffsetHEX abre y cierra el archivo ¡y hay unas cuantas! Eso habría que optimizarlo.
Ese método se mete en el archivo mp3 y lo analiza a pelo, por eso es más incomprensible, es necesario disponer de la especificación mp3 para entenderlo. Por otro lado teniendo clara esa especificación se puede averiguar de todo...

El segundo se parece al primero del post: le pregunta a Windows. En este caso en vez de al shell pregunta al MediaPlayer, da menos información genérica pero más específica de archivos multimedia. Pero vaya, pueden ser complementarios.
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Pablo2m
Hacker del Foro
Mensajes: 88
Registrado: 28 May 2008, 21:16
Ubicación: Agentina

Re: Hallar BitRate en MP3

Mensaje por Pablo2m »

Estoy con otro intento, alguien debera explicarme algunas cosas de las DLL parece, agarre un ejemplo y no andaba. Al comprobar si cargaba la liberia resulta que no.¿ A alguien se le ocurre que pasa ?, ya probe lo mas comun

Código: Seleccionar todo

$DLL = DllOpen(@ScriptDir&"\MediaInfo.dll")
If $DLL = -1 then ConsoleWrite(@CR&"Error"&@CR) 

Ximorro escribió:Muy interesante, se puede aprender mucho de los dos.El primero supongo que es muy lento porque en cada llamada a _FileReadAtOffsetHEX abre y cierra el archivo ¡y hay unas cuantas! Eso habría que optimizarlo.Ese método se mete en el archivo mp3 y lo analiza a pelo, por eso es más incomprensible, es necesario disponer de la especificación mp3 para entenderlo. Por otro lado teniendo clara esa especificación se puede averiguar de todo...El segundo se parece al primero del post: le pregunta a Windows. En este caso en vez de al shell pregunta al MediaPlayer, da menos información genérica pero más específica de archivos multimedia. Pero vaya, pueden ser complementarios.
Ximorro no me animo a tocarlo mas, toque lo que entencia ya que originalmente tenia un par de cosas que no me gustaban (y entendia que hacian asi que las pude cambiar)
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Hallar BitRate en MP3

Mensaje por Chefito »

Puede ser que la tengas que registrar. Para registrar una dll o un ocx utiliza en comando Regsvr32.
Ejemplo: Regsvr32 ruta donde este la dll+nombre de la dll. Puedes ejecutarlo desde win, en Inicio>Ejecutar.
Si lo registra bien te dará un mensaje de éxito en ingles, y si no te dará algún error.
Para registrar en modo silencioso utiliza el parámetro /s.

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Pablo2m
Hacker del Foro
Mensajes: 88
Registrado: 28 May 2008, 21:16
Ubicación: Agentina

Re: Hallar BitRate en MP3

Mensaje por Pablo2m »

Instale todo de nuevo (Autoit y la liberia ) y ahora anda. Gracias
Chefito escribió:Puede ser que la tengas que registrar. Para registrar una dll o un ocx utiliza en comando Regsvr32.
Ejemplo: Regsvr32 ruta donde este la dll+nombre de la dll. Puedes ejecutarlo desde win, en Inicio>Ejecutar.
Si lo registra bien te dará un mensaje de éxito en ingles, y si no te dará algún error.
Para registrar en modo silencioso utiliza el parámetro /s.

Saludos.
Pablo2m
Hacker del Foro
Mensajes: 88
Registrado: 28 May 2008, 21:16
Ubicación: Agentina

Re: Hallar BitRate en MP3

Mensaje por Pablo2m »

Ultima forma, ahora con una dll. Que algo bastante compacto, lo hice modificando un ejemplo en la ayuda de esta liberia.

Código: Seleccionar todo

Func OtroBitRate ($ruta,$nombre) 
	
Local $DLL , $Open_Result

$DLL = DllOpen(@ScriptDir&"\MediaInfo.dll")
if $DLL = -1 then ConsoleWrite(@CR&"Error"&@CR)

$Handle = DllCall($DLL, "ptr", "MediaInfo_New") 	
$Open_Result = DllCall($DLL, "int", "MediaInfo_Open", "ptr", $Handle[0], "wstr", $ruta&"\"&$nombre)
$Info_Get=DllCall($DLL, "wstr", "MediaInfo_Get", "ptr", $Handle[0], "int", 2, "int", 0, "wstr", "BitRate", "int", 1, "int", 0)

Return ($Info_Get[0])/1000)

$Handle = DllCall($DLL, "none", "MediaInfo_Delete", "ptr", $Handle[0])
DllClose($DLL)

EndFunc
Responder