ALSA: les Moyens de prévenir contre les ruptures de pour haut-parleur

Je suis de la lecture d'un seul canal audio en non-mode entrelacé. Je suis contre les ruptures quand je suis en train d'écrire des données audio en haut-parleur : ALSA lib pcm.c:7339:(snd_pcm_recover) underrun occurred

Voici comment j'écris:

    printf("%d",snd_pcm_avail (spkhandle));  
    ret = snd_pcm_writen(spkhandle, pSpeakerBuf , framesIn18Millisec);
    if(ret < 0)
    {
        snd_pcm_recover(spkhandle, ret, 0);
    }

Quelles sont les différentes façons/paramètres de configurations pour éviter ALSA en vertu de l'exécuter ?

(Je suis sous Linux 3.0, BRAS )

Edit:
Voici un tampon de mesure à l'aide de snd_pcm_avail() de l'API

      snd_pcm_avail = 2304      << snd_pcm_writen call 1 success
      snd_pcm_avail = 2160      << snd_pcm_writen call 2 success
      snd_pcm_avail = 2016      << snd_pcm_writen call 3 success
      snd_pcm_writen error -32 Broken pipe  << snd_pcm_writen call 4 failure
      ALSA lib pcm.c:7339:(snd_pcm_recover) underrun occurred  << And displays this message

Ici est la sortie que Marko a demandé:

snd_output_t* out;
....
//Do alsa parameters init .... 
....
snd_output_stdio_attach(&out, stderr, 0);
snd_pcm_dump_sw_setup(spkhandle, out);

  tstamp_mode  : NONE
  period_step  : 1
  avail_min    : 144
  period_event : 0
  start_threshold  : 288
  stop_threshold   : 2304
  silence_threshold: 0
  silence_size : 0
  boundary     : 1207959552
A votre fil obtenu priorité d'ordonnancement temps réel?
Oui, j'ai donné de planification en temps réel des priorités SCHED_FIFO.
Quelle est votre période tampon relative de la période de notification?
Je suis nouveau sur alsa. J'écris 18 millisecondes audio en un seul haut-parleur de canal (comme à mon habitude système intégré de demandes de 18ms). Comme vous pouvez le voir dans la question, snd_pcm_avail diminue de 144 octets. Comment faire pour éviter cela ?
Vous vous attendez à l'espace disponible pour les échantillons dans la mémoire tampon à une diminution de l'écriture en elle - mais en un peu plus de 144 images pour 18ms. Pourriez-vous mettre un appel à snd_pcm_dump_sw_setup() dans votre code quelque part avant que démarre l'audio, et de partager la sortie de la console avec nous?

OriginalL'auteur Lunar Mushrooms | 2013-01-30