Le sens de la période d'ALSA
Je suis en utilisant ALSA pour et application audio sur Linux, j'ai trouvé beaucoup de docs d'expliquer comment l'utiliser : Un et cette une. bien que j'ai quelques problèmes pour comprendre cette partie de l'installation :
/* Set number of periods. Periods used to be called fragments. */
if (snd_pcm_hw_params_set_periods(pcm_handle, hwparams, periods, 0) < 0) {
fprintf(stderr, "Error setting periods.\n");
return(-1);
}
ce qui signifie un nombre de période où je suis en utilisant le mode de LECTURE
et :
/* Set buffer size (in frames). The resulting latency is given by */
/* latency = periodsize * periods /(rate * bytes_per_frame) */
if (snd_pcm_hw_params_set_buffer_size(pcm_handle, hwparams, (periodsize * periods)>>2) < 0) {
fprintf(stderr, "Error setting buffersize.\n");
return(-1);
}
et la même question ici à propos de la latence , comment dois-je le comprendre?
OriginalL'auteur Engine | 2014-06-04
Vous devez vous connecter pour publier un commentaire.
Je suppose que vous avez lu et compris cette section linux-revue. Vous pouvez également trouver que ce blog clarifier les choses à l'égard de la période de sélection de la taille (ou un fragment dans le blog) dans le contexte de ALSA. Pour citer:
Donc, essentiellement, en général, vous définissez
period
à 2 (comme cela a été fait dans le howto vous de référence). Puisperiodsize * period
est votre taille de la mémoire tampon en octets. Enfin, la la latence est le délai qui est induite par la mise en mémoire tampon de nombreux échantillons, et peut être calculée en divisant la taille de la mémoire tampon par la vitesse à laquelle les échantillons sont lus (ie. selon la formulelatency = periodsize * periods /(rate * bytes_per_frame)
dans les commentaires dans le code).Par exemple, les paramètres de la howto:
correspondent à un total taille de la mémoire tampon de
period * periodsize = 2 * 8192 = 16384
octets, et un temps de latence de 16384 /(44100 * 4) ~ 0.093` secondes.Note également que votre matériel peut avoir certaines limites de taille pour les prises en charge de la période de la taille (voir ce guide de dépannage)
OriginalL'auteur SleuthEye
Lorsque l'application tente d'écrire des échantillons dans la mémoire tampon, si la mémoire est déjà pleine, le processus va se coucher. Il obtient réveillé par le matériel, par le biais d'une interruption; cette interruption est déclenchée à la fin de chaque période.
Il devrait y avoir au moins deux périodes par tampon; sinon, la mémoire tampon est déjà vide lors d'un réveil qui se passe, ce qui entraîne une sous-utilisation.
L'augmentation du nombre de périodes (c'est à dire, la réduction de la période de la taille) augmente la marge de sécurité contre le vide causé par la planification ou de retards de traitement.
Le temps de latence est simplement proportionnelle à la taille de la mémoire tampon: lorsque vous remplissez complètement le tampon, le dernier échantillon est écrit est joué par le matériel qu'après que tous les autres échantillons ont été jouées.
OriginalL'auteur CL.