2012-04-15 4 views
1

Comment obtenez-vous la position actuelle d'une source de jeu dans openal? Je suppose que je veux dire, quelle position dans l'audio joue actuellement sur le matériel après avoir traversé vos tampons, tampons d'openal, les tampons de matériel, etcopenal: Obtenir la position de lecture actuelle d'une source

J'ai eu un bref aperçu de l'API mais je suis pas tout à fait sûr de ce que AL_SAMPLE_OFFSET/AL_BYTE_OFFSET/AL_SEC_OFFSET sont censés représenter. Si je joue une source de streaming, je ne semble pas obtenir un nombre en constante augmentation, il semble que je reçois une position dans le tampon de lecture en cours? (Ou de tous les tampons?)

par exemple, tout en jouant, je boucle et exécuter ce code:

alGetSourcef(sources[0], AL_SAMPLE_OFFSET, &secoffset); 
printf(" - %f samples\n", secoffset); 

et obtenir

- 0.000000 samples 
- 8192.000000 samples 
- 9216.000000 samples 
- 5632.000000 samples 

qui ne semble pas augmenter.

Ceci est sur macos 10.7 avec le dernier xcode 4.3 mais je suppose qu'il devrait être similaire sur d'autres plates-formes.

mise à jour:

J'ai essayé d'augmenter la taille de la mémoire tampon et il ne semble vraiment comme sa seule la position actuelle dans la mémoire tampon en cours de lecture:

- 0.000000 bytes 
- 18432.000000 bytes 
- 20480.000000 bytes 
- 36864.000000 bytes 
- 36864.000000 bytes 
- 55296.000000 bytes 
- 55296.000000 bytes 
- 73728.000000 bytes 
refilling buffer 2408 
re-queued buffer 2408 
- 16384.000000 bytes 
- 34816.000000 bytes 
- 34816.000000 bytes 
- 51200.000000 bytes 
- 51200.000000 bytes 
- 69632.000000 bytes 
refilling buffer 2409 
re-queued buffer 2409 

Donc, étant donné que, est-il décent façon de garder la trace que joue ouvert à travers plusieurs tampons différents?

Répondre

1

Ces décalages proviennent du début des tampons en file d'attente. Vous devez compter manuellement la taille des tampons non mis en file d'attente et les ajouter à ce nombre.

Ici, si vous lisez le documentation, il est dit à la page 40:

La position est par rapport au début de tous les tampons en attente pour la source, et tout mis en attente des tampons traversés par un appel jeu sera marqué comme étant traité.

+0

Merci pour cela. Je n'ai pas lu les spécifications plus tard (j'ai supposé que le guide de programmation serait suffisant). –

Questions connexes