Mercurial > emacs
changeset 42754:158482d8af9d
(Fplay_sound): Initialize header_size also for :data case.
author | Pavel Janík <Pavel@Janik.cz> |
---|---|
date | Mon, 14 Jan 2002 14:37:17 +0000 |
parents | 895aff55e46c |
children | 38a5ed828230 |
files | src/sound.c |
diffstat | 1 files changed, 26 insertions(+), 26 deletions(-) [+] |
line wrap: on
line diff
--- a/src/sound.c Mon Jan 14 14:27:34 2002 +0000 +++ b/src/sound.c Mon Jan 14 14:37:17 2002 +0000 @@ -90,10 +90,10 @@ { /* ASCII ".snd" */ u_int32_t magic_number; - + /* Offset of data part from start of file. Minimum value is 24. */ u_int32_t data_offset; - + /* Size of data part, 0xffffffff if unknown. */ u_int32_t data_size; @@ -148,7 +148,7 @@ /* 1 = mono, 2 = stereo, 0 = don't set. */ int channels; - + /* Open device SD. */ void (* open) P_ ((struct sound_device *sd)); @@ -157,7 +157,7 @@ /* Configure SD accoring to device-dependent parameters. */ void (* configure) P_ ((struct sound_device *device)); - + /* Choose a device-dependent format for outputting sound S. */ void (* choose_format) P_ ((struct sound_device *sd, struct sound *s)); @@ -199,7 +199,7 @@ Lisp_Object data; /* Play sound file S on device SD. */ - void (* play) P_ ((struct sound *s, struct sound_device *sd)); + void (* play) P_ ((struct sound *s, struct sound_device *sd)); }; /* Indices of attributes in a sound attributes vector. */ @@ -447,8 +447,8 @@ else { s.data = attrs[SOUND_DATA]; - bcopy (XSTRING (s.data)->data, s.header, - min (MAX_SOUND_HEADER_BYTES, STRING_BYTES (XSTRING (s.data)))); + s.header_size = min (MAX_SOUND_HEADER_BYTES, STRING_BYTES (XSTRING (s.data))); + bcopy (XSTRING (s.data)->data, s.header, s.header_size); } /* Find out the type of sound. Give up if we can't tell. */ @@ -461,7 +461,7 @@ sd.file = (char *) alloca (len + 1); strcpy (sd.file, XSTRING (attrs[SOUND_DEVICE])->data); } - + if (INTEGERP (attrs[SOUND_VOLUME])) sd.volume = XFASTINT (attrs[SOUND_VOLUME]); else if (FLOATP (attrs[SOUND_VOLUME])) @@ -610,7 +610,7 @@ s->play = wav_play; return 1; -} +} /* Play RIFF-WAVE audio file S on sound device SD. */ @@ -625,7 +625,7 @@ /* Let the device choose a suitable device-dependent format for the file. */ sd->choose_format (sd, s); - + /* Configure the device. */ sd->sample_size = header->sample_size; sd->sample_rate = header->sample_rate; @@ -645,10 +645,10 @@ char *buffer; int nbytes; int blksize = 2048; - + buffer = (char *) alloca (blksize); lseek (s->fd, sizeof *header, SEEK_SET); - + while ((nbytes = emacs_read (s->fd, buffer, blksize)) > 0) sd->write (sd, buffer, nbytes); @@ -663,7 +663,7 @@ Sun Audio (*.au) ***********************************************************************/ -/* Sun audio file encodings. */ +/* Sun audio file encodings. */ enum au_encoding { @@ -689,18 +689,18 @@ struct sound *s; { struct au_header *header = (struct au_header *) s->header; - + if (s->header_size < sizeof *header || bcmp (s->header, ".snd", 4) != 0) return 0; - + header->magic_number = be2hl (header->magic_number); header->data_offset = be2hl (header->data_offset); header->data_size = be2hl (header->data_size); header->encoding = be2hl (header->encoding); header->sample_rate = be2hl (header->sample_rate); header->channels = be2hl (header->channels); - + /* Set up the interface functions for AU. */ s->type = SUN_AUDIO; s->play = au_play; @@ -733,15 +733,15 @@ int blksize = 2048; char *buffer; int nbytes; - + /* Seek */ lseek (s->fd, header->data_offset, SEEK_SET); - + /* Copy sound data to the device. */ buffer = (char *) alloca (blksize); while ((nbytes = emacs_read (s->fd, buffer, blksize)) > 0) sd->write (sd, buffer, nbytes); - + if (nbytes < 0) sound_perror ("Error reading sound file"); } @@ -765,13 +765,13 @@ struct sound_device *sd; { char *file; - + /* Open the sound device. Default is /dev/dsp. */ if (sd->file) file = sd->file; else file = DEFAULT_SOUND_DEVICE; - + sd->fd = emacs_open (file, O_WRONLY, 0); if (sd->fd < 0) sound_perror (file); @@ -785,7 +785,7 @@ struct sound_device *sd; { int val; - + xassert (sd->fd >= 0); /* On GNU/Linux, it seems that the device driver doesn't like to be @@ -824,7 +824,7 @@ /* This may fail if there is no mixer. Ignore the failure. */ ioctl (sd->fd, SOUND_MIXER_WRITE_PCM, &volume); } - + turn_on_atimers (1); #ifdef SIGIO sigunblock (sigmask (SIGIO)); @@ -847,10 +847,10 @@ sigblock (sigmask (SIGIO)); #endif turn_on_atimers (0); - + /* Flush sound data, and reset the device. */ ioctl (sd->fd, SNDCTL_DSP_SYNC, NULL); - + turn_on_atimers (1); #ifdef SIGIO sigunblock (sigmask (SIGIO)); @@ -890,7 +890,7 @@ case AU_ENCODING_IEEE64: sd->format = AFMT_MU_LAW; break; - + case AU_ENCODING_8: case AU_ENCODING_16: case AU_ENCODING_24: