2017-08-08 2 views
0

J'utilise NAudio pour coder un logiciel en C# et im en utilisant BufferedWaveProviderComment savoir que le tampon est complètement lu dans NAudio

var bufferedWaveProvider = new BufferedWaveProvider(new WaveFormat(16000, 16, 2)); 
// AddSamples here 
WaveOut wavPlayer = new WaveOut(); 
wavPlayer.Init(bufferedWaveProvider); 
wavPlayer.Play(); 

Comment puis-je savoir que le tampon est complètement lu, ou la position exactement à présent. Depuis wavPlayer.Play() ont été appelés, comment puis-je obtenir la position actuelle. Merci.

Répondre

0

L'interface IWavePosition peut être utilisée pour vous dire combien d'audio (en octets) a été joué jusqu'à présent par WaveOut - il suffit d'appeler GetPosition().

Comme pour BufferedWaveProvider, si vous définissez ReadFully=false, la lecture s'arrêtera automatiquement lorsque vous atteindrez la fin de l'audio mis en mémoire tampon. Vous pouvez également vérifier la propriété BufferedBytes pour voir la quantité d'audio en file d'attente à lire

+0

Hi Mark. Merci pour votre réponse. J'utilise IWavePosition mais j'ai rencontré un problème que bien que AddSamples, j'ajoute seulement 4096 octets, cela signifie que BufferedBytes est 4096 mais quand j'appelle la fonction GetPosition(), les valeurs de retour sont 9600. Je pense que la valeur retournée doit toujours être plus petit que 4096. Chaque fois que j'ajoute des échantillons avec 4096 octets, mais la valeur retournée de GetPosition() est trop grande. Ou ma pensée était erronée. Confirmez-le s'il vous plaît. Je vous remercie. –

+0

BufferedWaveProvider est configuré par défaut pour continuer à jouer en mode silence une fois épuisé. GetPosition renverra des montants de plus en plus importants, que vous appeliez ou non AddSamples –

+0

Hi Mark. Je suis implémentation par 2 tâches (asynchrones). Le premier est utilisé pour gérer les données et utiliser AddSample pour ajouter des données au tampon. Chaque fois 4096 octets. l'autre est utilisé pour jouer du son. La première fois que j'ajoute un échantillon avec 4096, lorsque l'onde est lue au 3000ème octet, j'ajouterai 4096 octets. Le processus est Add-Read-Add-Read ... mais le son doit être fluide. J'ai donc besoin de la position exacte (quand l'onde sort de 3000th byte pour ajouter plus de 4096 octets) de la waveout depuis que j'ai appelé waveout.Play(). Donc, avec NAudio, puis-je résoudre ce problème. Merci. –