]> code.delx.au - gnu-emacs/blobdiff - src/sound.c
Merge from emacs--devo--0
[gnu-emacs] / src / sound.c
index 2ceefd3bce39451e634d25d29de5dfd41a5c41f3..6f955a7d69141cfe875b1440959caac0b1fb5aae 100644 (file)
@@ -113,7 +113,8 @@ enum sound_attr
   SOUND_ATTR_SENTINEL
 };
 
-static void sound_perror P_ ((char *));
+static void alsa_sound_perror P_ ((char *, int)) NO_RETURN;
+static void sound_perror P_ ((char *)) NO_RETURN;
 static void sound_warning P_ ((char *));
 static int parse_sound P_ ((Lisp_Object, Lisp_Object *));
 
@@ -971,7 +972,8 @@ alsa_open (sd)
   sd->data = p;
 
 
-  if ((err = snd_pcm_open (&p->handle, file, SND_PCM_STREAM_PLAYBACK, 0)) < 0)
+  err = snd_pcm_open (&p->handle, file, SND_PCM_STREAM_PLAYBACK, 0);
+  if (err < 0)
     alsa_sound_perror (file, err);
 }
 
@@ -988,37 +990,48 @@ alsa_configure (sd)
      struct sound_device *sd;
 {
   int val, err, dir;
+  unsigned uval;
   struct alsa_params *p = (struct alsa_params *) sd->data;
   snd_pcm_uframes_t buffer_size;
 
   xassert (p->handle != 0);
 
-  if ((err = snd_pcm_hw_params_malloc (&p->hwparams)) < 0)
+  err = snd_pcm_hw_params_malloc (&p->hwparams);
+  if (err < 0)
     alsa_sound_perror ("Could not allocate hardware parameter structure", err);
 
-  if ((err = snd_pcm_sw_params_malloc (&p->swparams)) < 0)
+  err = snd_pcm_sw_params_malloc (&p->swparams);
+  if (err < 0)
     alsa_sound_perror ("Could not allocate software parameter structure", err);
 
-  if ((err = snd_pcm_hw_params_any (p->handle, p->hwparams)) < 0)
+  err = snd_pcm_hw_params_any (p->handle, p->hwparams);
+  if (err < 0)
     alsa_sound_perror ("Could not initialize hardware parameter structure", err);
 
-  if ((err = snd_pcm_hw_params_set_access (p->handle, p->hwparams,
-                                           SND_PCM_ACCESS_RW_INTERLEAVED)) < 0)
+  err = snd_pcm_hw_params_set_access (p->handle, p->hwparams,
+                                      SND_PCM_ACCESS_RW_INTERLEAVED);
+  if (err < 0)
     alsa_sound_perror ("Could not set access type", err);
 
   val = sd->format;
-  if ((err = snd_pcm_hw_params_set_format (p->handle, p->hwparams, val)) < 0) 
+  err = snd_pcm_hw_params_set_format (p->handle, p->hwparams, val);
+  if (err < 0) 
     alsa_sound_perror ("Could not set sound format", err);
 
-  val = sd->sample_rate;
-  if ((err = snd_pcm_hw_params_set_rate_near (p->handle, p->hwparams, &val, 0))
-      < 0)
+  uval = sd->sample_rate;
+  err = snd_pcm_hw_params_set_rate_near (p->handle, p->hwparams, &uval, 0);
+  if (err < 0)
     alsa_sound_perror ("Could not set sample rate", err);
   
   val = sd->channels;
-  if ((err = snd_pcm_hw_params_set_channels (p->handle, p->hwparams, val)) < 0)
+  err = snd_pcm_hw_params_set_channels (p->handle, p->hwparams, val);
+  if (err < 0)
     alsa_sound_perror ("Could not set channel count", err);
 
+  err = snd_pcm_hw_params (p->handle, p->hwparams);
+  if (err < 0)
+    alsa_sound_perror ("Could not set parameters", err);
+
 
   err = snd_pcm_hw_params_get_period_size (p->hwparams, &p->period_size, &dir);
   if (err < 0)
@@ -1028,9 +1041,6 @@ alsa_configure (sd)
   if (err < 0)
     alsa_sound_perror("Unable to get buffer size for playback", err);
 
-  if ((err = snd_pcm_hw_params (p->handle, p->hwparams)) < 0)
-    alsa_sound_perror ("Could not set parameters", err);
-
   err = snd_pcm_sw_params_current (p->handle, p->swparams);
   if (err < 0)
     alsa_sound_perror ("Unable to determine current swparams for playback",
@@ -1063,7 +1073,8 @@ alsa_configure (sd)
   snd_pcm_sw_params_free (p->swparams);
   p->swparams = NULL;
   
-  if ((err = snd_pcm_prepare (p->handle)) < 0)
+  err = snd_pcm_prepare (p->handle);
+  if (err < 0)
     alsa_sound_perror ("Could not prepare audio interface for use", err);
   
   if (sd->volume > 0)
@@ -1113,7 +1124,7 @@ alsa_close (sd)
         snd_pcm_sw_params_free (p->swparams);
       if (p->handle)
         {
-          snd_pcm_drain(p->handle);
+          snd_pcm_drain (p->handle);
           snd_pcm_close (p->handle);
         }
       free (p);
@@ -1194,11 +1205,11 @@ alsa_write (sd, buffer, nbytes)
 
   while (nwritten < nbytes)
     {
-      if ((err = snd_pcm_writei (p->handle,
-                                 buffer + nwritten,
-                                 (nbytes - nwritten)/fact)) < 0)
+      err = snd_pcm_writei (p->handle,
+                            buffer + nwritten,
+                            (nbytes - nwritten)/fact);
+      if (err < 0)
         {
-          fprintf(stderr, "Err %d/%s\n", err, snd_strerror(err));
           if (err == -EPIPE)
             {  /* under-run */
               err = snd_pcm_prepare (p->handle);
@@ -1259,7 +1270,8 @@ alsa_init (sd)
   err = snd_pcm_open (&handle, file, SND_PCM_STREAM_PLAYBACK, 0);
   snd_lib_error_set_handler (NULL);
   if (err < 0)
-    return 0;
+      return 0;
+  snd_pcm_close (handle);
 
   sd->fd = -1;
   sd->open = alsa_open;