Foros - Stratos

Programadores => Programación de audio => Mensaje iniciado por: Georg en 11 de Enero de 2009, 11:15:41 PM

Título: Obtener información de un sonido con OpenAL
Publicado por: Georg en 11 de Enero de 2009, 11:15:41 PM
Hola, estoy haciendo un engine de sonido pero necesito obtener cierta información sobre el sonido que se reproduce actualmente.
Especificamente, necesito obtener la longitud total del sonido en milisegundos y la posición actual de reproducción ( por ejemplo: Reproducidos 1000 de 50000 milisegundos)
Gracias de antemano
Título: Re: Obtener información de un sonido con OpenAL
Publicado por: AK47 en 12 de Enero de 2009, 08:33:43 AM
La duracion del sonido lo puedes obtener con los datos de cuanto ocupa el buffer, cual es la frecuencia de los datos, su numero de bits y sus canales. Lo de por donde va la reproduccion en curso ya ni idea, supongo que habra alguna funciona para ello
Título: Re: Obtener información de un sonido con OpenAL
Publicado por: H-K en 12 de Enero de 2009, 10:47:23 AM
Para obtener la posición actual, mírate las propiedades AL_SEC_OFFSET, AL_BYTE_OFFSET y AL_SAMPLE_OFFSET (las puedes consultar mediante funciones alGetSource_). Según la resolución que quieras tener, te vendrá mejor una u otra. Aunque por lo que he visto, las posiciones sólo se actualizan cada 25 ms, así que no sé si tiene mucho sentido querer tener tanta precisión.

Otro detalle, así directamente ésto sólo vale para samples. Para streams tendrás que currarte alguna manera de llevar la cuenta del tiempo de reproducción "a mano".

Saludos!
Título: Re: Obtener información de un sonido con OpenAL
Publicado por: Prompt en 15 de Enero de 2009, 09:24:59 PM
Si haces streaming del archivo y doble buffering sabes el offset ya que eres tu quien alimenta el buffer de OpenAL directamente. Sino haz lo que dice H-K :)
Título: Re: Obtener información de un sonido con OpenAL
Publicado por: Georg en 19 de Enero de 2009, 08:42:26 PM
Gracias por responder, me han servidon las soluciones de AK47 y H-K. El AL_BYTE_OFFSET también me sirvió para ir a una posición determinada mediante alSourcei().