2014-09-03 3 views
2

Je veux capturer de l'audio sous Linux avec une faible latence dans un programme que j'écris.Capture du son sur Linux avec une faible latence

J'ai effectué quelques expériences en utilisant l'API ALSA, en utilisant le son de capture snd_pcm_readi() to , puis en utilisant immédiatement snd_pcm_writei() pour le lire.

J'ai essayé de jouer avec le nombre d'images capturées, et la taille de la mémoire tampon, mais je ne semble pas être en mesure d'obtenir la latence à moins d'une seconde ou plus.

Vaut-il mieux utiliser PulseAudio ou JACK? Est-ce que ceux-ci peuvent être utilisés pour lire l'audio capturé ?

+0

Aussi, Est-ce que snd_pcm_mmap ALSA ... fonctions d'améliorer la latence? –

Répondre

0

Pour réduire la latence de capture, réduisez la taille de période du périphérique de capture. Pour réduire la latence de la lecture, réduisez la taille de la mémoire tampon de l'appareil de lecture. Jack peut lire l'audio capturé (il suffit de connecter les ports d'entrée aux ports de sortie), mais vous devez toujours configurer ses périodes/tampons.

Voir aussi Relation between period size of speaker and mic et Recording from ALSA - understanding memory mapping.

0

Je l'ai fait un peu de travail sur la programmation audio faible latence,

Mon expérience est, d'abord, votre mémoire tampon de capture doit être petit, comme tampon 10ms période. (Supposons que vous utilisez 512 frame buffer, et 48000 fréquence d'échantillonnage). Ensuite, vous devez configurer votre périphérique de sortie start_threshold à au moins 2 * taille de trame (1 * taille de trame si vous n'avez pas beaucoup de processus de données enregistrées).

Pour périphérique d'enregistrement, comme CL. dit, utilisez une petite taille de période relative est mieux, mais pas trop petit pour éviter trop irq.

En outre, vous pouvez modifier votre planification de processus en horaire FIFO.

Puis, espérons-le, vous obtiendrez environ 20ms de latence totale.

0

Je crois que vous devriez d'abord vous assurer que vous utilisez un noyau Linux qui vous permet réellement d'obtenir une faible latence typique.

Il y a plusieurs options de configuration à la compilation du noyau que vous pouvez regarder dans:

  • CONFIG_HZ_1000
  • CONFIG_IRQ_FORCED_THREADING
  • CONFIG_PREEMPT
  • CONFIG_PREEMPT_RT_FULL (disponible uniquement avec le patch RT)

En dehors de cela, il y a plus de que vous pouvez faire pour optimiser votre latence audio sous Linux. Quelques points de référence de départ se trouvent là:

http://wiki.linuxaudio.org/wiki/real_time_info

Questions connexes