Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
Obtener Informaciones De Un Archivo Audio OggVorbis
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Obtener Informaciones De Un Archivo Audio OggVorbis 
 
Para los mis hermanos neo-latinos dejo este codigo para obtener informaciones de un archivo audio OggVorbis, usando los recursos de la libreria externaI de "libvorbisfile.so".  

Library "libvorbisfile"

Public Struct vorbis_info
  version As Integer
  channels As Integer
  rate As Long
  bitrate_upper As Long
  bitrate_nominal As Long
  bitrate_lower As Long
  bitrate_window As Long
  codec_setup As Pointer
End Struct

Public Struct vorbis_comment
  user_comments As Pointer
  comment_lengths As Pointer
  comments As Integer
  vendor As Pointer
End Struct

' int ov_fopen(const char *path,OggVorbis_File *vf)
' Initializes an OggVorbis_File structure
Private Extern ov_fopen(path As String, vf As Byte[]) As Integer

' vorbis_info *ov_info(OggVorbis_File *vf,int link)
' Returns the vorbis_info struct for the specified bitstream.
Private Extern ov_info(vf As Byte[], olink As Integer) As Vorbis_info

' ogg_int64_t ov_raw_total(OggVorbis_File *vf,int i)
' Returns the total (compressed) bytes.
Private Extern ov_raw_total(vf As Byte[], i As Integer) As Long

' ogg_int64_t ov_pcm_total(OggVorbis_File *vf,int i)
' Returns the total pcm samples.
Private Extern ov_pcm_total(vf As Byte[], i As Integer) As Long

' double ov_time_total(OggVorbis_File *vf,int i)
' Returns the total time in seconds.
Private Extern ov_time_total(vf As Byte[], i As Integer) As Float

' vorbis_comment *ov_comment(OggVorbis_File *vf,int link)
' Returns a pointer to the vorbis_comment struct for the specified bitstream.
Private Extern ov_comment(vf As Byte[], olink As Integer) As Vorbis_comment

' int ov_clear(OggVorbis_File *vf)
' Clears the decoder's buffers.
Private Extern ov_clear(vf As Byte[]) As Integer


Public Sub Main()

  Dim ogg As String
  Dim ovf As New Byte[944]
  Dim info As Vorbis_info
  Dim comm As Vorbis_comment
  Dim n As Integer
 
    ogg = "/ruta/del/archivo.ogg"
  
  n = ov_fopen(ogg, ovf)
  If n < 0 Then Error.Raise("Error !")
  
  Print "\nFile audio ogg:          "; ogg
  With info = ov_info(ovf, 0)
    Print "\nNumero canales:          "; .channels
    Print "Frecuencia:              "; .rate; " hertz"
    Print "Bitrate nominal:         "; .bitrate_nominal \ 1000; " Kbps"
  End With
  Print "Tamaño total:            "; ov_raw_total(ovf, -1); " byte (comprimidos)"
  Print "Tamaño pcm:              "; ov_pcm_total(ovf, -1); " byte (pcm)"
  Print "\nDuración:                "; Date(0, 0, 0, 0, 0, 0, ov_time_total(ovf, -1) * 1000)
  
  With comm = ov_comment(ovf, 0)
    If .comments > 0 Then
      Print "\nVendor:                  "; String@(.vendor)
      Print "\nComentarios:"
      For n = 0 To .comments - 1
        Print String@(Pointer@(comm.user_comments + (8 * n)))
      Next
    Endif
  End With
  
  ov_clear(ovf)

End

 



 
última edición por vuott el Domingo, 05 Agosto 2018, 01:07; editado 3 veces 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Obtener Informaciones De Un Archivo Audio OggVorbis 
 
vuott escribió: [Ver mensaje]
Para los mis hermanos neo-latinos dejo este codigo para obtener informaciones de un archivo audio OggVorbis, usando los recursos de la libreria externaI de "libvorbisfile.so".  

Library "libvorbisfile"

Public Struct vorbis_info
  version As Integer
  channels As Integer
  rate As Long
  bitrate_upper As Long
  bitrate_nominal As Long
  bitrate_lower As Long
  bitrate_window As Long
  codec_setup As Pointer
End Struct

Public Struct vorbis_comment
  user_comments As Pointer
  comment_lengths As Pointer
  comments As Integer
  vendor As Pointer
End Struct

' int ov_fopen(const char *path,OggVorbis_File *vf)
' Initializes an OggVorbis_File structure
Private Extern ov_fopen(path As String, vf As Byte[]) As Integer

' vorbis_info *ov_info(OggVorbis_File *vf,int link)
' Returns the vorbis_info struct for the specified bitstream.
Private Extern ov_info(vf As Byte[], olink As Integer) As Vorbis_info

' ogg_int64_t ov_raw_total(OggVorbis_File *vf,int i)
' Returns the total (compressed) bytes.
Private Extern ov_raw_total(vf As Byte[], i As Integer) As Long

' ogg_int64_t ov_pcm_total(OggVorbis_File *vf,int i)
' Returns the total pcm samples.
Private Extern ov_pcm_total(vf As Byte[], i As Integer) As Long

' double ov_time_total(OggVorbis_File *vf,int i)
' Returns the total time in seconds.
Private Extern ov_time_total(vf As Byte[], i As Integer) As Float

' vorbis_comment *ov_comment(OggVorbis_File *vf,int link)
' Returns a pointer to the vorbis_comment struct for the specified bitstream.
Private Extern ov_comment(vf As Byte[], olink As Integer) As Vorbis_comment

' int ov_clear(OggVorbis_File *vf)
' Clears the decoder's buffers.
Private Extern ov_clear(vf As Byte[]) As Integer


Public Sub Main()

  Dim ogg As String
  Dim ovf As New Byte[944]
  Dim info As Vorbis_info
  Dim comm As Vorbis_comment
  Dim n As Integer
 
    ogg = "/ruta/del/archivo.ogg"
  
  n = ov_fopen(ogg, ovf)
  If n <0> 0 Then
      Print "\nVendor:                  "; String@(.vendor)
      Print "\nComentarios:"
      For n = 0 To .comments - 1
        Print String@(Pointer@(comm.user_comments + (8 * n)))
      Next
    Endif
  End With
  
  ov_clear(ovf)

End


una sugerencia, poner el link al archivo fuente c++ de la librería.
estos ejemplos que vos pones están bueno por el tema de conectarse a librerías no de gambas.
 




===================
Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
 
v3ctor - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Obtener Informaciones De Un Archivo Audio OggVorbis 
 
v3ctor escribió: [Ver mensaje]
una sugerencia, poner el link al archivo fuente c++ de la librería.

La libreria está escrita en C (no C++).
Puedes ver sus file header aquì:
/usr/include/vorbis/vorbisfile.h
/usr/include/vorbis/codec.h

Referencias:
https://xiph.org/vorbis/doc//
http://www.fifi.org/doc/libvorbis-dev/vorbisfile/



v3ctor escribió: [Ver mensaje]
estos ejemplos que vos pones están bueno por el tema de conectarse a librerías no de gambas.

No comprendo lo que quieres decir.       
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Obtener Informaciones De Un Archivo Audio OggVorbis 
 
v3ctor:
Citar:
    
estos ejemplos que vos pones están bueno por el tema de conectarse a librerías no de gambas.


Vuott:
Citar:

No comprendo lo que quieres decir.      
 


Seguro que lo entendiste. Pues por ser breve, que es bueno que desde gambas se puedan acceder a recursos
de otros lenguajes que no son del propio Gambas.

A mi me gustaría que fueran desde el propio gambas. Pero esto habría que verlo desde distintos puntos de vista.

- "El recurso". ( Como algo general)
- La forma desde la que accedemos.

Si lo comparásemos con la cocina.

- Podíamos tener los ingredientes.
- Las forma de llegar a hacer algo según el cocinero y su manera de preparar el plato.

  

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Obtener Informaciones De Un Archivo Audio OggVorbis 
 
Shell escribió: [Ver mensaje]
A mi me gustaría que fueran desde el propio gambas. Pero esto habría que verlo desde distintos puntos de vista.


Tenemos que recuerdar que los "Componentes" de gambas, son realizados a partir de librerias escritas en C o C++.
Cuando nosotros usamos los recursos de los Componientes gambas, por ejemplo gb.qt4, nosotros creemos de utilizar un recurso exclusivamente "gambas", ... y en cambio nosotros usamos recursos, escritos en lenguaje C o C++, a través de un "medio" que se llama "gambas".

Yo tambien usaré un ejemplo práctico:
cuando somos a la guía de un coche, para cambiar dirección nosotros no actuamos directamente en las ruedas, sino en aparatos e instrumentos (como el volante), y sólo de esta manera, indirectamente, en las ruedas.

Actualmente, Gambas no tiene un Componente que utiliza directamente las librerias de Ogg-Vorbis, y por esto nosotros solo podemos...:

1) realizar un nuestro nuevo Componente partendo de las librerias de Ogg-Vorbis. Este Componente luego debe ser instalado en el nuestro sistema. Asì podemos usar libreria de Ogg-Vorbis de manera gambera.

2) o utilizar un recurso "de" gambas... "gambero", "desde el proprio gambas" (como has dicho), que se llama Extern, para usar las funciones externas de Ogg-Vorbis.

De nuevo: perdonad, no comprendo el problema....  


De todas formas, conociendo la estructura interior de un archivo, podemos usar - en y para este caso - solo recursos "gambas":    

http://www.gambas-it.org/wiki/index...zioni_di_Gambas
 



 
última edición por vuott el Domingo, 05 Agosto 2018, 15:47; editado 2 veces 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Obtener Informaciones De Un Archivo Audio OggVorbis 
 
Vuott:

Tenemos componentes hechos en C/C++ y otros hechos en Gambas.
Que por medio de un método se llame a una función en C/C++ que esta dentro de un componente hecho en este lenguaje,
pues es de lo más corriente.

A ver si ahora no estamos programando en gambas y solo estamos llamando a C/C++.  

Citar:

De nuevo: perdonad, no comprendo el problema....


Demasiado "C/C++" por lo que veo...mucho empacho.  

Citar:

De todas formas, conociendo la estructura interior de un archivo, podemos usar - en y para este caso - solo recursos "gambas":




Cuanta cadena en gambas. Mucho más breve en "C", las llamadas a "C/C++" deben ser lo más precisa y contadas o el maligno te robará el alma!.  
( Es que seria más "C" que gambas ).  

Pero mira que son raras las funciones externas.

Como diría "Marcelino". Al pan pan y al vino vino.  

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Obtener Informaciones De Un Archivo Audio OggVorbis 
 
Vuott:

Por cierto. Si quieres conocer aplicaciones de audio...puedes ver estas.  

https://wiki.python.org/moin/PythonInMusic

Siempre puedes encontrar algo de información.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Obtener Informaciones De Un Archivo Audio OggVorbis 
 
Shell escribió: [Ver mensaje]
Cuanta cadena en Gambas.

Ahora he renovado y simplificado totalmente el código.



Shell escribió: [Ver mensaje]
A ver si ahora no estamos programando en gambas y solo estamos llamando a C/C++.

Realmente creéis que, al llamar una función externa con Extern, estamos programando en C ?
 

 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Obtener Informaciones De Un Archivo Audio OggVorbis 
 
Vuott:

Citar:

Realmente creéis que, al llamar una función externa con Extern, estamos programando en C ?


 

Tan solo es una manera de llegar a un recurso que el lenguaje propiamente el solo no puede y usa
otros medios. Programando en gambas, claro.  

Se diferencia de Shell o Exec. Extern no suelo usarlo mucho. Alguna practica por curiosidad, pero
esto va junto a "C". Como curiosidad esta bien. Pero para un gambero que no conoce "C" pues
no sabe ni que existe esos métodos del lenguaje "C". ( De una librería concreta de este ).

Particularmente prefiero hacerlo en "C". Es que primero necesitaría hacerlo en este como punto de partida.

P.d ¿ Para cuando el exorcismo ?. A ver si logramos sacar ese demonio del "C"...
Fiesta de la espuma, fiesta de la espuma!.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Obtener Informaciones De Un Archivo Audio OggVorbis 
 
Toda esta discusión sobre el empleo de "Extern" (recurso de gambas) con funciones externas solo es "académica": si tuvierais que realizar un programa por dinero, no os pondríais el problema de como alcanzar el objetivo.  
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 

Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron