2010-06-28 19 views
3

J'essaye d'écrire un programme pour jouer un petit fichier .wav en C++. Je l'ai programmé après les documents DirectX SDK pour écrire et jouer sur un tampon statique secondaire. Il fonctionne correctement, sauf qu'à la fin de la lecture pour tout fichier .wav, il y a un bruit "clic" très visible. Je suis certain que ce n'est pas un défaut sur ma partie de matériel audio parce que tout autre jeu que je sais utilise DirectSound ne l'a pas.Lecture "cliquant" bruit

J'ai essayé d'interroger GetCurrentPosition pour chaque cycle et de l'arrêter juste avant sa fin mais n'était pas fiable. Je ne peux pas le lire sur un buffer primaire car les .wav joués sur les tampons primaires doivent être bouclés, ce que je ne veux pas.

Quelqu'un connaît-il une solution à ce problème? Merci d'avance.

+0

Cela fait longtemps que je n'ai pas fait de programmation DirectSound, mais si ma mémoire est bonne, je pense que cela indique généralement un tampon en cours de lecture. Générez-vous le WAV à la volée? Si oui, pouvez-vous modifier votre code de lecture pour accepter un WAV que vous savez ne pas avoir un clic à la fin pour vérifier que votre code de lecture est suffisant et ne pas en quelque sorte introduire le clic? –

Répondre

4

Nous aurions besoin de voir à la fois le fichier WAV en question et le code pour charger le fichier WAV dans le tampon sonore. Mais voici quelques suppositions. Ma première hypothèse est que si nous chargions le fichier WAV que vous avez dans un éditeur audio visuel, nous verrions le son s'arrêter brusquement au lieu de se réduire au silence. Cela se traduirait par un bruit "popping" abrupte avec presque n'importe quel lecteur audio. Ma deuxième supposition est que vous copiez des données parasites dans le tampon sonore à la fin. Certains fichiers WAV ont des métadonnées supplémentaires à la fin du fichier après la fin du bloc DATA. Je ne sais pas comment vous avez déterminé les positions dans le fichier audio pour copier des échantillons, mais il est facile de gâcher cela. Avez-vous inspecté le fichier WAV avec un éditeur hexadécimal (comme Visual Studio) pour confirmer que la longueur du segment DATA est aussi grande qu'elle le prétend? Lorsque vous déboguez l'appel ReadFile pour copier les données du fichier dans le tampon, avez-vous inspecté les derniers octets de votre tampon correspondent à ce que vous avez vu dans l'éditeur hexadécimal?

+0

Votre première supposition était correcte, le wav avait une fin abrupte et après l'avoir éteint pour faire taire le bruit de cliquetis a disparu. Il y avait aussi un bruit de cliquetis au départ que j'ai remarqué par la suite, et le problème était que je chargeais aussi dans le bloc fmt dans le tampon. Après avoir déterminé que tout fonctionne exactement comme je le voulais, sans clics. Merci beaucoup pour votre soutient. – kaykun