Obtener Informaciones De Un Archivo Audio OggVorbis


Ir a la página 1, 2  Siguiente

Objetivo: 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
Perfil MP  
Objetivo: 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.

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

Perfil MP  
Objetivo: 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

Objetivo: 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
Perfil MP  
Objetivo: 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

Objetivo: 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

Objetivo: 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 ?


Perfil MP  
Objetivo: 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

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

Perfil MP  
Ir a la página 1, 2  Siguiente

Página 1 de 2


  
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

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.1754s (PHP: -2% SQL: 102%)
Consultas SQL: 25 - Debug off - GZIP Activado