2009-11-26 13 views
2

Contexte: J'ai un morceau de code qui connaît la valeur d'un handle waveOut (HWAVEOUT). Cependant le code n'a pas créé le handle, ainsi le WAVEFORMATEX qui a été passé à waveOutOpen lors de la création du handle est inconnu.Format d'onde de requête pour un handle HWAVEOUT

Je souhaite connaître le contenu de cette structure WAVEFORMATEX qui a été transmise à l'appel waveOutOpen.

Plus de détails où cela est utilisé: Le code s'exécute dans une fonction de hook invoquée à la place de waveOutWrite. Ainsi, le code connaît la valeur du handle, mais ne connaît pas les détails de la création du handle.

Juste pour que les gens ne ont pas besoin de le chercher:
La signature de waveOutOpen est

MMRESULT waveOutOpen(
    LPHWAVEOUT phwo, 
    UINT uDeviceID, 
    LPWAVEFORMATEX pwfx, 
    DWORD dwCallback, 
    DWORD dwInstance, 
    DWORD fdwOpen 
); 

La signature de waveOutWrite est:

MMRESULT waveOutWrite(
    HWAVEOUT hwo, 
    LPWAVEHDR pwh, 
    UINT cbwh 
); 

Note: Je suis également accrochage waveOutOpen , mais il pourrait déjà être appelé avant que j'ai un crochet.

Répondre

0

Vous accédez à l'élément pwfx de la structure waveOutOpen comme vous le feriez pour n'importe quelle autre structure.

myWaveOutOpen.pwfx.wFormatTag 

Ou le format équivalent dans votre langue.

Votre question est difficile à comprendre. Je ne suis pas sûr de ce que tu veux ...?

+0

Cela fait partie d'un projet qui utilise des API waveOut pour capturer le son en cours de lecture. Les paramètres de l'onde en cours de lecture peuvent être obtenus en interceptant waveOutOpen. Cependant, il y a un cas où l'appel à waveOutOpen ne serait pas intercepté (c'est-à-dire quand l'accrochage se produit après l'appel à waveOutOpen). HTH. Dan –

1

Vous ne pouvez pas obtenir cette information de l'API d'onde. Vous devrez l'obtenir de quiconque a ouvert le dispositif d'onde.

Vous pouvez obtenir le taux de lecture en utilisant waveOutGetPlaybackRate(), et sachant que, vous pouvez (en théorie) connaître la taille de la cellule en chronométrant combien de temps il faut pour lire un tampon de taille connue. (0 est toujours le silence) Mais la stéréo 8 bits finira par prendre le même temps de lecture en 16 bits mono. même avec float/32 bits mono et 16 bits stéréo. Je dirais que 99% du temps stéréo 16 bits sera la bonne réponse, mais quand vous devinez faux, le résultat sonne vraiment mauvais (et fort!) Alors deviner peut ne pas être une bonne idée.

Vous pouvez également utiliser waveOutMessage() pour envoyer des messages personnalisés au Wave Driver. Il est possible qu'il y ait un message custom_query_wave_format, mais il n'y a pas de message comme celui défini dans la norme. Il est supposé que quiconque a ouvert le dispositif d'onde gardera la trace de quel format (s) il l'a ouvert avec.

+0

Bonne réponse, +1, je vais essayer. Si cela convient à mes besoins, je l'accepterai bientôt. Merci. Dan. –