Donc, je construis un décodeur IMA ADPCM fileté en streaming de données audio à OpenAL (voir ci-dessous pour une description courte) mais j'ai eu des problèmes.OpenAL: alBufferData renvoie AL_INVALID_VALUE même si les variables d'entrée * ont l'air * OK?
Un de mes problèmes est que parfois mon appel à alBufferData:
alBufferData(*bufferID, format, pcmData, sizeInBytes, bitRate);
retours AL_INVALID_VALUE
même si, lors de la vérification des paramètres qu'ils regardent, par exemple, comme ceci:
bufferID='109770616', format='AL_FORMAT_STEREO16', dataPtr='109754188', sizeInBytes='8164'
Des indices, quelqu'un? Le son réel est joué en quelque sorte de bégaiement quand cela se produit, et l'erreur se produit généralement ~ 10 fois de suite (sur le même son). Il arrive aussi souvent quand je commence à plusieurs reprises le même son (par exemple lors de la prise de courtes rafales avec un LMG ...;))
visite rapide et simplifiée du streaming module décodeur-chose
Comment un son est joué:
- Un son est déclenché.
- Une valeur bufferSize d'audio est décodée et le reste est mis en file d'attente pour un décodage ultérieur.
- OpenAL est déclenché pour lancer la lecture du son.
Le décodage/boucle en continu
- Pour chaque son mis en attente pour le décodage, décoder une valeur de bufferSize audio.
- L'audio décodé est ajouté à un alBuffer (voir l'appel ci-dessus) avec le bufferID approprié.
Est-ce que nombre entier auquel les points bufferID ont un id de tampon valide? Avait-il été créé avec alGenBuffers? –
La valeur bufferID ressemble beaucoup à la valeur dataPtr. Il est donc plus probable que ce soit un pointeur. Imprimez-vous bufferID ou * bufferID? Je suis plus intéressé par * bufferID. –
Ignorer le commentaire ci-dessus, j'ai été trop lent à l'édition: Hiya @ Mārtiņš! La valeur de 'bufferID' est la valeur indiquée ci-dessus (" 109770616 "). Le bufferID est généré et utilisé comme suit: 'alGenBuffers' ->' alBufferData' -> 'alSourceQueueBuffers'. Je vérifie continuellement les tampons traités avec 'alGetSourcei (sID, AL_BUFFERS_PROCESSED, & processedBuffers)' et réutilise le bufferID traité en le désanchant avec 'alSourceUnqueueBuffers' et le recharge avec' alBufferData' à nouveau. – happytrooper