Les Javadoc for DataLine.flush() étatsRedémarrage d'un objet de clip - méthode flush()
Flushes données en file d'attente à partir de la ligne. Les données vidées sont ignorées. Dans certains cas, toutes les données mises en file d'attente ne peuvent pas être supprimées. Par exemple, un mélangeur peut vider des données du tampon pour une ligne d'entrée spécifique, mais toutes les données non jouées déjà dans le tampon de sortie (le résultat du mixage) seront toujours lues. Vous pouvez appeler cette méthode après avoir mis en pause une ligne (le cas normal) si vous voulez ignorer les données "périmées" lorsque vous redémarrez la lecture ou la capture. (Il est légal de vider une ligne qui est pas arrêté, mais cela sur une ligne active est susceptible de provoquer une discontinuité dans les données, résultant en un clic perceptible.)
Qu'est-ce que cela signifie exactement?
En outre, pour le redémarrage d'un objet Clip
, beaucoup de gens sur ce site a suggéré d'utiliser ceci:
clip.stop();
clip.setFramePosition(0);
clip.start();
Lorsque vous utilisez le code ci-dessus, je remarquai qu'un clip d'échantillon (qui est d'environ 15 secondes si ce qui compte) ne redémarre pas au début et est incohérent dans sa "position de redémarrage". Cependant, quand j'ai essayé
clip.stop();
clip.flush();
clip.setFramePosition(0);
clip.start();
Le clip a fonctionné parfaitement et a redémarré dès le début du son. Ma question est, qu'est-ce que la méthode flush() fait pour réparer mon précédent problème? Aussi, pourquoi ai-je eu le problème en premier lieu?
@Kootling Avez-vous lu ma réponse? Est-ce que cela répond à votre question? Y a-t-il encore quelque chose que tu ne comprends pas? – Radiodef
Je vois, merci. Quelle est la durée du tampon habituellement? – Kootling
Cela dépendra de l'implémentation. Vous pouvez le découvrir avec ['getBufferSize'] (http://docs.oracle.com/javase/8/docs/api/javax/sound/sampled/DataLine.html#getBufferSize--). Certaines surcharges de 'open' vous permettent également de le spécifier. J'ai balancé dans le code source et il semblerait que la valeur par défaut (trouvée dans 'com.sun.media.sound.AbstractDataLine') est dimensionnée à tout ce que 500ms d'audio serait pour le format donné. – Radiodef