2011-03-11 4 views
1

J'ai deux poignées de waveout dans mon code qui jouent en parallèle.waveOutSetVolume ignorant le handle

Maintenant, je veux régler un volume différent pour chaque poignée de waveout.

Il y a une fonction waveOutSetVolume de win32api: http://msdn.microsoft.com/en-us/library/ms713762%28v=vs.85%29.aspx

Le problème est qu'il ne tient pas compte de la poignée completly j'envoyer, ce réglage du volume pour toutes les poignées WaveOut dans mon programme. Comment faire pour régler le volume à la poignée de waveout spécifique?

+1

Ceci est par nature, le handle que vous passez à waveOutSetVolume est un handle * device *, pas un handle de flux. –

Répondre

1

Je suppose que vous écrivez sur le même périphérique.

Pour régler le volume de chaque flux de diffusion, écartez les échantillons audio avant de les écrire sur l'appareil.

Gardez également à l'esprit qu'il est inutile d'utiliser deux poignées de périphérique pour mélanger efficacement vos flux de lecture. C'est trivial de le faire dans votre code.

+0

J'ai besoin de mixer en temps réel avec un minimum de retard. Mélange/changement de volume avant d'écrire sur l'appareil créant un retard notable. – DxCK

+0

Quelle est la latence que vous visez? Changer le volume (en mettant à l'échelle les échantillons audio) ne nécessite pas de mise en mémoire tampon, donc aucune latence supplémentaire. Si vous mélangez, vous pouvez garder la taille de la mémoire tampon faible et minimiser la latence. Si vous avez besoin d'une latence minimale absolue, jetez un coup d'œil à Kernel Streaming. – Nikos